From: fhanik Date: Thu, 18 Jun 2009 17:08:38 +0000 (+0000) Subject: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=47308 X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=9a617b16c583f12901a5ff6924cb3ba4ffb27a5d;p=tomcat7.0 Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=47308 Patch provided by Keiichi Fujino with one change, default is false git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@786165 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 bb774cae4..5417b3e28 100644 --- a/java/org/apache/catalina/tribes/membership/McastService.java +++ b/java/org/apache/catalina/tribes/membership/McastService.java @@ -245,6 +245,9 @@ public class McastService implements MembershipService,MembershipListener,Messag properties.setProperty("recoverySleepTime", String.valueOf(recoverySleepTime)); } + public void setLocalLoopbackDisabled(boolean localLoopbackDisabled) { + properties.setProperty("localLoopbackDisabled",String.valueOf(localLoopbackDisabled)); + } /** * @deprecated use getPort() @@ -383,7 +386,8 @@ public class McastService implements MembershipService,MembershipListener,Messag ttl, soTimeout, this, - this); + this, + Boolean.valueOf(properties.getProperty("localLoopbackDisabled","false")).booleanValue()); String value = properties.getProperty("recoveryEnabled","true"); boolean recEnabled = Boolean.valueOf(value).booleanValue() ; impl.setRecoveryEnabled(recEnabled); diff --git a/java/org/apache/catalina/tribes/membership/McastServiceImpl.java b/java/org/apache/catalina/tribes/membership/McastServiceImpl.java index 11da4d448..f31d28ea2 100644 --- a/java/org/apache/catalina/tribes/membership/McastServiceImpl.java +++ b/java/org/apache/catalina/tribes/membership/McastServiceImpl.java @@ -148,6 +148,11 @@ public class McastServiceImpl protected ExecutorService executor = new ThreadPoolExecutor(0, 2, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue()); /** + * disable/enable local loopback message + */ + protected boolean localLoopbackDisabled = false; + + /** * Create a new mcast service impl * @param member - the local member * @param sendFrequency - the time (ms) in between pings sent out @@ -156,6 +161,7 @@ public class McastServiceImpl * @param bind - the bind address (not sure this is used yet) * @param mcastAddress - the mcast address * @param service - the callback service + * @param disableLoopbackMode - disable loopbackMode * @throws IOException */ public McastServiceImpl( @@ -168,7 +174,8 @@ public class McastServiceImpl int ttl, int soTimeout, MembershipListener service, - MessageListener msgservice) + MessageListener msgservice, + boolean localLoopbackDisabled) throws IOException { this.member = member; this.address = mcastAddress; @@ -180,6 +187,7 @@ public class McastServiceImpl this.service = service; this.msgservice = msgservice; this.sendFrequency = sendFrequency; + this.localLoopbackDisabled = localLoopbackDisabled; init(); } @@ -213,7 +221,7 @@ public class McastServiceImpl } else { socket = new MulticastSocket(port); } - socket.setLoopbackMode(true); //hint that we don't need loop back messages + socket.setLoopbackMode(localLoopbackDisabled); //hint if we want disable loop back(local machine) messages if (mcastBindAddress != null) { if(log.isInfoEnabled()) log.info("Setting multihome multicast interface to:" +mcastBindAddress); diff --git a/webapps/docs/config/cluster-membership.xml b/webapps/docs/config/cluster-membership.xml index 52fb1d069..61c5886d5 100644 --- a/webapps/docs/config/cluster-membership.xml +++ b/webapps/docs/config/cluster-membership.xml @@ -147,6 +147,14 @@ The default is 5000 (5 seconds).

+ + +

+ Membership uses multicast, it will call java.net.MulticastSocket.setLoopbackMode(localLoopbackDisabled). + When localLoopbackDisabled==true multicast messages will not reach other nodes on the same local machine. + The default is false.
+

+