From 2fb54e292faa7bd619e05e9801096cfe224dc28b Mon Sep 17 00:00:00 2001
From: pgamba <pgamba@localhost>
Date: Mon, 14 Sep 2009 13:15:02 +0000
Subject: [PATCH] Fix for 4230 ECL Cancel search (compat mode) prevent the server to stop properly
---
opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java | 20 ++++++++++++++++++++
opends/src/server/org/opends/server/replication/server/ECLServerHandler.java | 7 +++++++
2 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
index 8359381..56f18fb 100644
--- a/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
+++ b/opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -735,6 +735,13 @@
*/
public void shutdown()
{
+ if (debugEnabled())
+ TRACER.debugInfo(this + " shutdown()" + draftCNDbIter);
+ if (this.draftCNDbIter != null)
+ {
+ draftCNDbIter.releaseCursor();
+ draftCNDbIter = null;
+ }
for (int i=0;i<domainCtxts.length;i++)
{
if (!domainCtxts[i].rsd.unRegisterHandler(domainCtxts[i].mh))
diff --git a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
index b724b1f..1a40621 100644
--- a/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
+++ b/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
@@ -349,6 +349,7 @@
persistentSearch.cancel();
setSendResponse(true);
}
+ this.abort(null);
throw coe;
}
catch (Exception e)
@@ -1365,6 +1366,8 @@
*/
public CancelResult cancel(CancelRequest cancelRequest)
{
+ if (debugEnabled())
+ TRACER.debugInfo(this + " cancel() " + eclSession);
if (eclSession != null)
{
try
@@ -1377,6 +1380,23 @@
}
/**
+ * {@inheritDoc}
+ */
+ public void abort(CancelRequest cancelRequest)
+ {
+ if (debugEnabled())
+ TRACER.debugInfo(this + " abort() " + eclSession);
+ if (eclSession != null)
+ {
+ try
+ {
+ eclSession.close();
+ }
+ catch(Exception e){}
+ }
+ }
+
+ /**
* The unique identifier used in DSEE is named nsUniqueId and its format is
* HHHHHHHH-HHHHHHHH-HHHHHHHH-HHHHHHHH where H is a hex digit.
* An nsUniqueId value is for example 3970de28-08b311d9-8095b9bf-c4d9231c
--
Gitblit v1.10.0