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