You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by pe...@apache.org on 2006/10/18 18:37:44 UTC

svn commit: r465293 - in /tomcat/container/tc5.5.x: modules/cluster/src/share/org/apache/catalina/cluster/tcp/ webapps/docs/

Author: pero
Date: Wed Oct 18 09:37:42 2006
New Revision: 465293

URL: http://svn.apache.org/viewvc?view=rev&rev=465293
Log:
Made recovery more robust.

Modified:
    tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/FastAsyncSocketSender.java
    tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/LocalStrings.properties
    tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/mbeans-descriptors.xml
    tomcat/container/tc5.5.x/webapps/docs/changelog.xml

Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/FastAsyncSocketSender.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/FastAsyncSocketSender.java?view=diff&rev=465293&r1=465292&r2=465293
==============================================================================
--- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/FastAsyncSocketSender.java (original)
+++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/FastAsyncSocketSender.java Wed Oct 18 09:37:42 2006
@@ -54,7 +54,7 @@
     /**
      * The descriptive information about this implementation.
      */
-    private static final String info = "FastAsyncSocketSender/3.0";
+    private static final String info = "FastAsyncSocketSender/3.1";
 
     // ----------------------------------------------------- Instance Variables
 
@@ -69,6 +69,16 @@
     private FastQueueThread queueThread = null;
 
     /**
+     * recover timeout ( default 5 secs)
+     */
+    private long recoverTimeout = 5000;
+    
+    /**
+     * number of recover tries
+     */
+    private int recoverCounter = 5;
+
+    /**
      * Count number of queue message
      */
     private long inQueueCounter = 0;
@@ -229,6 +239,40 @@
     }
 
     /**
+     * get current push message recover timeout 
+     * @return current push message recover timeout
+     */
+    public long getRecoverTimeout() {
+        
+        return recoverTimeout;
+    }
+
+    /**
+     * Set recover timeout (default 5000 msec)
+     * @param timeout
+     */
+    public void setRecoverTimeout(long timeout) {
+        recoverTimeout = timeout;
+    }
+
+    /**
+     * get current push message recover counter 
+     * @return current push message recover counter
+     */
+    public int getRecoverCounter() {
+        
+        return recoverCounter;
+    }
+
+    /**
+     * Set recover couner (default 5 )
+     * @param counter
+     */
+    public void setRecoverCounter(int counter) {
+        recoverCounter = counter;
+    }
+
+    /**
      * change active the queue Thread priority 
      * @param threadPriority value must be between MIN and MAX Thread Priority
      * @exception IllegalArgumentException
@@ -465,25 +509,62 @@
         }
 
         /**
-         * @param entry
+         * Push all messages from queue to other nodes. Is revovery configured
+         * make a resends with some waits.
+         * @param entry list of messages
          */
         protected void pushQueuedMessages(LinkObject entry) {
             do {
                 int messagesize = 0;
+                ClusterData data = null ;
                 try {
-                    ClusterData data = (ClusterData) entry.data();
+                    data = (ClusterData) entry.data();
                     messagesize = data.getMessage().length;
                     sender.pushMessage(data);
                 } catch (Exception x) {
-                    log.warn(sm.getString(
-                            "AsyncSocketSender.send.error", entry
+                    long rTimeout = sender.getRecoverTimeout() ;
+                    int rCounter = sender.getRecoverCounter() ;
+                    if(data != null && 
+                       rTimeout > 0 && 
+                       rCounter > 0) {
+                        // wait that network get stabler
+                        int counter = 1;
+                        boolean success = false ;
+                        do {
+                            try {
+                                Thread.sleep(rTimeout*counter);
+                            } catch (Exception sleep) {
+                            }
+                            try {
+                                if(log.isDebugEnabled()) {
+                                    log.debug(sm.getString("AsyncSocketSender.send.recover",
+                                            entry.getKey(),
+                                            new Integer(counter), 
+                                            new Integer(rCounter), new Long(rTimeout))) ;
+                                }
+                                sender.pushMessage(data);
+                                success = true;
+                            } catch (Exception xx) {
+                              counter++; 
+                            }
+                        } while (keepRunning && !success && counter <= rCounter);
+                        
+                        if(!success) {
+                            log.warn(sm.getString(
+                                    "AsyncSocketSender.send.error", entry
                                     .getKey()), x);
-                } finally {
+                        }
+                    } else {
+                        log.warn(sm.getString(
+                                "AsyncSocketSender.send.error", entry
+                                .getKey()), x);
+                    }
+               } finally {
                     outQueueCounter++;
                     decQueuedNrOfBytes(messagesize);
                 }
                 entry = entry.next();
-            } while (entry != null);
+            } while (keepRunning && entry != null);
         }
 
     }

Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/LocalStrings.properties?view=diff&rev=465293&r1=465292&r2=465293
==============================================================================
--- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/LocalStrings.properties (original)
+++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/LocalStrings.properties Wed Oct 18 09:37:42 2006
@@ -2,6 +2,7 @@
 AsyncSocketSender.queue.message=Queue message to [{0}:{1,number,integer}] id=[{2}] size={3}
 AsyncSocketSender.send.error=Unable to asynchronously send session with id=[{0}] - message will be ignored.
 AsyncSocketSender.queue.empty=Queue in sender [{0}:{1,number,integer}] returned null element!
