From 82e4786ad97bb818f5cb4ca2a0f77ad4ea22be7e Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 18 Sep 2013 15:30:01 +0000
Subject: [PATCH] OPENDJ-1116 Introduce abstraction for the changelog DB

---
 opends/src/server/org/opends/server/replication/server/ReplicationServer.java                             |   23 ++++++-----------------
 opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java     |    3 +--
 opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java      |    3 +--
 opends/src/server/org/opends/server/replication/server/ECLServerHandler.java                              |    5 ++---
 opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java |   10 +++-------
 5 files changed, 13 insertions(+), 31 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java b/opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
index 8bd4a1b..52b77a2 100644
--- a/opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
+++ b/opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
@@ -139,9 +139,8 @@
         excludedDomains.add(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
 
         ReplicationServer rs = eclwe.getReplicationServer();
-        rs.disableEligibility(excludedDomains);
         long[] limits = rs.getECLChangeNumberLimits(
-            rs.getEligibleCSN(), excludedDomains);
+            rs.getEligibleCSN(excludedDomains), excludedDomains);
 
         first = String.valueOf(limits[0]);
       }
diff --git a/opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java b/opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
index 577c8fb..5ab3f53 100644
--- a/opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
+++ b/opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
@@ -139,9 +139,8 @@
         excludedDomains.add(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
 
         ReplicationServer rs = eclwe.getReplicationServer();
-        rs.disableEligibility(excludedDomains);
         long[] limits = rs.getECLChangeNumberLimits(
-            rs.getEligibleCSN(), excludedDomains);
+            rs.getEligibleCSN(excludedDomains), excludedDomains);
 
         last = String.valueOf(limits[1]);
       }
diff --git a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
index afaebbf..9734c48 100644
--- a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -1018,8 +1018,7 @@
     }
 
     excludedBaseDNs = startECLSessionMsg.getExcludedBaseDNs();
-    replicationServer.disableEligibility(excludedBaseDNs);
-    eligibleCSN = replicationServer.getEligibleCSN();
+    refreshEligibleCSN();
 
     initializeChangelogSearch(startECLSessionMsg);
 
@@ -1558,7 +1557,7 @@
    */
   public void refreshEligibleCSN()
   {
-    eligibleCSN = replicationServer.getEligibleCSN();
+    eligibleCSN = replicationServer.getEligibleCSN(excludedBaseDNs);
   }
 
 }
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 b41939a..51fcde8 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -181,9 +181,6 @@
   private final Object connectThreadLock = new Object();
   private long domainTicket = 0L;
 
-  /** BaseDNs excluded for ECL. */
-  private Set<String> excludedBaseDNs = new HashSet<String>();
-
   /**
    * The weight affected to the replication server.
    * Each replication server of the topology has a weight. When combined
@@ -1459,21 +1456,14 @@
   }
 
   /**
-   * Excluded a list of domain from eligibility computation.
-   * @param excludedBaseDNs the provided list of baseDNs excluded from
-   *                          the computation of eligibleCSN.
-   */
-  public void disableEligibility(Set<String> excludedBaseDNs)
-  {
-    this.excludedBaseDNs = excludedBaseDNs;
-  }
-
-  /**
    * Returns the eligible CSN cross domains - relies on the eligible CSN from
    * each domain.
+   *
+   * @param excludedBaseDNs
+   *          the list of baseDNs excluded from the computation of eligibleCSN
    * @return the cross domain eligible CSN.
    */
-  public CSN getEligibleCSN()
+  public CSN getEligibleCSN(Set<String> excludedBaseDNs)
   {
     String debugLog = "";
 
@@ -1710,8 +1700,6 @@
    */
   public MultiDomainServerState getLastECLCookie(Set<String> excludedBaseDNs)
   {
-    disableEligibility(excludedBaseDNs);
-
     // Initialize start state for all running domains with empty state
     MultiDomainServerState result = new MultiDomainServerState();
     for (ReplicationServerDomain rsd : getReplicationServerDomains())
@@ -1720,7 +1708,8 @@
           || rsd.getDbServerState().isEmpty())
         continue;
 
-      result.update(rsd.getBaseDN(), rsd.getEligibleState(getEligibleCSN()));
+      final CSN eligibleCSN = getEligibleCSN(excludedBaseDNs);
+      result.update(rsd.getBaseDN(), rsd.getEligibleState(eligibleCSN));
     }
     return result;
   }
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java
index 166011f..328229d 100644
--- a/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ExternalChangeLogTest.java
@@ -2238,7 +2238,7 @@
           + " DbServerState=" + rsd1.getDbServerState()
           + " ChangeTimeHeartBeatState=" + rsd1.getChangeTimeHeartbeatState()
           + " eligibleCSN=" + rsd1.getEligibleCSN()
-          + " rs eligibleCSN=" + replicationServer.getEligibleCSN());
+          + " rs eligibleCSN=" + replicationServer.getEligibleCSN(null));
       // FIXME:ECL Enable this test by adding an assert on the right value
 
       ReplicationServerDomain rsd2 = replicationServer.getReplicationServerDomain(TEST_ROOT_DN2);
@@ -2248,7 +2248,7 @@
           + " DbServerState=" + rsd2.getDbServerState()
           + " ChangeTimeHeartBeatState=" + rsd2.getChangeTimeHeartbeatState()
           + " eligibleCSN=" + rsd2.getEligibleCSN()
-          + " rs eligibleCSN=" + replicationServer.getEligibleCSN());
+          + " rs eligibleCSN=" + replicationServer.getEligibleCSN(null));
       // FIXME:ECL Enable this test by adding an assert on the right value
     }
     finally
@@ -2869,13 +2869,9 @@
       Set<String> excludedDomains = MultimasterReplication.getECLDisabledDomains();
       excludedDomains.add(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
 
-      ECLWorkflowElement eclwe = (ECLWorkflowElement)
-      DirectoryServer.getWorkflowElement("EXTERNAL CHANGE LOG");
-      ReplicationServer rs = eclwe.getReplicationServer();
-      rs.disableEligibility(excludedDomains);
       long t1 = TimeThread.getTime();
       long[] limits = replicationServer.getECLChangeNumberLimits(
-          replicationServer.getEligibleCSN(), excludedDomains);
+          replicationServer.getEligibleCSN(excludedDomains), excludedDomains);
       assertEquals(limits[1], maxMsg);
       long t2 = TimeThread.getTime();
       debugInfo(tn, "Perfs - " + maxMsg + " counted in (ms):" + (t2 - t1));

--
Gitblit v1.10.0