You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Amit Chandel <am...@gmail.com> on 2009/02/27 18:21:58 UTC

making compression work using GzipInterceptor in tomcat cluster

I have been able to set up a working tomcat cluster with 2 physically
separate tomcat instances (IP: 172.17.1.102 and 172.17.1.103) with tomcat
version 6.0.10, using following config (showing just one here, the other one
is similar instead the jvmRoute and Receiver address attribute):

 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
              channelSendOptions="10">
          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>
          <Channel
className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership
className="org.apache.catalina.tribes.membership.McastService"
                        address="224.0.0.3"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver
className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="172.17.1.102"
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>
            <Sender
className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport
className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor
className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor
className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.txt;.*\.css"/>
          <Valve
className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
          <ClusterListener
className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
          <ClusterListener
className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>
           <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
          </Host>
    </Engine>

I am using Apche 2.2 and mod_jk 1.2.27 (for load balancing and session
affinity).
This works great, and sessions are replicated nicely,  but I now want to add
compression of data while its being sent for session replication.

I tried adding the interceptor  <Interceptor
className="org.apache.catalina.tribes.group.interceptors.GzipInterceptor" />
between the TcpFailureDetector, and MessageDispatch15Interceptor under the
<Channel> node.
But I am getting the follwing error on both the instances:
Feb 27, 2009 11:37:58 AM org.apache.catalina.tribes.io.BufferPool
getBufferPool
INFO: Created a buffer pool with max size:104857600 bytes of
type:org.apache.catalina.tribes.io.BufferPool15Impl
Feb 27, 2009 11:37:58 AM
org.apache.catalina.tribes.group.interceptors.GzipInterceptor
messageReceived
SEVERE: Unable to decompress byte contents
java.io.IOException: Not in GZIP format
        at
java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:132)
        at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:58)
        at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:68)
        at
org.apache.catalina.tribes.group.interceptors.GzipInterceptor.decompress(GzipInterceptor.java:83)
        at
org.apache.catalina.tribes.group.interceptors.GzipInterceptor.messageReceived(GzipInterceptor.java:57)
        at
org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:79)
        at
org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:79)
        at
org.apache.catalina.tribes.group.ChannelCoordinator.messageReceived(ChannelCoordinator.java:243)
        at
org.apache.catalina.tribes.transport.ReceiverBase.messageDataReceived(ReceiverBase.java:226)
        at
org.apache.catalina.tribes.transport.nio.NioReplicationTask.drainChannel(NioReplicationTask.java:185)
        at
org.apache.catalina.tribes.transport.nio.NioReplicationTask.run(NioReplicationTask.java:88)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
        at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
        at java.lang.Thread.run(Thread.java:595)
Feb 27, 2009 11:37:59 AM org.apache.catalina.ha.tcp.SimpleTcpCluster
memberAdded
INFO: Replication member
added:org.apache.catalina.tribes.membership.MemberImpl[tcp://
172.17.1.103:4000,172.17.1.103,4000, alive=1010,id={-112 -66 -20 -50 7 121
 75 126 -103 -85 -56 55 21 -112 36 88 }, payload={}, command={}, domain={},
]

I guess, this means the Sender is not sending the compressed data, but the
receiver is assuming compressed data, and trying to decompress it, and
erroring. The tomcat instances don't bail out and die after this error, but
there is no session replication.

I tried adding the attribute compress="true" in the <Sender> node (as listed
in tomcat 5.5 docs), but it also didn't work.

Please let me know what I am missing here?

Thanks,
- Amit

Re: making compression work using GzipInterceptor in tomcat cluster

Posted by Filip Hanik - Dev Lists <de...@hanik.com>.
hi Amit, I will take a look

Filip

