From 13819a2e81db0422a7c8c186f838c7b243173170 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Wed, 03 Sep 2014 06:30:37 +0000
Subject: [PATCH] OPENDJ-1205 (CR-4428) Remove network layer from External ChangeLog implementation
---
opends/src/server/org/opends/server/backends/ChangelogBackend.java | 59 ++++++++++++++++++++++++++---------------------------------
1 files changed, 26 insertions(+), 33 deletions(-)
diff --git a/opends/src/server/org/opends/server/backends/ChangelogBackend.java b/opends/src/server/org/opends/server/backends/ChangelogBackend.java
index 6808a0a..11cc90f 100644
--- a/opends/src/server/org/opends/server/backends/ChangelogBackend.java
+++ b/opends/src/server/org/opends/server/backends/ChangelogBackend.java
@@ -30,7 +30,7 @@
import static org.opends.server.config.ConfigConstants.*;
import static org.opends.server.loggers.ErrorLogger.*;
import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.replication.protocol.StartECLSessionMsg.ECLRequestType.*;
+import static org.opends.server.replication.plugin.MultimasterReplication.*;
import static org.opends.server.replication.server.changelog.api.DBCursor.PositionStrategy.*;
import static org.opends.server.util.LDIFWriter.*;
import static org.opends.server.util.ServerConstants.*;
@@ -54,13 +54,11 @@
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.AddMsg;
import org.opends.server.replication.protocol.DeleteMsg;
import org.opends.server.replication.protocol.LDAPUpdateMsg;
import org.opends.server.replication.protocol.ModifyCommonMsg;
import org.opends.server.replication.protocol.ModifyDNMsg;
-import org.opends.server.replication.protocol.StartECLSessionMsg.ECLRequestType;
import org.opends.server.replication.protocol.UpdateMsg;
import org.opends.server.replication.server.ReplicationServer;
import org.opends.server.replication.server.ReplicationServerDomain;
@@ -356,28 +354,21 @@
{
return 1;
}
- // Search with cookie mode to count all update messages
- final SearchParams params = new SearchParams(getExcludedDomains());
- params.requestType = REQUEST_TYPE_FROM_COOKIE;
+
+ // Search with cookie mode to count all update messages cross replica
+ final SearchParams params = new SearchParams(getExcludedChangelogDomains());
params.cookie = new MultiDomainServerState();
- NumSubordinatesSearchOperation searchOp = new NumSubordinatesSearchOperation();
try
{
+ final NumSubordinatesSearchOperation searchOp = new NumSubordinatesSearchOperation();
search0(params, searchOp);
+ return searchOp.numSubordinates;
}
catch (ChangelogException e)
{
throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, ERR_CHANGELOG_BACKEND_NUM_SUBORDINATES.get(
CHANGELOG_BASE_DN.toString(), stackTraceToSingleLineString(e)));
}
- return searchOp.numSubordinates;
- }
-
- private Set<String> getExcludedDomains()
- {
- final Set<String> domains = MultimasterReplication.getECLDisabledDomains();
- domains.add(DN_EXTERNAL_CHANGELOG_ROOT);
- return domains;
}
/**
@@ -542,16 +533,11 @@
private SearchParams buildSearchParameters(final SearchOperation searchOperation) throws DirectoryException
{
- final SearchParams params = new SearchParams(getExcludedDomains());
+ final SearchParams params = new SearchParams(getExcludedChangelogDomains());
final ExternalChangelogRequestControl eclRequestControl =
searchOperation.getRequestControl(ExternalChangelogRequestControl.DECODER);
- if (eclRequestControl == null)
+ if (eclRequestControl != null)
{
- params.requestType = REQUEST_TYPE_FROM_CHANGE_NUMBER;
- }
- else
- {
- params.requestType = REQUEST_TYPE_FROM_COOKIE;
params.cookie = eclRequestControl.getCookie();
}
return params;
@@ -673,7 +659,6 @@
*/
static class SearchParams
{
- private ECLRequestType requestType;
private final Set<String> excludedBaseDNs;
private long lowestChangeNumber = -1;
private long highestChangeNumber = -1;
@@ -685,7 +670,7 @@
*/
SearchParams()
{
- this.excludedBaseDNs = Collections.emptySet();
+ this(Collections.<String> emptySet());
}
/**
@@ -700,6 +685,17 @@
}
/**
+ * Returns whether this search is cookie based.
+ *
+ * @return true if this search is cookie-based, false if this search is
+ * change number-based.
+ */
+ private boolean isCookieBasedSearch()
+ {
+ return cookie != null;
+ }
+
+ /**
* Indicates if provided change number is compatible with last change
* number.
*
@@ -909,16 +905,13 @@
private void search0(final SearchParams searchParams, final SearchOperation searchOperation)
throws DirectoryException, ChangelogException
{
- switch (searchParams.requestType)
+ if (searchParams.isCookieBasedSearch())
{
- case REQUEST_TYPE_FROM_CHANGE_NUMBER:
- searchFromChangeNumber(searchParams, searchOperation);
- break;
- case REQUEST_TYPE_FROM_COOKIE:
- searchFromCookie(searchParams, searchOperation);
- break;
- default:
- // not handled
+ searchFromCookie(searchParams, searchOperation);
+ }
+ else
+ {
+ searchFromChangeNumber(searchParams, searchOperation);
}
}
--
Gitblit v1.10.0