From 7d886d4aec5b1c09cf63882335006e43e2ab2516 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Tue, 13 Mar 2007 03:25:41 +0000
Subject: [PATCH] Update the backend config manager to do a more thorough cleanup job when deleting a backend configuration entry.

---
 opends/src/server/org/opends/server/core/BackendConfigManager.java |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/opends/src/server/org/opends/server/core/BackendConfigManager.java b/opends/src/server/org/opends/server/core/BackendConfigManager.java
index 28e6391..be51a4d 100644
--- a/opends/src/server/org/opends/server/core/BackendConfigManager.java
+++ b/opends/src/server/org/opends/server/core/BackendConfigManager.java
@@ -2369,6 +2369,37 @@
       }
 
       DirectoryServer.deregisterBackend(backend);
+      configEntry.deregisterChangeListener(this);
+
+      // Remove the shared lock for this backend.
+      try
+      {
+        String lockFile = LockFileManager.getBackendLockFileName(backend);
+        StringBuilder failureReason = new StringBuilder();
+        if (! LockFileManager.releaseLock(lockFile, failureReason))
+        {
+          int msgID = MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK;
+          String message = getMessage(msgID, backend.getBackendID(),
+                                      String.valueOf(failureReason));
+          logError(ErrorLogCategory.CONFIGURATION,
+                   ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+          // FIXME -- Do we need to send an admin alert?
+        }
+      }
+      catch (Exception e2)
+      {
+        if (debugEnabled())
+        {
+          debugCaught(DebugLogLevel.ERROR, e2);
+        }
+
+        int msgID = MSGID_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK;
+        String message = getMessage(msgID, backend.getBackendID(),
+                                    stackTraceToSingleLineString(e2));
+        logError(ErrorLogCategory.CONFIGURATION,
+                 ErrorLogSeverity.SEVERE_WARNING, message, msgID);
+        // FIXME -- Do we need to send an admin alert?
+      }
 
       return new ConfigChangeResult(resultCode, adminActionRequired,
                                     messages);

--
Gitblit v1.10.0