Subject: | frame_too_large - Doesn't work with big multi-frame messages |
Date: | Mon, 19 May 2014 14:05:50 +0400 |
To: | bug-AnyEvent-RabbitMQ [...] rt.cpan.org |
From: | Vitaly Golubev <vgolubev [...] openstat.ru> |
There is a problem with multi-frame messages, if message size is bigger than frame_max in RabbitMQ (default is 128 KB).
RabbitMQ returns error 501 in this case - 501FRAME_ERROR - type 3, all octets = <<>>: {frame_too_large,331164,131064}
Tested with:
AnyEvent::RabbitMQ 1.16
Perl 5.18.2
FreeBSD 8.4-STABLE-20130915
How to repeat:
1. Use default settings in RabbitMQ
2. in file 04_anyevent.t from the package
in line 182 replace
for my $size (10, 131_064, 10) {
to
for my $size (10, 331_064, 10) {
and run this test
Result:
Show quoted text
________________________________
…….
ok 12 - get large size: 10
not ok 13 - on_failure: Expected Basic::GetOk,Basic::GetEmpty but got Net::AMQP::Protocol::Connection::Close
# Failed test 'on_failure: Expected Basic::GetOk,Basic::GetEmpty but got Net::AMQP::Protocol::Connection::Close'
# at bin/04_anyevent.t line 462.
Error in channel on_close callback, ignored:
501FRAME_ERROR - type 3, all octets = <<>>: {frame_too_large,331164,131064} at bin/04_anyevent.t line 91.
at local/lib/perl5/AnyEvent/RabbitMQ/Channel.pm line 176.
EV: error in callback (ignoring): close: 501FRAME_ERROR - type 3, all octets = <<>>: {frame_too_large,331164,131064} at bin/04_anyevent.t line 69.
main::__ANON__('Net::AMQP::Frame::Method=HASH(0x801e6dc48)') called at local/lib/perl5/AnyEvent/RabbitMQ.pm line 275
AnyEvent::RabbitMQ::_server_closed('AnyEvent::RabbitMQ=HASH(0x801e35678)', 'CODE(0x80339db28)', 'Net::AMQP::Frame::Method=HASH(0x801e6dc48)') called at local/lib/perl5/AnyEvent/RabbitMQ.pm line 256
AnyEvent::RabbitMQ::_check_close_and_clean('AnyEvent::RabbitMQ=HASH(0x801e35678)', 'Net::AMQP::Frame::Method=HASH(0x801e6dc48)', 'CODE(0x80339db28)') called at local/lib/perl5/AnyEvent/RabbitMQ.pm line 223
AnyEvent::RabbitMQ::__ANON__('AnyEvent::Handle=HASH(0x801e6a228)', '\x{a}\x{0}2\x{1}\x{f5}HFRAME_ERROR - type 3, all octets = <<>>: {frame_too_lar...') called at local/lib/perl5/amd64-freebsd/AnyEvent/Handle.pm line 1500
AnyEvent::Handle::__ANON__('AnyEvent::Handle=HASH(0x801e6a228)') called at local/lib/perl5/amd64-freebsd/AnyEvent/Handle.pm line 1310
AnyEvent::Handle::_drain_rbuf('AnyEvent::Handle=HASH(0x801e6a228)') called at local/lib/perl5/amd64-freebsd/AnyEvent/Handle.pm line 2009
AnyEvent::Handle::__ANON__('EV::IO=SCALAR(0x804ac0e88)', 1) called at local/lib/perl5/amd64-freebsd/AnyEvent/Impl/EV.pm line 88
eval {...} called at local/lib/perl5/amd64-freebsd/AnyEvent/Impl/EV.pm line 88
AnyEvent::CondVar::Base::_wait('AnyEvent::CondVar=HASH(0x801e6d210)') called at local/lib/perl5/amd64-freebsd/AnyEvent.pm line 1992
AnyEvent::CondVar::Base::recv('AnyEvent::CondVar=HASH(0x801e6d210)') called at bin/04_anyevent.t line 499
main::send_large_size_message('AnyEvent::RabbitMQ::Channel=HASH(0x80469f180)', 331164) called at bin/04_anyevent.t line 189
Can't publish on inactive channel (server flow control); provide on_inactive callback at bin/04_anyevent.t line 480.
# Tests were run but no plan was declared and done_testing() was not seen.
________________________________