[ 
https://issues.apache.org/jira/browse/QPID-5057?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Pavel Moravec updated QPID-5057:
--------------------------------

    Attachment: SendMsgTimestamp.java

Reproducer that sends 4 messages to DurableQueue, one after another having:
- expiration set 10 seconds in advance (this wont cause the message to expire 
though, see AMQP 0.10 specification for reasoning)
- default one
- timestamp set 100 seconds in advance
- TTL set to 10 seconds

See e.g. in tcpdump what is really sent.

Current behaviour:
- 1st message has proper timestamp in year 45588 or so and 
expiration=currentTime+10
- 2nd message has timestamp in year 45588 or so
- 3rd message has timestamp in year 45588 or so
- 4th message has timestamp in year 45588 or so,  expiration=timestamp+10 (also 
too far in future) and TTL=10

Expected behaviour:
- 1st message has proper timestamp=currentTime and expiration=currentTime+10
- 2nd message has timestamp=currentTime
- 3rd message has timestamp=currentTime+100
- 4th message has timestamp=currentTime, expiration=currentTime+10 and TTL=10
                
> Delivery properties "expiration" and "timestamp" are in milliseconds instead 
> of seconds
> ---------------------------------------------------------------------------------------
>
>                 Key: QPID-5057
>                 URL: https://issues.apache.org/jira/browse/QPID-5057
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Client
>    Affects Versions: 0.22
>            Reporter: Pavel Moravec
>            Priority: Minor
>         Attachments: bz995079.patch, SendMsgTimestamp.java
>
>
> Per AMQP 0.10 specification, message delivery properties  "expiration" and 
> "timestamp" are of type datetime, that is 64 bit POSIX time_t format, i.e. 
> "seconds since Epoch".
> But Java client implementation of both 0.8 and 0.10 protocol versions encodes 
> the properties in milliseconds. See e.g. 
> org/apache/qpid/client/BasicMessageProducer_0_10.java:
>         long currentTime = 0;
>         if (timeToLive > 0 || !isDisableTimestamps())
>         {
>             currentTime = System.currentTimeMillis();
>         }
>         if (timeToLive > 0)
>         {
>             deliveryProp.setTtl(timeToLive);
>             message.setJMSExpiration(currentTime + timeToLive);
>         }
>         if (!isDisableTimestamps())
>         {
>             deliveryProp.setTimestamp(currentTime);
>             message.setJMSTimestamp(currentTime);
>         }
> I.e. there should be "currentTime = System.currentTimeMillis()/1000;", rather.
> The same is in 0.8 client as well (while AMQP 0.8 specification does not know 
> either of the two delivery properties).
> I could propose a trivial patch for the 0.8 and 0.10 client, but I am not 
> sure how this affects:
> - AMQP 1.0 implementation I am not familiar with
> - (Java only?) broker or other clients utilizing the properties

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to