You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "clebert suconic (JIRA)" <ji...@apache.org> on 2015/06/04 02:06:38 UTC

[jira] [Updated] (ARTEMIS-59) AMQP messages published transactionally should be accepted using a TransactionalState

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

clebert suconic updated ARTEMIS-59:
-----------------------------------
    Fix Version/s: 1.1.0

> AMQP messages published transactionally should be accepted using a TransactionalState
> -------------------------------------------------------------------------------------
>
>                 Key: ARTEMIS-59
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-59
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: AMQP
>    Affects Versions: 1.0.0
>            Reporter: Robbie Gemmell
>             Fix For: 1.1.0
>
>
> Currently, when an incoming AMQP message is part of a transaction, it is accepted using the regular Accepted terminal state on the disposition reply. According to the spec [1] the disposition should actually use a TransactionalState with Accepted outcome.
> Similar issue to AMQ-5352 for ActiveMQ 5.
> [1] http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-transactions-v1.0-os.html#doc-idp111808
> The issue can be seen in the following protocol traces.
> The transactional message transfer from the producer:
> {noformat}
> <TCP time="17:24:01.619571" seqno="3858228929" size="194">
>   <source host="127.0.0.1" port="53895"/>
>   <target host="127.0.0.1" port="5455"/>
>   
>   <frame size="194" doff="2" chan="1"> 
>     
>     <small-descriptor code="0x0:0x14"/> # transfer
>     <list8 size="28" count="8"> # transfer
>       <small-uint> 1 </small-uint> # handle
>       <small-uint> 1 </small-uint> # delivery-id
>       <bin8 size="1"> # delivery-tag
>         "0"
>       </bin8>
>       <uint0/> # message-format
>       <null/> # settled
>       <false/> # more
>       <null/> # rcv-settle-mode
>       <small-descriptor code="0x0:0x34"/> # state             <<<< Transactional state
>       <list8 size="11" count="1"> # state
>         <bin8 size="8"> # txn-id
>           00 00 00 00 7f ff ff ff 
>         </bin8>
>         # <null/> outcome
>       </list8>
>       # <null/> resume [false]
>       # <null/> aborted [false]
>       # <null/> batchable [false]
>     </list8>
>     
>     <small-descriptor code="0x0:0x70"/> # header
>     <list8 size="2" count="1"> # header
>       <false/> # durable
>       # <null/> priority
>       # <null/> ttl
>       # <null/> first-acquirer
>       # <null/> delivery-count
>     </list8>
>     
>     <small-descriptor code="0x0:0x72"/> # message-annotations
>     <map8 size="40" count="4"> # message-annotations
>       <sym8 size="18">
>         "x-opt-jms-msg-type"
>       </sym8>
>       <byte> 5 </byte>
>       <sym8 size="13">
>         "x-opt-to-type"
>       </sym8>
>       <byte> 0 </byte>
>     </map8>
>     
>     <small-descriptor code="0x0:0x73"/> # properties
>     <list8 size="79" count="10"> # properties
>       <str8-utf8 size="51"> # message-id
>         "localhost.localdomai"
>         "n-48953-141840504087"
>         "8-0:1:1:1-1"
>       </str8-utf8>
>       <null/> # user-id
>       <str8-utf8 size="7"> # to
>         "myQueue"
>       </str8-utf8>
>       <null/> # subject
>       <null/> # reply-to
>       <null/> # correlation-id
>       <null/> # content-type
>       <null/> # content-encoding
>       <null/> # absolute-expiry-time
>       <time t="1418405041614"/>#2014/12/12 17:24:01.614 # creation-time
>       # <null/> group-id
>       # <null/> group-sequence
>       # <null/> reply-to-group-id
>     </list8>
>     
>     <small-descriptor code="0x0:0x77"/> # amqp-value
>     <str8-utf8 size="12"> # amqp-value
>       "Hello world!"
>     </str8-utf8>
>     
>   </frame>
>   
> </TCP>
> {noformat}
> The disposition for this message can then be seen being updated by the broker the Accepted state, rather than a TransactionalState identifying the transaction and containing the Accepted outcome:
> {noformat}
> <TCP time="17:24:01.630503" seqno="3477470126" size="24">
>   <source host="127.0.0.1" port="5455"/>
>   <target host="127.0.0.1" port="53895"/>
>   
>   <frame size="24" doff="2" chan="1"> 
>     
>     <small-descriptor code="0x0:0x15"/> # disposition
>     <list8 size="11" count="5"> # disposition
>       <true/> # role
>       <small-uint> 1 </small-uint> # first
>       <small-uint> 1 </small-uint> # last
>       <true/> # settled
>       <small-descriptor code="0x0:0x24"/> # state               <<<< Non-Transactional state
>       <list0/> # accepted
>       # <null/> batchable [false]
>     </list8>
>     
>   </frame>
>   
> </TCP>
> {noformat}



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