summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Ritchie <ritchiem@apache.org>2009-04-17 13:48:01 +0000
committerMartin Ritchie <ritchiem@apache.org>2009-04-17 13:48:01 +0000
commitd9d7f31bb8f5e70a2c3794dde3db2fa73837ba37 (patch)
tree9472b99c15e6b706eaf17460ec82f36e825d01ed
parent144f44573fc182737c09b6e49784eb94cbaefbe8 (diff)
downloadqpid-python-d9d7f31bb8f5e70a2c3794dde3db2fa73837ba37.tar.gz
QPID-1779 : Update to ensure CACFTest reports failures correctly and resolved the issue that it was not showing.
merged from trunk r764790 git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/0.5-release@766005 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java2
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java30
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/CloseAfterConnectionFailureTest.java33
3 files changed, 53 insertions, 12 deletions
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
index c09b05bda8..4db94627bc 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQConnection.java
@@ -1326,6 +1326,8 @@ public class AMQConnection extends Closeable implements Connection, QueueConnect
// handling sequence
if (cause instanceof IOException || cause instanceof AMQDisconnectedException)
{
+ // If we have an IOE/AMQDisconnect there is no connection to close on.
+ _closing.set(false);
closer = !_closed.getAndSet(true);
_protocolHandler.getProtocolSession().notifyError(je);
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
index 7252924b04..d7f1ddb5cd 100644
--- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
+++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java
@@ -21,6 +21,7 @@
package org.apache.qpid.client;
import java.io.Serializable;
+import java.io.IOException;
import java.net.URISyntaxException;
import java.text.MessageFormat;
import java.util.ArrayList;
@@ -698,7 +699,11 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic
// Failover failed and ain't coming back. Knife the dispatcher.
_dispatcherThread.interrupt();
}
- }
+
+ }
+
+ //if we don't have an exception then we can perform closing operations
+ _closing.set(e == null);
if (!_closed.getAndSet(true))
{
@@ -3000,4 +3005,27 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic
}
}
}
+
+ /**
+ * Checks if the Session and its parent connection are closed
+ *
+ * @return <tt>true</tt> if this is closed, <tt>false</tt> otherwise.
+ */
+ @Override
+ public boolean isClosed()
+ {
+ return _closed.get() || _connection.isClosed();
+ }
+
+ /**
+ * Checks if the Session and its parent connection are capable of performing
+ * closing operations
+ *
+ * @return <tt>true</tt> if we are closing, <tt>false</tt> otherwise.
+ */
+ @Override
+ public boolean isClosing()
+ {
+ return _closing.get()|| _connection.isClosing();
+ }
}
diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/CloseAfterConnectionFailureTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/CloseAfterConnectionFailureTest.java
index 1cb24919f0..bb9c22f31a 100644
--- a/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/CloseAfterConnectionFailureTest.java
+++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/unit/client/connection/CloseAfterConnectionFailureTest.java
@@ -42,6 +42,7 @@ public class CloseAfterConnectionFailureTest extends QpidTestCase implements Exc
Session session;
MessageConsumer consumer;
private CountDownLatch _latch = new CountDownLatch(1);
+ private JMSException _fail;
public void testNoFailover() throws URLSyntaxException, AMQVMBrokerCreationException,
InterruptedException, JMSException
@@ -63,6 +64,12 @@ public class CloseAfterConnectionFailureTest extends QpidTestCase implements Exc
//Kill connection
TransportConnection.killAllVMBrokers();
_latch.await();
+
+ if (_fail != null)
+ {
+ _fail.printStackTrace(System.out);
+ fail("Exception thrown:" + _fail.getMessage());
+ }
}
catch (AMQException e)
{
@@ -72,39 +79,43 @@ public class CloseAfterConnectionFailureTest extends QpidTestCase implements Exc
public void onException(JMSException e)
{
- System.err.println("Connection isClosed after connection Falure?:" + connection.isClosed());
+ System.out.println("Connection isClosed after connection Falure?:" + connection.isClosed());
try
{
consumer.close();
}
- catch (JMSException jsme)
+ catch (JMSException jmse)
{
- System.err.println("Consumer close failed with:" + jsme.getMessage());
+ System.out.println("Consumer close failed with:" + jmse.getMessage());
+ _fail = jmse;
}
- System.err.println("Connection isClosed after connection Falure?:" + connection.isClosed());
+ System.out.println("Connection isClosed after connection Falure?:" + connection.isClosed());
try
{
//Note that if we actually do session.close() we will lock up as the session will never receive a frame
// from the
- ((AMQSession)session).close(10);
+ ((AMQSession) session).close(10);
}
- catch (JMSException jsme)
+ catch (JMSException jmse)
{
- System.err.println("Session close failed with:" + jsme.getMessage());
+ System.out.println("Session close failed with:" + jmse.getMessage());
+ _fail = jmse;
}
- System.err.println("Connection isClosed after connection Falure?:" + connection.isClosed());
+ System.out.println("Connection isClosed after connection Falure?:" + connection.isClosed());
try
{
connection.close();
}
- catch (JMSException jsme)
+ catch (JMSException jmse)
{
- System.err.println("Session close failed with:" + jsme.getMessage());
+ System.out.println("Session close failed with:" + jmse.getMessage());
+ _fail = jmse;
}
- System.err.println("Connection isClosed after connection Falure?:" + connection.isClosed());
+ System.out.println("Connection isClosed after connection Falure?:" + connection.isClosed());
_latch.countDown();
+
}
}