Amit Chandel wrote:
> I have been able to set up a working tomcat cluster with 2 physically
> separate tomcat instances (IP: 172.17.1.102 and 172.17.1.103) with tomcat
> version 6.0.10, using following config (showing just one here, the other one
> is similar instead the jvmRoute and Receiver address attribute):
>
>  <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
>       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
>               channelSendOptions="10">
>           <Manager className="org.apache.catalina.ha.session.DeltaManager"
>                    expireSessionsOnShutdown="false"
>                    notifyListenersOnReplication="true"/>
>           <Channel
> className="org.apache.catalina.tribes.group.GroupChannel">
>             <Membership
> className="org.apache.catalina.tribes.membership.McastService"
>                         address="224.0.0.3"
>                         port="45564"
>                         frequency="500"
>                         dropTime="3000"/>
>             <Receiver
> className="org.apache.catalina.tribes.transport.nio.NioReceiver"
>                       address="172.17.1.102"
>                       port="4000"
>                       autoBind="100"
>                       selectorTimeout="5000"
>                       maxThreads="6"/>
>             <Sender
> className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
>               <Transport
> className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
>             </Sender>
>             <Interceptor
> className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
>             <Interceptor
> className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
>           </Channel>
>
>           <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
>                  filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.txt;.*\.css"/>
>           <Valve
> className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
>           <ClusterListener
> className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
>           <ClusterListener
> className="org.apache.catalina.ha.session.ClusterSessionListener"/>
>         </Cluster>
>            <Host name="localhost"  appBase="webapps"
>             unpackWARs="true" autoDeploy="true"
>             xmlValidation="false" xmlNamespaceAware="false">
>           </Host>
>     </Engine>
>
> I am using Apche 2.2 and mod_jk 1.2.27 (for load balancing and session
> affinity).
> This works great, and sessions are replicated nicely,  but I now want to add
> compression of data while its being sent for session replication.
>
> I tried adding the interceptor  <Interceptor
> className="org.apache.catalina.tribes.group.interceptors.GzipInterceptor" />
> between the TcpFailureDetector, and MessageDispatch15Interceptor under the
> <Channel> node.
> But I am getting the follwing error on both the instances:
> Feb 27, 2009 11:37:58 AM org.apache.catalina.tribes.io.BufferPool
> getBufferPool
> INFO: Created a buffer pool with max size:104857600 bytes of
> type:org.apache.catalina.tribes.io.BufferPool15Impl
> Feb 27, 2009 11:37:58 AM
> org.apache.catalina.tribes.group.interceptors.GzipInterceptor
> messageReceived
> SEVERE: Unable to decompress byte contents
> java.io.IOException: Not in GZIP format
>         at
> java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:132)
>         at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:58)
>         at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:68)
>         at
> org.apache.catalina.tribes.group.interceptors.GzipInterceptor.decompress(GzipInterceptor.java:83)
>         at
> org.apache.catalina.tribes.group.interceptors.GzipInterceptor.messageReceived(GzipInterceptor.java:57)
>         at
> org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:79)
>         at
> org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:79)
>         at
> org.apache.catalina.tribes.group.ChannelCoordinator.messageReceived(ChannelCoordinator.java:243)
>         at
> org.apache.catalina.tribes.transport.ReceiverBase.messageDataReceived(ReceiverBase.java:226)
>         at
> org.apache.catalina.tribes.transport.nio.NioReplicationTask.drainChannel(NioReplicationTask.java:185)
>         at
> org.apache.catalina.tribes.transport.nio.NioReplicationTask.run(NioReplicationTask.java:88)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>         at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>         at java.lang.Thread.run(Thread.java:595)
> Feb 27, 2009 11:37:59 AM org.apache.catalina.ha.tcp.SimpleTcpCluster
> memberAdded
> INFO: Replication member
> added:org.apache.catalina.tribes.membership.MemberImpl[tcp://
> 172.17.1.103:4000,172.17.1.103,4000, alive=1010,id={-112 -66 -20 -50 7 121
>  75 126 -103 -85 -56 55 21 -112 36 88 }, payload={}, command={}, domain={},
> ]
>
> I guess, this means the Sender is not sending the compressed data, but the
> receiver is assuming compressed data, and trying to decompress it, and
> erroring. The tomcat instances don't bail out and die after this error, but
> there is no session replication.
>
> I tried adding the attribute compress="true" in the <Sender> node (as listed
> in tomcat 5.5 docs), but it also didn't work.
>
> Please let me know what I am missing here?
>
> Thanks,
> - Amit
>
>   


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