You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2014/02/14 19:50:07 UTC

svn commit: r1568452 - /qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java

Author: rgodfrey
Date: Fri Feb 14 18:50:07 2014
New Revision: 1568452

URL: http://svn.apache.org/r1568452
Log:
QPID-5552 : [Java Broker] Propertly handle transport exceptions encountered in methods invoked in AMQP 1.0 from the IOReceiver thread

Modified:
    qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java

Modified: qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java?rev=1568452&r1=1568451&r2=1568452&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/ProtocolEngine_1_0_0_SASL.java Fri Feb 14 18:50:07 2014
@@ -41,7 +41,6 @@ import org.apache.qpid.amqp_1_0.transpor
 import org.apache.qpid.amqp_1_0.transport.Container;
 import org.apache.qpid.amqp_1_0.transport.FrameOutputHandler;
 import org.apache.qpid.amqp_1_0.type.Binary;
-import org.apache.qpid.amqp_1_0.type.ErrorCondition;
 import org.apache.qpid.amqp_1_0.type.FrameBody;
 import org.apache.qpid.amqp_1_0.type.Symbol;
 import org.apache.qpid.amqp_1_0.type.transport.*;
@@ -52,12 +51,12 @@ import org.apache.qpid.protocol.ServerPr
 import org.apache.qpid.server.model.Broker;
 import org.apache.qpid.server.model.Port;
 import org.apache.qpid.server.model.Transport;
-import org.apache.qpid.server.protocol.v1_0.Connection_1_0;
 import org.apache.qpid.server.security.SubjectCreator;
 import org.apache.qpid.server.security.auth.UsernamePrincipal;
 import org.apache.qpid.server.util.ServerScopedRuntimeException;
 import org.apache.qpid.server.virtualhost.VirtualHost;
 import org.apache.qpid.transport.Sender;
+import org.apache.qpid.transport.TransportException;
 import org.apache.qpid.transport.network.NetworkConnection;
 
 public class ProtocolEngine_1_0_0_SASL implements ServerProtocolEngine, FrameOutputHandler
