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