[AMQ-6792] fire the failover exception handler before stop to ensure blocked write does not block stop request
(cherry picked from commit 63f0b7e20d56837b4f159e83594a4e4fb906cd4a) Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/0924f983 Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/0924f983 Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/0924f983 Branch: refs/heads/activemq-5.15.x Commit: 0924f983f874179af1aad2839fcdef53ef530bed Parents: f7185b9 Author: gtully <[email protected]> Authored: Fri Aug 11 12:58:51 2017 +0100 Committer: Timothy Bish <[email protected]> Committed: Thu Sep 7 12:14:23 2017 -0400 ---------------------------------------------------------------------- .../activemq/network/DemandForwardingBridgeSupport.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/0924f983/activemq-broker/src/main/java/org/apache/activemq/network/DemandForwardingBridgeSupport.java ---------------------------------------------------------------------- diff --git a/activemq-broker/src/main/java/org/apache/activemq/network/DemandForwardingBridgeSupport.java b/activemq-broker/src/main/java/org/apache/activemq/network/DemandForwardingBridgeSupport.java index 5070266..879ab39 100644 --- a/activemq-broker/src/main/java/org/apache/activemq/network/DemandForwardingBridgeSupport.java +++ b/activemq-broker/src/main/java/org/apache/activemq/network/DemandForwardingBridgeSupport.java @@ -93,6 +93,7 @@ import org.apache.activemq.transport.ResponseCallback; import org.apache.activemq.transport.Transport; import org.apache.activemq.transport.TransportDisposedIOException; import org.apache.activemq.transport.TransportFilter; +import org.apache.activemq.transport.failover.FailoverTransport; import org.apache.activemq.transport.tcp.SslTransport; import org.apache.activemq.transport.tcp.TcpTransport; import org.apache.activemq.util.IdGenerator; @@ -323,6 +324,7 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br } } finally { ServiceStopper ss = new ServiceStopper(); + stopFailoverTransport(remoteBroker); ss.stop(remoteBroker); ss.stop(localBroker); ss.stop(duplexInboundLocalBroker); @@ -341,6 +343,16 @@ public abstract class DemandForwardingBridgeSupport implements NetworkBridge, Br } } + private void stopFailoverTransport(Transport transport) { + FailoverTransport failoverTransport = transport.narrow(FailoverTransport.class); + if (failoverTransport != null) { + // may be blocked on write, in which case stop will block + try { + failoverTransport.handleTransportFailure(new IOException("Bridge stopped")); + } catch (InterruptedException ignored) {} + } + } + protected void triggerStartAsyncNetworkBridgeCreation() throws IOException { brokerService.getTaskRunnerFactory().execute(new Runnable() { @Override
