Marcel Meulemans created PROTON-1892:
----------------------------------------
Summary: Deliveries on different links use the same delivery-id
Key: PROTON-1892
URL: https://issues.apache.org/jira/browse/PROTON-1892
Project: Qpid Proton
Issue Type: Bug
Components: proton-j
Affects Versions: proton-j-0.27.1
Reporter: Marcel Meulemans
Attachments: proton-j-delivery-id-fix.patch, proton-trace.log
Given a session with two outgoing links the situation can occur that two
deliveries on separate links share the same delivery-id. This situation occurs
when a multi frame transfer is being sent on link A and a new (single frame)
transfer is sent (multiplexed) on link B before the delivery on link A
completes. The reason this occurs is because the increment of the delivery id
counter (maintained per session) is delayed until the entire (multi frame)
delivery is complete
([here|https://github.com/apache/qpid-proton-j/blob/e5a7dcade2996b2b68967949ddf1377f954bf579/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java#L619])
allowing the second delivery to get the same delivery id when calling
getOutgoingDeliveryId
[here|https://github.com/apache/qpid-proton-j/blob/e5a7dcade2996b2b68967949ddf1377f954bf579/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java#L559]
My 100% reproduction scenario is as follows:
* Run artemis (2.6.2 which uses proton-j 0.27.1) with an AMQP connector
* Send a large message (10MB) to queue A
* Send a couple of small messages to queue B
* Connect a proton-c based client with a small maxFrameSize (8K) and limited
credit to artemis and simultaneously subscribe to both queues (I think a flow
frame triggers artemis to initiate a transfer therefore the limited credit).
With proton-c trace logging enable you will get something like this:
[^proton-trace.log]
The attached patch fixes the issue.
[^proton-j-delivery-id-fix.patch]
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]