Uploaded image for project: 'AMQ Clients'
  1. AMQ Clients
  2. ENTMQCL-3278

[cpp] .NET consumer fails to receive message from C++ peer

XMLWordPrintable

    • False
    • False
    • Hide
      1. download the QE dotnet core client and unzip it in new folder
        $ wget https://repository.engineering.redhat.com/nexus/repository/rhm-qe-amq-clients-raw/cli-netlite/test/cli-netlite-core-2.11.0.ER1-QE1.zip
        $ unzip cli-netlite-core-2.11.0.ER1-QE1.zip
      2. download the QE amqp C++ client and build it
        $ git clone https://github.com/rh-messaging/cli-cpp; cd cli-cpp; cmake .; make aac3_sender
      3. run the dotnet listener/server
        $ dotnet cli-netlite-core-receiver.dll  --timeout 120 --log-msgs interop --broker 10.0.201.220:5672 --recv-listen true --address 'examples' --count 1
      4. run amq C++ sender
        $ ./target/bin/aac3_sender --broker-url "10.0.134.73:5672/examples" --conn-sasl-enabled False
      5. message is not delivered and dotnet client crashes (SIGABRT) with core dump
      Show
      download the QE dotnet core client and unzip it in new folder $ wget https://repository.engineering.redhat.com/nexus/repository/rhm-qe-amq-clients-raw/cli-netlite/test/cli-netlite-core-2.11.0.ER1-QE1.zip $ unzip cli-netlite-core-2.11.0.ER1-QE1.zip download the QE amqp C++ client and build it $ git clone https://github.com/rh-messaging/cli-cpp ; cd cli-cpp; cmake .; make aac3_sender run the dotnet listener/server $ dotnet cli-netlite-core-receiver.dll  --timeout 120 --log-msgs interop --broker 10.0.201.220:5672 --recv-listen true --address 'examples' --count 1 run amq C++ sender $ ./target/bin/aac3_sender --broker-url "10.0.134.73:5672/examples" --conn-sasl-enabled False message is not delivered and dotnet client crashes (SIGABRT) with core dump

      QE dontnet-core consumer crashes on receiving a message from amqp c++ peer. Backtrace from dotnet client is attached. Using proton 0.35.0 (AMQ Clients 2.10.x) all messages are delivered as expected, so it possibly indicates regression in proton or c++ binding.

      This is the only issue in the QE interop tests:

      • QE dotnet client can consume messages from other supported clients peers as expected.
      • QE C++ client is able to send message to other peers as expected.

      packages versions:

      • qpid-proton-c-0.37.0
      • qpid-proton-cpp-0.37.0
      • amq-clients-2.11.0-dotnet-core.zip
      • dotnet 3.1.416

      C++ client frame trace:

      # PN_TRACE_FRM=1 /var/dtests/node_data/clients/aac3_sender  --broker-url "<host_ip>:5672/examples" --log-msgs interop --count 1 --conn-sasl-enabled False
      [0xeb50b0]: AMQP:FRAME:  -> AMQP
      [0xeb50b0]: AMQP:FRAME:0 -> @open(16) [container-id="76196a8d-90b7-4419-bfe6-3160186b5ef7", hostname="10.0.201.220", channel-max=0x7fff]
      [0xeb50b0]: AMQP:FRAME:0 -> @begin(17) [next-outgoing-id=0x0, incoming-window=0x7fffffff, outgoing-window=0x7fffffff]
      [0xeb50b0]: AMQP:FRAME:0 -> @attach(18) [name="59b935c8-0307-49e4-b46f-e576ba97497a", handle=0x0, role=false, snd-settle-mode=0x2, rcv-settle-mode=0x0, source=@source(40) [durable=0x0, timeout=0x0, dynamic=false, capabilities=@<symbol>[]], target=@target(41) [address="examples", durable=0x0, timeout=0x0, dynamic=false], initial-delivery-count=0x0, max-message-size=0x0]
      [0xeb50b0]: AMQP:FRAME:  <- AMQP
      [0xeb50b0]: AMQP:FRAME:0 <- @open(16) [container-id="ContainerHost-88d4fe5d689b490abc7f07b6136d6760", hostname="localhost", max-frame-size=0x40000, channel-max=0xff, idle-time-out=0x7fffffff]
      [0xeb50b0]: AMQP:FRAME:0 <- @begin(17) [remote-channel=0x0, next-outgoing-id=0x0, incoming-window=0x800, outgoing-window=0x7fffffff, handle-max=0x3f]
      [0xeb50b0]: AMQP:FRAME:0 -> @close(24) [error=@error(29) [condition=:"amqp:connection:framing-error", description="connection aborted"]]
      [0xeb50b0]:   IO:FRAME:  <- EOS
      [0xeb50b0]:   IO:FRAME:  -> EOS
      [error]: The connection with 10.0.201.220:5672 was interrupted: amqp:connection:framing-error: connection aborted
      [0xeb9500]: AMQP:FRAME:  -> AMQP
      [0xeb9500]: AMQP:FRAME:0 -> @open(16) [container-id=""]
      [0xeb9500]: AMQP:FRAME:0 -> @close(24) [error=@error(29) [condition=:"proton:io", description="Connection refused - disconnected 10.0.201.220:5672"]]
      [error]: The connection with 10.0.201.220:5672 was interrupted: proton:io: Connection refused - disconnected 10.0.201.220:5672
      [0xebaac0]: AMQP:FRAME:  -> AMQP
      [0xebaac0]: AMQP:FRAME:0 -> @open(16) [container-id=""]
      [0xebaac0]: AMQP:FRAME:0 -> @close(24) [error=@error(29) [condition=:"proton:io", description="Connection refused - disconnected 10.0.201.220:5672"]]
      [error]: The connection with 10.0.201.220:5672 was interrupted: proton:io: Connection refused - disconnected 10.0.201.220:5672
      [0xebadb0]: AMQP:FRAME:  -> AMQP
      [0xebadb0]: AMQP:FRAME:0 -> @open(16) [container-id=""]
      [0xebadb0]: AMQP:FRAME:0 -> @close(24) [error=@error(29) [condition=:"proton:io", description="Connection refused - disconnected 10.0.201.220:5672"]]
      [error]: The connection with 10.0.201.220:5672 was interrupted: proton:io: Connection refused - disconnected 10.0.201.220:5672
      [0xeb9e10]: AMQP:FRAME:  -> AMQP
      [0xeb9e10]: AMQP:FRAME:0 -> @open(16) [container-id=""]
      [0xeb9e10]: AMQP:FRAME:0 -> @close(24) [error=@error(29) [condition=:"proton:io", description="Connection refused - disconnected 10.0.201.220:5672"]]
      [error]: The connection with 10.0.201.220:5672 was interrupted: proton:io: Connection refused - disconnected 10.0.201.220:5672
      [0xeba100]: AMQP:FRAME:  -> AMQP
      [0xeba100]: AMQP:FRAME:0 -> @open(16) [container-id=""]
      [0xeba100]: AMQP:FRAME:0 -> @close(24) [error=@error(29) [condition=:"proton:io", description="Connection refused - disconnected 10.0.201.220:5672"]]
      [error]: The connection with 10.0.201.220:5672 was interrupted: proton:io: Connection refused - disconnected 10.0.201.220:5672
      [0xeba100]: AMQP:FRAME:  -> AMQP
      [0xeba100]: AMQP:FRAME:0 -> @open(16) [container-id=""]
      [0xeba100]: AMQP:FRAME:0 -> @close(24) [error=@error(29) [condition=:"proton:io", description="Connection refused - disconnected 10.0.201.220:5672"]]
      [error]: The connection with 10.0.201.220:5672 was interrupted: proton:io: Connection refused - disconnected 10.0.201.220:5672
      [0xeba100]: AMQP:FRAME:  -> AMQP
      [0xeba100]: AMQP:FRAME:0 -> @open(16) [container-id=""]
      [0xeba100]: AMQP:FRAME:0 -> @close(24) [error=@error(29) [condition=:"proton:io", description="Connection refused - disconnected 10.0.201.220:5672"]]
      [error]: The connection with 10.0.201.220:5672 was interrupted: proton:io: Connection refused - disconnected 10.0.201.220:5672
      [0xeba100]: AMQP:FRAME:  -> AMQP
      [0xeba100]: AMQP:FRAME:0 -> @open(16) [container-id=""]
      [0xeba100]: AMQP:FRAME:0 -> @close(24) [error=@error(29) [condition=:"proton:io", description="Connection refused - disconnected 10.0.201.220:5672"]]
      [error]: The connection with 10.0.201.220:5672 was interrupted: proton:io: Connection refused - disconnected 10.0.201.220:5672
      [root@dtests-rhel8x-tn-base ~]# client_loop: send disconnect: Broken pipe
      

      QE dotnet client fails with the following stacktrace:

      [root@dtests-rhel8x-tn-base ~]# dotnet /var/dtests/node_data/clients/cli-netlite-core/cli-netlite-core-receiver.dll  --timeout 120 --log-msgs interop --broker <host_ip>:5672 --recv-listen true --address 'examples' --count 1
      Process terminated. Assertion failed.
      must have at least 1 element in array
         at Amqp.Fx.Assert(Boolean condition, String message)
         at Amqp.Types.Encoder.WriteArray(ByteBuffer buffer, Array value)
         at Amqp.Types.Encoder.<>c.<Initialize>b__13_40(ByteBuffer b, Object o, Boolean s)
         at Amqp.Types.Encoder.WriteObject(ByteBuffer buffer, Object value, Boolean smallEncoding)
         at Amqp.Framing.Source.WriteField(ByteBuffer buffer, Int32 index)
         at Amqp.Types.DescribedList.EncodeValue(ByteBuffer buffer)
         at Amqp.Types.Described.Encode(ByteBuffer buffer)
         at Amqp.Types.Encoder.WriteObject(ByteBuffer buffer, Object value, Boolean smallEncoding)
         at Amqp.Framing.Attach.WriteField(ByteBuffer buffer, Int32 index)
         at Amqp.Types.DescribedList.EncodeValue(ByteBuffer buffer)
         at Amqp.Types.Described.Encode(ByteBuffer buffer)
         at Amqp.Framing.Codec.Encode(RestrictedDescribed command, ByteBuffer buffer)
         at Amqp.Framing.Frame.Encode(ByteBuffer buffer, FrameType type, UInt16 channel, DescribedList command)
         at Amqp.Connection.SendCommand(UInt16 channel, DescribedList command)
         at Amqp.Session.SendCommand(DescribedList command)
         at Amqp.Link.SendAttach(Boolean role, UInt32 initialDeliveryCount, Attach attach)
         at Amqp.Listener.ListenerLink.CompleteAttach(Attach attach, Error error)
         at Amqp.Listener.ListenerLink.OnAttach(UInt32 remoteHandle, Attach attach)
         at Amqp.Listener.ListenerSession.OnAttach(Attach attach)
         at Amqp.Session.OnCommand(DescribedList command, ByteBuffer buffer)
         at Amqp.Connection.OnSessionCommand(UInt16 remoteChannel, DescribedList command, ByteBuffer buffer)
         at Amqp.Connection.OnFrame(ByteBuffer buffer)
         at Amqp.AsyncPump.PumpAsync(UInt32 maxFrameSize, Func`2 onHeader, Func`2 onBuffer)
         at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine) in /_/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/AsyncMethodBuilder.cs:line 1015
         at Amqp.AsyncPump.PumpAsync(UInt32 maxFrameSize, Func`2 onHeader, Func`2 onBuffer)
         at Amqp.AsyncPump.StartAsync(Connection connection)
         at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine) in /_/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/AsyncMethodBuilder.cs:line 1015
         at Amqp.AsyncPump.StartAsync(Connection connection)
         at Amqp.AsyncPump.Start(Connection connection)
         at Amqp.Listener.ConnectionListener.HandleTransportAsync(IAsyncTransport transport)
         at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine) in /_/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/AsyncMethodBuilder.cs:line 1015
         at Amqp.Listener.ConnectionListener.HandleTransportAsync(IAsyncTransport transport)
         at Amqp.Listener.ConnectionListener.TcpTransportListener.HandleSocketAsync(Socket socket)
         at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine) in /_/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/AsyncMethodBuilder.cs:line 1015
         at Amqp.Listener.ConnectionListener.TcpTransportListener.HandleSocketAsync(Socket socket)
         at Amqp.Listener.ConnectionListener.TcpTransportListener.AcceptAsync(Socket socket)
         at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.ExecutionContextCallback(Object s) in /_/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/AsyncMethodBuilder.cs:line 580
         at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) in /_/src/System.Private.CoreLib/shared/System/Threading/ExecutionContext.cs:line 172
         at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext(Thread threadPoolThread) in /_/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/AsyncMethodBuilder.cs:line 617
         at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.AsyncStateMachineBox`1.MoveNext() in /_/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/AsyncMethodBuilder.cs:line 595
         at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining) in /_/src/System.Private.CoreLib/shared/System/Threading/Tasks/TaskContinuation.cs:line 794
         at System.Threading.Tasks.Task.RunContinuations(Object continuationObject) in /_/src/System.Private.CoreLib/shared/System/Threading/Tasks/Task.cs:line 3319
         at System.Threading.Tasks.Task.FinishContinuations() in /_/src/System.Private.CoreLib/shared/System/Threading/Tasks/Task.cs:line 3293
         at System.Threading.Tasks.Task`1.TrySetResult(TResult result) in /_/src/System.Private.CoreLib/shared/System/Threading/Tasks/Future.cs:line 419
         at System.Threading.Tasks.TaskCompletionSource`1.TrySetResult(TResult result) in /_/src/System.Private.CoreLib/shared/System/Threading/Tasks/TaskCompletionSource.cs:line 271
         at Amqp.SocketExtensions.Complete[T](Object sender, SocketAsyncEventArgs args, Boolean throwOnError, T result)
         at Amqp.Listener.ConnectionListener.TcpTransportListener.<>c.<AcceptAsync>b__6_0(Object s, SocketAsyncEventArgs a)
         at System.Net.Sockets.SocketAsyncEventArgs.OnCompleted(SocketAsyncEventArgs e) in /_/src/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.cs:line 204
         at System.Net.Sockets.SocketAsyncEventArgs.ExecutionCallback(Object state) in /_/src/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.cs:line 424
         at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) in /_/src/System.Private.CoreLib/shared/System/Threading/ExecutionContext.cs:line 172
         at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) in /_/src/System.Private.CoreLib/shared/System/Threading/ExecutionContext.cs:line 132
         at System.Net.Sockets.SocketAsyncEventArgs.FinishOperationAsyncSuccess(Int32 bytesTransferred, SocketFlags flags) in /_/src/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.cs:line 787
         at System.Net.Sockets.SocketAsyncEventArgs.CompletionCallback(Int32 bytesTransferred, SocketFlags flags, SocketError socketError) in /_/src/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.Unix.cs:line 418
         at System.Net.Sockets.SocketAsyncEventArgs.AcceptCompletionCallback(IntPtr acceptedFileDescriptor, Byte[] socketAddress, Int32 socketAddressSize, SocketError socketError) in /_/src/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncEventArgs.Unix.cs:line 60
         at System.Net.Sockets.SocketAsyncContext.AcceptOperation.InvokeCallback(Boolean allowPooling) in /_/src/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncContext.Unix.cs:line 597
         at System.Net.Sockets.SocketAsyncContext.OperationQueue`1.ProcessAsyncOperation(TOperation op) in /_/src/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncContext.Unix.cs:line 891
         at System.Net.Sockets.SocketAsyncContext.ReadOperation.System.Threading.IThreadPoolWorkItem.Execute() in /_/src/System.Net.Sockets/src/System/Net/Sockets/SocketAsyncContext.Unix.cs:line 333
         at System.Threading.ThreadPoolWorkQueue.Dispatch() in /_/src/System.Private.CoreLib/shared/System/Threading/ThreadPool.cs:line 677
         at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() in /_/src/System.Private.CoreLib/src/System/Threading/ThreadPool.CoreCLR.cs:line 29
      Aborted (core dumped)
      

            cjansen@redhat.com Cliff Jansen
            pematous Petr Matousek
            Petr Matousek Petr Matousek
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:
              Resolved: