From 22ec3dd24c3af40cc6e67318cf83b88e55242d06 Mon Sep 17 00:00:00 2001
From: Chris Ridd <chris.ridd@forgerock.com>
Date: Fri, 18 Jul 2014 08:51:32 +0000
Subject: [PATCH] Forward port fix OPENDJ-1516: Trunk sends MSG_TYPE_REPLICA_OFFLINE messages to a v7 DS

---
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/Session.java           |    5 +++++
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplicaOfflineMsg.java |    4 ++++
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplicationMsg.java    |    3 ++-
 3 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplicaOfflineMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplicaOfflineMsg.java
index a1409cd..b9da59c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplicaOfflineMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplicaOfflineMsg.java
@@ -90,6 +90,10 @@
   @Override
   public byte[] getBytes(short protocolVersion)
   {
+    if (protocolVersion < ProtocolVersion.REPLICATION_PROTOCOL_V8)
+    {
+      return null;
+    }
     final ByteArrayBuilder builder = new ByteArrayBuilder(size());
     builder.appendByte(MSG_TYPE_REPLICA_OFFLINE);
     builder.appendShort(protocolVersion);
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplicationMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplicationMsg.java
index 959bcb6..3fef9a1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplicationMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplicationMsg.java
@@ -107,7 +107,8 @@
    * @param protocolVersion
    *          The protocol version to use for serialization. The version should
    *          normally be older than the current one.
-   * @return The encoded PDU.
+   * @return The encoded PDU, or <code>null</code> if the message isn't supported
+   *          in that protocol version.
    */
   public abstract byte[] getBytes(short protocolVersion);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/Session.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/Session.java
index b6c3c8f..9c1a01c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/Session.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/Session.java
@@ -319,6 +319,11 @@
   public void publish(final ReplicationMsg msg) throws IOException
   {
     final byte[] buffer = msg.getBytes(protocolVersion);
+    if (buffer == null)
+    {
+      // skip anything that cannot be encoded for this peer.
+      return;
+    }
     if (isRunning.get())
     {
       while (!closeInitiated)

--
Gitblit v1.10.0