[
https://issues.apache.org/jira/browse/ARTEMIS-3623?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Erwin Dondorp updated ARTEMIS-3623:
-----------------------------------
Description:
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 this.
!image-2021-12-30-10-40-10-032.png!
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).
was:
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 try to create a PR for this.
Current challenge: where does the broker convert this field to a string? hints
welcome...
!image-2021-12-30-10-40-10-032.png!
Notes:
* example {{org.apache.activemq.artemis.jms.example.ExpiryExample}} uses
{{getLongProperty("_AMQ_ACTUAL_EXPIRY")}}; and
* {{org.apache.activemq.artemis.core.server.impl.QueueImpl}} uses
{{copy.setBrokerProperty(Message.HDR_ACTUAL_EXPIRY_TIME,
System.currentTimeMillis());}}; and
* {{org.apache.activemq.artemis.core.server.transformer.ServerMessageImpl}}
uses {{long actualExpiryTime = System.currentTimeMillis();
message.putLongProperty(Message.HDR_ACTUAL_EXPIRY_TIME, actualExpiryTime);}};
and
* {{org.apache.activemq.artemis.tests.integration.client.ExpiryAddressTest}}
uses {{Long actualExpiryTime = (Long)
tm.getObjectProperty(Message.HDR_ACTUAL_EXPIRY_TIME);}}.
> extraProperties._AMQ_ACTUAL_EXPIRY should be numeric in expired AMQP message
> ----------------------------------------------------------------------------
>
> 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
> Attachments: image-2021-12-30-10-40-10-032.png
>
>
> 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 this.
> !image-2021-12-30-10-40-10-032.png!
> 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).
--
This message was sent by Atlassian Jira
(v8.20.1#820001)