From e7dcb1cb66a87ce2b0144cf9862b4296ea7a715c Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Tue, 29 Sep 2009 08:32:17 +0000
Subject: [PATCH] #4250 Entry not replicated after initializations / not systematic
---
opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java | 13 ++++--
opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java | 44 ++++++++++++---------
opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java | 10 +++++
3 files changed, 44 insertions(+), 23 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java
index 65cfa2c..2c12cc5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/DataServerHandler.java
@@ -59,6 +59,10 @@
*/
public class DataServerHandler extends ServerHandler
{
+ // Temporay generationId received in handshake/phase1,
+ // and used after handshake/phase2
+ long tmpGenerationId;
+
// Status of this DS (only used if this server handler represents a DS)
private ServerStatus status = ServerStatus.INVALID_STATUS;
@@ -409,7 +413,7 @@
public boolean processStartFromRemote(ServerStartMsg serverStartMsg)
throws DirectoryException
{
- generationId = serverStartMsg.getGenerationId();
+ tmpGenerationId = serverStartMsg.getGenerationId();
protocolVersion = ProtocolVersion.minWithCurrent(
serverStartMsg.getVersion());
serverId = serverStartMsg.getServerId();
@@ -474,6 +478,9 @@
boolean sessionInitiatorSSLEncryption =
processStartFromRemote(inServerStartMsg);
+ // lock with no timeout
+ lockDomain(false);
+
localGenerationId = replicationServerDomain.getGenerationId();
oldGenerationId = localGenerationId;
@@ -490,9 +497,6 @@
return;
}
- // lock with no timeout
- lockDomain(false);
-
//
ReplServerStartMsg outReplServerStartMsg = null;
try
@@ -652,6 +656,7 @@
* (unsaved yet on disk . will be set with the 1rst change
* received)
*/
+ generationId = tmpGenerationId;
if (localGenerationId > 0)
{
if (generationId != localGenerationId)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
index 11442a6..086c3e6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -1835,20 +1835,23 @@
{
for (DataServerHandler handler : directoryServers.values())
{
- if ((notThisOne == null) || // All DSs requested
- ((notThisOne != null) && (handler != notThisOne)))
- // All except passed one
+ if (handler.getStatus() != ServerStatus.NOT_CONNECTED_STATUS)
{
- TopologyMsg topoMsg = createTopologyMsgForDS(handler.getServerId());
- try
+ if ((notThisOne == null) || // All DSs requested
+ ((notThisOne != null) && (handler != notThisOne)))
+ // All except passed one
{
- handler.sendTopoInfo(topoMsg);
- } catch (IOException e)
- {
- Message message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
+ TopologyMsg topoMsg = createTopologyMsgForDS(handler.getServerId());
+ try
+ {
+ handler.sendTopoInfo(topoMsg);
+ } catch (IOException e)
+ {
+ Message message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
baseDn.toString(),
"directory", Short.toString(handler.getServerId()), e.getMessage());
- logError(message);
+ logError(message);
+ }
}
}
}
@@ -1863,16 +1866,19 @@
TopologyMsg topoMsg = createTopologyMsgForRS();
for (ReplicationServerHandler handler : replicationServers.values())
{
- try
+ if (handler.getStatus() != ServerStatus.NOT_CONNECTED_STATUS)
{
- handler.sendTopoInfo(topoMsg);
- } catch (IOException e)
- {
- Message message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
- baseDn.toString(),
- "replication", Short.toString(handler.getServerId()),
- e.getMessage());
- logError(message);
+ try
+ {
+ handler.sendTopoInfo(topoMsg);
+ } catch (IOException e)
+ {
+ Message message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
+ baseDn.toString(),
+ "replication", Short.toString(handler.getServerId()),
+ e.getMessage());
+ logError(message);
+ }
}
}
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java b/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
index b2254b0..c39d447 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/service/ReplicationDomain.java
@@ -1938,6 +1938,16 @@
genIdMessage = new ResetGenerationIdMsg(generationIdNewValue);
}
broker.publish(genIdMessage);
+
+ // check that at least one ReplicationServer did change its generation-id
+ if (generationIdNewValue == null)
+ {
+ checkGenerationID(this.getGenerationID());
+ }
+ else
+ {
+ checkGenerationID(generationIdNewValue);
+ }
}
--
Gitblit v1.10.0