From: fhanik Date: Fri, 17 Aug 2007 19:36:19 +0000 (+0000) Subject: back port from trunk, recovery options and retain membership X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=d9790c27c2c5840dcdcdf5972a45be20965b1117;p=tomcat7.0 back port from trunk, recovery options and retain membership git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@567117 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/tribes/membership/McastService.java b/java/org/apache/catalina/tribes/membership/McastService.java index 28bb33811..8193795aa 100644 --- a/java/org/apache/catalina/tribes/membership/McastService.java +++ b/java/org/apache/catalina/tribes/membership/McastService.java @@ -217,6 +217,19 @@ public class McastService implements MembershipService,MembershipListener { public void setPort(int port) { properties.setProperty("mcastPort", String.valueOf(port)); } + + public void setRecoveryCounter(int recoveryCounter) { + properties.setProperty("recoveryCounter", String.valueOf(recoveryCounter)); + } + + public void setRecoveryEnabled(boolean recoveryEnabled) { + properties.setProperty("recoveryEnabled", String.valueOf(recoveryEnabled)); + } + + public void setRecoverySleepTime(long recoverySleepTime) { + properties.setProperty("recoverySleepTime", String.valueOf(recoverySleepTime)); + } + /** * @deprecated use getPort() @@ -348,6 +361,13 @@ public class McastService implements MembershipService,MembershipListener { ttl, soTimeout, this); + boolean recEnabled = Boolean.getBoolean(properties.getProperty("recoveryEnabled","true")); + impl.setRecoveryEnabled(recEnabled); + int recCnt = Integer.parseInt(properties.getProperty("recoveryCounter","10")); + impl.setRecoveryCounter(recCnt); + long recSlpTime = Long.parseLong(properties.getProperty("recoverySleepTime","5000")); + impl.setRecoverySleepTime(recSlpTime); + impl.start(level); diff --git a/java/org/apache/catalina/tribes/membership/McastServiceImpl.java b/java/org/apache/catalina/tribes/membership/McastServiceImpl.java index 13d15705c..cb81ead7e 100644 --- a/java/org/apache/catalina/tribes/membership/McastServiceImpl.java +++ b/java/org/apache/catalina/tribes/membership/McastServiceImpl.java @@ -21,14 +21,14 @@ package org.apache.catalina.tribes.membership; import java.io.IOException; import java.net.DatagramPacket; import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.MulticastSocket; - -import org.apache.catalina.tribes.MembershipListener; -import java.util.Arrays; import java.net.SocketTimeoutException; -import org.apache.catalina.tribes.Member; +import java.util.Arrays; + import org.apache.catalina.tribes.Channel; -import java.net.InetSocketAddress; +import org.apache.catalina.tribes.Member; +import org.apache.catalina.tribes.MembershipListener; /** * A membership implementation using simple multicast. @@ -126,6 +126,15 @@ public class McastServiceImpl protected int recoveryCounter = 10; /** + * The time the recovery thread sleeps between recovery attempts + */ + protected long recoverySleepTime = 5000; + + /** + * Add the ability to turn on/off recovery + */ + protected boolean recoveryEnabled = true; + /** * Create a new mcast service impl * @param member - the local member * @param sendFrequency - the time (ms) in between pings sent out @@ -169,7 +178,7 @@ public class McastServiceImpl receivePacket.setPort(port); member.setCommand(new byte[0]); member.getData(true, true); - membership = new Membership(member); + if ( membership == null ) membership = new Membership(member); } protected void setupSocket() throws IOException { @@ -365,6 +374,17 @@ public class McastServiceImpl return this.serviceStartTime; } + public int getRecoveryCounter() { + return recoveryCounter; + } + + public boolean isRecoveryEnabled() { + return recoveryEnabled; + } + + public long getRecoverySleepTime() { + return recoverySleepTime; + } public class ReceiverThread extends Thread { int errorCounter = 0; @@ -431,6 +451,7 @@ public class McastServiceImpl public static synchronized boolean init(RecoveryThread t) { if ( running ) return false; + if ( !t.parent.isRecoveryEnabled()) return false; running = true; t.setName("Tribes-MembershipRecovery"); t.setDaemon(true); @@ -470,7 +491,7 @@ public class McastServiceImpl try { if (!success) { log.info("Recovery attempt "+(++attempt)+" failed, trying again in 5 seconds"); - Thread.sleep(5000); + Thread.sleep(parent.recoverySleepTime); } }catch (InterruptedException ignore) { } @@ -480,4 +501,16 @@ public class McastServiceImpl } }//run } + + public void setRecoveryCounter(int recoveryCounter) { + this.recoveryCounter = recoveryCounter; + } + + public void setRecoveryEnabled(boolean recoveryEnabled) { + this.recoveryEnabled = recoveryEnabled; + } + + public void setRecoverySleepTime(long recoverySleepTime) { + this.recoverySleepTime = recoverySleepTime; + } }