You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2008/08/15 00:34:51 UTC

svn commit: r686068 - in /incubator/qpid/trunk/qpid/java: client/src/main/java/org/apache/qpid/nclient/ common/src/main/java/org/apache/qpid/transport/ common/src/main/java/org/apache/qpid/transport/network/io/

Author: rhs
Date: Thu Aug 14 15:34:50 2008
New Revision: 686068

URL: http://svn.apache.org/viewvc?rev=686068&view=rev
Log:
QPID-1244: fix for NPE on broker initiated connection close, also preserve the connection close text for better error reporting

Added:
    incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java   (with props)
    incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java   (with props)
Modified:
    incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/nclient/Client.java
    incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Channel.java
    incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java
    incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java
    incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
    incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java

Modified: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/nclient/Client.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/nclient/Client.java?rev=686068&r1=686067&r2=686068&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/nclient/Client.java (original)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/nclient/Client.java Thu Aug 14 15:34:50 2008
@@ -122,6 +122,7 @@
 
             @Override public void connectionClose(Channel context, ConnectionClose connectionClose)
             {
+                super.connectionClose(context, connectionClose);
                 ErrorCode errorCode = ErrorCode.get(connectionClose.getReplyCode().getValue());
                 if (_closedListner == null && errorCode != ErrorCode.NO_ERROR)
                 {

Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Channel.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Channel.java?rev=686068&r1=686067&r2=686068&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Channel.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Channel.java Thu Aug 14 15:34:50 2008
@@ -134,6 +134,14 @@
         this.session = session;
     }
 
+    void closeCode(ConnectionClose close)
+    {
+        if (session != null)
+        {
+            session.closeCode(close);
+        }
+    }
+
     private void emit(ProtocolEvent event)
     {
         event.setChannel(channel);

Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java?rev=686068&r1=686067&r2=686068&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Connection.java Thu Aug 14 15:34:50 2008
@@ -148,6 +148,17 @@
         delegate.exception(t);
     }
 
+    void closeCode(ConnectionClose close)
+    {
+        synchronized (channels)
+        {
+            for (Channel ch : channels.values())
+            {
+                ch.closeCode(close);
+            }
+        }
+    }
+
     public void closed()
     {
         log.debug("connection closed: %s", this);

Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java?rev=686068&r1=686067&r2=686068&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionDelegate.java Thu Aug 14 15:34:50 2008
@@ -250,6 +250,7 @@
 
     @Override public void connectionClose(Channel ch, ConnectionClose close)
     {
+        ch.getConnection().closeCode(close);
         ch.connectionCloseOk();
     }
 

Added: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java?rev=686068&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java (added)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java Thu Aug 14 15:34:50 2008
@@ -0,0 +1,45 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.transport;
+
+
+/**
+ * ConnectionException
+ *
+ */
+
+public class ConnectionException extends RuntimeException
+{
+
+    private ConnectionClose close;
+
+    public ConnectionException(ConnectionClose close)
+    {
+        super(close.getReplyText());
+        this.close = close;
+    }
+
+    public ConnectionClose getClose()
+    {
+        return close;
+    }
+
+}

Propchange: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/ConnectionException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java?rev=686068&r1=686067&r2=686068&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/Session.java Thu Aug 14 15:34:50 2008
@@ -268,6 +268,23 @@
 
     public void invoke(Method m)
     {
+        if (closed.get())
+        {
+            List<ExecutionException> exc = getExceptions();
+            if (!exc.isEmpty())
+            {
+                throw new SessionException(exc);
+            }
+            else if (close != null)
+            {
+                throw new ConnectionException(close);
+            }
+            else
+            {
+                throw new SessionClosedException();
+            }
+        }
+
         if (m.getEncodedTrack() == Frame.L4)
         {
             synchronized (commands)
@@ -379,6 +396,13 @@
         }
     }
 
+    private ConnectionClose close = null;
+
+    void closeCode(ConnectionClose close)
+    {
+        this.close = close;
+    }
+
     List<ExecutionException> getExceptions()
     {
         synchronized (exceptions)

Added: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java?rev=686068&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java (added)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java Thu Aug 14 15:34:50 2008
@@ -0,0 +1,39 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.transport;
+
+import java.util.Collections;
+
+
+/**
+ * SessionClosedException
+ *
+ */
+
+public class SessionClosedException extends SessionException
+{
+
+    public SessionClosedException()
+    {
+        super(Collections.EMPTY_LIST);
+    }
+
+}

Propchange: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/SessionClosedException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java?rev=686068&r1=686067&r2=686068&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java (original)
+++ incubator/qpid/trunk/qpid/java/common/src/main/java/org/apache/qpid/transport/network/io/IoReceiver.java Thu Aug 14 15:34:50 2008
@@ -100,7 +100,7 @@
             InputStream in = socket.getInputStream();
             int read = 0;
             int offset = 0;
-            while (!closed.get() && (read = in.read(buffer, offset, bufferSize-offset)) != -1)
+            while ((read = in.read(buffer, offset, bufferSize-offset)) != -1)
             {
                 if (read > 0)
                 {