Author: fhanik
Date: Mon Feb 27 09:16:26 2006
New Revision: 381388

URL: http://svn.apache.org/viewcvs?rev=381388&view=rev
Log:
enhanced error handling throughout the stack

Modified:
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelException.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelSender.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java
    
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/GzipInterceptor.java
    
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/ReplicationTransmitter.java

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelException.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelException.java?rev=381388&r1=381387&r2=381388&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelException.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelException.java
 Mon Feb 27 09:16:26 2006
@@ -15,6 +15,9 @@
  */
 package org.apache.catalina.tribes;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+
 /**
  * Channel Exception 
  * @author Filip Hanik
@@ -23,6 +26,7 @@
 
 public class ChannelException
     extends Exception {
+    private ArrayList faultyMembers=null;
     public ChannelException() {
         super();
     }
@@ -37,6 +41,25 @@
 
     public ChannelException(Throwable cause) {
         super(cause);
+    }
+    
+    public void addFaultyMember(Member mbr) {
+        if ( this.faultyMembers==null ) this.faultyMembers = new ArrayList();
+        faultyMembers.add(mbr);
+    }
+
+    public void setFaultyMembers(ArrayList faultyMembers) {
+        this.faultyMembers = faultyMembers;
+    }
+
+    public void setFaultyMembers(Member[] faultyMembers) {
+        if ( this.faultyMembers==null ) this.faultyMembers = new ArrayList();
+        this.faultyMembers.addAll(Arrays.asList(faultyMembers));
+    }
+
+    public Member[] getFaultyMembers() {
+        if ( this.faultyMembers==null ) return new Member[0];
+        return (Member[])faultyMembers.toArray(new 
Member[faultyMembers.size()]);
     }
 
 }

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java?rev=381388&r1=381387&r2=381388&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelInterceptor.java
 Mon Feb 27 09:16:26 2006
@@ -38,7 +38,7 @@
 
     public ChannelInterceptor getPrevious();
 
-    public void sendMessage(Member[] destination, ChannelMessage msg, 
InterceptorPayload payload) throws IOException;
+    public void sendMessage(Member[] destination, ChannelMessage msg, 
InterceptorPayload payload) throws ChannelException;
     
     public void messageReceived(ChannelMessage data);
     

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelSender.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelSender.java?rev=381388&r1=381387&r2=381388&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelSender.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/ChannelSender.java
 Mon Feb 27 09:16:26 2006
@@ -38,8 +38,6 @@
 
     public void sendMessage(ChannelMessage message, Member member) throws 
java.io.IOException;
 
-    public void sendMessage(ChannelMessage message) throws java.io.IOException;
-    
     public boolean getWaitForAck();
     public void setWaitForAck(boolean isWaitForAck);
 }

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java?rev=381388&r1=381387&r2=381388&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelCoordinator.java
 Mon Feb 27 09:16:26 2006
@@ -60,11 +60,18 @@
      * @param options int - sender options, see class documentation
      * @return ClusterMessage[] - the replies from the members, if any.
      */
