[prev in list] [next in list] [prev in thread] [next in thread] 

List:       activemq-dev
Subject:    [jira] [Commented] (AMQ-5453) AMQP interop: Active broker does not respect the "drain" flag.
From:       "Alan Conway (JIRA)" <jira () apache ! org>
Date:       2014-11-26 19:41:12
Message-ID: JIRA.12757501.1416861344000.29382.1417030872720 () Atlassian ! JIRA
[Download RAW message or body]


    [ https://issues.apache.org/jira/browse/AMQ-5453?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14226707#comment-14226707 \
] 

Alan Conway commented on AMQ-5453:
----------------------------------

Created an active 6 bug: ACTIVEMQ6-46

> AMQP interop: Active broker does not respect the "drain" flag.
> --------------------------------------------------------------
> 
> Key: AMQ-5453
> URL: https://issues.apache.org/jira/browse/AMQ-5453
> Project: ActiveMQ
> Issue Type: Bug
> Components: AMQP
> Affects Versions: 6.0.0
> Reporter: Alan Conway
> 
> The drain flag on the AMQP flow performative allows a client to request \
> confirmation that it has received the last available message that it has credit to \
> receive. To reproduce using the qpid-send, qpid-receive clients from \
> http://svn.apache.org/repos/asf/qpid/trunk/qpid/. Create a JMS queue 'foo' on the \
> active broker then run: $ qpid-send -a jms.queue.foo -b localhost:5455 \
> --content-string XXX --connection-options='{protocol:amqp1.0}' $ qpid-receive -a \
> jms.queue.foo -b localhost:5455 --connection-options='{protocol:amqp1.0}' \
> --log-enable trace+:Protocol qpid-receive hangs, the  last line of output is:
> 2014-11-24 15:15:46 [Protocol] trace [58e8ee08-0f33-426b-b77a-450f7c3d976c]: 0 -> \
> @flow(19) [next-incoming-id=2, incoming-window=2147483647, next-outgoing-id=0, \
> outgoing-window=0, handle=0, delivery-count=1, link-credit=1, drain=true] This \
> shows that qpid-receive sent a flow with drain=true but never received a response. \
> Why is this important? Without the drain flag it is impossible for a client to \
> implement the simple behavior "get the next message" correctly. The flow response \
> tells the client immediately "there are no more messages available for you". \
> Without it the client can only use a timeout which is unreliable (if too short the \
> client may give up while the message is in flight) and inefficient (if too long the \
> client will wait needlessly for messages that the broker knows are not presently \
> available) The spec 2.6.7 is a little ambiguous about whether this is a SHOULD or a \
> MUST behavior but without it it is impossible to implement the use cases described \
> in the following section. AMQP 1.0 specification 2.7.6
> drain
> The drain flag indicates how the sender SHOULD behave when insufficient messages \
> are available to consume the current link-credit. If set, the sender will (after \
> sending all available messages) advance the delivery-count as much as possible, \
> consuming all link-credit, and send the flow state to the receiver. Only the \
> receiver can independently modify this field. The sender's value is always the last \
> known value indicated by the receiver. If the link-credit is less than or equal to \
> zero, i.e., the delivery-count is the same as or greater than the delivery-limit, a \
> sender MUST NOT send more messages. If the link-credit is reduced by the receiver \
> when transfers are in-flight, the receiver MAY either handle the excess messages \
> normally or detach the link with a transfer-limit-exceeded error code. Figure 2.40: \
> Flow Control +----------+                                    +----------+
> > Sender  |---------------transfer------------>| Receiver |
> +----------+                                    +----------+
> \        / <----------------flow--------------- \        /
> +------+                                        +------+
> > 
> > 
> > 
> if link-credit <= 0 then pause 
> 
> If the sender's drain flag is set and there are no available messages, the sender \
> MUST advance its delivery-count until link-credit is zero, and send its updated \
> flow state to the receiver.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic