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 2019/02/19 19:46:25 UTC

[activemq-artemis] branch master updated: ARTEMIS-2254 support useTopologyForLoadBalancing on JMS cf config

This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/master by this push:
     new 0cffe03  ARTEMIS-2254 support useTopologyForLoadBalancing on JMS cf config
     new 5b535da  This closes #2554
0cffe03 is described below

commit 0cffe03d2ed84ee46d89a9b9fe6cbfbd65b343e3
Author: Justin Bertram <jb...@apache.org>
AuthorDate: Mon Feb 18 15:32:31 2019 -0600

    ARTEMIS-2254 support useTopologyForLoadBalancing on JMS cf config
---
 .../config/ConnectionFactoryConfiguration.java     |  4 +++
 .../impl/ConnectionFactoryConfigurationImpl.java   | 22 +++++++++++--
 .../jms/server/impl/JMSServerManagerImpl.java      |  1 +
 .../ConnectionFactorySerializationTest.java        | 37 ++++++++++++++++++++++
 4 files changed, 62 insertions(+), 2 deletions(-)

diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/ConnectionFactoryConfiguration.java b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/ConnectionFactoryConfiguration.java
index eee7431..97a1b64 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/ConnectionFactoryConfiguration.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/ConnectionFactoryConfiguration.java
@@ -197,4 +197,8 @@ public interface ConnectionFactoryConfiguration extends EncodingSupport {
    boolean isEnableSharedClientID();
 
    ConnectionFactoryConfiguration setEnableSharedClientID(boolean enabled);
+
+   boolean getUseTopologyForLoadBalancing();
+
+   ConnectionFactoryConfiguration setUseTopologyForLoadBalancing(boolean useTopologyForLoadBalancing);
 }
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java
index e1718bd..259b2c0 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/config/impl/ConnectionFactoryConfigurationImpl.java
@@ -129,6 +129,8 @@ public class ConnectionFactoryConfigurationImpl implements ConnectionFactoryConf
 
    private boolean enableSharedClientID = ActiveMQClient.DEFAULT_ENABLED_SHARED_CLIENT_ID;
 
+   private boolean useTopologyForLoadBalancing = ActiveMQClient.DEFAULT_USE_TOPOLOGY_FOR_LOADBALANCING;
+
 
    // Static --------------------------------------------------------
 
@@ -643,8 +645,9 @@ public class ConnectionFactoryConfigurationImpl implements ConnectionFactoryConf
 
       enable1xPrefixes = buffer.readableBytes() > 0 ? buffer.readBoolean() : ActiveMQJMSClient.DEFAULT_ENABLE_1X_PREFIXES;
 
-      enableSharedClientID = buffer.readableBytes() > 0 ? buffer.readBoolean() : ActiveMQClient.DEFAULT_ENABLED_SHARED_CLIENT_ID;
+      enableSharedClientID = buffer.readableBytes() > 0 ? BufferHelper.readNullableBoolean(buffer) : ActiveMQClient.DEFAULT_ENABLED_SHARED_CLIENT_ID;
 
+      useTopologyForLoadBalancing = buffer.readableBytes() > 0 ? BufferHelper.readNullableBoolean(buffer) : ActiveMQClient.DEFAULT_USE_TOPOLOGY_FOR_LOADBALANCING;
    }
 
    @Override
@@ -738,6 +741,8 @@ public class ConnectionFactoryConfigurationImpl implements ConnectionFactoryConf
       buffer.writeBoolean(enable1xPrefixes);
 
       BufferHelper.writeNullableBoolean(buffer, enableSharedClientID);
+
+      BufferHelper.writeNullableBoolean(buffer, useTopologyForLoadBalancing);
    }
 
    @Override
@@ -856,7 +861,9 @@ public class ConnectionFactoryConfigurationImpl implements ConnectionFactoryConf
          DataConstants.SIZE_BOOLEAN +
          // enable1xPrefixes;
 
