mirror of
https://github.com/apache/activemq-artemis.git
synced 2025-02-10 03:55:58 +00:00
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. (cherry picked from commit 06986e4ee1eb32fc2642b111ca3955518f684adb)
This commit is contained in:
parent
21f86a4844
commit
004c86804f
@ -307,7 +307,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;
|
||||
@ -351,7 +351,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;
|
||||
|
@ -75,6 +75,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 -----------------------------------------------------------------------------
|
||||
@ -1983,6 +1989,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
|
||||
*/
|
||||
|
@ -1566,5 +1566,11 @@ public interface ActiveMQServerLogger extends BasicLogger {
|
||||
void journalCannotFindPageTX(Long id);
|
||||
|
||||
|
||||
@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);
|
||||
}
|
||||
|
@ -45,6 +45,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;
|
||||
@ -814,6 +815,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 -----------------------------------------------------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user