You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2015/10/12 15:49:08 UTC
[2/3] qpid-jms git commit: QPIDJMS-124: have the peer send a Close
frame with the exception details before it breaks out of the process loop
QPIDJMS-124: have the peer send a Close frame with the exception details before it breaks out of the process loop
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/a7a317d6
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/a7a317d6
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/a7a317d6
Branch: refs/heads/master
Commit: a7a317d6420bfab71bb02f268c09a213d15c9c94
Parents: 9cf75e8
Author: Robert Gemmell <ro...@apache.org>
Authored: Mon Oct 12 12:25:55 2015 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Mon Oct 12 14:47:27 2015 +0100
----------------------------------------------------------------------
.../qpid/jms/test/testpeer/TestAmqpPeer.java | 42 ++++++++++----------
.../jms/test/testpeer/TestAmqpPeerRunner.java | 15 ++++++-
2 files changed, 36 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/a7a317d6/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
index 40bab4e..34d7c34 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
@@ -581,18 +581,10 @@ public class TestAmqpPeer implements AutoCloseable
expectSaslAnonymousConnect(null, null, null, serverProperties);
// Now generate the Close frame with the supplied error
- final CloseFrame closeFrame = new CloseFrame();
- if (errorType != null) {
- org.apache.qpid.jms.test.testpeer.describedtypes.Error detachError = new org.apache.qpid.jms.test.testpeer.describedtypes.Error();
- detachError.setCondition(errorType);
- detachError.setDescription(errorMessage);
- detachError.setInfo(errorInfo);
- closeFrame.setError(detachError);
- }
+ final FrameSender closeSender = createCloseFrameSender(errorType, errorMessage, errorInfo);
// Update the handler to send the Close frame after the Open frame.
CompositeAmqpPeerRunnable comp = insertCompsiteActionForLastHandler();
- final FrameSender closeSender = new FrameSender(this, FrameType.AMQP, CONNECTION_CHANNEL, closeFrame, null);
comp.add(closeSender);
addHandler(new CloseMatcher().withError(Matchers.nullValue()));
@@ -1527,18 +1519,9 @@ public class TestAmqpPeer implements AutoCloseable
CompositeAmqpPeerRunnable comp = insertCompsiteActionForLastHandler();
// Now generate the Close
- final CloseFrame closeFrame = new CloseFrame();
- if (errorType != null) {
- org.apache.qpid.jms.test.testpeer.describedtypes.Error detachError = new org.apache.qpid.jms.test.testpeer.describedtypes.Error();
- detachError.setCondition(errorType);
- detachError.setDescription(errorMessage);
- detachError.setInfo(info);
- closeFrame.setError(detachError);
- }
+ final FrameSender closeSender = createCloseFrameSender(errorType, errorMessage, info);
- final FrameSender frameSender = new FrameSender(this, FrameType.AMQP, CONNECTION_CHANNEL, closeFrame, null);
-
- comp.add(frameSender);
+ comp.add(closeSender);
if (expectCloseResponse) {
// Expect a response to our Close.
@@ -1548,6 +1531,25 @@ public class TestAmqpPeer implements AutoCloseable
}
}
+ private FrameSender createCloseFrameSender(Symbol errorType, String errorMessage, Map<Symbol, Object> info) {
+ final CloseFrame closeFrame = new CloseFrame();
+ if (errorType != null) {
+ org.apache.qpid.jms.test.testpeer.describedtypes.Error closeError = new org.apache.qpid.jms.test.testpeer.describedtypes.Error();
+ closeError.setCondition(errorType);
+ closeError.setDescription(errorMessage);
+ closeError.setInfo(info);
+
+ closeFrame.setError(closeError);
+ }
+
+ return new FrameSender(this, FrameType.AMQP, CONNECTION_CHANNEL, closeFrame, null);
+ }
+
+ void sendConnectionCloseImmediately(Symbol errorType, String errorMessage) {
+ FrameSender closeSender = createCloseFrameSender(errorType, errorMessage, null);
+ closeSender.run();
+ }
+
public void remotelyDetachLastOpenedLinkOnLastOpenedSession(boolean expectDetachResponse, boolean closed) {
remotelyDetachLastOpenedLinkOnLastOpenedSession(expectDetachResponse, closed, null, null);
}
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/a7a317d6/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeerRunner.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeerRunner.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeerRunner.java
index 854e64c..9dfdedc 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeerRunner.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeerRunner.java
@@ -29,6 +29,7 @@ import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
+import org.apache.qpid.jms.test.testpeer.basictypes.AmqpError;
import org.apache.qpid.proton.amqp.Binary;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,6 +47,7 @@ class TestAmqpPeerRunner implements Runnable
private OutputStream _networkOutputStream;
private final Object _inputHandlingLock = new Object();
+ private final TestAmqpPeer _peer;
private final TestFrameParser _testFrameParser;
private volatile boolean _suppressReadExceptionOnClose;
private volatile boolean _exitReadLoopEarly;
@@ -76,6 +78,7 @@ class TestAmqpPeerRunner implements Runnable
}
_testFrameParser = new TestFrameParser(peer);
+ _peer = peer;
}
@Override
@@ -107,7 +110,17 @@ class TestAmqpPeerRunner implements Runnable
LOGGER.debug("Read: {}", new Binary(networkInputBytes, 0, bytesRead));
- _testFrameParser.input(networkInputByteBuffer);
+ try {
+ _testFrameParser.input(networkInputByteBuffer);
+ } catch (Exception ex) {
+ try {
+ _peer.sendConnectionCloseImmediately(AmqpError.INTERNAL_ERROR, "Problem in peer: " + ex);
+ } catch (Exception ex2) {
+ LOGGER.debug("Exception while sending close frame during handling of previous exception", ex2);
+ }
+
+ throw ex;
+ }
}
if(_exitReadLoopEarly)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org