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 397312080f ARTEMIS-5375 provide fileAlder32 checksum in the status for
property files
397312080f is described below
commit 397312080fc26beee7664b7679ad715f9c2fcc83
Author: Gary Tully <[email protected]>
AuthorDate: Wed Apr 2 15:06:16 2025 +0100
ARTEMIS-5375 provide fileAlder32 checksum in the status for property files
---
.../core/config/impl/ConfigurationImpl.java | 55 ++++++++++++----------
.../core/config/impl/ConfigurationImplTest.java | 5 ++
2 files changed, 36 insertions(+), 24 deletions(-)
diff --git
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
index 76128e6bca..78a7780125 100644
---
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
+++
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImpl.java
@@ -23,9 +23,11 @@ import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
-import java.io.FileReader;
+import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
@@ -61,6 +63,7 @@ import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.zip.Adler32;
+import java.util.zip.CheckedInputStream;
import java.util.zip.Checksum;
import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
@@ -470,7 +473,6 @@ public class ConfigurationImpl implements Configuration,
Serializable {
*/
private File artemisInstance;
private transient JsonObject jsonStatus =
JsonLoader.createObjectBuilder().build();
- private transient Checksum transientChecksum = null;
private final Set<String> keysToRedact = new HashSet<>();
private JsonObject getJsonStatus() {
@@ -480,17 +482,6 @@ public class ConfigurationImpl implements Configuration,
Serializable {
return jsonStatus;
}
- // Checksum would be otherwise final
- // however some Quorum actiations are using Serialization to make a deep
copy of ConfigurationImpl and it would become null
- // for that reason this i making the proper initialization when needed.
- private Checksum getCheckSun() {
- if (transientChecksum == null) {
- transientChecksum = new Adler32();
- }
- return transientChecksum;
- }
-
-
@Override
public String getJournalRetentionDirectory() {
return journalRetentionDirectory;
@@ -599,14 +590,14 @@ public class ConfigurationImpl implements Configuration,
Serializable {
public void parseFileProperties(File file) throws Exception {
final ConfigurationImpl configuration = this;
InsertionOrderedProperties brokerProperties = new
InsertionOrderedProperties();
- try (FileReader fileReader = new FileReader(file);
- BufferedReader reader = new BufferedReader(fileReader)) {
+ try (CheckedInputStream checkedInputStream = new CheckedInputStream(new
FileInputStream(file), new Adler32())) {
try {
if (file.getName().endsWith(".json")) {
- brokerProperties.loadJson(configuration, reader);
+ brokerProperties.loadJson(configuration, checkedInputStream);
} else {
- brokerProperties.load(reader);
+ brokerProperties.load(checkedInputStream);
}
+
brokerProperties.setFileChecksum(checkedInputStream.getChecksum().getValue());
} catch (Exception readOrParseError) {
logger.debug("Properties config load error on file {}, {}",
file.getName(), readOrParseError);
updateApplyStatus(file.getName(), Map.of("loadError",
readOrParseError.toString()));
@@ -623,11 +614,8 @@ public class ConfigurationImpl implements Configuration,
Serializable {
@Override
public void parsePrefixedProperties(Object target, String name, Properties
properties, String prefix) throws Exception {
Map<String, Object> beanProperties = new LinkedHashMap<>();
- long alder32Hash = 0;
+ final Checksum checksum = new Adler32();
synchronized (properties) {
- Checksum checksum = getCheckSun();
-
- checksum.reset();
String key = null;
for (Map.Entry<Object, Object> entry : properties.entrySet()) {
key = entry.getKey().toString();
@@ -653,9 +641,12 @@ public class ConfigurationImpl implements Configuration,
Serializable {
logger.debug("Property config, {}={}", key, (masked ||
shouldRedact(key)) ? REDACTED : value);
beanProperties.put(key, value);
}
- alder32Hash = checksum.getValue();
}
- updateReadPropertiesStatus(name, alder32Hash);
+ long fileAlder32 = 0;
+ if (properties instanceof InsertionOrderedProperties
insertionOrderedProperties) {
+ fileAlder32 = insertionOrderedProperties.getFileChecksum();
+ }
+ updateReadPropertiesStatus(name, checksum.getValue(), fileAlder32);
if (!beanProperties.isEmpty()) {
populateWithProperties(target, name, beanProperties);
@@ -1200,9 +1191,10 @@ public class ConfigurationImpl implements Configuration,
Serializable {
this.jsonStatus = JsonUtil.mergeAndUpdate(status,
jsonObjectBuilder.build());
}
- private synchronized void updateReadPropertiesStatus(String propsId, long
alder32Hash) {
+ private synchronized void updateReadPropertiesStatus(String propsId, long
alder32Hash, long fileAlder32) {
JsonObjectBuilder propertiesReadStatusBuilder =
JsonLoader.createObjectBuilder();
propertiesReadStatusBuilder.add("alder32", String.valueOf(alder32Hash));
+ propertiesReadStatusBuilder.add("fileAlder32",
String.valueOf(fileAlder32));
JsonObjectBuilder jsonObjectBuilder =
JsonUtil.objectBuilderWithValueAtPath("properties/" + propsId,
propertiesReadStatusBuilder.build());
JsonObject jsonStatus = getJsonStatus();
this.jsonStatus = JsonUtil.mergeAndUpdate(jsonStatus,
jsonObjectBuilder.build());
@@ -3906,6 +3898,7 @@ public class ConfigurationImpl implements Configuration,
Serializable {
public static class InsertionOrderedProperties extends Properties {
final LinkedHashMap<Object, Object> orderedMap = new LinkedHashMap<>();
+ long fileChecksum = 0;
@Override
public Object put(Object key, Object value) {
@@ -3922,6 +3915,12 @@ public class ConfigurationImpl implements Configuration,
Serializable {
orderedMap.clear();
}
+ public synchronized boolean loadJson(ConfigurationImpl configuration,
InputStream inputStream) throws IOException {
+ try (Reader reader = new BufferedReader(new
InputStreamReader(inputStream))) {
+ return loadJson(configuration, reader);
+ }
+ }
+
public synchronized boolean loadJson(ConfigurationImpl configuration,
Reader reader) throws IOException {
JsonObject jsonObject = JsonLoader.readObject(reader);
final String surroundString = determineSurroundString(configuration,
jsonObject);
@@ -3974,5 +3973,13 @@ public class ConfigurationImpl implements Configuration,
Serializable {
}
return surroundString;
}
+
+ public void setFileChecksum(long value) {
+ fileChecksum = value;
+ }
+
+ public long getFileChecksum() {
+ return fileChecksum;
+ }
}
}
diff --git
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
index 84b8214af7..1aaf82b060 100644
---
a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
+++
b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
@@ -2059,6 +2059,7 @@ public class ConfigurationImplTest extends
AbstractConfigurationTestBase {
configuration.parseProperties(tmpFile.getAbsolutePath());
testSimpleConfig(configuration);
+
assertTrue(configuration.getStatus().contains("\"fileAlder32\":\"2885074053\""));
}
@Test
@@ -2075,6 +2076,7 @@ public class ConfigurationImplTest extends
AbstractConfigurationTestBase {
configuration.parseProperties(tmpFile.getAbsolutePath());
testSimpleConfig(configuration);
+
assertTrue(configuration.getStatus().contains("\"fileAlder32\":\"3147794929\""));
}
@Test
@@ -2277,6 +2279,9 @@ public class ConfigurationImplTest extends
AbstractConfigurationTestBase {
assertEquals("cc",
configuration.getClusterConfigurations().get(0).getName());
assertEquals(MessageLoadBalancingType.OFF_WITH_REDISTRIBUTION,
configuration.getClusterConfigurations().get(0).getMessageLoadBalancingType());
assertEquals(CriticalAnalyzerPolicy.SHUTDOWN,
configuration.getCriticalAnalyzerPolicy());
+
+ assertTrue(configuration.getStatus().contains("\"alder32"));
+ assertTrue(configuration.getStatus().contains("\"fileAlder32"));
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact