Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1049,12 +1049,13 @@ private void writeProperties(FileWriter writer) throws Exception {
}
}

final Set<String> ignored = Set.of(
static final Set<String> defaultIgnoredForExportProperties = Set.of(
// we report errors through the status, it should not typically be set
"status",
// we cannot import a map<string,set<string>> property and this feature is only applied by the xml parser
"securityRoleNameMappings",
// another xml ism using a deprecated config object
// using a deprecated config object
"queueConfigurations",
"queueConfigs",
"encodeSize",
// duplicates
Expand All @@ -1072,6 +1073,19 @@ private void writeProperties(FileWriter writer) throws Exception {
// and connectionElements need to be split
"connectionElements"
);

static Map<Class, Set<String>> ignoredByType = Map.of(
CoreAddressConfiguration.class, Set.of("queueConfigurations")
);

static boolean isIgnored(Class clazz, PropertyDescriptor descriptor) {
Set<String> ignoredByTypeSet = ignoredByType.get(clazz);
if (ignoredByTypeSet != null) {
return ignoredByTypeSet.contains(descriptor.getName());
}
return defaultIgnoredForExportProperties.contains(descriptor.getName());
}

private void export(BeanUtilsBean beanUtils, Stack<String> nested, BufferedWriter bufferedWriter, Object value) {

if (value instanceof Collection collection) {
Expand Down Expand Up @@ -1141,7 +1155,7 @@ private void export(BeanUtilsBean beanUtils, Stack<String> nested, BufferedWrite
// recursive export via accessors
Arrays.stream(beanUtils.getPropertyUtils().getPropertyDescriptors(value)).filter(propertyDescriptor -> {

if (ignored.contains(propertyDescriptor.getName())) {
if (isIgnored(value.getClass(), propertyDescriptor)) {
return false;
}
final Method descriptorReadMethod = propertyDescriptor.getReadMethod();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package org.apache.activemq.artemis.core.config.impl;


import static org.apache.activemq.artemis.core.config.impl.ConfigurationImpl.REDACTED;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
Expand Down Expand Up @@ -60,11 +61,13 @@

import org.apache.activemq.artemis.ArtemisConstants;
import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
import org.apache.activemq.artemis.api.core.QueueConfiguration;
import org.apache.activemq.artemis.api.core.RoutingType;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.core.config.Configuration;
import org.apache.activemq.artemis.core.config.ConfigurationUtils;
import org.apache.activemq.artemis.core.config.CoreAddressConfiguration;
import org.apache.activemq.artemis.core.config.HAPolicyConfiguration;
import org.apache.activemq.artemis.core.config.LockCoordinatorConfiguration;
import org.apache.activemq.artemis.core.config.ScaleDownConfiguration;
Expand Down Expand Up @@ -3067,6 +3070,47 @@ public void testExportInvalidPropertyOnAcceptor() throws Exception {
assertEquals("", configuration.getAcceptorConfigurations().stream().findFirst().get().getCombinedParams().get("useKQueue"));
}

@Test
public void testDeprecatedConfigsAreNotExportedAsProperties() throws Exception {
ConfigurationImpl configuration = new ConfigurationImpl();
configuration.addQueueConfiguration(QueueConfiguration.of("shouldNotBeHere"));

configuration.addAddressConfiguration(new CoreAddressConfiguration().setName("test").addQueueConfiguration(QueueConfiguration.of("test").setAddress("test").setRoutingType(RoutingType.ANYCAST)).addRoutingType(RoutingType.ANYCAST));

CoreAddressConfiguration carAddress = new CoreAddressConfiguration();
carAddress.setName("CarOrders");
carAddress.addRoutingType(RoutingType.MULTICAST);

carAddress.addQueueConfiguration(QueueConfiguration.of("tires").setRoutingType(RoutingType.MULTICAST));
carAddress.addQueueConfiguration(QueueConfiguration.of("batteries").setRoutingType(RoutingType.MULTICAST));
configuration.addAddressConfiguration(carAddress);

File fileOutput = new File(getTestDirfile(), "broker.properties");
assertDoesNotThrow(() -> configuration.exportAsProperties(fileOutput));
Properties properties = new Properties();
try (InputStream inStream = Files.newInputStream(fileOutput.toPath())) {
properties.load(inStream);
}

AtomicBoolean foundTires = new AtomicBoolean(false);
AtomicBoolean foundBatteries = new AtomicBoolean(false);
assertFalse(properties.isEmpty());
properties.forEach((a, b) -> {
assertFalse(String.valueOf(a).contains("queueConfigurations"));
assertFalse(String.valueOf(b).contains("shouldNotBeHere"));
if (String.valueOf(b).equals("batteries")) {
foundBatteries.set(true);
}
if (String.valueOf(b).equals("tires")) {
foundTires.set(true);
}
});
assertTrue(foundBatteries.get());
assertTrue(foundTires.get());
assertTrue(properties.containsKey("addressConfigurations.test.name"));
assertTrue(properties.containsKey("addressConfigurations.test.queueConfigs.test.name"));
}

/**
* Verifies the lock coordinator configuration parsing and export process:
* <ul>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,10 @@ public void testFileConfiguration() {
}

private void validateFullConfig(Configuration configInstance) {
validateFullConfig(configInstance, false);
}

private void validateFullConfig(Configuration configInstance, boolean fromProperties) {
// Check they match the values from the test file
assertEquals("SomeNameForUseOnTheApplicationServer", configInstance.getName());
assertFalse(configInstance.isPersistenceEnabled());
Expand Down Expand Up @@ -610,20 +614,22 @@ private void validateFullConfig(Configuration configInstance) {
assertEquals(104, configInstance.getResourceLimitSettings().get("myUser").getMaxSessions());
assertEquals(13, configInstance.getResourceLimitSettings().get("myUser").getMaxQueues());

assertEquals(2, configInstance.getQueueConfigs().size());

assertEquals("queue1", configInstance.getQueueConfigs().get(0).getName().toString());
assertEquals("address1", configInstance.getQueueConfigs().get(0).getAddress().toString());
assertEquals("color='red'", configInstance.getQueueConfigs().get(0).getFilterString().toString());
assertNotNull(configInstance.getQueueConfigs().get(0).isDurable());
assertFalse(configInstance.getQueueConfigs().get(0).isDurable());

assertEquals("queue2", configInstance.getQueueConfigs().get(1).getName().toString());
assertEquals("address2", configInstance.getQueueConfigs().get(1).getAddress().toString());
assertEquals("color='blue'", configInstance.getQueueConfigs().get(1).getFilterString().toString());
assertNotNull(configInstance.getQueueConfigs().get(1).isDurable());
assertFalse(configInstance.getQueueConfigs().get(1).isDurable());

if (!fromProperties) {
// we don't export deprecated entries
assertEquals(2, configInstance.getQueueConfigs().size());

assertEquals("queue1", configInstance.getQueueConfigs().get(0).getName().toString());
assertEquals("address1", configInstance.getQueueConfigs().get(0).getAddress().toString());
assertEquals("color='red'", configInstance.getQueueConfigs().get(0).getFilterString().toString());
assertNotNull(configInstance.getQueueConfigs().get(0).isDurable());
assertFalse(configInstance.getQueueConfigs().get(0).isDurable());

assertEquals("queue2", configInstance.getQueueConfigs().get(1).getName().toString());
assertEquals("address2", configInstance.getQueueConfigs().get(1).getAddress().toString());
assertEquals("color='blue'", configInstance.getQueueConfigs().get(1).getFilterString().toString());
assertNotNull(configInstance.getQueueConfigs().get(1).isDurable());
assertFalse(configInstance.getQueueConfigs().get(1).isDurable());
}
verifyAddresses();

Map<String, Set<Role>> roles = configInstance.getSecurityRoles();
Expand Down Expand Up @@ -1048,7 +1054,7 @@ public void testExportImportFromProperties() throws Exception {

assertTrue(REDACTED.equals(configuration.getClusterPassword()));
configuration.setClusterPassword("Wombat");
validateFullConfig(configuration);
validateFullConfig(configuration, true);
}

private Configuration createConfiguration(String filename) throws Exception {
Expand Down