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/LDIFBackend.java | 58 +++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 35 insertions(+), 23 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/LDIFBackend.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/LDIFBackend.java
index 0610720..8232acf 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/LDIFBackend.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/LDIFBackend.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.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
@@ -425,8 +426,27 @@
/** {@inheritDoc} */
@Override
- public long numSubordinates(DN entryDN, boolean subtree)
- throws DirectoryException
+ public long getNumberOfChildren(DN parentDN) throws DirectoryException
+ {
+ checkNotNull(parentDN, "parentDN must not be null");
+ return getNumberOfSubordinates(parentDN, false);
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public long getNumberOfEntriesInBaseDN(DN baseDN) throws DirectoryException
+ {
+ checkNotNull(baseDN, "baseDN must not be null");
+ if (!Arrays.asList(baseDNs).contains(baseDN))
+ {
+ throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, ERR_LDIF_BACKEND_NUM_SUBORDINATES_NO_SUCH_ENTRY
+ .get(baseDN));
+ }
+ final int baseDNIfExists = childDNs.containsKey(baseDN) ? 1 : 0;
+ return getNumberOfSubordinates(baseDN, true) + baseDNIfExists;
+ }
+
+ private long getNumberOfSubordinates(DN entryDN, boolean includeSubtree) throws DirectoryException
{
backendLock.readLock().lock();
@@ -441,30 +461,22 @@
{
return 0L;
}
- else
- {
- throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
- ERR_LDIF_BACKEND_NUM_SUBORDINATES_NO_SUCH_ENTRY.get(entryDN));
- }
+ throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, ERR_LDIF_BACKEND_NUM_SUBORDINATES_NO_SUCH_ENTRY
+ .get(entryDN));
}
- else
- {
- if(!subtree)
- {
- return childDNSet.size();
- }
- else
- {
- long count = 0;
- for(DN childDN : childDNSet)
- {
- count += numSubordinates(childDN, true);
- count ++;
- }
- return count;
- }
+ if (!includeSubtree)
+ {
+ return childDNSet.size();
}
+
+ long count = 0;
+ for (DN childDN : childDNSet)
+ {
+ count += getNumberOfSubordinates(childDN, true);
+ count++;
+ }
+ return count;
}
finally
{
--
Gitblit v1.10.0