[ 
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)

Reply via email to