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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org