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/07/19 19:01:52 UTC
[activemq-artemis] 02/03: ARTEMIS-2428 Exposing timeout on
configuration and changing it to 0 on the testsuite
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
commit 2d7d714260297054ad38c4a52e43dcd4170cec27
Author: Clebert Suconic <cl...@apache.org>
AuthorDate: Fri Jul 19 11:57:53 2019 -0400
ARTEMIS-2428 Exposing timeout on configuration and changing it to 0 on the testsuite
---
.../remoting/impl/netty/TransportConstants.java | 34 ++++++++++++++++++++++
.../remoting/impl/netty/TransportConstantTest.java | 32 ++++++++++++++++++++
.../core/remoting/impl/netty/NettyAcceptor.java | 34 ++++++++++++++++++++--
.../activemq/artemis/uri/AcceptorParserTest.java | 19 ++++++++++++
pom.xml | 2 +-
5 files changed, 118 insertions(+), 3 deletions(-)
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java
index 50da179..54b2061 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstants.java
@@ -22,9 +22,12 @@ import java.util.Set;
import io.netty.util.Version;
import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
+import org.jboss.logging.Logger;
public class TransportConstants {
+ private static final Logger logger = Logger.getLogger(TransportConstants.class);
+
public static final String SSL_ENABLED_PROP_NAME = "sslEnabled";
public static final String SSL_KRB5_CONFIG_PROP_NAME = "sslKrb5Config";
@@ -281,6 +284,35 @@ public class TransportConstants {
public static final int DEFAULT_HANDSHAKE_TIMEOUT = 10;
+ public static final String QUIET_PERIOD = "quietPeriod";
+
+ /** We let this to be defined as a System Variable, as we need a different timeout over our testsuite.
+ * When running on a real server, this is the default we want.
+ * When running on a test suite, we need it to be 0, You should see a property on the main pom.xml.
+ */
+ public static final int DEFAULT_QUIET_PERIOD = parseDefaultVariable("DEFAULT_QUIET_PERIOD", 100);
+
+ public static final String SHUTDOWN_TIMEOUT = "shutdownTimeout";
+
+ /** We let this to be defined as a System Variable, as we need a different timeout over our testsuite.
+ * When running on a real server, this is the default we want.
+ * When running on a test suite, we need it to be 0, You should see a property on the main pom.xml */
+ public static final int DEFAULT_SHUTDOWN_TIMEOUT = parseDefaultVariable("DEFAULT_SHUTDOWN_TIMEOUT", 3_000);
+
+ private static int parseDefaultVariable(String variableName, int defaultValue) {
+ String variable = System.getProperty(TransportConstants.class.getName() + "." + variableName);
+ if (variable != null) {
+ try {
+ return Integer.parseInt(variable);
+ } catch (Throwable ignored) {
+ logger.debug(ignored);
+ }
+ }
+
+ return defaultValue;
+ }
+
+
static {
Set<String> allowableAcceptorKeys = new HashSet<>();
allowableAcceptorKeys.add(TransportConstants.SSL_ENABLED_PROP_NAME);
@@ -332,6 +364,8 @@ public class TransportConstants {
allowableAcceptorKeys.add(TransportConstants.CRL_PATH_PROP_NAME);
allowableAcceptorKeys.add(TransportConstants.HANDSHAKE_TIMEOUT);
allowableAcceptorKeys.add(TransportConstants.SSL_PROVIDER);
+ allowableAcceptorKeys.add(TransportConstants.SHUTDOWN_TIMEOUT);
+ allowableAcceptorKeys.add(TransportConstants.QUIET_PERIOD);
ALLOWABLE_ACCEPTOR_KEYS = Collections.unmodifiableSet(allowableAcceptorKeys);
diff --git a/artemis-core-client/src/test/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstantTest.java b/artemis-core-client/src/test/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstantTest.java
new file mode 100644
index 0000000..344ab7c
--- /dev/null
+++ b/artemis-core-client/src/test/java/org/apache/activemq/artemis/core/remoting/impl/netty/TransportConstantTest.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.artemis.core.remoting.impl.netty;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TransportConstantTest {
+
+ /** We change the default on the main pom.xml
+ * This is just validating the pom still works */
+ @Test
+ public void testDefaultOnPom() {
+ Assert.assertEquals("It is expected to have the default at 0 on the testsuite", 0, TransportConstants.DEFAULT_QUIET_PERIOD);
+ Assert.assertEquals("It is expected to have the default at 0 on the testsuite", 0, TransportConstants.DEFAULT_SHUTDOWN_TIMEOUT);
+ }
+}
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java
index 418e9a9..b9fc72c 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/remoting/impl/netty/NettyAcceptor.java
@@ -101,6 +101,9 @@ import org.jboss.logging.Logger;
*/
public class NettyAcceptor extends AbstractAcceptor {
+ private static final Logger logger = Logger.getLogger(NettyAcceptor.class);
+
+
public static String INVM_ACCEPTOR_TYPE = "IN-VM";
public static String NIO_ACCEPTOR_TYPE = "NIO";
public static String EPOLL_ACCEPTOR_TYPE = "EPOLL";
@@ -200,6 +203,12 @@ public class NettyAcceptor extends AbstractAcceptor {
private NotificationService notificationService;
+ /** The amount of time we wait before new tasks are added during a shutdown period. */
+ private int quietPeriod;
+
+ /** The total amount of time we wait before a hard shutdown. */
+ private int shutdownTimeout;
+
private boolean paused;
private BatchFlusher flusher;
@@ -216,7 +225,6 @@ public class NettyAcceptor extends AbstractAcceptor {
private Map<String, Object> extraConfigs;
- private static final Logger logger = Logger.getLogger(NettyAcceptor.class);
final AtomicBoolean warningPrinted = new AtomicBoolean(false);
@@ -261,6 +269,10 @@ public class NettyAcceptor extends AbstractAcceptor {
this.protocolsString = getProtocols(protocolMap);
+ this.quietPeriod = ConfigurationHelper.getIntProperty(TransportConstants.QUIET_PERIOD, TransportConstants.DEFAULT_QUIET_PERIOD, configuration);
+
+ this.shutdownTimeout = ConfigurationHelper.getIntProperty(TransportConstants.SHUTDOWN_TIMEOUT, TransportConstants.DEFAULT_SHUTDOWN_TIMEOUT, configuration);
+
host = ConfigurationHelper.getStringProperty(TransportConstants.HOST_PROP_NAME, TransportConstants.DEFAULT_HOST, configuration);
port = ConfigurationHelper.getIntProperty(TransportConstants.PORT_PROP_NAME, TransportConstants.DEFAULT_PORT, configuration);
if (sslEnabled) {
@@ -719,7 +731,7 @@ public class NettyAcceptor extends AbstractAcceptor {
// Shutdown the EventLoopGroup if no new task was added for 100ms or if
// 3000ms elapsed.
- eventLoopGroup.shutdownGracefully(100, 3000, TimeUnit.MILLISECONDS).addListener(f -> callback.run());
+ eventLoopGroup.shutdownGracefully(quietPeriod, shutdownTimeout, TimeUnit.MILLISECONDS).addListener(f -> callback.run());
eventLoopGroup = null;
}
@@ -787,6 +799,24 @@ public class NettyAcceptor extends AbstractAcceptor {
return new ActiveMQServerChannelHandler(channelGroup, handler, new Listener(), failureExecutor);
}
+ public int getQuietPeriod() {
+ return quietPeriod;
+ }
+
+ public NettyAcceptor setQuietPeriod(int quietPeriod) {
+ this.quietPeriod = quietPeriod;
+ return this;
+ }
+
+ public int getShutdownTimeout() {
+ return shutdownTimeout;
+ }
+
+ public NettyAcceptor setShutdownTimeout(int shutdownTimeout) {
+ this.shutdownTimeout = shutdownTimeout;
+ return this;
+ }
+
private static String getProtocols(Map<String, ProtocolManager> protocolManager) {
StringBuilder sb = new StringBuilder();
if (protocolManager != null) {
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/uri/AcceptorParserTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/uri/AcceptorParserTest.java
index 527e967..0d8e206 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/uri/AcceptorParserTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/uri/AcceptorParserTest.java
@@ -17,10 +17,14 @@
package org.apache.activemq.artemis.uri;
+import java.util.HashMap;
import java.util.List;
import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.core.config.ConfigurationUtils;
+import org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptor;
+import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
+import org.apache.activemq.artemis.utils.ConfigurationHelper;
import org.junit.Assert;
import org.junit.Test;
@@ -37,6 +41,21 @@ public class AcceptorParserTest {
}
@Test
+ public void testAcceptorShutdownTimeout() {
+ List<TransportConfiguration> configs = ConfigurationUtils.parseAcceptorURI("test", "tcp://localhost:8080?quietPeriod=33;shutdownTimeout=55");
+
+ Assert.assertEquals(1, configs.size());
+
+ Assert.assertEquals(33, ConfigurationHelper.getIntProperty(TransportConstants.QUIET_PERIOD, -1, configs.get(0).getParams()));
+ Assert.assertEquals(55, ConfigurationHelper.getIntProperty(TransportConstants.SHUTDOWN_TIMEOUT, -1, configs.get(0).getParams()));
+
+ NettyAcceptor nettyAcceptor = new NettyAcceptor("name", null, configs.get(0).getParams(), null, null, null, null, new HashMap<>());
+
+ Assert.assertEquals(33, nettyAcceptor.getQuietPeriod());
+ Assert.assertEquals(55, nettyAcceptor.getShutdownTimeout());
+ }
+
+ @Test
public void testAcceptorWithQueryParamEscapes() throws Exception {
List<TransportConfiguration> configs = ConfigurationUtils.parseAcceptorURI("test", "tcp://0.0.0.0:5672?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;virtualTopicConsumerWildcards=Consumer.*.%3E%3B2");
diff --git a/pom.xml b/pom.xml
index 4c79a06..23570df 100644
--- a/pom.xml
+++ b/pom.xml
@@ -169,7 +169,7 @@
-->
- <activemq-surefire-argline>-Dbrokerconfig.maxDiskUsage=100 -Djava.util.logging.manager=org.jboss.logmanager.LogManager
+ <activemq-surefire-argline>-Dbrokerconfig.maxDiskUsage=100 -Dorg.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants.DEFAULT_QUIET_PERIOD=0 -Dorg.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants.DEFAULT_SHUTDOWN_TIMEOUT=0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager
-Dlogging.configuration="file:${activemq.basedir}/tests/config/logging.properties"
-Djava.library.path="${activemq.basedir}/target/bin/lib/linux-x86_64:${activemq.basedir}/target/bin/lib/linux-i686" -Djgroups.bind_addr=localhost -Dorg.apache.activemq.artemis.api.core.UDPBroadcastEndpointFactory.localBindAddress=localhost
-Djava.net.preferIPv4Stack=true -Dbasedir=${basedir}