From 9f0904fda87bfcf921deeccdbaeafe834fbad696 Mon Sep 17 00:00:00 2001
From: Yannick Lecaillez <yannick.lecaillez@forgerock.com>
Date: Fri, 24 Apr 2015 14:30:47 +0000
Subject: [PATCH] OPENDJ-1725: Persistit: very long recovery and many discarded txns after addrate test

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/MonitorBackend.java |   39 ++++++++++++++++++++++++---------------
 1 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/MonitorBackend.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/MonitorBackend.java
index 630215b..a9358e6 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/MonitorBackend.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/MonitorBackend.java
@@ -26,6 +26,7 @@
  */
 package org.opends.server.backends;
 
+import static org.forgerock.util.Reject.*;
 import static org.opends.messages.BackendMessages.*;
 import static org.opends.messages.ConfigMessages.*;
 import static org.opends.server.config.ConfigConstants.*;
@@ -456,31 +457,39 @@
 
   /** {@inheritDoc} */
   @Override
-  public long numSubordinates(final DN entryDN, final boolean subtree)
-      throws DirectoryException
+  public long getNumberOfEntriesInBaseDN(final DN baseDN) throws DirectoryException {
+    checkNotNull(baseDN, "baseDN must not be null");
+    return getNumberOfSubordinates(baseDN, true) + 1;
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public long getNumberOfChildren(final DN parentDN) throws DirectoryException {
+    checkNotNull(parentDN, "parentDN must not be null");
+    return getNumberOfSubordinates(parentDN, false);
+  }
+
+  private long getNumberOfSubordinates(final DN entryDN, final boolean includeSubtree) throws DirectoryException
   {
     final NavigableMap<DN, MonitorProvider<?>> dit = getDIT();
     if (!dit.containsKey(entryDN))
     {
       return -1L;
     }
-    else
+    long count = 0;
+    final int childDNSize = entryDN.size() + 1;
+    for (final DN dn : dit.tailMap(entryDN, false).navigableKeySet())
     {
-      long count = 0;
-      final int childDNSize = entryDN.size() + 1;
-      for (final DN dn : dit.tailMap(entryDN, false).navigableKeySet())
+      if (!dn.isDescendantOf(entryDN))
       {
-        if (!dn.isDescendantOf(entryDN))
-        {
-          break;
-        }
-        else if (subtree || dn.size() == childDNSize)
-        {
-          count++;
-        }
+        break;
       }
-      return count;
+      else if (includeSubtree || dn.size() == childDNSize)
+      {
+        count++;
+      }
     }
+    return count;
   }
 
   /** {@inheritDoc} */

--
Gitblit v1.10.0