You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2017/09/07 16:17:48 UTC

[12/14] activemq git commit: [AMQ-6792] fire the failover exception handler before stop to ensure blocked write does not block stop request

[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 <ga...@gmail.com>
Authored: Fri Aug 11 12:58:51 2017 +0100
Committer: Timothy Bish <ta...@gmail.com>
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