+AsyncSocketSender.send.recover=Recover queued message id=[{0}] after failure and send again ( current counter={1,number,integer}, max counter={2,number,integer}, timeout={3,number,long}) 
 cluster.mbean.register.already=MBean {0} already registered!
 FastAsyncSocketSender.setThreadPriority=[{0}:{1,number,integer}] set priority to {2}
 FastAsyncSocketSender.min.exception=[{0}:{1,number,integer}] new priority {2} < MIN_PRIORITY

Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/mbeans-descriptors.xml
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/mbeans-descriptors.xml?view=diff&rev=465293&r1=465292&r2=465293
==============================================================================
--- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/mbeans-descriptors.xml (original)
+++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/mbeans-descriptors.xml Wed Oct 18 09:37:42 2006
@@ -620,6 +620,12 @@
           description="after send failure make a resend"
 			     is="true"
                  type="boolean" />
+    <attribute   name="recoverTimeout"
+          description="recover Timeout after push message failure (default 5000 msec)"
+                 type="long" />
+    <attribute   name="recoverCounter"
+          description="number of recover tries (default 5)"
+                 type="int" />
     <attribute   name="connected"
                  is="true"
           description="socket connected"

Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?view=diff&rev=465293&r1=465292&r2=465293
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Wed Oct 18 09:37:42 2006
@@ -84,6 +84,14 @@
       </fix>
     </changelog>
   </subsection> 
+  <subsection name="Cluster">
+    <changelog>
+      <add>
+        Add better recovery at FastAsyncQueueSender. Made the startegy more robust for temporary connection problems (pero)
+      </add>
+    </changelog>
+  </subsection>   
+
 </section>
 
 



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


Re: svn commit: r465293 - in /tomcat/container/tc5.5.x: modules/cluster/src/share/org/apache/catalina/cluster/tcp/ webapps/docs/

Posted by Peter Rossbach <pr...@objektpark.de>.
HI Filip,

you are right, and with recoverCounter=0 it is like today. Hups, i  
have checkin my test value, and change it
back to 0, later this day.

Many thanks to review the patch
Peter



Am 19.10.2006 um 01:27 schrieb Filip Hanik - Dev Lists:

