Uploaded image for project: 'ActiveMQ Classic'
  1. ActiveMQ Classic
  2. AMQ-5374

AMQP delivery-count header set to the wrong value following a rollback

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 5.11.0
    • AMQP
    • None

    Description

      The delivery-count field in the AMQP 1.0 message header tracks prior unsuccessful delivery attempts and so should go 0,1,2. In testing against the 5.11-SNAPSHOT I see the value going from 0 (unset, default) initially, to 2, then 3, etc, following repeated rollbacks. I have tracked this to a defect in the proton-jms contrib artifact and corrected it via PROTON-704, for inclusion in Proton 0.8.

      The issue can be seen in the below snippets of protocol trace (at the lines marked <<<<<). When the message is first transfered to the client, the delivery count field is null / not set, giving the default value of 0. Later when the message is sent again after a rollback, the delivery-count header has incremented to 2 rather than 1.

      <TCP time="15:22:55.967963" seqno="1705009155" size="186">
        <source host="127.0.0.1" port="37703"/>
        <target host="127.0.0.1" port="39557"/>
        
        <frame size="186" doff="2" chan="1"> 
          
          <small-descriptor code="0x0:0x14"/> # transfer
          <list8 size="8" count="4"> # transfer
            <small-uint> 1 </small-uint> # handle
            <uint0/> # delivery-id
            <bin8 size="1"> # delivery-tag
              "0"
            </bin8>
            <uint0/> # message-format
            # <null/> settled
            # <null/> more [false]
            # <null/> rcv-settle-mode
            # <null/> state
            # <null/> resume [false]
            # <null/> aborted [false]
            # <null/> batchable [false]
          </list8>
          
          <small-descriptor code="0x0:0x70"/> # header
          <list8 size="4" count="2"> # header
            <true/> # durable
            <ubyte> 4 </ubyte> # priority
            # <null/> ttl
            # <null/> first-acquirer
            # <null/> delivery-count     <<<<<
          </list8>
          
          <small-descriptor code="0x0:0x72"/> # message-annotations
          <map8 size="23" count="2"> # message-annotations
            <sym8 size="13">
              "x-opt-to-type"
            </sym8>
            <str8-utf8 size="5">
              "queue"
            </str8-utf8>
          </map8>
          
          <small-descriptor code="0x0:0x73"/> # properties
          <list8 size="104" count="10"> # properties
            <str8-utf8 size="54"> # message-id
              "ID:localhost.localdo"
              "main-56080-141200416"
              "5134-2:1:2:1:1"
            </str8-utf8>
            <null/> # user-id
            <str8-utf8 size="29"> # to
              "queue://testJMSXDeli"
              "veryCount"
            </str8-utf8>
            <null/> # subject
            <null/> # reply-to
            <null/> # correlation-id
            <null/> # content-type
            <null/> # content-encoding
            <null/> # absolute-expiry-time
            <time t="1412004165442"/>#2014/9/29 15:22:45.442 # creation-time
            # <null/> group-id
            # <null/> group-sequence
            # <null/> reply-to-group-id
          </list8>
          
          <small-descriptor code="0x0:0x77"/> # amqp-value
          <str8-utf8 size="14"> # amqp-value
            "TextMessage: 0"
          </str8-utf8>
          
        </frame>
        
      </TCP>
      
      <TCP time="15:22:56.033807" seqno="1705009397" size="215">
        <source host="127.0.0.1" port="37703"/>
        <target host="127.0.0.1" port="39557"/>
        
        <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
            <list0/> # accepted
            # <null/> batchable [false]
          </list8>
          
        </frame>
        
        <frame size="191" doff="2" chan="1"> 
          
          <small-descriptor code="0x0:0x14"/> # transfer
          <list8 size="9" count="4"> # transfer
            <small-uint> 1 </small-uint> # handle
            <small-uint> 1 </small-uint> # delivery-id
            <bin8 size="1"> # delivery-tag
              "1"
            </bin8>
            <uint0/> # message-format
            # <null/> settled
            # <null/> more [false]
            # <null/> rcv-settle-mode
            # <null/> state
            # <null/> resume [false]
            # <null/> aborted [false]
            # <null/> batchable [false]
          </list8>
          
          <small-descriptor code="0x0:0x70"/> # header
          <list8 size="8" count="5"> # header
            <true/> # durable
            <ubyte> 4 </ubyte> # priority
            <null/> # ttl
            <null/> # first-acquirer
            <small-uint> 2 </small-uint> # delivery-count     <<<<<
          </list8>
          
          <small-descriptor code="0x0:0x72"/> # message-annotations
          <map8 size="23" count="2"> # message-annotations
            <sym8 size="13">
              "x-opt-to-type"
            </sym8>
            <str8-utf8 size="5">
              "queue"
            </str8-utf8>
          </map8>
          
          <small-descriptor code="0x0:0x73"/> # properties
          <list8 size="104" count="10"> # properties
            <str8-utf8 size="54"> # message-id
              "ID:localhost.localdo"
              "main-56080-141200416"
              "5134-2:1:2:1:1"
            </str8-utf8>
            <null/> # user-id
            <str8-utf8 size="29"> # to
              "queue://testJMSXDeli"
              "veryCount"
            </str8-utf8>
            <null/> # subject
            <null/> # reply-to
            <null/> # correlation-id
            <null/> # content-type
            <null/> # content-encoding
            <null/> # absolute-expiry-time
            <time t="1412004165442"/>#2014/9/29 15:22:45.442 # creation-time
            # <null/> group-id
            # <null/> group-sequence
            # <null/> reply-to-group-id
          </list8>
          
          <small-descriptor code="0x0:0x77"/> # amqp-value
          <str8-utf8 size="14"> # amqp-value
            "TextMessage: 0"
          </str8-utf8>
          
        </frame>
        
      </TCP>
      

      Attachments

        Issue Links

          Activity

            People

              tabish Timothy A. Bish
              robbie Robbie Gemmell
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: