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