On 02/13/2013 08:49 AM, Steven Hardy wrote:
Hi,
I'm trying to understand some differences encoding map datatypes between
qpid and rabbitmq (openstack project which needs to support both)
It seems that we hit a limit of 2^16 bytes when encoding a map on qpid,
because the map appears to be encoded as a string (write_map in codec010.py)
Looking at the amqp 0-10 spec, it says "An encoded map may contain up to
(4294967295 - 4) octets worth of encoded entries.", so I'm trying to
understand the 65535 byte limitation I'm hitting, since we do not appear to
hit the same problem when configured to use rabbit.
Can anyone please advise - is this a bug in python-qpid, or an expected
limitation of the qpid implementation?
I think that is a bug in python-qpid. Do you have a simple reproducer
you could attach to a JIRA?
The versions I'm using are Fedora packages:
qpid-cpp-client-0.20-2.fc17.x86_64
python-qpid-0.20-1.fc17.noarch
qpid-cpp-server-0.20-2.fc17.x86_64
Here's an example backtrace of the error-path I'm hitting:
File "/usr/lib/python2.7/site-packages/qpid/messaging/driver.py", line
1248, in send
body = enc(msg.content)
File "/usr/lib/python2.7/site-packages/qpid/messaging/message.py", line
28, in encode
sc.write_primitive(type, x)
File "/usr/lib/python2.7/site-packages/qpid/codec010.py", line 73, in
write_primitive
getattr(self, "write_%s" % type.NAME)(v)
File "/usr/lib/python2.7/site-packages/qpid/codec010.py", line 257, in
write_map
sc.write(string.joinfields(map(self._write_map_elem, m.keys(),
m.values()), ""))
File "/usr/lib/python2.7/site-packages/qpid/codec010.py", line 250, in
_write_map_elem
sc.write_primitive(type, v)
File "/usr/lib/python2.7/site-packages/qpid/codec010.py", line 73, in
write_primitive
getattr(self, "write_%s" % type.NAME)(v)
File "/usr/lib/python2.7/site-packages/qpid/codec010.py", line 190, in
write_str16
self.write_vbin16(s.encode("utf8"))
File "/usr/lib/python2.7/site-packages/qpid/codec010.py", line 203, in
write_vbin16
self.write_uint16(len(b))
File "/usr/lib/python2.7/site-packages/qpid/codec010.py", line 116, in
write_uint16
raise CodecException("Cannot encode %d as uint16" % n)
CodecException: Cannot encode 69525 as uint16
Any help understanding this would be much appreciated! :)
Steve Hardy
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]