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 68895dfd86 ARTEMIS-4032 empty journal dirs created even w/JDBC store
68895dfd86 is described below

commit 68895dfd863813ef3bda6d945869016334d24053
Author: Justin Bertram <[email protected]>
AuthorDate: Wed May 21 13:51:10 2025 -0500

    ARTEMIS-4032 empty journal dirs created even w/JDBC store
---
 .../activemq/artemis/integration/FileBroker.java   | 10 ++--
 .../artemis/core/config/Configuration.java         |  4 ++
 .../impl/journal/JournalStorageManager.java        |  8 ++-
 .../core/server/impl/ActiveMQServerImpl.java       | 35 +++++------
 .../jdbc/store/journal/DirectoryCheckTest.java     | 70 ++++++++++++++++++++++
 5 files changed, 103 insertions(+), 24 deletions(-)

diff --git 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/integration/FileBroker.java
 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/integration/FileBroker.java
index b64b32dbb4..734f40d238 100644
--- 
a/artemis-cli/src/main/java/org/apache/activemq/artemis/integration/FileBroker.java
+++ 
b/artemis-cli/src/main/java/org/apache/activemq/artemis/integration/FileBroker.java
@@ -72,10 +72,12 @@ public class FileBroker implements Broker {
 
 
    private void createDirectories(FileConfiguration fileConfiguration) {
-      fileConfiguration.getPagingLocation().mkdirs();
-      fileConfiguration.getJournalLocation().mkdirs();
-      fileConfiguration.getBindingsLocation().mkdirs();
-      fileConfiguration.getLargeMessagesLocation().mkdirs();
+      if (!fileConfiguration.isUsingDatabasePersistence()) {
+         fileConfiguration.getPagingLocation().mkdirs();
+         fileConfiguration.getJournalLocation().mkdirs();
+         fileConfiguration.getBindingsLocation().mkdirs();
+         fileConfiguration.getLargeMessagesLocation().mkdirs();
+      }
    }
 
    @Override
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/Configuration.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/Configuration.java
index 59a0150ed9..5f58cfcb3c 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/Configuration.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/Configuration.java
@@ -1516,4 +1516,8 @@ public interface Configuration {
    boolean isMirrorAckManagerWarnUnacked();
 
    void exportAsProperties(File to) throws Exception;
+
+   default boolean isUsingDatabasePersistence() {
+      return getStoreConfiguration() != null && 
getStoreConfiguration().getStoreType() == StoreConfiguration.StoreType.DATABASE;
+   }
 }
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManager.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManager.java
index d863ed310e..8823927a89 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManager.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManager.java
@@ -236,9 +236,11 @@ public class JournalStorageManager extends 
AbstractJournalStorageManager {
    }
 
    protected void createDirectories() {
-      checkAndCreateDir(config.getBindingsLocation(), 
config.isCreateBindingsDir());
-      checkAndCreateDir(config.getJournalLocation(), 
config.isCreateJournalDir());
-      checkAndCreateDir(config.getLargeMessagesLocation(), 
config.isCreateJournalDir());
+      if (!config.isUsingDatabasePersistence()) {
+         checkAndCreateDir(config.getBindingsLocation(), 
config.isCreateBindingsDir());
+         checkAndCreateDir(config.getJournalLocation(), 
config.isCreateJournalDir());
+         checkAndCreateDir(config.getLargeMessagesLocation(), 
config.isCreateJournalDir());
+      }
    }
 
    @Override
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
index 1f8f0d3df3..9219ca2d4c 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
@@ -76,7 +76,6 @@ import 
org.apache.activemq.artemis.core.config.CoreAddressConfiguration;
 import org.apache.activemq.artemis.core.config.DivertConfiguration;
 import org.apache.activemq.artemis.core.config.FederationConfiguration;
 import org.apache.activemq.artemis.core.config.HAPolicyConfiguration;
-import org.apache.activemq.artemis.core.config.StoreConfiguration;
 import 
org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederationBrokerPlugin;
 import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
 import org.apache.activemq.artemis.core.config.impl.LegacyJMSConfiguration;
@@ -596,7 +595,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
 
    private void configureJdbcNetworkTimeout() {
       if (configuration.isPersistenceEnabled()) {
-         if (configuration.getStoreConfiguration() != null && 
configuration.getStoreConfiguration().getStoreType() == 
StoreConfiguration.StoreType.DATABASE) {
+         if (configuration.isUsingDatabasePersistence()) {
             configuration.setMaxDiskUsage(-1); // it does not make sense with 
JDBC
             DatabaseStorageConfiguration databaseStorageConfiguration = 
(DatabaseStorageConfiguration) configuration.getStoreConfiguration();
             
databaseStorageConfiguration.setConnectionProviderNetworkTimeout(threadPool, 
databaseStorageConfiguration.getJdbcNetworkTimeout());
@@ -606,7 +605,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
 
    private void clearJdbcNetworkTimeout() {
       if (configuration.isPersistenceEnabled()) {
-         if (configuration.getStoreConfiguration() != null && 
configuration.getStoreConfiguration().getStoreType() == 
StoreConfiguration.StoreType.DATABASE) {
+         if (configuration.isUsingDatabasePersistence()) {
             DatabaseStorageConfiguration databaseStorageConfiguration = 
(DatabaseStorageConfiguration) configuration.getStoreConfiguration();
             
databaseStorageConfiguration.clearConnectionProviderNetworkTimeout();
          }
@@ -618,7 +617,7 @@ public class ActiveMQServerImpl implements ActiveMQServer {
       NodeManager manager;
       if (!configuration.isPersistenceEnabled()) {
          manager = new InVMNodeManager(replicatingBackup);
-      } else if (configuration.getStoreConfiguration() != null && 
configuration.getStoreConfiguration().getStoreType() == 
StoreConfiguration.StoreType.DATABASE) {
+      } else if (configuration.isUsingDatabasePersistence()) {
          final HAPolicyConfiguration.TYPE haType = 
configuration.getHAPolicyConfiguration() == null ? null : 
configuration.getHAPolicyConfiguration().getType();
          if (haType == HAPolicyConfiguration.TYPE.SHARED_STORE_PRIMARY || 
haType == HAPolicyConfiguration.TYPE.SHARED_STORE_BACKUP) {
             if (replicatingBackup) {
@@ -3137,7 +3136,7 @@ public class ActiveMQServerImpl implements ActiveMQServer 
{
    }
 
    protected PagingStoreFactory getPagingStoreFactory() throws Exception {
-      if (configuration.getStoreConfiguration() != null && 
configuration.getStoreConfiguration().getStoreType() == 
StoreConfiguration.StoreType.DATABASE) {
+      if (configuration.isUsingDatabasePersistence()) {
          DatabaseStorageConfiguration dbConf = (DatabaseStorageConfiguration) 
configuration.getStoreConfiguration();
          return new PagingStoreFactoryDatabase(dbConf, storageManager, 
configuration.getPageSyncTimeout(), scheduledPool, pageExecutorFactory, false, 
ioCriticalErrorListener);
       } else {
@@ -3150,7 +3149,7 @@ public class ActiveMQServerImpl implements ActiveMQServer 
{
     */
    protected StorageManager createStorageManager() {
       if (configuration.isPersistenceEnabled()) {
-         if (configuration.getStoreConfiguration() != null && 
configuration.getStoreConfiguration().getStoreType() == 
StoreConfiguration.StoreType.DATABASE) {
+         if (configuration.isUsingDatabasePersistence()) {
             JDBCJournalStorageManager journal = new 
JDBCJournalStorageManager(configuration, getCriticalAnalyzer(), 
getScheduledPool(), executorFactory, ioExecutorFactory, 
ioCriticalErrorListener);
             this.getCriticalAnalyzer().add(journal);
             return journal;
@@ -4510,20 +4509,22 @@ public class ActiveMQServerImpl implements 
ActiveMQServer {
     * Check if journal directory exists or create it (if configured to do so)
     */
    public void checkJournalDirectory() {
-      File journalDir = configuration.getJournalLocation();
+      if (!configuration.isUsingDatabasePersistence()) {
+         File journalDir = configuration.getJournalLocation();
 
-      if (!journalDir.exists() && configuration.isPersistenceEnabled()) {
-         if (configuration.isCreateJournalDir()) {
-            journalDir.mkdirs();
-         } else {
-            throw 
ActiveMQMessageBundle.BUNDLE.cannotCreateDir(journalDir.getAbsolutePath());
+         if (!journalDir.exists() && configuration.isPersistenceEnabled()) {
+            if (configuration.isCreateJournalDir()) {
+               journalDir.mkdirs();
+            } else {
+               throw 
ActiveMQMessageBundle.BUNDLE.cannotCreateDir(journalDir.getAbsolutePath());
+            }
          }
-      }
 
-      File nodeManagerLockDir = configuration.getNodeManagerLockLocation();
-      if (!journalDir.equals(nodeManagerLockDir)) {
-         if (configuration.isPersistenceEnabled() && 
!nodeManagerLockDir.exists()) {
-            nodeManagerLockDir.mkdirs();
+         File nodeManagerLockDir = configuration.getNodeManagerLockLocation();
+         if (!journalDir.equals(nodeManagerLockDir)) {
+            if (configuration.isPersistenceEnabled() && 
!nodeManagerLockDir.exists()) {
+               nodeManagerLockDir.mkdirs();
+            }
          }
       }
    }
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jdbc/store/journal/DirectoryCheckTest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jdbc/store/journal/DirectoryCheckTest.java
new file mode 100644
index 0000000000..1a69485e06
--- /dev/null
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jdbc/store/journal/DirectoryCheckTest.java
@@ -0,0 +1,70 @@
+/*
+ * 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.
+ */
+package org.apache.activemq.artemis.tests.integration.jdbc.store.journal;
+
+import java.io.File;
+
+import org.apache.activemq.artemis.core.config.Configuration;
+import 
org.apache.activemq.artemis.core.config.ha.SharedStorePrimaryPolicyConfiguration;
+import org.apache.activemq.artemis.core.server.ActiveMQServer;
+import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
+import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+public class DirectoryCheckTest extends ActiveMQTestBase {
+
+   @BeforeEach
+   @Override
+   public void setUp() throws Exception {
+      super.setUp();
+
+      // clear out anything automatically created by the test scaffolding
+      File file = new File(getTestDir());
+      deleteDirectory(file);
+      file.mkdirs();
+   }
+
+   @Test
+   public void testDirectoryCreationWithoutHA() throws Exception {
+      testDirectoryCreation(false);
+   }
+
+   @Test
+   public void testDirectoryCreationWithHA() throws Exception {
+      testDirectoryCreation(true);
+   }
+
+   private void testDirectoryCreation(boolean ha) throws Exception {
+      Configuration config = 
createDefaultJDBCConfig(false).setNodeManagerLockDirectory(getTestDir() + 
File.separator + "node-manager-lock-directory");
+      if (ha) {
+         config.setHAPolicyConfiguration(new 
SharedStorePrimaryPolicyConfiguration());
+      }
+      ActiveMQServer server = createServer(true, config, 
AddressSettings.DEFAULT_PAGE_SIZE, AddressSettings.DEFAULT_MAX_SIZE_BYTES);
+      server.start();
+      assertFalse(server.getConfiguration().getJournalLocation().exists());
+      assertFalse(server.getConfiguration().getBindingsLocation().exists());
+      assertFalse(server.getConfiguration().getPagingLocation().exists());
+      
assertFalse(server.getConfiguration().getLargeMessagesLocation().exists());
+
+      // this directory will still be created unless we're using JDBC + HA. 
See ActiveMQServerImpl.createNodeManager().
+      assertEquals(!ha, 
server.getConfiguration().getNodeManagerLockLocation().exists());
+   }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact


Reply via email to