diff --git a/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/MessagingSubsystemParser_6_0.java b/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/MessagingSubsystemParser_6_0.java index 08d9873026b2..6d928440b6f3 100644 --- a/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/MessagingSubsystemParser_6_0.java +++ b/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/MessagingSubsystemParser_6_0.java @@ -224,6 +224,7 @@ public PersistentResourceXMLDescription getParserDescription(){ ServerDefinition.JOURNAL_FILE_SIZE, ServerDefinition.JOURNAL_MIN_FILES, ServerDefinition.JOURNAL_POOL_FILES, + ServerDefinition.JOURNAL_FILE_OPEN_TIMEOUT, ServerDefinition.JOURNAL_COMPACT_PERCENTAGE, ServerDefinition.JOURNAL_COMPACT_MIN_FILES, ServerDefinition.JOURNAL_MAX_IO, diff --git a/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/MessagingTransformerRegistration.java b/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/MessagingTransformerRegistration.java index 3d2fc65f2256..0f6c0090bb43 100644 --- a/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/MessagingTransformerRegistration.java +++ b/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/MessagingTransformerRegistration.java @@ -79,8 +79,12 @@ public void registerTransformers(SubsystemTransformerRegistration registration) builder.buildAndRegister(registration, new ModelVersion[] { MessagingExtension.VERSION_1_0_0, MessagingExtension.VERSION_2_0_0, MessagingExtension.VERSION_3_0_0, MessagingExtension.VERSION_4_0_0, MessagingExtension.VERSION_5_0_0}); } -private static void registerTransformers_WF_16(ResourceTransformationDescriptionBuilder subsystem) { - ResourceTransformationDescriptionBuilder queue = subsystem.addChildResource(SERVER_PATH).addChildResource(QUEUE_PATH); + + private static void registerTransformers_WF_16(ResourceTransformationDescriptionBuilder subsystem) { + ResourceTransformationDescriptionBuilder server = subsystem.addChildResource(SERVER_PATH); + rejectDefinedAttributeWithDefaultValue(server, ServerDefinition.JOURNAL_FILE_OPEN_TIMEOUT); + + ResourceTransformationDescriptionBuilder queue = server.addChildResource(QUEUE_PATH); rejectDefinedAttributeWithDefaultValue(queue, QueueDefinition.ROUTING_TYPE); ResourceTransformationDescriptionBuilder jmsBridge = subsystem.addChildResource(MessagingExtension.JMS_BRIDGE_PATH); @@ -90,6 +94,7 @@ private static void registerTransformers_WF_16(ResourceTransformationDescription defaultValueAttributeConverter(jmsBridge, JMSBridgeDefinition.MAX_BATCH_SIZE); defaultValueAttributeConverter(jmsBridge, JMSBridgeDefinition.MAX_BATCH_TIME); } + private static void registerTransformers_WF_15(ResourceTransformationDescriptionBuilder subsystem) { ResourceTransformationDescriptionBuilder server = subsystem.addChildResource(MessagingExtension.SERVER_PATH); // WFLY-10976 - journal-pool-files default value is 10. diff --git a/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/ServerAdd.java b/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/ServerAdd.java index 5f5db81d9c90..5fce00ed90b1 100644 --- a/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/ServerAdd.java +++ b/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/ServerAdd.java @@ -64,6 +64,7 @@ import static org.wildfly.extension.messaging.activemq.ServerDefinition.JOURNAL_COMPACT_MIN_FILES; import static org.wildfly.extension.messaging.activemq.ServerDefinition.JOURNAL_COMPACT_PERCENTAGE; import static org.wildfly.extension.messaging.activemq.ServerDefinition.JOURNAL_DATASOURCE; +import static org.wildfly.extension.messaging.activemq.ServerDefinition.JOURNAL_FILE_OPEN_TIMEOUT; import static org.wildfly.extension.messaging.activemq.ServerDefinition.JOURNAL_FILE_SIZE; import static org.wildfly.extension.messaging.activemq.ServerDefinition.JOURNAL_JDBC_LOCK_EXPIRATION; import static org.wildfly.extension.messaging.activemq.ServerDefinition.JOURNAL_JDBC_LOCK_RENEW_PERIOD; @@ -226,6 +227,7 @@ public void execute(OperationContext context, ModelNode operation) throws Operat ServerDefinition.JOURNAL_FILE_SIZE, ServerDefinition.JOURNAL_MIN_FILES, ServerDefinition.JOURNAL_POOL_FILES, + ServerDefinition.JOURNAL_FILE_OPEN_TIMEOUT, ServerDefinition.JOURNAL_COMPACT_PERCENTAGE, ServerDefinition.JOURNAL_COMPACT_MIN_FILES, ServerDefinition.JOURNAL_MAX_IO, @@ -596,6 +598,7 @@ private Configuration transformConfig(final OperationContext context, String ser configuration.setJournalFileSize(JOURNAL_FILE_SIZE.resolveModelAttribute(context, model).asInt()); configuration.setJournalMinFiles(JOURNAL_MIN_FILES.resolveModelAttribute(context, model).asInt()); configuration.setJournalPoolFiles(JOURNAL_POOL_FILES.resolveModelAttribute(context, model).asInt()); + configuration.setJournalFileOpenTimeout(JOURNAL_FILE_OPEN_TIMEOUT.resolveModelAttribute(context, model).asInt()); configuration.setJournalSyncNonTransactional(JOURNAL_SYNC_NON_TRANSACTIONAL.resolveModelAttribute(context, model).asBoolean()); configuration.setJournalSyncTransactional(JOURNAL_SYNC_TRANSACTIONAL.resolveModelAttribute(context, model).asBoolean()); configuration.setLogJournalWriteRate(LOG_JOURNAL_WRITE_RATE.resolveModelAttribute(context, model).asBoolean()); @@ -646,12 +649,6 @@ private Configuration transformConfig(final OperationContext context, String ser return configuration; } - /** - * Process the address settings. - * - * @param configuration the ActiveMQ configuration - * @param params the detyped operation parameters - */ /** * Process the address settings. * diff --git a/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/ServerDefinition.java b/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/ServerDefinition.java index fd537b68771e..6fbccbafb338 100644 --- a/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/ServerDefinition.java +++ b/messaging-activemq/src/main/java/org/wildfly/extension/messaging/activemq/ServerDefinition.java @@ -396,6 +396,18 @@ public class ServerDefinition extends PersistentResourceDefinition { .setValidator(InfiniteOrPositiveValidators.INT_INSTANCE) .setRestartAllServices() .build(); + /** + * @see ActiveMQDefaultConfiguration#getDefaultJournalFileOpenTimeout() + */ + public static final SimpleAttributeDefinition JOURNAL_FILE_OPEN_TIMEOUT = create("journal-file-open-timeout", INT) + .setAttributeGroup("journal") + .setXmlName("file-open-timeout") + .setDefaultValue(new ModelNode(5)) + .setRequired(false) + .setAllowExpression(true) + .setMeasurementUnit(SECONDS) + .setRestartAllServices() + .build(); /** * @see ActiveMQDefaultConfiguration#isDefaultJournalSyncNonTransactional */ @@ -777,7 +789,7 @@ public class ServerDefinition extends PersistentResourceDefinition { JOURNAL_MESSAGES_TABLE, JOURNAL_BINDINGS_TABLE, JOURNAL_JMS_BINDINGS_TABLE, JOURNAL_LARGE_MESSAGES_TABLE, JOURNAL_PAGE_STORE_TABLE, JOURNAL_NODE_MANAGER_STORE_TABLE, JOURNAL_SYNC_TRANSACTIONAL, JOURNAL_SYNC_NON_TRANSACTIONAL, LOG_JOURNAL_WRITE_RATE, - JOURNAL_FILE_SIZE, JOURNAL_MIN_FILES, JOURNAL_POOL_FILES, JOURNAL_COMPACT_PERCENTAGE, JOURNAL_COMPACT_MIN_FILES, JOURNAL_MAX_IO, + JOURNAL_FILE_SIZE, JOURNAL_MIN_FILES, JOURNAL_POOL_FILES, JOURNAL_FILE_OPEN_TIMEOUT, JOURNAL_COMPACT_PERCENTAGE, JOURNAL_COMPACT_MIN_FILES, JOURNAL_MAX_IO, PERF_BLAST_PAGES, RUN_SYNC_SPEED_TEST, SERVER_DUMP_INTERVAL, MEMORY_WARNING_THRESHOLD, MEMORY_MEASURE_INTERVAL, GLOBAL_MAX_DISK_USAGE, DISK_SCAN_PERIOD, GLOBAL_MAX_MEMORY_SIZE }; diff --git a/messaging-activemq/src/main/resources/org/wildfly/extension/messaging/activemq/LocalDescriptions.properties b/messaging-activemq/src/main/resources/org/wildfly/extension/messaging/activemq/LocalDescriptions.properties index afd3efdae8a4..a4d6b95f1cfb 100644 --- a/messaging-activemq/src/main/resources/org/wildfly/extension/messaging/activemq/LocalDescriptions.properties +++ b/messaging-activemq/src/main/resources/org/wildfly/extension/messaging/activemq/LocalDescriptions.properties @@ -381,6 +381,7 @@ server.journal-min-files=How many journal files to pre-create. server.journal-node-manager-store-table=Name of the JDBC table to store the node manager. server.journal-page-store-table=Name of the JDBC table to store pages. server.journal-pool-files=The number of journal files that can be reused. ActiveMQ will create as many files as needed however when reclaiming files it will shrink back to the value (-1 means no limit). +server.journal-file-open-timeout=The timeout (in seconds) for opening journal files. Values <= 0 mean fail immediately. server.journal-sync-non-transactional=Whether to wait for non transaction data to be synced to the journal before returning a response to the client. server.journal-sync-transactional=Whether to wait for transaction data to be synchronized to the journal before returning a response to the client. server.journal-type=The type of journal to use. diff --git a/messaging-activemq/src/main/resources/schema/wildfly-messaging-activemq_6_0.xsd b/messaging-activemq/src/main/resources/schema/wildfly-messaging-activemq_6_0.xsd index 47b0c7024636..c14ef6ee51d2 100644 --- a/messaging-activemq/src/main/resources/schema/wildfly-messaging-activemq_6_0.xsd +++ b/messaging-activemq/src/main/resources/schema/wildfly-messaging-activemq_6_0.xsd @@ -194,6 +194,7 @@ + diff --git a/messaging-activemq/src/test/java/org/wildfly/extension/messaging/activemq/MessagingActiveMQSubsystem_6_0_TestCase.java b/messaging-activemq/src/test/java/org/wildfly/extension/messaging/activemq/MessagingActiveMQSubsystem_6_0_TestCase.java index ef6ede635741..9723be8ff1da 100644 --- a/messaging-activemq/src/test/java/org/wildfly/extension/messaging/activemq/MessagingActiveMQSubsystem_6_0_TestCase.java +++ b/messaging-activemq/src/test/java/org/wildfly/extension/messaging/activemq/MessagingActiveMQSubsystem_6_0_TestCase.java @@ -28,6 +28,9 @@ import static org.jboss.as.model.test.ModelTestControllerVersion.EAP_7_0_0; import static org.jboss.as.model.test.ModelTestControllerVersion.EAP_7_1_0; import static org.junit.Assert.assertTrue; +import static org.wildfly.extension.messaging.activemq.CommonAttributes.DEFAULT; +import static org.wildfly.extension.messaging.activemq.CommonAttributes.SERVER; +import static org.wildfly.extension.messaging.activemq.CommonAttributes.SUBSYSTEM; import static org.wildfly.extension.messaging.activemq.MessagingDependencies.getActiveMQDependencies; import static org.wildfly.extension.messaging.activemq.MessagingDependencies.getJGroupsDependencies; import static org.wildfly.extension.messaging.activemq.MessagingDependencies.getMessagingActiveMQGAV; @@ -59,6 +62,7 @@ import org.jboss.as.subsystem.test.KernelServices; import org.jboss.as.subsystem.test.KernelServicesBuilder; import org.jboss.dmr.ModelNode; +import org.junit.Assert; import org.junit.Test; import org.wildfly.clustering.jgroups.spi.JGroupsDefaultRequirement; import org.wildfly.clustering.spi.ClusteringDefaultRequirement; @@ -107,6 +111,20 @@ public void testSchemaOfSubsystemTemplates() throws Exception { super.testSchemaOfSubsystemTemplates(); } + @Test + public void testJournalAttributes() throws Exception { + KernelServices kernelServices = standardSubsystemTest(null, false); + ModelNode rootModel = kernelServices.readWholeModel(); + ModelNode serverModel = rootModel.require(SUBSYSTEM).require(MessagingExtension.SUBSYSTEM_NAME).require(SERVER) + .require(DEFAULT); + + Assert.assertEquals(1357, serverModel.get(ServerDefinition.JOURNAL_BUFFER_TIMEOUT.getName()).resolve().asInt()); + Assert.assertEquals(102400, serverModel.get(ServerDefinition.JOURNAL_FILE_SIZE.getName()).resolve().asInt()); + Assert.assertEquals(2, serverModel.get(ServerDefinition.JOURNAL_MIN_FILES.getName()).resolve().asInt()); + Assert.assertEquals(5, serverModel.get(ServerDefinition.JOURNAL_POOL_FILES.getName()).resolve().asInt()); + Assert.assertEquals(7, serverModel.get(ServerDefinition.JOURNAL_FILE_OPEN_TIMEOUT.getName()).resolve().asInt()); + } + ///////////////////////////////////////// // Tests for HA Policy Configuration // ///////////////////////////////////////// @@ -119,7 +137,7 @@ public void testHAPolicyConfiguration() throws Exception { /////////////////////// // Transformers test // /////////////////////// - @Test + @Test public void testTransformersEAP_7_2_0() throws Exception { testTransformers(ModelTestControllerVersion.EAP_7_2_0, MessagingExtension.VERSION_4_0_0); } @@ -205,6 +223,7 @@ private void testRejectingTransformers(ModelTestControllerVersion controllerVers ServerDefinition.JOURNAL_JDBC_LOCK_EXPIRATION, ServerDefinition.JOURNAL_JDBC_LOCK_RENEW_PERIOD, ServerDefinition.JOURNAL_NODE_MANAGER_STORE_TABLE, + ServerDefinition.JOURNAL_FILE_OPEN_TIMEOUT, ServerDefinition.GLOBAL_MAX_DISK_USAGE, ServerDefinition.DISK_SCAN_PERIOD, ServerDefinition.GLOBAL_MAX_MEMORY_SIZE @@ -253,6 +272,7 @@ private void testRejectingTransformers(ModelTestControllerVersion controllerVers new FailedOperationTransformationConfig.NewAttributesConfig(ServerDefinition.JOURNAL_JDBC_LOCK_EXPIRATION, ServerDefinition.JOURNAL_JDBC_LOCK_RENEW_PERIOD, ServerDefinition.JOURNAL_NODE_MANAGER_STORE_TABLE, + ServerDefinition.JOURNAL_FILE_OPEN_TIMEOUT, ServerDefinition.GLOBAL_MAX_DISK_USAGE, ServerDefinition.DISK_SCAN_PERIOD, ServerDefinition.GLOBAL_MAX_MEMORY_SIZE @@ -260,13 +280,17 @@ private void testRejectingTransformers(ModelTestControllerVersion controllerVers .addFailedAttribute(subsystemAddress.append(SERVER_PATH, CONNECTION_FACTORY_PATH), new FailedOperationTransformationConfig.NewAttributesConfig( ConnectionFactoryAttributes.Common.INITIAL_MESSAGE_PACKET_SIZE)); - } else if(messagingVersion.compareTo(MessagingExtension.VERSION_5_0_0) > 0 ){ + } else if (messagingVersion.compareTo(MessagingExtension.VERSION_5_0_0) > 0 ) { config.addFailedAttribute(subsystemAddress.append(SERVER_PATH), new FailedOperationTransformationConfig.NewAttributesConfig( ServerDefinition.GLOBAL_MAX_DISK_USAGE, ServerDefinition.DISK_SCAN_PERIOD, - ServerDefinition.GLOBAL_MAX_MEMORY_SIZE)); + ServerDefinition.GLOBAL_MAX_MEMORY_SIZE, + ServerDefinition.JOURNAL_FILE_OPEN_TIMEOUT)); + } else if (messagingVersion.compareTo(MessagingExtension.VERSION_6_0_0) > 0 ) { + config.addFailedAttribute(subsystemAddress.append(SERVER_PATH), new FailedOperationTransformationConfig.NewAttributesConfig(ServerDefinition.JOURNAL_FILE_OPEN_TIMEOUT)); } + if (messagingVersion.compareTo(MessagingExtension.VERSION_4_0_0) > 0) { config.addFailedAttribute(subsystemAddress.append(SERVER_PATH, MessagingExtension.BROADCAST_GROUP_PATH), new FailedOperationTransformationConfig.NewAttributesConfig(BroadcastGroupDefinition.JGROUPS_CHANNEL)); config.addFailedAttribute(subsystemAddress.append(SERVER_PATH, DiscoveryGroupDefinition.PATH), new FailedOperationTransformationConfig.NewAttributesConfig(DiscoveryGroupDefinition.JGROUPS_CHANNEL)); diff --git a/messaging-activemq/src/test/resources/org/wildfly/extension/messaging/activemq/subsystem_6_0.xml b/messaging-activemq/src/test/resources/org/wildfly/extension/messaging/activemq/subsystem_6_0.xml index 41ffaab0b5b2..c48f9d3d90c6 100644 --- a/messaging-activemq/src/test/resources/org/wildfly/extension/messaging/activemq/subsystem_6_0.xml +++ b/messaging-activemq/src/test/resources/org/wildfly/extension/messaging/activemq/subsystem_6_0.xml @@ -182,6 +182,7 @@ file-size="${journal.file.size:102400}" min-files="${journal.min.files:2}" pool-files="${journal.pool.files:5}" + file-open-timeout="${journal.file.open.timeout:7}" compact-percentage="${journal.compact.percentage:83}" compact-min-files="${journal.compact.min.files:2}" max-io="${journal.max.io:50}" diff --git a/messaging-activemq/src/test/resources/org/wildfly/extension/messaging/activemq/subsystem_6_0_reject_transform.xml b/messaging-activemq/src/test/resources/org/wildfly/extension/messaging/activemq/subsystem_6_0_reject_transform.xml index 759a5e15f77c..6fbb818e416e 100644 --- a/messaging-activemq/src/test/resources/org/wildfly/extension/messaging/activemq/subsystem_6_0_reject_transform.xml +++ b/messaging-activemq/src/test/resources/org/wildfly/extension/messaging/activemq/subsystem_6_0_reject_transform.xml @@ -66,7 +66,8 @@ page-store-table="MY_PAGE_STORE" global-max-disk-usage="70" global-max-memory-size="100000" - disk-scan-period="10000"/> + disk-scan-period="10000" + file-open-timeout="7"/>