You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2015/08/11 17:22:38 UTC

[1/5] activemq-artemis git commit: ARTEMIS-179 Expose disconnect/reconnect problem

Repository: activemq-artemis
Updated Branches:
  refs/heads/master 69bacc839 -> 126be4ce2


ARTEMIS-179 Expose disconnect/reconnect problem

Currently a cluster bridge will continue to attempt to reconnect to
a node that sends it a DISCONNECT until its reconnect-attempts is
exhausted. A DISCONNECT message indicates that the node is not coming
back so no reconnect attempt should be made and the bridge should be
stopped, the bindings should be cleaned up, etc.

The change to this test exposes this problem.


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

Branch: refs/heads/master
Commit: f3be78a09633837d59ff1a79fa681b684bcd416c
Parents: 69bacc8
Author: jbertram <jb...@apache.org>
Authored: Wed Aug 5 12:17:21 2015 -0500
Committer: jbertram <jb...@apache.org>
Committed: Mon Aug 10 10:20:01 2015 -0500

----------------------------------------------------------------------
 .../extras/byteman/ClusteredGroupingTest.java   | 24 ++++++++++----------
 1 file changed, 12 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/f3be78a0/tests/extra-tests/src/test/java/org/apache/activemq/artemis/tests/extras/byteman/ClusteredGroupingTest.java
