<div dir="ltr">Hello,<div><br></div><div style>I am using RabbitMQ 3.1.1 on RedHat 6.2.  I noticed some odd behavior when trying to restore a broken cluster that I think may be a bug.  In short, when I &quot;forget&quot; a node in the cluster, then later call &quot;rabbitmqctl reset&quot; on it, it re-adds itself to the cluster.</div>
<div style><br></div><div style>It&#39;s actually more complicated than that, but completely reproducible, so here are the steps:</div><div style><br></div><div style><i>Assuming two nodes in a cluster: rabbit-a and rabbit-b.  </i></div>
<div style><i><br></i></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style><div style><b>[root@rabbit-a ~]# rabbitmqctl stop</b></div></div><div style><div style>Stopping and halting node &#39;rabbit@rabbit-a&#39; ...</div>
</div><div style><div style>...done.</div></div><div style><div style><br></div></div><div style><div style><div style><b>[root@rabbit-b ~]# rabbitmqctl stop</b></div></div></div><div style><div style>Stopping and halting node &#39;rabbit@rabbit-b&#39; ...</div>
</div><div style><div style>...done.</div></div></blockquote><div style><i><br></i></div><div style><i>Now we will assume we need to start rabbit-a without rabbit-b, which is all sorts of fun since rabbit-b was the last one down.  Based on what I&#39;ve read, we need to start rabbit-a in node-only mode and then forget rabbit-b.</i></div>
<div style><i><br></i></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style><div style><b>[root@rabbit-a ~]# export RABBITMQ_NODE_ONLY=true</b></div></div><div style><div style><b>[root@rabbit-a ~]# rabbitmq-server &amp;</b></div>
</div><div style><div style>[1] 19386</div></div><div style><div style><b>[root@rabbit-a ~]# rabbitmqctl forget_cluster_node --offline rabbit@rabbit-b</b></div></div><div style><div style><div style>Removing node &#39;rabbit@rabbit-b&#39; from cluster ...</div>
</div></div><div style><div style><br></div></div><div style><div style>=INFO REPORT==== 8-Jul-2013::09:45:34 ===</div></div><div style><div style>Removing node &#39;rabbit@rabbit-b&#39; from cluster</div></div><div style>
<div style><br></div></div><div style><div style>=INFO REPORT==== 8-Jul-2013::09:45:34 ===</div></div><div style><div style>    application: mnesia</div></div><div style><div style>    exited: stopped</div></div><div style>
<div style>    type: temporary</div></div><div style><div style>...done.</div></div><div style><div style><b>[root@rabbit-a ~]# rabbitmqctl stop</b></div></div><div style><div style>Stopping and halting node &#39;rabbit@rabbit-a&#39; ...</div>
</div><div style><div style><br></div></div><div style><div style>=INFO REPORT==== 8-Jul-2013::09:45:48 ===</div></div><div style><div style>Halting Erlang VM</div></div><div style><div style>Error: {{badmatch,undefined},</div>
</div><div style><div style>        [{rabbit_plugins,active,0,[{file,&quot;src/rabbit_plugins.erl&quot;},{line,48}]},</div></div><div style><div style>         {rabbit,app_shutdown_order,0,[{file,&quot;src/rabbit.erl&quot;},{line,476}]},</div>
</div><div style><div style>         {rabbit,stop,0,[{file,&quot;src/rabbit.erl&quot;},{line,380}]},</div></div><div style><div style>         {rabbit,stop_and_halt,0,[{file,&quot;src/rabbit.erl&quot;},{line,384}]},</div>
</div><div style><div style>         {rpc,&#39;-handle_call_call/6-fun-0-&#39;,5,[{file,&quot;rpc.erl&quot;},{line,205}]}]}</div></div></blockquote><div style><br></div><div style><i>Note the error above when it was stopped-- I&#39;m not sure if that is expected.  Anyway, let&#39;s now turn off the node-only mode and start the server again.  It&#39;s successful and note that the cluster status contains only its own node:</i></div>
<div style><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style><b>[root@rabbit-a ~]# unset RABBITMQ_NODE_ONLY</b></div><div style><div style><b>[root@rabbit-a ~]# rabbitmq-server &amp;</b></div>
</div><div style><div style>[1] 21349</div></div><div style><div style><div style><b>[root@rabbit-a ~]# rabbitmqctl cluster_status</b></div></div></div><div style><div style><div style>Cluster status of node &#39;rabbit@rabbit-a&#39; ...</div>
</div></div><div style><div style><div style>[{nodes,[{disc,[&#39;rabbit@rabbit-a&#39;]}]},</div></div></div><div style><div style><div style> {running_nodes,[&#39;rabbit@rabbit-a&#39;]},</div></div></div><div style><div style>
<div style> {partitions,[]}]</div></div></div><div style><div style><div style>...done.</div></div></div></blockquote><div style><div><br></div><div style><i>So far so good.  But let&#39;s assume we&#39;re ready to bring rabbit-b back online.  If we try without making any changes, it will fail due to this error (which I guess is expected):</i></div>
<div style><br></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div style><div style>{&quot;init terminating in do_boot&quot;,{rabbit,failure_during_boot,{error,{inconsistent_cluster,&quot;Node &#39;rabbit@rabbit-b&#39; thinks it&#39;s clustered with node &#39;rabbit@rabbit-a&#39;, but &#39;rabbit@rabbit-a&#39; disagrees&quot;}}}}</div>
</div></blockquote><div style><div style><br></div><div style><i>OK.  So I guess we need to reset rabbit-b before we can start it again.  I know we could delete the mnesia directory, but let&#39;s not be so brute force about it.  Let&#39;s put it in node-only mode and use rabbitmqctl reset:</i></div>
<div style><i><br></i></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style><div style><div style><b>[root@rabbitmq-b ~]# export RABBITMQ_NODE_ONLY=true</b></div></div></div><div style>
<div style><div style><b>[root@rabbitmq-b ~]# rabbitmq-server &amp;</b></div></div></div><div style><div style><div style>[1] 13647</div></div></div><div style><div style><div style><div style><b>[root@rabbitmq-b ~]# rabbitmqctl reset</b></div>
</div></div></div><div style><div style><div style><div style>Resetting node &#39;rabbit@rabbitmq-b&#39; ...</div></div></div></div><div style><div style><div style><div style><br></div></div></div></div><div style><div style>
<div style><div style>=INFO REPORT==== 8-Jul-2013::09:49:29 ===</div></div></div></div><div style><div style><div style><div style>Resetting Rabbit</div></div></div></div><div style><div style><div style><div style><br></div>
</div></div></div><div style><div style><div style><div style>=INFO REPORT==== 8-Jul-2013::09:49:29 ===</div></div></div></div><div style><div style><div style><div style>    application: mnesia</div></div></div></div><div style>
<div style><div style><div style>    exited: stopped</div></div></div></div><div style><div style><div style><div style>    type: temporary</div></div></div></div><div style><div style><div style><div style>Error: {version_mismatch,[],</div>
</div></div></div><div style><div style><div style><div style>                         [add_ip_to_listener,exchange_decorators,</div></div></div></div><div style><div style><div style><div style>                          exchange_event_serial,gm,gm_pids,</div>
</div></div></div><div style><div style><div style><div style>                          mirrored_supervisor,remove_user_scope,</div></div></div></div><div style><div style><div style><div style>                          runtime_parameters,semi_durable_route,topic_trie,</div>
</div></div></div><div style><div style><div style><div style>                          topic_trie_node,user_admin_to_tags,add_queue_ttl,</div></div></div></div><div style><div style><div style><div style>                          multiple_routing_keys]}</div>
</div></div></div><div style><div style><div style><div style><b>[root@rabbitmq-b ~]# rabbitmqctl stop</b></div></div></div></div><div style><div style><div style><div style>Stopping and halting node &#39;rabbit@rabbitmq-b&#39; ...</div>
</div></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style><div style><div style><div style><br></div></div></div></div><div style><div style><div style><div style>=INFO REPORT==== 8-Jul-2013::09:50:23 ===</div>
</div></div></div><div style><div style><div style><div style>Halting Erlang VM</div></div></div></div><div style><div style><div style><div style>Error: {{badmatch,undefined},</div></div></div></div><div style><div style>
<div style><div style>        [{rabbit_plugins,active,0,[{file,&quot;src/rabbit_plugins.erl&quot;},{line,48}]},</div></div></div></div><div style><div style><div style><div style>         {rabbit,app_shutdown_order,0,[{file,&quot;src/rabbit.erl&quot;},{line,476}]},</div>
</div></div></div><div style><div style><div style><div style>         {rabbit,stop,0,[{file,&quot;src/rabbit.erl&quot;},{line,380}]},</div></div></div></div><div style><div style><div style><div style>         {rabbit,stop_and_halt,0,[{file,&quot;src/rabbit.erl&quot;},{line,384}]},</div>
</div></div></div><div style><div style><div style><div style>         {rpc,&#39;-handle_call_call/6-fun-0-&#39;,5,[{file,&quot;rpc.erl&quot;},{line,205}]}]}</div></div></div></div></blockquote><div style><div style><div>
<br></div><div style><i>Note again the error when stopping, but also the error when resetting.  But here is the WEIRD thing.  Now go back to rabbit-a and get the cluster_status.  It seems that rabbit-b has magically rejoined the cluster!</i></div>
<div style><i><br></i></div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style><div style><div style><div style><b>[root@rabbitmq-a ~]# rabbitmqctl cluster_status</b></div></div></div>
</div><div style><div style><div style><div style>Cluster status of node &#39;rabbit@rabbitmq-a&#39; ...</div></div></div></div><div style><div style><div style><div style>[{nodes,[{disc,[&#39;<font color="#ff0000">rabbit@rabbitmq-b</font>&#39;,&#39;rabbit@rabbitmq-a&#39;]}]},</div>
</div></div></div><div style><div style><div style><div style> {running_nodes,[&#39;rabbit@rabbitmq-a&#39;]},</div></div></div></div><div style><div style><div style><div style> {partitions,[]}]</div></div></div></div><div style>
<div style><div style><div style>...done.</div></div></div></div></blockquote><div style><div style><div style><div><br></div><div style>Sure enough, if we restart rabbit-b, it will be operating in a cluster with rabbit-a again:</div>
<div style><br></div></div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div style><div style><div style><div style><div style><b>[root@rabbitmq-b ~]# unset RABBITMQ_NODE_ONLY</b></div></div>
</div></div></div><div style><div style><div style><div style><div style><div style><b>[root@rabbitmq-b ~]# rabbitmq-server &amp;</b></div></div></div></div></div></div><div style><div style><div style><div style><div style>
[1] 15775</div></div></div></div></div><div style><div style><div style><div style><div style><b>[root@rabbitmq-b ~]# rabbitmqctl cluster_status</b></div></div></div></div></div><div style><div style><div style><div style>
<div style>Cluster status of node &#39;rabbit@rabbitmq-b&#39; ...</div></div></div></div></div><div style><div style><div style><div style><div style>[{nodes,[{disc,[&#39;rabbit@rabbitmq-b&#39;,&#39;rabbit@rabbitmq-a&#39;]}]},</div>
</div></div></div></div><div style><div style><div style><div style><div style> {running_nodes,[&#39;rabbit@vm-rh62-cmoesel&#39;,&#39;rabbitmq-b&#39;]},</div></div></div></div></div><div style><div style><div style><div style>
<div style> {partitions,[]}]</div></div></div></div></div><div style><div style><div style><div style><div style>...done.</div></div></div></div></div></blockquote><div style><div style><div style><div style><br></div><div style>
So-- this is not at all what I expected.  Seems like a bug, right?  I guess in this case I will just delete the mnesia directory instead of trying to do a reset.</div><div style><br></div><div style>-Chris</div></div></div>
<div style><br></div><div style><br></div><div style><br></div></div></div>