From e1862b6b8d276a6719f1277a7ca9781a1294180c Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Sat, 23 Sep 2006 19:27:42 +0000
Subject: [PATCH] Update the delete, modify, modify DN, and search operations to add a check for a cancel between the pre-operation plugin processing and sending the request to the backend.

---
 opends/src/server/org/opends/server/core/ModifyDNOperation.java |   25 ++++++++++++
 opends/src/server/org/opends/server/core/ModifyOperation.java   |   25 ++++++++++++
 opends/src/server/org/opends/server/core/SearchOperation.java   |   25 ++++++++++++
 opends/src/server/org/opends/server/core/DeleteOperation.java   |   25 ++++++++++++
 4 files changed, 100 insertions(+), 0 deletions(-)

diff --git a/opends/src/server/org/opends/server/core/DeleteOperation.java b/opends/src/server/org/opends/server/core/DeleteOperation.java
index f052974..13185af 100644
--- a/opends/src/server/org/opends/server/core/DeleteOperation.java
+++ b/opends/src/server/org/opends/server/core/DeleteOperation.java
@@ -971,6 +971,31 @@
         }
 
 
+        // Check for and handle a request to cancel this operation.
+        if (cancelRequest != null)
+        {
+          setCancelResult(CancelResult.CANCELED);
+
+          if (cancelRequest.notifyOriginalRequestor() ||
+              DirectoryServer.notifyAbandonedOperations())
+          {
+            setResultCode(ResultCode.CANCELED);
+
+            String cancelReason = cancelRequest.getCancelReason();
+            if (cancelReason != null)
+            {
+              appendErrorMessage(cancelReason);
+            }
+
+            clientConnection.sendResponse(this);
+          }
+
+          processingStopTime = System.currentTimeMillis();
+          logDeleteResponse(this);
+          return;
+        }
+
+
         // Get the backend to use for the delete.  If there is none, then fail.
         Backend backend = DirectoryServer.getBackend(entryDN);
         if (backend == null)
diff --git a/opends/src/server/org/opends/server/core/ModifyDNOperation.java b/opends/src/server/org/opends/server/core/ModifyDNOperation.java
index bdb7f6a..03caba5 100644
--- a/opends/src/server/org/opends/server/core/ModifyDNOperation.java
+++ b/opends/src/server/org/opends/server/core/ModifyDNOperation.java
@@ -1798,6 +1798,31 @@
         }
 
 
+        // Check for and handle a request to cancel this operation.
+        if (cancelRequest != null)
+        {
+          setCancelResult(CancelResult.CANCELED);
+
+          if (cancelRequest.notifyOriginalRequestor() ||
+              DirectoryServer.notifyAbandonedOperations())
+          {
+            setResultCode(ResultCode.CANCELED);
+
+            String cancelReason = cancelRequest.getCancelReason();
+            if (cancelReason != null)
+            {
+              appendErrorMessage(cancelReason);
+            }
+
+            clientConnection.sendResponse(this);
+          }
+
+          processingStopTime = System.currentTimeMillis();
+          logModifyDNResponse(this);
+          return;
+        }
+
+
         // Actually perform the modify DN operation.  This should include taking
         // care of any synchronization that might be needed.
         try
diff --git a/opends/src/server/org/opends/server/core/ModifyOperation.java b/opends/src/server/org/opends/server/core/ModifyOperation.java
index 556f7a3..a76f837 100644
--- a/opends/src/server/org/opends/server/core/ModifyOperation.java
+++ b/opends/src/server/org/opends/server/core/ModifyOperation.java
@@ -2326,6 +2326,31 @@
         }
 
 
+        // Check for and handle a request to cancel this operation.
+        if (cancelRequest != null)
+        {
+          setCancelResult(CancelResult.CANCELED);
+
+          if (cancelRequest.notifyOriginalRequestor() ||
+              DirectoryServer.notifyAbandonedOperations())
+          {
+            setResultCode(ResultCode.CANCELED);
+
+            String cancelReason = cancelRequest.getCancelReason();
+            if (cancelReason != null)
+            {
+              appendErrorMessage(cancelReason);
+            }
+
+            clientConnection.sendResponse(this);
+          }
+
+          processingStopTime = System.currentTimeMillis();
+          logModifyResponse(this);
+          return;
+        }
+
+
         // Actually perform the modify operation.  This should also include
         // taking care of any synchronization that might be needed.
         Backend backend = DirectoryServer.getBackend(entryDN);
diff --git a/opends/src/server/org/opends/server/core/SearchOperation.java b/opends/src/server/org/opends/server/core/SearchOperation.java
index 169a901..3005ceb 100644
--- a/opends/src/server/org/opends/server/core/SearchOperation.java
+++ b/opends/src/server/org/opends/server/core/SearchOperation.java
@@ -1974,6 +1974,31 @@
       }
 
 
+      // Check for and handle a request to cancel this operation.
+      if (cancelRequest != null)
+      {
+        setCancelResult(CancelResult.CANCELED);
+
+        if (cancelRequest.notifyOriginalRequestor() ||
+            DirectoryServer.notifyAbandonedOperations())
+        {
+          setResultCode(ResultCode.CANCELED);
+
+          String cancelReason = cancelRequest.getCancelReason();
+          if (cancelReason != null)
+          {
+            appendErrorMessage(cancelReason);
+          }
+
+          clientConnection.sendResponse(this);
+        }
+
+        processingStopTime = System.currentTimeMillis();
+        logSearchResultDone(this);
+        return;
+      }
+
+
       // Get the backend that should hold the search base.  If there is none,
       // then fail.
       Backend backend = DirectoryServer.getBackend(baseDN);

--
Gitblit v1.10.0