From 16bc17a5dec28b9bbcc211c9a6b7859b5b668848 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 02 Oct 2014 14:03:07 +0000
Subject: [PATCH] OPENDJ-1542 Remove ReplicationServer.getECLChangeNumberLimits()

---
 opendj3-server-dev/src/server/org/opends/server/replication/server/ChangelogBaseDNVirtualAttributeProvider.java   |   27 ++++----
 opendj3-server-dev/src/server/org/opends/server/replication/server/LastChangeNumberVirtualAttributeProvider.java  |   32 ++++------
 opendj3-server-dev/src/server/org/opends/server/replication/server/FirstChangeNumberVirtualAttributeProvider.java |   32 ++++------
 opendj3-server-dev/src/server/org/opends/server/replication/server/LastCookieVirtualProvider.java                 |   24 +++-----
 opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java                         |   54 +++++++++++------
 5 files changed, 84 insertions(+), 85 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ChangelogBaseDNVirtualAttributeProvider.java
similarity index 81%
rename from opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
rename to opendj3-server-dev/src/server/org/opends/server/replication/server/ChangelogBaseDNVirtualAttributeProvider.java
index 8d68dac..719f7b5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ChangelogBaseDNVirtualAttributeProvider.java
@@ -24,14 +24,16 @@
  *      Copyright 2009 Sun Microsystems, Inc.
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
-package org.opends.server.replication.common;
+package org.opends.server.replication.server;
 
-import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.ldap.ResultCode;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
 import org.opends.server.core.SearchOperation;
-import org.opends.server.types.*;
+import org.opends.server.types.Attribute;
+import org.opends.server.types.Attributes;
+import org.opends.server.types.Entry;
+import org.opends.server.types.VirtualAttributeRule;
 import org.opends.server.util.ServerConstants;
 
 import static org.opends.messages.ExtensionMessages.*;
@@ -40,8 +42,7 @@
  * This class implements a virtual attribute provider that specifies the
  * changelog attribute of the root DSE entry that contain the baseDn of the ECL.
  */
-public class ChangelogBaseDNVirtualAttributeProvider
-       extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
+class ChangelogBaseDNVirtualAttributeProvider extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
 {
 
   /**
@@ -61,14 +62,14 @@
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public boolean isMultiValued()
   {
     return false;
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public Attribute getValues(Entry entry, VirtualAttributeRule rule)
   {
     if (values == null)
@@ -80,7 +81,7 @@
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public boolean isSearchable(VirtualAttributeRule rule,
                               SearchOperation searchOperation,
                               boolean isPreIndexed)
@@ -90,14 +91,12 @@
   }
 
   /** {@inheritDoc} */
-  @Override()
-  public void processSearch(VirtualAttributeRule rule,
-                            SearchOperation searchOperation)
+  @Override
+  public void processSearch(VirtualAttributeRule rule, SearchOperation searchOperation)
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-    final LocalizableMessage message = ERR_CHANGELOGBASEDN_VATTR_NOT_SEARCHABLE.get(
-            rule.getAttributeType().getNameOrOID());
-    searchOperation.appendErrorMessage(message);
+    searchOperation.appendErrorMessage(ERR_CHANGELOGBASEDN_VATTR_NOT_SEARCHABLE.get(
+            rule.getAttributeType().getNameOrOID()));
   }
 
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/FirstChangeNumberVirtualAttributeProvider.java
similarity index 79%
rename from opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
rename to opendj3-server-dev/src/server/org/opends/server/replication/server/FirstChangeNumberVirtualAttributeProvider.java
index 4b46bcc..931a16c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/FirstChangeNumberVirtualAttributeProvider.java
@@ -24,24 +24,24 @@
  *      Copyright 2009 Sun Microsystems, Inc.
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
-package org.opends.server.replication.common;
+package org.opends.server.replication.server;
 
-import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.ldap.ResultCode;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
 import org.opends.server.core.SearchOperation;
-import org.opends.server.replication.server.ReplicationServer;
-import org.opends.server.types.*;
+import org.opends.server.types.Attribute;
+import org.opends.server.types.Attributes;
+import org.opends.server.types.Entry;
+import org.opends.server.types.VirtualAttributeRule;
 
 import static org.opends.messages.ExtensionMessages.*;
 
 /**
  * Virtual attribute returning the oldest change number from the changelogDB.
  */
