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

Robbie Gemmell resolved PROTON-2785.
------------------------------------
    Fix Version/s: proton-c-0.40.0
       Resolution: Fixed

> [Go] Message of certain size fail to be marshalled by amqp module
> -----------------------------------------------------------------
>
>                 Key: PROTON-2785
>                 URL: https://issues.apache.org/jira/browse/PROTON-2785
>             Project: Qpid Proton
>          Issue Type: Bug
>            Reporter: Martin
>            Priority: Major
>             Fix For: proton-c-0.40.0
>
>         Attachments: qpid-reproducer.go
>
>
> We used to use golang bindings of qpid-proton of quite old version (v0.33.0) 
> in our project. After upgrade to v0.39.0 message transfer fails on panics 
> during message marshaling. Basically messages of certain size and higher (218 
> bytes in my lab environment) panics on second send. The first one always 
> passes without an issue:
> {code:java}
> [stack@tripleo-standalone sensubility]$ go run reproducer.go --address 
> amqp://127.0.0.1:5666
> [0] Sending two messages of size 217 bytes.
> [1] Sending two messages of size 220 bytes.
> [0] Sent message ACKed.
> [0] Sent message ACKed.
> [1] Sent message ACKed.
> panic: cannot marshal string: overflow: not enough space to encodegoroutine 
> 35 [running]:
> github.com/apache/qpid-proton/go/pkg/amqp.marshal({0x53d080?, 0xc00019a030?}, 
> 0x7f5938001d20)
>         
> /home/stack/go/pkg/mod/github.com/apache/qpid-proton@v0.0.0-20231031074257-058dcaa83a7e/go/pkg/amqp/marshal.go:295
>  +0x9e5
> github.com/apache/qpid-proton/go/pkg/amqp.putData({0x53d080, 0xc00019a030}, 
> 0xc00012bd10?)
>         
> /home/stack/go/pkg/mod/github.com/apache/qpid-proton@v0.0.0-20231031074257-058dcaa83a7e/go/pkg/amqp/message.go:508
>  +0x48
> github.com/apache/qpid-proton/go/pkg/amqp.(*message).put(0xc00019c280, 
> 0xc00012bd48?)
>         
> /home/stack/go/pkg/mod/github.com/apache/qpid-proton@v0.0.0-20231031074257-058dcaa83a7e/go/pkg/amqp/message.go:560
>  +0x2b8
> github.com/apache/qpid-proton/go/pkg/amqp.(*MessageCodec).Encode(0x7f5934000c90?,
>  {0x5a47b0?, 0xc00019c280?}, {0x0, 0x0, 0x0})
>         
> /home/stack/go/pkg/mod/github.com/apache/qpid-proton@v0.0.0-20231031074257-058dcaa83a7e/go/pkg/amqp/message.go:380
>  +0x97
> github.com/apache/qpid-proton/go/pkg/electron.(*sender).send(0xc0000bc000, 
> 0xc000194150)
>         
> /home/stack/go/pkg/mod/github.com/apache/qpid-proton@v0.0.0-20231031074257-058dcaa83a7e/go/pkg/electron/sender.go:197
>  +0x11d
> github.com/apache/qpid-proton/go/pkg/electron.(*sender).trySend(0xc0000bc000)
>         
> /home/stack/go/pkg/mod/github.com/apache/qpid-proton@v0.0.0-20231031074257-058dcaa83a7e/go/pkg/electron/sender.go:187
>  +0x25
> github.com/apache/qpid-proton/go/pkg/electron.(*sender).startSend(...)
>         
> /home/stack/go/pkg/mod/github.com/apache/qpid-proton@v0.0.0-20231031074257-058dcaa83a7e/go/pkg/electron/sender.go:179
> github.com/apache/qpid-proton/go/pkg/electron.(*sender).SendAsyncTimeout.func1()
>         
> /home/stack/go/pkg/mod/github.com/apache/qpid-proton@v0.0.0-20231031074257-058dcaa83a7e/go/pkg/electron/sender.go:230
>  +0xbb
> github.com/apache/qpid-proton/go/pkg/proton.(*Engine).Run(0xc0001261b0)
>         
> /home/stack/go/pkg/mod/github.com/apache/qpid-proton@v0.0.0-20231031074257-058dcaa83a7e/go/pkg/proton/engine.go:376
>  +0x134
> github.com/apache/qpid-proton/go/pkg/electron.(*connection).run(0xc0001320f0)
>         
> /home/stack/go/pkg/mod/github.com/apache/qpid-proton@v0.0.0-20231031074257-058dcaa83a7e/go/pkg/electron/connection.go:241
>  +0x3f
> created by github.com/apache/qpid-proton/go/pkg/electron.NewConnection in 
> goroutine 1
>         
> /home/stack/go/pkg/mod/github.com/apache/qpid-proton@v0.0.0-20231031074257-058dcaa83a7e/go/pkg/electron/connection.go:224
>  +0x545
> exit status 2{code}
>  
> We used to transfer much larger messages, so this is quite problematic for 
> us. The AMQP components we use for message transfer is qdrouterd mesh, but it 
> is reproducible on single qdr too.
> {code:java}
> [root@tripleo-standalone ~]# podman exec -it qdr qdstat -v
> 2023-12-22 10:26:29.995103 UTC
> Standalone_n6PHE7MhBoAhzi8Router Statistics
>   attr                             value
>   =============================================================
>   Version                          1.17.1
>   Mode                             standalone
>   Router Id                        Standalone_n6PHE7MhBoAhzi8
>   Worker Threads                   4
>   Uptime                           002:21:05:22
>   VmSize                           332 MiB
>   Area                             0
>   Link Routes                      0
>   Auto Links                       0
>   Links                            2
>   Nodes                            0
>   Addresses                        4
>   Connections                      1
>   Presettled Count                 278
>   Dropped Presettled Count         3
>   Accepted Count                   1894
>   Rejected Count                   0
>   Released Count                   0
>   Modified Count                   0
>   Deliveries Delayed > 1sec        0
>   Deliveries Delayed > 10sec       0
>   Deliveries Stuck > 10sec         0
>   Deliveries to Fallback           0
>   Links Blocked                    0
>   Ingress Count                    2173
>   Egress Count                     2172
>   Transit Count                    0
>   Deliveries from Route Container  0
>   Deliveries to Route Container    0
> [root@tripleo-standalone ~]# {code}
> Minimal reproducer is attached: [^qpid-reproducer.go]
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to