activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From clebertsuco...@apache.org
Subject [2/2] activemq-artemis git commit: ARTEMIS-1261 Adjust default confirmation-window-size for bridges
Date Thu, 29 Jun 2017 16:56:41 GMT
ARTEMIS-1261 Adjust default confirmation-window-size for bridges

The default id-cache-size is 20000 and the default
confirmation-window-size is 1MB. It turns out the 1MB
size is too small for id-cache-size.

To fix it we adjust the confirmation-window-size to 10MB. Also
a test is added to guarantee it won't break this rule when this
default value is to be changed to any new value.


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

Branch: refs/heads/master
Commit: 06986e4ee1eb32fc2642b111ca3955518f684adb
Parents: aa93214
Author: Howard Gao <howard.gao@gmail.com>
Authored: Thu Jun 29 12:03:38 2017 +0800
Committer: Clebert Suconic <clebertsuconic@apache.org>
Committed: Thu Jun 29 12:56:16 2017 -0400

----------------------------------------------------------------------
 .../config/ActiveMQDefaultConfiguration.java    |  4 +--
 .../core/config/impl/ConfigurationImpl.java     | 26 ++++++++++++++++++++
 .../core/server/ActiveMQServerLogger.java       |  4 +++
 .../cluster/impl/ClusterConnectionImpl.java     |  5 ++++
 .../core/config/impl/FileConfigurationTest.java |  9 +++++++
 5 files changed, 46 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/06986e4e/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
index 2ff6a0a..899dc2c 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
@@ -304,7 +304,7 @@ public final class ActiveMQDefaultConfiguration {
    private static boolean DEFAULT_BRIDGE_DUPLICATE_DETECTION = true;
 
    // Once the bridge has received this many bytes, it sends a confirmation
-   private static int DEFAULT_BRIDGE_CONFIRMATION_WINDOW_SIZE = 1048576;
+   private static int DEFAULT_BRIDGE_CONFIRMATION_WINDOW_SIZE = 1024 * 1024 * 10;
 
    // Producer flow control
    private static int DEFAULT_BRIDGE_PRODUCER_WINDOW_SIZE = -1;
@@ -348,7 +348,7 @@ public final class ActiveMQDefaultConfiguration {
    private static int DEFAULT_CLUSTER_MAX_HOPS = 1;
 
    // The size (in bytes) of the window used for confirming data from the server connected
to.
-   private static int DEFAULT_CLUSTER_CONFIRMATION_WINDOW_SIZE = 1048576;
+   private static int DEFAULT_CLUSTER_CONFIRMATION_WINDOW_SIZE = 1024 * 1024 * 10;
 
    // How long to wait for a reply if in the middle of a fail-over. -1 means wait forever.
    private static long DEFAULT_CLUSTER_CALL_FAILOVER_TIMEOUT = -1;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/06986e4e/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
index f0a6067..9195cff 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
@@ -79,6 +79,12 @@ public class ConfigurationImpl implements Configuration, Serializable {
 
    public static final JournalType DEFAULT_JOURNAL_TYPE = JournalType.ASYNCIO;
 
+   private static final int DEFAULT_JMS_MESSAGE_SIZE = 1864;
+
+   private static final int RANGE_SIZE_MIN = 0;
+
+   private static final int RANGE_SZIE_MAX = 4;
+
    private static final long serialVersionUID = 4077088945050267843L;
 
    // Attributes -----------------------------------------------------------------------------
@@ -2058,6 +2064,26 @@ public class ConfigurationImpl implements Configuration, Serializable
{
       return this;
    }
 
+   public static boolean checkoutDupCacheSize(final int windowSize, final int idCacheSize)
{
+      final int msgNumInFlight = windowSize / DEFAULT_JMS_MESSAGE_SIZE;
+
+      if (msgNumInFlight == 0) {
+         return true;
+      }
+
+      boolean sizeGood = false;
+
+      if (idCacheSize >= msgNumInFlight) {
+         int r = idCacheSize / msgNumInFlight;
+
+         // This setting is here to accomodate the current default setting.
+         if ( (r >= RANGE_SIZE_MIN) && (r <= RANGE_SZIE_MAX)) {
+            sizeGood = true;
+         }
+      }
+      return sizeGood;
+   }
+
    /**
     * It will find the right location of a subFolder, related to artemisInstance
     */

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/06986e4e/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java
index 461c662..431302f 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServerLogger.java
@@ -1590,4 +1590,8 @@ public interface ActiveMQServerLogger extends BasicLogger {
    @LogMessage(level = Logger.Level.INFO)
    @Message(id = 224077, value = "UnDeploying queue {0}", format = Message.Format.MESSAGE_FORMAT)
    void undeployQueue(SimpleString queueName);
+
+   @LogMessage(level = Logger.Level.WARN)
+   @Message(id = 224078, value = "The size of duplicate cache detection (<id_cache-size/>)
appears to be too large {0}. It should be no greater than the number of messages that can
be squeezed into conformation buffer (<confirmation-window-size/>) {1}.", format = Message.Format.MESSAGE_FORMAT)
+   void duplicateCacheSizeWarning(int idCacheSize, int confirmationWindowSize);
 }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/06986e4e/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 d267341..2f1fe87 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
@@ -46,6 +46,7 @@ import org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl;
 import org.apache.activemq.artemis.core.client.impl.ServerLocatorInternal;
 import org.apache.activemq.artemis.core.client.impl.Topology;
 import org.apache.activemq.artemis.core.client.impl.TopologyMemberImpl;
+import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
 import org.apache.activemq.artemis.core.postoffice.Binding;
 import org.apache.activemq.artemis.core.postoffice.Bindings;
 import org.apache.activemq.artemis.core.postoffice.PostOffice;
@@ -821,6 +822,10 @@ public final class ClusterConnectionImpl implements ClusterConnection,
AfterConn
       if (start) {
          bridge.start();
       }
+
+      if ( !ConfigurationImpl.checkoutDupCacheSize(serverLocator.getConfirmationWindowSize(),server.getConfiguration().getIDCacheSize()))
{
+         ActiveMQServerLogger.LOGGER.duplicateCacheSizeWarning(server.getConfiguration().getIDCacheSize(),
serverLocator.getConfirmationWindowSize());
+      }
    }
 
    // Inner classes -----------------------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/06986e4e/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
index 1d1f53b..ddff9af 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java
@@ -634,6 +634,15 @@ public class FileConfigurationTest extends ConfigurationImplTest {
       assertTrue(brokerPlugins.get(1) instanceof EmptyPlugin2);
    }
 
+   @Test
+   public void testDefaultConstraints() {
+      int defaultConfirmationWinSize = ActiveMQDefaultConfiguration.getDefaultClusterConfirmationWindowSize();
+      int defaultIdCacheSize = ActiveMQDefaultConfiguration.getDefaultIdCacheSize();
+      assertTrue("check failed, " + defaultConfirmationWinSize + ":" + defaultIdCacheSize,
ConfigurationImpl.checkoutDupCacheSize(defaultConfirmationWinSize, defaultIdCacheSize));
+      defaultConfirmationWinSize = ActiveMQDefaultConfiguration.getDefaultBridgeConfirmationWindowSize();
+      assertTrue("check failed, " + defaultConfirmationWinSize + ":" + defaultIdCacheSize,
ConfigurationImpl.checkoutDupCacheSize(defaultConfirmationWinSize, defaultIdCacheSize));
+   }
+
    @Override
    protected Configuration createConfiguration() throws Exception {
       FileConfiguration fc = new FileConfiguration();


Mime
View raw message