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