From 6a7fdc04408e52abb5e5cacdc03f51a8e995d5cf Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 01 Apr 2011 20:29:09 +0000
Subject: [PATCH] Fix issue OPENDJ-105: Replication protocol error. Bad message type. org.opends.server.replication.protocol.StopMsg received, ReplServerStartMsg required
---
opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java | 39 ++++++++++++++++++++++++++++-----------
opends/src/server/org/opends/server/replication/server/ServerReader.java | 16 ++--------------
2 files changed, 30 insertions(+), 25 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java b/opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java
index d3f2dfd..e3787df 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServerHandler.java
@@ -43,11 +43,7 @@
import org.opends.server.replication.common.RSInfo;
import org.opends.server.replication.common.ServerState;
import org.opends.server.replication.common.ServerStatus;
-import org.opends.server.replication.protocol.ProtocolSession;
-import org.opends.server.replication.protocol.ProtocolVersion;
-import org.opends.server.replication.protocol.ReplServerStartMsg;
-import org.opends.server.replication.protocol.ReplicationMsg;
-import org.opends.server.replication.protocol.TopologyMsg;
+import org.opends.server.replication.protocol.*;
import org.opends.server.types.Attribute;
import org.opends.server.types.AttributeBuilder;
import org.opends.server.types.Attributes;
@@ -195,9 +191,19 @@
// Reject bad responses
if (!(msg instanceof ReplServerStartMsg))
{
- Message message = ERR_REPLICATION_PROTOCOL_MESSAGE_TYPE.get(
- msg.getClass().getCanonicalName(),
- "ReplServerStartMsg");
+ Message message;
+ if (msg instanceof StopMsg)
+ {
+ // Remote replication server is probably shutting down.
+ message = ERR_RS_DISCONNECTED_DURING_HANDSHAKE.get(
+ String.valueOf(getReplicationServerId()),
+ session.getReadableRemoteAddress());
+ }
+ else
+ {
+ message = ERR_REPLICATION_PROTOCOL_MESSAGE_TYPE.get(msg
+ .getClass().getCanonicalName(), "ReplServerStartMsg");
+ }
abortStart(message);
return;
}
@@ -495,9 +501,20 @@
if (!(msg instanceof TopologyMsg))
{
- Message message = ERR_REPLICATION_PROTOCOL_MESSAGE_TYPE.get(
- msg.getClass().getCanonicalName(),
- "TopologyMsg");
+ Message message;
+ if (msg instanceof StopMsg)
+ {
+ // Remote replication server is probably shutting down.
+ message = ERR_RS_DISCONNECTED_DURING_HANDSHAKE.get(
+ String.valueOf(getReplicationServerId()),
+ session.getReadableRemoteAddress());
+ }
+ else
+ {
+ message = ERR_REPLICATION_PROTOCOL_MESSAGE_TYPE.get(
+ msg.getClass().getCanonicalName(),
+ "TopologyMsg");
+ }
abortStart(message);
}
diff --git a/opends/src/server/org/opends/server/replication/server/ServerReader.java b/opends/src/server/org/opends/server/replication/server/ServerReader.java
index 7517b25..43147e9 100644
--- a/opends/src/server/org/opends/server/replication/server/ServerReader.java
+++ b/opends/src/server/org/opends/server/replication/server/ServerReader.java
@@ -40,7 +40,6 @@
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.replication.common.ServerStatus;
import org.opends.server.replication.protocol.*;
-import org.opends.server.types.DebugLogLevel;
/**
* This class implement the part of the replicationServer that is reading
@@ -222,19 +221,8 @@
} else if (msg instanceof TopologyMsg)
{
TopologyMsg topoMsg = (TopologyMsg) msg;
- try
- {
- ReplicationServerHandler rsh = (ReplicationServerHandler)handler;
- rsh.receiveTopoInfoFromRS(topoMsg);
- }
- catch(Exception e)
- {
- TRACER.debugCaught(DebugLogLevel.ERROR, e);
- errMessage =
- ERR_REPLICATION_PROTOCOL_MESSAGE_TYPE.get(
- "TopologyMsg", "other");
- logError(errMessage);
- }
+ ReplicationServerHandler rsh = (ReplicationServerHandler)handler;
+ rsh.receiveTopoInfoFromRS(topoMsg);
} else if (msg instanceof ChangeStatusMsg)
{
ChangeStatusMsg csMsg = (ChangeStatusMsg) msg;
--
Gitblit v1.10.0