Author: jfclere Date: Fri Oct 9 16:00:20 2009 New Revision: 823603 URL: http://svn.apache.org/viewvc?rev=823603&view=rev Log: Add a local bind otherwise for box with multi IP httpd may use the wrong port.
Modified: tomcat/trunk/java/org/apache/catalina/ha/backend/CollectedInfo.java tomcat/trunk/java/org/apache/catalina/ha/backend/HeartbeatListener.java tomcat/trunk/java/org/apache/catalina/ha/backend/MultiCastSender.java tomcat/trunk/java/org/apache/catalina/ha/backend/TcpSender.java Modified: tomcat/trunk/java/org/apache/catalina/ha/backend/CollectedInfo.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/backend/CollectedInfo.java?rev=823603&r1=823602&r2=823603&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/backend/CollectedInfo.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/backend/CollectedInfo.java Fri Oct 9 16:00:20 2009 @@ -44,11 +44,15 @@ int ready; int busy; + int port = 0; + String host = null; + public CollectedInfo(String host, int port) throws Exception { init(host, port); } public void init(String host, int port) throws Exception { - String sport = Integer.toString(port); + int iport = 0; + String shost = null; mBeanServer = Registry.getRegistry(null, null).getMBeanServer(); String onStr = "*:type=ThreadPool,*"; ObjectName objectName = new ObjectName(onStr); @@ -58,24 +62,29 @@ ObjectInstance oi = iterator.next(); objName = oi.getObjectName(); String name = objName.getKeyProperty("name"); + /* Name are: * http-8080 * jk-10.33.144.3-8009 * jk-jfcpc%2F10.33.144.3-8009 */ + String [] elenames = name.split("-"); + String sport = elenames[elenames.length-1]; + iport = Integer.parseInt(sport); + String [] shosts = elenames[1].split("%2F"); + shost = shosts[0]; + if (port==0 && host==null) break; /* Take the first one */ - String [] elenames = name.split("-"); - if (elenames[elenames.length-1].compareTo(sport) != 0) - continue; /* port doesn't match */ - if (host==null) + if (host==null && iport==port) break; /* Only port done */ - String [] shosts = elenames[1].split("%2F"); - if (shosts[0].compareTo(host) == 0) + if (shost.compareTo(host) == 0) break; /* Done port and host are the expected ones */ } if (objName == null) - throw(new Exception("Can't find connector for " + host + ":" + sport)); + throw(new Exception("Can't find connector for " + host + ":" + port)); + this.port = iport; + this.host = shost; } Modified: tomcat/trunk/java/org/apache/catalina/ha/backend/HeartbeatListener.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/backend/HeartbeatListener.java?rev=823603&r1=823602&r2=823603&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/backend/HeartbeatListener.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/backend/HeartbeatListener.java Fri Oct 9 16:00:20 2009 @@ -85,26 +85,31 @@ sender = new MultiCastSender(); else sender = new TcpSender(); - - try { - sender.init(this); - } catch (Exception ex) { - log.error("Unable to initialize Sender: " + ex); - sender = null; - return; - } } /* Read busy and ready */ if (coll == null) { try { coll = new CollectedInfo(host, port); + this.port = coll.port; + this.host = coll.host; } catch (Exception ex) { log.error("Unable to initialize info collection: " + ex); coll = null; return; } } + + /* Start or restart sender */ + try { + sender.init(this); + } catch (Exception ex) { + log.error("Unable to initialize Sender: " + ex); + sender = null; + return; + } + + /* refresh the connector information and send it */ try { coll.refresh(); } catch (Exception ex) { Modified: tomcat/trunk/java/org/apache/catalina/ha/backend/MultiCastSender.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/backend/MultiCastSender.java?rev=823603&r1=823602&r2=823603&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/backend/MultiCastSender.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/backend/MultiCastSender.java Fri Oct 9 16:00:20 2009 @@ -23,6 +23,7 @@ import java.net.MulticastSocket; import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.DatagramPacket; import java.io.UnsupportedEncodingException; @@ -48,7 +49,13 @@ if (s == null) { try { group = InetAddress.getByName(config.getGroup()); - s = new MulticastSocket(config.getMultiport()); + if (config.host != null) { + InetAddress addr = InetAddress.getByName(config.host); + InetSocketAddress addrs = new InetSocketAddress(addr, config.getMultiport()); + s = new MulticastSocket(addrs); + } else + s = new MulticastSocket(config.getMultiport()); + s.setTimeToLive(config.getTtl()); s.joinGroup(group); } catch (Exception ex) { Modified: tomcat/trunk/java/org/apache/catalina/ha/backend/TcpSender.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/backend/TcpSender.java?rev=823603&r1=823602&r2=823603&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/backend/TcpSender.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/backend/TcpSender.java Fri Oct 9 16:00:20 2009 @@ -27,6 +27,7 @@ import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.InetAddress; +import java.net.InetSocketAddress; import java.net.Socket; import java.util.StringTokenizer; @@ -90,7 +91,16 @@ for (int i = 0; i < connections.length; i++) { if (connections[i] == null) { try { - connections[i] = new Socket(proxies[i].address, proxies[i].port); + if (config.host != null) { + connections[i] = new Socket(); + InetAddress addr = InetAddress.getByName(config.host); + InetSocketAddress addrs = new InetSocketAddress(addr, 0); + connections[i].setReuseAddress(true); + connections[i].bind(addrs); + addrs = new InetSocketAddress(proxies[i].address, proxies[i].port); + connections[i].connect(addrs); + } else + connections[i] = new Socket(proxies[i].address, proxies[i].port); connectionReaders[i] = new BufferedReader(new InputStreamReader(connections[i].getInputStream())); connectionWriters[i] = new BufferedWriter(new OutputStreamWriter(connections[i].getOutputStream())); } catch (Exception ex) { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org