From d04fb0f282e0fd9a4bc80d3f9d5ee15506a3b83b Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Mon, 08 Dec 2008 08:03:33 +0000
Subject: [PATCH] Merge the replication-service branch with the OpenDS trunk

---
 opends/src/server/org/opends/server/replication/plugin/PersistentServerState.java |   72 ++++++++++++++++++++++++++---------
 1 files changed, 53 insertions(+), 19 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/plugin/PersistentServerState.java b/opends/src/server/org/opends/server/replication/plugin/PersistentServerState.java
index 8d74618..22f526c 100644
--- a/opends/src/server/org/opends/server/replication/plugin/PersistentServerState.java
+++ b/opends/src/server/org/opends/server/replication/plugin/PersistentServerState.java
@@ -66,14 +66,15 @@
  * used to store the synchronized data and that is therefore persistent
  * across server reboot.
  */
-public class PersistentServerState extends ServerState
+public class PersistentServerState
 {
-   private DN baseDn;
-   private boolean savedStatus = true;
-   private InternalClientConnection conn =
+   private final DN baseDn;
+   private final InternalClientConnection conn =
        InternalClientConnection.getRootConnection();
-   private ASN1OctetString asn1BaseDn;
-   private short serverId;
+   private final ASN1OctetString asn1BaseDn;
+   private final short serverId;
+
+   private final ServerState state;
 
    /**
     * The attribute name used to store the state in the backend.
@@ -83,24 +84,45 @@
   /**
    * create a new ServerState.
    * @param baseDn The baseDN for which the ServerState is created
-   *  @param serverId The serverId
+   * @param serverId The serverId
    */
   public PersistentServerState(DN baseDn, short serverId)
   {
     this.baseDn = baseDn;
     this.serverId = serverId;
+    this.state = new ServerState();
     asn1BaseDn = new ASN1OctetString(baseDn.toString());
     loadState();
   }
 
   /**
-   * {@inheritDoc}
+   * Create a new PersistenServerState based on an already existing ServerState.
+   *
+   * @param baseDn    The baseDN for which the ServerState is created.
+   * @param serverId  The serverId.
+   * @param state     The serverState.
    */
-  @Override
+  public PersistentServerState(DN baseDn, short serverId, ServerState state)
+  {
+    this.baseDn = baseDn;
+    this.serverId = serverId;
+    this.state = state;
+    asn1BaseDn = new ASN1OctetString(baseDn.toString());
+    loadState();
+  }
+
+  /**
+   * Update the Server State with a ChangeNumber.
+   * All operations with smaller CSN and the same serverID must be committed
+   * before calling this method.
+   *
+   * @param changeNumber    The committed ChangeNumber.
+   *
+   * @return a boolean indicating if the update was meaningful.
+   */
   public boolean update(ChangeNumber changeNumber)
   {
-    savedStatus = false;
-    return super.update(changeNumber);
+    return state.update(changeNumber);
   }
 
   /**
@@ -108,14 +130,14 @@
    */
   public void save()
   {
-    if (savedStatus)
+    if (state.isSaved())
       return;
 
-    savedStatus = true;
+    state.setSaved(true);
     ResultCode resultCode = updateStateEntry();
     if (resultCode != ResultCode.SUCCESS)
     {
-        savedStatus = false;
+      state.setSaved(false);
     }
   }
 
@@ -310,7 +332,7 @@
    */
   private ResultCode runUpdateStateEntry(DN serverStateEntryDN)
   {
-    ArrayList<ASN1OctetString> values = this.toASN1ArrayList();
+    ArrayList<ASN1OctetString> values = state.toASN1ArrayList();
 
     LDAPAttribute attr =
       new LDAPAttribute(REPLICATION_STATE, values);
@@ -347,8 +369,8 @@
    */
   public void clearInMemory()
   {
-    super.clear();
-    this.savedStatus = false;
+    state.clear();
+    state.setSaved(false);
   }
 
   /**
@@ -384,13 +406,13 @@
     // maxCn stored in the serverState
     synchronized (this)
     {
-      serverStateMaxCn = this.getMaxChangeNumber(serverId);
+      serverStateMaxCn = state.getMaxChangeNumber(serverId);
 
       if (serverStateMaxCn == null)
         return;
 
       try {
-        op = ReplicationBroker.searchForChangedEntries(baseDn,
+        op = LDAPReplicationDomain.searchForChangedEntries(baseDn,
             serverStateMaxCn, null);
       }
       catch (Exception  e)
@@ -448,4 +470,16 @@
       }
     }
   }
+
+  /**
+   * Get the largest ChangeNumber seen for a given LDAP server ID.
+   *
+   * @param serverID    The server ID.
+   *
+   * @return            The largest ChangeNumber seen.
+   */
+  public ChangeNumber getMaxChangeNumber(short serverID)
+  {
+    return state.getMaxChangeNumber(serverID);
+  }
 }
\ No newline at end of file

--
Gitblit v1.10.0