From 53e9b6737ff1f758a8b1cfc5c7fe6cebd158bf6e Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Tue, 29 Jan 2008 17:59:28 +0000
Subject: [PATCH] Fix for issue 2870: status and dsreplication status do not show replication monitoring The changes consist basically in using the new attributes "approx-older-change-not-synchronized-millis" and "missing-changes" in status and replication status command-lines.  In fact a millisecond version of approx-older-change-not-synchronized-millis has been added in order the remote command-line to be able to provide a localized version of the date (instead of directly presenting the date that was written by the server).

---
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/BaseDNDescriptor.java            |    8 +-
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromLDAP.java              |   41 ++++++++-----
 opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/DatabasesTableModel.java      |   41 +++++++------
 opendj-sdk/opends/src/ads/org/opends/admin/ads/ServerDescriptor.java                            |   23 +++++--
 opendj-sdk/opends/src/ads/org/opends/admin/ads/ReplicaDescriptor.java                           |    8 +-
 opendj-sdk/opends/src/guitools/org/opends/guitools/replicationcli/ReplicationCliMain.java       |    8 +-
 opendj-sdk/opends/src/messages/messages/admin_tool.properties                                   |    9 +-
 opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java |    3 +
 8 files changed, 83 insertions(+), 58 deletions(-)

diff --git a/opendj-sdk/opends/src/ads/org/opends/admin/ads/ReplicaDescriptor.java b/opendj-sdk/opends/src/ads/org/opends/admin/ads/ReplicaDescriptor.java
index 0004c04..9900327 100644
--- a/opendj-sdk/opends/src/ads/org/opends/admin/ads/ReplicaDescriptor.java
+++ b/opendj-sdk/opends/src/ads/org/opends/admin/ads/ReplicaDescriptor.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Portions Copyright 2007 Sun Microsystems, Inc.
+ *      Portions Copyright 2007-2008 Sun Microsystems, Inc.
  */
 
 package org.opends.admin.ads;
@@ -42,7 +42,7 @@
   private Set<String> replicationServers = new HashSet<String>();
   private int replicationId = -1;
   private int missingChanges = -1;
-  private int ageOfOldestMissingChange = -1;
+  private long ageOfOldestMissingChange = -1;
 
   /**
    * Returns the number of entries contained in the replica.
@@ -167,7 +167,7 @@
    * Returns the age of the oldest missing change.
    * @return the age of the oldest missing change.
    */
-  public int getAgeOfOldestMissingChange()
+  public long getAgeOfOldestMissingChange()
   {
     return ageOfOldestMissingChange;
   }
@@ -176,7 +176,7 @@
    * Sets the age of the oldest missing change.
    * @param ageOfOldestMissingChange the age of the oldest missing change.
    */
-  public void setAgeOfOldestMissingChange(int ageOfOldestMissingChange)
+  public void setAgeOfOldestMissingChange(long ageOfOldestMissingChange)
   {
     this.ageOfOldestMissingChange = ageOfOldestMissingChange;
   }
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 6b8b387..f59a955 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
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Portions Copyright 2007 Sun Microsystems, Inc.
+ *      Portions Copyright 2007-2008 Sun Microsystems, Inc.
  */
 
 package org.opends.admin.ads;
@@ -877,9 +877,10 @@
     ctls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
     ctls.setReturningAttributes(
     new String[] {
-      "approximate-delay", "waiting-changes", "base-dn"
+      "approx-older-change-not-synchronized-millis", "missing-changes",
+      "base-dn", "server-id"
     });
-    filter = "(approximate-delay=*)";
+    filter = "(missing-changes=*)";
 
     jndiName = new LdapName("cn=monitor");
 
@@ -894,16 +895,26 @@
           SearchResult sr = (SearchResult)monitorEntries.next();
 
           String dn = getFirstValue(sr, "base-dn");
