From 11859d9a6e466bab4ab73e1e46d092c6052acf68 Mon Sep 17 00:00:00 2001
From: coulbeck <coulbeck@localhost>
Date: Fri, 02 Feb 2007 21:50:10 +0000
Subject: [PATCH] These changes are for issue 787: LDAP server need to detect failure of changelog servers

---
 opendj-sdk/opends/src/server/org/opends/server/synchronization/protocol/ServerStartMessage.java |   40 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/synchronization/protocol/ServerStartMessage.java b/opendj-sdk/opends/src/server/org/opends/server/synchronization/protocol/ServerStartMessage.java
index 48b6c74..97cf84c 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/synchronization/protocol/ServerStartMessage.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/synchronization/protocol/ServerStartMessage.java
@@ -57,6 +57,12 @@
   private ServerState serverState = null;
 
   /**
+   * The time in milliseconds between heartbeats from the synchronization
+   * server.  Zero means heartbeats are off.
+   */
+  private long heartbeatInterval = 0;
+
+  /**
    * Create a new ServerStartMessage.
    *
    * @param serverId The serverId of the server for which the ServerStartMessage
@@ -67,11 +73,13 @@
    * @param maxSendDelay The max Send Delay from this server.
    * @param maxSendQueue The max send Queue from this server.
    * @param windowSize   The window size used by this server.
+   * @param heartbeatInterval The requested heartbeat interval.
    * @param serverState  The state of this server.
    */
   public ServerStartMessage(short serverId, DN baseDn, int maxReceiveDelay,
                             int maxReceiveQueue, int maxSendDelay,
                             int maxSendQueue, int windowSize,
+                            long heartbeatInterval,
                             ServerState serverState)
   {
     this.serverId = serverId;
@@ -80,8 +88,10 @@
     this.maxReceiveQueue = maxReceiveQueue;
     this.maxSendDelay = maxSendDelay;
     this.maxSendQueue = maxSendQueue;
-    this.serverState = serverState;
     this.windowSize = windowSize;
+    this.heartbeatInterval = heartbeatInterval;
+
+    this.serverState = serverState;
 
     try
     {
@@ -105,7 +115,7 @@
   {
     /* The ServerStartMessage is encoded in the form :
      * <operation type><baseDn><ServerId><ServerUrl><maxRecvDelay><maxRecvQueue>
-     * <maxSendDelay><maxSendQueue><window><ServerState>
+     * <maxSendDelay><maxSendQueue><window><heartbeatInterval><ServerState>
      */
     try
     {
@@ -173,6 +183,13 @@
       pos += length +1;
 
       /*
+       * read the heartbeatInterval
+       */
+      length = getNextLength(in, pos);
+      heartbeatInterval = Integer.valueOf(new String(in, pos, length, "UTF-8"));
+      pos += length +1;
+
+      /*
       * read the ServerState
       */
       serverState = new ServerState(in, pos, in.length-1);
@@ -269,7 +286,7 @@
     /*
      * ServerStartMessage contains.
      * <baseDn><ServerId><ServerUrl><maxRecvDelay><maxRecvQueue>
-     * <maxSendDelay><maxSendQueue><windowsize><ServerState>
+     * <maxSendDelay><maxSendQueue><windowsize><heartbeatInterval><ServerState>
      */
     try {
       byte[] byteDn = baseDn.getBytes("UTF-8");
@@ -285,6 +302,8 @@
                      String.valueOf(maxSendQueue).getBytes("UTF-8");
       byte[] byteWindowSize =
                      String.valueOf(windowSize).getBytes("UTF-8");
+      byte[] byteHeartbeatInterval =
+                     String.valueOf(heartbeatInterval).getBytes("UTF-8");
       byte[] byteServerState = serverState.getBytes();
 
       int length = 1 + byteDn.length + 1 + byteServerId.length + 1 +
@@ -294,6 +313,7 @@
                    byteMaxSendDelay.length + 1 +
                    byteMaxSendQueue.length + 1 +
                    byteWindowSize.length + 1 +
+                   byteHeartbeatInterval.length + 1 +
                    byteServerState.length + 1;
 
       byte[] resultByteArray = new byte[length];
@@ -318,6 +338,8 @@
 
       pos = addByteArray(byteWindowSize, resultByteArray, pos);
 
+      pos = addByteArray(byteHeartbeatInterval, resultByteArray, pos);
+
       pos = addByteArray(byteServerState, resultByteArray, pos);
 
       return resultByteArray;
@@ -337,4 +359,16 @@
   {
     return windowSize;
   }
+
+  /**
+   * Get the heartbeat interval requested by the ldap server that created the
+   * message.
+   *
+   * @return The heartbeat interval requested by the ldap server that created
+   * the message.
+   */
+  public long getHeartbeatInterval()
+  {
+    return heartbeatInterval;
+  }
 }

--
Gitblit v1.10.0