From 53af64be39d1f197ed01116df67f1e458ac7d90f Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 24 Jun 2013 11:56:44 +0000
Subject: [PATCH] OPENDJ-885 - Replication replay may lose changes if it can't acquire a writeLock
---
opendj-sdk/opends/src/server/org/opends/server/types/LockManager.java | 10
opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java | 44 --
opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java | 34 -
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java | 96 +-----
opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java | 32 -
opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java | 84 ++---
opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java | 31 -
opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java | 45 --
opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java | 37 --
opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java | 81 +----
opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV1Control.java | 36 -
opendj-sdk/opends/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java | 36 --
opendj-sdk/opends/src/server/org/opends/server/extensions/SASLContext.java | 28 -
opendj-sdk/opends/src/server/org/opends/server/types/Entry.java | 35 --
opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java | 27 -
opendj-sdk/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java | 20
opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java | 30 -
opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java | 44 --
opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java | 35 -
opendj-sdk/opends/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java | 23 -
20 files changed, 186 insertions(+), 622 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java
index a317077..997e1fb 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java
@@ -23,7 +23,7 @@
*
*
* Copyright 2008-2010 Sun Microsystems, Inc.
- * Portions Copyright 2011-2012 ForgeRock AS
+ * Portions Copyright 2011-2013 ForgeRock AS
* Portions Copyright 2013 Manuel Gaupp
*/
package org.opends.server.authorization.dseecompat;
@@ -61,30 +61,7 @@
import org.opends.server.protocols.internal.InternalClientConnection;
import org.opends.server.protocols.internal.InternalSearchOperation;
import org.opends.server.protocols.ldap.LDAPControl;
-import org.opends.server.types.Attribute;
-import org.opends.server.types.AttributeBuilder;
-import org.opends.server.types.AttributeType;
-import org.opends.server.types.AttributeValue;
-import org.opends.server.types.AttributeValues;
-import org.opends.server.types.AuthenticationInfo;
-import org.opends.server.types.Control;
-import org.opends.server.types.DN;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.DereferencePolicy;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.Entry;
-import org.opends.server.types.InitializationException;
-import org.opends.server.types.LockManager;
-import org.opends.server.types.Modification;
-import org.opends.server.types.ModificationType;
-import org.opends.server.types.Operation;
-import org.opends.server.types.Privilege;
-import org.opends.server.types.RDN;
-import org.opends.server.types.ResultCode;
-import org.opends.server.types.SearchFilter;
-import org.opends.server.types.SearchResultEntry;
-import org.opends.server.types.SearchResultReference;
-import org.opends.server.types.SearchScope;
+import org.opends.server.types.*;
import org.opends.server.workflowelement.localbackend.*;
@@ -1096,15 +1073,7 @@
LocalBackendModifyDNOperation op) throws DirectoryException
{
boolean ret = false;
- Lock entryLock = null;
- for (int i = 0; i < 3; i++)
- {
- entryLock = LockManager.lockRead(superiorDN);
- if (entryLock != null)
- {
- break;
- }
- }
+ final Lock entryLock = LockManager.lockRead(superiorDN);
if (entryLock == null)
{
Message message =
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java
index e182567..afb336f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskBackend.java
@@ -23,87 +23,42 @@
*
*
* Copyright 2006-2009 Sun Microsystems, Inc.
- * Portions Copyright 2011 ForgeRock AS
+ * Portions Copyright 2011-2013 ForgeRock AS
*/
package org.opends.server.backends.task;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
import java.net.InetAddress;
import java.security.MessageDigest;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
import java.util.concurrent.locks.Lock;
-
import java.util.zip.Deflater;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
+
import javax.crypto.Mac;
+
import org.opends.messages.Message;
import org.opends.server.admin.Configuration;
import org.opends.server.admin.server.ConfigurationChangeListener;
import org.opends.server.admin.std.server.TaskBackendCfg;
import org.opends.server.api.Backend;
-import org.opends.server.config.ConfigException;
import org.opends.server.config.ConfigEntry;
-import org.opends.server.core.AddOperation;
-import org.opends.server.core.DeleteOperation;
-import org.opends.server.core.DirectoryServer;
-import org.opends.server.core.ModifyOperation;
-import org.opends.server.core.ModifyDNOperation;
-import org.opends.server.core.SearchOperation;
+import org.opends.server.config.ConfigException;
+import org.opends.server.core.*;
import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.types.Attribute;
-import org.opends.server.types.AttributeType;
-import org.opends.server.types.AttributeValue;
-import org.opends.server.types.BackupConfig;
-import org.opends.server.types.BackupDirectory;
-import org.opends.server.types.BackupInfo;
-import org.opends.server.types.CanceledOperationException;
-import org.opends.server.types.ConditionResult;
-import org.opends.server.types.ConfigChangeResult;
-import org.opends.server.types.CryptoManager;
-import org.opends.server.types.CryptoManagerException;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.DN;
-import org.opends.server.types.Entry;
-import org.opends.server.types.IndexType;
-import org.opends.server.types.InitializationException;
-import org.opends.server.types.LDIFExportConfig;
-import org.opends.server.types.LDIFImportConfig;
-import org.opends.server.types.LDIFImportResult;
-import org.opends.server.types.LockManager;
-import org.opends.server.types.Modification;
-import org.opends.server.types.ModificationType;
-import org.opends.server.types.RestoreConfig;
-import org.opends.server.types.ResultCode;
-import org.opends.server.types.SearchFilter;
-import org.opends.server.types.SearchScope;
-import org.opends.server.util.DynamicConstants;
-import org.opends.server.util.LDIFException;
-import org.opends.server.util.LDIFReader;
-import org.opends.server.util.LDIFWriter;
-import org.opends.server.util.Validator;
+import org.opends.server.types.*;
+import org.opends.server.util.*;
import static org.opends.messages.BackendMessages.*;
import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.util.StaticUtils.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.server.util.ServerConstants.*;
+import static org.opends.server.util.StaticUtils.*;
@@ -711,18 +666,10 @@
Lock entryLock = null;
if (! taskScheduler.holdsSchedulerLock())
{
- for (int i=0; i < 3; i++)
- {
- entryLock = LockManager.lockWrite(entryDN);
- if (entryLock != null)
- {
- break;
- }
- }
-
+ entryLock = LockManager.lockWrite(entryDN);
if (entryLock == null)
{
- throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
+ throw new DirectoryException(ResultCode.BUSY,
ERR_TASKBE_MODIFY_CANNOT_LOCK_ENTRY.get(
String.valueOf(entryDN)));
}
@@ -2043,6 +1990,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public boolean isConfigurationChangeAcceptable(TaskBackendCfg configEntry,
List<Message> unacceptableReasons)
{
@@ -2140,6 +2088,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public ConfigChangeResult applyConfigurationChange(TaskBackendCfg configEntry)
{
ResultCode resultCode = ResultCode.SUCCESS;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
index d230e19..935ec18 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/task/TaskScheduler.java
@@ -23,6 +23,7 @@
*
*
* Copyright 2006-2010 Sun Microsystems, Inc.
+ * Portions Copyright 2013 ForgeRock AS
*/
package org.opends.server.backends.task;
@@ -37,15 +38,7 @@
import java.io.File;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeSet;
+import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@@ -56,22 +49,7 @@
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.SearchOperation;
import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.types.Attribute;
-import org.opends.server.types.AttributeType;
-import org.opends.server.types.AttributeValue;
-import org.opends.server.types.Attributes;
-import org.opends.server.types.DN;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.Entry;
-import org.opends.server.types.ExistingFileBehavior;
-import org.opends.server.types.InitializationException;
-import org.opends.server.types.LDIFExportConfig;
-import org.opends.server.types.LDIFImportConfig;
-import org.opends.server.types.LockManager;
-import org.opends.server.types.Operation;
-import org.opends.server.types.ResultCode;
-import org.opends.server.types.SearchFilter;
+import org.opends.server.types.*;
import org.opends.server.util.LDIFException;
import org.opends.server.util.LDIFReader;
import org.opends.server.util.LDIFWriter;
@@ -1697,18 +1675,11 @@
Lock readLockEntry(DN entryDN)
throws DirectoryException
{
- Lock lock = LockManager.lockRead(entryDN);
- for (int i=0; ((lock == null) && (i < 4)); i++)
- {
- lock = LockManager.lockRead(entryDN);
- }
-
+ final Lock lock = LockManager.lockRead(entryDN);
if (lock == null)
{
- Message message =
- ERR_BACKEND_CANNOT_LOCK_ENTRY.get(String.valueOf(entryDN));
- throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
- message);
+ throw new DirectoryException(ResultCode.BUSY,
+ ERR_BACKEND_CANNOT_LOCK_ENTRY.get(String.valueOf(entryDN)));
}
else
{
@@ -2138,6 +2109,7 @@
* @return The DN of the configuration entry with which this alert generator
* is associated.
*/
+ @Override
public DN getComponentEntryDN()
{
return taskBackend.getConfigEntryDN();
@@ -2152,6 +2124,7 @@
* @return The fully-qualified name of the Java class for this alert
* generator implementation.
*/
+ @Override
public String getClassName()
{
return CLASS_NAME;
@@ -2169,6 +2142,7 @@
* @return Information about the set of alerts that this generator may
* produce.
*/
+ @Override
public LinkedHashMap<String,String> getAlerts()
{
LinkedHashMap<String,String> alerts = new LinkedHashMap<String,String>();
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV1Control.java b/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV1Control.java
index f7e83d0..d42421e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV1Control.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV1Control.java
@@ -23,31 +23,29 @@
*
*
* Copyright 2006-2008 Sun Microsystems, Inc.
- * Portions copyright 2011 ForgeRock AS.
+ * Portions copyright 2011-2013 ForgeRock AS.
*/
package org.opends.server.controls;
-import org.opends.messages.Message;
-
-import java.util.concurrent.locks.Lock;
import java.io.IOException;
+import java.util.concurrent.locks.Lock;
+import org.opends.messages.Message;
import org.opends.server.api.AuthenticationPolicyState;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.PasswordPolicyState;
-import org.opends.server.protocols.asn1.*;
-import static org.opends.server.protocols.asn1.ASN1Constants.
- UNIVERSAL_OCTET_STRING_TYPE;
-import static org.opends.server.loggers.debug.DebugLogger.*;
import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.protocols.asn1.ASN1;
+import org.opends.server.protocols.asn1.ASN1Reader;
+import org.opends.server.protocols.asn1.ASN1Writer;
import org.opends.server.types.*;
import static org.opends.messages.ProtocolMessages.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.protocols.asn1.ASN1Constants.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
-
-
/**
* This class implements version 1 of the proxied authorization control as
* defined in early versions of draft-weltman-ldapv3-proxy (this implementation
@@ -69,6 +67,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public ProxiedAuthV1Control decode(boolean isCritical, ByteString value)
throws DirectoryException
{
@@ -107,6 +106,7 @@
return new ProxiedAuthV1Control(isCritical, authorizationDN);
}
+ @Override
public String getOID()
{
return OID_PROXIED_AUTH_V1;
@@ -294,21 +294,11 @@
}
- Lock entryLock = null;
- for (int i=0; i < 3; i++)
- {
- entryLock = LockManager.lockRead(authzDN);
- if (entryLock != null)
- {
- break;
- }
- }
-
+ final Lock entryLock = LockManager.lockRead(authzDN);
if (entryLock == null)
{
- Message message =
- ERR_PROXYAUTH1_CANNOT_LOCK_USER.get(String.valueOf(authzDN));
- throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message);
+ throw new DirectoryException(ResultCode.BUSY,
+ ERR_PROXYAUTH1_CANNOT_LOCK_USER.get(String.valueOf(authzDN)));
}
try
diff --git a/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java b/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java
index 081ed0e..ea26aad 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/controls/ProxiedAuthV2Control.java
@@ -26,27 +26,26 @@
* Portions copyright 2011-2013 ForgeRock AS.
*/
package org.opends.server.controls;
-import org.opends.messages.Message;
-
-
-import java.util.concurrent.locks.Lock;
import java.io.IOException;
+import java.util.concurrent.locks.Lock;
+import org.opends.messages.Message;
import org.opends.server.api.AuthenticationPolicyState;
import org.opends.server.api.IdentityMapper;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.PasswordPolicyState;
-import org.opends.server.protocols.asn1.*;
-import static org.opends.server.loggers.debug.DebugLogger.*;
import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.protocols.asn1.ASN1;
+import org.opends.server.protocols.asn1.ASN1Reader;
+import org.opends.server.protocols.asn1.ASN1Writer;
import org.opends.server.types.*;
import static org.opends.messages.ProtocolMessages.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
-import static org.opends.server.util.Validator.ensureNotNull;
-
+import static org.opends.server.util.Validator.*;
/**
* This class implements version 2 of the proxied authorization control as
@@ -247,22 +246,11 @@
authzDN = actualDN;
}
- Lock entryLock = null;
- for (int i=0; i < 3; i++)
- {
- entryLock = LockManager.lockRead(authzDN);
- if (entryLock != null)
- {
- break;
- }
- }
-
+ final Lock entryLock = LockManager.lockRead(authzDN);
if (entryLock == null)
{
- Message message =
- ERR_PROXYAUTH2_CANNOT_LOCK_USER.get(String.valueOf(authzDN));
- throw new DirectoryException(
- ResultCode.AUTHORIZATION_DENIED, message);
+ throw new DirectoryException(ResultCode.BUSY,
+ ERR_PROXYAUTH2_CANNOT_LOCK_USER.get(String.valueOf(authzDN)));
}
try
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java
index e494529..ebbecf5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java
@@ -23,7 +23,7 @@
*
*
* Copyright 2006-2009 Sun Microsystems, Inc.
- * Portions copyright 2011 ForgeRock AS.
+ * Portions copyright 2011-2013 ForgeRock AS.
*/
package org.opends.server.extensions;
@@ -47,24 +47,13 @@
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.PasswordPolicyState;
import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.types.AuthenticationInfo;
-import org.opends.server.types.ByteString;
-import org.opends.server.types.ConfigChangeResult;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.DN;
-import org.opends.server.types.Entry;
-import org.opends.server.types.InitializationException;
-import org.opends.server.types.LockManager;
-import org.opends.server.types.ResultCode;
+import org.opends.server.types.*;
import static org.opends.messages.ExtensionMessages.*;
import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
-
-
/**
* This class provides an implementation of a SASL mechanism that uses digest
* authentication via CRAM-MD5. This is a password-based mechanism that does
@@ -349,23 +338,12 @@
// Acquire a read lock on the user entry. If this fails, then so will the
// authentication.
- Lock readLock = null;
- for (int i=0; i < 3; i++)
- {
- readLock = LockManager.lockRead(userDN);
- if (readLock != null)
- {
- break;
- }
- }
-
+ final Lock readLock = LockManager.lockRead(userDN);
if (readLock == null)
{
- bindOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
-
- Message message = INFO_SASLCRAMMD5_CANNOT_LOCK_ENTRY.get(
- String.valueOf(userDN));
- bindOperation.setAuthFailureReason(message);
+ bindOperation.setResultCode(ResultCode.BUSY);
+ bindOperation.setAuthFailureReason(INFO_SASLCRAMMD5_CANNOT_LOCK_ENTRY
+ .get(String.valueOf(userDN)));
return;
}
@@ -614,6 +592,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public boolean isConfigurationChangeAcceptable(
CramMD5SASLMechanismHandlerCfg configuration,
List<Message> unacceptableReasons)
@@ -626,6 +605,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public ConfigChangeResult applyConfigurationChange(
CramMD5SASLMechanismHandlerCfg configuration)
{
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java
index 4eb565a..2b2d54c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java
@@ -23,50 +23,45 @@
*
*
* Copyright 2006-2010 Sun Microsystems, Inc.
- * Portions Copyright 2011 ForgeRock AS
+ * Portions Copyright 2011-2013 ForgeRock AS
*/
package org.opends.server.extensions;
-
-import org.opends.messages.Message;
-import java.util.ArrayList;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.HashSet;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.locks.Lock;
+import org.opends.messages.Message;
+import org.opends.messages.MessageBuilder;
import org.opends.server.admin.server.ConfigurationChangeListener;
import org.opends.server.admin.std.server.ExtendedOperationHandlerCfg;
import org.opends.server.admin.std.server.
PasswordModifyExtendedOperationHandlerCfg;
import org.opends.server.api.*;
import org.opends.server.config.ConfigException;
+import org.opends.server.controls.PasswordPolicyErrorType;
import org.opends.server.controls.PasswordPolicyResponseControl;
import org.opends.server.controls.PasswordPolicyWarningType;
-import org.opends.server.controls.PasswordPolicyErrorType;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.ExtendedOperation;
import org.opends.server.core.ModifyOperation;
import org.opends.server.core.PasswordPolicyState;
+import org.opends.server.loggers.ErrorLogger;
import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.protocols.asn1.*;
+import org.opends.server.protocols.asn1.ASN1;
+import org.opends.server.protocols.asn1.ASN1Reader;
+import org.opends.server.protocols.asn1.ASN1Writer;
import org.opends.server.protocols.internal.InternalClientConnection;
import org.opends.server.schema.AuthPasswordSyntax;
import org.opends.server.schema.UserPasswordSyntax;
import org.opends.server.types.*;
+import static org.opends.messages.CoreMessages.*;
+import static org.opends.messages.ExtensionMessages.*;
import static org.opends.server.extensions.ExtensionsConstants.*;
import static org.opends.server.loggers.debug.DebugLogger.*;
-import org.opends.server.loggers.ErrorLogger;
-import static org.opends.messages.ExtensionMessages.*;
-import static org.opends.messages.CoreMessages.*;
-
-import org.opends.messages.MessageBuilder;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
-
/**
* This class implements the password modify extended operation defined in RFC
* 3062. It includes support for requiring the user's current password as well
@@ -166,6 +161,7 @@
* that is not related to the server
* configuration.
*/
+ @Override
public void initializeExtendedOperationHandler(
PasswordModifyExtendedOperationHandlerCfg config)
throws ConfigException, InitializationException
@@ -244,6 +240,7 @@
*
* @param operation The extended operation to be processed.
*/
+ @Override
public void processExtendedOperation(ExtendedOperation operation)
{
// Initialize the variables associated with components that may be included
@@ -353,25 +350,12 @@
// Retrieve a write lock on that user's entry.
userDN = requestorEntry.getDN();
- for (int i=0; i < 3; i++)
- {
- userLock = LockManager.lockWrite(userDN);
-
- if (userLock != null)
- {
- break;
- }
- }
-
+ userLock = LockManager.lockWrite(userDN);
if (userLock == null)
{
- operation.setResultCode(DirectoryServer.getServerErrorResultCode());
-
- Message message =
- ERR_EXTOP_PASSMOD_CANNOT_LOCK_USER_ENTRY.get(
- String.valueOf(userDN));
- operation.appendErrorMessage(message);
-
+ operation.setResultCode(ResultCode.BUSY);
+ operation.appendErrorMessage(ERR_EXTOP_PASSMOD_CANNOT_LOCK_USER_ENTRY
+ .get(String.valueOf(userDN)));
return;
}
@@ -1024,31 +1008,15 @@
modList.add(new Modification(ModificationType.DELETE, deleteAttr));
- // Add the new encoded values.
- LinkedHashSet<AttributeValue> addValues =
- new LinkedHashSet<AttributeValue>(encodedPasswords.size());
- for (ByteString s : encodedPasswords)
- {
- addValues.add(AttributeValues.create(attrType, s));
- }
-
builder = new AttributeBuilder(attrType);
- builder.addAll(addValues);
+ builder.addAll(toAttributeValues(attrType, encodedPasswords));
Attribute addAttr = builder.toAttribute();
modList.add(new Modification(ModificationType.ADD, addAttr));
}
else
{
- LinkedHashSet<AttributeValue> replaceValues =
- new LinkedHashSet<AttributeValue>(encodedPasswords.size());
- for (ByteString s : encodedPasswords)
- {
- replaceValues.add(
- AttributeValues.create(attrType, s));
- }
-
AttributeBuilder builder = new AttributeBuilder(attrType);
- builder.addAll(replaceValues);
+ builder.addAll(toAttributeValues(attrType, encodedPasswords));
Attribute addAttr = builder.toAttribute();
modList.add(new Modification(ModificationType.REPLACE, addAttr));
}
@@ -1241,7 +1209,17 @@
}
}
-
+ private Collection<AttributeValue> toAttributeValues(AttributeType attrType,
+ Collection<ByteString> values)
+ {
+ Set<AttributeValue> results =
+ new LinkedHashSet<AttributeValue>(values.size());
+ for (ByteString s : values)
+ {
+ results.add(AttributeValues.create(attrType, s));
+ }
+ return results;
+ }
/**
* Retrieves the entry for the specified user based on the provided DN. If
@@ -1348,6 +1326,7 @@
* @return <CODE>true</CODE> if the provided entry has an acceptable
* configuration for this component, or <CODE>false</CODE> if not.
*/
+ @Override
public boolean isConfigurationChangeAcceptable(
PasswordModifyExtendedOperationHandlerCfg config,
List<Message> unacceptableReasons)
@@ -1401,6 +1380,7 @@
*
* @return Information about the result of the configuration update.
*/
+ @Override
public ConfigChangeResult applyConfigurationChange(
PasswordModifyExtendedOperationHandlerCfg config)
{
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java
index b5c902d..39fd24c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java
@@ -76,10 +76,10 @@
*/
private static final DebugTracer TRACER = getTracer();
- // The identity mapper that will be used to map ID strings to user entries.
+ /** The identity mapper that will be used to map ID strings to user entries.*/
private IdentityMapper<?> identityMapper;
- // The current configuration for this SASL mechanism handler.
+ /** The current configuration for this SASL mechanism handler. */
private PlainSASLMechanismHandlerCfg currentConfig;
@@ -247,23 +247,12 @@
// Acquire a read lock on the user entry. If this fails, then so will the
// authentication.
- Lock readLock = null;
- for (int i=0; i < 3; i++)
- {
- readLock = LockManager.lockRead(userDN);
- if (readLock != null)
- {
- break;
- }
- }
-
+ final Lock readLock = LockManager.lockRead(userDN);
if (readLock == null)
{
- bindOperation.setResultCode(DirectoryServer.getServerErrorResultCode());
-
- Message message = INFO_SASLPLAIN_CANNOT_LOCK_ENTRY.get(String.valueOf(
- userDN));
- bindOperation.setAuthFailureReason(message);
+ bindOperation.setResultCode(ResultCode.BUSY);
+ bindOperation.setAuthFailureReason(INFO_SASLPLAIN_CANNOT_LOCK_ENTRY
+ .get(String.valueOf(userDN)));
return;
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/SASLContext.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SASLContext.java
index a549f70..b559b7a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SASLContext.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SASLContext.java
@@ -23,21 +23,14 @@
*
*
* Copyright 2008-2009 Sun Microsystems, Inc.
- * Portions copyright 2011-2012 ForgeRock AS.
+ * Portions copyright 2011-2013 ForgeRock AS.
*/
-
package org.opends.server.extensions;
-
-
import static org.opends.messages.ExtensionMessages.*;
-import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
-import static org.opends.server.loggers.debug.DebugLogger.getTracer;
-import static org.opends.server.util.ServerConstants.SASL_DEFAULT_PROTOCOL;
-import static org.opends.server.util.ServerConstants.SASL_MECHANISM_DIGEST_MD5;
-import static org.opends.server.util.ServerConstants.SASL_MECHANISM_GSSAPI;
-import static org.opends.server.util.StaticUtils.getExceptionMessage;
-import static org.opends.server.util.StaticUtils.toLowerCase;
+import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.util.ServerConstants.*;
+import static org.opends.server.util.StaticUtils.*;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
@@ -188,6 +181,7 @@
* @throws UnsupportedCallbackException
* If a callback is not supported.
*/
+ @Override
public void handle(final Callback[] callbacks)
throws UnsupportedCallbackException
{
@@ -227,6 +221,7 @@
*
* @return {@code true} if the authentication processing was successful.
*/
+ @Override
public Boolean run()
{
final ClientConnection clientConn = bindOp.getClientConnection();
@@ -905,16 +900,7 @@
*/
private void getAuthEntry(final DN userDN)
{
- Lock readLock = null;
- for (int i = 0; i < 3; i++)
- {
- readLock = LockManager.lockRead(userDN);
- if (readLock != null)
- {
- break;
- }
- }
-
+ final Lock readLock = LockManager.lockRead(userDN);
if (readLock == null)
{
setCallbackMsg(INFO_SASL_CANNOT_LOCK_ENTRY.get(String.valueOf(userDN)));
diff --git a/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java b/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java
index 07b5dad..934d522 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java
@@ -23,6 +23,7 @@
*
*
* Copyright 2006-2008 Sun Microsystems, Inc.
+ * Portions Copyright 2013 ForgeRock AS
*/
package org.opends.server.extensions;
@@ -30,29 +31,22 @@
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
-import javax.security.auth.x500.X500Principal;
import java.util.concurrent.locks.Lock;
+import javax.security.auth.x500.X500Principal;
+
import org.opends.messages.Message;
import org.opends.server.admin.std.server.SubjectEqualsDNCertificateMapperCfg;
import org.opends.server.api.CertificateMapper;
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.DN;
-import org.opends.server.types.Entry;
-import org.opends.server.types.InitializationException;
-import org.opends.server.types.LockManager;
-import org.opends.server.types.ResultCode;
+import org.opends.server.types.*;
-import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.messages.ExtensionMessages.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.server.util.StaticUtils.*;
-
-
/**
* This class implements a very simple Directory Server certificate mapper that
* will map a certificate to a user only if the subject of the peer certificate
@@ -74,7 +68,6 @@
public SubjectEqualsDNCertificateMapper()
{
super();
-
}
@@ -82,6 +75,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public void initializeCertificateMapper(SubjectEqualsDNCertificateMapperCfg
configuration)
throws ConfigException, InitializationException
@@ -111,6 +105,7 @@
* error message should be returned to the
* client.
*/
+ @Override
public Entry mapCertificateToUser(Certificate[] certificateChain)
throws DirectoryException
{
@@ -163,21 +158,11 @@
// Acquire a read lock on the user entry. If this fails, then so will the
// certificate mapping.
- Lock readLock = null;
- for (int i=0; i < 3; i++)
- {
- readLock = LockManager.lockRead(subjectDN);
- if (readLock != null)
- {
- break;
- }
- }
-
+ final Lock readLock = LockManager.lockRead(subjectDN);
if (readLock == null)
{
- Message message =
- ERR_SEDCM_CANNOT_LOCK_ENTRY.get(String.valueOf(subjectDN));
- throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
+ throw new DirectoryException(ResultCode.BUSY, ERR_SEDCM_CANNOT_LOCK_ENTRY
+ .get(String.valueOf(subjectDN)));
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java b/opendj-sdk/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java
index 3ebb6b6..8c6902d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tasks/AddSchemaFileTask.java
@@ -27,14 +27,13 @@
*/
package org.opends.server.tasks;
-import org.opends.messages.Message;
-
import java.io.File;
import java.util.LinkedList;
import java.util.List;
import java.util.TreeSet;
import java.util.concurrent.locks.Lock;
+import org.opends.messages.Message;
import org.opends.server.admin.std.server.SynchronizationProviderCfg;
import org.opends.server.api.ClientConnection;
import org.opends.server.api.SynchronizationProvider;
@@ -43,17 +42,15 @@
import org.opends.server.config.ConfigException;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.SchemaConfigManager;
+import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.*;
+import static org.opends.messages.TaskMessages.*;
import static org.opends.server.config.ConfigConstants.*;
import static org.opends.server.loggers.debug.DebugLogger.*;
-import org.opends.server.loggers.debug.DebugTracer;
-import static org.opends.messages.TaskMessages.*;
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
-
-
/**
* This class provides an implementation of a Directory Server task that can be
* used to add the contents of a new schema file into the server schema.
@@ -66,12 +63,13 @@
*/
private static final DebugTracer TRACER = getTracer();
- // The list of files to be added to the server schema.
+ /** The list of files to be added to the server schema. */
TreeSet<String> filesToAdd;
/**
* {@inheritDoc}
*/
+ @Override
public Message getDisplayName() {
return INFO_TASK_ADD_SCHEMA_FILE_NAME.get();
}
@@ -195,17 +193,13 @@
/**
* {@inheritDoc}
*/
+ @Override
protected TaskState runTask()
{
// Obtain a write lock on the server schema so that we can be sure nothing
// else tries to write to it at the same time.
DN schemaDN = DirectoryServer.getSchemaDN();
- Lock schemaLock = LockManager.lockWrite(schemaDN);
- for (int i=0; ((schemaLock == null) && (i < 3)); i++)
- {
- schemaLock = LockManager.lockWrite(schemaDN);
- }
-
+ final Lock schemaLock = LockManager.lockWrite(schemaDN);
if (schemaLock == null)
{
Message message = ERR_TASK_ADDSCHEMAFILE_CANNOT_LOCK_SCHEMA.get(
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/Entry.java b/opendj-sdk/opends/src/server/org/opends/server/types/Entry.java
index 2b51f22..9a5cff8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/Entry.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/Entry.java
@@ -29,17 +29,7 @@
import java.io.BufferedWriter;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.locks.Lock;
import org.opends.messages.Message;
@@ -65,7 +55,6 @@
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
-
/**
* This class defines a data structure for a Directory Server entry.
* It includes a DN and a set of attributes.
@@ -2555,16 +2544,7 @@
if (parentDN != null)
{
// Get the parent entry and check its structural class.
- Lock lock = null;
- for (int i=0; i < 3; i++)
- {
- lock = LockManager.lockRead(parentDN);
- if (lock != null)
- {
- break;
- }
- }
-
+ final Lock lock = LockManager.lockRead(parentDN);
if (lock == null)
{
Message message =
@@ -2667,16 +2647,7 @@
if (parentDN != null)
{
// Get the parent entry and check its structural class.
- Lock lock = null;
- for (int i=0; i < 3; i++)
- {
- lock = LockManager.lockRead(parentDN);
- if (lock != null)
- {
- break;
- }
- }
-
+ final Lock lock = LockManager.lockRead(parentDN);
if (lock == null)
{
Message message =
diff --git a/opendj-sdk/opends/src/server/org/opends/server/types/LockManager.java b/opendj-sdk/opends/src/server/org/opends/server/types/LockManager.java
index 70b25b4..4703882 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/types/LockManager.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/types/LockManager.java
@@ -27,8 +27,6 @@
*/
package org.opends.server.types;
-
-
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
@@ -39,8 +37,6 @@
import static org.opends.server.loggers.debug.DebugLogger.*;
-
-
/**
* This class defines a Directory Server component that can keep track
* of all locks needed throughout the Directory Server. It is
@@ -89,15 +85,15 @@
* The default length of time in milliseconds to wait while
* attempting to acquire a read or write lock.
*/
- public static final long DEFAULT_TIMEOUT = 3000;
+ public static final long DEFAULT_TIMEOUT = 9000;
- // The set of entry locks that the server knows about.
+ /** The set of entry locks that the server knows about. */
private static
ConcurrentHashMap<DN,ReentrantReadWriteLock> lockTable;
- // Whether fair ordering should be used on the locks.
+ /** Whether fair ordering should be used on the locks. */
private static boolean fair;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
index e649b81..d873722 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
@@ -23,7 +23,7 @@
*
*
* Copyright 2008-2010 Sun Microsystems, Inc.
- * Portions Copyright 2011-2012 ForgeRock AS
+ * Portions Copyright 2011-2013 ForgeRock AS
*/
package org.opends.server.workflowelement.localbackend;
@@ -46,19 +46,8 @@
import org.opends.messages.MessageBuilder;
import org.opends.server.api.*;
import org.opends.server.api.plugin.PluginResult;
-import org.opends.server.controls.LDAPAssertionRequestControl;
-import org.opends.server.controls.LDAPPostReadRequestControl;
-import org.opends.server.controls.PasswordPolicyErrorType;
-import org.opends.server.controls.PasswordPolicyResponseControl;
-import org.opends.server.controls.ProxiedAuthV1Control;
-import org.opends.server.controls.ProxiedAuthV2Control;
-import org.opends.server.core.AccessControlConfigManager;
-import org.opends.server.core.AddOperation;
-import org.opends.server.core.AddOperationWrapper;
-import org.opends.server.core.DirectoryServer;
-import org.opends.server.core.PasswordPolicy;
-import org.opends.server.core.PersistentSearch;
-import org.opends.server.core.PluginConfigManager;
+import org.opends.server.controls.*;
+import org.opends.server.core.*;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.schema.AuthPasswordSyntax;
import org.opends.server.schema.UserPasswordSyntax;
@@ -152,6 +141,7 @@
* @return The entry to be added to the server, or <CODE>null</CODE> if it is
* not yet available.
*/
+ @Override
public final Entry getEntryToAdd()
{
return entry;
@@ -234,21 +224,12 @@
// always released when exiting this method, no matter what. Since
// the entry shouldn't exist yet, locking earlier than necessary
// shouldn't cause a problem.
- for (int i=0; i < 3; i++)
- {
- entryLock = LockManager.lockWrite(entryDN);
- if (entryLock != null)
- {
- break;
- }
- }
-
+ entryLock = LockManager.lockWrite(entryDN);
if (entryLock == null)
{
- setResultCode(DirectoryServer.getServerErrorResultCode());
+ setResultCode(ResultCode.BUSY);
appendErrorMessage(ERR_ADD_CANNOT_LOCK_ENTRY.get(
String.valueOf(entryDN)));
-
break addProcessing;
}
@@ -751,6 +732,7 @@
{
registerPostResponseCallback(new Runnable()
{
+ @Override
public void run()
{
// Notify persistent searches.
@@ -823,18 +805,10 @@
}
else
{
- for (int i=0; i < 3; i++)
- {
- parentLock = LockManager.lockRead(parentDN);
- if (parentLock != null)
- {
- break;
- }
- }
-
+ parentLock = LockManager.lockRead(parentDN);
if (parentLock == null)
{
- throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
+ throw new DirectoryException(ResultCode.BUSY,
ERR_ADD_CANNOT_LOCK_PARENT.get(
String.valueOf(entryDN),
String.valueOf(parentDN)));
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java
index a458c71..d18363a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java
@@ -27,8 +27,6 @@
*/
package org.opends.server.workflowelement.localbackend;
-
-
import java.util.List;
import java.util.concurrent.locks.Lock;
@@ -38,19 +36,8 @@
import org.opends.server.admin.std.meta.PasswordPolicyCfgDefn;
import org.opends.server.api.*;
import org.opends.server.api.plugin.PluginResult;
-import org.opends.server.controls.AuthorizationIdentityResponseControl;
-import org.opends.server.controls.PasswordExpiredControl;
-import org.opends.server.controls.PasswordExpiringControl;
-import org.opends.server.controls.PasswordPolicyErrorType;
-import org.opends.server.controls.PasswordPolicyResponseControl;
-import org.opends.server.controls.PasswordPolicyWarningType;
-import org.opends.server.core.AccessControlConfigManager;
-import org.opends.server.core.BindOperation;
-import org.opends.server.core.BindOperationWrapper;
-import org.opends.server.core.DirectoryServer;
-import org.opends.server.core.PasswordPolicy;
-import org.opends.server.core.PasswordPolicyState;
-import org.opends.server.core.PluginConfigManager;
+import org.opends.server.controls.*;
+import org.opends.server.core.*;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.*;
import org.opends.server.types.operation.PostOperationBindOperation;
@@ -64,7 +51,6 @@
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
-
/**
* This class defines an operation used to bind against the Directory Server,
* with the bound user entry within a local backend.
@@ -468,19 +454,10 @@
// Get the user entry based on the bind DN. If it does not exist,
// then fail.
- Lock userLock = null;
- for (int i=0; i < 3; i++)
- {
- userLock = LockManager.lockRead(bindDN);
- if (userLock != null)
- {
- break;
- }
- }
-
+ final Lock userLock = LockManager.lockRead(bindDN);
if (userLock == null)
{
- throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
+ throw new DirectoryException(ResultCode.BUSY,
ERR_BIND_OPERATION_CANNOT_LOCK_USER.get(
String.valueOf(bindDN)));
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java
index 8124bff..f322a76 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java
@@ -23,12 +23,10 @@
*
*
* Copyright 2008-2009 Sun Microsystems, Inc.
- * Portions Copyright 2011-2012 ForgeRock AS
+ * Portions Copyright 2011-2013 ForgeRock AS
*/
package org.opends.server.workflowelement.localbackend;
-
-
import java.util.List;
import java.util.Set;
import java.util.concurrent.locks.Lock;
@@ -39,11 +37,7 @@
import org.opends.server.controls.LDAPAssertionRequestControl;
import org.opends.server.controls.ProxiedAuthV1Control;
import org.opends.server.controls.ProxiedAuthV2Control;
-import org.opends.server.core.AccessControlConfigManager;
-import org.opends.server.core.CompareOperation;
-import org.opends.server.core.CompareOperationWrapper;
-import org.opends.server.core.DirectoryServer;
-import org.opends.server.core.PluginConfigManager;
+import org.opends.server.core.*;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.*;
import org.opends.server.types.operation.PostOperationCompareOperation;
@@ -54,8 +48,6 @@
import static org.opends.server.loggers.debug.DebugLogger.*;
import static org.opends.server.util.ServerConstants.*;
-
-
/**
* This class defines an operation that may be used to determine whether a
* specified entry in the Directory Server contains a given attribute-value
@@ -114,6 +106,7 @@
* @return The entry to target with the compare operation, or
* <CODE>null</CODE> if the entry is not yet available.
*/
+ @Override
public Entry getEntryToCompare()
{
return entry;
@@ -180,22 +173,12 @@
// Grab a read lock on the entry.
- Lock readLock = null;
- for (int i=0; i < 3; i++)
- {
- readLock = LockManager.lockRead(entryDN);
- if (readLock != null)
- {
- break;
- }
- }
-
+ final Lock readLock = LockManager.lockRead(entryDN);
if (readLock == null)
{
- setResultCode(DirectoryServer.getServerErrorResultCode());
+ setResultCode(ResultCode.BUSY);
appendErrorMessage(ERR_COMPARE_CANNOT_LOCK_ENTRY.get(
String.valueOf(entryDN)));
-
break compareProcessing;
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
index de3d6f4..380ee88 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
@@ -23,12 +23,10 @@
*
*
* Copyright 2008-2009 Sun Microsystems, Inc.
- * Portions Copyright 2011-2012 ForgeRock AS
+ * Portions Copyright 2011-2013 ForgeRock AS
*/
package org.opends.server.workflowelement.localbackend;
-
-
import java.util.List;
import java.util.concurrent.locks.Lock;
@@ -39,18 +37,13 @@
import org.opends.server.api.SynchronizationProvider;
import org.opends.server.api.plugin.PluginResult;
import org.opends.server.controls.*;
-import org.opends.server.core.AccessControlConfigManager;
-import org.opends.server.core.DeleteOperationWrapper;
-import org.opends.server.core.DeleteOperation;
-import org.opends.server.core.DirectoryServer;
-import org.opends.server.core.PersistentSearch;
-import org.opends.server.core.PluginConfigManager;
+import org.opends.server.core.*;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.*;
import org.opends.server.types.operation.PostOperationDeleteOperation;
import org.opends.server.types.operation.PostResponseDeleteOperation;
-import org.opends.server.types.operation.PreOperationDeleteOperation;
import org.opends.server.types.operation.PostSynchronizationDeleteOperation;
+import org.opends.server.types.operation.PreOperationDeleteOperation;
import static org.opends.messages.CoreMessages.*;
import static org.opends.server.loggers.ErrorLogger.*;
@@ -58,8 +51,6 @@
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
-
-
/**
* This class defines an operation used to delete an entry in a local backend
* of the Directory Server.
@@ -127,6 +118,7 @@
* @return The entry to be deleted, or <CODE>null</CODE> if the entry is not
* yet available.
*/
+ @Override
public Entry getEntryToDelete()
{
return entry;
@@ -169,19 +161,10 @@
}
// Grab a write lock on the entry.
- Lock entryLock = null;
- for (int i=0; i < 3; i++)
- {
- entryLock = LockManager.lockWrite(entryDN);
- if (entryLock != null)
- {
- break;
- }
- }
-
+ final Lock entryLock = LockManager.lockWrite(entryDN);
if (entryLock == null)
{
- setResultCode(DirectoryServer.getServerErrorResultCode());
+ setResultCode(ResultCode.BUSY);
appendErrorMessage(ERR_DELETE_CANNOT_LOCK_ENTRY.get(
String.valueOf(entryDN)));
break deleteProcessing;
@@ -455,6 +438,7 @@
registerPostResponseCallback(new Runnable()
{
+ @Override
public void run()
{
// Notify persistent searches.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
index 9f1d87c..d747a18 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
@@ -23,12 +23,10 @@
*
*
* Copyright 2008-2010 Sun Microsystems, Inc.
- * Portions Copyright 2011-2012 ForgeRock AS
+ * Portions Copyright 2011-2013 ForgeRock AS
*/
package org.opends.server.workflowelement.localbackend;
-
-
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.locks.Lock;
@@ -40,23 +38,14 @@
import org.opends.server.api.ClientConnection;
import org.opends.server.api.SynchronizationProvider;
import org.opends.server.api.plugin.PluginResult;
-import org.opends.server.controls.LDAPAssertionRequestControl;
-import org.opends.server.controls.LDAPPostReadRequestControl;
-import org.opends.server.controls.LDAPPreReadRequestControl;
-import org.opends.server.controls.ProxiedAuthV1Control;
-import org.opends.server.controls.ProxiedAuthV2Control;
-import org.opends.server.core.AccessControlConfigManager;
-import org.opends.server.core.DirectoryServer;
-import org.opends.server.core.ModifyDNOperation;
-import org.opends.server.core.ModifyDNOperationWrapper;
-import org.opends.server.core.PersistentSearch;
-import org.opends.server.core.PluginConfigManager;
+import org.opends.server.controls.*;
+import org.opends.server.core.*;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.types.*;
import org.opends.server.types.operation.PostOperationModifyDNOperation;
import org.opends.server.types.operation.PostResponseModifyDNOperation;
-import org.opends.server.types.operation.PreOperationModifyDNOperation;
import org.opends.server.types.operation.PostSynchronizationModifyDNOperation;
+import org.opends.server.types.operation.PreOperationModifyDNOperation;
import static org.opends.messages.CoreMessages.*;
import static org.opends.server.loggers.ErrorLogger.*;
@@ -64,8 +53,6 @@
import static org.opends.server.util.ServerConstants.*;
import static org.opends.server.util.StaticUtils.*;
-
-
/**
* This class defines an operation used to move an entry in a local backend
* of the Directory Server.
@@ -280,19 +267,10 @@
// Acquire write locks for the current and new DN.
- Lock currentLock = null;
- for (int i=0; i < 3; i++)
- {
- currentLock = LockManager.lockWrite(entryDN);
- if (currentLock != null)
- {
- break;
- }
- }
-
+ final Lock currentLock = LockManager.lockWrite(entryDN);
if (currentLock == null)
{
- setResultCode(DirectoryServer.getServerErrorResultCode());
+ setResultCode(ResultCode.BUSY);
appendErrorMessage(ERR_MODDN_CANNOT_LOCK_CURRENT_DN.get(
String.valueOf(entryDN)));
break modifyDNProcessing;
@@ -301,14 +279,7 @@
Lock newLock = null;
try
{
- for (int i=0; i < 3; i++)
- {
- newLock = LockManager.lockWrite(newDN);
- if (newLock != null)
- {
- break;
- }
- }
+ newLock = LockManager.lockWrite(newDN);
}
catch (Exception e)
{
@@ -335,7 +306,7 @@
{
LockManager.unlock(entryDN, currentLock);
- setResultCode(DirectoryServer.getServerErrorResultCode());
+ setResultCode(ResultCode.BUSY);
appendErrorMessage(ERR_MODDN_CANNOT_LOCK_NEW_DN.get(
String.valueOf(entryDN),
String.valueOf(newDN)));
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
index de0c7dd..7d9607f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
@@ -46,20 +46,8 @@
import org.opends.messages.MessageBuilder;
import org.opends.server.api.*;
import org.opends.server.api.plugin.PluginResult;
-import org.opends.server.controls.LDAPAssertionRequestControl;
-import org.opends.server.controls.LDAPPostReadRequestControl;
-import org.opends.server.controls.LDAPPreReadRequestControl;
-import org.opends.server.controls.PasswordPolicyErrorType;
-import org.opends.server.controls.PasswordPolicyResponseControl;
-import org.opends.server.controls.ProxiedAuthV1Control;
-import org.opends.server.controls.ProxiedAuthV2Control;
-import org.opends.server.core.AccessControlConfigManager;
-import org.opends.server.core.DirectoryServer;
-import org.opends.server.core.ModifyOperation;
-import org.opends.server.core.ModifyOperationWrapper;
-import org.opends.server.core.PasswordPolicyState;
-import org.opends.server.core.PersistentSearch;
-import org.opends.server.core.PluginConfigManager;
+import org.opends.server.controls.*;
+import org.opends.server.core.*;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.schema.AuthPasswordSyntax;
import org.opends.server.schema.UserPasswordSyntax;
@@ -209,6 +197,7 @@
* @return The current entry, or <CODE>null</CODE> if it is not yet
* available.
*/
+ @Override
public final Entry getCurrentEntry()
{
return currentEntry;
@@ -227,6 +216,7 @@
* modify request, or <CODE>null</CODE> if there were none or this
* information is not yet available.
*/
+ @Override
public final List<AttributeValue> getCurrentPasswords()
{
return currentPasswords;
@@ -243,6 +233,7 @@
* @return The modified entry that is to be written to the backend, or
* <CODE>null</CODE> if it is not yet available.
*/
+ @Override
public final Entry getModifiedEntry()
{
return modifiedEntry;
@@ -260,6 +251,7 @@
* request, or <CODE>null</CODE> if there were none or this
* information is not yet available.
*/
+ @Override
public final List<AttributeValue> getNewPasswords()
{
return newPasswords;
@@ -342,19 +334,10 @@
checkIfCanceled(false);
// Acquire a write lock on the target entry.
- Lock entryLock = null;
- for (int i=0; i < 3; i++)
- {
- entryLock = LockManager.lockWrite(entryDN);
- if (entryLock != null)
- {
- break;
- }
- }
-
+ final Lock entryLock = LockManager.lockWrite(entryDN);
if (entryLock == null)
{
- setResultCode(DirectoryServer.getServerErrorResultCode());
+ setResultCode(ResultCode.BUSY);
appendErrorMessage(ERR_MODIFY_CANNOT_LOCK_ENTRY.get(
String.valueOf(entryDN)));
break modifyProcessing;
@@ -699,6 +682,7 @@
registerPostResponseCallback(new Runnable()
{
+ @Override
public void run()
{
// Notify persistent searches.
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
index 13f15e1..fefecc1 100644
--- a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java
@@ -70,26 +70,28 @@
import java.util.concurrent.locks.Lock;
import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.loggers.debug.DebugLogger.getTracer;
-import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
+import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.util.StaticUtils.*;
import static org.testng.Assert.*;
/**
* An abstract class that all Replication unit test should extend.
*/
+@SuppressWarnings("javadoc")
@Test(groups = { "precommit", "replication" }, sequential = true)
public abstract class ReplicationTestCase extends DirectoryServerTestCase
{
- // The tracer object for the debug logger
+ /** The tracer object for the debug logger */
private static final DebugTracer TRACER = getTracer();
- // This is the generation id matching the memory test backend
- // with its initial root entry o=test created.
- // This matches the backend obtained calling:
- // TestCaseUtils.initializeTestBackend(true).
- // (using the default TestCaseUtils.TEST_ROOT_DN_STRING suffix)
+ /**
+ * This is the generation id matching the memory test backend with its initial
+ * root entry o=test created. This matches the backend obtained calling:
+ * TestCaseUtils.initializeTestBackend(true). (using the default
+ * TestCaseUtils.TEST_ROOT_DN_STRING suffix)
+ */
protected static final long TEST_DN_WITH_ROOT_ENTRY_GENID = 5055L;
/**
@@ -249,33 +251,6 @@
}
/**
- * Open an ECL replicationServer session to the local ReplicationServer
- protected ReplicationBroker openECLReplicationSession(
- int window_size, int port, int timeout, boolean emptyOldChanges,
- Short serverId)
- throws Exception, SocketException
- {
- ServerState state = new ServerState();
-
- //if (emptyOldChanges)
- // new PersistentServerState(baseDn, serverId, new ServerState());
-
- ReplicationBroker broker = new ReplicationBroker(null,
- state, "cn=changelog", serverId, window_size,
- -1, 100000, getReplSessionSecurity(), (byte)1);
- ArrayList<String> servers = new ArrayList<String>(1);
- servers.add("localhost:" + port);
- broker.start(servers);
- if (timeout != 0)
- broker.setSoTimeout(timeout);
- checkConnection(30, broker, port); // give some time to the broker to connect
- // to the replicationServer.
- return broker;
- }
- */
-
-
- /**
* Check connection of the provided ds to the
* replication server. Waits for connection to be ok up to secTimeout seconds
* before failing.
@@ -437,7 +412,6 @@
logError(Message.raw(Category.SYNC, Severity.NOTICE,
"ReplicationTestCase/Cleaning entries"));
- DeleteOperationBasis op;
// Delete entries
try
{
@@ -564,7 +538,7 @@
// Check that no entries have been found
LinkedList<SearchResultEntry> entries = op.getSearchEntries();
- assertTrue(entries != null);
+ assertNotNull(entries);
StringBuilder sb = new StringBuilder();
for (SearchResultEntry entry : entries)
{
@@ -650,17 +624,7 @@
do
{
- Entry newEntry;
- Lock lock = null;
- for (int j=0; j < 3; j++)
- {
- lock = LockManager.lockRead(dn);
- if (lock != null)
- {
- break;
- }
- }
-
+ final Lock lock = LockManager.lockRead(dn);
if (lock == null)
{
throw new Exception("could not lock entry " + dn);
@@ -668,9 +632,7 @@
try
{
- newEntry = DirectoryServer.getEntry(dn);
-
-
+ final Entry newEntry = DirectoryServer.getEntry(dn);
if (newEntry != null)
{
List<Attribute> tmpAttrList = newEntry.getAttribute(attrTypeStr);
@@ -683,7 +645,6 @@
found = tmpAttr.contains(AttributeValues.create(attrType, valueString));
}
}
-
}
finally
{
@@ -715,16 +676,7 @@
count--;
}
- Lock lock = null;
- for (int i=0; i < 3; i++)
- {
- lock = LockManager.lockRead(dn);
- if (lock != null)
- {
- break;
- }
- }
-
+ final Lock lock = LockManager.lockRead(dn);
if (lock == null)
{
throw new Exception("could not lock entry " + dn);
@@ -773,7 +725,7 @@
lastCount = currentCount;
} catch (Exception ex) {
ex.printStackTrace();
- assertTrue(false);
+ fail();
}
return delta;
}
@@ -848,10 +800,7 @@
}
} while (completionTime == null);
- if (completionTime == null)
- {
- fail("The task has not completed after 30 seconds.");
- }
+ assertNotNull(completionTime, "The task has not completed after 30 seconds.");
// Check that the task state is as expected.
AttributeType taskStateType =
@@ -1091,16 +1040,7 @@
{
Thread.sleep(100);
- Lock lock = null;
- for (int i=0; i < 3; i++)
- {
- lock = LockManager.lockRead(dn);
- if (lock != null)
- {
- break;
- }
- }
-
+ final Lock lock = LockManager.lockRead(dn);
if (lock == null)
{
throw new Exception("could not lock entry " + dn);
--
Gitblit v1.10.0