+          int replicaId = -1;
+          try
+          {
+            replicaId = new Integer(getFirstValue(sr, "server-id"));
+          }
+          catch (Throwable t)
+          {
+          }
 
           for (ReplicaDescriptor replica: desc.getReplicas())
           {
             if (Utils.areDnsEqual(dn, replica.getSuffix().getDN()) &&
-                replica.isReplicated())
+                replica.isReplicated() &&
+                (replica.getReplicationId() == replicaId))
             {
               try
               {
                 replica.setAgeOfOldestMissingChange(
-                    new Integer(getFirstValue(sr, "approximate-delay")));
+                    new Long(getFirstValue(sr,
+                        "approx-older-change-not-synchronized-millis")));
               }
               catch (Throwable t)
               {
@@ -911,7 +922,7 @@
               try
               {
                 replica.setMissingChanges(
-                    new Integer(getFirstValue(sr, "waiting-changes")));
+                    new Integer(getFirstValue(sr, "missing-changes")));
               }
               catch (Throwable t)
               {
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/replicationcli/ReplicationCliMain.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/replicationcli/ReplicationCliMain.java
index 16b3d14..aa95954 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/replicationcli/ReplicationCliMain.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/replicationcli/ReplicationCliMain.java
@@ -41,6 +41,7 @@
 import java.net.InetAddress;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
@@ -5020,10 +5021,11 @@
           }
           break;
         case AGE_OF_OLDEST_MISSING_CHANGE:
