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

Ken Giusti resolved DISPATCH-1880.
----------------------------------
    Resolution: Fixed

> HTTP1: fails to propagate PN_REJECTED due to race
> -------------------------------------------------
>
>                 Key: DISPATCH-1880
>                 URL: https://issues.apache.org/jira/browse/DISPATCH-1880
>             Project: Qpid Dispatch
>          Issue Type: Bug
>          Components: Protocol Adaptors
>    Affects Versions: 1.15.0
>            Reporter: Ken Giusti
>            Assignee: Ken Giusti
>            Priority: Major
>             Fix For: 1.15.0
>
>
> If the adaptor rejects an AMQP message containing invalid/corrupted HTTP 
> information in some cases the PN_REJECTED outcome is not propagated.  The 
> associated delivery is settled without a terminal outcome.
> The root cause is the adaptor is calling qd_message_set_discard(msg, true) in 
> the core_link_deliver adaptor callback.  qd_message_set_discard can only be 
> called by the I/O thead that is receiving the AMQP message - NOT the outgoing 
> thread!
> Here's a high-level description of the race:
> Thread 0: receives an AMQP message from neighboring router. AMQP message 
> contains HTTP message destined to locally attached HTTP endpoint.  Message is 
> streaming.  Thread hands AMQP message up to core for forwarding
> Core: forwards message to HTTP adaptor
> Thread 1: runs HTTP adaptor qdr_connection_process() which eventually invokes 
> the core_link_deliver callback.  This callback detects an error in the HTTP 
> message, marks the send as complete, sets qd_message_set_discard(msg, true), 
> then returns PN_REJECT.  This causes the caller (qdr_link_process_deliveries) 
> to enqueue a delivery update to the core with settled=true and 
> dispo=PN_REJECT.
> Thread 0 is scheduled next before the Core thread can process the delivery 
> state update:
> Thread 0: runs AMQP rx handler, detects the message has its discard flag set 
> and begins to discard the incoming message.  The message happens to complete 
> and thread 0 immediately settled the associated pn_delivery.  Disposition is 
> not updated.
> Core: processes the delivery update but the proton pn_delivery is gone so the 
> update is lost.
>  
>  
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to