[ https://issues.apache.org/jira/browse/ARTEMIS-3623?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Erwin Dondorp updated ARTEMIS-3623: ----------------------------------- Fix Version/s: 2.21.0 > 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 > > Attachments: image-2021-12-30-10-40-10-032.png, screenshot-1.png > > Time Spent: 2h 50m > 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)