You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ha...@apache.org on 2014/12/16 00:22:00 UTC

[15/17] activemq git commit: https://issues.apache.org/jira/browse/AMQ-5241 - track window between sending shutdown info and doing local close to avoid race with broker on normal connection.close - needs two jvm to reliably reproduce so no unit test with

https://issues.apache.org/jira/browse/AMQ-5241 - track window between sending shutdown info and doing local close to avoid race with broker on normal connection.close - needs two jvm to reliably reproduce so no unit test with the fix


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/dc900a3d
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/dc900a3d
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/dc900a3d

Branch: refs/heads/activemq-5.10.x
Commit: dc900a3d5c5c8a45bb92c82a09bb075838abdc97
Parents: 70b02fd
Author: gtully <ga...@gmail.com>
Authored: Mon Jun 23 12:12:39 2014 +0100
Committer: Hadrian Zbarcea <ha...@apache.org>
Committed: Mon Dec 15 17:03:53 2014 -0500

----------------------------------------------------------------------
 .../activemq/transport/failover/FailoverTransport.java  | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/dc900a3d/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java
----------------------------------------------------------------------
diff --git a/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java b/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java
index 6df82ed..c9ef141 100755
--- a/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java
+++ b/activemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java
@@ -128,6 +128,7 @@ public class FailoverTransport implements CompositeTransport {
     private final ArrayList<URI> priorityList = new ArrayList<URI>();
     private boolean priorityBackupAvailable = false;
     private String nestedExtraQueryOptions;
+    private boolean shuttingDown = false;
 
     public FailoverTransport() throws InterruptedIOException {
         brokerSslContext = SslContext.getCurrentSslContext();
@@ -242,6 +243,12 @@ public class FailoverTransport implements CompositeTransport {
 
     public final void handleTransportFailure(IOException e) throws InterruptedException {
         synchronized (reconnectMutex) {
+            if (shuttingDown) {
+                // shutdown info sent and remote socket closed and we see that before a local close
+                // let the close do the work
+                return;
+            }
+
             if (LOG.isTraceEnabled()) {
                 LOG.trace(this + " handleTransportFailure: " + e, e);
             }
@@ -257,7 +264,7 @@ public class FailoverTransport implements CompositeTransport {
                 if (canReconnect()) {
                     reconnectOk = true;
                 }
-                LOG.warn("Transport (" + transport + ") failed, reason:  "
+                LOG.warn("Transport (" + transport + ") failed"
                         + (reconnectOk ? "," : ", not") + " attempting to automatically reconnect", e);
 
                 initialized = false;
@@ -657,6 +664,9 @@ public class FailoverTransport implements CompositeTransport {
                         try {
                             transport.oneway(command);
                             stateTracker.trackBack(command);
+                            if (command.isShutdownInfo()) {
+                                shuttingDown = true;
+                            }
                         } catch (IOException e) {
 
                             // If the command was not tracked.. we will retry in