Author: fhanik
Date: Tue Feb 28 17:25:07 2006
New Revision: 381861

URL: http://svn.apache.org/viewcvs?rev=381861&view=rev
Log:
Simple modifications, got rid of the SocketSender class, it aint doing nothing 

Removed:
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/SocketSender.java
Modified:
    tomcat/container/tc5.5.x/modules/groupcom/etc/cluster-server.xml
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/DataSender.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/IDataSender.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSocketSender.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationListener.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationTransmitter.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/TcpReplicationThread.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ThreadPool.java
    tomcat/container/tc5.5.x/modules/ha/etc/cluster-server.xml

Modified: tomcat/container/tc5.5.x/modules/groupcom/etc/cluster-server.xml
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/etc/cluster-server.xml?rev=381861&r1=381860&r2=381861&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/etc/cluster-server.xml (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/etc/cluster-server.xml Tue Feb 28 
17:25:07 2006
@@ -1,4 +1,4 @@
-<!-- Example Server Configuration File  - Search for Cluster-->
+<!-- Example Server Configuration File -->
 <!-- Note that component elements are nested corresponding to their
      parent-child relationships with each other -->
 
@@ -10,21 +10,15 @@
      define subcomponents such as "Valves" or "Loggers" at this level.
  -->
 
-<Server port="8005" shutdown="SHUTDOWN" debug="0">
+<Server port="7005" shutdown="SHUTDOWN">
 
+  <!-- Comment these entries out to disable JMX MBeans support used for the 
+       administration web application -->
+  <Listener className="org.apache.catalina.core.AprLifecycleListener" />
+  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
+  <Listener 
className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
+  <Listener 
className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
 
-  <!-- Comment these entries out to disable JMX MBeans support -->
-  <!-- You may also configure custom components (e.g. Valves/Realms) by 
-       including your own mbean-descriptor file(s), and setting the 
-       "descriptors" attribute to point to a ';' seperated list of paths
-       (in the ClassLoader sense) of files to add to the default list.
-       e.g. descriptors="/com/myfirm/mypackage/mbean-descriptor.xml"
-  -->
-  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"
-            debug="0"/>
-  <Listener 
className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"
-            debug="0"/>
-  
   <!-- Global JNDI resources -->
   <GlobalNamingResources>
 
@@ -35,18 +29,9 @@
          UserDatabaseRealm to authenticate users -->
     <Resource name="UserDatabase" auth="Container"
               type="org.apache.catalina.UserDatabase"
-       description="User database that can be updated and saved">
-    </Resource>
-    <ResourceParams name="UserDatabase">
-      <parameter>
-        <name>factory</name>
-        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
-      </parameter>
-      <parameter>
-        <name>pathname</name>
-        <value>conf/tomcat-users.xml</value>
-      </parameter>
-    </ResourceParams>
+       description="User database that can be updated and saved"
+           factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
+          pathname="conf/tomcat-users.xml" />
 
   </GlobalNamingResources>
 
@@ -60,7 +45,7 @@
    -->
 
   <!-- Define the Tomcat Stand-Alone Service -->
-  <Service name="Tomcat-Standalone">
+  <Service name="Catalina">
 
     <!-- A "Connector" represents an endpoint by which requests are received
          and responses are returned.  Each Connector passes requests on to the
@@ -88,40 +73,41 @@
          IP address of the remote client.
     -->
 
-    <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
-    <Connector className="org.apache.coyote.tomcat5.CoyoteConnector"
-               port="8080" minProcessors="5" maxProcessors="100"
-               enableLookups="true" redirectPort="8443" acceptCount="100"
-               debug="0" connectionTimeout="20000" 
-               disableUploadTimeout="true" />
+    <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
+    <Connector port="7080" maxHttpHeaderSize="8192"
+               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
+               enableLookups="false" redirectPort="8443" acceptCount="100"
+               connectionTimeout="20000" disableUploadTimeout="true" />
     <!-- Note : To disable connection timeouts, set connectionTimeout value
-     to -1 -->
+     to 0 -->
+       
+       <!-- Note : To use gzip compression you could set the following 
properties :
+       
+                          compression="on" 
+                          compressionMinSize="2048" 
+                          noCompressionUserAgents="gozilla, traviata" 
+                          compressableMimeType="text/html,text/xml"
+       -->
 
-    <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
+    <!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
     <!--
-    <Connector className="org.apache.coyote.tomcat5.CoyoteConnector"
-               port="8443" minProcessors="5" maxProcessors="75"
-               enableLookups="true" disableUploadTimeout="true"
-           acceptCount="100" debug="0" scheme="https" secure="true">
-      <Factory className="org.apache.coyote.tomcat5.CoyoteServerSocketFactory"
-               clientAuth="false" protocol="TLS" />
-    </Connector>
+    <Connector port="8443" maxHttpHeaderSize="8192"
+               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
+               enableLookups="false" disableUploadTimeout="true"
+               acceptCount="100" scheme="https" secure="true"
+               clientAuth="false" sslProtocol="TLS" />
     -->
 
-    <!-- Define a Coyote/JK2 AJP 1.3 Connector on port 8009 -->
-    <Connector className="org.apache.coyote.tomcat5.CoyoteConnector"
-               port="8009" minProcessors="5" maxProcessors="75"
-               enableLookups="true" redirectPort="8443"
-               acceptCount="10" debug="0"
-               
protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>
+    <!-- Define an AJP 1.3 Connector on port 8009 -->
+    <Connector port="7009" 
+               enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
 
     <!-- Define a Proxied HTTP/1.1 Connector on port 8082 -->
     <!-- See proxy documentation for more information about using this. -->
     <!--
-    <Connector className="org.apache.coyote.tomcat5.CoyoteConnector"
-               port="8082" minProcessors="5" maxProcessors="75"
-               enableLookups="true"
-               acceptCount="100" debug="0" connectionTimeout="20000"
+    <Connector port="7082" 
+               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
+               enableLookups="false" acceptCount="100" 
connectionTimeout="20000"
                proxyPort="80" disableUploadTimeout="true" />
     -->
 
@@ -130,12 +116,12 @@
          analyzes the HTTP headers included with the request, and passes them
          on to the appropriate Host (virtual host). -->
 
-    <!-- You should set jvmRoute to support load-balancing via JK/JK2 ie :
-    <Engine name="Standalone" defaultHost="localhost" debug="0" 
jmvRoute="jvm1">         
+    <!-- You should set jvmRoute to support load-balancing via AJP ie :
+    <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">         
     --> 
          
     <!-- Define the top level container in our container hierarchy -->
-    <Engine name="Standalone" defaultHost="localhost" debug="0">
+    <Engine name="Catalina" defaultHost="localhost">
 
       <!-- The request dumper valve dumps useful debugging information about
            the request headers and cookies that were received, and the response
@@ -155,11 +141,6 @@
       <Valve className="org.apache.catalina.valves.RequestDumperValve"/>
       -->
 
-      <!-- Global logger unless overridden at lower levels -->
-      <Logger className="org.apache.catalina.logger.FileLogger"
-              prefix="catalina_log." suffix=".txt"
-              timestamp="true"/>
-
       <!-- Because this Realm is here, an instance will be shared globally -->
 
       <!-- This Realm uses the UserDatabase configured in the global JNDI
@@ -167,7 +148,7 @@
            that are performed against this UserDatabase are immediately
            available for use by the Realm.  -->
       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
-                 debug="0" resourceName="UserDatabase"/>
+             resourceName="UserDatabase"/>
 
       <!-- Comment out the old realm but leave here for now in case we
            need to go back quickly -->
@@ -179,7 +160,7 @@
            stored in a database and accessed via JDBC -->
 
       <!--
-      <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
+      <Realm  className="org.apache.catalina.realm.JDBCRealm"
              driverName="org.gjt.mm.mysql.Driver"
           connectionURL="jdbc:mysql://localhost/authority"
          connectionName="test" connectionPassword="test"
@@ -188,7 +169,7 @@
       -->
 
       <!--
-      <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
+      <Realm  className="org.apache.catalina.realm.JDBCRealm"
              driverName="oracle.jdbc.driver.OracleDriver"
           connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL"
          connectionName="scott" connectionPassword="tiger"
@@ -197,38 +178,44 @@
       -->
 
       <!--
-      <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99"
+      <Realm  className="org.apache.catalina.realm.JDBCRealm"
              driverName="sun.jdbc.odbc.JdbcOdbcDriver"
           connectionURL="jdbc:odbc:CATALINA"
               userTable="users" userNameCol="user_name" userCredCol="user_pass"
           userRoleTable="user_roles" roleNameCol="role_name" />
       -->
 
-      <!-- Define the default virtual host -->
-      <Host name="localhost" debug="0" appBase="webapps"
-       unpackWARs="true" autoDeploy="true">
-       
-        
+      <!-- Define the default virtual host
+           Note: XML Schema validation will not work with Xerces 2.2.
+       -->
+      <Host name="localhost" appBase="webapps"
+       unpackWARs="true" autoDeploy="true"
+       xmlValidation="false" xmlNamespaceAware="false">
+
         <!-- Defines a cluster for this node,
              By defining this element, means that every manager will be 
changed.
              So when running a cluster, only make sure that you have webapps 
in there
              that need to be clustered and remove the other ones.
              A cluster has the following parameters:
-             
+
              className = the fully qualified name of the cluster class
-             
-             name = a descriptive name for your cluster, can be anything
-             
-             debug = the debug level, higher means more output
-             
+
+             clusterName = a descriptive name for your cluster, can be anything
+
              mcastAddr = the multicast address, has to be the same for all the 
nodes
-             
+
              mcastPort = the multicast port, has to be the same for all the 
nodes
              
-             mcastFrequency = the number of milliseconds in between sending a 
"I'm alive" heartbeat
+             mcastBindAddr = bind the multicast socket to a specific address
              
-             mcastDropTime = the number a milliseconds before a node is 
considered "dead" if no heartbeat is received
+             mcastTTL = the multicast TTL if you want to limit your broadcast
              
+             mcastSoTimeout = the multicast readtimeout 
+
+             mcastFrequency = the number of milliseconds in between sending a 
"I'm alive" heartbeat
+
+             mcastDropTime = the number a milliseconds before a node is 
considered "dead" if no heartbeat is received
+
              tcpThreadCount = the number of threads to handle incoming 
replication requests, optimal would be the same amount of threads as nodes 
 
              tcpListenAddress = the listen address (bind address) for TCP 
cluster request on this host, 
@@ -237,7 +224,7 @@
                                 InetAddress.getLocalHost().getHostAddress()
 
              tcpListenPort = the tcp listen port
-             
+
              tcpSelectorTimeout = the timeout (ms) for the Selector.select() 
method in case the OS
                                   has a wakup bug in java.nio. Set to 0 for no 
timeout
 
@@ -247,32 +234,24 @@
 
              useDirtyFlag = true means that we only replicate a session after 
setAttribute,removeAttribute has been called.
                             false means to replicate the session after each 
request.
-                            false means that replication would work for the 
following piece of code:
+                            false means that replication would work for the 
following piece of code: (only for SimpleTcpReplicationManager)
                             <%
-                            HashMap map = new HashMap();
-                            session.setAttribute("map",map);
+                            HashMap map = (HashMap)session.getAttribute("map");
                             map.put("key","value");
                             %>
+             replicationMode = can be either 'pooled', 'synchronous' or 
'asynchronous'.
+                               * Pooled means that the replication happens 
using several sockets in a synchronous way. Ie, the data gets replicated, then 
the request return. This is the same as the 'synchronous' setting except it 
uses a pool of sockets, hence it is multithreaded. This is the fastest and 
safest configuration. To use this, also increase the nr of tcp threads that you 
have dealing with replication.
+                               * Synchronous means that the thread that 
executes the request, is also the
+                               thread the replicates the data to the other 
nodes, and will not return until all
+                               nodes have received the information.
+                               * Asynchronous means that there is a specific 
'sender' thread for each cluster node,
+                               so the request thread will queue the 
replication request into a "smart" queue,
+                               and then return to the client.
+                               The "smart" queue is a queue where when a 
session is added to the queue, and the same session
+                               already exists in the queue from a previous 
request, that session will be replaced
+                               in the queue instead of replicating two 
requests. This almost never happens, unless there is a 
+                               large network delay.
         -->             
-             
-            
-        <Cluster  className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
-                  name="FilipsCluster"
-                  debug="10"
-                  serviceclass="org.apache.catalina.cluster.mcast.McastService"
-                  mcastAddr="228.0.0.4"
-                  mcastPort="45564"
-                  mcastFrequency="500"
-                  mcastDropTime="3000"
-                  tcpThreadCount="2"
-                  tcpListenAddress="auto"
-                  tcpListenPort="4001"
-                  tcpSelectorTimeout="100"
-                  printToScreen="false"
-                  expireSessionsOnShutdown="false"
-                  useDirtyFlag="true"
-        />
-        
         <!--
             When configuring for clustering, you also add in a valve to catch 
all the requests
             coming in, at the end of the request, the session may or may not 
be replicated.
@@ -280,38 +259,80 @@
             1. useDirtyFlag is true or setAttribute or removeAttribute has 
been called AND
             2. a session exists (has been created)
             3. the request is not trapped by the "filter" attribute
-            
+
             The filter attribute is to filter out requests that could not 
modify the session,
             hence we don't replicate the session after the end of this request.
             The filter is negative, ie, anything you put in the filter, you 
mean to filter out,
             ie, no replication will be done on requests that match one of the 
filters.
             The filter attribute is delimited by ;, so you can't escape out ; 
even if you wanted to.
-            
+
             filter=".*\.gif;.*\.js;" means that we will not replicate the 
session after requests with the URI
             ending with .gif and .js are intercepted.
+            
+            The deployer element can be used to deploy apps cluster wide.
+            Currently the deployment only deploys/undeploys to working members 
in the cluster
+            so no WARs are copied upons startup of a broken node.
+            The deployer watches a directory (watchDir) for WAR files when 
watchEnabled="true"
+            When a new war file is added the war gets deployed to the local 
instance,
+            and then deployed to the other instances in the cluster.
+            When a war file is deleted from the watchDir the war is undeployed 
locally 
+            and cluster wide
         -->
+        
+        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
+                 managerClassName="org.apache.catalina.ha.session.DeltaManager"
+                 expireSessionsOnShutdown="false"
+                 useDirtyFlag="true"
+                 notifyListenersOnReplication="true">
+
+            <Channel className="org.apache.catalina.tribes.group.GroupChannel">
+                <Membership 
+                    className="org.apache.catalina.tribes.mcast.McastService"
+                    mcastAddr="228.0.0.4"
+                    mcastPort="45564"
+                    mcastFrequency="500"
+                    mcastDropTime="3000"/>
+
+                <Receiver 
+                    
className="org.apache.catalina.tribes.tcp.ReplicationListener"
+                    tcpListenAddress="auto"
+                    tcpListenPort="4001"
+                    tcpSelectorTimeout="100"
+                    tcpThreadCount="6"
+                    sendAck="true"
+                    synchronized="true"
+                    rxBufSize="4096"
+                    txBufSize="128"/>
+
+                <Sender
+                    
className="org.apache.catalina.tribes.tcp.ReplicationTransmitter"
+                    replicationMode="pooled"
+                    ackTimeout="15000"
+                    waitForAck="true"
+                    rxBufSize="4096"
+                    txBufSize="128"/>
+                    
+                <!--
+                <Interceptor 
className="org.apache.catalina.tribes.group.interceptors.GzipInterceptor"/>
+                <Interceptor 
className="org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor"/>
+                <Interceptor 
className="org.apache.catalina.tribes.group.interceptors.OrderInterceptor"/>
+                -->
+            </Channel>
             
-        <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
-               filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>
+            <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
+                   
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
+                   
+            <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
+                      tempDir="/tmp/war-temp/"
+                      deployDir="/tmp/war-deploy/"
+                      watchDir="/tmp/war-listen/"
+                      watchEnabled="false"/>
+                      
+            <ClusterListener 
className="org.apache.catalina.ha.session.ClusterSessionListener"/>
+        </Cluster>
+    
 
-      <!-- Add the following attributes if you want to turn XML validation
-           on. Remember to comment the Host element above. 
-           
-           Note: XML Schema validationn will works with Xerces 2.0.1 or 
-           Xerces 2.1. Xerces 2.0.2 and Xerces 2.2 have bugs that prevent 
-           their use with Tomcat-->
-      <!--
-      <Host name="localhost" debug="0" appBase="webapps"
-       unpackWARs="true" autoDeploy="true"
-       xmlValidation="true" xmlNamespaceAware="true">
-      -->
 
-        <!-- Uncomment this to cluster this host using JavaGroups. The
-             protocol attribute can be used to configure the JavaGroups
-             network stack (the defaults are used if it's not specified). -->
-        <!--
-        <Cluster className="org.apache.catalina.cluster.JGCluster"/>
-        -->
 
         <!-- Normally, users must authenticate themselves to each web app
              individually.  Uncomment the following entry if you would like
@@ -320,10 +341,9 @@
              user identity maintained across *all* web applications contained
              in this virtual host. -->
         <!--
-        <Valve className="org.apache.catalina.authenticator.SingleSignOn"
-                   debug="0"/>
+        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
         -->
-        
+
         <!-- Access log processes all requests for this virtual host.  By
              default, log files are created in the "logs" directory relative to
              $CATALINA_HOME.  If you wish, you can specify a different
@@ -336,28 +356,35 @@
                  pattern="common" resolveHosts="false"/>
         -->
 
-        <!-- Logger shared by all Contexts related to this virtual host.  By
-             default (when using FileLogger), log files are created in the 
"logs"
-             directory relative to $CATALINA_HOME.  If you wish, you can 
specify
-             a different directory with the "directory" attribute.  Specify 
either a
-             relative (to $CATALINA_HOME) or absolute path to the desired
-             directory.-->
-        <Logger className="org.apache.catalina.logger.FileLogger"
-                 directory="logs"  prefix="localhost_log." suffix=".txt"
-            timestamp="true"/>
-
-        <!-- Define properties for each web application.  This is only needed
-             if you want to set non-default properties, or have web application
-             document roots in places other than the virtual host's appBase
-             directory.  -->
+        <!-- Access log processes all requests for this virtual host.  By
+             default, log files are created in the "logs" directory relative to
+             $CATALINA_HOME.  If you wish, you can specify a different
+             directory with the "directory" attribute.  Specify either a 
relative
+             (to $CATALINA_HOME) or absolute path to the desired directory.
+             This access log implementation is optimized for maximum 
performance,
+             but is hardcoded to support only the "common" and "combined" 
patterns.
+        -->
+        <!--
+        <Valve className="org.apache.catalina.valves.FastCommonAccessLogValve"
+                 directory="logs"  prefix="localhost_access_log." suffix=".txt"
+                 pattern="common" resolveHosts="false"/>
+        -->
+        <!-- Access log processes all requests for this virtual host.  By
+             default, log files are created in the "logs" directory relative to
+             $CATALINA_HOME.  If you wish, you can specify a different
+             directory with the "directory" attribute.  Specify either a 
relative
+             (to $CATALINA_HOME) or absolute path to the desired directory.
+             This access log implementation is optimized for maximum 
performance,
+             but is hardcoded to support only the "common" and "combined" 
patterns.
 
-        <!-- Tomcat Root Context -->
+             This valve use NIO direct Byte Buffer to asynchornously store the
+             log.
+        -->
         <!--
-        <Context path="/reptest" docBase="reptest" debug="0">
-            
-        </Context>
+        <Valve className="org.apache.catalina.valves.ByteBufferAccessLogValve"
+                 directory="logs"  prefix="localhost_access_log." suffix=".txt"
+                 pattern="common" resolveHosts="false"/>
         -->
-        
 
       </Host>
 

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/DataSender.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/DataSender.java?rev=381861&r1=381860&r2=381861&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/DataSender.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/DataSender.java
 Tue Feb 28 17:25:07 2006
@@ -213,7 +213,9 @@
      * After failure make a resend
      */
     private boolean resend = false ;
-    
+    private int rxBufSize = 1024;
+    private int txBufSize = 4096;
+
     // ------------------------------------------------------------- 
Constructor
     
     public DataSender(String domain,InetAddress host, int port) {
@@ -228,6 +230,12 @@
         this(domain,host,port);
         if ( state != null ) this.senderState = state;
     }
+    public DataSender(String domain,InetAddress host, int port, SenderState 
state, int rxBufSize, int txBufSize) {
+        this(domain,host,port,state);
+        this.rxBufSize = rxBufSize;
+        this.txBufSize = txBufSize;
+    }
+
     // ------------------------------------------------------------- Properties
 
     /**
@@ -550,12 +558,29 @@
         return senderState;
     }
 
+    public int getRxBufSize() {
+        return rxBufSize;
+    }
+
+    public int getTxBufSize() {
+        return txBufSize;
+    }
+
     /**
      * @param socket The socket to set.
      */
     public void setSocket(Socket socket) {
         this.socket = socket;
     }
+
+    public void setRxBufSize(int rxBufSize) {
+        this.rxBufSize = rxBufSize;
+    }
+
+    public void setTxBufSize(int txBufSize) {
+        this.txBufSize = txBufSize;
+    }
+
     // --------------------------------------------------------- Public Methods
 
     /**
@@ -685,10 +710,11 @@
             if (log.isDebugEnabled())
                 log.debug(sm.getString("IDataSender.openSocket", 
address.getHostAddress(), new Integer(port),new Long(socketOpenCounter)));
       } catch (IOException ex1) {
-            socketOpenFailureCounter++ ;
-            if (log.isDebugEnabled())
-                
log.debug(sm.getString("IDataSender.openSocket.failure",address.getHostAddress(),
 new Integer(port),new Long(socketOpenFailureCounter)), ex1);
-            throw ex1;
+          getSenderState().setSuspect();
+          socketOpenFailureCounter++ ;
+          if (log.isDebugEnabled())
+              
log.debug(sm.getString("IDataSender.openSocket.failure",address.getHostAddress(),
 new Integer(port),new Long(socketOpenFailureCounter)), ex1);
+          throw ex1;
         }
         
      }
@@ -699,6 +725,8 @@
      */
     protected void createSocket() throws IOException, SocketException {
         socket = new Socket(getAddress(), getPort());
+        socket.setSendBufferSize(getTxBufSize());
+        socket.setReceiveBufferSize(getRxBufSize());
         this.socketout = socket.getOutputStream();
     }
 

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/IDataSender.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/IDataSender.java?rev=381861&r1=381860&r2=381861&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/IDataSender.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/IDataSender.java
 Tue Feb 28 17:25:07 2006
@@ -44,5 +44,7 @@
     public boolean checkKeepAlive();
     public String getDomain() ;
     public void setDomain(String domain) ;
+    public void setRxBufSize(int size);
+    public void setTxBufSize(int size);
 
 }

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSocketSender.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSocketSender.java?rev=381861&r1=381860&r2=381861&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSocketSender.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/PooledSocketSender.java
 Tue Feb 28 17:25:07 2006
@@ -19,7 +19,6 @@
 import java.io.IOException;
 import java.net.InetAddress;
 import java.util.LinkedList;
-import org.apache.catalina.tribes.io.*;
 import org.apache.catalina.tribes.ChannelMessage;
 
 /**
@@ -106,7 +105,7 @@
     }
 
     /**
-     * send message and use a pool of SocketSenders
+     * send message and use a pool of DataSenders
      * 
      * @param messageId Message unique identifier
      * @param data Message data
@@ -120,7 +119,7 @@
                     connect();
             }
         }
-        SocketSender sender = senderQueue.getSender(0);
+        DataSender sender = senderQueue.getSender(0);
         if (sender == null) {
             log.warn(sm.getString("PoolSocketSender.noMoreSender", 
this.getAddress(), new Integer(this.getPort())));
             return;
@@ -187,8 +186,8 @@
             return queue.size();
         }
 
-        public SocketSender getSender(long timeout) {
-            SocketSender sender = null;
+        public DataSender getSender(long timeout) {
+            DataSender sender = null;
             long start = System.currentTimeMillis();
             long delta = 0;
             do {
@@ -197,9 +196,9 @@
                         throw new IllegalStateException(
                                 "Socket pool is closed.");
                     if (queue.size() > 0) {
-                        sender = (SocketSender) queue.removeFirst();
+                        sender = (DataSender) queue.removeFirst();
                     } else if (inuse.size() < limit) {
-                        sender = getNewSocketSender();
+                        sender = getNewDataSender();
                     } else {
                         try {
                             mutex.wait(timeout);
@@ -218,7 +217,7 @@
             return sender;
         }
 
-        public void returnSender(SocketSender sender) {
+        public void returnSender(DataSender sender) {
             //to do
             synchronized (mutex) {
                 queue.add(sender);
@@ -227,18 +226,19 @@
             }
         }
 
-        private SocketSender getNewSocketSender() {
-            //new SocketSender(
-            SocketSender sender = new SocketSender(getDomain(),
-                                                   parent.getAddress(), 
-                                                   parent.getPort(),
-                                                   parent.getSenderState() );
-            sender.setKeepAliveMaxRequestCount(parent
-                    .getKeepAliveMaxRequestCount());
+        private DataSender getNewDataSender() {
+            //new DataSender(
+            DataSender sender = new DataSender(getDomain(),
+                                               parent.getAddress(),
+                                               parent.getPort(),
+                                               parent.getSenderState() );
+            
sender.setKeepAliveMaxRequestCount(parent.getKeepAliveMaxRequestCount());
             sender.setKeepAliveTimeout(parent.getKeepAliveTimeout());
             sender.setAckTimeout(parent.getAckTimeout());
             sender.setWaitForAck(parent.isWaitForAck());
             sender.setResend(parent.isResend());
+            sender.setRxBufSize(parent.getRxBufSize());
+            sender.setTxBufSize(parent.getTxBufSize());
             return sender;
 
         }
@@ -246,11 +246,11 @@
         public void close() {
             synchronized (mutex) {
                 for (int i = 0; i < queue.size(); i++) {
-                    SocketSender sender = (SocketSender) queue.get(i);
+                    DataSender sender = (DataSender) queue.get(i);
                     sender.disconnect();
                 }//for
                 for (int i = 0; i < inuse.size(); i++) {
-                    SocketSender sender = (SocketSender) inuse.get(i);
+                    DataSender sender = (DataSender) inuse.get(i);
                     sender.disconnect();
                 }//for
                 queue.clear();

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationListener.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationListener.java?rev=381861&r1=381860&r2=381861&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationListener.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationListener.java
 Tue Feb 28 17:25:07 2006
@@ -43,11 +43,11 @@
     /**
      * @todo make this configurable
      */
-    public static int BUFFER_RECEIVE_SIZE = XByteBuffer.DEF_SIZE;
+    protected int rxBufSize = XByteBuffer.DEF_SIZE;
     /**
      * We are only sending acks
      */
-    public static int BUFFER_SEND_SIZE = 128;
+    protected int txBufSize = 128;
 
     protected static org.apache.commons.logging.Log log = 
org.apache.commons.logging.LogFactory.getLog(ReplicationListener.class);
 
@@ -123,7 +123,13 @@
      */
     public void start() {
         try {
-            pool = new ThreadPool(tcpThreadCount, TcpReplicationThread.class, 
interestOpsMutex, getWorkerThreadOptions());
+            TcpReplicationThread[] receivers = new 
TcpReplicationThread[tcpThreadCount];
+            for ( int i=0; i<receivers.length; i++ ) {
+                receivers[i] = new TcpReplicationThread();
+                receivers[i].setRxBufSize(getRxBufSize());
+                receivers[i].setOptions(getWorkerThreadOptions());
+            }
+            pool = new ThreadPool(interestOpsMutex, receivers);
         } catch (Exception e) {
             log.error("ThreadPool can initilzed. Listener not started", e);
             return;
@@ -191,8 +197,8 @@
                         ServerSocketChannel server =
                             (ServerSocketChannel) key.channel();
                         SocketChannel channel = server.accept();
-                        
channel.socket().setReceiveBufferSize(BUFFER_RECEIVE_SIZE);
-                        channel.socket().setSendBufferSize(BUFFER_SEND_SIZE);
+                        channel.socket().setReceiveBufferSize(rxBufSize);
+                        channel.socket().setSendBufferSize(txBufSize);
                         Object attach = new ObjectReader(channel, 
selector,this);
                         registerChannel(selector,
                                         channel,
@@ -372,6 +378,14 @@
         return direct;
     }
 
+    public int getRxBufSize() {
+        return rxBufSize;
+    }
+
+    public int getTxBufSize() {
+        return txBufSize;
+    }
+
     public MessageListener getMessageListener() {
         return listener;
     }
@@ -382,6 +396,14 @@
 
     public void setDirect(boolean direct) {
         this.direct = direct;
+    }
+
+    public void setRxBufSize(int rxBufSize) {
+        this.rxBufSize = rxBufSize;
+    }
+
+    public void setTxBufSize(int txBufSize) {
+        this.txBufSize = txBufSize;
     }
 
     public void setSynchronized(boolean sync) {

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationTransmitter.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationTransmitter.java?rev=381861&r1=381860&r2=381861&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationTransmitter.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ReplicationTransmitter.java
 Tue Feb 28 17:25:07 2006
@@ -25,6 +25,7 @@
 import org.apache.catalina.tribes.ChannelMessage;
 import org.apache.catalina.tribes.ChannelSender;
 import org.apache.catalina.tribes.Member;
+import org.apache.catalina.tribes.io.XByteBuffer;
 import org.apache.catalina.tribes.util.IDynamicProperty;
 import org.apache.catalina.util.StringManager;
 import org.apache.tomcat.util.IntrospectionUtils;
@@ -54,6 +55,15 @@
 
     private Map map = new HashMap();
 
+    /**
+     * @todo make this configurable
+     */
+    protected int rxBufSize = XByteBuffer.DEF_SIZE;
+    /**
+     * We are only sending acks
+     */
+    protected int txBufSize = 128;
+
     public ReplicationTransmitter() {
     }
 
@@ -299,14 +309,29 @@
     public int getProcessSenderFrequency() {
         return processSenderFrequency;
     }
-    
+
+    public int getTxBufSize() {
+        return txBufSize;
+    }
+
+    public int getRxBufSize() {
+        return rxBufSize;
+    }
+
     /**
      * @param processSenderFrequency The processSenderFrequency to set.
      */
     public void setProcessSenderFrequency(int processSenderFrequency) {
         this.processSenderFrequency = processSenderFrequency;
     }
-    
+
+    public void setTxBufSize(int txBufSize) {
+        this.txBufSize = txBufSize;
+    }
+
+    public void setRxBufSize(int rxBufSize) {
+        this.rxBufSize = rxBufSize;
+    }
 
     /**
      * @return True if synchronized sender
@@ -511,6 +536,8 @@
                 IDataSender sender = IDataSenderFactory.getIDataSender(
                         replicationMode, member);
                 transferSenderProperty(sender);
+                sender.setRxBufSize(getRxBufSize());
+                sender.setTxBufSize(getTxBufSize());
                 map.put(key, sender);
             }
         } catch (java.io.IOException x) {

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/TcpReplicationThread.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/TcpReplicationThread.java?rev=381861&r1=381860&r2=381861&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/TcpReplicationThread.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/TcpReplicationThread.java
 Tue Feb 28 17:25:07 2006
@@ -46,6 +46,7 @@
         org.apache.commons.logging.LogFactory.getLog( 
TcpReplicationThread.class );
     private ByteBuffer buffer = null;
     private SelectionKey key;
+    private int rxBufSize;
     TcpReplicationThread ()
     {
     }
@@ -54,9 +55,9 @@
     public synchronized void run()
     {
         if ( (getOptions() & OPTION_DIRECT_BUFFER) == OPTION_DIRECT_BUFFER ) {
-            buffer = 
ByteBuffer.allocateDirect(ReplicationListener.BUFFER_RECEIVE_SIZE);
+            buffer = ByteBuffer.allocateDirect(getRxBufSize());
         }else {
-            buffer = ByteBuffer.allocate 
(ReplicationListener.BUFFER_RECEIVE_SIZE);
+            buffer = ByteBuffer.allocate (getRxBufSize());
         }
         while (doRun) {
             try {
@@ -228,5 +229,13 @@
         } catch ( java.io.IOException x ) {
             log.warn("Unable to send ACK back through channel, channel 
disconnected?: "+x.getMessage());
         }
+    }
+
+    public void setRxBufSize(int rxBufSize) {
+        this.rxBufSize = rxBufSize;
+    }
+
+    public int getRxBufSize() {
+        return rxBufSize;
     }
 }

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ThreadPool.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ThreadPool.java?rev=381861&r1=381860&r2=381861&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ThreadPool.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/tcp/ThreadPool.java
 Tue Feb 28 17:25:07 2006
@@ -35,13 +35,27 @@
     Object mutex = new Object();
     Object interestOpsMutex = null;
 
+    ThreadPool (Object interestOpsMutex, WorkerThread[] threads) throws 
Exception {
+        // fill up the pool with worker threads
+        this.interestOpsMutex = interestOpsMutex;
+        for (int i = 0; i < threads.length; i++) {
+            WorkerThread thread = threads[i];
+            thread.setPool(this);
+            thread.setName (thread.getClass().getName()+"[" + (i + 1)+"]");
+            thread.setDaemon(true);
+            thread.setPriority(Thread.MAX_PRIORITY);
+            thread.start();
+            idle.add (thread);
+        }
+    }
+
+
     ThreadPool (int poolSize, Class threadClass, Object interestOpsMutex, int 
threadOptions) throws Exception {
         // fill up the pool with worker threads
         this.interestOpsMutex = interestOpsMutex;
         for (int i = 0; i < poolSize; i++) {
             WorkerThread thread = (WorkerThread)threadClass.newInstance();
             thread.setPool(this);
-
             // set thread name for debugging, start it
             thread.setName (threadClass.getName()+"[" + (i + 1)+"]");
             thread.setDaemon(true);

Modified: tomcat/container/tc5.5.x/modules/ha/etc/cluster-server.xml
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/ha/etc/cluster-server.xml?rev=381861&r1=381860&r2=381861&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/ha/etc/cluster-server.xml (original)
+++ tomcat/container/tc5.5.x/modules/ha/etc/cluster-server.xml Tue Feb 28 
17:25:07 2006
@@ -279,8 +279,8 @@
             and cluster wide
         -->
         
-        <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
-                 
managerClassName="org.apache.catalina.cluster.session.DeltaManager"
+        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
+                 managerClassName="org.apache.catalina.ha.session.DeltaManager"
                  expireSessionsOnShutdown="false"
                  useDirtyFlag="true"
                  notifyListenersOnReplication="true">
@@ -296,31 +296,35 @@
                 <Receiver 
                     
className="org.apache.catalina.tribes.tcp.ReplicationListener"
                     tcpListenAddress="auto"
-                    tcpListenPort="4002"
+                    tcpListenPort="4001"
                     tcpSelectorTimeout="100"
                     tcpThreadCount="6"
                     sendAck="true"
-                    synchronized="true"/>
+                    synchronized="true"
+                    rxBufSize="4096"
+                    txBufSize="128"/>
 
                 <Sender
                     
className="org.apache.catalina.tribes.tcp.ReplicationTransmitter"
                     replicationMode="pooled"
                     ackTimeout="15000"
-                    waitForAck="true"/>
+                    waitForAck="true"
+                    rxBufSize="4096"
+                    txBufSize="128"/>
                     
                 <Interceptor 
className="org.apache.catalina.tribes.group.interceptors.GzipInterceptor"/>
             </Channel>
             
-            <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
+            <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                    
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
                    
-            <Deployer 
className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
+            <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                       tempDir="/tmp/war-temp/"
                       deployDir="/tmp/war-deploy/"
                       watchDir="/tmp/war-listen/"
                       watchEnabled="false"/>
                       
-            <ClusterListener 
className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
+            <ClusterListener 
className="org.apache.catalina.ha.session.ClusterSessionListener"/>
         </Cluster>
     
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to