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/pluggable/BackendImpl.java | 134 ++++++++++++++++++++++++++++++--------------
1 files changed, 90 insertions(+), 44 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendImpl.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendImpl.java
index 27b3ec9..f2b0f6e 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendImpl.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/BackendImpl.java
@@ -26,6 +26,7 @@
*/
package org.opends.server.backends.pluggable;
+import static org.forgerock.util.Reject.*;
import static org.opends.messages.BackendMessages.*;
import static org.opends.messages.JebMessages.*;
import static org.opends.server.core.DirectoryServer.*;
@@ -171,7 +172,6 @@
}
catch (StorageRuntimeException e)
{
- logger.traceException(e);
LocalizableMessage message = WARN_JEB_GET_ENTRY_COUNT_FAILED.get(e.getMessage());
throw new InitializationException(message, e);
}
@@ -184,7 +184,6 @@
}
catch (Exception e)
{
- logger.traceException(e);
throw new InitializationException(ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(dn, e), e);
}
}
@@ -318,18 +317,72 @@
@Override
public ConditionResult hasSubordinates(DN entryDN) throws DirectoryException
{
- long ret = numSubordinates(entryDN, false);
- if(ret < 0)
- {
- return ConditionResult.UNDEFINED;
+ EntryContainer container;
+ try {
+ container = accessBegin(null, entryDN);
}
- return ConditionResult.valueOf(ret != 0);
+ catch (DirectoryException de)
+ {
+ if (de.getResultCode() == ResultCode.UNDEFINED)
+ {
+ return ConditionResult.UNDEFINED;
+ }
+ throw de;
+ }
+
+ container.sharedLock.lock();
+ try
+ {
+ return ConditionResult.valueOf(container.hasSubordinates(entryDN));
+ }
+ catch (StorageRuntimeException e)
+ {
+ throw createDirectoryException(e);
+ }
+ finally
+ {
+ container.sharedLock.unlock();
+ accessEnd();
+ }
}
/** {@inheritDoc} */
@Override
- public long numSubordinates(DN entryDN, boolean subtree) throws DirectoryException
+ public long getNumberOfEntriesInBaseDN(DN baseDN) throws DirectoryException
{
+ checkNotNull(baseDN, "baseDN must not be null");
+ final EntryContainer ec;
+
+ try {
+ ec = accessBegin(null, baseDN);
+ }
+ catch (DirectoryException de)
+ {
+ throw de;
+ }
+
+ ec.sharedLock.lock();
+ try
+ {
+ return ec.getNumberOfEntriesInBaseDN();
+ }
+ catch (Exception e)
+ {
+ throw new DirectoryException(
+ DirectoryServer.getServerErrorResultCode(), LocalizableMessage.raw(e.getMessage()), e);
+ }
+ finally
+ {
+ ec.sharedLock.unlock();
+ accessEnd();
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public long getNumberOfChildren(DN parentDN) throws DirectoryException
+ {
+ checkNotNull(parentDN, "parentDN must not be null");
EntryContainer ec;
/*
@@ -337,7 +390,7 @@
* error if the EntryContainer is null...
*/
try {
- ec = accessBegin(null, entryDN);
+ ec = accessBegin(null, parentDN);
}
catch (DirectoryException de)
{
@@ -351,17 +404,31 @@
ec.sharedLock.lock();
try
{
- long count = ec.getNumSubordinates(entryDN, subtree);
- if(count == Long.MAX_VALUE)
- {
- // The index entry limit has exceeded and there is no count maintained.
- return -1;
- }
- return count;
+ return ec.getNumberOfChildren(parentDN);
}
catch (StorageRuntimeException e)
{
- logger.traceException(e);
+ throw createDirectoryException(e);
+ }
+ finally
+ {
+ ec.sharedLock.unlock();
+ accessEnd();
+ }
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public boolean entryExists(final DN entryDN) throws DirectoryException
+ {
+ EntryContainer ec = accessBegin(null, entryDN);
+ ec.sharedLock.lock();
+ try
+ {
+ return ec.entryExists(entryDN);
+ }
+ catch (StorageRuntimeException e)
+ {
throw createDirectoryException(e);
}
finally
@@ -383,7 +450,6 @@
}
catch (StorageRuntimeException e)
{
- logger.traceException(e);
throw createDirectoryException(e);
}
finally
@@ -406,7 +472,6 @@
}
catch (StorageRuntimeException e)
{
- logger.traceException(e);
throw createDirectoryException(e);
}
finally
@@ -430,7 +495,6 @@
}
catch (StorageRuntimeException e)
{
- logger.traceException(e);
throw createDirectoryException(e);
}
finally
@@ -455,7 +519,6 @@
}
catch (StorageRuntimeException e)
{
- logger.traceException(e);
throw createDirectoryException(e);
}
finally
@@ -488,7 +551,6 @@
}
catch (StorageRuntimeException e)
{
- logger.traceException(e);
throw createDirectoryException(e);
}
finally
@@ -512,7 +574,6 @@
}
catch (StorageRuntimeException e)
{
- logger.traceException(e);
throw createDirectoryException(e);
}
finally
@@ -552,12 +613,10 @@
}
catch (IOException ioe)
{
- logger.traceException(ioe);
throw new DirectoryException(errorRC, ERR_JEB_EXPORT_IO_ERROR.get(ioe.getMessage()), ioe);
}
catch (StorageRuntimeException de)
{
- logger.traceException(de);
throw createDirectoryException(de);
}
catch (ConfigException ce)
@@ -570,7 +629,6 @@
{
throw (DirectoryException) e;
}
- logger.traceException(e);
throw new DirectoryException(errorRC, e.getMessageObject(), e);
}
finally
@@ -619,7 +677,6 @@
}
catch (StorageRuntimeException e)
{
- logger.traceException(e);
throw new DirectoryException(getServerErrorResultCode(), LocalizableMessage.raw(e.getMessage()), e);
}
catch (DirectoryException e)
@@ -628,12 +685,10 @@
}
catch (OpenDsException e)
{
- logger.traceException(e);
throw new DirectoryException(getServerErrorResultCode(), e.getMessageObject(), e);
}
catch (ConfigException e)
{
- logger.traceException(e);
throw new DirectoryException(getServerErrorResultCode(), e.getMessageObject(), e);
}
finally
@@ -673,13 +728,10 @@
{
rootContainer = getReadOnlyRootContainer();
}
-
- VerifyJob verifyJob = new VerifyJob(verifyConfig);
- return verifyJob.verifyBackend(rootContainer);
+ return new VerifyJob(rootContainer, verifyConfig).verifyBackend();
}
catch (StorageRuntimeException e)
{
- logger.traceException(e);
throw createDirectoryException(e);
}
finally
@@ -737,28 +789,23 @@
}
catch (ExecutionException execEx)
{
- logger.traceException(execEx);
- throw new DirectoryException(errorRC, ERR_EXECUTION_ERROR.get(execEx.getMessage()));
+ throw new DirectoryException(errorRC, ERR_EXECUTION_ERROR.get(execEx.getMessage()), execEx);
}
catch (InterruptedException intEx)
{
- logger.traceException(intEx);
- throw new DirectoryException(errorRC, ERR_INTERRUPTED_ERROR.get(intEx.getMessage()));
+ throw new DirectoryException(errorRC, ERR_INTERRUPTED_ERROR.get(intEx.getMessage()), intEx);
}
catch (ConfigException ce)
{
- logger.traceException(ce);
- throw new DirectoryException(errorRC, ce.getMessageObject());
+ throw new DirectoryException(errorRC, ce.getMessageObject(), ce);
}
catch (StorageRuntimeException e)
{
- logger.traceException(e);
- throw new DirectoryException(errorRC, LocalizableMessage.raw(e.getMessage()));
+ throw new DirectoryException(errorRC, LocalizableMessage.raw(e.getMessage()), e);
}
catch (InitializationException e)
{
- logger.traceException(e);
- throw new InitializationException(e.getMessageObject());
+ throw new InitializationException(e.getMessageObject(), e);
}
finally
{
@@ -961,7 +1008,6 @@
}
catch (StorageRuntimeException e)
{
- logger.traceException(e);
LocalizableMessage message = ERR_JEB_OPEN_ENV_FAIL.get(e.getMessage());
throw new InitializationException(message, e);
}
--
Gitblit v1.10.0