summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Rudyy <orudyy@apache.org>2014-08-28 15:00:06 +0000
committerAlex Rudyy <orudyy@apache.org>2014-08-28 15:00:06 +0000
commitba88a63d8f0da9eac4cf7daf46bac23a287860c6 (patch)
treebce21b8e6a06a547b11b56ac2246bec34c61d295
parentf9013e91d99050856fb565a04f154240ebf001ff (diff)
downloadqpid-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
-rwxr-xr-xjava/broker-core/src/main/java/org/apache/qpid/server/txn/LocalTransaction.java62
-rw-r--r--java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java9
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)
{