[rabbitmq-discuss] erlang-client problem on OS X (empty_rpc_bottom_half)

Matt Stancliff sysop at mindspring.com
Wed Dec 10 08:21:17 GMT 2008

On Dec 9, 2008, at 1:16 AM, Ben Hood wrote:

> Can you have a look in the rabbit log to see if there is anything like
> this in it:
> =INFO REPORT==== 9-Dec-2008::08:54:49 ===
>    alarm_handler: {set,{system_memory_high_watermark,[]}}

   Yes, that shows up on startup.

> My first thought is that the client may be receiving a
> channel.flow{active=false} notification that it is not able to handle,

   You are correct, sir.  Traces of amqp_channel show the first  
rpc_bottom_half handles channel.open_ok.  Then a {channel.flow, false}  
is sent directly to the bottom half without being enqueued anywhere.

> but if the client revision is a9695aaf5083 then you are on the 19963
> branch which handles that command.

   I ran tests in tip and some previous client and server releases to  
no avail.

> The channel.flow
> command is a reverse RPC, i.e. the server sends the client the RPC and
> the client responds with a channel.flow_ok.

   Thanks for clearing up where the channel.flow is coming from.

> However, the channel.flow
> command has special handling in the client which does not use the
> client's RPC queue. So I'm a bit baffled as to how this can happen.

   I don't see special handling of channel.flow in the client  
anywhere.  channel.flow gets passed through handle_info->handle_method- 
(<0.74.0>) call amqp_channel:handle_info({method, 
1,<0.70.0>,<0.72.0>,<0.75.0>,#Fun<amqp_network_driver.do.2>, ...
(<0.74.0>) call amqp_channel:handle_method({'channel.flow',false}, 
1,<0.70.0>,<0.72.0>,<0.75.0>,#Fun<amqp_network_driver.do.2>, ...
(<0.74.0>) call amqp_channel:rpc_bottom_half({'channel.flow',false}, 
1,<0.70.0>,<0.72.0>,<0.75.0>,#Fun<amqp_network_driver.do.2>, ...

> Can you first do a make clean run on the server and check the logs for
> the alarm handler.

   The alarm handler is present.

> Then do a make clean test_network on the client and report what  
> happens.

   Lots of:
** Reason for termination ==
** empty_rpc_bottom_half

   If I remove the exit(empty_rpc_bottom_half) and replace it with an  
empty queue, the tests pass.  But I have no explanation why the errors  
are only happening on my OS X machine.

Matt Stancliff                    San Jose, CA
AIM: seijimr              iPhone: 678-591-9337
"The best way to predict the future is to invent it." --Alan Kay

More information about the rabbitmq-discuss mailing list