You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kf...@apache.org on 2015/12/21 06:08:54 UTC

svn commit: r1721088 - in /tomcat/tc8.0.x/trunk: java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java webapps/docs/changelog.xml

Author: kfujino
Date: Mon Dec 21 05:08:54 2015
New Revision: 1721088

URL: http://svn.apache.org/viewvc?rev=1721088&view=rev
Log:
Add support for the shutdown notification of local members in the static cluster.

Modified:
    tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties
    tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java
    tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml

Modified: tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties?rev=1721088&r1=1721087&r2=1721088&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties (original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties Mon Dec 21 05:08:54 2015
@@ -35,6 +35,7 @@ orderInterceptor.messageAdded.sameCounte
 staticMembershipInterceptor.no.failureDetector=There is no TcpFailureDetector. Automatic detection of static members does not work properly. By defining the StaticMembershipInterceptor under the TcpFailureDetector, automatic detection of the static members will work.
 staticMembershipInterceptor.no.pingInterceptor=There is no TcpPingInterceptor. The health check of static members does not work properly. By defining the TcpPingInterceptor, the health check of static members will work.
 staticMembershipInterceptor.sendLocalMember.failed=Local member notification failed.
+staticMembershipInterceptor.sendShutdown.failed=Shutdown notification failed.
 tcpFailureDetector.memberDisappeared.verify=Received memberDisappeared[{0}] message. Will verify.
 tcpFailureDetector.already.disappeared=Verification complete. Member already disappeared[{0}]
 tcpFailureDetector.member.disappeared=Verification complete. Member disappeared[{0}]

Modified: tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java?rev=1721088&r1=1721087&r2=1721088&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java (original)
+++ tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java Mon Dec 21 05:08:54 2015
@@ -42,6 +42,10 @@ public class StaticMembershipInterceptor
         76, 111, 99, 97, 108, 32, 83, 116, 97, 116, 105, 99, 77, 101, 109, 98, 101, 114, 32, 78,
         111, 116, 105, 102, 105, 99, 97, 116, 105, 111, 110, 32, 68, 97, 116, 97};
 
+    protected static final byte[] MEMBER_STOP = new byte[] {
+        76, 111, 99, 97, 108, 32, 83, 116, 97, 116, 105, 99, 77, 101, 109, 98, 101, 114, 32, 83,
+        104, 117, 116, 100, 111, 119, 110, 32, 68, 97, 116, 97};
+
     protected final ArrayList<Member> members = new ArrayList<>();
     protected Member localMember = null;
 
@@ -74,6 +78,18 @@ public class StaticMembershipInterceptor
             if (member != null) {
                 super.memberAdded(member);
             }
+        } else if (msg.getMessage().getLength() == MEMBER_STOP.length &&
+                Arrays.equals(MEMBER_STOP, msg.getMessage().getBytes())) {
+            // receive member shutdown
+            Member member = getMember(msg.getAddress());
+            if (member != null) {
+                try {
+                    member.setCommand(Member.SHUTDOWN_PAYLOAD);
+                    super.memberDisappeared(member);
+                } finally {
+                    member.setCommand(new byte[0]);
+                }
+            }
         } else {
             super.messageReceived(msg);
         }
@@ -169,20 +185,35 @@ public class StaticMembershipInterceptor
         }
     }
 
+    /**
+     * {@inheritDoc}
+     * <p>
+     * Sends local member shutdown.
+     */
+    @Override
+    public void stop(int svc) throws ChannelException {
+        // Sends local member shutdown.
+        Member[] members = getfirstInterceptor().getMembers();
+        sendShutdown(members);
+        super.stop(svc);
+    }
+
     protected void sendLocalMember(Member[] members) {
-        if ( members == null || members.length == 0 ) return;
-        ChannelData data = new ChannelData(true);
-        data.setAddress(getLocalMember(false));
-        data.setTimestamp(System.currentTimeMillis());
-        data.setOptions(getOptionFlag());
-        data.setMessage(new XByteBuffer(MEMBER_START, false));
         try {
-            super.sendMessage(members, data, null);
-        }catch (ChannelException cx) {
+            sendMemberMessage(members, MEMBER_START);
+        } catch (ChannelException cx) {
             log.warn(sm.getString("staticMembershipInterceptor.sendLocalMember.failed"),cx);
         }
     }
 
+    protected void sendShutdown(Member[] members) {
+        try {
+            sendMemberMessage(members, MEMBER_STOP);
+        } catch (ChannelException cx) {
+            log.warn(sm.getString("staticMembershipInterceptor.sendShutdown.failed"),cx);
+        }
+    }
+
     protected ChannelInterceptor getfirstInterceptor() {
         ChannelInterceptor result = null;
         ChannelInterceptor now = this;
@@ -193,4 +224,13 @@ public class StaticMembershipInterceptor
         return result;
     }
 
+    protected void sendMemberMessage(Member[] members, byte[] message) throws ChannelException {
+        if ( members == null || members.length == 0 ) return;
+        ChannelData data = new ChannelData(true);
+        data.setAddress(getLocalMember(false));
+        data.setTimestamp(System.currentTimeMillis());
+        data.setOptions(getOptionFlag());
+        data.setMessage(new XByteBuffer(message, false));
+        super.sendMessage(members, data, null);
+    }
 }
\ No newline at end of file

Modified: tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml?rev=1721088&r1=1721087&r2=1721088&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml Mon Dec 21 05:08:54 2015
@@ -133,6 +133,10 @@
         Ignore the unnecessary member remove operation from different domain.
         (kfujino)
       </fix>
+      <fix>
+        Add support for the shutdown notification of local members in the static
+        cluster. (kfujino)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Other">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org