From 2e7a20a59e968a6b73e3fb9e11f4fffc7e73d121 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Tue, 25 Sep 2007 14:45:59 +0000
Subject: [PATCH] Fix for issue  2261 (dsreplication should provide a view of the replicated baseDNs in a topology).

---
 opendj-sdk/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/opendj-sdk/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java b/opendj-sdk/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java
index d9aadca..a336fc7 100644
--- a/opendj-sdk/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java
+++ b/opendj-sdk/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java
@@ -44,6 +44,7 @@
 import javax.naming.ldap.Rdn;
 
 import org.opends.admin.ads.util.ConnectionUtils;
+import org.opends.quicksetup.util.Utils;
 
 /**
  * The object of this class represent an OpenDS server.
@@ -688,6 +689,7 @@
       InitialLdapContext ctx) throws NamingException
   {
     boolean replicationEnabled = false;
+    boolean oneDomainReplicated = false;
     SearchControls ctls = new SearchControls();
     ctls.setSearchScope(SearchControls.OBJECT_SCOPE);
     ctls.setReturningAttributes(
@@ -747,6 +749,7 @@
         Set<String> replicationServers = getValues(sr,
             "ds-cfg-replication-server");
         Set<String> dns = getValues(sr, "ds-cfg-replication-dn");
+        oneDomainReplicated = dns.size() > 0;
         for (String dn : dns)
         {
           for (ReplicaDescriptor replica : desc.getReplicas())
@@ -818,6 +821,58 @@
     {
       /* ignore */
     }
+
+    ctls = new SearchControls();
+    ctls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
+    ctls.setReturningAttributes(
+    new String[] {
+      "approximate-delay", "waiting-changes", "base-dn"
+    });
+    filter = "(approximate-delay=*)";
+
+    jndiName = new LdapName("cn=monitor");
+
+    if (oneDomainReplicated)
+    {
+      try
+      {
+        NamingEnumeration monitorEntries = ctx.search(jndiName, filter, ctls);
+
+        while(monitorEntries.hasMore())
+        {
+          SearchResult sr = (SearchResult)monitorEntries.next();
+
+          String dn = getFirstValue(sr, "base-dn");
+
+          for (ReplicaDescriptor replica: desc.getReplicas())
+          {
+            if (Utils.areDnsEqual(dn, replica.getSuffix().getDN()) &&
+                replica.isReplicated())
+            {
+              try
+              {
+                replica.setAgeOfOldestMissingChange(
+                    new Integer(getFirstValue(sr, "approximate-delay")));
+              }
+              catch (Throwable t)
+              {
+              }
+              try
+              {
+                replica.setMissingChanges(
+                    new Integer(getFirstValue(sr, "waiting-changes")));
+              }
+              catch (Throwable t)
+              {
+              }
+            }
+          }
+        }
+      }
+      catch (NameNotFoundException nse)
+      {
+      }
+    }
   }
 
   /**

--
Gitblit v1.10.0