> Hi Peter,
>
> with this fix, if I read it correctly, and a node crashes while  
> sending data, the sending thread will be stuck sleeping for 25  
> seconds (recoverTimeout*recoverCounter)?
> if that is the case, I suggest that we use recoverCounter=0 as the  
> default value.
>
> did I miss something?
>
> Filip
>
> pero@apache.org wrote:
>> Author: pero
>> Date: Wed Oct 18 09:37:42 2006
>> New Revision: 465293
>>
>> URL: http://svn.apache.org/viewvc?view=rev&rev=465293
>> Log:
>> Made recovery more robust.
>>
>> Modified:
>>     tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/ 
>> catalina/cluster/tcp/FastAsyncSocketSender.java
>>     tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/ 
>> catalina/cluster/tcp/LocalStrings.properties
>>     tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/ 
>> catalina/cluster/tcp/mbeans-descriptors.xml
>>     tomcat/container/tc5.5.x/webapps/docs/changelog.xml
>>
>> Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/ 
>> apache/catalina/cluster/tcp/FastAsyncSocketSender.java
>> URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/ 
>> cluster/src/share/org/apache/catalina/cluster/tcp/ 
>> FastAsyncSocketSender.java?view=diff&rev=465293&r1=465292&r2=465293
>> ===================================================================== 
>> =========
>> --- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/ 
>> catalina/cluster/tcp/FastAsyncSocketSender.java (original)
>> +++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/ 
>> catalina/cluster/tcp/FastAsyncSocketSender.java Wed Oct 18  
>> 09:37:42 2006
>> @@ -54,7 +54,7 @@
>>      /**
>>       * The descriptive information about this implementation.
>>       */
>> -    private static final String info = "FastAsyncSocketSender/3.0";
>> +    private static final String info = "FastAsyncSocketSender/3.1";
>>       // -----------------------------------------------------  
>> Instance Variables
>>  @@ -69,6 +69,16 @@
>>      private FastQueueThread queueThread = null;
>>       /**
>> +     * recover timeout ( default 5 secs)
>> +     */
>> +    private long recoverTimeout = 5000;
>> +    +    /**
>> +     * number of recover tries
>> +     */
>> +    private int recoverCounter = 5;
>> +
>> +    /**
>>       * Count number of queue message
>>       */
>>      private long inQueueCounter = 0;
>> @@ -229,6 +239,40 @@
>>      }
>>       /**
>> +     * get current push message recover timeout +     * @return  
>> current push message recover timeout
>> +     */
>> +    public long getRecoverTimeout() {
>> +        +        return recoverTimeout;
>> +    }
>> +
>> +    /**
>> +     * Set recover timeout (default 5000 msec)
>> +     * @param timeout
>> +     */
>> +    public void setRecoverTimeout(long timeout) {
>> +        recoverTimeout = timeout;
>> +    }
>> +
>> +    /**
>> +     * get current push message recover counter +     * @return  
>> current push message recover counter
>> +     */
>> +    public int getRecoverCounter() {
>> +        +        return recoverCounter;
>> +    }
>> +
>> +    /**
>> +     * Set recover couner (default 5 )
>> +     * @param counter
>> +     */
>> +    public void setRecoverCounter(int counter) {
>> +        recoverCounter = counter;
>> +    }
>> +
>> +    /**
>>       * change active the queue Thread priority       * @param  
>> threadPriority value must be between MIN and MAX Thread Priority
>>       * @exception IllegalArgumentException
>> @@ -465,25 +509,62 @@
>>          }
>>           /**
>> -         * @param entry
>> +         * Push all messages from queue to other nodes. Is  
>> revovery configured
>> +         * make a resends with some waits.
>> +         * @param entry list of messages
>>           */
>>          protected void pushQueuedMessages(LinkObject entry) {
>>              do {
>>                  int messagesize = 0;
>> +                ClusterData data = null ;
>>                  try {
>> -                    ClusterData data = (ClusterData) entry.data();
>> +                    data = (ClusterData) entry.data();
>>                      messagesize = data.getMessage().length;
>>                      sender.pushMessage(data);
>>                  } catch (Exception x) {
>> -                    log.warn(sm.getString(
>> -                            "AsyncSocketSender.send.error", entry
>> +                    long rTimeout = sender.getRecoverTimeout() ;
>> +                    int rCounter = sender.getRecoverCounter() ;
>> +                    if(data != null && +                        
>> rTimeout > 0 && +                       rCounter > 0) {
>> +                        // wait that network get stabler
>> +                        int counter = 1;
>> +                        boolean success = false ;
>> +                        do {
>> +                            try {
>> +                                Thread.sleep(rTimeout*counter);
>> +                            } catch (Exception sleep) {
>> +                            }
>> +                            try {
>> +                                if(log.isDebugEnabled()) {
>> +                                    log.debug(sm.getString 
>> ("AsyncSocketSender.send.recover",
>> +                                            entry.getKey(),
>> +                                            new Integer(counter),  
>> +                                            new Integer 
>> (rCounter), new Long(rTimeout))) ;
>> +                                }
>> +                                sender.pushMessage(data);
>> +                                success = true;
>> +                            } catch (Exception xx) {
>> +                              counter++;  
>> +                            }
>> +                        } while (keepRunning && !success &&  
>> counter <= rCounter);
>> +                        +                        if(!success) {
>> +                            log.warn(sm.getString(
>> +                                     
>> "AsyncSocketSender.send.error", entry
>>                                      .getKey()), x);
>> -                } finally {
>> +                        }
>> +                    } else {
>> +                        log.warn(sm.getString(
>> +                                "AsyncSocketSender.send.error",  
>> entry
>> +                                .getKey()), x);
>> +                    }
>> +               } finally {
>>                      outQueueCounter++;
>>                      decQueuedNrOfBytes(messagesize);
>>                  }
>>                  entry = entry.next();
>> -            } while (entry != null);
>> +            } while (keepRunning && entry != null);
>>          }
>>       }
>>
>> Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/ 
>> apache/catalina/cluster/tcp/LocalStrings.properties
>> URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/ 
>> cluster/src/share/org/apache/catalina/cluster/tcp/ 
>> LocalStrings.properties?view=diff&rev=465293&r1=465292&r2=465293
>> ===================================================================== 
>> =========
>> --- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/ 
>> catalina/cluster/tcp/LocalStrings.properties (original)
>> +++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/ 
>> catalina/cluster/tcp/LocalStrings.properties Wed Oct 18 09:37:42 2006
>> @@ -2,6 +2,7 @@
>>  AsyncSocketSender.queue.message=Queue message to [{0}: 
>> {1,number,integer}] id=[{2}] size={3}
>>  AsyncSocketSender.send.error=Unable to asynchronously send  
>> session with id=[{0}] - message will be ignored.
>>  AsyncSocketSender.queue.empty=Queue in sender [{0}: 
>> {1,number,integer}] returned null element!
>> +AsyncSocketSender.send.recover=Recover queued message id=[{0}]  
>> after failure and send again ( current counter={1,number,integer},  
>> max counter={2,number,integer}, timeout={3,number,long})   
>> cluster.mbean.register.already=MBean {0} already registered!
>>  FastAsyncSocketSender.setThreadPriority=[{0}:{1,number,integer}]  
>> set priority to {2}
>>  FastAsyncSocketSender.min.exception=[{0}:{1,number,integer}] new  
>> priority {2} < MIN_PRIORITY
>>
>> Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/ 
>> apache/catalina/cluster/tcp/mbeans-descriptors.xml
>> URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/ 
>> cluster/src/share/org/apache/catalina/cluster/tcp/mbeans- 
>> descriptors.xml?view=diff&rev=465293&r1=465292&r2=465293
>> ===================================================================== 
>> =========
>> --- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/ 
>> catalina/cluster/tcp/mbeans-descriptors.xml (original)
>> +++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/ 
>> catalina/cluster/tcp/mbeans-descriptors.xml Wed Oct 18 09:37:42 2006
>> @@ -620,6 +620,12 @@
>>            description="after send failure make a resend"
>>  			     is="true"
>>                   type="boolean" />
>> +    <attribute   name="recoverTimeout"
>> +          description="recover Timeout after push message failure  
>> (default 5000 msec)"
>> +                 type="long" />
>> +    <attribute   name="recoverCounter"
>> +          description="number of recover tries (default 5)"
>> +                 type="int" />
>>      <attribute   name="connected"
>>                   is="true"
>>            description="socket connected"
>>
>> Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
>> URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/ 
>> docs/changelog.xml?view=diff&rev=465293&r1=465292&r2=465293
>> ===================================================================== 
>> =========
>> --- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
>> +++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Wed Oct 18  
>> 09:37:42 2006
>> @@ -84,6 +84,14 @@
>>        </fix>
>>      </changelog>
>>    </subsection> +  <subsection name="Cluster">
>> +    <changelog>
>> +      <add>
>> +        Add better recovery at FastAsyncQueueSender. Made the  
>> startegy more robust for temporary connection problems (pero)
>> +      </add>
>> +    </changelog>
>> +  </subsection>   +
>>  </section>
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: dev-help@tomcat.apache.org
>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: dev-help@tomcat.apache.org
>
>


