diff options
author | Alex Rudyy <orudyy@apache.org> | 2014-08-28 15:00:06 +0000 |
---|---|---|
committer | Alex Rudyy <orudyy@apache.org> | 2014-08-28 15:00:06 +0000 |
commit | ba88a63d8f0da9eac4cf7daf46bac23a287860c6 (patch) | |
tree | bce21b8e6a06a547b11b56ac2246bec34c61d295 | |
parent | f9013e91d99050856fb565a04f154240ebf001ff (diff) | |
download | qpid-python-ba88a63d8f0da9eac4cf7daf46bac23a287860c6.tar.gz |
QPID-6051: Allow exceptions from post commit actions to be handled in the callers
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1621146 13f79535-47bb-0310-9956-ffa450edef68
2 files changed, 14 insertions, 57 deletions
diff --git a/java/broker-core/src/main/java/org/apache/qpid/server/txn/LocalTransaction.java b/java/broker-core/src/main/java/org/apache/qpid/server/txn/LocalTransaction.java index f5d32d2e20..349ec793fe 100755 --- a/java/broker-core/src/main/java/org/apache/qpid/server/txn/LocalTransaction.java +++ b/java/broker-core/src/main/java/org/apache/qpid/server/txn/LocalTransaction.java @@ -24,8 +24,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import org.apache.qpid.server.util.ConnectionScopedRuntimeException; -import org.apache.qpid.transport.TransportException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -259,11 +257,6 @@ public class LocalTransaction implements ServerTransaction doPostTransactionActions(); } - catch(RuntimeException e) - { - doRollbackActions(); - throw e; - } finally { resetDetails(); @@ -282,11 +275,9 @@ public class LocalTransaction implements ServerTransaction { sync(); StoreFuture future = StoreFuture.IMMEDIATE_FUTURE; - try + if(_transaction != null) { - if(_transaction != null) - { - future = new StoreFuture() + future = new StoreFuture() { private volatile boolean _completed = false; private StoreFuture _underlying = _transaction.commitTranAsync(); @@ -325,21 +316,16 @@ public class LocalTransaction implements ServerTransaction doPostTransactionActions(); deferred.run(); } - catch (RuntimeException e) - { - handleUnexpectedException(e); - } finally { resetDetails(); } } - - }; - _asyncTran = future; - } - else - { + }; + _asyncTran = future; + } + else + { try { doPostTransactionActions(); @@ -349,44 +335,10 @@ public class LocalTransaction implements ServerTransaction { resetDetails(); } - } - - } - catch (RuntimeException e) - { - try - { - handleUnexpectedException(e); - } - finally - { - resetDetails(); - } } return future; } - private void handleUnexpectedException(RuntimeException e) - { - if(e instanceof ConnectionScopedRuntimeException || e instanceof TransportException) - { - throw e; - } - else - { - _logger.error("Unexpected exception on execution of post commit deferred actions", e); - boolean continueOnError = Boolean.getBoolean("qpid.broker.exceptionHandler.continue"); - if (continueOnError) - { - throw e; - } - else - { - Runtime.getRuntime().halt(1); - } - } - } - private void doPostTransactionActions() { if(_logger.isDebugEnabled()) diff --git a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java index c193491e1e..3089895c06 100644 --- a/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java +++ b/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java @@ -318,7 +318,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine, AMQProtocolSessi } break; } - catch (Exception e) + catch (AMQException e) { _logger.error("Unexpected exception when processing datablock", e); closeProtocolSession(); @@ -337,6 +337,11 @@ public class AMQProtocolEngine implements ServerProtocolEngine, AMQProtocolSessi _logger.error("Unexpected protocol version", e); closeProtocolSession(); } + catch (TransportException e) + { + _logger.error("Unexpected transport exception", e); + closeProtocolSession(); + } catch (AMQFrameDecodingException e) { _logger.error("Frame decoding", e); @@ -394,7 +399,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine, AMQProtocolSessi * the connection is already closed by the time the exception is thrown. If any other * type of exception is thrown, the connection is not already closed. */ - private void dataBlockReceived(AMQDataBlock message) throws Exception + private void dataBlockReceived(AMQDataBlock message) throws AMQException { if (message instanceof ProtocolInitiation) { |