From 3f27a7ede5ca9df06137254aa32d41d023ac105d Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Tue, 16 Sep 2014 15:05:25 +0000
Subject: [PATCH] OPENDJ-1444 CR-4537 Remove previous cookie from storage of ChangeNumberIndexDB
---
opends/src/server/org/opends/server/replication/server/changelog/je/ECLMultiDomainDBCursor.java | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/changelog/je/ECLMultiDomainDBCursor.java b/opends/src/server/org/opends/server/replication/server/changelog/je/ECLMultiDomainDBCursor.java
index 97a1806..daf442a 100644
--- a/opends/src/server/org/opends/server/replication/server/changelog/je/ECLMultiDomainDBCursor.java
+++ b/opends/src/server/org/opends/server/replication/server/changelog/je/ECLMultiDomainDBCursor.java
@@ -24,11 +24,17 @@
*/
package org.opends.server.replication.server.changelog.je;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.opends.server.replication.common.MultiDomainServerState;
import org.opends.server.replication.protocol.UpdateMsg;
import org.opends.server.replication.server.changelog.api.ChangelogException;
import org.opends.server.replication.server.changelog.api.DBCursor;
import org.opends.server.types.DN;
+import com.forgerock.opendj.util.Pair;
+
/**
* Multi domain DB cursor that only returns updates for the domains which have
* been enabled for the external changelog.
@@ -110,4 +116,46 @@
{
return getClass().getSimpleName() + " cursor=[" + cursor + ']';
}
+
+ /**
+ * Returns a snapshot of this cursor.
+ *
+ * @return a list of (DN, UpdateMsg) pairs, containing all base DNs enabled
+ * for the external changelog. The update message may be {@code null}.
+ */
+ List<Pair<DN, UpdateMsg>> getSnapshot()
+ {
+ final List<Pair<DN, UpdateMsg>> snapshot = cursor.getSnapshot();
+ final List<Pair<DN, UpdateMsg>> eclSnapshot = new ArrayList<Pair<DN,UpdateMsg>>();
+ for (Pair<DN, UpdateMsg> pair : snapshot)
+ {
+ DN baseDN = pair.getFirst();
+ if (predicate.isECLEnabledDomain(baseDN))
+ {
+ eclSnapshot.add(pair);
+ }
+ }
+ return eclSnapshot;
+ }
+
+ /**
+ * Returns the cookie corresponding to the state of this cursor.
+ *
+ * @return a valid cookie taking into account only the base DNs enabled for
+ * the external changelog
+ */
+ public MultiDomainServerState toCookie()
+ {
+ List<Pair<DN, UpdateMsg>> snapshot = getSnapshot();
+ MultiDomainServerState cookie = new MultiDomainServerState();
+ for (Pair<DN, UpdateMsg> pair : snapshot)
+ {
+ // only put base DNs where a CSN is available in the cookie
+ if (pair.getSecond() != null)
+ {
+ cookie.update(pair.getFirst(), pair.getSecond().getCSN());
+ }
+ }
+ return cookie;
+ }
}
--
Gitblit v1.10.0