[
https://issues.apache.org/jira/browse/ARTEMIS-3623?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Clebert Suconic closed ARTEMIS-3623.
------------------------------------
Resolution: Fixed
> extraProperties._AMQ_ACTUAL_EXPIRY should be numeric in expired AMQP messages
> -----------------------------------------------------------------------------
>
> Key: ARTEMIS-3623
> URL: https://issues.apache.org/jira/browse/ARTEMIS-3623
> Project: ActiveMQ Artemis
> Issue Type: Bug
> Components: AMQP
> Affects Versions: 2.20.0
> Reporter: Erwin Dondorp
> Priority: Minor
> Fix For: 2.21.0, 2.19.1
>
> Attachments: image-2021-12-30-10-40-10-032.png, screenshot-1.png
>
> Time Spent: 3.5h
> Remaining Estimate: 0h
>
> When an AMQP message is expired, it is moved to the ExpiryQueue. With this
> process, a few extra properties are added to describe the original/previous
> location of the message.
> However, property {{extraProperties._AMQ_ACTUAL_EXPIRY}} is added as a string
> value. This could have been an integer value to match the original data type.
> Since JS function {{formatTimestamp()}} is used to represent the value, the
> original string value is displayed again in parentheses.
> Solution is expected to be one of these 3:
> 1) (preferred) {{_AMQ_ACTUAL_EXPIRY}} is made numeric. Function
> {{formatTimestamp()}} can do its work and a proper date-time will be shown.
> 2) (alternative) {{_AMQ_ACTUAL_EXPIRY}} remains a string. Function
> {{formatTimestamp()}} should no longer be called.
> 3) (alternative) {{_AMQ_ACTUAL_EXPIRY}} remains a string. Function
> {{formatTimestamp()}} is called with the {{parseInt()}} value of the string
> when the string consists only of digits.
> I'll create a PR for solution 1.
> !image-2021-12-30-10-40-10-032.png!
> Analysis notes:
> * (OK) example {{org.apache.activemq.artemis.jms.example.ExpiryExample}} uses
> {{getLongProperty("_AMQ_ACTUAL_EXPIRY")}}; and
> * (OK) {{org.apache.activemq.artemis.core.server.impl.QueueImpl}} uses
> {{copy.setBrokerProperty(Message.HDR_ACTUAL_EXPIRY_TIME,
> System.currentTimeMillis());}}; and
> * (OK)
> {{org.apache.activemq.artemis.core.server.transformer.ServerMessageImpl}}
> uses {{long actualExpiryTime = System.currentTimeMillis();
> message.putLongProperty(Message.HDR_ACTUAL_EXPIRY_TIME, actualExpiryTime);}};
> and
> * (OK)
> {{org.apache.activemq.artemis.tests.integration.client.ExpiryAddressTest}}
> uses {{Long actualExpiryTime = (Long)
> tm.getObjectProperty(Message.HDR_ACTUAL_EXPIRY_TIME);}}.
> * ...
> * (!!!)
> {{org.apache.activemq.artemis.protocol.amqp.broker.AMQPMessage.toPropertyMap()}}
> converts all extraProperties to strings (and truncate them when they are too
> long).
> Development notes:
> Add condition on value type. Numeric values are copied as-is. All other types
> keep their old behaviour.
> Test result:
> !screenshot-1.png!
--
This message was sent by Atlassian Jira
(v8.20.1#820001)