-         BufferHelper.sizeOfNullableBoolean(enableSharedClientID);
+         BufferHelper.sizeOfNullableBoolean(enableSharedClientID) +
+
+         BufferHelper.sizeOfNullableBoolean(useTopologyForLoadBalancing);
 
       return size;
    }
@@ -936,6 +943,17 @@ public class ConnectionFactoryConfigurationImpl implements ConnectionFactoryConf
       return enableSharedClientID;
    }
 
+   @Override
+   public ConnectionFactoryConfiguration setUseTopologyForLoadBalancing(boolean useTopologyForLoadBalancing) {
+      this.useTopologyForLoadBalancing = useTopologyForLoadBalancing;
+      return this;
+   }
+
+   @Override
+   public boolean getUseTopologyForLoadBalancing() {
+      return useTopologyForLoadBalancing;
+   }
+
    // Public --------------------------------------------------------
 
    // Package protected ---------------------------------------------
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
index 27abbbe..2beb9fe 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
@@ -1222,6 +1222,7 @@ public class JMSServerManagerImpl implements JMSServerManager, ActivateCallback
       cf.setInitialMessagePacketSize(cfConfig.getInitialMessagePacketSize());
       cf.setEnable1xPrefixes(cfConfig.isEnable1xPrefixes());
       cf.setEnableSharedClientID(cfConfig.isEnableSharedClientID());
+      cf.setUseTopologyForLoadBalancing(cfConfig.getUseTopologyForLoadBalancing());
 
       return cf;
    }
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/connection/ConnectionFactorySerializationTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/connection/ConnectionFactorySerializationTest.java
index 7366bd9..1ccab41 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/connection/ConnectionFactorySerializationTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/connection/ConnectionFactorySerializationTest.java
@@ -32,6 +32,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.activemq.artemis.api.core.ActiveMQBuffer;
+import org.apache.activemq.artemis.api.core.ActiveMQBuffers;
 import org.apache.activemq.artemis.api.core.DiscoveryGroupConfiguration;
 import org.apache.activemq.artemis.api.core.JGroupsFileBroadcastEndpointFactory;
 import org.apache.activemq.artemis.api.core.JGroupsPropertiesBroadcastEndpointFactory;
@@ -151,6 +153,41 @@ public class ConnectionFactorySerializationTest extends JMSTestBase {
       }
    }
 
+   @Test
+   public void testConnectionFactoryEncodeDecode() throws Exception {
+      jmsServer.getActiveMQServer().getConfiguration().addConnectorConfiguration("foo", "tcp://localhost:1234");
+
+      ArrayList<String> connectorNames = new ArrayList<>();
+      connectorNames.add("foo");
+      ConnectionFactoryConfiguration cfc1 = new ConnectionFactoryConfigurationImpl()
+         .setName("MyConnectionFactory")
+         .setConnectorNames(connectorNames)
+         .setUseTopologyForLoadBalancing(false)
+         .setEnableSharedClientID(true);
+
+      ActiveMQBuffer buffer = ActiveMQBuffers.dynamicBuffer(1024);
+      cfc1.encode(buffer);
+      byte[] bytes = new byte[buffer.readableBytes()];
+      buffer.readBytes(bytes);
+      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+      outputStream.write(bytes);
+      ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
+      buffer = ActiveMQBuffers.dynamicBuffer(1024);
+      while (true) {
+         int byteRead = inputStream.read();
+         if (byteRead < 0) {
+            break;
+         }
+
+         buffer.writeByte((byte)byteRead);
+      }
+      ConnectionFactoryConfigurationImpl cfc2 = new ConnectionFactoryConfigurationImpl();
+      cfc2.decode(buffer);
+
+      assertEquals(cfc1.getUseTopologyForLoadBalancing(), cfc2.getUseTopologyForLoadBalancing());
+      assertEquals(cfc1.isEnableSharedClientID(), cfc2.isEnableSharedClientID());
+   }
+
    private void createDiscoveryFactoryUDP() throws Exception {
       // Deploy a connection factory with discovery
       List<String> bindings = new ArrayList<>();