From a2c3fde785f4dcab651ee75492a95d3f6c07a853 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 09 Dec 2013 16:10:36 +0000
Subject: [PATCH] OPENDJ-1106 fractional-replication: adding entry on a replica as DM should not exit with RC 50
---
opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java | 5 +
opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java | 25 ++++----
opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java | 6 +-
opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java | 41 +++++--------
opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java | 5 +
opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java | 68 ++++++++++------------
6 files changed, 68 insertions(+), 82 deletions(-)
diff --git a/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java b/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java
index 4cd3f86..4fb994d 100644
--- a/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java
+++ b/opends/src/server/org/opends/server/authorization/dseecompat/AciHandler.java
@@ -219,8 +219,7 @@
{
aciListenerMgr.finalizeListenerManager();
AciEffectiveRights.finalizeOnShutdown();
- DirectoryServer
- .deregisterSupportedControl(OID_GET_EFFECTIVE_RIGHTS);
+ DirectoryServer.deregisterSupportedControl(OID_GET_EFFECTIVE_RIGHTS);
}
@@ -371,8 +370,7 @@
AttributeType attributeType = getAttributeType(baseName);
AttributeValue attributeValue =
- AttributeValues.create(attributeType, operation
- .getAssertionValue());
+ AttributeValues.create(attributeType, operation.getAssertionValue());
container.setCurrentAttributeType(attributeType);
container.setCurrentAttributeValue(attributeValue);
return isAllowed(container, operation);
@@ -610,7 +608,7 @@
*/
boolean accessAllowed(AciContainer container)
{
- DN dn = container.getResourceEntry().getDN();
+ DN dn = container.getResourceDN();
// For ACI_WRITE_ADD and ACI_WRITE_DELETE set the ACI_WRITE
// right.
if (container.hasRights(ACI_WRITE_ADD)
@@ -839,9 +837,9 @@
// type are being replaced or deleted. If only a subset is being
// deleted than this access check is skipped.
ModificationType modType = m.getModificationType();
- if (((modType == ModificationType.DELETE) && modAttr.isEmpty())
- || ((modType == ModificationType.REPLACE)
- || (modType == ModificationType.INCREMENT)))
+ if ((modType == ModificationType.DELETE && modAttr.isEmpty())
+ || modType == ModificationType.REPLACE
+ || modType == ModificationType.INCREMENT)
{
/*
* Check if we have rights to delete all values of an attribute
@@ -851,8 +849,7 @@
{
container.setCurrentAttributeType(modAttrType);
List<Attribute> attrList =
- resourceEntry.getAttribute(modAttrType, modAttr
- .getOptions());
+ resourceEntry.getAttribute(modAttrType, modAttr.getOptions());
if (attrList != null)
{
for (Attribute a : attrList)
@@ -898,8 +895,7 @@
case INCREMENT:
Entry modifiedEntry = operation.getModifiedEntry();
List<Attribute> modifiedAttrs =
- modifiedEntry.getAttribute(modAttrType, modAttr
- .getOptions());
+ modifiedEntry.getAttribute(modAttrType, modAttr.getOptions());
if (modifiedAttrs != null)
{
for (Attribute attr : modifiedAttrs)
@@ -1272,10 +1268,8 @@
if (globalAcis != null)
{
aciList.addAci(DN.nullDN(), globalAcis);
- Message message =
- INFO_ACI_ADD_LIST_GLOBAL_ACIS.get(Integer
- .toString(globalAcis.size()));
- logError(message);
+ logError(INFO_ACI_ADD_LIST_GLOBAL_ACIS.get(
+ Integer.toString(globalAcis.size())));
}
}
catch (Exception e)
@@ -1284,9 +1278,8 @@
{
TRACER.debugCaught(DebugLogLevel.ERROR, e);
}
- Message message =
- INFO_ACI_HANDLER_FAIL_PROCESS_GLOBAL_ACI.get(String
- .valueOf(configuration.dn()));
+ Message message = INFO_ACI_HANDLER_FAIL_PROCESS_GLOBAL_ACI.get(
+ String.valueOf(configuration.dn()));
throw new InitializationException(message, e);
}
}
@@ -1480,9 +1473,8 @@
if (!operation.getClientConnection().hasPrivilege(
Privilege.MODIFY_ACL, operation))
{
- Message message =
- INFO_ACI_ADD_FAILED_PRIVILEGE.get(String.valueOf(entry
- .getDN()), String.valueOf(clientDN));
+ Message message = INFO_ACI_ADD_FAILED_PRIVILEGE.get(
+ String.valueOf(entry.getDN()), String.valueOf(clientDN));
logError(message);
return false;
}
@@ -1498,9 +1490,8 @@
}
catch (AciException ex)
{
- Message message =
- WARN_ACI_ADD_FAILED_DECODE.get(String.valueOf(entry
- .getDN()), ex.getMessage());
+ Message message = WARN_ACI_ADD_FAILED_DECODE.get(
+ String.valueOf(entry.getDN()), ex.getMessage());
throw new DirectoryException(
ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
}
diff --git a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
index 76f71eb..e3202b4 100644
--- a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java
@@ -275,8 +275,9 @@
entryLock = LockManager.lockWrite(entryDN);
if (entryLock == null)
{
- setResultCodeAndMessageNoInfoDisclosure(entryDN, ResultCode.BUSY,
- ERR_ADD_CANNOT_LOCK_ENTRY.get(String.valueOf(entryDN)));
+ setResultCode(ResultCode.BUSY);
+ appendErrorMessage(ERR_ADD_CANNOT_LOCK_ENTRY.get(
+ String.valueOf(entryDN)));
return;
}
@@ -291,8 +292,8 @@
provider.handleConflictResolution(this);
if (!result.continueProcessing())
{
- setResultCodeAndMessageNoInfoDisclosure(entryDN,
- result.getResultCode(), result.getErrorMessage());
+ setResultCode(result.getResultCode());
+ appendErrorMessage(result.getErrorMessage());
setMatchedDN(result.getMatchedDN());
setReferralURLs(result.getReferralURLs());
return;
@@ -640,47 +641,40 @@
* @throws DirectoryException If a problem occurs while attempting to
* acquire the lock.
*/
- private Lock lockParent(DN parentDN)
- throws DirectoryException
+ private Lock lockParent(DN parentDN) throws DirectoryException
{
- Lock parentLock = null;
-
- if (parentDN == null)
+ if (parentDN != null)
{
- // Either this entry is a suffix or doesn't belong in the directory.
- if (DirectoryServer.isNamingContext(entryDN))
+ final Lock parentLock = LockManager.lockRead(parentDN);
+ if (parentLock == null)
{
- // This is fine. This entry is one of the configured suffixes.
- parentLock = null;
+ throw newDirectoryException(parentDN, ResultCode.BUSY,
+ ERR_ADD_CANNOT_LOCK_PARENT.get(
+ String.valueOf(entryDN),
+ String.valueOf(parentDN)));
}
- else if (entryDN.isNullDN())
- {
- // This is not fine. The root DSE cannot be added.
- throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
- ERR_ADD_CANNOT_ADD_ROOT_DSE.get());
- }
- else
- {
- // The entry doesn't have a parent but isn't a suffix. This is not
- // allowed.
- throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
- ERR_ADD_ENTRY_NOT_SUFFIX.get(
- String.valueOf(entryDN)));
- }
+ return parentLock;
+ }
+
+ // Either this entry is a suffix or doesn't belong in the directory.
+ if (DirectoryServer.isNamingContext(entryDN))
+ {
+ // This is fine. This entry is one of the configured suffixes.
+ return null;
+ }
+ else if (entryDN.isNullDN())
+ {
+ // This is not fine. The root DSE cannot be added.
+ throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
+ ERR_ADD_CANNOT_ADD_ROOT_DSE.get());
}
else
{
- parentLock = LockManager.lockRead(parentDN);
- if (parentLock == null)
- {
- throw newDirectoryException(entryDN, ResultCode.BUSY,
- ERR_ADD_CANNOT_LOCK_PARENT.get(
- String.valueOf(entryDN),
- String.valueOf(parentDN)));
- }
+ // The entry doesn't have a parent but isn't a suffix. This is not
+ // allowed.
+ throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
+ ERR_ADD_ENTRY_NOT_SUFFIX.get(String.valueOf(entryDN)));
}
-
- return parentLock;
}
diff --git a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java
index 6d6db9a..2c38cc3 100644
--- a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java
@@ -195,8 +195,9 @@
{
if (readLock == null)
{
- setResultCodeAndMessageNoInfoDisclosure(null, entryDN, ResultCode.BUSY,
- ERR_COMPARE_CANNOT_LOCK_ENTRY.get(String.valueOf(entryDN)));
+ setResultCode(ResultCode.BUSY);
+ appendErrorMessage(ERR_COMPARE_CANNOT_LOCK_ENTRY.get(
+ String.valueOf(entryDN)));
return;
}
@@ -204,7 +205,6 @@
try
{
entry = DirectoryServer.getEntry(entryDN);
-
if (entry == null)
{
setResultCode(ResultCode.NO_SUCH_OBJECT);
diff --git a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
index cc2c9c1..f09405f 100644
--- a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java
@@ -242,8 +242,9 @@
{
if (entryLock == null)
{
- setResultCodeAndMessageNoInfoDisclosure(entry, ResultCode.BUSY,
- ERR_DELETE_CANNOT_LOCK_ENTRY.get(String.valueOf(entryDN)));
+ setResultCode(ResultCode.BUSY);
+ appendErrorMessage(ERR_DELETE_CANNOT_LOCK_ENTRY.get(
+ String.valueOf(entryDN)));
return;
}
diff --git a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
index cdc08e1..79ee3ae 100644
--- a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java
@@ -341,8 +341,9 @@
{
if (currentLock == null)
{
- setResultCodeAndMessageNoInfoDisclosure(null, entryDN, ResultCode.BUSY,
- ERR_MODDN_CANNOT_LOCK_CURRENT_DN.get(String.valueOf(entryDN)));
+ setResultCode(ResultCode.BUSY);
+ appendErrorMessage(ERR_MODDN_CANNOT_LOCK_CURRENT_DN.get(
+ String.valueOf(entryDN)));
return;
}
@@ -351,9 +352,9 @@
newLock = LockManager.lockWrite(newDN);
if (newLock == null)
{
- setResultCodeAndMessageNoInfoDisclosure(null, newDN, ResultCode.BUSY,
- ERR_MODDN_CANNOT_LOCK_NEW_DN.get(String.valueOf(entryDN), String
- .valueOf(newDN)));
+ setResultCode(ResultCode.BUSY);
+ appendErrorMessage(ERR_MODDN_CANNOT_LOCK_NEW_DN.get(
+ String.valueOf(entryDN), String.valueOf(newDN)));
return;
}
}
@@ -537,11 +538,11 @@
}
}
- private DirectoryException newDirectoryException(Entry entry, DN entryDN,
+ private DirectoryException newDirectoryException(Entry entry,
ResultCode resultCode, Message message) throws DirectoryException
{
- return LocalBackendWorkflowElement.newDirectoryException(this, entry,
- entryDN, resultCode, message, ResultCode.NO_SUCH_OBJECT,
+ return LocalBackendWorkflowElement.newDirectoryException(this, entry, null,
+ resultCode, message, ResultCode.NO_SUCH_OBJECT,
ERR_MODDN_NO_CURRENT_ENTRY.get(String.valueOf(entryDN)));
}
@@ -613,8 +614,7 @@
TRACER.debugCaught(DebugLogLevel.ERROR, de);
}
- throw newDirectoryException(currentEntry, entryDN,
- de.getResultCode(),
+ throw newDirectoryException(currentEntry, de.getResultCode(),
ERR_MODDN_CANNOT_PROCESS_ASSERTION_FILTER.get(
String.valueOf(entryDN),
de.getMessageObject()));
@@ -634,7 +634,7 @@
{
if (!filter.matchesEntry(currentEntry))
{
- throw newDirectoryException(currentEntry, entryDN,
+ throw newDirectoryException(currentEntry,
ResultCode.ASSERTION_FAILED,
ERR_MODDN_ASSERTION_FAILED.get(String
.valueOf(entryDN)));
@@ -652,8 +652,7 @@
TRACER.debugCaught(DebugLogLevel.ERROR, de);
}
- throw newDirectoryException(currentEntry, entryDN,
- de.getResultCode(),
+ throw newDirectoryException(currentEntry, de.getResultCode(),
ERR_MODDN_CANNOT_PROCESS_ASSERTION_FILTER.get(
String.valueOf(entryDN),
de.getMessageObject()));
diff --git a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
index d92669a..8a1d3d0 100644
--- a/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java
@@ -417,8 +417,9 @@
{
if (entryLock == null)
{
- setResultCodeAndMessageNoInfoDisclosure(currentEntry, ResultCode.BUSY,
- ERR_MODIFY_CANNOT_LOCK_ENTRY.get(String.valueOf(entryDN)));
+ setResultCode(ResultCode.BUSY);
+ appendErrorMessage(ERR_MODIFY_CANNOT_LOCK_ENTRY.get(
+ String.valueOf(entryDN)));
return;
}
--
Gitblit v1.10.0