Repository: activemq-artemis Updated Branches: refs/heads/1.x 38cd5c9be -> 9b3cc8c32
ARTEMIS-873 support byte notation in XML config (cherry picked from commit 113b28577c792a9fef5ac74abe6cd65bc08ffcf2) Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/9b3cc8c3 Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/9b3cc8c3 Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/9b3cc8c3 Branch: refs/heads/1.x Commit: 9b3cc8c3291b1ca2f2c4becb9c68e8a43f5022c0 Parents: 38cd5c9 Author: Justin Bertram <[email protected]> Authored: Wed Jan 18 15:33:32 2017 -0600 Committer: Clebert Suconic <[email protected]> Committed: Thu Jan 19 10:33:54 2017 -0500 ---------------------------------------------------------------------- .../artemis/logs/ActiveMQUtilBundle.java | 3 ++ .../apache/activemq/artemis/utils/ByteUtil.java | 36 +++++++++++++ .../activemq/artemis/utils/ByteUtilTest.java | 39 +++++++++++++- .../client/ActiveMQClientMessageBundle.java | 2 +- .../deployers/impl/FileConfigurationParser.java | 23 +++++---- .../artemis/utils/XMLConfigurationUtil.java | 22 ++++++++ .../resources/schema/artemis-configuration.xsd | 53 +++++++++++--------- .../core/config/impl/FileConfigurationTest.java | 7 +-- .../resources/ConfigurationTest-full-config.xml | 7 +-- 9 files changed, 148 insertions(+), 44 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9b3cc8c3/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/ActiveMQUtilBundle.java ---------------------------------------------------------------------- diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/ActiveMQUtilBundle.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/ActiveMQUtilBundle.java index 91744c3..c32bc67 100644 --- a/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/ActiveMQUtilBundle.java +++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/logs/ActiveMQUtilBundle.java @@ -45,4 +45,7 @@ public interface ActiveMQUtilBundle { @Message(id = 209003, value = "Error instantiating codec {0}", format = Message.Format.MESSAGE_FORMAT) IllegalArgumentException errorCreatingCodec(@Cause Exception e, String codecClassName); + + @Message(id = 209004, value = "Failed to parse long value from {0}", format = Message.Format.MESSAGE_FORMAT) + IllegalArgumentException failedToParseLong(String value); } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9b3cc8c3/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ByteUtil.java ---------------------------------------------------------------------- diff --git a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ByteUtil.java b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ByteUtil.java index c22f37e..bee8790 100644 --- a/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ByteUtil.java +++ b/artemis-commons/src/main/java/org/apache/activemq/artemis/utils/ByteUtil.java @@ -17,11 +17,14 @@ package org.apache.activemq.artemis.utils; import java.nio.ByteBuffer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import io.netty.buffer.ByteBuf; import io.netty.buffer.UnpooledByteBufAllocator; import org.apache.activemq.artemis.api.core.ActiveMQBuffer; import org.apache.activemq.artemis.api.core.SimpleString; +import org.apache.activemq.artemis.logs.ActiveMQUtilBundle; import org.jboss.logging.Logger; public class ByteUtil { @@ -29,6 +32,12 @@ public class ByteUtil { public static final String NON_ASCII_STRING = "@@@@@"; private static final char[] hexArray = "0123456789ABCDEF".toCharArray(); + private static final String prefix = "^\\s*(\\d+)\\s*"; + private static final String suffix = "(b)?\\s*$"; + private static final Pattern ONE = Pattern.compile(prefix + suffix, Pattern.CASE_INSENSITIVE); + private static final Pattern KILO = Pattern.compile(prefix + "k" + suffix, Pattern.CASE_INSENSITIVE); + private static final Pattern MEGA = Pattern.compile(prefix + "m" + suffix, Pattern.CASE_INSENSITIVE); + private static final Pattern GIGA = Pattern.compile(prefix + "g" + suffix, Pattern.CASE_INSENSITIVE); public static void debugFrame(Logger logger, String message, ByteBuf byteIn) { if (logger.isTraceEnabled()) { @@ -163,4 +172,31 @@ public class ByteUtil { return ret; } + public static long convertTextBytes(final String text) { + try { + Matcher m = ONE.matcher(text); + if (m.matches()) { + return Long.valueOf(Long.parseLong(m.group(1))); + } + + m = KILO.matcher(text); + if (m.matches()) { + return Long.valueOf(Long.parseLong(m.group(1)) * 1024); + } + + m = MEGA.matcher(text); + if (m.matches()) { + return Long.valueOf(Long.parseLong(m.group(1)) * 1024 * 1024); + } + + m = GIGA.matcher(text); + if (m.matches()) { + return Long.valueOf(Long.parseLong(m.group(1)) * 1024 * 1024 * 1024); + } + + return Long.parseLong(text); + } catch (NumberFormatException e) { + throw ActiveMQUtilBundle.BUNDLE.failedToParseLong(text); + } + } } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9b3cc8c3/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/ByteUtilTest.java ---------------------------------------------------------------------- diff --git a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/ByteUtilTest.java b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/ByteUtilTest.java index feebae1..de18598 100644 --- a/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/ByteUtilTest.java +++ b/artemis-commons/src/test/java/org/apache/activemq/artemis/utils/ByteUtilTest.java @@ -19,6 +19,10 @@ package org.apache.activemq.artemis.utils; import org.junit.Assert; import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + public class ByteUtilTest { @Test @@ -32,8 +36,8 @@ public class ByteUtilTest { @Test public void testNonASCII() { - Assert.assertEquals("aA", ByteUtil.toSimpleString(new byte[]{97, 0, 65, 0})); - Assert.assertEquals(ByteUtil.NON_ASCII_STRING, ByteUtil.toSimpleString(new byte[]{0, 97, 0, 65})); + assertEquals("aA", ByteUtil.toSimpleString(new byte[]{97, 0, 65, 0})); + assertEquals(ByteUtil.NON_ASCII_STRING, ByteUtil.toSimpleString(new byte[]{0, 97, 0, 65})); System.out.println(ByteUtil.toSimpleString(new byte[]{0, 97, 0, 65})); } @@ -50,4 +54,35 @@ public class ByteUtilTest { } } + @Test + public void testTextBytesToLongBytes() { + long[] factor = new long[] {1, 5, 10}; + String[] type = new String[]{"", "b", "k", "m", "g"}; + long[] size = new long[]{1, 1, 1024, 1024 * 1024, 1024 * 1024 * 1024}; + + for (int i = 0; i < 3; i++) { + for (int j = 0; j < type.length; j++) { + assertEquals(factor[i] * size[j], ByteUtil.convertTextBytes(factor[i] + type[j])); + assertEquals(factor[i] * size[j], ByteUtil.convertTextBytes(factor[i] + " " + type[j])); + assertEquals(factor[i] * size[j], ByteUtil.convertTextBytes(factor[i] + type[j].toUpperCase())); + assertEquals(factor[i] * size[j], ByteUtil.convertTextBytes(factor[i] + " " + type[j].toUpperCase())); + if (j >= 2) { + assertEquals(factor[i] * size[j], ByteUtil.convertTextBytes(factor[i] + type[j] + "b")); + assertEquals(factor[i] * size[j], ByteUtil.convertTextBytes(factor[i] + " " + type[j] + "b")); + assertEquals(factor[i] * size[j], ByteUtil.convertTextBytes(factor[i] + type[j].toUpperCase() + "B")); + assertEquals(factor[i] * size[j], ByteUtil.convertTextBytes(factor[i] + " " + type[j].toUpperCase() + "B")); + } + } + } + } + + @Test + public void testTextBytesToLongBytesNegative() { + try { + ByteUtil.convertTextBytes("x"); + fail(); + } catch (Exception e) { + assertTrue(e instanceof IllegalArgumentException); + } + } } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9b3cc8c3/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/ActiveMQClientMessageBundle.java ---------------------------------------------------------------------- diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/ActiveMQClientMessageBundle.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/ActiveMQClientMessageBundle.java index 4a4a9a3..583acc3 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/ActiveMQClientMessageBundle.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/ActiveMQClientMessageBundle.java @@ -212,7 +212,7 @@ public interface ActiveMQClientMessageBundle { IllegalArgumentException mustBeInteger(Node elem, String value); @Message(id = 119055, value = "Element {0} requires a valid Long value, but ''{1}'' cannot be parsed as a Long", format = Message.Format.MESSAGE_FORMAT) - IllegalArgumentException mustBeLong(Node elem, String value); + IllegalArgumentException mustBeLong(Node element, String value); @Message(id = 119056, value = "Failed to get decoder") IllegalArgumentException failedToGetDecoder(@Cause Exception e); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9b3cc8c3/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java index afd99a7..e82eb23 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java @@ -69,6 +69,7 @@ import org.apache.activemq.artemis.core.settings.impl.ResourceLimitSettings; import org.apache.activemq.artemis.core.settings.impl.SlowConsumerPolicy; import org.apache.activemq.artemis.uri.AcceptorTransportConfigurationParser; import org.apache.activemq.artemis.uri.ConnectorTransportConfigurationParser; +import org.apache.activemq.artemis.utils.ByteUtil; import org.apache.activemq.artemis.utils.ClassloadingUtil; import org.apache.activemq.artemis.utils.DefaultSensitiveStringCodec; import org.apache.activemq.artemis.utils.PasswordMaskingUtil; @@ -290,7 +291,7 @@ public final class FileConfigurationParser extends XMLConfigurationUtil { config.setConfigurationFileRefreshPeriod(getLong(e, "configuration-file-refresh-period", config.getConfigurationFileRefreshPeriod(), Validators.GT_ZERO)); - config.setGlobalMaxSize(getLong(e, GLOBAL_MAX_SIZE, config.getGlobalMaxSize(), Validators.MINUS_ONE_OR_GT_ZERO)); + config.setGlobalMaxSize(getTextBytesAsLongBytes(e, GLOBAL_MAX_SIZE, config.getGlobalMaxSize(), Validators.MINUS_ONE_OR_GT_ZERO)); config.setMaxDiskUsage(getInteger(e, MAX_DISK_USAGE, config.getMaxDiskUsage(), Validators.PERCENTAGE)); @@ -494,11 +495,11 @@ public final class FileConfigurationParser extends XMLConfigurationUtil { config.setJournalSyncNonTransactional(getBoolean(e, "journal-sync-non-transactional", config.isJournalSyncNonTransactional())); - config.setJournalFileSize(getInteger(e, "journal-file-size", config.getJournalFileSize(), Validators.GT_ZERO)); + config.setJournalFileSize(getTextBytesAsIntBytes(e, "journal-file-size", config.getJournalFileSize(), Validators.GT_ZERO)); int journalBufferTimeout = getInteger(e, "journal-buffer-timeout", config.getJournalType() == JournalType.ASYNCIO ? ArtemisConstants.DEFAULT_JOURNAL_BUFFER_TIMEOUT_AIO : ArtemisConstants.DEFAULT_JOURNAL_BUFFER_TIMEOUT_NIO, Validators.GT_ZERO); - int journalBufferSize = getInteger(e, "journal-buffer-size", config.getJournalType() == JournalType.ASYNCIO ? ArtemisConstants.DEFAULT_JOURNAL_BUFFER_SIZE_AIO : ArtemisConstants.DEFAULT_JOURNAL_BUFFER_SIZE_NIO, Validators.GT_ZERO); + int journalBufferSize = getTextBytesAsIntBytes(e, "journal-buffer-size", config.getJournalType() == JournalType.ASYNCIO ? ArtemisConstants.DEFAULT_JOURNAL_BUFFER_SIZE_AIO : ArtemisConstants.DEFAULT_JOURNAL_BUFFER_SIZE_NIO, Validators.GT_ZERO); int journalMaxIO = getInteger(e, "journal-max-io", config.getJournalType() == JournalType.ASYNCIO ? ActiveMQDefaultConfiguration.getDefaultJournalMaxIoAio() : ActiveMQDefaultConfiguration.getDefaultJournalMaxIoNio(), Validators.GT_ZERO); @@ -769,9 +770,9 @@ public final class FileConfigurationParser extends XMLConfigurationUtil { } else if (MAX_REDELIVERY_DELAY_NODE_NAME.equalsIgnoreCase(name)) { addressSettings.setMaxRedeliveryDelay(XMLUtil.parseLong(child)); } else if (MAX_SIZE_BYTES_NODE_NAME.equalsIgnoreCase(name)) { - addressSettings.setMaxSizeBytes(XMLUtil.parseLong(child)); + addressSettings.setMaxSizeBytes(ByteUtil.convertTextBytes(getTrimmedTextContent(child))); } else if (PAGE_SIZE_BYTES_NODE_NAME.equalsIgnoreCase(name)) { - addressSettings.setPageSizeBytes(XMLUtil.parseLong(child)); + addressSettings.setPageSizeBytes(ByteUtil.convertTextBytes(getTrimmedTextContent(child))); } else if (PAGE_MAX_CACHE_SIZE_NODE_NAME.equalsIgnoreCase(name)) { addressSettings.setPageCacheMaxSize(XMLUtil.parseInt(child)); } else if (MESSAGE_COUNTER_HISTORY_DAY_LIMIT_NODE_NAME.equalsIgnoreCase(name)) { @@ -1300,7 +1301,7 @@ public final class FileConfigurationParser extends XMLConfigurationUtil { double retryIntervalMultiplier = getDouble(e, "retry-interval-multiplier", ActiveMQDefaultConfiguration.getDefaultClusterRetryIntervalMultiplier(), Validators.GT_ZERO); - int minLargeMessageSize = getInteger(e, "min-large-message-size", ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE, Validators.GT_ZERO); + int minLargeMessageSize = getTextBytesAsIntBytes(e, "min-large-message-size", ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE, Validators.GT_ZERO); long maxRetryInterval = getLong(e, "max-retry-interval", ActiveMQDefaultConfiguration.getDefaultClusterMaxRetryInterval(), Validators.GT_ZERO); @@ -1308,9 +1309,9 @@ public final class FileConfigurationParser extends XMLConfigurationUtil { int reconnectAttempts = getInteger(e, "reconnect-attempts", ActiveMQDefaultConfiguration.getDefaultClusterReconnectAttempts(), Validators.MINUS_ONE_OR_GE_ZERO); - int confirmationWindowSize = getInteger(e, "confirmation-window-size", ActiveMQDefaultConfiguration.getDefaultClusterConfirmationWindowSize(), Validators.GT_ZERO); + int confirmationWindowSize = getTextBytesAsIntBytes(e, "confirmation-window-size", ActiveMQDefaultConfiguration.getDefaultClusterConfirmationWindowSize(), Validators.GT_ZERO); - int producerWindowSize = getInteger(e, "producer-window-size", ActiveMQDefaultConfiguration.getDefaultBridgeProducerWindowSize(), Validators.MINUS_ONE_OR_GT_ZERO); + int producerWindowSize = getTextBytesAsIntBytes(e, "producer-window-size", ActiveMQDefaultConfiguration.getDefaultBridgeProducerWindowSize(), Validators.MINUS_ONE_OR_GT_ZERO); long clusterNotificationInterval = getLong(e, "notification-interval", ActiveMQDefaultConfiguration.getDefaultClusterNotificationInterval(), Validators.GT_ZERO); @@ -1371,9 +1372,9 @@ public final class FileConfigurationParser extends XMLConfigurationUtil { String transformerClassName = getString(brNode, "transformer-class-name", null, Validators.NO_CHECK); // Default bridge conf - int confirmationWindowSize = getInteger(brNode, "confirmation-window-size", ActiveMQDefaultConfiguration.getDefaultBridgeConfirmationWindowSize(), Validators.GT_ZERO); + int confirmationWindowSize = getTextBytesAsIntBytes(brNode, "confirmation-window-size", ActiveMQDefaultConfiguration.getDefaultBridgeConfirmationWindowSize(), Validators.GT_ZERO); - int producerWindowSize = getInteger(brNode, "producer-window-size", ActiveMQDefaultConfiguration.getDefaultBridgeConfirmationWindowSize(), Validators.GT_ZERO); + int producerWindowSize = getTextBytesAsIntBytes(brNode, "producer-window-size", ActiveMQDefaultConfiguration.getDefaultBridgeConfirmationWindowSize(), Validators.GT_ZERO); long retryInterval = getLong(brNode, "retry-interval", ActiveMQClient.DEFAULT_RETRY_INTERVAL, Validators.GT_ZERO); @@ -1381,7 +1382,7 @@ public final class FileConfigurationParser extends XMLConfigurationUtil { long connectionTTL = getLong(brNode, "connection-ttl", ActiveMQClient.DEFAULT_CONNECTION_TTL, Validators.GT_ZERO); - int minLargeMessageSize = getInteger(brNode, "min-large-message-size", ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE, Validators.GT_ZERO); + int minLargeMessageSize = getTextBytesAsIntBytes(brNode, "min-large-message-size", ActiveMQClient.DEFAULT_MIN_LARGE_MESSAGE_SIZE, Validators.GT_ZERO); long maxRetryInterval = getLong(brNode, "max-retry-interval", ActiveMQClient.DEFAULT_MAX_RETRY_INTERVAL, Validators.GT_ZERO); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9b3cc8c3/artemis-server/src/main/java/org/apache/activemq/artemis/utils/XMLConfigurationUtil.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/utils/XMLConfigurationUtil.java b/artemis-server/src/main/java/org/apache/activemq/artemis/utils/XMLConfigurationUtil.java index 79dcd1d..7ce5280 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/utils/XMLConfigurationUtil.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/utils/XMLConfigurationUtil.java @@ -79,6 +79,21 @@ public class XMLConfigurationUtil { } } + public static final Long getTextBytesAsLongBytes(final Element e, + final String name, + final long def, + final Validators.Validator validator) { + NodeList nl = e.getElementsByTagName(name); + if (nl.getLength() > 0) { + long val = ByteUtil.convertTextBytes(nl.item(0).getTextContent().trim()); + validator.validate(name, val); + return val; + } else { + validator.validate(name, def); + return def; + } + } + public static final Integer getInteger(final Element e, final String name, final int def, @@ -94,6 +109,13 @@ public class XMLConfigurationUtil { } } + public static final Integer getTextBytesAsIntBytes(final Element e, + final String name, + final int def, + final Validators.Validator validator) { + return getTextBytesAsLongBytes(e, name, def, validator).intValue(); + } + public static final Boolean getBoolean(final Element e, final String name, final boolean def) { NodeList nl = e.getElementsByTagName(name); if (nl.getLength() > 0) { http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9b3cc8c3/artemis-server/src/main/resources/schema/artemis-configuration.xsd ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/resources/schema/artemis-configuration.xsd b/artemis-server/src/main/resources/schema/artemis-configuration.xsd index c34ae24..af0148e 100644 --- a/artemis-server/src/main/resources/schema/artemis-configuration.xsd +++ b/artemis-server/src/main/resources/schema/artemis-configuration.xsd @@ -588,10 +588,11 @@ </xsd:annotation> </xsd:element> - <xsd:element name="journal-buffer-size" type="xsd:long" default="501760" maxOccurs="1" minOccurs="0"> + <xsd:element name="journal-buffer-size" type="xsd:string" default="501760" maxOccurs="1" minOccurs="0"> <xsd:annotation> <xsd:documentation> - The size of the internal buffer on the journal in KiB. + The size (in bytes) of the internal buffer on the journal. Supports byte notation like "K", "Mb", + "GB", etc. </xsd:documentation> </xsd:annotation> </xsd:element> @@ -622,10 +623,10 @@ </xsd:annotation> </xsd:element> - <xsd:element name="journal-file-size" default="10485760" type="xsd:int" maxOccurs="1" minOccurs="0"> + <xsd:element name="journal-file-size" default="10485760" type="xsd:string" maxOccurs="1" minOccurs="0"> <xsd:annotation> <xsd:documentation> - the size (in bytes) of each journal file + The size (in bytes) of each journal file. Supports byte notation like "K", "Mb", "GB", etc. </xsd:documentation> </xsd:annotation> </xsd:element> @@ -695,11 +696,11 @@ </xsd:annotation> </xsd:element> - <xsd:element name="global-max-size" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0"> + <xsd:element name="global-max-size" type="xsd:string" default="-1" maxOccurs="1" minOccurs="0"> <xsd:annotation> <xsd:documentation> - Global Max Size before all addresses will enter into their Full Policy configured upon messages being - produced. + Size (in bytes) before all addresses will enter into their Full Policy configured upon messages being + produced. Supports byte notation like "K", "Mb", "GB", etc. </xsd:documentation> </xsd:annotation> </xsd:element> @@ -1153,11 +1154,11 @@ </xsd:annotation> </xsd:element> - <xsd:element name="min-large-message-size" type="xsd:int" default="102400" maxOccurs="1" minOccurs="0"> + <xsd:element name="min-large-message-size" type="xsd:string" default="102400" maxOccurs="1" minOccurs="0"> <xsd:annotation> <xsd:documentation> - Any message larger than this size is considered a large message (to be sent in - chunks) + Any message larger than this size (in bytes) is considered a large message (to be sent in + chunks). Supports byte notation like "K", "Mb", "GB", etc. </xsd:documentation> </xsd:annotation> </xsd:element> @@ -1236,18 +1237,19 @@ </xsd:annotation> </xsd:element> - <xsd:element name="confirmation-window-size" type="xsd:int" maxOccurs="1" minOccurs="0" default="1048576"> + <xsd:element name="confirmation-window-size" type="xsd:string" maxOccurs="1" minOccurs="0" default="1048576"> <xsd:annotation> <xsd:documentation> - Once the bridge has received this many bytes, it sends a confirmation + Once the bridge has received this many bytes, it sends a confirmation. Supports byte notation like + "K", "Mb", "GB", etc. </xsd:documentation> </xsd:annotation> </xsd:element> - <xsd:element name="producer-window-size" type="xsd:int" maxOccurs="1" minOccurs="0" default="-1"> + <xsd:element name="producer-window-size" type="xsd:string" maxOccurs="1" minOccurs="0" default="-1"> <xsd:annotation> <xsd:documentation> - Producer flow control + Producer flow control. Supports byte notation like "K", "Mb", "GB", etc. </xsd:documentation> </xsd:annotation> </xsd:element> @@ -1373,10 +1375,11 @@ </xsd:annotation> </xsd:element> - <xsd:element name="min-large-message-size" type="xsd:int" maxOccurs="1" minOccurs="0"> + <xsd:element name="min-large-message-size" type="xsd:string" maxOccurs="1" minOccurs="0"> <xsd:annotation> <xsd:documentation> - Messages larger than this are considered large-messages + Messages larger than this are considered large-messages. Supports byte notation like + "K", "Mb", "GB", etc. </xsd:documentation> </xsd:annotation> </xsd:element> @@ -1470,18 +1473,19 @@ </xsd:annotation> </xsd:element> - <xsd:element name="confirmation-window-size" type="xsd:int" default="1048576" maxOccurs="1" minOccurs="0"> + <xsd:element name="confirmation-window-size" type="xsd:string" default="1048576" maxOccurs="1" minOccurs="0"> <xsd:annotation> <xsd:documentation> - The size (in bytes) of the window used for confirming data from the server connected to. + The size (in bytes) of the window used for confirming data from the server connected to. Supports + byte notation like "K", "Mb", "GB", etc. </xsd:documentation> </xsd:annotation> </xsd:element> - <xsd:element name="producer-window-size" type="xsd:int" maxOccurs="1" minOccurs="0" default="-1"> + <xsd:element name="producer-window-size" type="xsd:string" maxOccurs="1" minOccurs="0" default="-1"> <xsd:annotation> <xsd:documentation> - Producer flow control + Producer flow control. Supports byte notation like "K", "Mb", "GB", etc. </xsd:documentation> </xsd:annotation> </xsd:element> @@ -2342,11 +2346,11 @@ </xsd:annotation> </xsd:element> - <xsd:element name="max-size-bytes" type="xsd:long" default="-1" maxOccurs="1" minOccurs="0"> + <xsd:element name="max-size-bytes" type="xsd:string" default="-1" maxOccurs="1" minOccurs="0"> <xsd:annotation> <xsd:documentation> the maximum size (in bytes) for an address (-1 means no limits). This is used in PAGING, BLOCK and - FAIL policies. + FAIL policies. Supports byte notation like "K", "Mb", "GB", etc. </xsd:documentation> </xsd:annotation> </xsd:element> @@ -2362,10 +2366,11 @@ </xsd:annotation> </xsd:element> - <xsd:element name="page-size-bytes" type="xsd:long" default="10485760" maxOccurs="1" minOccurs="0"> + <xsd:element name="page-size-bytes" type="xsd:string" default="10485760" maxOccurs="1" minOccurs="0"> <xsd:annotation> <xsd:documentation> - the page size (in bytes) to use for an address + The page size (in bytes) to use for an address. Supports byte notation like "K", "Mb", + "GB", etc. </xsd:documentation> </xsd:annotation> </xsd:element> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9b3cc8c3/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 a21cf3a..ac63a05 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 @@ -209,7 +209,7 @@ public class FileConfigurationTest extends ConfigurationImplTest { if (bc.getName().equals("bridge1")) { Assert.assertEquals("bridge1", bc.getName()); Assert.assertEquals("queue1", bc.getQueueName()); - Assert.assertEquals("minLargeMessageSize", 4, bc.getMinLargeMessageSize()); + Assert.assertEquals("minLargeMessageSize", 4194304, bc.getMinLargeMessageSize()); assertEquals("check-period", 31, bc.getClientFailureCheckPeriod()); assertEquals("connection time-to-live", 370, bc.getConnectionTTL()); Assert.assertEquals("bridge-forwarding-address1", bc.getForwardingAddress()); @@ -223,6 +223,7 @@ public class FileConfigurationTest extends ConfigurationImplTest { Assert.assertEquals("connector1", bc.getStaticConnectors().get(0)); Assert.assertEquals(null, bc.getDiscoveryGroupName()); Assert.assertEquals(444, bc.getProducerWindowSize()); + Assert.assertEquals(1073741824, bc.getConfirmationWindowSize()); } else { Assert.assertEquals("bridge2", bc.getName()); Assert.assertEquals("queue2", bc.getQueueName()); @@ -231,7 +232,7 @@ public class FileConfigurationTest extends ConfigurationImplTest { Assert.assertEquals(null, bc.getTransformerClassName()); Assert.assertEquals(null, bc.getStaticConnectors()); Assert.assertEquals("dg1", bc.getDiscoveryGroupName()); - Assert.assertEquals(555, bc.getProducerWindowSize()); + Assert.assertEquals(568320, bc.getProducerWindowSize()); } } @@ -288,7 +289,7 @@ public class FileConfigurationTest extends ConfigurationImplTest { assertEquals("a1.1", conf.getAddressesSettings().get("a1").getDeadLetterAddress().toString()); assertEquals("a1.2", conf.getAddressesSettings().get("a1").getExpiryAddress().toString()); assertEquals(1, conf.getAddressesSettings().get("a1").getRedeliveryDelay()); - assertEquals(81781728121878L, conf.getAddressesSettings().get("a1").getMaxSizeBytes()); + assertEquals(856686592L, conf.getAddressesSettings().get("a1").getMaxSizeBytes()); assertEquals(81738173872337L, conf.getAddressesSettings().get("a1").getPageSizeBytes()); assertEquals(10, conf.getAddressesSettings().get("a1").getPageCacheMaxSize()); assertEquals(4, conf.getAddressesSettings().get("a1").getMessageCounterHistoryDayLimit()); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/9b3cc8c3/artemis-server/src/test/resources/ConfigurationTest-full-config.xml ---------------------------------------------------------------------- diff --git a/artemis-server/src/test/resources/ConfigurationTest-full-config.xml b/artemis-server/src/test/resources/ConfigurationTest-full-config.xml index 6030f81..c621472 100644 --- a/artemis-server/src/test/resources/ConfigurationTest-full-config.xml +++ b/artemis-server/src/test/resources/ConfigurationTest-full-config.xml @@ -140,7 +140,7 @@ <forwarding-address>bridge-forwarding-address1</forwarding-address> <filter string="sku > 1"/> <transformer-class-name>org.foo.BridgeTransformer</transformer-class-name> - <min-large-message-size>4</min-large-message-size> + <min-large-message-size>4M</min-large-message-size> <check-period>31</check-period> <connection-ttl>370</connection-ttl> <retry-interval>3</retry-interval> @@ -149,6 +149,7 @@ <reconnect-attempts>2</reconnect-attempts> <failover-on-server-shutdown>false</failover-on-server-shutdown> <use-duplicate-detection>true</use-duplicate-detection> + <confirmation-window-size>1G</confirmation-window-size> <producer-window-size>444</producer-window-size> <static-connectors> <connector-ref>connector1</connector-ref> @@ -157,7 +158,7 @@ <bridge name="bridge2"> <queue-name>queue2</queue-name> <forwarding-address>bridge-forwarding-address2</forwarding-address> - <producer-window-size>555</producer-window-size> + <producer-window-size>555k</producer-window-size> <discovery-group-ref discovery-group-name="dg1"/> </bridge> </bridges> @@ -257,7 +258,7 @@ <dead-letter-address>a1.1</dead-letter-address> <expiry-address>a1.2</expiry-address> <redelivery-delay>1</redelivery-delay> - <max-size-bytes>81781728121878</max-size-bytes> + <max-size-bytes>817M</max-size-bytes> <page-size-bytes>81738173872337</page-size-bytes> <page-max-cache-size>10</page-max-cache-size> <message-counter-history-day-limit>4</message-counter-history-day-limit>
