From d3e64655c9ebfefffbe641d58eeacdd8a8fb72dd Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 17 Aug 2015 08:21:47 +0000
Subject: [PATCH] Code improvements

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java  |    2 
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java |   24 ++++--------
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VerifyJob.java      |   10 +++--
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DN2URI.java         |   71 +++++++++++++++++++++++------------
 4 files changed, 62 insertions(+), 45 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DN2URI.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DN2URI.java
index 9ecf754..6924540 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DN2URI.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/DN2URI.java
@@ -30,9 +30,11 @@
 import static org.opends.server.backends.pluggable.DnKeyFormat.*;
 import static org.opends.server.util.ServerConstants.*;
 
+import java.util.AbstractMap.SimpleImmutableEntry;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.forgerock.i18n.slf4j.LocalizedLogger;
@@ -43,7 +45,6 @@
 import org.forgerock.opendj.ldap.ConditionResult;
 import org.forgerock.opendj.ldap.ResultCode;
 import org.forgerock.opendj.ldap.SearchScope;
-import org.forgerock.util.Pair;
 import org.opends.server.backends.pluggable.spi.Cursor;
 import org.opends.server.backends.pluggable.spi.ReadableTransaction;
 import org.opends.server.backends.pluggable.spi.StorageRuntimeException;
@@ -74,7 +75,6 @@
  * as in dn2id so that all referrals in a subtree can be retrieved by cursoring
  * through a range of the records.
  */
-@SuppressWarnings("javadoc")
 class DN2URI extends AbstractTree
 {
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
@@ -135,31 +135,57 @@
   }
 
   /** Decodes the value as a pair where the first element is the DN key and the second is the actual value. */
-  private Pair<DN, List<String>> decode(ByteSequence bs) throws StorageRuntimeException
+  private Map.Entry<DN, List<String>> decode(ByteSequence bs) throws StorageRuntimeException
+  {
+    return decode0(bs, true);
+  }
+
+  private Collection<String> decodeUrisOnly(ByteSequence oldValue)
+  {
+    return decode0(oldValue, false).getValue();
+  }
+
+  private Map.Entry<DN, List<String>> decode0(ByteSequence bs, boolean decodeDN)
   {
     if (!bs.isEmpty())
     {
       ByteSequenceReader r = bs.asReader();
-      final int dnLength = r.getInt();
-      DN dn = null;
+      DN dn = decodeDN(r, decodeDN);
+      List<String> uris = decodeUris(r);
+      return new SimpleImmutableEntry<>(dn, uris);
+    }
+    return new SimpleImmutableEntry<>(null, null);
+  }
+
+  private DN decodeDN(ByteSequenceReader r, boolean decodeDN)
+  {
+    final int dnLength = r.getInt();
+    if (decodeDN)
+    {
       try
       {
-        dn = DN.valueOf(r.getString(dnLength));
+        return DN.valueOf(r.getString(dnLength));
       }
       catch (DirectoryException e)
       {
         throw new StorageRuntimeException("Unable to decode DN from binary value", e);
       }
-      final int nbElems = r.getInt();
-      List<String> results = new ArrayList<>(nbElems);
-      for (int i = 0; i < nbElems; i++)
-      {
-        final int stringLength = r.getInt();
-        results.add(r.getString(stringLength));
-      }
-      return Pair.of(dn, results);
     }
-    return Pair.empty();
+
+    r.skip(dnLength);
+    return null;
+  }
+
+  private List<String> decodeUris(ByteSequenceReader r)
+  {
+    final int nbElems = r.getInt();
+    List<String> results = new ArrayList<>(nbElems);
+    for (int i = 0; i < nbElems; i++)
+    {
+      final int stringLength = r.getInt();
+      results.add(r.getString(stringLength));
+    }
+    return results;
   }
 
   /**
@@ -181,8 +207,7 @@
       {
         if (oldValue != null)
         {
-          final Pair<DN, List<String>> dnAndUris = decode(oldValue);
-          final Collection<String> newUris = dnAndUris.getSecond();
+          final Collection<String> newUris = decodeUrisOnly(oldValue);
           if (newUris.addAll(labeledURIs))
           {
             return encode(dn, newUris);
@@ -237,8 +262,7 @@
       {
         if (oldValue != null)
         {
-          final Pair<DN, List<String>> dnAndUris = decode(oldValue);
-          final Collection<String> oldUris = dnAndUris.getSecond();
+          final Collection<String> oldUris = decodeUrisOnly(oldValue);
           if (oldUris.removeAll(labeledURIs))
           {
             return encode(dn, oldUris);
@@ -524,8 +548,7 @@
         if (cursor.positionToKey(toKey(dn)))
         {
           // Construct a set of all the labeled URIs in the referral.
-          final Pair<DN, List<String>> dnAndUris = decode(cursor.getValue());
-          Collection<String> labeledURIs = dnAndUris.getSecond();
+          Collection<String> labeledURIs = decodeUrisOnly(cursor.getValue());
           throwReferralException(targetDN, dn, labeledURIs, searchScope);
         }
       }
@@ -589,9 +612,9 @@
         }
 
         // Construct a list of all the URIs in the referral.
-        final Pair<DN, List<String>> dnAndUris = decode(cursor.getValue());
-        final DN dn = dnAndUris.getFirst();
-        final Collection<String> labeledURIs = dnAndUris.getSecond();
+        final Map.Entry<DN, List<String>> dnAndUris = decode(cursor.getValue());
+        final DN dn = dnAndUris.getKey();
+        final Collection<String> labeledURIs = dnAndUris.getValue();
         SearchResultReference reference = toSearchResultReference(dn, labeledURIs, searchOp.getScope());
         if (!searchOp.returnReference(dn, reference))
         {
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java
index 0ceece0..289e0bc 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/EntryContainer.java
@@ -189,7 +189,6 @@
   ConfigurationAddListener<BackendIndexCfg>,
   ConfigurationDeleteListener<BackendIndexCfg>
   {
-    /** {@inheritDoc} */
     @Override
     public boolean isConfigurationAddAcceptable(final BackendIndexCfg cfg, List<LocalizableMessage> unacceptableReasons)
     {
@@ -205,7 +204,6 @@
       }
     }
 
