From e19f12e3bc6b25828e767a5cd43527b67530f88b Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Mon, 26 Oct 2009 10:11:37 +0000
Subject: [PATCH] Fix #4308 ECL - first draft-mode search after changelog reset missing latest update

---
 opends/src/server/org/opends/server/replication/server/ReplicationServer.java                      |    2 
 opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java |   82 +++++++++++++++++++++++++---------------
 opends/src/server/org/opends/server/replication/server/ServerReader.java                           |    2 +
 3 files changed, 54 insertions(+), 32 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index 9cef25b..c36cc3b 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -1675,7 +1675,7 @@
 
     if (eligibleCN==null)
     {
-      eligibleCN = new ChangeNumber(0, 0, 0);
+      eligibleCN = new ChangeNumber(TimeThread.getTime(), 0, 0);
     }
 
     if (debugEnabled())
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 934fe4d..395b5a8 100644
--- a/opends/src/server/org/opends/server/replication/server/ServerReader.java
+++ b/opends/src/server/org/opends/server/replication/server/ServerReader.java
@@ -39,6 +39,7 @@
 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
@@ -223,6 +224,7 @@
             }
             catch(Exception e)
             {
+              TRACER.debugCaught(DebugLogLevel.ERROR, e);
               errMessage =
                 ERR_REPLICATION_PROTOCOL_MESSAGE_TYPE.get(
                     "TopologyMsg", "other");
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
index b0c2cc3..9c67fb4 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/ExternalChangeLogTest.java
@@ -173,6 +173,7 @@
 
   List<Control> NO_CONTROL = null;
 
+  private int brokerSessionTimeout = 5000;
   /**
    * Set up the environment for performing the tests in this Class.
    * Replication
@@ -232,6 +233,9 @@
     ts = ECLCompatWriteReadAllOps(5);replicationServer.clearDb();
 
     ECLIncludeAttributes();replicationServer.clearDb();
+    
+    ChangeTimeHeartbeatTest();replicationServer.clearDb();
+
   }
 
   @Test(enabled=true, groups="slow", dependsOnMethods = { "ECLReplicationServerTest"})
@@ -362,15 +366,15 @@
       // Create 3 ECL broker
       server1 = openReplicationSession(
           DN.decode("cn=changelog"), 1111,
-          100, replicationServerPort, 1000, false);
+          100, replicationServerPort, brokerSessionTimeout, false);
       assertTrue(server1.isConnected());
       server2 = openReplicationSession(
           DN.decode("cn=changelog"), 2222,
-          100, replicationServerPort,1000, false);
+          100, replicationServerPort,brokerSessionTimeout, false);
       assertTrue(server2.isConnected());
       server3 = openReplicationSession(
           DN.decode("cn=changelog"), 3333,
-          100, replicationServerPort,1000, false);
+          100, replicationServerPort,brokerSessionTimeout, false);
       assertTrue(server3.isConnected());
 
       // Test broker1 receives only Done
@@ -455,12 +459,12 @@
       server01 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1201,
           100, replicationServerPort,
-          1000, true);
+          brokerSessionTimeout, true);
 
       server02 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING2),  1202,
           100, replicationServerPort,
-          1000, true, EMPTY_DN_GENID);
+          brokerSessionTimeout, true, EMPTY_DN_GENID);
 
       // create and publish 1 change on each suffix
       long time = TimeThread.getTime();
@@ -483,7 +487,7 @@
       // open ECL broker
       serverECL = openReplicationSession(
           DN.decode("cn=changelog"), 10,
-          100, replicationServerPort, 1000, false);
+          100, replicationServerPort, brokerSessionTimeout, false);
       assertTrue(serverECL.isConnected());
 
       // receive change 1 from suffix 1
@@ -617,7 +621,7 @@
       ReplicationBroker server01 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1201,
           100, replicationServerPort,
-          1000, true);
+          brokerSessionTimeout, true);
 
       // create and publish 1 change on each suffix
       long time = TimeThread.getTime();
@@ -775,12 +779,12 @@
       ReplicationBroker s1test = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1201,
           100, replicationServerPort,
-          1000, true);
+          brokerSessionTimeout, true);
 
       ReplicationBroker s2test2 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING2),  1202,
           100, replicationServerPort,
-          1000, true, EMPTY_DN_GENID);
+          brokerSessionTimeout, true, EMPTY_DN_GENID);
       sleep(500);
 
       // Produce updates
@@ -1006,12 +1010,12 @@
       ReplicationBroker s1test2 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING2),  1203,
           100, replicationServerPort,
-          1000, true, EMPTY_DN_GENID);
+          brokerSessionTimeout, true, EMPTY_DN_GENID);
 
       ReplicationBroker s2test = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1204,
           100, replicationServerPort,
-          1000, true);
+          brokerSessionTimeout, true);
       sleep(500);
 
       time = TimeThread.getTime();
@@ -1231,14 +1235,14 @@
       ReplicationBroker server01 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1201,
           100, replicationServerPort,
-          1000, true);
+          brokerSessionTimeout, true);
       int ts = 1;
 
       // Creates broker on o=test2
       ReplicationBroker server02 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING2),  1202,
           100, replicationServerPort,
-          1000, true);
+          brokerSessionTimeout, true);
 
       String user1entryUUID = "11111111-1111-1111-1111-111111111111";
       String baseUUID       = "22222222-2222-2222-2222-222222222222";
@@ -1610,7 +1614,7 @@
       ReplicationBroker server01 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1201,
           100, replicationServerPort,
-          1000, true);
+          brokerSessionTimeout, true);
       int ts = 1;
 
       // Produce update on this suffix
@@ -1901,14 +1905,14 @@
       ReplicationBroker server01 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1201,
           100, replicationServerPort,
-          1000, true);
+          brokerSessionTimeout, true);
       int ts = 1;
 
       // Create broker on o=test2
       ReplicationBroker server02 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING2),  1202,
           100, replicationServerPort,
-          1000, true, EMPTY_DN_GENID);
+          brokerSessionTimeout, true, EMPTY_DN_GENID);
 
       // Produce update 1
       ChangeNumber cn1 =
@@ -2499,12 +2503,12 @@
       ReplicationBroker s1test = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1201,
           100, replicationServerPort,
-          5000, true);
+          brokerSessionTimeout, true);
 
       ReplicationBroker s2test2 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING2),  1202,
           100, replicationServerPort,
-          5000, true, EMPTY_DN_GENID);
+          brokerSessionTimeout, true, EMPTY_DN_GENID);
       sleep(500);
 
       // Produce updates
@@ -2539,12 +2543,12 @@
       ReplicationBroker s1test2 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING2),  1203,
           100, replicationServerPort,
-          1000, true, EMPTY_DN_GENID);
+          brokerSessionTimeout, true, EMPTY_DN_GENID);
 
       ReplicationBroker s2test = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1204,
           100, replicationServerPort,
-          1000, true);
+          brokerSessionTimeout, true);
       sleep(500);
 
       // Test startState ("first cookie") of the ECL
@@ -2574,26 +2578,42 @@
         replicationServer.getReplicationServerDomain(TEST_ROOT_DN_STRING, false);
       rsd1.getDbServerState();
       rsd1.getChangeTimeHeartbeatState();
-      debugInfo(tn, " DbServerState=" + rsd1.getDbServerState()
+      debugInfo(tn, rsd1.getBaseDn()
+          + " DbServerState=" + rsd1.getDbServerState()
           + " ChangeTimeHeartBeatState=" + rsd1.getChangeTimeHeartbeatState()
-          + " eligibleCN=" + rsd1.getEligibleCN());
+          + " eligibleCN=" + rsd1.getEligibleCN()
+          + " rs eligibleCN=" + replicationServer.getEligibleCN());
       // FIXME:ECL Enable this test by adding an assert on the right value
 
       ReplicationServerDomain rsd2 =
         replicationServer.getReplicationServerDomain(TEST_ROOT_DN_STRING2, false);
       rsd2.getDbServerState();
       rsd2.getChangeTimeHeartbeatState();
-      debugInfo(tn, " DbServerState=" + rsd2.getDbServerState()
+      debugInfo(tn, rsd2.getBaseDn()
+          + " DbServerState=" + rsd2.getDbServerState()
           + " ChangeTimeHeartBeatState=" + rsd2.getChangeTimeHeartbeatState()
-          + " eligibleCN=" + rsd2.getEligibleCN());
+          + " eligibleCN=" + rsd2.getEligibleCN()
+          + " rs eligibleCN=" + replicationServer.getEligibleCN());
       // FIXME:ECL Enable this test by adding an assert on the right value
 
-      s1test.stop();
       s1test2.stop();
-      s2test.stop();
       s2test2.stop();
-
       removeTestBackend2(backend2);
+
+      Thread.sleep(1000);
+
+      rsd2.getChangeTimeHeartbeatState();
+      debugInfo(tn, rsd2.getBaseDn()
+          + " DbServerState=" + rsd2.getDbServerState()
+          + " ChangeTimeHeartBeatState=" + rsd2.getChangeTimeHeartbeatState()
+          + " eligibleCN=" + rsd2.getEligibleCN()
+          + " rs eligibleCN=" + replicationServer.getEligibleCN());
+
+      s1test.stop();
+      s2test.stop();
+
+      Thread.sleep(1000);
+
     }
     catch(Exception e)
     {
@@ -2652,7 +2672,7 @@
       ReplicationBroker server01 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1201,
           100, replicationServerPort,
-          5000, true);
+          brokerSessionTimeout, true);
 
       String user1entryUUID = "11111111-1112-1113-1114-111111111115";
       String baseUUID       = "22222222-2222-2222-2222-222222222222";
@@ -2923,7 +2943,7 @@
       ReplicationBroker server01 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1201,
           100, replicationServerPort,
-          1000, true);
+          brokerSessionTimeout, true);
 
       String user1entryUUID = "11111111-1112-1113-1114-111111111115";
 
@@ -3312,7 +3332,7 @@
       ReplicationBroker server01 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1201,
           100, replicationServerPort,
-          1000, true);
+          brokerSessionTimeout, true);
 
       String user1entryUUID = "11111111-1112-1113-1114-111111111115";
 
@@ -3356,7 +3376,7 @@
       ReplicationBroker server01 = openReplicationSession(
           DN.decode(TEST_ROOT_DN_STRING),  1201,
           100, replicationServerPort,
-          1000, true);
+          brokerSessionTimeout, true);
 
       // Publish 1 message
       ChangeNumber cn1 = new ChangeNumber(TimeThread.getTime(), 1, 1201);

--
Gitblit v1.10.0