-          int ageOfOldestMissingChange = replica.getAgeOfOldestMissingChange();
-          if (ageOfOldestMissingChange >= 0)
+          long ageOfOldestMissingChange = replica.getAgeOfOldestMissingChange();
+          if (ageOfOldestMissingChange > 0)
           {
-            v = Message.raw(String.valueOf(ageOfOldestMissingChange));
+            Date date = new Date(ageOfOldestMissingChange);
+            v = Message.raw(date.toString());
           }
           else
           {
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/BaseDNDescriptor.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/BaseDNDescriptor.java
index 5ae217b..e30895f 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/BaseDNDescriptor.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/BaseDNDescriptor.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Portions Copyright 2007 Sun Microsystems, Inc.
+ *      Portions Copyright 2007-2008 Sun Microsystems, Inc.
  */
 
 package org.opends.guitools.statuspanel;
@@ -59,7 +59,7 @@
   private int nEntries;
   private int missingChanges;
   private DatabaseDescriptor db;
-  private int ageOfOldestMissingChange;
+  private long ageOfOldestMissingChange;
   private Type type;
   private String baseDn;
   private String unescapedDn;
@@ -77,7 +77,7 @@
    * @param missingChanges the number of missing changes.
    */
   public BaseDNDescriptor(Type type, String baseDn, DatabaseDescriptor db,
-      int nEntries, int ageOfOldestMissingChange, int missingChanges)
+      int nEntries, long ageOfOldestMissingChange, int missingChanges)
   {
     this.baseDn = baseDn;
     this.db = db;
@@ -191,7 +191,7 @@
    * @return the age of the oldest missing change in seconds in the
    * replication topology for this base DN.
    */
-  public int getAgeOfOldestMissingChange()
+  public long getAgeOfOldestMissingChange()
   {
     return ageOfOldestMissingChange;
   }
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromLDAP.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromLDAP.java
index c95b7b8..46747af 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromLDAP.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ConfigFromLDAP.java
@@ -22,11 +22,12 @@
  * CDDL HEADER END
  *
  *
- *      Portions Copyright 2007 Sun Microsystems, Inc.
+ *      Portions Copyright 2007-2008 Sun Microsystems, Inc.
  */
 
 package org.opends.guitools.statuspanel;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
@@ -65,11 +66,11 @@
   private HashSet<String> administrativeUsers = new HashSet<String>();
   private Message errorMessage;
   private boolean replicationConfigured = false;
-  private HashSet<String> replicatedSuffixes = new HashSet<String>();
+  private ArrayList<String> replicatedSuffixes = new ArrayList<String>();
   private HashMap<String, Integer> hmMissingChanges =
     new HashMap<String, Integer>();
-  private HashMap<String, Integer> hmAgeOfOldestMissingChanges =
-    new HashMap<String, Integer>();
+  private HashMap<String, Long> hmAgeOfOldestMissingChanges =
+    new HashMap<String, Long>();
 
   private String dn;
   private String pwd;
@@ -504,13 +505,14 @@
     ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
     ctls.setReturningAttributes(
         new String[] {
-            "ds-cfg-base-dn"
+            "ds-cfg-base-dn",
+            "ds-cfg-server-id"
         });
     filter = "(objectclass=ds-cfg-replication-domain)";
 
     jndiName = new LdapName(
       "cn=Multimaster Synchronization,cn=Synchronization Providers,cn=config");
-
+    ArrayList<String> replicaIds = new ArrayList<String>();
     try
     {
       NamingEnumeration syncProviders = ctx.search(jndiName, filter, ctls);
@@ -519,7 +521,8 @@
       {
         SearchResult sr = (SearchResult)syncProviders.next();
 
-        replicatedSuffixes.addAll(getValues(sr, "ds-cfg-base-dn"));
+        replicatedSuffixes.add(getFirstValue(sr, "ds-cfg-base-dn"));
+        replicaIds.add(getFirstValue(sr, "ds-cfg-server-id"));
       }
     }
     catch (NameNotFoundException nse)
@@ -530,9 +533,10 @@
     ctls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
     ctls.setReturningAttributes(
     new String[] {
-      "approximate-delay", "waiting-changes", "base-dn"
+      "approx-older-change-not-synchronized-millis", "missing-changes",
+      "base-dn", "server-id"
     });
-    filter = "(approximate-delay=*)";
+    filter = "(missing-changes=*)";
 
     jndiName = new LdapName("cn=monitor");
 
@@ -547,16 +551,19 @@
           SearchResult sr = (SearchResult)monitorEntries.next();
 
           String dn = getFirstValue(sr, "base-dn");
+          String replicaId = getFirstValue(sr, "server-id");
 
-          for (String baseDn: replicatedSuffixes)
+          for (int i=0; i<replicatedSuffixes.size(); i++)
           {
-
-            if (Utils.areDnsEqual(dn, baseDn))
+            String baseDn = replicatedSuffixes.get(i);
+            String id = replicaIds.get(i);
+            if (Utils.areDnsEqual(dn, baseDn) && id.equals(replicaId))
             {
               try
               {
                 hmAgeOfOldestMissingChanges.put(baseDn,
-                  new Integer(getFirstValue(sr, "approximate-delay")));
+                  new Long(getFirstValue(sr,
+                      "approx-older-change-not-synchronized-millis")));
               }
               catch (Throwable t)
               {
@@ -564,7 +571,7 @@
               try
               {
                 hmMissingChanges.put(baseDn,
-                  new Integer(getFirstValue(sr, "waiting-changes")));
+                  new Integer(getFirstValue(sr, "missing-changes")));
               }
               catch (Throwable t)
               {
@@ -762,7 +769,7 @@
   {
     BaseDNDescriptor.Type type;
     int missingChanges = -1;
-    int ageOfOldestMissingChange = -1;
+    long ageOfOldestMissingChange = -1;
     String mapSuffixDn = null;
 
     boolean replicated = false;
@@ -783,11 +790,11 @@
       type = BaseDNDescriptor.Type.REPLICATED;
 
       Integer missing = hmMissingChanges.get(mapSuffixDn);
-      Integer age = hmAgeOfOldestMissingChanges.get(mapSuffixDn);
+      Long age = hmAgeOfOldestMissingChanges.get(mapSuffixDn);
 
       if (age != null)
       {
-        ageOfOldestMissingChange = age.intValue();
+        ageOfOldestMissingChange = age.longValue();
       }
 
       if (missing != null)
diff --git a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/DatabasesTableModel.java b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/DatabasesTableModel.java
index 35b5372..230b4d9 100644
--- a/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/DatabasesTableModel.java
+++ b/opendj-sdk/opends/src/guitools/org/opends/guitools/statuspanel/ui/DatabasesTableModel.java
@@ -22,13 +22,14 @@
  * CDDL HEADER END
  *
  *
- *      Portions Copyright 2007 Sun Microsystems, Inc.
+ *      Portions Copyright 2007-2008 Sun Microsystems, Inc.
  */
 
 package org.opends.guitools.statuspanel.ui;
 
 import java.util.ArrayList;
 import java.util.Comparator;
+import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;
 import java.util.TreeSet;
@@ -431,6 +432,19 @@
     return -1;
   }
 
+  private int compareLongs(long n1, long n2)
+  {
+    if (n1 == n2)
+    {
+      return 0;
+    }
+    if (n1 > n2)
+    {
+      return 1;
+    }
+    return -1;
+  }
+
   private int compareDns(BaseDNDescriptor desc1, BaseDNDescriptor desc2)
   {
     return desc1.getUnescapedDn().compareTo(desc2.getUnescapedDn());
@@ -452,7 +466,7 @@
   private int compareAgeOfOldestMissingChange(BaseDNDescriptor desc1,
       BaseDNDescriptor desc2)
   {
-    return compareIntegers(desc1.getAgeOfOldestMissingChange(),
+    return compareLongs(desc1.getAgeOfOldestMissingChange(),
         desc2.getAgeOfOldestMissingChange());
   }
 
@@ -504,27 +518,16 @@
     Object v;
     if (rep.getType() == BaseDNDescriptor.Type.REPLICATED)
     {
-      int age = rep.getAgeOfOldestMissingChange();
-      if (age >= 0)
+      long age = rep.getAgeOfOldestMissingChange();
+      if (age > 0)
       {
-        int remainingSeconds = age % 60;
-        int minutes = age / 60;
-        int remainingMinutes = minutes % 60;
-        int hours = minutes / 60;
-
-        String sMinutes = (remainingMinutes>=10)?
-        String.valueOf(remainingMinutes) : "0"+remainingMinutes;
-
-        String sSeconds = (remainingSeconds>=10)?
-        String.valueOf(remainingSeconds) : "0"+remainingSeconds;
-
-        String sHours = (hours>=10)?String.valueOf(hours):"0"+hours;
-
-        v = sHours+":"+sMinutes+":"+sSeconds;
+        Date date = new Date(age);
+        v = date.toString();
       }
       else
       {
-        v = new Integer(age);
+        // Not available
+        v = new Integer(-1);
       }
     }
     else
diff --git a/opendj-sdk/opends/src/messages/messages/admin_tool.properties b/opendj-sdk/opends/src/messages/messages/admin_tool.properties
index 3f95c5f..ceb40bd 100644
--- a/opendj-sdk/opends/src/messages/messages/admin_tool.properties
+++ b/opendj-sdk/opends/src/messages/messages/admin_tool.properties
@@ -51,9 +51,8 @@
 INFO_HOSTNAME_LABEL=Host Name:
 INFO_ADMINISTRATIVE_USERS_LABEL=Administrative Users:
 INFO_AGE_OF_OLDEST_MISSING_CHANGE_COLUMN=<html>Age of Oldest<br>Missing \
- Change<br>(hh:mm:ss)
-INFO_AGE_OF_OLDEST_MISSING_CHANGE_COLUMN_CLI=Age of Oldest Missing Change \
- (hh:mm:ss)
+ Change
+INFO_AGE_OF_OLDEST_MISSING_CHANGE_COLUMN_CLI=Age of Oldest Missing Change
 INFO_AUTHENTICATE_BUTTON_LABEL=Authenticate
 INFO_AUTHENTICATE_STATUS_PANEL_BUTTON_TOOLTIP=Authenticate as an \
  administrative user to view all monitoring information
@@ -739,8 +738,8 @@
 INFO_REPLICATION_STATUS_HEADER_SECURE=Security (4)
 INFO_REPLICATION_STATUS_REPLICATED_LEGEND=[1] The number of changes that are \
  still missing on this server (and that have been at least applied to one of \
- the other servers).%n[2] Age of oldest missing change: the age (in \
- seconds) of the oldest change that has not arrived to this server.%n[3] The \
+ the other servers).%n[2] Age of oldest missing change: the date where the \
+ oldest change that has not arrived to this server was generated.%n[3] The \
  port used to communicate between the servers whose contents are being \
  replicated.%n[4] Whether the replication communication through the \
  replication port is encrypted or not.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
index 63d6616..0c42763 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/LightweightServerHandler.java
@@ -257,6 +257,9 @@
         Date date = new Date(olderUpdateTime);
         attributes.add(new Attribute("approx-older-change-not-synchronized",
           date.toString()));
+        attributes.add(
+          new Attribute("approx-older-change-not-synchronized-millis",
+          String.valueOf(olderUpdateTime)));
       }
     }
     catch(Exception e)

--
Gitblit v1.10.0