You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Filip Hanik - Dev Lists <de...@hanik.com> on 2007/01/04 16:23:44 UTC

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

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@tomcat.apache.org
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
>
>
>
>   


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org