From 0cffe03d2ed84ee46d89a9b9fe6cbfbd65b343e3 Mon Sep 17 00:00:00 2001 From: Justin Bertram Date: Mon, 18 Feb 2019 15:32:31 -0600 Subject: [PATCH] ARTEMIS-2254 support useTopologyForLoadBalancing on JMS cf config --- .../ConnectionFactoryConfiguration.java | 4 ++ .../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 eee7431431..97a1b6462a 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 e1718bd077..259b2c0ade 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 27abbbe8af..2beb9feef1 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 7366bd9516..1ccab41905 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 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 bindings = new ArrayList<>();