-public class FirstChangeNumberVirtualAttributeProvider
-       extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
+class FirstChangeNumberVirtualAttributeProvider extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
 {
   /** The tracer object for the debug logger. */
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
@@ -56,12 +56,11 @@
    */
   public FirstChangeNumberVirtualAttributeProvider(ReplicationServer replicationServer)
   {
-    super();
     this.replicationServer = replicationServer;
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public boolean isMultiValued()
   {
     return false;
@@ -76,7 +75,7 @@
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public Attribute getValues(Entry entry,VirtualAttributeRule rule)
   {
     String value = "0";
@@ -84,8 +83,7 @@
     {
       if (replicationServer != null)
       {
-        final long[] limits = replicationServer.getECLChangeNumberLimits();
-        value = String.valueOf(limits[0]);
+        value = String.valueOf(replicationServer.getOldestChangeNumber());
       }
     }
     catch(Exception e)
@@ -100,7 +98,7 @@
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public boolean isSearchable(VirtualAttributeRule rule,
                               SearchOperation searchOperation,
                               boolean isPreIndexed)
@@ -111,14 +109,12 @@
   }
 
   /** {@inheritDoc} */
-  @Override()
-  public void processSearch(VirtualAttributeRule rule,
-                            SearchOperation searchOperation)
+  @Override
+  public void processSearch(VirtualAttributeRule rule, SearchOperation searchOperation)
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-    final LocalizableMessage message = ERR_FIRSTCHANGENUMBER_VATTR_NOT_SEARCHABLE.get(
-            rule.getAttributeType().getNameOrOID());
-    searchOperation.appendErrorMessage(message);
+    searchOperation.appendErrorMessage(ERR_FIRSTCHANGENUMBER_VATTR_NOT_SEARCHABLE.get(
+            rule.getAttributeType().getNameOrOID()));
   }
 
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/LastChangeNumberVirtualAttributeProvider.java
similarity index 79%
rename from opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
rename to opendj3-server-dev/src/server/org/opends/server/replication/server/LastChangeNumberVirtualAttributeProvider.java
index 04e30f8..6a6f425 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/LastChangeNumberVirtualAttributeProvider.java
@@ -24,24 +24,24 @@
  *      Copyright 2009 Sun Microsystems, Inc.
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
-package org.opends.server.replication.common;
+package org.opends.server.replication.server;
 
-import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.ldap.ResultCode;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
 import org.opends.server.core.SearchOperation;
-import org.opends.server.replication.server.ReplicationServer;
-import org.opends.server.types.*;
+import org.opends.server.types.Attribute;
+import org.opends.server.types.Attributes;
+import org.opends.server.types.Entry;
+import org.opends.server.types.VirtualAttributeRule;
 
 import static org.opends.messages.ExtensionMessages.*;
 
 /**
  * Virtual attribute returning the newest change number from the changelogDB.
  */
-public class LastChangeNumberVirtualAttributeProvider
-       extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
+class LastChangeNumberVirtualAttributeProvider extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
 {
   /** The tracer object for the debug logger. */
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
@@ -56,12 +56,11 @@
    */
   public LastChangeNumberVirtualAttributeProvider(ReplicationServer replicationServer)
   {
-    super();
     this.replicationServer = replicationServer;
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public boolean isMultiValued()
   {
     return false;
@@ -76,7 +75,7 @@
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public Attribute getValues(Entry entry,VirtualAttributeRule rule)
   {
     String value = "0";
@@ -84,8 +83,7 @@
     {
       if (replicationServer != null)
       {
-        final long[] limits = replicationServer.getECLChangeNumberLimits();
-        value = String.valueOf(limits[1]);
+        value = String.valueOf(replicationServer.getNewestChangeNumber());
       }
     }
     catch(Exception e)
@@ -100,7 +98,7 @@
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public boolean isSearchable(VirtualAttributeRule rule,
                               SearchOperation searchOperation,
                               boolean isPreIndexed)
@@ -111,14 +109,12 @@
   }
 
   /** {@inheritDoc} */
-  @Override()
-  public void processSearch(VirtualAttributeRule rule,
-                            SearchOperation searchOperation)
+  @Override
+  public void processSearch(VirtualAttributeRule rule, SearchOperation searchOperation)
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-    final LocalizableMessage message = ERR_LASTCHANGENUMBER_VATTR_NOT_SEARCHABLE.get(
-            rule.getAttributeType().getNameOrOID());
-    searchOperation.appendErrorMessage(message);
+    searchOperation.appendErrorMessage(ERR_LASTCHANGENUMBER_VATTR_NOT_SEARCHABLE.get(rule.getAttributeType()
+        .getNameOrOID()));
   }
 
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/LastCookieVirtualProvider.java
similarity index 86%
rename from opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
rename to opendj3-server-dev/src/server/org/opends/server/replication/server/LastCookieVirtualProvider.java
index 9dcd6f2..565376b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/LastCookieVirtualProvider.java
@@ -24,15 +24,13 @@
  *      Copyright 2009 Sun Microsystems, Inc.
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
-package org.opends.server.replication.common;
+package org.opends.server.replication.server;
 
-import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.ldap.ResultCode;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
 import org.opends.server.core.SearchOperation;
-import org.opends.server.replication.server.ReplicationServer;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.Attributes;
 import org.opends.server.types.Entry;
@@ -46,8 +44,7 @@
  * that contains the last (newest) cookie (cross domain state)
  * available in the server.
  */
-public class LastCookieVirtualProvider
-   extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
+class LastCookieVirtualProvider extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
 {
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
 
@@ -61,28 +58,26 @@
    */
   public LastCookieVirtualProvider(ReplicationServer replicationServer)
   {
-    super();
     this.replicationServer = replicationServer;
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public boolean hasValue(Entry entry, VirtualAttributeRule rule)
   {
     // There's only a value for the rootDSE, i.e. the Null DN.
     return entry.getName().isRootDN();
-
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public boolean isMultiValued()
   {
     return false;
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public Attribute getValues(Entry entry, VirtualAttributeRule rule)
   {
     try
@@ -101,7 +96,7 @@
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public boolean isSearchable(VirtualAttributeRule rule,
                               SearchOperation searchOperation,
                               boolean isPreIndexed)
@@ -112,14 +107,13 @@
   }
 
   /** {@inheritDoc} */
-  @Override()
+  @Override
   public void processSearch(VirtualAttributeRule rule,
                             SearchOperation searchOperation)
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-    final LocalizableMessage message = ERR_LASTCOOKIE_VATTR_NOT_SEARCHABLE.get(
-            rule.getAttributeType().getNameOrOID());
-    searchOperation.appendErrorMessage(message);
+    searchOperation.appendErrorMessage(ERR_LASTCOOKIE_VATTR_NOT_SEARCHABLE.get(
+            rule.getAttributeType().getNameOrOID()));
   }
 
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
index c3979d9..16e0ae6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -38,14 +38,16 @@
 import org.forgerock.opendj.ldap.ResultCode;
 import org.forgerock.opendj.ldap.SearchScope;
 import org.opends.server.admin.server.ConfigurationChangeListener;
-import org.opends.server.admin.std.meta.VirtualAttributeCfgDefn.ConflictBehavior;
 import org.opends.server.admin.std.meta.ReplicationServerCfgDefn.ReplicationDBImplementation;
+import org.opends.server.admin.std.meta.VirtualAttributeCfgDefn.ConflictBehavior;
 import org.opends.server.admin.std.server.ReplicationServerCfg;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
 import org.opends.server.backends.ChangelogBackend;
 import org.opends.server.core.DirectoryServer;
-import org.opends.server.replication.common.*;
+import org.opends.server.replication.common.CSN;
+import org.opends.server.replication.common.MultiDomainServerState;
+import org.opends.server.replication.common.ServerState;
 import org.opends.server.replication.plugin.MultimasterReplication;
 import org.opends.server.replication.protocol.*;
 import org.opends.server.replication.server.changelog.api.ChangeNumberIndexDB;
@@ -1225,38 +1227,50 @@
   }
 
   /**
-   * Get the oldest and newest change numbers.
+   * Returns the oldest change number in the change number index DB.
    *
-   * @return an array of size 2 holding the oldest and newest change numbers at
-   *         indexes 0 and 1.
+   * @return the oldest change number in the change number index DB
    * @throws DirectoryException
-   *           When it happens.
+   *           When a problem happens
    */
-  public long[] getECLChangeNumberLimits() throws DirectoryException
+  public long getOldestChangeNumber() throws DirectoryException
   {
     try
     {
       final ChangeNumberIndexDB cnIndexDB = getChangeNumberIndexDB();
       final ChangeNumberIndexRecord oldestRecord = cnIndexDB.getOldestRecord();
-      if (oldestRecord == null)
+      if (oldestRecord != null)
       {
-        // The database is empty, just keep increasing numbers since last time
-        // we generated one change number.
-        final long lastGeneratedCN = cnIndexDB.getLastGeneratedChangeNumber();
-        return new long[] { lastGeneratedCN, lastGeneratedCN };
+        return oldestRecord.getChangeNumber();
       }
+      // database is empty
+      return cnIndexDB.getLastGeneratedChangeNumber();
+    }
+    catch (ChangelogException e)
+    {
+      throw new DirectoryException(ResultCode.OPERATIONS_ERROR, e);
+    }
+  }
 
+  /**
+   * Returns the newest change number in the change number index DB.
+   *
+   * @return the newest change number in the change number index DB
+   * @throws DirectoryException
+   *           When a problem happens
+   */
+  public long getNewestChangeNumber() throws DirectoryException
+  {
+    try
+    {
+      final ChangeNumberIndexDB cnIndexDB = getChangeNumberIndexDB();
       final ChangeNumberIndexRecord newestRecord = cnIndexDB.getNewestRecord();
-      if (newestRecord == null)
+      if (newestRecord != null)
       {
-        // Edge case: DB was cleaned (or purged) in between calls to
-        // getOldest*() and getNewest*().
-        // The only remaining solution is to fail fast.
-        throw new DirectoryException(ResultCode.OPERATIONS_ERROR,
-            ERR_READING_OLDEST_THEN_NEWEST_IN_CHANGENUMBER_DATABASE.get());
+        return newestRecord.getChangeNumber();
       }
-      return new long[] { oldestRecord.getChangeNumber(),
-        newestRecord.getChangeNumber() };
+      // database is empty
+      return cnIndexDB.getLastGeneratedChangeNumber();
     }
     catch (ChangelogException e)
     {

--
Gitblit v1.10.0