-    /** {@inheritDoc} */
     @Override
     public ConfigChangeResult applyConfigurationAdd(final BackendIndexCfg cfg)
     {
@@ -236,7 +234,6 @@
       return ccr;
     }
 
-    /** {@inheritDoc} */
     @Override
     public boolean isConfigurationDeleteAcceptable(
         BackendIndexCfg cfg, List<LocalizableMessage> unacceptableReasons)
@@ -245,7 +242,6 @@
       return true;
     }
 
-    /** {@inheritDoc} */
     @Override
     public ConfigChangeResult applyConfigurationDelete(final BackendIndexCfg cfg)
     {
@@ -285,7 +281,6 @@
   ConfigurationAddListener<BackendVLVIndexCfg>,
   ConfigurationDeleteListener<BackendVLVIndexCfg>
   {
-    /** {@inheritDoc} */
     @Override
     public boolean isConfigurationAddAcceptable(
         BackendVLVIndexCfg cfg, List<LocalizableMessage> unacceptableReasons)
@@ -341,7 +336,6 @@
       return true;
     }
 
-    /** {@inheritDoc} */
     @Override
     public ConfigChangeResult applyConfigurationAdd(final BackendVLVIndexCfg cfg)
     {
@@ -372,7 +366,6 @@
       return ccr;
     }
 
-    /** {@inheritDoc} */
     @Override
     public boolean isConfigurationDeleteAcceptable(BackendVLVIndexCfg cfg, List<LocalizableMessage> unacceptableReasons)
     {
@@ -380,7 +373,6 @@
       return true;
     }
 
-    /** {@inheritDoc} */
     @Override
     public ConfigChangeResult applyConfigurationDelete(final BackendVLVIndexCfg cfg)
     {
@@ -605,7 +597,7 @@
   }
 
   /**
-   * Look for an VLV index for the given index name.
+   * Look for a VLV index for the given index name.
    *
    * @param vlvIndexName The vlv index name for which an vlv index is needed.
    * @return The VLV index or null if there is none with that name.
@@ -2539,8 +2531,7 @@
         @Override
         public Long run(ReadableTransaction txn) throws Exception
         {
-          final int baseDnIfExists = dn2id.get(txn, baseDN) != null ? 1 : 0;
-          return id2childrenCount.getTotalCount(txn) + baseDnIfExists;
+          return getNumberOfEntriesInBaseDN0(txn);
         }
       });
     }
@@ -2550,6 +2541,12 @@
     }
   }
 
+  long getNumberOfEntriesInBaseDN0(ReadableTransaction txn)
+  {
+    final int baseDnIfExists = dn2id.get(txn, baseDN) != null ? 1 : 0;
+    return id2childrenCount.getTotalCount(txn) + baseDnIfExists;
+  }
+
   /**
    * Determine whether the provided operation has the ManageDsaIT request
    * control.
@@ -2680,7 +2677,6 @@
     }
   }
 
-  /** {@inheritDoc} */
   @Override
   public DN getBaseDN()
   {
@@ -2702,7 +2698,6 @@
     return dn.parent();
   }
 
-  /** {@inheritDoc} */
   @Override
   public boolean isConfigurationChangeAcceptable(
       PluggableBackendCfg cfg, List<LocalizableMessage> unacceptableReasons)
@@ -2712,7 +2707,6 @@
     return true;
   }
 
