From aea0892feca2fd3d56c9c810debed6d22389454e Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Fri, 11 Jul 2014 09:54:43 +0000
Subject: [PATCH] OPENDJ-1453 (CR-3938) Replica offline messages should be synced with updates
---
opendj3-server-dev/src/server/org/opends/server/replication/server/ECLServerWriter.java | 36 +++++++++++++++++++++---------------
1 files changed, 21 insertions(+), 15 deletions(-)
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ECLServerWriter.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ECLServerWriter.java
index 880308c..0005e50 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ECLServerWriter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ECLServerWriter.java
@@ -35,6 +35,7 @@
import org.opends.server.replication.protocol.DoneMsg;
import org.opends.server.replication.protocol.ECLUpdateMsg;
import org.opends.server.replication.protocol.Session;
+import org.opends.server.replication.service.DSRSShutdownSync;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.Entry;
import org.opends.server.workflowelement.externalchangelog.ECLSearchOperation;
@@ -47,7 +48,7 @@
* This class defines a server writer, which is used to send changes to a
* directory server.
*/
-public class ECLServerWriter extends ServerWriter
+class ECLServerWriter extends ServerWriter
{
private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
@@ -56,7 +57,7 @@
private final ReplicationServerDomain replicationServerDomain;
private boolean suspended;
private volatile boolean shutdown;
- private PersistentSearch mypsearch;
+ private final PersistentSearch mypsearch;
/**
* Create a ServerWriter.
@@ -66,10 +67,10 @@
* @param replicationServerDomain the ReplicationServerDomain of this
* ServerWriter.
*/
- public ECLServerWriter(Session session, ECLServerHandler handler,
+ ECLServerWriter(Session session, ECLServerHandler handler,
ReplicationServerDomain replicationServerDomain)
{
- super(session, handler, replicationServerDomain);
+ super(session, handler, replicationServerDomain, new DSRSShutdownSync());
setName("Replication ECL Writer Thread for operation " +
handler.getOperationId());
@@ -79,21 +80,26 @@
this.replicationServerDomain = replicationServerDomain;
this.suspended = false;
this.shutdown = false;
+ this.mypsearch = findPersistentSearch(handler);
+ }
- // Look for the psearch object related to this operation, the one that
- // will be notified with new entries to be returned.
- ECLWorkflowElement wfe =
- (ECLWorkflowElement) DirectoryServer
- .getWorkflowElement(ECLWorkflowElement.ECL_WORKFLOW_ELEMENT);
+ /**
+ * Look for the persistent search object related to this operation, the one
+ * that will be notified with new entries to be returned.
+ */
+ private PersistentSearch findPersistentSearch(ECLServerHandler handler)
+ {
+ ECLWorkflowElement wfe = (ECLWorkflowElement)
+ DirectoryServer.getWorkflowElement(ECLWorkflowElement.ECL_WORKFLOW_ELEMENT);
for (PersistentSearch psearch : wfe.getPersistentSearches())
{
if (psearch.getSearchOperation().toString().equals(
handler.getOperationId()))
{
- mypsearch = psearch;
- break;
+ return psearch;
}
}
+ return null;
}
/**
@@ -101,7 +107,7 @@
* waiting for the startCLSessionMsg. Then it may be
* suspended between 2 jobs, each job being a separate search.
*/
- public synchronized void suspendWriter()
+ private synchronized void suspendWriter()
{
suspended = true;
}
@@ -109,7 +115,7 @@
/**
* Resume the writer.
*/
- public synchronized void resumeWriter()
+ synchronized void resumeWriter()
{
suspended = false;
notify();
@@ -180,7 +186,7 @@
* @throws IOException when raised (connection closure)
* @throws InterruptedException when raised
*/
- public void doIt() throws IOException, InterruptedException
+ private void doIt() throws IOException, InterruptedException
{
while (true)
{
@@ -230,7 +236,7 @@
/**
* Shutdown the writer.
*/
- public synchronized void shutdownWriter()
+ synchronized void shutdownWriter()
{
shutdown = true;
notify();
--
Gitblit v1.10.0