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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





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

Reply via email to