You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by az...@apache.org on 2008/05/17 16:35:34 UTC

svn commit: r657365 - in /webservices/axis2/trunk/java/modules: clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java kernel/src/org/apache/axis2/clustering/ClusteringConstants.java

Author: azeez
Date: Sat May 17 07:35:34 2008
New Revision: 657365

URL: http://svn.apache.org/viewvc?rev=657365&view=rev
Log:
Introducing constants


Modified:
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java?rev=657365&r1=657364&r2=657365&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java Sat May 17 07:35:34 2008
@@ -128,12 +128,7 @@
 
         setMaximumRetries();
         byte[] domain = getClusterDomain();
-
-        Parameter membershipSchemeParam = getParameter("membershipScheme");
-        String membershipScheme = ClusteringConstants.MembershipScheme.MULTICAST_BASED;
-        if (membershipSchemeParam != null) {
-            membershipScheme = ((String) membershipSchemeParam.getValue()).trim();
-        }
+        String membershipScheme = getMembershipScheme();
 
         // Add all the ChannelInterceptors
         addInterceptors(channel, domain, membershipScheme);
@@ -156,7 +151,7 @@
                                           ". Please set an IP address other than " +
                                           localHost + " in your /etc/hosts file or set the " +
                                           ClusteringConstants.LOCAL_IP_ADDRESS +
-                                          " System property and retry.");
+                                          " System property and retry."); //TODO: setting the value in the axis2.xml file
             }
         } catch (ChannelException e) {
             String msg = "Error starting Tribes channel";
@@ -194,7 +189,21 @@
     }
 
     /**
+     * Get the membership scheme applicable to this cluster
+     * @return The membership scheme. Only "wka" & "multicast" are valid return values.
+     */
+    private String getMembershipScheme() {
+        Parameter membershipSchemeParam = getParameter("membershipScheme");
+        String membershipScheme = ClusteringConstants.MembershipScheme.MULTICAST_BASED;
+        if (membershipSchemeParam != null) {
+            membershipScheme = ((String) membershipSchemeParam.getValue()).trim();
+        }
+        return membershipScheme;
+    }
+
+    /**
      * Get the clustering domain to which this node belongs to
+     *
      * @return The clustering domain to which this node belongs to
      */
     private byte[] getClusterDomain() {
@@ -203,7 +212,7 @@
         if (domainParam != null) {
             domain = ((String) domainParam.getValue()).getBytes();
         } else {
-            domain = "apache.axis2.domain".getBytes();
+            domain = ClusteringConstants.DEFAULT_DOMAIN.getBytes();
         }
         return domain;
     }
@@ -310,41 +319,35 @@
             for (org.apache.axis2.clustering.Member member : members) {
                 StaticMember tribesMember;
                 try {
-                    tribesMember = new StaticMember(member.getHostName(),
-                                                    member.getPort(),
-                                                    0,
-                                                    payload);
+                    tribesMember = new StaticMember(member.getHostName(), member.getPort(),
+                                                    0, payload);
                 } catch (IOException e) {
                     String msg = "Could not add static member " +
                                  member.getHostName() + ":" + member.getPort();
                     log.error(msg, e);
                     throw new ClusteringFault(msg, e);
                 }
+                
                 // Do not add the local member to the list of members
                 if (!(Arrays.equals(localMember.getHost(), tribesMember.getHost()) &&
                       localMember.getPort() == tribesMember.getPort())) {
                     tribesMember.setDomain(domain);
-                    staticMembershipInterceptor.addStaticMember(tribesMember);
-                    try {
 
-                        // Before adding a static member, we will try to verify whether
-                        // we can connect to it
-                        InetAddress addr = InetAddress.getByName(member.getHostName());
-                        SocketAddress sockaddr = new InetSocketAddress(addr,
-                                                                       member.getPort());
-                        new Socket().connect(sockaddr, 3000);
+                    // We will add the member even if it is offline at this moment. When the
+                    // member comes online, it will be detected by the GMS
+                    staticMembershipInterceptor.addStaticMember(tribesMember);
+                    if (canConnect(member)) {
                         membershipManager.memberAdded(tribesMember);
                         log.info("Added static member " + TribesUtil.getHost(tribesMember));
-                    } catch (Exception e) {
-                        log.info("Could not connect to member " +
-                                 TribesUtil.getHost(tribesMember));
+                    } else {
+                        log.info("Could not connect to member " + TribesUtil.getHost(tribesMember));
                     }
                 }
             }
         } else if (membershipScheme.equals(ClusteringConstants.MembershipScheme.MULTICAST_BASED)) {
             log.info("Using multicast based membership management scheme");
             configureMulticastParameters(channel, domain);
-        } else {                                        
+        } else {
             String msg = "Invalid membership scheme '" + membershipScheme +
                          "'. Supported schemes are multicast & wka";
             log.error(msg);
@@ -353,6 +356,29 @@
     }
 
     /**
+     * Before adding a static member, we will try to verify whether we can connect to it
+     *
+     * @param member The member whose connectvity needs to be verified
+     * @return true, if the member can be contacted; false, otherwise.
+     */
+    private boolean canConnect(org.apache.axis2.clustering.Member member) {
+        boolean canConnect = false;
+        try {
+            InetAddress addr = InetAddress.getByName(member.getHostName());
+            SocketAddress sockaddr = new InetSocketAddress(addr,
+                                                           member.getPort());
+            new Socket().connect(sockaddr, 3000);
+            canConnect = true;
+        } catch (IOException ignored) {
+            // A debug level log is sufficient here since we are only trying to verify whether
+            // the member in concern is online or offline
+//            log.debug("Cannot connect to member " +
+//                      member.getHostName() + ":" + member.getPort(), e);
+        }
+        return canConnect;
+    }
+
+    /**
      * Add ChannelInterceptors. The order of the interceptors that are added will depend on the
      * membership management scheme
      *
@@ -412,7 +438,7 @@
      * parameters
      *
      * @param channel The Tribes channel
-     * @param domain The clustering domain to which this node belongs to
+     * @param domain  The clustering domain to which this node belongs to
      */
     private void configureMulticastParameters(ManagedChannel channel,
                                               byte[] domain) {

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java?rev=657365&r1=657364&r2=657365&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java Sat May 17 07:35:34 2008
@@ -36,6 +36,11 @@
      */
     public static final String DOMAIN = "domain";
 
+    /**
+     * The default domain to which this node belongs to
+     */
+    public static final String DEFAULT_DOMAIN = "apache.axis2.domain";
+
     public static final String NODE_MANAGER_SERVICE = "Axis2NodeManager";
     public static final String REQUEST_BLOCKING_HANDLER = "RequestBlockingHandler";
     public static final String CLUSTER_INITIALIZED = "local_cluster.initialized";
@@ -49,6 +54,13 @@
      */
     public static final String SYNCHRONIZE_ALL_MEMBERS = "synchronizeAll";
 
+    /**
+     * The main cluster configuration parameters
+     */
+    public static final class Parameters {
+
+    }
+
     public static final class MembershipScheme {
         /**
          * Multicast based membership discovery scheme