[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