From 9fe774de65a84af8273a976bda67cf94e4aa21ad Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 25 May 2016 21:54:11 +0000
Subject: [PATCH] OPENDJ-2816 With pdb backend, error while doing modrdn on an entry
---
opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java | 29 ++---------------------------
1 files changed, 2 insertions(+), 27 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java
index 81b74bd..f51a980 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pdb/PDBStorage.java
@@ -45,11 +45,11 @@
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.config.server.ConfigChangeResult;
import org.forgerock.opendj.config.server.ConfigException;
+import org.forgerock.opendj.config.server.ConfigurationChangeListener;
import org.forgerock.opendj.ldap.ByteSequence;
import org.forgerock.opendj.ldap.ByteString;
-import org.forgerock.util.Reject;
-import org.forgerock.opendj.config.server.ConfigurationChangeListener;
import org.forgerock.opendj.server.config.server.PDBBackendCfg;
+import org.forgerock.util.Reject;
import org.opends.server.api.Backupable;
import org.opends.server.api.DiskSpaceMonitorHandler;
import org.opends.server.backends.pluggable.spi.AccessMode;
@@ -698,7 +698,6 @@
}
private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
- private final ThreadLocal<Boolean> isInsideWriteTransaction = new ThreadLocal<Boolean>();
private final ServerContext serverContext;
private final File backendDirectory;
@@ -846,8 +845,6 @@
{
// This check may be unnecessary for PDB, but it will help us detect bad business logic
// in the pluggable backend that would cause problems for JE.
- throwIfNestedInWriteTransaction();
-
final Transaction txn = db.getTransaction();
for (;;)
{
@@ -895,13 +892,10 @@
@Override
public void write(final WriteOperation operation) throws Exception
{
- throwIfNestedInWriteTransaction();
-
final Transaction txn = db.getTransaction();
for (;;)
{
txn.begin();
- isInsideWriteTransaction.set(Boolean.TRUE);
try
{
try (final StorageImpl storageImpl = newStorageImpl())
@@ -932,29 +926,10 @@
finally
{
txn.end();
- isInsideWriteTransaction.set(Boolean.FALSE);
}
}
}
- /**
- * A nested transaction within a write transaction may cause a self-deadlock where an inner read
- * attempts to read-lock a record that has been write-locked in an outer write.
- * <p>
- * It would also be good to forbid any nested transactions, but it is impractical due to some
- * transactions being deeply nested into the call hierarchy.
- *
- * @see <a href="https://bugster.forgerock.org/jira/browse/OPENDJ-2645">OPENDJ-2645</a>
- */
- private void throwIfNestedInWriteTransaction()
- {
- if (Boolean.TRUE.equals(isInsideWriteTransaction.get()))
- {
- throw new IllegalStateException("OpenDJ does not support transactions nested in a write transaction. "
- + "Code is forbidden from opening one.");
- }
- }
-
@Override
public boolean supportsBackupAndRestore()
{
--
Gitblit v1.10.0