Github user michaelandrepearce commented on a diff in the pull request:
https://github.com/apache/activemq-artemis/pull/2427#discussion_r233513078
--- Diff:
artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java
---
@@ -564,34 +604,59 @@ public CoreMessage setUserID(UUID userID) {
/**
* I am keeping this synchronized as the decode of the Properties is
lazy
*/
- protected TypedProperties checkProperties() {
+ protected final TypedProperties checkProperties() {
try {
+ TypedProperties properties = this.properties;
if (properties == null) {
- synchronized (this) {
- if (properties == null) {
- TypedProperties properties = new TypedProperties();
- if (buffer != null && propertiesLocation >= 0) {
- final ByteBuf byteBuf =
buffer.duplicate().readerIndex(propertiesLocation);
- properties.decode(byteBuf, coreMessageObjectPools ==
null ? null : coreMessageObjectPools.getPropertiesDecoderPools());
- }
- this.properties = properties;
- }
+ properties = getOrInitializeTypedProperties();
+ }
+ return properties;
+ } catch (Throwable e) {
+ throw onCheckPropertiesError(e);
+ }
+ }
+
+ private TypedProperties getOrInitializeTypedProperties() {
+ synchronized (this) {
+ TypedProperties properties = this.properties;
+ if (properties == null) {
+ properties = createTypedProperties();
+ if (buffer != null && propertiesLocation >= 0) {
+ final ByteBuf byteBuf =
buffer.duplicate().readerIndex(propertiesLocation);
+ properties.decode(byteBuf, coreMessageObjectPools == null ?
null : coreMessageObjectPools.getPropertiesDecoderPools());
}
+ this.properties = properties;
}
+ return properties;
+ }
+ }
- return this.properties;
- } catch (Throwable e) {
- ByteBuf duplicatebuffer = buffer.duplicate();
- duplicatebuffer.readerIndex(0);
+ private RuntimeException onCheckPropertiesError(Throwable e) {
+ ByteBuf duplicatebuffer = buffer.duplicate();
+ duplicatebuffer.readerIndex(0);
- // This is not an expected error, hence no specific logger created
- logger.warn("Could not decode properties for
CoreMessage[messageID=" + messageID + ",durable=" + durable + ",userID=" +
userID + ",priority=" + priority +
- ", timestamp=" + timestamp + ",expiration=" + expiration +
",address=" + address + ", propertiesLocation=" + propertiesLocation, e);
- logger.warn("Failed message has messageID=" + messageID + " and
the following buffer:\n" + ByteBufUtil.prettyHexDump(duplicatebuffer));
+ // This is not an expected error, hence no specific logger created
+ logger.warn("Could not decode properties for CoreMessage[messageID="
+ messageID + ",durable=" + durable + ",userID=" + userID + ",priority=" +
priority +
+ ", timestamp=" + timestamp + ",expiration=" +
expiration + ",address=" + address + ", propertiesLocation=" +
propertiesLocation, e);
+ logger.warn("Failed message has messageID=" + messageID + " and the
following buffer:\n" + ByteBufUtil.prettyHexDump(duplicatebuffer));
- throw new RuntimeException(e.getMessage(), e);
+ return new RuntimeException(e.getMessage(), e);
--- End diff --
This really should throw the original exception, dont wrap it into
something else, incase other code was catching something explicit.
---