[prev in list] [next in list] [prev in thread] [next in thread]
List: activemq-commits
Subject: [activemq-artemis] branch main updated: ARTEMIS-3442 Configure journal retention through cli create
From: clebertsuconic () apache ! org
Date: 2021-08-25 17:26:07
Message-ID: 162991236675.32693.11531283959909552899 () gitbox ! apache ! org
[Download RAW message or body]
This is an automated email from the ASF dual-hosted git repository.
clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
The following commit(s) were added to refs/heads/main by this push:
new 9b8e826 ARTEMIS-3442 Configure journal retention through cli create
new 114861e This closes #3709
9b8e826 is described below
commit 9b8e82601b23631040ccea128f856aaf7698a2df
Author: Clebert Suconic <clebertsuconic@apache.org>
AuthorDate: Tue Aug 24 22:57:43 2021 -0400
ARTEMIS-3442 Configure journal retention through cli create
---
.../activemq/artemis/cli/commands/Create.java | 27 ++-
.../artemis/cli/commands/InputAbstract.java | 23 +-
.../activemq/artemis/cli/commands/etc/broker.xml | 2 +
tests/smoke-tests/pom.xml | 6 +
.../resources/servers/replay/replay/broker.xml | 245 ---------------------
5 files changed, 56 insertions(+), 247 deletions(-)
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java \
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java \
index 0207344..3121731 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java
@@ -277,6 +277,12 @@ public class Create extends InputAbstract {
@Option(name = "--journal-device-block-size", description = "The block size by \
the device, default at 4096.") private int journalDeviceBlockSize = 4096;
+ @Option(name = "--journal-retention-days", description = "If > 0, It will enable \
journal-retention-directory on the broker.xml allowing replay options. This option \
will configure retention in days.") + private int retentionDays;
+
+ @Option(name = "--journal-retention-max-bytes", description = "It will be passed \
as storage-limit on the journal-retention-directory tag") + private String \
retentionMaxBytes; +
@Option(name = "--global-max-size", description = "Maximum amount of memory which \
message data may consume (Default: Undefined, half of the system's memory)") private \
String globalMaxSize;
@@ -762,9 +768,28 @@ public class Create extends InputAbstract {
javaOptions = "";
}
+ boolean allowAnonymous = isAllowAnonymous();
+
+
+ if (retentionDays == 0) {
+ retentionDays = inputInteger("--journal-retention-days", "How many days you \
would like to keep retained in the journal? Use 0 for no retention.", "0"); + }
+
+ String retentionTag = "";
+ if (retentionDays > 0) {
+ if (retentionMaxBytes != null) {
+ retentionTag = "<journal-retention-directory period=\"" + retentionDays \
+ "\" unit=\"DAYS\" storage-limit=\"" + retentionMaxBytes + "\">" + data + \
"/retention</journal-retention-directory>"; + } else {
+ retentionTag = "<journal-retention-directory period=\"" + retentionDays \
+ "\" unit=\"DAYS\">" + data + "/retention</journal-retention-directory>"; + \
} + }
+
+ filters.put("${journal-retention}", retentionTag);
+
+
filters.put("${java-opts}", javaOptions);
- if (isAllowAnonymous()) {
+ if (allowAnonymous) {
write(ETC_LOGIN_CONFIG_WITH_GUEST, new File(etcFolder, ETC_LOGIN_CONFIG), \
filters, false); } else {
write(ETC_LOGIN_CONFIG_WITHOUT_GUEST, new File(etcFolder, \
ETC_LOGIN_CONFIG), filters, false);
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/InputAbstract.java \
b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/InputAbstract.java
index 05a6035..80b5378 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/InputAbstract.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/InputAbstract.java
@@ -69,6 +69,27 @@ public class InputAbstract extends ActionAbstract {
return booleanValue.booleanValue();
}
+ public int inputInteger(String propertyName, String prompt, String silentDefault) \
{ +
+ Integer value = null;
+ do {
+ String input = input(propertyName, prompt, silentDefault);
+ if (input == null || input.trim().equals("")) {
+ input = "0";
+ }
+
+ try {
+ value = Integer.parseInt(input);
+ } catch (NumberFormatException e) {
+ e.printStackTrace();
+ value = null;
+ }
+ }
+ while(value == null);
+
+ return value.intValue();
+ }
+
protected String input(String propertyName, String prompt, String silentDefault) \
{ return input(propertyName, prompt, silentDefault, false);
}
@@ -82,7 +103,7 @@ public class InputAbstract extends ActionAbstract {
boolean valid = false;
System.out.println();
do {
- context.out.println(propertyName + ": is a mandatory property!");
+ context.out.println(propertyName + ":");
context.out.println(prompt);
inputStr = scanner.nextLine();
if (!acceptNull && inputStr.trim().equals("")) {
diff --git a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/broker.xml \
b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/broker.xml
index 83468fc..18429db 100644
--- a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/broker.xml
+++ b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/broker.xml
@@ -56,6 +56,8 @@ ${jdbc}
<journal-retention-directory period="7" unit="DAYS" \
storage-limit="10G">data/retention</journal-retention-directory>
-->
+ ${journal-retention}
+
<journal-datasync>${fsync}</journal-datasync>
<journal-min-files>2</journal-min-files>
diff --git a/tests/smoke-tests/pom.xml b/tests/smoke-tests/pom.xml
index 790a423..541aec0 100644
--- a/tests/smoke-tests/pom.xml
+++ b/tests/smoke-tests/pom.xml
@@ -1178,6 +1178,12 @@
<!-- this is needed to run the server remotely -->
<arg>--java-options</arg>
<arg>-Djava.rmi.server.hostname=localhost</arg>
+ <arg>--journal-retention-days</arg>
+ <arg>1</arg>
+ <arg>--queues</arg>
+ <arg>RetentionTest</arg>
+ <arg>--name</arg>
+ <arg>replay</arg>
</args>
</configuration>
</execution>
diff --git a/tests/smoke-tests/src/main/resources/servers/replay/replay/broker.xml \
b/tests/smoke-tests/src/main/resources/servers/replay/replay/broker.xml deleted file \
mode 100644 index 25601c67..0000000
--- a/tests/smoke-tests/src/main/resources/servers/replay/replay/broker.xml
+++ /dev/null
@@ -1,245 +0,0 @@
-<?xml version='1.0'?>
-<!--
-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.
--->
-
-<configuration xmlns="urn:activemq"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:xi="http://www.w3.org/2001/XInclude"
- xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd">
-
- <core xmlns="urn:activemq:core" \
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="urn:activemq:core ">
-
- <name>replay</name>
-
-
- <persistence-enabled>true</persistence-enabled>
-
- <!-- this could be ASYNCIO, MAPPED, NIO
- ASYNCIO: Linux Libaio
- MAPPED: mmap files
- NIO: Plain Java Files
- -->
- <journal-type>NIO</journal-type>
-
- <paging-directory>./data/paging</paging-directory>
-
- <bindings-directory>./data/bindings</bindings-directory>
-
- <journal-directory>./data/journal</journal-directory>
-
- <large-messages-directory>./data/large-messages</large-messages-directory>
-
- <journal-retention-directory period="7" \
unit="DAYS">./data/retention</journal-retention-directory>
-
- <!--
- if you want to retain your journal uncomment this following configuration.
-
- This will allow your system to keep 7 days of your data, up to 10G. Tweak it \
accordingly to your use case and capacity.
-
- it is recommended to use a separate storage unit from the journal for \
performance considerations.
-
- <journal-retention-directory period="7" unit="DAYS" \
storage-limit="10G">data/retention</journal-retention-directory>>
- -->
-
- <journal-datasync>true</journal-datasync>
-
- <journal-min-files>2</journal-min-files>
-
- <journal-pool-files>10</journal-pool-files>
-
- <journal-device-block-size>4096</journal-device-block-size>
-
- <journal-file-size>10M</journal-file-size>
- <!--
- You can verify the network health of a particular NIC by specifying the \
<network-check-NIC> element.
- <network-check-NIC>theNicName</network-check-NIC>
- -->
-
- <!--
- Use this to use an HTTP server to validate the network
- <network-check-URL-list>http://www.apache.org</network-check-URL-list> -->
-
- <!-- <network-check-period>10000</network-check-period> -->
- <!-- <network-check-timeout>1000</network-check-timeout> -->
-
- <!-- this is a comma separated list, no spaces, just DNS or IPs
- it should accept IPV6
-
- Warning: Make sure you understand your network topology as this is meant \
to validate if your network is valid.
- Using IPs that could eventually disappear or be partially \
visible may defeat the purpose.
- You can use a list of multiple IPs, and if any successful ping \
will make the server OK to continue running -->
- <!-- <network-check-list>10.0.0.1</network-check-list> -->
-
- <!-- use this to customize the ping used for ipv4 addresses -->
- <!-- <network-check-ping-command>ping -c 1 -t %d \
%s</network-check-ping-command> -->
-
- <!-- use this to customize the ping used for ipv6 addresses -->
- <!-- <network-check-ping6-command>ping6 -c 1 \
%2$s</network-check-ping6-command> -->
-
-
-
-
- <!-- how often we are looking for how many bytes are being used on the disk in \
ms -->
- <disk-scan-period>5000</disk-scan-period>
-
- <!-- once the disk hits this limit the system will block, or close the \
connection in certain protocols
- that won't support flow control. -->
- <max-disk-usage>90</max-disk-usage>
-
- <!-- should the broker detect dead locks and other issues -->
- <critical-analyzer>true</critical-analyzer>
-
- <critical-analyzer-timeout>120000</critical-analyzer-timeout>
-
- <critical-analyzer-check-period>60000</critical-analyzer-check-period>
-
- <critical-analyzer-policy>HALT</critical-analyzer-policy>
-
-
-
- <!-- the system will enter into page mode once you hit this limit.
- This is an estimate in bytes of how much the messages are using in memory
-
- The system will use half of the available memory (-Xmx) by default for \
the global-max-size.
- You may specify a different value here if you need to customize it to \
your needs.
-
- <global-max-size>100Mb</global-max-size>
-
- -->
-
- <acceptors>
-
- <!-- useEpoll means: it will use Netty epoll if you are on a system (Linux) \
that supports it -->
- <!-- amqpCredits: The number of credits sent to AMQP producers -->
- <!-- amqpLowCredits: The server will send the # credits specified at \
amqpCredits at this low mark -->
- <!-- amqpDuplicateDetection: If you are not using duplicate detection, set \
this to false
- as duplicate detection requires \
applicationProperties to be parsed on the server. -->
- <!-- amqpMinLargeMessageSize: Determines how many bytes are considered \
large, so we start using files to hold their data.
- default: 102400, -1 would mean to disable \
large mesasge control -->
-
- <!-- Note: If an acceptor needs to be compatible with HornetQ and/or \
Artemis 1.x clients add
- "anycastPrefix=jms.queue.;multicastPrefix=jms.topic." to the \
acceptor url.
- See https://issues.apache.org/jira/browse/ARTEMIS-1644 for more \
information. -->
-
-
- <!-- Acceptor for every supported protocol -->
- <acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpRe \
ceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNE \
TQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetect \
ion=true;supportAdvisory=false;suppressInternalManagementObjects=false</acceptor>
-
- <!-- AMQP Acceptor. Listens on default AMQP port for AMQP traffic.-->
- <acceptor name="amqp">tcp://0.0.0.0:5672?tcpSendBufferSize=1048576;tcpReceiv \
eBufferSize=1048576;protocols=AMQP;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpMinLargeMessageSize=102400;amqpDuplicateDetection=true</acceptor>
-
- <!-- STOMP Acceptor. -->
- <acceptor name="stomp">tcp://0.0.0.0:61613?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=STOMP;useEpoll=true</acceptor>
-
- <!-- HornetQ Compatibility Acceptor. Enables HornetQ Core and STOMP for \
legacy HornetQ clients. -->
- <acceptor name="hornetq">tcp://0.0.0.0:5445?anycastPrefix=jms.queue.;multicastPrefix=jms.topic.;protocols=HORNETQ,STOMP;useEpoll=true</acceptor>
-
- <!-- MQTT Acceptor -->
- <acceptor name="mqtt">tcp://0.0.0.0:1883?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=MQTT;useEpoll=true</acceptor>
-
- </acceptors>
-
-
- <security-settings>
- <security-setting match="#">
- <permission type="createNonDurableQueue" roles="amq"/>
- <permission type="deleteNonDurableQueue" roles="amq"/>
- <permission type="createDurableQueue" roles="amq"/>
- <permission type="deleteDurableQueue" roles="amq"/>
- <permission type="createAddress" roles="amq"/>
- <permission type="deleteAddress" roles="amq"/>
- <permission type="consume" roles="amq"/>
- <permission type="browse" roles="amq"/>
- <permission type="send" roles="amq"/>
- <!-- we need this otherwise ./artemis data imp wouldn't work -->
- <permission type="manage" roles="amq"/>
- </security-setting>
- </security-settings>
-
- <address-settings>
- <!-- if you define auto-create on certain queues, management has to be \
auto-create -->
- <address-setting match="activemq.management#">
- <dead-letter-address>DLQ</dead-letter-address>
- <expiry-address>ExpiryQueue</expiry-address>
- <redelivery-delay>0</redelivery-delay>
- <!-- with -1 only the global-max-size is in use for limiting -->
- <max-size-bytes>-1</max-size-bytes>
- <message-counter-history-day-limit>10</message-counter-history-day-limit>
- <address-full-policy>PAGE</address-full-policy>
- <auto-create-queues>true</auto-create-queues>
- <auto-create-addresses>true</auto-create-addresses>
- <auto-create-jms-queues>true</auto-create-jms-queues>
- <auto-create-jms-topics>true</auto-create-jms-topics>
- </address-setting>
- <!--default for catch all-->
- <address-setting match="#">
- <dead-letter-address>DLQ</dead-letter-address>
- <expiry-address>ExpiryQueue</expiry-address>
- <redelivery-delay>0</redelivery-delay>
- <!-- with -1 only the global-max-size is in use for limiting -->
- <max-size-bytes>-1</max-size-bytes>
- <message-counter-history-day-limit>10</message-counter-history-day-limit>
- <address-full-policy>PAGE</address-full-policy>
- <auto-create-queues>true</auto-create-queues>
- <auto-create-addresses>true</auto-create-addresses>
- <auto-create-jms-queues>true</auto-create-jms-queues>
- <auto-create-jms-topics>true</auto-create-jms-topics>
- <auto-delete-queues>false</auto-delete-queues>
- <auto-delete-addresses>false</auto-delete-addresses>
- </address-setting>
- </address-settings>
-
- <addresses>
- <address name="DLQ">
- <anycast>
- <queue name="DLQ" />
- </anycast>
- </address>
- <address name="ExpiryQueue">
- <anycast>
- <queue name="ExpiryQueue" />
- </anycast>
- </address>
-
- <address name="RetentionTest">
- <anycast>
- <queue name="RetentionTest"/>
- </anycast>
- </address>
-
- </addresses>
-
-
- <!-- Uncomment the following if you want to use the Standard \
LoggingActiveMQServerPlugin pluging to log in events
- <broker-plugins>
- <broker-plugin \
class-name="org.apache.activemq.artemis.core.server.plugin.impl.LoggingActiveMQServerPlugin">
- <property key="LOG_ALL_EVENTS" value="true"/>
- <property key="LOG_CONNECTION_EVENTS" value="true"/>
- <property key="LOG_SESSION_EVENTS" value="true"/>
- <property key="LOG_CONSUMER_EVENTS" value="true"/>
- <property key="LOG_DELIVERING_EVENTS" value="true"/>
- <property key="LOG_SENDING_EVENTS" value="true"/>
- <property key="LOG_INTERNAL_EVENTS" value="true"/>
- </broker-plugin>
- </broker-plugins>
- -->
-
- </core>
-</configuration>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic