Java Mailing List Archive

http://www.junlu.com/

Home » Home (12/2007) » Apache Tomcat »

Re: Tomcat clustering broken - Unable to send message through cluster
sender

Filip Hanik

2007-01-04

Replies:

In TC 5.x.x message senders are removed when a multicast heartbeat is
missed.
so if your sender is null, then most likely your multicasting has a few
hickups.

in TC6 there is a safeguard against multicast failures using the TCP
failure detector.

Filip

Spurlock, Robert J wrote:
> All,
> We've had Tomcat clustering working in test and production for months.
> We run on HP UX 11.11.
> We recently upgraded the OS and I think Tomcat clustering quit working
> at that point.
> I'm not sure of the OS connection but the session data is not being
> replicated throughout the cluster.
>
> We are running Tomcat 5.0.28.
>
> Apparently clustering is failing at
> ReplicationTransmitter.sendMessageData() on a null sender.
>
> My question is what are the likely causes of the sender not being
> available? Is there a way to pickup additional logging that might
> indicate why the sender is not available?
>
> Are there any known Tomcat clustering bugs or problems related to HP UX
> 11.11 versions?
>
> How should I debug this problem?
>
> Some things I've tried:
> 1. Completely rebuilt the Tomcat environment in test and still got the
> same SEVERE error.
> 2. Changed all the multicast port and TCP port stuff and it still did
> not work.
> 3. Switched from using the
> org.apache.catalina.cluster.session.SimpleTcpReplicationManager to
> org.apache.catalina.cluster.session.DeltaManager but that didn't help
> either.
>
> Thanks,
> Jack
>
>
>
> Reference
>
> problem:
> Dec 16, 2006 12:52:22 PM
> org.apache.catalina.cluster.tcp.SimpleTcpCluster send
> SEVERE: Unable to send message through cluster sender.
> java.io.IOException: Sender not available. Make sure sender information
> is available to the ReplicationTransmitter.
>      at
> org.apache.catalina.cluster.tcp.ReplicationTransmitter.sendMessageData(R
> eplicationTransmitter.java:112)
>      at
> org.apache.catalina.cluster.tcp.ReplicationTransmitter.sendMessage(Repli
> cationTransmitter.java:136)
>      at
> org.apache.catalina.cluster.tcp.SimpleTcpCluster.send(SimpleTcpCluster.j
> ava:457)
>      at
> org.apache.catalina.cluster.session.SimpleTcpReplicationManager.messageR
> eceived(SimpleTcpReplicationManager.java:539)
>      at
> org.apache.catalina.cluster.session.SimpleTcpReplicationManager.messageD
> ataReceived(SimpleTcpReplicationManager.java:593)
>      at
> org.apache.catalina.cluster.tcp.SimpleTcpCluster.messageDataReceived(Sim
> pleTcpCluster.java:576)
>      at
> org.apache.catalina.cluster.io.ObjectReader.execute (ObjectReader.java:70
> )
>      at
> org.apache.catalina.cluster.tcp.TcpReplicationThread.drainChannel(TcpRep
> licationThread.java:129)
>      at
> org.apache.catalina.cluster.tcp.TcpReplicationThread.run(TcpReplicationT
> hread.java:67)
> Dec 16, 2006 12:54:11 PM
> org.apache.catalina.cluster.tcp.SimpleTcpCluster memberAdded
> INFO: Replication member
> added:org.apache.catalina.cluster.mcast.McastMember[tcp://192.54.4.16:40
> 09,192.54.4.16,4009, alive=135220]
>
> Here's the Tomcat 5.0.28 code from ReplicationTransmitter.java -
> sendMessageData - line 112 = if ( sender == null ) throw ....
>
> protected void sendMessageData(String sessionId, byte[] data,
> IDataSender sender) throws java.io.IOException {
>      if ( sender == null ) throw new java.io.IOException("Sender not
> available. Make sure sender information is available to the
> ReplicationTransmitter.");
>      try
>      {
>         if (!sender.isConnected())
>           sender.connect();
>         sender.sendMessage(sessionId,data);
>         sender.setSuspect(false);
>         addStats(data.length);
>      }catch ( Exception x)
>      {
>         if ( !sender.getSuspect() ) {
>           log.warn("Unable to send replicated message, is server
> down?", x);
>         }
>         sender.setSuspect(true);
>
>      }
>
> Here's the Tomcat 5.0.28 code from ReplicationTransmitter.java -
> sendMessageData - line 136 = sendMessageData()
>
> public void sendMessage(String sessionId, byte[] indata, Member member)
> throws java.io.IOException
>   {
>      byte[] data = XByteBuffer.createDataPackage(indata);
>      String key = member.getHost()+":"+member.getPort();
>      IDataSender sender = (IDataSender)map.get(key); << sender is
> apparently null at this point
>      sendMessageData(sessionId,data,sender);
>   }
>
> Also get an error like the following when the second server in the
> cluster is starting:
>  2006-12-17 11:18:26,259 ERROR (DeltaManager.java:663) -
> Manager[/toolbox/tasks], No session state received, timing out.
>
> Example cluster configuration from server.xml
>
> Using SimpleTcpReplicationManager in production
>
>      <Cluster
> className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
>
> managerClassName="org.apache.catalina.cluster.session.SimpleTcpReplicati
> onManager"
>            expireSessionsOnShutdown="false"
>            name="clusterProd"
>            useDirtyFlag="false">
>
>         <Membership
>
> className="org.apache.catalina.cluster.mcast.McastService"
>           mcastAddr="228.0.0.5"
>           mcastPort="45565"
>           mcastFrequency="500"
>           mcastDropTime="3000"/>
>
>         <Receiver
>
> className="org.apache.catalina.cluster.tcp.ReplicationListener"
>           tcpListenAddress="auto"
>           tcpListenPort="4005"
>           tcpSelectorTimeout="100"
>           tcpThreadCount="6"/>
>
>         <Sender
>
> className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
>           replicationMode="asynchronous"/>
>
>         <Valve
> className="org.apache.catalina.cluster.tcp.ReplicationValve"
>
> filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>
>
>         <Deployer
> className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
>               tempDir="/tmp/war-temp/"
>               deployDir="/tmp/war-deploy/"
>               watchDir="/tmp/war-listen/"
>               watchEnabled="false"/>
>      </Cluster>
>
>
>
> OR - using DeltaManager in test
>
>      <Cluster
> className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
>
> managerClassName="org.apache.catalina.cluster.session.DeltaManager"
>            expireSessionsOnShutdown="false"
>            useDirtyFlag="true">
>
>         <Membership
>
> className="org.apache.catalina.cluster.mcast.McastService"
>           mcastAddr="228.0.1.9"
>           mcastPort="45579"
>           mcastFrequency="500"
>           mcastDropTime="3000"/>
>
>         <Receiver
>
> className="org.apache.catalina.cluster.tcp.ReplicationListener"
>           tcpListenAddress="auto"
>           tcpListenPort="4109"
>           tcpSelectorTimeout="100"
>           tcpThreadCount="6"/>
>
>         <Sender
>
> className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
>           replicationMode="asynchronous"/>
>
>         <Valve
> className="org.apache.catalina.cluster.tcp.ReplicationValve"
>
> filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>
>
>         <Deployer
> className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
>               tempDir="/tmp/war-temp/"
>               deployDir="/tmp/war-deploy/"
>               watchDir="/tmp/war-listen/"
>               watchEnabled="false"/>
>      </Cluster>
>
>
> ---------------------------------------------------------------------
> To start a new topic, e-mail: users@(protected)
> To unsubscribe, e-mail: users-unsubscribe@(protected)
> For additional commands, e-mail: users-help@(protected)
>
>
>
>  


---------------------------------------------------------------------
To start a new topic, e-mail: users@(protected)
To unsubscribe, e-mail: users-unsubscribe@(protected)
For additional commands, e-mail: users-help@(protected)

©2008 junlu.com - Jax Systems, LLC, U.S.A.