Author: kfujino
Date: Fri Aug  3 05:45:25 2018
New Revision: 1837346

URL: http://svn.apache.org/viewvc?rev=1837346&view=rev
Log:
The event notification of memberAdded or memberDisappeared does not prevent 
execution of the original thread such as ping, receiver thread.

Modified:
    
tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java

Modified: 
tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java?rev=1837346&r1=1837345&r2=1837346&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
 (original)
+++ 
tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
 Fri Aug  3 05:45:25 2018
@@ -25,6 +25,8 @@ import java.nio.charset.StandardCharsets
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.catalina.tribes.Channel;
 import org.apache.catalina.tribes.ChannelException;
@@ -37,6 +39,7 @@ import org.apache.catalina.tribes.group.
 import org.apache.catalina.tribes.group.RpcCallback;
 import org.apache.catalina.tribes.group.RpcChannel;
 import org.apache.catalina.tribes.util.Arrays;
+import org.apache.catalina.tribes.util.ExecutorFactory;
 import org.apache.catalina.tribes.util.StringManager;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
@@ -62,6 +65,8 @@ public class StaticMembershipProvider ex
     protected long pingInterval = 1000;
     protected volatile boolean running = true;
     protected PingThread thread = null;
+    // The event notification executor
+    protected final ExecutorService executor = 
ExecutorFactory.newThreadPool(0, 10, 10, TimeUnit.SECONDS);
 
     @Override
     public void init(Properties properties) throws Exception {
@@ -113,6 +118,7 @@ public class StaticMembershipProvider ex
         }
         startLevel = (startLevel & (~level));
         if ( startLevel == 0 ) {
+            executor.shutdownNow();
             running = false;
             if (thread != null) {
                 thread.interrupt();
@@ -155,15 +161,35 @@ public class StaticMembershipProvider ex
     protected void memberAdded(Member member) {
         Member mbr = setupMember(member);
         if(membership.memberAlive(mbr)) {
-            // TODO invoke thread
-            membershipListener.memberAdded(mbr);
+            Runnable r = new Runnable() {
+                public void run(){
+                    String name = Thread.currentThread().getName();
+                    try {
+                        
Thread.currentThread().setName("StaticMembership-memberAdded");
+                        membershipListener.memberAdded(mbr);
+                    } finally {
+                        Thread.currentThread().setName(name);
+                    }
+                }
+            };
+            executor.execute(r);
         }
     }
 
     protected void memberDisappeared(Member member) {
         membership.removeMember(member);
-        // TODO invoke thread
-        membershipListener.memberDisappeared(member);
+        Runnable r = new Runnable() {
+            public void run(){
+                String name = Thread.currentThread().getName();
+                try {
+                    
Thread.currentThread().setName("StaticMembership-memberDisappeared");
+                    membershipListener.memberDisappeared(member);
+                } finally {
+                    Thread.currentThread().setName(name);
+                }
+            }
+        };
+        executor.execute(r);
     }
 
     protected void memberAlive(Member member) {



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

Reply via email to