From 763640e8f9698113b2c001a71a718eecb60ac30c Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 03 Jul 2014 15:19:12 +0000
Subject: [PATCH] OPENDJ-1453 (CR-3938) Replica offline messages should be synced with updates

---
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java |   66 +++++++++++++++++++++-----------
 1 files changed, 43 insertions(+), 23 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index 96cf81f..9f013a8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -37,8 +37,8 @@
 import org.opends.messages.Message;
 import org.opends.messages.Severity;
 import org.opends.server.admin.server.ConfigurationChangeListener;
-import org.opends.server.admin.std.meta.ReplicationServerCfgDefn.*;
-import org.opends.server.admin.std.meta.VirtualAttributeCfgDefn.*;
+import org.opends.server.admin.std.meta.ReplicationServerCfgDefn.ReplicationDBImplementation;
+import org.opends.server.admin.std.meta.VirtualAttributeCfgDefn.ConflictBehavior;
 import org.opends.server.admin.std.server.ReplicationServerCfg;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
@@ -51,9 +51,13 @@
 import org.opends.server.replication.common.*;
 import org.opends.server.replication.plugin.MultimasterReplication;
 import org.opends.server.replication.protocol.*;
-import org.opends.server.replication.server.changelog.api.*;
+import org.opends.server.replication.server.changelog.api.ChangeNumberIndexDB;
+import org.opends.server.replication.server.changelog.api.ChangeNumberIndexRecord;
+import org.opends.server.replication.server.changelog.api.ChangelogDB;
+import org.opends.server.replication.server.changelog.api.ChangelogException;
 import org.opends.server.replication.server.changelog.file.FileChangelogDB;
 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.util.StaticUtils;
@@ -82,6 +86,7 @@
 
   /** The current configuration of this replication server. */
   private ReplicationServerCfg config;
+  private final DSRSShutdownSync dsrsShutdownSync;
 
   /**
    * This table is used to store the list of dn for which we are currently
@@ -126,34 +131,39 @@
   /**
    * Creates a new Replication server using the provided configuration entry.
    *
-   * @param configuration The configuration of this replication server.
+   * @param cfg The configuration of this replication server.
    * @throws ConfigException When Configuration is invalid.
    */
-  public ReplicationServer(ReplicationServerCfg configuration)
-    throws ConfigException
+  public ReplicationServer(ReplicationServerCfg cfg) throws ConfigException
   {
-    this.config = configuration;
-    ReplicationDBImplementation dbImpl = configuration.getReplicationDBImplementation();
-    if (dbImpl == ReplicationDBImplementation.JE)
+    this(cfg, new DSRSShutdownSync());
+  }
+
+  /**
+   * Creates a new Replication server using the provided configuration entry.
+   *
+   * @param cfg The configuration of this replication server.
+   * @param dsrsShutdownSync Synchronization object for shutdown of combined DS/RS instances.
+   * @throws ConfigException When Configuration is invalid.
+   */
+  public ReplicationServer(ReplicationServerCfg cfg,
+      DSRSShutdownSync dsrsShutdownSync) throws ConfigException
+  {
+    this.config = cfg;
+    this.dsrsShutdownSync = dsrsShutdownSync;
+    ReplicationDBImplementation dbImpl = cfg.getReplicationDBImplementation();
+    if (DebugLogger.debugEnabled())
     {
-      if (DebugLogger.debugEnabled())
-      {
-        TRACER.debugMessage(DebugLogLevel.INFO, "Using JE as DB implementation for changelog DB");
-      }
-      this.changelogDB = new JEChangelogDB(this, configuration);
+      TRACER.debugMessage(DebugLogLevel.INFO, "Using " + dbImpl
+          + " as DB implementation for changelog DB");
     }
-    else
-    {
-      if (DebugLogger.debugEnabled())
-      {
-        TRACER.debugMessage(DebugLogLevel.INFO, "Using LOG FILE as DB implementation for changelog DB");
-      }
-      this.changelogDB = new FileChangelogDB(this, configuration);
-    }
+    this.changelogDB = dbImpl == ReplicationDBImplementation.JE
+        ? new JEChangelogDB(this, cfg)
+        : new FileChangelogDB(this, cfg);
 
     replSessionSecurity = new ReplSessionSecurity();
     initialize();
-    configuration.addChangeListener(this);
+    cfg.addChangeListener(this);
 
     localPorts.add(getReplicationPort());
 
@@ -1227,6 +1237,16 @@
     return this.changelogDB;
   }
 
+  /**
+   * Returns the synchronization object for shutdown of combined DS/RS instances.
+   *
+   * @return the synchronization object for shutdown of combined DS/RS instances.
+   */
+  DSRSShutdownSync getDSRSShutdownSync()
+  {
+    return dsrsShutdownSync;
+  }
+
   /** {@inheritDoc} */
   @Override
   public String toString()

--
Gitblit v1.10.0