[ 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