From caa012fb1dd26a1989ab41c0e3886ac8c90c8a14 Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Thu, 29 Nov 2007 08:43:16 +0000
Subject: [PATCH] Fix #2630 dsrepl pre-external-initialization does not work with bin copy
---
opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationCache.java | 47 +++++++--------
opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerWriter.java | 4 +
opendj-sdk/opends/src/server/org/opends/server/protocols/LDIFConnectionHandler.java | 7 ++
opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java | 32 +++++++---
opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ListenerThread.java | 4 +
opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java | 31 +---------
6 files changed, 61 insertions(+), 64 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/LDIFConnectionHandler.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/LDIFConnectionHandler.java
index 8060bed..2acdc5d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/LDIFConnectionHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/LDIFConnectionHandler.java
@@ -110,6 +110,9 @@
// The thread used to run the connection handler.
private Thread connectionHandlerThread;
+ // Help to not warn permanently and fullfill the log file
+ // in debug mode.
+ private boolean alreadyWarn = false;
/**
@@ -123,6 +126,7 @@
isStopped = true;
stopRequested = false;
connectionHandlerThread = null;
+ alreadyWarn = false;
}
@@ -288,11 +292,12 @@
}
else
{
- if (debugEnabled())
+ if (!alreadyWarn && debugEnabled())
{
TRACER.debugInfo("LDIF connection handler directory " +
dir.getAbsolutePath() +
"doesn't exist or isn't a file");
+ alreadyWarn = true;
}
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ListenerThread.java b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ListenerThread.java
index 75bfc64..9be5ae9 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ListenerThread.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ListenerThread.java
@@ -60,7 +60,9 @@
*/
public ListenerThread(ReplicationDomain listener)
{
- super("Replication Listener thread");
+ super("Replication Listener thread " +
+ "serverID=" + listener.serverId +
+ " domain=" + listener.getName());
this.listener = listener;
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java
index c7d71d1..391c238 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/plugin/ReplicationDomain.java
@@ -203,8 +203,6 @@
private long generationId = -1;
private boolean generationIdSavedStatus = false;
- private long rejectedGenerationId = -1;
- private boolean requestedResetSinceLastStart = false;
/**
* This object is used to store the list of update currently being
@@ -901,29 +899,6 @@
ErrorMessage errorMsg = (ErrorMessage)msg;
logError(ERR_ERROR_MSG_RECEIVED.get(
errorMsg.getDetails()));
-
- if (errorMsg.getMsgID() == NOTE_RESET_GENERATION_ID.getId())
- {
- TRACER.debugInfo("requestedResetSinceLastStart=" +
- requestedResetSinceLastStart +
- "rejectedGenerationId=" + rejectedGenerationId);
-
- if (requestedResetSinceLastStart && (rejectedGenerationId>0))
- {
- // When the last generation presented was refused and we are
- // the 'reseter' server then restart automatically to become
- // the 'master'
- state.clear();
- rejectedGenerationId = -1;
- requestedResetSinceLastStart = false;
- broker.stop();
- broker.start(replicationServers);
- }
- }
- if (errorMsg.getMsgID() == NOTE_BAD_GENERATION_ID.getId())
- {
- rejectedGenerationId = generationId;
- }
}
}
else if (msg instanceof UpdateMessage)
@@ -2534,8 +2509,11 @@
*/
public void resetGenerationId(Long generationIdNewValue)
{
+ if (debugEnabled())
+ TRACER.debugInfo(
+ this.getName() + "resetGenerationId" + generationIdNewValue);
+
ResetGenerationId genIdMessage = null;
- requestedResetSinceLastStart = true;
if (generationIdNewValue == null)
{
genIdMessage = new ResetGenerationId(this.generationId);
@@ -3267,7 +3245,6 @@
baseDN.toNormalizedString(),
e.getLocalizedMessage()));
}
- rejectedGenerationId = -1;
if (debugEnabled())
TRACER.debugInfo(
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationCache.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationCache.java
index d27d11f..41df388 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationCache.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationCache.java
@@ -1004,7 +1004,7 @@
{
for (ServerHandler handler : connectedServers.values())
{
- handler.resetGenerationId();
+ handler.warnBadGenerationId();
}
}
@@ -1027,45 +1027,44 @@
if (debugEnabled())
TRACER.debugInfo(
- "In " + this.replicationServer.getMonitorInstanceName() +
- " baseDN=" + baseDn +
- " RCache.resetGenerationId received new ref genId=" + newGenId);
+ "In " + this.replicationServer.getMonitorInstanceName() +
+ " baseDN=" + baseDn +
+ " RCache.resetGenerationId received new ref genId=" + newGenId);
- // Notifies the others LDAP servers that from now on
- // they have the bad generationId
+ // Notifies the remote LDAP servers that from now on
+ // they have a generationId different from the reference one
for (ServerHandler handler : connectedServers.values())
{
if (newGenId != handler.getGenerationId())
{
- handler.resetGenerationId();
+ handler.warnBadGenerationId();
}
}
- // Propagates the reset message to the others replication servers
- // dealing with the same domain.
- if (senderHandler.isLDAPserver())
+ // If we are the first replication server warned,
+ // then forwards the reset message to the remote replication servers
+ for (ServerHandler rsHandler : replicationServers.values())
{
- for (ServerHandler handler : replicationServers.values())
+ try
{
- try
+ rsHandler.setGenerationId(newGenId);
+ if (senderHandler.isLDAPserver())
{
- handler.sendGenerationId(genIdMsg);
+ rsHandler.forwardGenerationIdToRS(genIdMsg);
}
- catch (IOException e)
- {
- logError(ERR_CHANGELOG_ERROR_SENDING_INFO.
- get(handler.getMonitorInstanceName()));
- }
+ }
+ catch (IOException e)
+ {
+ logError(ERR_CHANGELOG_ERROR_SENDING_INFO.
+ get(rsHandler.getMonitorInstanceName()));
}
}
- if (this.generationId != newGenId)
- {
- clearDbs();
+ clearDbs();
- // Reset the in memory domain generationId
- generationId = newGenId;
- }
+ // Reset the in memory domain generationId
+ generationId = newGenId;
+
}
/**
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java
index 15de178..a6b3e74 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerHandler.java
@@ -146,7 +146,7 @@
private short replicationServerId;
private short protocolVersion;
- private long generationId=-1;
+ private long generationId = -1;
/**
@@ -219,7 +219,7 @@
rcvWindowSizeHalf = windowSize/2;
maxRcvWindow = windowSize;
rcvWindow = windowSize;
- long localGenerationId=-1;
+ long localGenerationId = -1;
try
{
if (baseDn != null)
@@ -557,7 +557,9 @@
// Create a thread to send heartbeat messages.
if (heartbeatInterval > 0)
{
- heartbeatThread = new HeartbeatThread("replication Heartbeat",
+ heartbeatThread = new HeartbeatThread(
+ "replication Heartbeat to " + serverURL +
+ " for " + this.baseDn,
session, heartbeatInterval);
heartbeatThread.start();
}
@@ -1738,7 +1740,7 @@
/**
* Resets the generationId for this domain.
*/
- public void resetGenerationId()
+ public void warnBadGenerationId()
{
// Notify the peer that it is now invalid regarding the generationId
// We are now waiting a startServer message from this server with
@@ -1764,10 +1766,20 @@
* @throws IOException When it occurs while sending the message,
*
*/
- public void sendGenerationId(ResetGenerationId msg)
- throws IOException
- {
- generationId = msg.getGenerationId();
- session.publish(msg);
- }
+ public void forwardGenerationIdToRS(ResetGenerationId msg)
+ throws IOException
+ {
+ session.publish(msg);
+ }
+
+ /**
+ * Set a new generation ID.
+ *
+ * @param generationId The new generation ID
+ *
+ */
+ public void setGenerationId(long generationId)
+ {
+ this.generationId = generationId;
+ }
}
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerWriter.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerWriter.java
index 3fd0503..18d7e8b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerWriter.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ServerWriter.java
@@ -108,7 +108,9 @@
// Ignore update to be sent to a replica with a bad generation ID
long referenceGenerationId = replicationCache.getGenerationId();
- if (referenceGenerationId != handler.getGenerationId())
+ if ((referenceGenerationId != handler.getGenerationId())
+ || (referenceGenerationId == -1)
+ || (handler.getGenerationId() == -1))
{
logError(ERR_IGNORING_UPDATE_TO.get(
update.getDn(),
--
Gitblit v1.10.0