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.
+
+