You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2015/08/21 19:57:54 UTC

[2/5] qpid-jms git commit: QPIDJMS-94: mark begin of connection close and use to prevent new connection attempts after that point

QPIDJMS-94: mark begin of connection close and use to prevent new connection attempts after that point


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

Branch: refs/heads/master
Commit: fe93f01037825228deeda3f5ddfce001314f8c1f
Parents: cfa2ca6
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Aug 21 10:46:38 2015 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Aug 21 18:41:33 2015 +0100

----------------------------------------------------------------------
 .../jms/provider/failover/FailoverProvider.java   | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/fe93f010/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverProvider.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverProvider.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverProvider.java
index eef6a9a..8fd44e6 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverProvider.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/failover/FailoverProvider.java
@@ -83,6 +83,7 @@ public class FailoverProvider extends DefaultProviderListener implements Provide
     private final ScheduledExecutorService connectionHub;
     private final AtomicBoolean closed = new AtomicBoolean();
     private final AtomicBoolean failed = new AtomicBoolean();
+    private final AtomicBoolean closingConnection = new AtomicBoolean(false);
     private final AtomicLong requestId = new AtomicLong();
     private final Map<Long, FailoverRequest> requests = new LinkedHashMap<Long, FailoverRequest>();
     private final DefaultProviderListener closedListener = new DefaultProviderListener();
@@ -287,6 +288,9 @@ public class FailoverProvider extends DefaultProviderListener implements Provide
         final FailoverRequest pending = new FailoverRequest(request) {
             @Override
             public void doTask() throws IOException, JMSException, UnsupportedOperationException {
+                if(resourceId instanceof JmsConnectionInfo) {
+                   closingConnection.set(true);
+                }
                 provider.destroy(resourceId, this);
             }
 
@@ -594,14 +598,14 @@ public class FailoverProvider extends DefaultProviderListener implements Provide
      * point of view that connection was lost and an immediate attempt cycle should start.
      */
     private void triggerReconnectionAttempt() {
-        if (closed.get() || failed.get()) {
+        if (closingConnection.get() || closed.get() || failed.get()) {
             return;
         }
 
         connectionHub.execute(new Runnable() {
             @Override
             public void run() {
-                if (provider != null || closed.get() || failed.get()) {
+                if (provider != null || closingConnection.get() || closed.get() || failed.get()) {
                     return;
                 }
 
@@ -704,13 +708,13 @@ public class FailoverProvider extends DefaultProviderListener implements Provide
 
     @Override
     public void onInboundMessage(final JmsInboundMessageDispatch envelope) {
-        if (closed.get() || failed.get()) {
+        if (closingConnection.get() || closed.get() || failed.get()) {
             return;
         }
         serializer.execute(new Runnable() {
             @Override
             public void run() {
-                if (!closed.get()) {
+                if (!closingConnection.get() && !closed.get() && !failed.get()) {
                     listener.onInboundMessage(envelope);
                 }
             }
@@ -719,13 +723,13 @@ public class FailoverProvider extends DefaultProviderListener implements Provide
 
     @Override
     public void onConnectionFailure(final IOException ex) {
-        if (closed.get() || failed.get()) {
+        if (closingConnection.get() || closed.get() || failed.get()) {
             return;
         }
         serializer.execute(new Runnable() {
             @Override
             public void run() {
-                if (!closed.get() && !failed.get()) {
+                if (!closingConnection.get() && !closed.get() && !failed.get()) {
                     LOG.debug("Failover: the provider reports failure: {}", ex.getMessage());
                     handleProviderFailure(ex);
                 }
@@ -929,7 +933,7 @@ public class FailoverProvider extends DefaultProviderListener implements Provide
 
         @Override
         public void onFailure(final Throwable result) {
-            if (closed.get() || failed.get()) {
+            if (closingConnection.get() || closed.get() || failed.get()) {
                 requests.remove(id);
                 super.onFailure(result);
             } else {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org