-    public void sendMessage(Member[] destination, ChannelMessage msg, 
InterceptorPayload payload) throws IOException {
+    public void sendMessage(Member[] destination, ChannelMessage msg, 
InterceptorPayload payload) throws ChannelException {
         if ( destination == null ) destination = 
membershipService.getMembers();
+        ChannelException exception = null;
         for ( int i=0; i<destination.length; i++ ) {
-            clusterSender.sendMessage(msg,destination[i]);
+            try {
+                clusterSender.sendMessage(msg, destination[i]);
+            }catch ( Exception x ) {
+                if ( exception == null ) exception = new ChannelException(x);
+                exception.addFaultyMember(destination[i]);
+            }
         }
+        if ( exception != null ) throw exception;
     }
 
 

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java?rev=381388&r1=381387&r2=381388&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/ChannelInterceptorBase.java
 Mon Feb 27 09:16:26 2006
@@ -23,6 +23,7 @@
 import org.apache.catalina.tribes.ChannelInterceptor;
 import org.apache.catalina.tribes.InterceptorPayload;
 import org.apache.catalina.tribes.io.ClusterData;
+import org.apache.catalina.tribes.ChannelException;
 
 /**
  * Abstract class for the interceptor base class.
@@ -57,7 +58,7 @@
         return previous;
     }
 
-    public void sendMessage(Member[] destination, ChannelMessage msg, 
InterceptorPayload payload) throws IOException {
+    public void sendMessage(Member[] destination, ChannelMessage msg, 
InterceptorPayload payload) throws ChannelException {
         if ( getNext() != null ) getNext().sendMessage(destination, msg, 
payload);
     }
     

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java?rev=381388&r1=381387&r2=381388&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/GroupChannel.java
 Mon Feb 27 09:16:26 2006
@@ -109,6 +109,7 @@
             data.setMessage(b);
             getFirstInterceptor().sendMessage(destination, data, null);
         }catch ( Exception x ) {
+            if ( x instanceof ChannelException ) throw (ChannelException)x;
             throw new ChannelException(x);
         }
     }

Modified: 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/GzipInterceptor.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/GzipInterceptor.java?rev=381388&r1=381387&r2=381388&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/GzipInterceptor.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/GzipInterceptor.java
 Mon Feb 27 09:16:26 2006
@@ -26,6 +26,7 @@
 import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
 import java.util.Arrays;
+import org.apache.catalina.tribes.ChannelException;
 
 
 
@@ -38,13 +39,13 @@
 public class GzipInterceptor extends ChannelInterceptorBase {
     public static final int DEFAULT_BUFFER_SIZE = 2048;
     
-    public void sendMessage(Member[] destination, ChannelMessage msg, 
InterceptorPayload payload) throws IOException {
+    public void sendMessage(Member[] destination, ChannelMessage msg, 
InterceptorPayload payload) throws ChannelException {
         try {
             msg.setMessage(compress(msg.getMessage()));
             getNext().sendMessage(destination, msg, payload);
         } catch ( IOException x ) {
             log.error("Unable to compress byte contents");
-            throw x;
+            throw new ChannelException(x);
         }
     }
 

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=381388&r1=381387&r2=381388&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
 Mon Feb 27 09:16:26 2006
@@ -810,6 +810,7 @@
              writeData(data);
              messageTransfered = true ;
         } catch (java.io.IOException x) {
+            exception = x;
             if( true ) { //allow resend
                 // second try with fresh connection
                 dataResendCounter++;
@@ -823,19 +824,16 @@
                 try {
                     writeData(data);
                     messageTransfered = true;
+                    exception = null;
                 } catch (IOException xx) {
                     xx.fillInStackTrace();
                     exception = xx;
-                    throw xx ;
                 }
             } else 
             {
-                
                 synchronized(this) {
                     closeSocket();
                 }
-                exception = x;
-                throw x ;
             }
         } finally {
             this.keepAliveCount++;

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=381388&r1=381387&r2=381388&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
 Mon Feb 27 09:16:26 2006
@@ -386,34 +386,30 @@
         }
     }
     
-    public void sendMessage(ChannelMessage message) throws IOException {
-        sendMessage(message,false);
-    }
-
     /**
      * send message to all senders (broadcast)
      * @see 
org.apache.catalina.tribes.ClusterSender#sendMessage(org.apache.catalina.tribes.ClusterMessage)
      */
-    public void sendMessage(ChannelMessage message, boolean domainOnly) throws 
IOException {
-        long time = 0;
-        if (doTransmitterProcessingStats) {
-            time = System.currentTimeMillis();
-        }
-        try {
-            IDataSender[] senders = getSenders();
-            for (int i = 0; i < senders.length; i++) {
-                IDataSender sender = senders[i];
-                //domain filter
-                String domain = message.getAddress().getDomain();
-                if ( domainOnly && !(domain.equals(sender.getDomain())) ) 
continue;
-                sendMessageData(message, sender);
-            }
-        } finally {
-            if (doTransmitterProcessingStats) {
-                addProcessingStats(time);
-            }
-        }
-    }
+//    public void sendMessage(ChannelMessage message, boolean domainOnly) 
throws IOException {
+//        long time = 0;
+//        if (doTransmitterProcessingStats) {
+//            time = System.currentTimeMillis();
+//        }
+//        try {
+//            IDataSender[] senders = getSenders();
+//            for (int i = 0; i < senders.length; i++) {
+//                IDataSender sender = senders[i];
+//                //domain filter
+//                String domain = message.getAddress().getDomain();
+//                if ( domainOnly && !(domain.equals(sender.getDomain())) ) 
continue;
+//                sendMessageData(message, sender);
+//            }
+//        } finally {
+//            if (doTransmitterProcessingStats) {
+//                addProcessingStats(time);
+//            }
+//        }
+//    }
         
     
 
@@ -592,8 +588,8 @@
      * @return true if the message got sent, false otherwise
      * @throws java.io.IOException If an error occurs
      */
-    protected boolean sendMessageData(ChannelMessage data,
-                                      IDataSender sender) {
+    protected void sendMessageData(ChannelMessage data,
+                                   IDataSender sender) throws IOException {
         if (sender == null)
             throw new RuntimeException("Sender not available. Make sure sender 
information is available to the ReplicationTransmitter.");
         try {
@@ -607,8 +603,7 @@
             sender.sendMessage(data);
             sender.setSuspect(false);
             addStats(data.getMessage().length);
-            return true;
-        } catch (Exception x) {
+        } catch (IOException x) {
             if (!sender.getSuspect()) {
                 if (log.isErrorEnabled() ) log.error("Unable to send 
replicated message, is member ["+sender.toString()+"] down?",x);
             } else if (log.isDebugEnabled() ) {
@@ -616,7 +611,7 @@
             }
             sender.setSuspect(true);
             failureCounter++;
-            return false;
+            throw x;
         }
 
     }



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

Reply via email to