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