From 3a9e211d36ee94ff99941943b3b51e0f768624f5 Mon Sep 17 00:00:00 2001
From: mrossign <mrossign@localhost>
Date: Fri, 06 Nov 2009 09:11:40 +0000
Subject: [PATCH] In order to support a more clever algorithm for the DS to choose his RS,  we introduce:

---
 opends/src/server/org/opends/server/replication/protocol/TopologyMsg.java |   27 +++++++++++++++++++++------
 1 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/protocol/TopologyMsg.java b/opends/src/server/org/opends/server/replication/protocol/TopologyMsg.java
index f357409..85a4d1d 100644
--- a/opends/src/server/org/opends/server/replication/protocol/TopologyMsg.java
+++ b/opends/src/server/org/opends/server/replication/protocol/TopologyMsg.java
@@ -167,6 +167,7 @@
 
         if (version >= ProtocolVersion.REPLICATION_PROTOCOL_V4)
         {
+          // Put ECL includes
           Set<String> attrs = dsInfo.getEclIncludes();
           oStream.write(attrs.size());
           for (String attr : attrs)
@@ -192,8 +193,15 @@
         oStream.write(String.valueOf(rsInfo.getGenerationId()).
           getBytes("UTF-8"));
         oStream.write(0);
-        // Put DS group id
+        // Put RS group id
         oStream.write(rsInfo.getGroupId());
+
+        if (version >= ProtocolVersion.REPLICATION_PROTOCOL_V4)
+        {
+          // Put RS weight
+          oStream.write(String.valueOf(rsInfo.getWeight()).getBytes("UTF-8"));
+          oStream.write(0);
+        }
       }
 
       return oStream.toByteArray();
@@ -332,23 +340,30 @@
         int length = getNextLength(in, pos);
         String serverIdString = new String(in, pos, length, "UTF-8");
         int id = Integer.valueOf(serverIdString);
-        pos +=
-          length + 1;
+        pos += length + 1;
 
         /* Read the generation id */
         length = getNextLength(in, pos);
         long generationId =
           Long.valueOf(new String(in, pos, length,
           "UTF-8"));
-        pos +=
-          length + 1;
+        pos += length + 1;
 
         /* Read RS group id */
         byte groupId = in[pos++];
 
+        int weight = 1;
+        if (version >= ProtocolVersion.REPLICATION_PROTOCOL_V4)
+        {
+          /* Read RS weight */
+          length = getNextLength(in, pos);
+          weight = Integer.valueOf(new String(in, pos, length, "UTF-8"));
+          pos += length + 1;
+        }
+
         /* Now create RSInfo and store it in list */
 
-        RSInfo rsInfo = new RSInfo(id, generationId, groupId);
+        RSInfo rsInfo = new RSInfo(id, generationId, groupId, weight);
         rsList.add(rsInfo);
 
         nRsInfo--;

--
Gitblit v1.10.0