From de31d33cb934a7ec46beedfbf25fe0f069ac0cfa Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Mon, 30 Nov 2009 09:36:32 +0000
Subject: [PATCH] Fix for 4373 : Replication initialization can take a long time at startup

---
 opends/src/server/org/opends/server/replication/server/ReplicationServer.java       |    3 ++-
 opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java  |    8 ++++++++
 opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java |    2 +-
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java b/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
index e34aa13..c738d45 100644
--- a/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
+++ b/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
@@ -119,6 +119,8 @@
 
   private boolean isRegistered = false;
 
+  private static boolean initializationCompleted = true;
+
   /**
    * Finds the domain for a given DN.
    *
@@ -268,6 +270,7 @@
       ReplicationSynchronizationProviderCfg configuration)
   throws ConfigException
   {
+    initializationCompleted = false;
     domains.clear();
     replicationServerListener = new ReplicationServerListener(configuration);
 
@@ -307,6 +310,8 @@
 
     DirectoryServer.registerSupportedControl(
         ReplicationRepairRequestControl.OID_REPLICATION_REPAIR_CONTROL);
+
+    initializationCompleted = true;
   }
 
   /**
@@ -843,6 +848,9 @@
    */
   public static boolean isLocalServerId(Integer serverId)
   {
+    if (!initializationCompleted)
+      return true;
+
     for (LDAPReplicationDomain domain : domains.values())
     {
       if (domain.getServerId() == serverId)
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 28a8fc4..056667d 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -1608,7 +1608,8 @@
 
     // Copy the list of domains as a new domain may arrive or disappear between
     // the initializeMonitorData and completeMonitorData calls
-    List<ReplicationServerDomain> rsdList = new ArrayList(baseDNs.values());
+    List<ReplicationServerDomain> rsdList =
+                new ArrayList<ReplicationServerDomain>(baseDNs.values());
 
     for (ReplicationServerDomain domain : rsdList)
     {
diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java b/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
index 0c455f6..be04977 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -164,7 +164,7 @@
    */
   private MonitorData monitorData = new MonitorData();
   private MonitorData wrkMonitorData;
-  private Object monitorDataLock = new Object();
+  private final Object monitorDataLock = new Object();
 
   /**
    * The needed info for each received assured update message we are waiting

--
Gitblit v1.10.0