----------------------------------------------------------------------
diff --git a/tests/extra-tests/src/test/java/org/apache/activemq/artemis/tests/extras/byteman/ClusteredGroupingTest.java b/tests/extra-tests/src/test/java/org/apache/activemq/artemis/tests/extras/byteman/ClusteredGroupingTest.java
index a623a6d..9f4cf7e 100644
--- a/tests/extra-tests/src/test/java/org/apache/activemq/artemis/tests/extras/byteman/ClusteredGroupingTest.java
+++ b/tests/extra-tests/src/test/java/org/apache/activemq/artemis/tests/extras/byteman/ClusteredGroupingTest.java
@@ -56,9 +56,9 @@ public class ClusteredGroupingTest extends ClusterTestBase {
       setupServer(0, isFileStorage(), isNetty());
       setupServer(1, isFileStorage(), isNetty());
 
-      setupClusterConnection("cluster0", "queues", MessageLoadBalancingType.ON_DEMAND, 1, 0, 500, isNetty(), 0, 1);
+      setupClusterConnection("cluster0", "queues", MessageLoadBalancingType.ON_DEMAND, 1, -1, 500, isNetty(), 0, 1);
 
-      setupClusterConnection("cluster1", "queues", MessageLoadBalancingType.ON_DEMAND, 1, 0, 500, isNetty(), 1, 0);
+      setupClusterConnection("cluster1", "queues", MessageLoadBalancingType.ON_DEMAND, 1, -1, 500, isNetty(), 1, 0);
 
       setUpGroupHandler(GroupingHandlerConfiguration.TYPE.LOCAL, 0);
       setUpGroupHandler(GroupingHandlerConfiguration.TYPE.REMOTE, 1);
@@ -118,11 +118,11 @@ public class ClusteredGroupingTest extends ClusterTestBase {
       setupServer(1, isFileStorage(), isNetty());
       setupServer(2, isFileStorage(), isNetty());
 
-      setupClusterConnection("cluster0", "queues", MessageLoadBalancingType.ON_DEMAND, 1, 0, 500, isNetty(), 0, 1, 2);
+      setupClusterConnection("cluster0", "queues", MessageLoadBalancingType.ON_DEMAND, 1, -1, 500, isNetty(), 0, 1, 2);
 
-      setupClusterConnection("cluster1", "queues", MessageLoadBalancingType.ON_DEMAND, 1, 0, 500, isNetty(), 1, 0, 2);
+      setupClusterConnection("cluster1", "queues", MessageLoadBalancingType.ON_DEMAND, 1, -1, 500, isNetty(), 1, 0, 2);
 
-      setupClusterConnection("cluster2", "queues", MessageLoadBalancingType.ON_DEMAND, 1, 0, 500, isNetty(), 2, 0, 1);
+      setupClusterConnection("cluster2", "queues", MessageLoadBalancingType.ON_DEMAND, 1, -1, 500, isNetty(), 2, 0, 1);
 
       setUpGroupHandler(GroupingHandlerConfiguration.TYPE.LOCAL, 0);
       setUpGroupHandler(GroupingHandlerConfiguration.TYPE.REMOTE, 1);
@@ -190,11 +190,11 @@ public class ClusteredGroupingTest extends ClusterTestBase {
       setupServer(1, isFileStorage(), isNetty());
       setupServer(2, isFileStorage(), isNetty());
 
-      setupClusterConnection("cluster0", "queues", MessageLoadBalancingType.ON_DEMAND, 1, 0, 500, isNetty(), 0, 1, 2);
+      setupClusterConnection("cluster0", "queues", MessageLoadBalancingType.ON_DEMAND, 1, -1, 500, isNetty(), 0, 1, 2);
 
-      setupClusterConnection("cluster1", "queues", MessageLoadBalancingType.ON_DEMAND, 1, 0, 500, isNetty(), 1, 0, 2);
+      setupClusterConnection("cluster1", "queues", MessageLoadBalancingType.ON_DEMAND, 1, -1, 500, isNetty(), 1, 0, 2);
 
-      setupClusterConnection("cluster2", "queues", MessageLoadBalancingType.ON_DEMAND, 1, 0, 500, isNetty(), 2, 0, 1);
+      setupClusterConnection("cluster2", "queues", MessageLoadBalancingType.ON_DEMAND, 1, -1, 500, isNetty(), 2, 0, 1);
 
       setUpGroupHandler(GroupingHandlerConfiguration.TYPE.LOCAL, 0);
       setUpGroupHandler(GroupingHandlerConfiguration.TYPE.REMOTE, 1);
@@ -263,13 +263,13 @@ public class ClusteredGroupingTest extends ClusterTestBase {
       setupServer(2, isFileStorage(), isNetty());
       setupServer(3, isFileStorage(), isNetty());
 
-      setupClusterConnection("cluster0", "queues", MessageLoadBalancingType.ON_DEMAND, 1, 0, 500, isNetty(), 0, 1, 2, 3);
+      setupClusterConnection("cluster0", "queues", MessageLoadBalancingType.ON_DEMAND, 1, -1, 500, isNetty(), 0, 1, 2, 3);
 
-      setupClusterConnection("cluster1", "queues", MessageLoadBalancingType.ON_DEMAND, 1, 0, 500, isNetty(), 1, 0, 2, 3);
+      setupClusterConnection("cluster1", "queues", MessageLoadBalancingType.ON_DEMAND, 1, -1, 500, isNetty(), 1, 0, 2, 3);
 
-      setupClusterConnection("cluster2", "queues", MessageLoadBalancingType.ON_DEMAND, 1, 0, 500, isNetty(), 2, 0, 1, 3);
+      setupClusterConnection("cluster2", "queues", MessageLoadBalancingType.ON_DEMAND, 1, -1, 500, isNetty(), 2, 0, 1, 3);
 
-      setupClusterConnection("cluster3", "queues", MessageLoadBalancingType.ON_DEMAND, 1, 0, 500, isNetty(), 3, 1, 2, 3);
+      setupClusterConnection("cluster3", "queues", MessageLoadBalancingType.ON_DEMAND, 1, -1, 500, isNetty(), 3, 1, 2, 3);
 
       setUpGroupHandler(GroupingHandlerConfiguration.TYPE.LOCAL, 0);
       setUpGroupHandler(GroupingHandlerConfiguration.TYPE.REMOTE, 1);


[3/5] activemq-artemis git commit: ARTEMIS-179 fix scale-down

Posted by cl...@apache.org.
ARTEMIS-179 fix scale-down


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

Branch: refs/heads/master
Commit: 3bb88c60ca683f5ff6788c0c5758a96210e346b5
Parents: 682cad6
Author: jbertram <jb...@apache.org>
Authored: Thu Aug 6 16:28:56 2015 -0500
Committer: jbertram <jb...@apache.org>
Committed: Mon Aug 10 10:23:30 2015 -0500

----------------------------------------------------------------------
 .../artemis/core/client/impl/ClientSessionFactoryImpl.java         | 2 +-
 .../activemq/artemis/core/server/cluster/impl/BridgeImpl.java      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/3bb88c60/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java
index aa27581..acdf1e8 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionFactoryImpl.java
@@ -579,7 +579,7 @@ public class ClientSessionFactoryImpl implements ClientSessionFactoryInternal, C
                sessionsToClose = new HashSet<ClientSessionInternal>(sessions);
             }
             callFailoverListeners(FailoverEventType.FAILOVER_FAILED);
-            callSessionFailureListeners(me, true, false);
+            callSessionFailureListeners(me, true, false, scaleDownTargetNodeID);
          }
       }
       finally {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/3bb88c60/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java
index 3ef7b24..eb99fcc 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java
@@ -565,7 +565,7 @@ public class BridgeImpl implements Bridge, SessionFailureListener, SendAcknowled
       catch (Throwable dontCare) {
       }
 
-      if (scaleDownTargetNodeID != null && !scaleDownTargetNodeID.equals(nodeUUID)) {
+      if (scaleDownTargetNodeID != null && !scaleDownTargetNodeID.equals(nodeUUID.toString())) {
          synchronized (this) {
             try {
                ActiveMQServerLogger.LOGGER.debug("Moving " + queue.getMessageCount() + " messages from " + queue.getName() + " to " + scaleDownTargetNodeID);


[5/5] activemq-artemis git commit: This closes #117 ARTEMIS-179 on reconnection issues

Posted by cl...@apache.org.
This closes #117 ARTEMIS-179 on reconnection issues

Each commit part of this merge was left here distinct so there would be a record of why each specific change was made since they had potentially far-reaching consequences.


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

Branch: refs/heads/master
Commit: 126be4ce24e1bc6c364f6f6a329dc7e0b1405039
Parents: 69bacc8 38188cd
Author: Clebert Suconic <cl...@apache.org>
Authored: Tue Aug 11 11:21:56 2015 -0400
Committer: Clebert Suconic <cl...@apache.org>
Committed: Tue Aug 11 11:21:56 2015 -0400

----------------------------------------------------------------------
 .../client/impl/ClientSessionFactoryImpl.java   |  2 +-
 .../core/server/cluster/impl/BridgeImpl.java    |  5 +--
 .../cluster/impl/ClusterConnectionBridge.java   |  4 +-
 .../cluster/impl/ClusterConnectionImpl.java     |  4 +-
 .../extras/byteman/ClusteredGroupingTest.java   | 24 +++++------
 .../jms/cluster/BindingsClusterTest.java        | 42 +++++++++++---------
 6 files changed, 44 insertions(+), 37 deletions(-)
----------------------------------------------------------------------



[4/5] activemq-artemis git commit: ARTEMIS-179 fix BindingsClusterTest

Posted by cl...@apache.org.
ARTEMIS-179 fix BindingsClusterTest


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

Branch: refs/heads/master
Commit: 38188cdf2e6a1a04c6b900ec6bbc6bd49a406b4b
Parents: 3bb88c6
Author: jbertram <jb...@apache.org>
Authored: Mon Aug 10 16:19:01 2015 -0500
Committer: jbertram <jb...@apache.org>
Committed: Mon Aug 10 16:19:01 2015 -0500

----------------------------------------------------------------------
 .../jms/cluster/BindingsClusterTest.java        | 42 +++++++++++---------
 1 file changed, 23 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/38188cdf/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/BindingsClusterTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/BindingsClusterTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/BindingsClusterTest.java
index 29c0edc..674c9f1 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/BindingsClusterTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/cluster/BindingsClusterTest.java
@@ -402,28 +402,32 @@ public class BindingsClusterTest extends JMSClusteredTestBase {
    }
 
    private void crash() throws Exception {
+      /*
+       * Rather than just calling stop() on the server here we want to simulate an actual node crash or bridge failure
+       * so the bridge's failure listener needs to get something other than a DISCONNECTED message.  In this case we
+       * simulate a NOT_CONNECTED exception.
+       */
+      final CountDownLatch latch = new CountDownLatch(1);
+      ClusterConnectionImpl next = (ClusterConnectionImpl) server1.getClusterManager().getClusterConnections().iterator().next();
+      BridgeImpl bridge = (BridgeImpl) next.getRecords().values().iterator().next().getBridge();
+      RemotingConnection forwardingConnection = getForwardingConnection(bridge);
+      forwardingConnection.addFailureListener(new FailureListener() {
+         @Override
+         public void connectionFailed(ActiveMQException exception, boolean failedOver) {
+            latch.countDown();
+         }
+
+         @Override
+         public void connectionFailed(final ActiveMQException me, boolean failedOver, String scaleDownTargetNodeID) {
+            connectionFailed(me, failedOver);
+         }
+      });
+      forwardingConnection.fail(new ActiveMQNotConnectedException());
+      assertTrue(latch.await(5000, TimeUnit.MILLISECONDS));
+
       if (crash) {
          jmsServer2.stop();
       }
-      else {
-         final CountDownLatch latch = new CountDownLatch(1);
-         ClusterConnectionImpl next = (ClusterConnectionImpl) server1.getClusterManager().getClusterConnections().iterator().next();
-         BridgeImpl bridge = (BridgeImpl) next.getRecords().values().iterator().next().getBridge();
-         RemotingConnection forwardingConnection = getForwardingConnection(bridge);
-         forwardingConnection.addFailureListener(new FailureListener() {
-            @Override
-            public void connectionFailed(ActiveMQException exception, boolean failedOver) {
-               latch.countDown();
-            }
-
-            @Override
-            public void connectionFailed(final ActiveMQException me, boolean failedOver, String scaleDownTargetNodeID) {
-               connectionFailed(me, failedOver);
-            }
-         });
-         forwardingConnection.fail(new ActiveMQNotConnectedException());
-         assertTrue(latch.await(5000, TimeUnit.MILLISECONDS));
-      }
    }
 
    private void restart() throws Exception {


[2/5] activemq-artemis git commit: ARTEMIS-179 Do not reconnect bridge on DISCONNECT

Posted by cl...@apache.org.
ARTEMIS-179 Do not reconnect bridge on DISCONNECT

Note: this breaks scale-down because the bindings are removed.


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

Branch: refs/heads/master
Commit: 682cad63f3e5c8d59be92602de32e523aae032ca
Parents: f3be78a
Author: jbertram <jb...@apache.org>
Authored: Wed Aug 5 12:37:53 2015 -0500
Committer: jbertram <jb...@apache.org>
Committed: Mon Aug 10 10:22:21 2015 -0500

----------------------------------------------------------------------
 .../activemq/artemis/core/server/cluster/impl/BridgeImpl.java    | 3 +--
 .../core/server/cluster/impl/ClusterConnectionBridge.java        | 4 +++-
 .../artemis/core/server/cluster/impl/ClusterConnectionImpl.java  | 4 +++-
 3 files changed, 7 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/682cad63/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java
index 9853455..3ef7b24 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeImpl.java
@@ -587,8 +587,7 @@ public class BridgeImpl implements Bridge, SessionFailureListener, SendAcknowled
       else {
          ActiveMQServerLogger.LOGGER.debug("Received invalid scaleDownTargetNodeID: " + scaleDownTargetNodeID);
 
-         //we never fail permanently here, this only happens once all reconnect tries have happened
-         fail(false);
+         fail(me.getType() == ActiveMQExceptionType.DISCONNECTED);
       }
 
       tryScheduleRetryReconnect(me.getType());

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/682cad63/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionBridge.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionBridge.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionBridge.java
index c7e70c0..e336b33 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionBridge.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionBridge.java
@@ -340,7 +340,9 @@ public class ClusterConnectionBridge extends BridgeImpl {
 
    @Override
    protected void tryScheduleRetryReconnect(final ActiveMQExceptionType type) {
-      scheduleRetryConnect();
+      if (type != ActiveMQExceptionType.DISCONNECTED) {
+         scheduleRetryConnect();
+      }
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/682cad63/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java
index c4666b9..e42f46b 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImpl.java
@@ -1428,7 +1428,9 @@ public final class ClusterConnectionImpl implements ClusterConnection, AfterConn
       ActiveMQServerLogger.LOGGER.debug("Removing record for: " + targetNodeID);
       MessageFlowRecord record = records.remove(targetNodeID);
       try {
-         record.close();
+         if (record != null) {
+            record.close();
+         }
       }
       catch (Exception e) {
          e.printStackTrace();