@@ -258,107 +257,113 @@ public class ProtocolEngine_1_0_0_SASL i
 
     public synchronized void received(ByteBuffer msg)
     {
-        _lastReadTime = System.currentTimeMillis();
-        if(RAW_LOGGER.isLoggable(Level.FINE))
+        try
         {
-            ByteBuffer dup = msg.duplicate();
-            byte[] data = new byte[dup.remaining()];
-            dup.get(data);
-            Binary bin = new Binary(data);
-            RAW_LOGGER.fine("RECV[" + getRemoteAddress() + "] : " + bin.toString());
-        }
-        _readBytes += msg.remaining();
-             switch(_state)
-             {
-                 case A:
-                     if(msg.hasRemaining())
-                     {
-                         msg.get();
-                     }
-                     else
-                     {
-                         break;
-                     }
-                 case M:
-                     if(msg.hasRemaining())
-                     {
-                         msg.get();
-                     }
-                     else
-                     {
-                         _state = State.M;
-                         break;
-                     }
-
-                 case Q:
-                     if(msg.hasRemaining())
-                     {
-                         msg.get();
-                     }
-                     else
-                     {
-                         _state = State.Q;
-                         break;
-                     }
-                 case P:
-                     if(msg.hasRemaining())
-                     {
-                         msg.get();
-                     }
-                     else
-                     {
-                         _state = State.P;
-                         break;
-                     }
-                 case PROTOCOL:
-                     if(msg.hasRemaining())
-                     {
-                         msg.get();
-                     }
-                     else
-                     {
-                         _state = State.PROTOCOL;
-                         break;
-                     }
-                 case MAJOR:
-                     if(msg.hasRemaining())
-                     {
-                         _major = msg.get();
-                     }
-                     else
-                     {
-                         _state = State.MAJOR;
-                         break;
-                     }
-                 case MINOR:
-                     if(msg.hasRemaining())
-                     {
-                         _minor = msg.get();
-                     }
-                     else
-                     {
-                         _state = State.MINOR;
-                         break;
-                     }
-                 case REVISION:
-                     if(msg.hasRemaining())
-                     {
-                         _revision = msg.get();
-
-                         _state = State.FRAME;
-                     }
-                     else
-                     {
-                         _state = State.REVISION;
-                         break;
-                     }
-                 case FRAME:
-                     if(msg.hasRemaining())
-                     {
+            _lastReadTime = System.currentTimeMillis();
+            if(RAW_LOGGER.isLoggable(Level.FINE))
+            {
+                ByteBuffer dup = msg.duplicate();
+                byte[] data = new byte[dup.remaining()];
+                dup.get(data);
+                Binary bin = new Binary(data);
+                RAW_LOGGER.fine("RECV[" + getRemoteAddress() + "] : " + bin.toString());
+            }
+            _readBytes += msg.remaining();
+            switch(_state)
+            {
+                case A:
+                    if (msg.hasRemaining())
+                    {
+                        msg.get();
+                    }
+                    else
+                    {
+                        break;
+                    }
+                case M:
+                    if (msg.hasRemaining())
+                    {
+                        msg.get();
+                    }
+                    else
+                    {
+                        _state = State.M;
+                        break;
+                    }
+
+                case Q:
+                    if (msg.hasRemaining())
+                    {
+                        msg.get();
+                    }
+                    else
+                    {
+                        _state = State.Q;
+                        break;
+                    }
+                case P:
+                    if (msg.hasRemaining())
+                    {
+                        msg.get();
+                    }
+                    else
+                    {
+                        _state = State.P;
+                        break;
+                    }
+                case PROTOCOL:
+                    if (msg.hasRemaining())
+                    {
+                        msg.get();
+                    }
+                    else
+                    {
+                        _state = State.PROTOCOL;
+                        break;
+                    }
+                case MAJOR:
+                    if (msg.hasRemaining())
+                    {
+                        _major = msg.get();
+                    }
+                    else
+                    {
+                        _state = State.MAJOR;
+                        break;
+                    }
+                case MINOR:
+                    if (msg.hasRemaining())
+                    {
+                        _minor = msg.get();
+                    }
+                    else
+                    {
+                        _state = State.MINOR;
+                        break;
+                    }
+                case REVISION:
+                    if (msg.hasRemaining())
+                    {
+                        _revision = msg.get();
+
+                        _state = State.FRAME;
+                    }
+                    else
+                    {
+                        _state = State.REVISION;
+                        break;
+                    }
+                case FRAME:
+                    if (msg.hasRemaining())
+                    {
                         _frameHandler = _frameHandler.parse(msg);
-                     }
-             }
-
+                    }
+            }
+        }
+        catch(RuntimeException e)
+        {
+            exception(e);
+        }
      }
 
     public void exception(Throwable throwable)
@@ -378,6 +383,10 @@ public class ProtocolEngine_1_0_0_SASL i
                 _conn.close(err);
                 close();
             }
+            catch(TransportException e)
+            {
+                _logger.info("Error when handling exception",e);
+            }
             finally
             {
                 if(throwable instanceof java.lang.Error)
@@ -394,13 +403,19 @@ public class ProtocolEngine_1_0_0_SASL i
 
     public void closed()
     {
-        // todo
-        _conn.inputClosed();
-        if (_conn != null && _conn.getConnectionEventListener() != null)
+        try
+        {
+            // todo
+            _conn.inputClosed();
+            if (_conn != null && _conn.getConnectionEventListener() != null)
+            {
+                ((Connection_1_0) _conn.getConnectionEventListener()).closed();
+            }
+        }
+        catch(RuntimeException e)
         {
-            ((Connection_1_0) _conn.getConnectionEventListener()).closed();
+            exception(e);
         }
-
     }
 
     public long getCreateTime()



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org