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: [email protected]
For additional commands, e-mail: [email protected]