ARTEMIS-2428 Exposing timeout on configuration and changing it to 0 on the testsuite

This commit is contained in:
Clebert Suconic 2019-07-19 11:57:53 -04:00
parent 89cc07c7d8
commit 2d7d714260
5 changed files with 118 additions and 3 deletions

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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) {

View File

@ -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;
@ -36,6 +40,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");

View File

@ -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}