From 840c825261ce76e69fbffe437861b40984d30d35 Mon Sep 17 00:00:00 2001
From: gbellato <gbellato@localhost>
Date: Tue, 03 Oct 2006 13:47:20 +0000
Subject: [PATCH] At startup time, each changelog server establish a connection with each other changelog server.

---
 opendj-sdk/opends/src/server/org/opends/server/changelog/ChangelogCache.java             |    2 
 opendj-sdk/opends/src/server/org/opends/server/changelog/Changelog.java                  |   35 ++++++++++-------
 opendj-sdk/opends/src/server/org/opends/server/changelog/ProtocolSession.java            |    7 +++
 opendj-sdk/opends/src/server/org/opends/server/changelog/SerializingProtocolSession.java |    8 ++++
 opendj-sdk/opends/src/server/org/opends/server/changelog/ServerHandler.java              |   14 +++++++
 opendj-sdk/opends/src/server/org/opends/server/changelog/SocketSession.java              |    8 ++++
 6 files changed, 59 insertions(+), 15 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/changelog/Changelog.java b/opendj-sdk/opends/src/server/org/opends/server/changelog/Changelog.java
index 2fbe670..dd7006a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/changelog/Changelog.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/changelog/Changelog.java
@@ -89,7 +89,6 @@
   private static HashMap<DN, ChangelogCache> baseDNs =
           new HashMap<DN, ChangelogCache>();
 
-  private String localhostname = "null";
   private String localURL = "null";
   private static boolean shutdown = false;
   private short changelogServerId;
@@ -207,17 +206,27 @@
      */
     StringConfigAttribute changelogServer =
       (StringConfigAttribute) config.getConfigAttribute(changelogStub);
-    if (changelogServer == null)
+    changelogServers = new ArrayList<String>();
+    if (changelogServer != null)
     {
-      changelogServers = new ArrayList<String>();
-    }
-    else
-    {
-      changelogServers = changelogServer.activeValues();
+      for (String serverURL : changelogServer.activeValues())
+      {
+        String[] splitStrings = serverURL.split(":");
+        try
+        {
+          changelogServers.add(
+              InetAddress.getByName(splitStrings[0]).getHostAddress()
+              + ":" + splitStrings[1]);
+        } catch (UnknownHostException e)
+        {
+          throw new ConfigException(MSGID_UNKNOWN_HOSTNAME,
+              e.getLocalizedMessage());
+        }
+      }
     }
     configAttributes.add(changelogServer);
 
-    initialize(changelogServerId, changelogPort, changelogServers);
+    initialize(changelogServerId, changelogPort);
 
     configDn = config.getDN();
     DirectoryServer.registerConfigurableComponent(this);
@@ -384,12 +393,9 @@
    *
    * @param  changelogId       The unique identifier for this changelog.
    * @param  changelogPort     The port on which the changelog should listen.
-   * @param  changelogServers  The set of changelog servers that have been
-   *                           defined.
    *
    */
-  private void initialize(short changelogId, int changelogPort,
-                         List<String> changelogServers)
+  private void initialize(short changelogId, int changelogPort)
   {
     try
     {
@@ -408,9 +414,10 @@
       /*
        * Open changelog socket
        */
-      localhostname = InetAddress.getLocalHost().getHostName();
+      String localhostname = InetAddress.getLocalHost().getHostName();
+      String localAdddress = InetAddress.getLocalHost().getHostAddress();
       serverURL = localhostname + ":" + String.valueOf(changelogPort);
-      localURL = localhostname + ":" + String.valueOf(changelogPort);
+      localURL = localAdddress + ":" + String.valueOf(changelogPort);
       listenSocket = new ServerSocket(changelogPort);
 
       /*
diff --git a/opendj-sdk/opends/src/server/org/opends/server/changelog/ChangelogCache.java b/opendj-sdk/opends/src/server/org/opends/server/changelog/ChangelogCache.java
index 460d4bc..c92a90b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/changelog/ChangelogCache.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/changelog/ChangelogCache.java
@@ -359,7 +359,7 @@
 
     for (ServerHandler handler : changelogServers.values())
     {
-      mySet.add(handler.getServerURL());
+      mySet.add(handler.getServerAddressURL());
     }
 
     return mySet;
diff --git a/opendj-sdk/opends/src/server/org/opends/server/changelog/ProtocolSession.java b/opendj-sdk/opends/src/server/org/opends/server/changelog/ProtocolSession.java
index e6a3c4f..177b974 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/changelog/ProtocolSession.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/changelog/ProtocolSession.java
@@ -83,4 +83,11 @@
   public abstract SynchronizationMessage receive()
                   throws IOException, ClassNotFoundException,
                          DataFormatException;
+
+  /**
+   * Retrieve the IP address of the remote server.
+   *
+   * @return The IP address of the remote server.
+   */
+  public abstract String getRemoteAddress();
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/changelog/SerializingProtocolSession.java b/opendj-sdk/opends/src/server/org/opends/server/changelog/SerializingProtocolSession.java
index 7c742ac..23d87c2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/changelog/SerializingProtocolSession.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/changelog/SerializingProtocolSession.java
@@ -103,4 +103,12 @@
     }
     return (SynchronizationMessage) socketInput.readObject();
   }
+
+  /**
+   * {@inheritDoc}
+   */
+  public String getRemoteAddress()
+  {
+    return socket.getInetAddress().getHostAddress();
+  }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/changelog/ServerHandler.java b/opendj-sdk/opends/src/server/org/opends/server/changelog/ServerHandler.java
index fc482a8..d4cc9d6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/changelog/ServerHandler.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/changelog/ServerHandler.java
@@ -92,6 +92,7 @@
   private boolean active = true;
   private ServerWriter writer = null;
   private DN baseDn = null;
+  private String serverAddressURL;
 
   private static Map<ChangeNumber, ChangelogAckMessageList>
    changelogsWaitingAcks = new HashMap<ChangeNumber, ChangelogAckMessageList>();
@@ -188,6 +189,8 @@
         ChangelogStartMessage receivedMsg = (ChangelogStartMessage) msg;
         serverId = receivedMsg.getServerId();
         serverURL = receivedMsg.getServerURL();
+        String[] splittedURL = serverURL.split(":");
+        serverAddressURL = session.getRemoteAddress() + ":" + splittedURL[1];
         serverIsLDAPserver = false;
         this.baseDn = receivedMsg.getBaseDn();
         if (baseDn == null)
@@ -262,6 +265,17 @@
   }
 
   /**
+   * Retrieves the Address URL for this server handler.
+   *
+   * @return  The Address URL for this server handler,
+   *          in the form of an IP address and port separated by a colon.
+   */
+  public String getServerAddressURL()
+  {
+    return serverAddressURL;
+  }
+
+  /**
    * Retrieves the URL for this server handler.
    *
    * @return  The URL for this server handler, in the form of an address and
diff --git a/opendj-sdk/opends/src/server/org/opends/server/changelog/SocketSession.java b/opendj-sdk/opends/src/server/org/opends/server/changelog/SocketSession.java
index cc65088..b19f27d 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/changelog/SocketSession.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/changelog/SocketSession.java
@@ -120,4 +120,12 @@
                             + totalLength + " bytes.");
     }
   }
+
+  /**
+   * {@inheritDoc}
+   */
+  public String getRemoteAddress()
+  {
+    return socket.getInetAddress().getHostAddress();
+  }
 }

--
Gitblit v1.10.0