Author: fhanik
Date: Fri Apr 27 12:40:21 2007
New Revision: 533197

URL: http://svn.apache.org/viewvc?view=rev&rev=533197
Log:
Undo Pero's checkin, sorry Peter, just can't have it in there until the 
solution is more robust, although I don't think it will ever be implemented in 
association with memberships
For now, senders that are no longer connected on the remote end, will be 
removed during the keepalive heartbeat


Modified:
    
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/PooledSender.java
    
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/nio/ParallelNioSender.java

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/PooledSender.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/PooledSender.java?view=diff&rev=533197&r1=533196&r2=533197
==============================================================================
--- 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/PooledSender.java
 (original)
+++ 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/PooledSender.java
 Fri Apr 27 12:40:21 2007
@@ -18,7 +18,6 @@
 
 import java.io.IOException;
 import java.util.List;
-
 import org.apache.catalina.tribes.Member;
 
 /**
@@ -86,13 +85,15 @@
     }
 
     public void add(Member member) {
-        // we don't need it senders are pooled...
+        // no op, senders created upon demans
     }
-    
-    public void remove(Member member) {
-        queue.remove(member) ;
-    }     
 
+    public void remove(Member member) {
+        //no op for now, should not cancel out any keys
+        //can create serious sync issues
+        //all TCP connections are cleared out through keepalive
+        //and if remote node disappears
+    }
     //  ----------------------------------------------------- Inner Class
 
     private class SenderQueue {
@@ -100,17 +101,17 @@
 
         PooledSender parent = null;
 
-        private List<DataSender> notinuse = null;
+        private List notinuse = null;
 
-        private List<DataSender> inuse = null;
+        private List inuse = null;
 
         private boolean isOpen = true;
 
         public SenderQueue(PooledSender parent, int limit) {
             this.limit = limit;
             this.parent = parent;
-            notinuse = new java.util.LinkedList<DataSender>();
-            inuse = new java.util.LinkedList<DataSender>();
+            notinuse = new java.util.LinkedList();
+            inuse = new java.util.LinkedList();
         }
 
         /**
@@ -149,18 +150,6 @@
             return result;
         }
 
-        // FIXME: remove also inuse senders. but then we must synch with 
sendMessage!
-        public synchronized void remove(Member member) {
-            if (isOpen) {
-                DataSender[] list = new DataSender[notinuse.size()];
-                notinuse.toArray(list);
-                for (int i=0; i<list.length; i++) {
-                    if(list[i] instanceof MultiPointSender)
-                        ((MultiPointSender)list[i]).remove(member);
-                }
-            }
-        }
-        
         public synchronized DataSender getSender(long timeout) {
             long start = System.currentTimeMillis();
             while ( true ) {
@@ -213,6 +202,9 @@
             notinuse.clear();
             inuse.clear();
             notify();
+            
+
+
         }
 
         public synchronized void open() {

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/nio/ParallelNioSender.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/nio/ParallelNioSender.java?view=diff&rev=533197&r1=533196&r2=533197
==============================================================================
--- 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/nio/ParallelNioSender.java
 (original)
+++ 
tomcat/tc6.0.x/trunk/java/org/apache/catalina/tribes/transport/nio/ParallelNioSender.java
 Fri Apr 27 12:40:21 2007
@@ -278,7 +278,6 @@
     }
 
     public boolean keepalive() {
-        //throw new UnsupportedOperationException("Method 
ParallelNioSender.checkKeepAlive() not implemented");
         boolean result = false;
         for ( Iterator i = nioSenders.entrySet().iterator(); i.hasNext();  ) {
             Map.Entry entry = (Map.Entry)i.next();
@@ -286,8 +285,21 @@
             if ( sender.keepalive() ) {
                 nioSenders.remove(entry.getKey());
                 result = true;
+            } else {
+                try {
+                    sender.read(null);
+                }catch ( IOException x ) {
+                    sender.disconnect();
+                    sender.reset();
+                    nioSenders.remove(entry.getKey());
+                    result = true;
+                }catch ( Exception x ) {
+                    log.warn("Error during keepalive test for 
sender:"+sender,x);
+                }
             }
         }
+        //clean up any cancelled keys
+        if ( result ) try { selector.selectNow(); }catch (Exception ignore){}
         return result;
     }
 



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

Reply via email to