From 22094368c2865dcfb6daf8366425212b721a4657 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Thu, 05 Feb 2009 17:42:14 +0000
Subject: [PATCH] Merge ASN1 branch to trunk

---
 opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java |   48 +++++++++++++++++++++++++++++-------------------
 1 files changed, 29 insertions(+), 19 deletions(-)

diff --git a/opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java b/opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java
index 0a212b1..8ecd2a6 100644
--- a/opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java
+++ b/opends/src/server/org/opends/server/extensions/FileSystemEntryCache.java
@@ -68,18 +68,8 @@
 import org.opends.server.backends.jeb.ConfigurableEnvironment;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
-import org.opends.server.types.ConfigChangeResult;
-import org.opends.server.types.DN;
-import org.opends.server.types.Entry;
-import org.opends.server.types.EntryEncodeConfig;
-import org.opends.server.types.InitializationException;
-import org.opends.server.types.ResultCode;
-import org.opends.server.types.SearchFilter;
-import org.opends.server.types.FilePermission;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.OpenDsException;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.types.Attribute;
+import org.opends.server.types.*;
 import org.opends.server.util.ServerConstants;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
@@ -215,6 +205,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   @SuppressWarnings("unchecked")
   public void initializeEntryCache(FileSystemEntryCacheCfg configuration)
           throws ConfigException, InitializationException {
@@ -441,6 +432,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   @SuppressWarnings("unchecked")
   public void finalizeEntryCache() {
 
@@ -530,6 +522,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public boolean containsEntry(DN entryDN)
   {
     if (entryDN == null) {
@@ -551,6 +544,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public Entry getEntry(DN entryDN) {
     // Get the entry from the DN map if it is present.  If not, then return
     // null.
@@ -575,6 +569,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public long getEntryID(DN entryDN) {
     long entryID = -1;
     cacheReadLock.lock();
@@ -592,6 +587,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public DN getEntryDN(Backend backend, long entryID) {
 
     DN entryDN = null;
@@ -616,12 +612,15 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public void putEntry(Entry entry, Backend backend, long entryID)
   {
     try {
-      byte[] entryBytes = entry.encode(encodeConfig);
+      // TODO: Cache the buffer?
+      ByteStringBuilder buffer = new ByteStringBuilder();
+      entry.encode(buffer, encodeConfig);
       putEntryToDB(entry.getDN().toNormalizedString(),
-        backend, entryID, entryBytes);
+        backend, entryID, buffer);
     } catch (Exception e) {
       if (debugEnabled()) {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
@@ -632,6 +631,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public boolean putEntryIfAbsent(Entry entry, Backend backend, long entryID)
   {
     cacheReadLock.lock();
@@ -646,9 +646,11 @@
       cacheReadLock.unlock();
     }
     try {
-      byte[] entryBytes = entry.encode(encodeConfig);
+      // TODO: Cache the buffer?
+      ByteStringBuilder buffer = new ByteStringBuilder();
+      entry.encode(buffer, encodeConfig);
       return putEntryToDB(entry.getDN().toNormalizedString(),
-        backend, entryID, entryBytes);
+        backend, entryID, buffer);
     } catch (Exception e) {
       if (debugEnabled()) {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
@@ -661,6 +663,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public void removeEntry(DN entryDN) {
 
     cacheWriteLock.lock();
@@ -701,6 +704,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   @SuppressWarnings("unchecked")
   public void clear() {
 
@@ -743,6 +747,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public void clearBackend(Backend backend) {
 
     cacheWriteLock.lock();
@@ -795,6 +800,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public void clearSubtree(DN baseDN) {
     // Determine which backend should be used for the provided base DN.  If
     // there is none, then we don't need to do anything.
@@ -914,6 +920,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public void handleLowMemory() {
     // This is about all we can do.
     if (entryCacheEnv != null) {
@@ -1265,6 +1272,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public ArrayList<Attribute> getMonitorData()
   {
     ArrayList<Attribute> attrs = new ArrayList<Attribute>();
@@ -1295,6 +1303,7 @@
   /**
    * {@inheritDoc}
    */
+  @Override
   public Long getCacheCount()
   {
     return new Long(entryCacheIndex.dnMap.size());
@@ -1320,7 +1329,8 @@
               primaryData,
               LockMode.DEFAULT) == OperationStatus.SUCCESS) {
 
-        Entry entry = Entry.decode(primaryData.getData());
+        Entry entry = Entry.decode(
+            ByteString.wrap(primaryData.getData()).asReader());
         entry.setDN(entryDN);
         return entry;
       } else {
@@ -1340,7 +1350,6 @@
   /**
    * Encodes and stores the entry in the JE backend db.
    *
-   * @param  entry    The entry to store in the cache.
    * @param  backend  The backend with which the entry is associated.
    * @param  entryID  The entry ID within the provided backend that uniquely
    *                  identifies the specified entry.
@@ -1353,7 +1362,7 @@
   private boolean putEntryToDB(String dnString,
                                Backend backend,
                                long entryID,
-                               byte[] entryBytes) {
+                               ByteStringBuilder entryBytes) {
     try {
       // Obtain a lock on the cache.  If this fails, then don't do anything.
       if (!cacheWriteLock.tryLock(getLockTimeout(), TimeUnit.MILLISECONDS)) {
@@ -1398,7 +1407,8 @@
 
       // Create data and put this cache entry into the database.
       if (entryCacheDB.put(null, cacheEntryKey,
-          new DatabaseEntry(entryBytes)) == OperationStatus.SUCCESS) {
+          new DatabaseEntry(entryBytes.getBackingArray(), 0,
+              entryBytes.length())) == OperationStatus.SUCCESS) {
         // Add the entry to the cache index maps.
         Map<Long,String> map =
           entryCacheIndex.backendMap.get(backend.getBackendID());

--
Gitblit v1.10.0