summaryrefslogtreecommitdiffstats
path: root/pki/patches/pki-core-9.0.3-r2106.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pki/patches/pki-core-9.0.3-r2106.patch')
-rw-r--r--pki/patches/pki-core-9.0.3-r2106.patch134
1 files changed, 134 insertions, 0 deletions
diff --git a/pki/patches/pki-core-9.0.3-r2106.patch b/pki/patches/pki-core-9.0.3-r2106.patch
new file mode 100644
index 000000000..e99ef3f14
--- /dev/null
+++ b/pki/patches/pki-core-9.0.3-r2106.patch
@@ -0,0 +1,134 @@
+Index: base/common/src/com/netscape/cms/servlet/csadmin/DatabasePanel.java
+===================================================================
+--- base/common/src/com/netscape/cms/servlet/csadmin/DatabasePanel.java (revision 2105)
++++ base/common/src/com/netscape/cms/servlet/csadmin/DatabasePanel.java (revision 2106)
+@@ -1156,9 +1156,17 @@
+ // initialize consumer
+ initializeConsumer(replicadn, conn1, masterAgreementName);
+
++ while (! replicationDone(replicadn, conn1, masterAgreementName)) {
++ CMS.debug("DatabasePanel setupReplication: Waiting for replication to complete");
++ Thread.sleep(1000);
++ }
+
+- // compare entries
+- compareAndWaitEntries(conn1, conn2, basedn);
++ String status = replicationStatus(replicadn, conn1, masterAgreementName);
++ if (!status.startsWith("0 ")) {
++ CMS.debug("DatabasePanel setupReplication: consumer initialization failed. " +
++ status);
++ throw new IOException("consumer initialization failed. " + status);
++ }
+
+ } catch (Exception e) {
+ CMS.debug("DatabasePanel setupReplication: "+e.toString());
+@@ -1166,39 +1174,6 @@
+ }
+ }
+
+- private void compareAndWaitEntries(LDAPConnection conn1,
+- LDAPConnection conn2, String basedn)
+- {
+- try {
+- LDAPSearchResults res = conn1.search(basedn,
+- LDAPConnection.SCOPE_ONE, "(objectclass=*)", null, true);
+- while (res.hasMoreElements()) {
+- LDAPEntry source = res.next();
+- // check if this entry is present in conn2
+- LDAPEntry dest = null;
+- do {
+- CMS.debug("DatabasePanel comparetAndWaitEntries checking " +
+- source.getDN());
+- try {
+- dest = conn2.read(source.getDN(), (String[])null);
+- } catch (Exception e1) {
+- CMS.debug("DatabasePanel comparetAndWaitEntries " +
+- source.getDN() + " not found, let's wait!");
+- try {
+- Thread.sleep(5000);
+- } catch (Exception e2) {
+- }
+- }
+- } while (dest == null);
+-
+- // check children of this entry
+- compareAndWaitEntries(conn1, conn2, source.getDN());
+- } // while
+- } catch (Exception ex) {
+- CMS.debug("DatabasePanel comparetAndWaitEntries " + ex);
+- }
+- }
+-
+ /**
+ * If validiate() returns false, this method will be called.
+ */
+@@ -1432,6 +1407,69 @@
+ CMS.debug("DatabasePanel initializeConsumer: Successfully initialize consumer");
+ }
+
++ private boolean replicationDone(String replicadn, LDAPConnection conn, String name)
++ throws IOException {
++ String dn = "cn="+name+","+replicadn;
++ String filter = "(objectclass=*)";
++ String[] attrs = {"nsds5beginreplicarefresh"};
++
++ CMS.debug("DatabasePanel replicationDone: dn: "+dn);
++ try {
++ LDAPSearchResults results = conn.search(dn, LDAPConnection.SCOPE_BASE, filter,
++ attrs, true);
++
++ int count = results.getCount();
++ if (count < 1) {
++ throw new IOException("Replication entry not found");
++ }
++
++ LDAPEntry entry = results.next();
++ LDAPAttribute refresh = entry.getAttribute("nsds5beginreplicarefresh");
++ if (refresh == null) {
++ return true;
++ }
++ return false;
++ } catch (Exception e) {
++ CMS.debug("DatabasePanel replicationDone: exception " + e);
++ throw new IOException("Exception in replicationDone: " + e);
++ }
++ }
++
++ private String replicationStatus(String replicadn, LDAPConnection conn, String name)
++ throws IOException {
++ String dn = "cn="+name+","+replicadn;
++ String filter = "(objectclass=*)";
++ String[] attrs = {"nsds5replicalastinitstatus"};
++ String status = null;
++
++ CMS.debug("DatabasePanel replicationStatus: dn: "+dn);
++ try {
++ LDAPSearchResults results = conn.search(dn, LDAPConnection.SCOPE_BASE, filter,
++ attrs, false);
++
++ int count = results.getCount();
++ if (count < 1) {
++ throw new IOException("Replication entry not found");
++ }
++
++ LDAPEntry entry = results.next();
++ LDAPAttribute attr = entry.getAttribute("nsds5replicalastinitstatus");
++ if (attr != null) {
++ Enumeration valsInAttr = attr.getStringValues();
++ if (valsInAttr.hasMoreElements()) {
++ return (String)valsInAttr.nextElement();
++ } else {
++ throw new IOException("No value returned for nsds5replicalastinitstatus");
++ }
++ } else {
++ throw new IOException("nsDS5ReplicaLastInitStatus is null.");
++ }
++ } catch (Exception e) {
++ CMS.debug("DatabasePanel replicationStatus: exception " + e);
++ throw new IOException("Exception in replicationStatus: " + e);
++ }
++ }
++
+ private String getInstanceDir(LDAPConnection conn) {
+ String instancedir="";
+ try {