From 9c31cbe94407a9986e221bd1a05fb51ad51eb8cf Mon Sep 17 00:00:00 2001
From: fdorson <fdorson@localhost>
Date: Mon, 07 Jul 2008 14:45:19 +0000
Subject: [PATCH] 2nd try: fix for issue #3317 : Removing replication links requires re-start of the server and issue #3363 : NullPointerException in ReplicationBroker.java

---
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 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 47058ec..14de2c9 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
@@ -627,9 +627,13 @@
   {
     // Changing those properties don't need specific code.
     // They will be applied for next connections.
+
+    disconnectRemovedReplicationServers(configuration.getReplicationServer());
+
     replicationServers = configuration.getReplicationServer();
     if (replicationServers == null)
       replicationServers = new ArrayList<String>();
+
     queueSize = configuration.getQueueSize();
     long newPurgeDelay = configuration.getReplicationPurgeDelay();
     if (newPurgeDelay != purgeDelay)
@@ -1024,4 +1028,30 @@
       }
     }
   }
+
+  /**
+   * Compute the list of replication servers that are not any
+   * more connected to this Replication Server and stop the
+   * corresponding handlers.
+   * @param newReplServers the list of the new replication servers configured.
+   */
+  private void disconnectRemovedReplicationServers(
+      Collection<String> newReplServers)
+  {
+    Collection<String> serversToDisconnect = new ArrayList<String>();
+
+    for (String server: replicationServers)
+    {
+      if (!newReplServers.contains(server))
+        serversToDisconnect.add(server);
+    }
+
+    if (serversToDisconnect.isEmpty())
+      return;
+
+    for (ReplicationServerDomain replicationServerDomain: baseDNs.values())
+    {
+      replicationServerDomain.stopServers(serversToDisconnect);
+    }
+  }
 }

--
Gitblit v1.10.0