From 25862fdf888ed23207ab51937a43e6f9ad41d805 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Mon, 22 Sep 2014 16:23:50 +0000
Subject: [PATCH] OPENDJ-1206 (CR-4393) Create a new ReplicationBackend/ChangelogBackend to support cn=changelog

---
 opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java |   97 +-----------------------------------------------
 1 files changed, 3 insertions(+), 94 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
index 67d358e..1783b4d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -31,7 +31,6 @@
 import java.util.*;
 import java.util.concurrent.CopyOnWriteArraySet;
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
@@ -46,8 +45,6 @@
 import org.opends.server.api.VirtualAttributeProvider;
 import org.opends.server.backends.ChangelogBackend;
 import org.opends.server.core.DirectoryServer;
-import org.opends.server.core.WorkflowImpl;
-import org.opends.server.core.networkgroups.NetworkGroup;
 import org.opends.server.replication.common.*;
 import org.opends.server.replication.plugin.MultimasterReplication;
 import org.opends.server.replication.protocol.*;
@@ -60,8 +57,6 @@
 import org.opends.server.replication.server.changelog.je.JEChangelogDB;
 import org.opends.server.replication.service.DSRSShutdownSync;
 import org.opends.server.types.*;
-import org.opends.server.util.ServerConstants;
-import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
 
 import static org.opends.messages.ConfigMessages.*;
 import static org.opends.messages.ReplicationMessages.*;
@@ -109,12 +104,6 @@
   /** To know whether a domain is enabled for the external changelog. */
   private final ECLEnabledDomainPredicate domainPredicate;
 
-  private static final String eclWorkflowID =
-    "External Changelog Workflow ID";
-  private ECLWorkflowElement eclwe;
-  private final AtomicReference<WorkflowImpl> eclWorkflowImpl =
-      new AtomicReference<WorkflowImpl>();
-
   /**
    * This is required for unit testing, so that we can keep track of all the
    * replication servers which are running in the VM.
@@ -173,6 +162,8 @@
     this.config = cfg;
     this.dsrsShutdownSync = dsrsShutdownSync;
     this.domainPredicate = predicate;
+
+    enableExternalChangeLog();
     ReplicationDBImplementation dbImpl = cfg.getReplicationDBImplementation();
     logger.trace("Using %s as DB implementation for changelog DB", dbImpl);
     if (dbImpl == ReplicationDBImplementation.JE)
@@ -188,9 +179,6 @@
     initialize();
     cfg.addChangeListener(this);
 
-    // TODO : uncomment to branch changelog backend
-    //enableExternalChangeLog();
-
     localPorts.add(getReplicationPort());
 
     // Keep track of this new instance
@@ -458,15 +446,6 @@
       listenThread = new ReplicationServerListenThread(this);
       listenThread.start();
 
-      // Creates the ECL workflow elem so that DS (LDAPReplicationDomain)
-      // can know me and really enableECL.
-      if (WorkflowImpl.getWorkflow(eclWorkflowID) != null)
-      {
-        // Already done. Nothing to do
-        return;
-      }
-      eclwe = new ECLWorkflowElement(this);
-
       if (logger.isTraceEnabled())
       {
         logger.trace("RS " + getMonitorInstanceName() + " successfully initialized");
@@ -477,50 +456,10 @@
     } catch (IOException e)
     {
       logger.error(ERR_COULD_NOT_BIND_CHANGELOG, getReplicationPort(), e.getMessage());
-    } catch (DirectoryException e)
-    {
-      //FIXME:DirectoryException is raised by initializeECL => fix err msg
-      logger.error(LocalizableMessage.raw(
-          "Directory Exception raised by ECL initialization: %s", e.getMessage()));
     }
   }
 
   /**
-   * Enable the ECL access by creating a dedicated workflow element.
-   * @throws DirectoryException when an error occurs.
-   */
-  public void enableECL() throws DirectoryException
-  {
-    if (eclWorkflowImpl.get() != null)
-    {
-      // ECL is already enabled, do nothing
-      return;
-    }
-
-    // Create the workflow for the base DN
-    // and register the workflow with the server.
-    final DN dn = DN.valueOf(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
-    final WorkflowImpl workflowImpl = new WorkflowImpl(eclWorkflowID, dn,
-        eclwe.getWorkflowElementID(), eclwe);
-    if (!eclWorkflowImpl.compareAndSet(null, workflowImpl))
-    {
-      // ECL is being enabled, do nothing
-      return;
-    }
-
-    workflowImpl.register();
-
-    NetworkGroup.getDefaultNetworkGroup().registerWorkflow(workflowImpl);
-
-    // FIXME:ECL should the ECL Workflow be registered in admin and internal
-    // network groups?
-    NetworkGroup.getAdminNetworkGroup().registerWorkflow(workflowImpl);
-    NetworkGroup.getInternalNetworkGroup().registerWorkflow(workflowImpl);
-
-    registerVirtualAttributeRules();
-  }
-
-  /**
    * Enable the external changelog if it is not already enabled.
    * <p>
    * The external changelog is provided by the changelog backend.
@@ -636,34 +575,6 @@
     }
   }
 
-  private void shutdownECL()
-  {
-    WorkflowImpl eclwf = (WorkflowImpl) WorkflowImpl.getWorkflow(eclWorkflowID);
-    // do it only if not already done by another RS (unit test case)
-    if (eclwf != null)
-    {
-      // FIXME:ECL should the ECL Workflow be registered in admin and internal
-      // network groups?
-      NetworkGroup.getInternalNetworkGroup().deregisterWorkflow(eclWorkflowID);
-      NetworkGroup.getAdminNetworkGroup().deregisterWorkflow(eclWorkflowID);
-
-      NetworkGroup.getDefaultNetworkGroup().deregisterWorkflow(eclWorkflowID);
-
-      deregisterVirtualAttributeRules();
-
-      eclwf.deregister();
-      eclwf.finalizeWorkflow();
-    }
-
-    eclwe = (ECLWorkflowElement) DirectoryServer
-        .getWorkflowElement("EXTERNAL CHANGE LOG");
-    if (eclwe != null)
-    {
-      DirectoryServer.deregisterWorkflowElement(eclwe);
-      eclwe.finalizeWorkflowElement();
-    }
-  }
-
   /**
    * Get the ReplicationServerDomain associated to the base DN given in
    * parameter.
@@ -901,9 +812,7 @@
       domain.shutdown();
     }
 
-    // TODO : switch to second method when changelog backend is branched
-    shutdownECL();
-    //shutdownExternalChangelog();
+    shutdownExternalChangelog();
 
     try
     {

--
Gitblit v1.10.0