From b3c070bb2107aec085fa3f16ba1c118a71e30a7b Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Wed, 13 Feb 2008 09:14:39 +0000
Subject: [PATCH] Fix 2911 - dsreplication pre/post-external initialisation fails to clear all the changelogs
---
opends/src/server/org/opends/server/core/DirectoryServer.java | 2 ++
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerFailoverTest.java | 1 +
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/DependencyTest.java | 4 ++++
opends/src/server/org/opends/server/api/SynchronizationProvider.java | 11 +++++++++++
opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java | 27 +++++++++++++++++++++++----
opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java | 4 +++-
6 files changed, 44 insertions(+), 5 deletions(-)
diff --git a/opends/src/server/org/opends/server/api/SynchronizationProvider.java b/opends/src/server/org/opends/server/api/SynchronizationProvider.java
index 1ba42bb..abcc576 100644
--- a/opends/src/server/org/opends/server/api/SynchronizationProvider.java
+++ b/opends/src/server/org/opends/server/api/SynchronizationProvider.java
@@ -117,6 +117,17 @@
/**
+ * Performs any necessary final initialization processing for this
+ * synchronization provider.
+ * This will be called just after the provider has been
+ * registered with the server but before it has been unloaded.
+ */
+ public void completeSynchronizationProvider()
+ {
+ // No implementation is required by default.
+ }
+
+ /**
* Performs any necessary finalization for this synchronization
* provider. This will be called just after the provider has been
* deregistered with the server but before it has been unloaded.
diff --git a/opends/src/server/org/opends/server/core/DirectoryServer.java b/opends/src/server/org/opends/server/core/DirectoryServer.java
index 34cf5e1..51f9b3c 100644
--- a/opends/src/server/org/opends/server/core/DirectoryServer.java
+++ b/opends/src/server/org/opends/server/core/DirectoryServer.java
@@ -7640,6 +7640,8 @@
SynchronizationProvider<SynchronizationProviderCfg> provider)
{
directoryServer.synchronizationProviders.add(provider);
+
+ provider.completeSynchronizationProvider();
}
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 cc6afcb..81798bf 100644
--- a/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
+++ b/opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
@@ -112,6 +112,8 @@
*/
private static int replayThreadNumber = 10;
+ private boolean isRegistered = false;
+
/**
* Finds the domain for a given DN.
*
@@ -200,7 +202,6 @@
}
domains.put(domain.getBaseDN(), domain);
- domain.start();
return domain;
}
@@ -321,7 +322,11 @@
{
try
{
- createNewDomain(configuration);
+ ReplicationDomain rd = createNewDomain(configuration);
+ if (isRegistered)
+ {
+ rd.start();
+ }
return new ConfigChangeResult(ResultCode.SUCCESS, false);
} catch (ConfigException e)
{
@@ -507,6 +512,8 @@
@Override
public void finalizeSynchronizationProvider()
{
+ isRegistered = false;
+
// shutdown all the domains
for (ReplicationDomain domain : domains.values())
{
@@ -731,6 +738,18 @@
return new ConfigChangeResult(ResultCode.SUCCESS, false);
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public void completeSynchronizationProvider()
+ {
+ isRegistered = true;
+
+ // start all the domains
+ for (ReplicationDomain domain : domains.values())
+ {
+ domain.start();
+ }
+ }
}
-
-
diff --git a/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java b/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java
index 89ed473..760d42b 100644
--- a/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java
+++ b/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java
@@ -266,7 +266,7 @@
* A boolean indicating if the thread used to save the persistentServerState
* is terminated.
*/
- private boolean done = false;
+ private boolean done = true;
/**
* This class contain the context related to an import or export
@@ -1222,6 +1222,8 @@
@Override
public void run()
{
+ done = false;
+
// Create the listener thread
listenerThread = new ListenerThread(this, updateToReplayQueue);
listenerThread.start();
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/DependencyTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/DependencyTest.java
index 3769f68..4f88f92 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/DependencyTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/DependencyTest.java
@@ -179,6 +179,7 @@
domainConf.setHeartbeatInterval(100000);
domain = MultimasterReplication.createNewDomain(domainConf);
+ replicationPlugin.completeSynchronizationProvider();
// check that last entry in sequence got added.
Entry lastEntry = getEntry(DN.decode(addDn), 30000, true);
@@ -304,6 +305,7 @@
Thread.sleep(2000);
domain = MultimasterReplication.createNewDomain(domainConf);
+ replicationPlugin.completeSynchronizationProvider();
ReplicationBroker broker =
openReplicationSession(baseDn, brokerId, 1000, replServerPort, 1000,
@@ -502,6 +504,7 @@
new DomainFakeCfg(baseDn, serverId, replServers);
domain = MultimasterReplication.createNewDomain(domainConf);
+ replicationPlugin.completeSynchronizationProvider();
// check that all entries have been deleted and added
// again by checking that they do have the correct entryuuid
@@ -626,6 +629,7 @@
new DomainFakeCfg(baseDn, serverId, replServers);
domain = MultimasterReplication.createNewDomain(domainConf);
+ replicationPlugin.completeSynchronizationProvider();
// check that all entries have been renamed
for (sequence = 1; sequence<=AddSequenceLength; sequence ++)
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerFailoverTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerFailoverTest.java
index 0d552b1..994053f 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerFailoverTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerFailoverTest.java
@@ -411,6 +411,7 @@
//domainConf.setHeartbeatInterval(500);
ReplicationDomain replicationDomain =
MultimasterReplication.createNewDomain(domainConf);
+ replicationDomain.start();
// Add other server (doing that after connection insure we connect to
// the right server)
--
Gitblit v1.10.0