From be2c14a6c751da319eeb4af36eeb5dea4c821acf Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 14 Mar 2012 22:34:27 +0000
Subject: [PATCH] Initial fix for OPENDJ-249: dsreplication disable --disableAll error removing contents of "cn=admin data"

---
 opends/src/ads/org/opends/admin/ads/ADSContext.java |   34 +++++++++++++++++++++++++---------
 1 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/opends/src/ads/org/opends/admin/ads/ADSContext.java b/opends/src/ads/org/opends/admin/ads/ADSContext.java
index a1e3052..83d0563 100644
--- a/opends/src/ads/org/opends/admin/ads/ADSContext.java
+++ b/opends/src/ads/org/opends/admin/ads/ADSContext.java
@@ -1187,7 +1187,12 @@
   {
     // Add the administration suffix
     createAdministrationSuffix(backendName);
+    createAdminDataContainers();
+  }
 
+  // Create container entries.
+  private void createAdminDataContainers() throws ADSContextException
+  {
     // Create the DIT below the administration suffix
     if (!isExistingEntry(nameFromDN(getAdministrationSuffixDN())))
     {
@@ -1228,16 +1233,26 @@
     }
   }
 
+
+
   /**
    * Removes the administration data.
-   * @throws ADSContextException if something goes wrong.
+   *
+   * @param removeAdministrators
+   *          {@code true} if administrators should be removed. It may not be
+   *          possible to remove administrators if the operation is being
+   *          performed by one of the administrators because it will cause the
+   *          administrator to be disconnected.
+   * @throws ADSContextException
+   *           if something goes wrong.
    */
-  public void removeAdminData() throws ADSContextException
+  public void removeAdminData(boolean removeAdministrators)
+      throws ADSContextException
   {
     String[] dns = {getServerContainerDN(),
         getServerGroupContainerDN(),
         getInstanceKeysContainerDN(),
-        getAdministratorContainerDN()};
+        removeAdministrators ? getAdministratorContainerDN() : null };
     try
     {
       Control[] controls = new Control[] { new SubtreeDeleteControl() };
@@ -1246,10 +1261,13 @@
       {
         for (String dn : dns)
         {
-          LdapName ldapName = nameFromDN(dn);
-          if (isExistingEntry(ldapName))
+          if (dn != null)
           {
-            tmpContext.destroySubcontext(dn);
+            LdapName ldapName = nameFromDN(dn);
+            if (isExistingEntry(ldapName))
+            {
+              tmpContext.destroySubcontext(dn);
+            }
           }
         }
       }
@@ -1267,9 +1285,7 @@
         }
       }
       // Recreate the container entries:
-      createContainerEntry(getServerContainerDN());
-      createContainerEntry(getServerGroupContainerDN());
-      createContainerEntry(getInstanceKeysContainerDN());
+      createAdminDataContainers();
     }
     catch(NamingException x)
     {

--
Gitblit v1.10.0