From 2b71499102401aee3dc084355a293abb45f81a28 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 21 Jul 2014 12:22:07 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1206 : Create a new ReplicationBackend/ChangelogBackend to support cn=changelog CR-4052
---
opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java | 28 ++++++++++----
opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationWrapper.java | 17 ++++++++
opendj-sdk/opends/src/messages/messages/core.properties | 7 ++-
opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java | 19 +++++++++
opendj-sdk/opends/src/server/org/opends/server/core/SearchOperation.java | 20 +++++++++
5 files changed, 78 insertions(+), 13 deletions(-)
diff --git a/opendj-sdk/opends/src/messages/messages/core.properties b/opendj-sdk/opends/src/messages/messages/core.properties
index a03040b..a854126 100644
--- a/opendj-sdk/opends/src/messages/messages/core.properties
+++ b/opendj-sdk/opends/src/messages/messages/core.properties
@@ -20,7 +20,7 @@
# CDDL HEADER END
#
# Copyright 2006-2010 Sun Microsystems, Inc.
-# Portions copyright 2011-2012 ForgeRock AS
+# Portions copyright 2011-2014 ForgeRock AS
@@ -1429,4 +1429,7 @@
SEVERE_ERR_PWPOLICY_REJECT_DUE_TO_UNKNOWN_VALIDATOR_LOG_747=The password for \
user %s could not be validated because the password policy subentry %s is \
referring to an unknown password validator (%s). Please make sure the password \
- policy subentry only refers to validators that exist on all replicas
\ No newline at end of file
+ policy subentry only refers to validators that exist on all replicas
+MILD_ERR_SEARCH_UNSUPPORTED_CRITICAL_CONTROL_ECL_COOKIE_EXCHANGE_748=The search request \
+ cannot be processed because the backend "%s" does not support the Changelog Exchange Control \
+ (oid: 1.3.6.1.4.1.26027.1.5.4)
\ No newline at end of file
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperation.java b/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperation.java
index b94cc35..00b3676 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperation.java
@@ -22,13 +22,14 @@
*
*
* Copyright 2006-2009 Sun Microsystems, Inc.
- * Portions Copyright 2011-2013 ForgeRock AS
+ * Portions Copyright 2011-2014 ForgeRock AS
*/
package org.opends.server.core;
import java.util.List;
import java.util.Set;
+import org.opends.server.controls.ExternalChangelogRequestControl;
import org.opends.server.controls.MatchedValuesControl;
import org.opends.server.types.*;
@@ -488,4 +489,21 @@
*/
public abstract void setProxiedAuthorizationDN(DN proxiedAuthorizationDN);
+ /**
+ * Retrieves the external changelog request control.
+ *
+ * @return the external changelog request control, or {@code null}
+ * if the control has not been requested.
+ */
+ public abstract ExternalChangelogRequestControl getECLRequestControl();
+
+ /**
+ * Sets the external changelog request control.
+ * <p>
+ * It should be set only when searching the external changelog.
+ *
+ * @param control
+ * The external changelog request control.
+ */
+ public abstract void setECLRequestControl(ExternalChangelogRequestControl control);
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java b/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java
index 62cd5f5..296488e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationBasis.java
@@ -22,7 +22,7 @@
*
*
* Copyright 2006-2010 Sun Microsystems, Inc.
- * Portions Copyright 2011-2013 ForgeRock AS
+ * Portions Copyright 2011-2014 ForgeRock AS
*/
package org.opends.server.core;
@@ -34,6 +34,7 @@
import org.opends.server.api.ClientConnection;
import org.opends.server.api.plugin.PluginResult;
import org.opends.server.controls.AccountUsableResponseControl;
+import org.opends.server.controls.ExternalChangelogRequestControl;
import org.opends.server.controls.MatchedValuesControl;
import org.opends.server.core.networkgroups.NetworkGroup;
import org.opends.server.loggers.debug.DebugLogger;
@@ -163,6 +164,8 @@
/** Indicates whether to send the search result done to the client or not. */
private boolean sendResponse = true;
+ private ExternalChangelogRequestControl eclRequestControl;
+
/**
* Creates a new search operation with the provided information.
*
@@ -1078,6 +1081,20 @@
this.matchedValuesControl = controls;
}
+ /** {@inheritDoc} */
+ @Override
+ public ExternalChangelogRequestControl getECLRequestControl()
+ {
+ return eclRequestControl;
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void setECLRequestControl(ExternalChangelogRequestControl control)
+ {
+ eclRequestControl = control;
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationWrapper.java b/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationWrapper.java
index 882e388..9bae780 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationWrapper.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/core/SearchOperationWrapper.java
@@ -22,13 +22,14 @@
*
*
* Copyright 2008-2009 Sun Microsystems, Inc.
- * Portions Copyright 2011-2013 ForgeRock AS
+ * Portions Copyright 2011-2014 ForgeRock AS
*/
package org.opends.server.core;
import java.util.List;
import java.util.Set;
+import org.opends.server.controls.ExternalChangelogRequestControl;
import org.opends.server.controls.MatchedValuesControl;
import org.opends.server.types.*;
@@ -492,4 +493,18 @@
getOperation().setProxiedAuthorizationDN(proxiedAuthorizationDN);
}
+ /** {@inheritDoc} */
+ @Override
+ public ExternalChangelogRequestControl getECLRequestControl()
+ {
+ return getOperation().getECLRequestControl();
+ }
+
+ /** {@inheritDoc} */
+ @Override
+ public void setECLRequestControl(ExternalChangelogRequestControl control)
+ {
+ getOperation().setECLRequestControl(control);
+ }
+
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java
index 1a6fe96..00970f5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/localbackend/LocalBackendSearchOperation.java
@@ -22,7 +22,7 @@
*
*
* Copyright 2008-2010 Sun Microsystems, Inc.
- * Portions copyright 2011-2013 ForgeRock AS
+ * Portions copyright 2011-2014 ForgeRock AS
*/
package org.opends.server.workflowelement.localbackend;
@@ -526,20 +526,32 @@
{
// Do nothing here and let AciHandler deal with it.
}
-
- // NYI -- Add support for additional controls.
-
- else if (c.isCritical())
+ else if (OID_ECL_COOKIE_EXCHANGE_CONTROL.equals(oid))
{
- if ((backend == null) || (! backend.supportsControl(oid)))
+ if (c.isCritical() && !backendSupportsControl(oid))
{
throw new DirectoryException(
- ResultCode.UNAVAILABLE_CRITICAL_EXTENSION,
- ERR_SEARCH_UNSUPPORTED_CRITICAL_CONTROL.get(oid));
+ ResultCode.UNAVAILABLE_CRITICAL_EXTENSION,
+ ERR_SEARCH_UNSUPPORTED_CRITICAL_CONTROL_ECL_COOKIE_EXCHANGE.get(backend.getBackendID()));
}
+ setECLRequestControl(getRequestControl(ExternalChangelogRequestControl.DECODER));
+ }
+ // NYI -- Add support for additional controls.
+
+ else if (c.isCritical() && !backendSupportsControl(oid))
+ {
+ throw new DirectoryException(
+ ResultCode.UNAVAILABLE_CRITICAL_EXTENSION,
+ ERR_SEARCH_UNSUPPORTED_CRITICAL_CONTROL.get(oid));
}
}
}
}
+
+ /** Indicates if the backend supports the control corresponding to provided oid. */
+ private boolean backendSupportsControl(final String oid)
+ {
+ return backend != null && backend.supportsControl(oid);
+ }
}
--
Gitblit v1.10.0