You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by az...@apache.org on 2008/07/04 13:14:36 UTC

svn commit: r674009 - in /webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering: control/wka/ tribes/

Author: azeez
Date: Fri Jul  4 04:14:35 2008
New Revision: 674009

URL: http://svn.apache.org/viewvc?rev=674009&view=rev
Log:
1. Notify the LB group when a new load balancer member joins
2. No need to LeaveGroup message
3. Code improvements


Added:
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/OperationMode.java
      - copied, changed from r673345, webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/Mode.java
Removed:
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/control/wka/LeaveGroupCommand.java
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/Mode.java
Modified:
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ApplicationMode.java
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerInterceptor.java
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerMode.java
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MembershipManager.java
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MulticastBasedMembershipScheme.java
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesUtil.java
    webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaBasedMembershipScheme.java

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ApplicationMode.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ApplicationMode.java?rev=674009&r1=674008&r2=674009&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ApplicationMode.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/ApplicationMode.java Fri Jul  4 04:14:35 2008
@@ -27,7 +27,7 @@
 /**
  *  Represents a member running in application mode
  */
-public class ApplicationMode implements Mode {
+public class ApplicationMode implements OperationMode {
 
      private static final Log log = LogFactory.getLog(LoadBalancerMode.class);
 

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerInterceptor.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerInterceptor.java?rev=674009&r1=674008&r2=674009&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerInterceptor.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerInterceptor.java Fri Jul  4 04:14:35 2008
@@ -19,8 +19,6 @@
 import org.apache.catalina.tribes.group.ChannelInterceptorBase;
 import org.apache.catalina.tribes.membership.Membership;
 
-import java.util.Arrays;
-
 /**
  * This interceptor is used when this member is part of a load balancer cluster.
  * This load balancer is responsible for load balancing across applications deployed in
@@ -43,9 +41,10 @@
     }
 
     public void messageReceived(ChannelMessage msg) {
-        // Ignore all messages which are not intended for the load balancer group
+        // Ignore all messages which are not intended for the load balancer group or which are not
+        // membership messages
         if (okToProcess(msg.getOptions()) ||
-            Arrays.equals(msg.getAddress().getDomain(), loadBalancerDomain)) {
+            TribesUtil.isInDomain(msg.getAddress(), loadBalancerDomain)) {
             super.messageReceived(msg);
         }
     }

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerMode.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerMode.java?rev=674009&r1=674008&r2=674009&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerMode.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/LoadBalancerMode.java Fri Jul  4 04:14:35 2008
@@ -27,14 +27,13 @@
 import org.apache.commons.logging.LogFactory;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
 /**
  * Represents a member running in load balance mode
  */
-public class LoadBalancerMode implements Mode {
+public class LoadBalancerMode implements OperationMode {
 
     private static final Log log = LogFactory.getLog(LoadBalancerMode.class);
 
@@ -88,9 +87,14 @@
         return membershipManagers;
     }
 
-    public void notifyMemberJoin(final Member member) { 
+    public void notifyMemberJoin(final Member member) {
 
-        if (Arrays.equals(loadBalancerDomain, member.getDomain())) {  // A peer load balancer has joined. Need to send it the entire member lists
+        if (TribesUtil.isInDomain(member, loadBalancerDomain)) {  // A peer load balancer has joined
+
+            // Notify all members in the LB group
+            primaryMembershipManager.sendMemberJoinedToAll(member);
+
+            // Send the MEMBER_LISTS of all the groups to the the new LB member
             for (MembershipManager manager : membershipManagers) {
                 manager.sendMemberList(member);
             }
@@ -100,28 +104,42 @@
             Thread th = new Thread() {
                 public void run() {
                     for (MembershipManager manager : membershipManagers) {
-                        if (Arrays.equals(manager.getDomain(), member.getDomain())) {
+                        if (TribesUtil.isInDomain(member, manager.getDomain())) {
+
+                            // Send MEMBER_JOINED to the group of the new member
                             manager.sendMemberJoinedToAll(member);
-                            MemberJoinedCommand cmd = new MemberJoinedCommand();
-                            cmd.setMember(member);
-                            try {
-                                RpcChannel rpcChannel = manager.getRpcMembershipChannel();
-                                rpcChannel.send(primaryMembershipManager.getMembers(),
-                                                cmd,
-                                                RpcChannel.ALL_REPLY,
-                                                Channel.SEND_OPTIONS_ASYNCHRONOUS,
-                                                10000);
-                            } catch (ChannelException e) {
-                                String errMsg = "Could not send MEMBER_JOINED[" +
-                                                TribesUtil.getName(member) +
-                                                "] to all load balancer members ";
-                                log.error(errMsg, e);
-                                throw new RemoteProcessException(errMsg, e);
-                            }
+
+                            // Send MEMBER_JOINED to the load balancer group
+                            sendMemberJoinedToLoadBalancerGroup(manager.getRpcMembershipChannel(),
+                                                                member);
                             break;
                         }
                     }
                 }
+
+                /**
+                 * Send MEMBER_JOINED to the load balancer group
+                 * @param rpcChannel The RpcChannel corresponding to the member's group
+                 * @param member  The member who joined
+                 */
+                private void sendMemberJoinedToLoadBalancerGroup(RpcChannel rpcChannel,
+                                                                 Member member) {
+                    MemberJoinedCommand cmd = new MemberJoinedCommand();
+                    cmd.setMember(member);
+                    try {
+                        rpcChannel.send(primaryMembershipManager.getMembers(),
+                                        cmd,
+                                        RpcChannel.ALL_REPLY,
+                                        Channel.SEND_OPTIONS_ASYNCHRONOUS,
+                                        10000);
+                    } catch (ChannelException e) {
+                        String errMsg = "Could not send MEMBER_JOINED[" +
+                                        TribesUtil.getName(member) +
+                                        "] to all load balancer members ";
+                        log.error(errMsg, e);
+                        throw new RemoteProcessException(errMsg, e);
+                    }
+                }
             };
             th.start();
         }

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MembershipManager.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MembershipManager.java?rev=674009&r1=674008&r2=674009&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MembershipManager.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MembershipManager.java Fri Jul  4 04:14:35 2008
@@ -134,7 +134,7 @@
 
         // If this member already exists or if the member belongs to another domain,
         // there is no need to add it
-        if (members.contains(member) || !Arrays.equals(domain, member.getDomain())) {
+        if (members.contains(member) || !TribesUtil.isInDomain(member, domain)) {
             return false;
         }
 
@@ -146,7 +146,7 @@
         }
 
         boolean shouldAddMember = localMember == null ||
-                                  Arrays.equals(localMember.getDomain(), member.getDomain());
+                                  TribesUtil.areInSameDomain(localMember, member);
 
         // If this member is a load balancer, notify the respective load balance event handler?
         if (loadBalanceEventHandler != null) {
@@ -179,9 +179,9 @@
                     // if it does not belong to this domain, simply remove it from the members
                     if(responses != null && responses.length > 0 && responses[0] != null){
                         Member source = responses[0].getSource();
-                        if(!Arrays.equals(source.getDomain(), member.getDomain())){
+                        if(!TribesUtil.areInSameDomain(source, member)){
                             if(log.isDebugEnabled()){
-                                log.debug("Member " + TribesUtil.getName(source) +
+                                log.debug("WKA Member " + TribesUtil.getName(source) +
                                           " does not belong to local domain " + new String(domain)+
                                           ". Hence removing it from the list.");
                             }

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MulticastBasedMembershipScheme.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MulticastBasedMembershipScheme.java?rev=674009&r1=674008&r2=674009&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MulticastBasedMembershipScheme.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/MulticastBasedMembershipScheme.java Fri Jul  4 04:14:35 2008
@@ -53,10 +53,10 @@
     /**
      * The mode in which this member operates such as "loadBalance" or "application"
      */
-    private Mode mode;
+    private OperationMode mode;
 
     public MulticastBasedMembershipScheme(ManagedChannel channel,
-                                          Mode mode,
+                                          OperationMode mode,
                                           Map<String, Parameter> parameters,
                                           byte[] domain) {
         this.channel = channel;

Copied: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/OperationMode.java (from r673345, webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/Mode.java)
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/OperationMode.java?p2=webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/OperationMode.java&p1=webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/Mode.java&r1=673345&r2=674009&rev=674009&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/Mode.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/OperationMode.java Fri Jul  4 04:14:35 2008
@@ -21,9 +21,9 @@
 import java.util.List;
 
 /**
- * The mode in which this member is running such a loadBalance or application
+ * The mode in which this member is operating such a loadBalance or application
  */
-public interface Mode {
+public interface OperationMode {
 
     /**
      * Add channel interecptors

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=674009&r1=674008&r2=674009&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 Fri Jul  4 04:14:35 2008
@@ -87,7 +87,7 @@
     /**
      * The mode in which this member operates such as "loadBalance" or "application"
      */
-    private Mode mode;
+    private OperationMode mode;
 
     /**
      * Static members

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesUtil.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesUtil.java?rev=674009&r1=674008&r2=674009&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesUtil.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesUtil.java Fri Jul  4 04:14:35 2008
@@ -21,6 +21,7 @@
 
 import org.apache.catalina.tribes.Channel;
 import org.apache.catalina.tribes.Member;
+import org.apache.catalina.tribes.util.Arrays;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -73,4 +74,12 @@
     public static byte[] getRpcInitChannelId(byte[] domain) {
         return (new String(domain) + ":" + TribesConstants.RPC_INIT_CHANNEL).getBytes();
     }
+
+    public static boolean isInDomain(Member member, byte[] domain){
+        return Arrays.equals(domain, member.getDomain());
+    }
+
+    public static boolean areInSameDomain(Member member1, Member member2){
+        return Arrays.equals(member1.getDomain(), member2.getDomain());
+    }
 }

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaBasedMembershipScheme.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaBasedMembershipScheme.java?rev=674009&r1=674008&r2=674009&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaBasedMembershipScheme.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/WkaBasedMembershipScheme.java Fri Jul  4 04:14:35 2008
@@ -77,10 +77,10 @@
     /**
      * The mode in which this member operates such as "loadBalance" or "application"
      */
-    private Mode mode;
+    private OperationMode mode;
 
     public WkaBasedMembershipScheme(ManagedChannel channel,
-                                    Mode mode,
+                                    OperationMode mode,
                                     List<MembershipManager> applicationDomainMembershipManagers,
                                     MembershipManager primaryMembershipManager,
                                     Map<String, Parameter> parameters,
@@ -418,8 +418,8 @@
                 command.execute(null); // Set the list of current members
 
                 // If the WKA member is not part of this group, remove it
-                if (!Arrays.equals(response.getSource().getDomain(),
-                                   primaryMembershipManager.getLocalMember().getDomain())) {
+                if (!TribesUtil.areInSameDomain(response.getSource(),
+                                                primaryMembershipManager.getLocalMember())) {
                     primaryMembershipManager.memberDisappeared(response.getSource());
                     if (log.isDebugEnabled()) {
                         log.debug("Removed member " + TribesUtil.getName(response.getSource()) +