Uploaded image for project: 'JBoss A-MQ'
  1. JBoss A-MQ
  2. ENTMQ-2156

Handling of client supplied AMQP 1.0 null termini for recoverable subscriptions is inconsistent

    XMLWordPrintable

Details

    • Task
    • Resolution: Obsolete
    • Minor
    • None
    • JBoss A-MQ 6.3.x
    • broker
    • None

    Description

      When utilizing the AMQP.Net Lite client and creating a ReceiverLink it appears according to the comments in the source that to create a recoverable sub a null Source should be utilized. There has been some discussion recently regarding what the AMQP 1.0 spec says regarding this issue via QPID-7981.

      In actual testing against 6.3.0 the behaviour was described as thus:

      When recovering a durable subscription (ReceiverLink), the configured source is deteriorated and contains progressively less of the information that was used to create it in the first place.

      And looked like this via logging:

      'RecoverSelectorIssue.exe' (CLR v4.0.30319: DefaultDomain): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
      'RecoverSelectorIssue.exe' (CLR v4.0.30319: DefaultDomain): Loaded 'C:\dev\RedHatRepro\RedHatRepro\RecoverSelectorIssue\RecoverSelectorIssue\bin\Debug\RecoverSelectorIssue.exe'. Symbols loaded.
      'RecoverSelectorIssue.exe' (CLR v4.0.30319: RecoverSelectorIssue.exe): Loaded 'C:\dev\RedHatRepro\RedHatRepro\RecoverSelectorIssue\RecoverSelectorIssue\bin\Debug\Amqp.Net.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
      'RecoverSelectorIssue.exe' (CLR v4.0.30319: RecoverSelectorIssue.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
      'RecoverSelectorIssue.exe' (CLR v4.0.30319: RecoverSelectorIssue.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
      'RecoverSelectorIssue.exe' (CLR v4.0.30319: RecoverSelectorIssue.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
      'RecoverSelectorIssue.exe' (CLR v4.0.30319: RecoverSelectorIssue.exe): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
      [09:40:30.206] =====> SEND AMQP 3 1 0 0
      [09:40:30.213] =====> SEND sasl-init(mechanism:PLAIN,initial-response:004150505F506F737450726F6300756670,hostname:192.168.2.221)
      [09:40:30.348] =====> RECV AMQP 3 1 0 0
      [09:40:30.361] =====> RECV sasl-mechanisms(sasl-server-mechanisms:[PLAIN,ANONYMOUS])
      [09:40:30.584] =====> RECV sasl-outcome(code:0)
      [09:40:30.592] =====> SEND AMQP 0 1.0.0
      [09:40:30.593] =====> SEND (ch=0) open(container-id:client-1)
      [09:40:30.598] =====> SEND (ch=0) begin(next-outgoing-id:4294967293,incoming-window:2048,outgoing-window:2048,handle-max:4294967295)
      STEP 1: CREATED DURABLE SUBSCRIBER WITH SELECTOR source(filter:[f1:a='b'],default-outcome:modified(delivery-failed:True,undeliverable-here:False))
      [09:40:30.601] =====> RECV AMQP 0 1 0 0
      [09:40:30.602] =====> RECV (ch=0) open(container-id:amq,host-name:,max-frame-size:4294967295,channel-max:32767,idle-time-out:15000,offered-capabilities:[ANONYMOUS-RELAY],properties:[platform:Java/1.8.0_121,product:ActiveMQ,version:5.11.0.redhat-630254,topic-prefix:topic://,queue-prefix:queue://])
      [09:40:30.604] =====> SEND (ch=0) attach(name:test-subscription,handle:0,role:True,source:source(address:topic://test-topic,durable:2,expiry-policy:never,distribution-mode:copy,filter:[f1:a='b'],default-outcome:modified(delivery-failed:True,undeliverable-here:False)),target:target())
      [09:40:30.615] =====> RECV (ch=0) begin(remote-channel:0,next-outgoing-id:1,incoming-window:2147483647,outgoing-window:2147483647,handle-max:65535)
      [09:40:30.634] =====> SEND (ch=0) end()
      [09:40:30.768] =====> RECV (ch=0) attach(name:test-subscription,handle:0,role:False,snd-settle-mode:2,rcv-settle-mode:0,source:source(address:topic://test-topic,durable:2,expiry-policy:never,timeout:0,dynamic:False,distribution-mode:copy,filter:[f1:a='b'],default-outcome:modified(delivery-failed:True,undeliverable-here:False)),target:target(),incomplete-unsettled:False,initial-delivery-count:0)
      [09:40:30.958] =====> RECV (ch=0) end()
      [09:40:30.962] =====> SEND (ch=0) close()
      [09:40:30.966] =====> RECV (ch=0) close()
      [09:40:30.968] =====> SEND AMQP 3 1 0 0
      [09:40:30.973] =====> SEND sasl-init(mechanism:PLAIN,initial-response:004150505F506F737450726F6300756670,hostname:192.168.2.221)
      [09:40:30.981] =====> RECV AMQP 3 1 0 0
      [09:40:30.981] =====> RECV sasl-mechanisms(sasl-server-mechanisms:[PLAIN,ANONYMOUS])
      [09:40:31.208] =====> RECV sasl-outcome(code:0)
      [09:40:31.210] =====> SEND AMQP 0 1.0.0
      [09:40:31.212] =====> SEND (ch=0) open(container-id:client-1)
      [09:40:31.212] =====> RECV AMQP 0 1 0 0
      [09:40:31.212] =====> SEND (ch=0) begin(next-outgoing-id:4294967293,incoming-window:2048,outgoing-window:2048,handle-max:4294967295)
      [09:40:31.212] =====> SEND (ch=0) attach(name:test-subscription,handle:0,role:True,target:target())
      [09:40:31.216] =====> RECV (ch=0) open(container-id:amq,host-name:,max-frame-size:4294967295,channel-max:32767,idle-time-out:15000,offered-capabilities:[ANONYMOUS-RELAY],properties:[platform:Java/1.8.0_121,product:ActiveMQ,version:5.11.0.redhat-630254,topic-prefix:topic://,queue-prefix:queue://])
      [09:40:31.421] =====> RECV (ch=0) begin(remote-channel:0,next-outgoing-id:1,incoming-window:2147483647,outgoing-window:2147483647,handle-max:65535)
      [09:40:31.427] =====> RECV (ch=0) attach(name:test-subscription,handle:0,role:False,snd-settle-mode:2,rcv-settle-mode:0,source:source(address:topic://test-topic,durable:2,expiry-policy:never,timeout:0,dynamic:False,distribution-mode:copy,filter:[apache.org:selector-filter:string:a='b']),target:target(),incomplete-unsettled:False,initial-delivery-count:0)
      STEP 2 : RECOVERED DURABLE SUBSCRIBER WITH SELECTOR source(address:topic://test-topic,durable:2,expiry-policy:never,timeout:0,dynamic:False,distribution-mode:copy,filter:[apache.org:selector-filter:string:a='b'])
      [09:40:31.430] =====> SEND (ch=0) end()
      [09:40:31.432] =====> RECV (ch=0) end()
      [09:40:31.432] =====> SEND (ch=0) close()
      [09:40:31.433] =====> RECV (ch=0) close()
      [09:40:31.434] =====> SEND AMQP 3 1 0 0
      [09:40:31.434] =====> SEND sasl-init(mechanism:PLAIN,initial-response:004150505F506F737450726F6300756670,hostname:192.168.2.221)
      [09:40:31.443] =====> RECV AMQP 3 1 0 0
      [09:40:31.443] =====> RECV sasl-mechanisms(sasl-server-mechanisms:[PLAIN,ANONYMOUS])
      [09:40:31.675] =====> RECV sasl-outcome(code:0)
      [09:40:31.676] =====> SEND AMQP 0 1.0.0
      [09:40:31.680] =====> SEND (ch=0) open(container-id:client-1)
      [09:40:31.680] =====> SEND (ch=0) begin(next-outgoing-id:4294967293,incoming-window:2048,outgoing-window:2048,handle-max:4294967295)
      [09:40:31.680] =====> RECV AMQP 0 1 0 0
      [09:40:31.681] =====> SEND (ch=0) attach(name:test-subscription,handle:0,role:True,target:target())
      [09:40:31.682] =====> RECV (ch=0) open(container-id:amq,host-name:,max-frame-size:4294967295,channel-max:32767,idle-time-out:15000,offered-capabilities:[ANONYMOUS-RELAY],properties:[platform:Java/1.8.0_121,product:ActiveMQ,version:5.11.0.redhat-630254,topic-prefix:topic://,queue-prefix:queue://])
      [09:40:31.907] =====> RECV (ch=0) begin(remote-channel:0,next-outgoing-id:1,incoming-window:2147483647,outgoing-window:2147483647,handle-max:65535)
      [09:40:31.908] =====> RECV (ch=0) attach(name:test-subscription,handle:0,role:False,snd-settle-mode:2,rcv-settle-mode:0,source:source(address:topic://test-topic,durable:2,expiry-policy:never,timeout:0,dynamic:False,distribution-mode:copy),target:target(),incomplete-unsettled:False,initial-delivery-count:0)
      STEP 3 : RECOVERED DURABLE SUBSCRIBER WITH SELECTOR source(address:topic://test-topic,durable:2,expiry-policy:never,timeout:0,dynamic:False,distribution-mode:copy)
      [09:40:31.908] =====> SEND (ch=0) end()
      [09:40:31.909] =====> RECV (ch=0) end()
      [09:40:31.911] =====> SEND (ch=0) close()
      [09:40:31.913] =====> RECV (ch=0) close()
      [09:40:31.916] =====> SEND AMQP 3 1 0 0
      [09:40:31.916] =====> SEND sasl-init(mechanism:PLAIN,initial-response:004150505F506F737450726F6300756670,hostname:192.168.2.221)
      [09:40:31.917] =====> RECV AMQP 3 1 0 0
      [09:40:31.918] =====> RECV sasl-mechanisms(sasl-server-mechanisms:[PLAIN,ANONYMOUS])
      [09:40:32.160] =====> RECV sasl-outcome(code:0)
      [09:40:32.181] =====> SEND AMQP 0 1.0.0
      [09:40:32.184] =====> SEND (ch=0) open(container-id:client-1)
      [09:40:32.185] =====> SEND (ch=0) begin(next-outgoing-id:4294967293,incoming-window:2048,outgoing-window:2048,handle-max:4294967295)
      [09:40:32.186] =====> SEND (ch=0) attach(name:test-subscription,handle:0,role:True,target:target())
      [09:40:32.186] =====> RECV AMQP 0 1 0 0
      [09:40:32.199] =====> RECV (ch=0) open(container-id:amq,host-name:,max-frame-size:4294967295,channel-max:32767,idle-time-out:15000,offered-capabilities:[ANONYMOUS-RELAY],properties:[platform:Java/1.8.0_121,product:ActiveMQ,version:5.11.0.redhat-630254,topic-prefix:topic://,queue-prefix:queue://])
      [09:40:32.436] =====> RECV (ch=0) begin(remote-channel:0,next-outgoing-id:1,incoming-window:2147483647,outgoing-window:2147483647,handle-max:65535)
      [09:40:32.437] =====> RECV (ch=0) attach(name:test-subscription,handle:0,role:False,snd-settle-mode:2,rcv-settle-mode:0,source:source(address:topic://test-topic,durable:2,expiry-policy:never,timeout:0,dynamic:False,distribution-mode:copy),target:target(),incomplete-unsettled:False,initial-delivery-count:0)
      STEP 4 : RECOVERED DURABLE SUBSCRIBER WITH SELECTOR source(address:topic://test-topic,durable:2,expiry-policy:never,timeout:0,dynamic:False,distribution-mode:copy)
      [09:40:32.437] =====> SEND (ch=0) end()
      [09:40:32.439] =====> RECV (ch=0) end()
      [09:40:32.443] =====> SEND (ch=0) close()
      [09:40:32.448] =====> RECV (ch=0) close()
      The program '[2120] RecoverSelectorIssue.exe' has exited with code 0 (0x0).
      

      If however you fully specify the Source each time in the creation of the ReceiverLink it works.

      Attachments

        Issue Links

          Activity

            People

              rhn-support-rkieley Roderick Kieley
              rhn-support-rkieley Roderick Kieley
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: