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 2018/07/30 08:58:36 UTC

svn commit: r1837032 - in /tomcat/trunk/java/org/apache/catalina/tribes/membership: LocalStrings.properties StaticMembershipProvider.java StaticMembershipService.java

Author: kfujino
Date: Mon Jul 30 08:58:36 2018
New Revision: 1837032

URL: http://svn.apache.org/viewvc?rev=1837032&view=rev
Log:
Add support for Ping thread to enable to send ping more frequently.

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

Modified: tomcat/trunk/java/org/apache/catalina/tribes/membership/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/LocalStrings.properties?rev=1837032&r1=1837031&r2=1837032&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/membership/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/membership/LocalStrings.properties Mon Jul 30 08:58:36 2018
@@ -50,4 +50,5 @@ memberImpl.invalid.package.end=Invalid p
 memberImpl.unableParse.hostname=Unable to parse hostname.
 memberImpl.large.payload=Payload is to large for tribes to handle.
 staticMember.invalid.uuidLength=UUID must be exactly 16 bytes, not:[{0}]
-staticMembershipService.stopFail=Unable to stop the static membership service, level: [{0}]
\ No newline at end of file
+staticMembershipService.stopFail=Unable to stop the static membership service, level: [{0}]
+staticMembershipProvider.pingThread.failed=Unable to send ping.
\ No newline at end of file

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=1837032&r1=1837031&r2=1837032&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java (original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java Mon Jul 30 08:58:36 2018
@@ -57,6 +57,11 @@ public class StaticMembershipProvider ex
     protected int connectTimeout = 500;
     protected long rpcTimeout = 3000;
     protected int startLevel = 0;
+    // for ping thread
+    protected boolean useThread = false;
+    protected long pingInterval = 1000;
+    protected volatile boolean running = true;
+    protected PingThread thread = null;
 
     @Override
     public void init(Properties properties) throws Exception {
@@ -71,6 +76,10 @@ public class StaticMembershipProvider ex
         membership = new Membership(service.getLocalMember(true));
         this.rpcChannel = new RpcChannel(this.membershipId, channel, this);
         this.channel.addChannelListener(this);
+        String useThreadStr = properties.getProperty("useThread");
+        this.useThread = Boolean.parseBoolean(useThreadStr);
+        String pingIntervalStr = properties.getProperty("pingInterval");
+        this.pingInterval = Long.parseLong(pingIntervalStr);
     }
 
     @Override
@@ -84,6 +93,13 @@ public class StaticMembershipProvider ex
         startLevel = (startLevel | level);
         if (startLevel == (Channel.MBR_RX_SEQ | Channel.MBR_TX_SEQ)) {
             startMembership(getAliveMembers(staticMembers.toArray(new Member[0])));
+            running = true;
+            if ( thread == null && useThread) {
+                thread = new PingThread();
+                thread.setDaemon(true);
+                thread.setName("StaticMembership.PingThread[" + this.channel.getName() +"]");
+                thread.start();
+            }
         }
     }
 
@@ -97,6 +113,11 @@ public class StaticMembershipProvider ex
         }
         startLevel = (startLevel & (~level));
         if ( startLevel == 0 ) {
+            running = false;
+            if (thread != null) {
+                thread.interrupt();
+                thread = null;
+            }
             if (this.rpcChannel != null) {
                 this.rpcChannel.breakdown();
             }
@@ -221,7 +242,7 @@ public class StaticMembershipProvider ex
     @Override
     public void heartbeat() {
         try {
-            ping();
+            if (!useThread) ping();
         } catch (ChannelException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
@@ -323,4 +344,18 @@ public class StaticMembershipProvider ex
         }
     }
 
+    protected class PingThread extends Thread {
+        @Override
+        public void run() {
+            while (running) {
+                try {
+                    sleep(pingInterval);
+                    ping();
+                }catch (InterruptedException ix) {
+                }catch (Exception x) {
+                    log.warn(sm.getString("staticMembershipProvider.pingThread.failed"),x);
+                }
+            }
+        }
+    }
 }
\ No newline at end of file

Modified: tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipService.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipService.java?rev=1837032&r1=1837031&r2=1837032&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipService.java (original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/membership/StaticMembershipService.java Mon Jul 30 08:58:36 2018
@@ -161,6 +161,24 @@ public class StaticMembershipService ext
         properties.setProperty("rpcTimeout", String.valueOf(rpcTimeout));
     }
 
+    public boolean getUseThread() {
+        String useThread = properties.getProperty("useThread");
+        return Boolean.parseBoolean(useThread);
+    }
+
+    public void setUseThread(boolean useThread) {
+        properties.setProperty("useThread", String.valueOf(useThread));
+    }
+
+    public long getPingInterval() {
+        String pingInterval = properties.getProperty("pingInterval");
+        return Long.parseLong(pingInterval);
+    }
+
+    public void setPingInterval(long pingInterval) {
+        properties.setProperty("pingInterval", String.valueOf(pingInterval));
+    }
+
     @Override
     public void setProperties(Properties properties) {
         setDefaults(properties);
@@ -175,6 +193,10 @@ public class StaticMembershipService ext
             properties.setProperty("connectTimeout","500");
         if (properties.getProperty("rpcTimeout") == null)
             properties.setProperty("rpcTimeout","3000");
+        if (properties.getProperty("useThread") == null)
+            properties.setProperty("useThread","false");
+        if (properties.getProperty("pingInterval") == null)
+            properties.setProperty("pingInterval","1000");
     }
 
     private String getMembershipName() {



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