From 09ef01374239f7048c2db6bb9cad2b8a807d4cf8 Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Wed, 28 Oct 2009 08:38:19 +0000
Subject: [PATCH] Fix#4320 ECL Replication Server only should not support 'cn=changelog' naming context
---
opends/src/server/org/opends/server/replication/server/ReplicationServer.java | 84 +++++++++++++++++++-----------------------
1 files changed, 38 insertions(+), 46 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index c0c1655..b4403da 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -185,8 +185,11 @@
*/
private static final DebugTracer TRACER = getTracer();
- private String externalChangeLogWorkflowID = "External Changelog Workflow ID";
+ private static String externalChangeLogWorkflowID =
+ "External Changelog Workflow ID";
ECLWorkflowElement eclwe;
+ WorkflowImpl externalChangeLogWorkflowImpl = null;
+
private static HashSet<Integer> localPorts = new HashSet<Integer>();
// used to synchronize the domain creation with the connect thread.
@@ -501,15 +504,6 @@
socket.setTcpNoDelay(true);
socket.connect(ServerAddr, 500);
- /*
- ServerHandler handler = new ServerHandler(
- replSessionSecurity.createClientSession(serverURL, socket,
- ReplSessionSecurity.HANDSHAKE_TIMEOUT),
- queueSize);
- handler.start(baseDn, serverId, this.serverURL, rcvWindow,
- sslEncryption, this);
- */
-
ReplicationServerHandler handler = new ReplicationServerHandler(
replSessionSecurity.createClientSession(remoteServerURL,
socket,
@@ -578,9 +572,14 @@
serverId , this);
listenThread.start();
- // Initialize the External Changelog
- // FIXME: how is WF creation enabed/disabled in the RS ?
- initializeECL();
+ // Creates the ECL workflow elem so that DS (LDAPReplicationDomain)
+ // can know me and really enableECL.
+ if (WorkflowImpl.getWorkflow(externalChangeLogWorkflowID) != null)
+ {
+ // Already done . Nothing to do
+ return;
+ }
+ eclwe = new ECLWorkflowElement(this);
if (debugEnabled())
TRACER.debugInfo("RS " +getMonitorInstanceName()+
@@ -609,64 +608,57 @@
{
//FIXME:DirectoryException is raised by initializeECL => fix err msg
Message message = Message.raw(Category.SYNC, Severity.SEVERE_ERROR,
- "Directory Exception raised by ECL initialization: " + e.getMessage());
+ "Directory Exception raised by ECL initialization: " + e.getMessage());
logError(message);
}
}
/**
- * Initializes the ECL access by creating a dedicated workflow element.
- * @throws DirectoryException
+ * Enable the ECL access by creating a dedicated workflow element.
+ * @throws DirectoryException when an error occurs.
*/
- private void initializeECL()
+ public void enableECL()
throws DirectoryException
{
- WorkflowImpl externalChangeLogWorkflow;
- if (WorkflowImpl.getWorkflow(externalChangeLogWorkflowID)
- !=null)
+ if (externalChangeLogWorkflowImpl!=null)
+ {
+ // do nothing if ECL is already enabled
return;
-
- ECLWorkflowElement eclwe = new ECLWorkflowElement(this);
+ }
// Create the workflow for the base DN and register the workflow with
// the server.
- externalChangeLogWorkflow = new WorkflowImpl(
+ externalChangeLogWorkflowImpl = new WorkflowImpl(
externalChangeLogWorkflowID,
DN.decode(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT),
eclwe.getWorkflowElementID(),
eclwe);
- externalChangeLogWorkflow.register();
+ externalChangeLogWorkflowImpl.register();
NetworkGroup defaultNetworkGroup = NetworkGroup.getDefaultNetworkGroup();
- defaultNetworkGroup.registerWorkflow(externalChangeLogWorkflow);
+ defaultNetworkGroup.registerWorkflow(externalChangeLogWorkflowImpl);
// FIXME:ECL should the ECL Workflow be registered in adminNetworkGroup?
NetworkGroup adminNetworkGroup = NetworkGroup.getAdminNetworkGroup();
- adminNetworkGroup.registerWorkflow(externalChangeLogWorkflow);
+ adminNetworkGroup.registerWorkflow(externalChangeLogWorkflowImpl);
// FIXME:ECL should the ECL Workflow be registered in internalNetworkGroup?
NetworkGroup internalNetworkGroup = NetworkGroup.getInternalNetworkGroup();
- internalNetworkGroup.registerWorkflow(externalChangeLogWorkflow);
+ internalNetworkGroup.registerWorkflow(externalChangeLogWorkflowImpl);
- try
- {
- enableECLVirtualAttr("lastexternalchangelogcookie",
- new LastCookieVirtualProvider());
- enableECLVirtualAttr("firstchangenumber",
- new FirstChangeNumberVirtualAttributeProvider());
- enableECLVirtualAttr("lastchangenumber",
- new LastChangeNumberVirtualAttributeProvider());
- enableECLVirtualAttr("changelog",
- new ChangelogBaseDNVirtualAttributeProvider());
- }
- catch (Exception e)
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- }
+ enableECLVirtualAttr("lastexternalchangelogcookie",
+ new LastCookieVirtualProvider());
+ enableECLVirtualAttr("firstchangenumber",
+ new FirstChangeNumberVirtualAttributeProvider());
+ enableECLVirtualAttr("lastchangenumber",
+ new LastChangeNumberVirtualAttributeProvider());
+ enableECLVirtualAttr("changelog",
+ new ChangelogBaseDNVirtualAttributeProvider());
}
- private void enableECLVirtualAttr(String attrName,
+ private static void enableECLVirtualAttr(String attrName,
VirtualAttributeProvider<UserDefinedVirtualAttributeCfg> provider)
+ throws DirectoryException
{
Set<DN> baseDNs = new HashSet<DN>(0);
Set<DN> groupDNs = new HashSet<DN>(0);
@@ -694,13 +686,13 @@
baseDNs, groupDNs, filters, conflictBehavior);
DirectoryServer.registerVirtualAttribute(rule);
-
}
catch (Exception e)
{
Message message =
- NOTE_UNABLE_TO_ENABLE_ECL_VIRTUAL_ATTR.get(attrName, e.toString());
- logError(message);
+ NOTE_ERR_UNABLE_TO_ENABLE_ECL_VIRTUAL_ATTR.get(attrName, e.toString());
+ throw new DirectoryException(ResultCode.OPERATIONS_ERROR,
+ message, e);
}
}
--
Gitblit v1.10.0