Hey 

I was testing the broker implementation that is currently being worked on in 
OpenMAMA and came across an issue, which I have been able to recreate with 
proton send / recv example apps.  

The issue is seen with sending large payloads to Java QPID Broker using the 
proton send application as follows:

./send -a topic://127.0.0.1/MAMA/PHIL <topic://127.0.0.1/MAMA/PHIL>  <string 
from file - in this case 47104 bytes>

And the receive as per below:

./recv  topic://127.0.0.1/MAMA/PHIL <topic://127.0.0.1/MAMA/PHIL>

I am running the Java QPID Broker v0.32 running with java v1.8.0_45 - vanilla 
setup (although I have ran this java broker on Centos 7 along with the clients 
to be sure not a mac thing).  The message makes it to the recv client and 
throws an assertion:

Assertion failed: (msg && bytes && size), function pn_message_decode, file 
/Users/ppreston/Developer/Libraries/Source/qpid-proton/proton-c/src/message/message.c,
 line 656.
Abort trap: 6

I am running proton v0.8 (debug build).  Running in lldb I can see whats 
failing:

frame #0: 0x000000010002cef4 
libqpid-proton.2.dylib`pn_message_decode(msg=0x0000000100204c00, 
bytes=0x000000010101d800, size=0) + 36 at message.c:656
   653 
   654  int pn_message_decode(pn_message_t *msg, const char *bytes, size_t size)
   655  {
-> 656    assert(msg && bytes && size);
   657 
   658    pn_message_clear(msg);
   659 
(lldb) p msg
(pn_message_t *) $0 = 0x0000000100204c00
(lldb) p bytes
(const char *) $1 = 0x000000010101d800 ""
(lldb) p size
(size_t) $2 = 0
(lldb)

When I inspect the messages in Wireshark I can see it flags malformed packet.  
Following is from the send client to the broker.



Running the same clients to a C++ Qpid Broker v0.32, however, there are no 
issues and the data is received in the recv client fine.  The qpidd is running 
vanilla with —topic-pattern parameter.

Have checked the following combinations with large payloads (ruling out 
different MTU on loopback vs active interfaces)

send (mac)      —>      Java Broker (loopback mac)      —>      recv (mac)      
:       Fail
send (mac)      —>      Java Broker (vnic linux)        —>      recv (mac)      
:       Fail
send (linux)    —>      Java Broker (loopback linux)    —>      recv (linux)    
:       Fail
send (mac)      —>      C++ Broker (vnic linux)         —>      recv (mac)      
:       Pass
send (linux)    —>      C++ Broker (loopback linux)     —>      recv (linux)    
:       Pass

Wanted to check whether anyone else has experienced this?  Something 
configuration based?  I am not that familiar with QPID brokers so not ruling 
out something I haven’t setup in Java that’s not needed in C++.

Any help or guidance would be greatly appreciated before I go down a rabbit 
hole.  

Thanks

Phil



Reply via email to