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 +++++++++++++++++++++++++---------
opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java | 2 +-
opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java | 13 +------------
3 files changed, 27 insertions(+), 22 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)
{
diff --git a/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java b/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
index 8981696..2b242f8 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/installer/Installer.java
@@ -1643,7 +1643,7 @@
ADSContext adsContext = new ADSContext(ctx);
if (createdRemoteAds)
{
- adsContext.removeAdminData();
+ adsContext.removeAdminData(true);
}
else
{
diff --git a/opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java b/opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java
index dd7d29b..2d25f5f 100644
--- a/opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java
+++ b/opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java
@@ -7005,18 +7005,7 @@
// Delete all contents from ADSContext.
printProgress(formatter.getFormattedWithPoints(
INFO_REPLICATION_REMOVE_ADS_CONTENTS.get()));
- adsCtx.removeAdminData();
- String adminBackendName = null;
- for (ReplicaDescriptor replica : server.getReplicas())
- {
- if (Utils.areDnsEqual(ADSContext.getAdministrationSuffixDN(),
- replica.getSuffix().getDN()))
- {
- adminBackendName = replica.getBackendName();
- break;
- }
- }
- adsCtx.createAdminData(adminBackendName);
+ adsCtx.removeAdminData(false /* avoid self-disconnect */);
printProgress(formatter.getFormattedDone());
printlnProgress();
}
--
Gitblit v1.10.0