Re: svn commit: r465293 - in /tomcat/container/tc5.5.x: modules/cluster/src/share/org/apache/catalina/cluster/tcp/ webapps/docs/

Posted by Filip Hanik - Dev Lists <de...@hanik.com>.
Hi Peter,

with this fix, if I read it correctly, and a node crashes while sending 
data, the sending thread will be stuck sleeping for 25 seconds 
(recoverTimeout*recoverCounter)?
if that is the case, I suggest that we use recoverCounter=0 as the 
default value.

did I miss something?

Filip

pero@apache.org wrote:
> Author: pero
> Date: Wed Oct 18 09:37:42 2006
> New Revision: 465293
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=465293
> Log:
> Made recovery more robust.
>
> Modified:
>     tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/FastAsyncSocketSender.java
>     tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/LocalStrings.properties
>     tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/mbeans-descriptors.xml
>     tomcat/container/tc5.5.x/webapps/docs/changelog.xml
>
> Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/FastAsyncSocketSender.java
> URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/FastAsyncSocketSender.java?view=diff&rev=465293&r1=465292&r2=465293
> ==============================================================================
> --- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/FastAsyncSocketSender.java (original)
> +++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/FastAsyncSocketSender.java Wed Oct 18 09:37:42 2006
> @@ -54,7 +54,7 @@
>      /**
>       * The descriptive information about this implementation.
>       */
> -    private static final String info = "FastAsyncSocketSender/3.0";
> +    private static final String info = "FastAsyncSocketSender/3.1";
>  
>      // ----------------------------------------------------- Instance Variables
>  
> @@ -69,6 +69,16 @@
>      private FastQueueThread queueThread = null;
>  
>      /**
> +     * recover timeout ( default 5 secs)
> +     */
> +    private long recoverTimeout = 5000;
> +    
> +    /**
> +     * number of recover tries
> +     */
> +    private int recoverCounter = 5;
> +
> +    /**
>       * Count number of queue message
>       */
>      private long inQueueCounter = 0;
> @@ -229,6 +239,40 @@
>      }
>  
>      /**
> +     * get current push message recover timeout 
> +     * @return current push message recover timeout
> +     */
> +    public long getRecoverTimeout() {
> +        
> +        return recoverTimeout;
> +    }
> +
> +    /**
> +     * Set recover timeout (default 5000 msec)
> +     * @param timeout
> +     */
> +    public void setRecoverTimeout(long timeout) {
> +        recoverTimeout = timeout;
> +    }
> +
> +    /**
> +     * get current push message recover counter 
> +     * @return current push message recover counter
> +     */
> +    public int getRecoverCounter() {
> +        
> +        return recoverCounter;
> +    }
> +
> +    /**
> +     * Set recover couner (default 5 )
> +     * @param counter
> +     */
> +    public void setRecoverCounter(int counter) {
> +        recoverCounter = counter;
> +    }
> +
> +    /**
>       * change active the queue Thread priority 
>       * @param threadPriority value must be between MIN and MAX Thread Priority
>       * @exception IllegalArgumentException
> @@ -465,25 +509,62 @@
>          }
>  
>          /**
> -         * @param entry
> +         * Push all messages from queue to other nodes. Is revovery configured
> +         * make a resends with some waits.
> +         * @param entry list of messages
>           */
>          protected void pushQueuedMessages(LinkObject entry) {
>              do {
>                  int messagesize = 0;
> +                ClusterData data = null ;
>                  try {
> -                    ClusterData data = (ClusterData) entry.data();
> +                    data = (ClusterData) entry.data();
>                      messagesize = data.getMessage().length;
>                      sender.pushMessage(data);
>                  } catch (Exception x) {
> -                    log.warn(sm.getString(
> -                            "AsyncSocketSender.send.error", entry
> +                    long rTimeout = sender.getRecoverTimeout() ;
> +                    int rCounter = sender.getRecoverCounter() ;
> +                    if(data != null && 
> +                       rTimeout > 0 && 
> +                       rCounter > 0) {
> +                        // wait that network get stabler
> +                        int counter = 1;
> +                        boolean success = false ;
> +                        do {
> +                            try {
> +                                Thread.sleep(rTimeout*counter);
> +                            } catch (Exception sleep) {
> +                            }
> +                            try {
> +                                if(log.isDebugEnabled()) {
> +                                    log.debug(sm.getString("AsyncSocketSender.send.recover",
> +                                            entry.getKey(),
> +                                            new Integer(counter), 
> +                                            new Integer(rCounter), new Long(rTimeout))) ;
> +                                }
> +                                sender.pushMessage(data);
> +                                success = true;
> +                            } catch (Exception xx) {
> +                              counter++; 
> +                            }
> +                        } while (keepRunning && !success && counter <= rCounter);
> +                        
> +                        if(!success) {
> +                            log.warn(sm.getString(
> +                                    "AsyncSocketSender.send.error", entry
>                                      .getKey()), x);
> -                } finally {
> +                        }
> +                    } else {
> +                        log.warn(sm.getString(
> +                                "AsyncSocketSender.send.error", entry
> +                                .getKey()), x);
> +                    }
> +               } finally {
>                      outQueueCounter++;
>                      decQueuedNrOfBytes(messagesize);
>                  }
>                  entry = entry.next();
> -            } while (entry != null);
> +            } while (keepRunning && entry != null);
>          }
>  
>      }
>
> Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/LocalStrings.properties
> URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/LocalStrings.properties?view=diff&rev=465293&r1=465292&r2=465293
> ==============================================================================
> --- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/LocalStrings.properties (original)
> +++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/LocalStrings.properties Wed Oct 18 09:37:42 2006
> @@ -2,6 +2,7 @@
>  AsyncSocketSender.queue.message=Queue message to [{0}:{1,number,integer}] id=[{2}] size={3}
>  AsyncSocketSender.send.error=Unable to asynchronously send session with id=[{0}] - message will be ignored.
>  AsyncSocketSender.queue.empty=Queue in sender [{0}:{1,number,integer}] returned null element!
> +AsyncSocketSender.send.recover=Recover queued message id=[{0}] after failure and send again ( current counter={1,number,integer}, max counter={2,number,integer}, timeout={3,number,long}) 
>  cluster.mbean.register.already=MBean {0} already registered!
>  FastAsyncSocketSender.setThreadPriority=[{0}:{1,number,integer}] set priority to {2}
>  FastAsyncSocketSender.min.exception=[{0}:{1,number,integer}] new priority {2} < MIN_PRIORITY
>
> Modified: tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/mbeans-descriptors.xml
> URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/mbeans-descriptors.xml?view=diff&rev=465293&r1=465292&r2=465293
> ==============================================================================
> --- tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/mbeans-descriptors.xml (original)
> +++ tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/tcp/mbeans-descriptors.xml Wed Oct 18 09:37:42 2006
> @@ -620,6 +620,12 @@
>            description="after send failure make a resend"
>  			     is="true"
>                   type="boolean" />
> +    <attribute   name="recoverTimeout"
> +          description="recover Timeout after push message failure (default 5000 msec)"
> +                 type="long" />
> +    <attribute   name="recoverCounter"
> +          description="number of recover tries (default 5)"
> +                 type="int" />
>      <attribute   name="connected"
>                   is="true"
>            description="socket connected"
>
> Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
> URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?view=diff&rev=465293&r1=465292&r2=465293
> ==============================================================================
> --- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
> +++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Wed Oct 18 09:37:42 2006
> @@ -84,6 +84,14 @@
>        </fix>
>      </changelog>
>    </subsection> 
> +  <subsection name="Cluster">
> +    <changelog>
> +      <add>
> +        Add better recovery at FastAsyncQueueSender. Made the startegy more robust for temporary connection problems (pero)
> +      </add>
> +    </changelog>
> +  </subsection>   
> +
>  </section>
>  
>  
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: dev-help@tomcat.apache.org
>
>
>   


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