-  /** {@inheritDoc} */
   @Override
   public ConfigChangeResult applyConfigurationChange(final PluggableBackendCfg cfg)
   {
@@ -3127,10 +3121,8 @@
     exclusiveLock.unlock();
   }
 
-  /** {@inheritDoc} */
   @Override
   public String toString() {
     return treePrefix;
   }
-
 }
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java
index 8e3df33..9886da7 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/RootContainer.java
@@ -409,7 +409,7 @@
             ec.sharedLock.lock();
             try
             {
-              entryCount += ec.getNumberOfEntriesInBaseDN();
+              entryCount += ec.getNumberOfEntriesInBaseDN0(txn);
             }
             finally
             {
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VerifyJob.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VerifyJob.java
index a8619ef..f16d960 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VerifyJob.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/VerifyJob.java
@@ -28,6 +28,7 @@
 
 import static org.opends.messages.BackendMessages.*;
 import static org.opends.server.backends.pluggable.DnKeyFormat.*;
+import static org.opends.server.backends.pluggable.SuffixContainer.*;
 import static org.opends.server.backends.pluggable.VLVIndex.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -192,11 +193,11 @@
         for (String index : list)
         {
           String lowerName = index.toLowerCase();
-          if ("dn2id".equals(lowerName))
+          if (DN2ID_INDEX_NAME.equals(lowerName))
           {
             verifyDN2ID = true;
           }
-          else if ("id2childrencount".equals(lowerName))
+          else if (ID2CHILDREN_COUNT_NAME.equals(lowerName))
           {
             verifyID2ChildrenCount = true;
           }
@@ -207,10 +208,11 @@
               throw new StorageRuntimeException(ERR_VLV_INDEX_NOT_CONFIGURED.get(lowerName).toString());
             }
 
-            VLVIndex vlvIndex = entryContainer.getVLVIndex(lowerName.substring(4));
+            String vlvIndexName = lowerName.substring(4);
+            VLVIndex vlvIndex = entryContainer.getVLVIndex(vlvIndexName);
             if(vlvIndex == null)
             {
-              throw new StorageRuntimeException(ERR_VLV_INDEX_NOT_CONFIGURED.get(lowerName.substring(4)).toString());
+              throw new StorageRuntimeException(ERR_VLV_INDEX_NOT_CONFIGURED.get(vlvIndexName).toString());
             }
 
             vlvIndexList.add(vlvIndex);

--
Gitblit v1.10.0