[rabbitmq-discuss] Plugin startup behavior issue
Simon MacMullen
simon at rabbitmq.com
Tue Jun 17 18:24:11 BST 2014
On 17/06/2014 3:29PM, Gavin M. Roy wrote:
> As a first step I commented out (then removed) all logging from the plugin:
> Unfortunately I am still getting the same error. Any other ideas?
Ah.
I have replicated the problem now, and it's weirder (and a bit more
awkward) than I initially thought.
The problem is actually that your pgsql_listen_supervisor starts a
mirrored supervisor. This then writes its state to Mnesia before the
empty_db_check happens. The empty_db_check will only create the default
vhost etc if all tables are empty. Since the mirrored_supervisor table
is not, we have no vhost and the logger explodes on startup (but it's
not really anything to do with the logger, that's just the first thing
to hit the problem).
So I wondered about working round this by setting
pgsql_listen_supervisor to require empty_db_check. That works fine... as
long as the management plugin isn't enabled. If it is, then
load_definitions wants empty_db_check after recovery, which is after
pgsql_listen_exchange and we have a cyclic dependency.
Probably the right solution is for the empty_db_check to only check for
absent vhosts and exchanges. I'll file a bug for that.
But how can you work around this? I don't think you can tweak the boot
steps required by your supervisor, but I think:
diff --git a/src/pgsql_listen_sup.erl b/src/pgsql_listen_sup.erl
index ea6a11f..fc293b0 100644
--- a/src/pgsql_listen_sup.erl
+++ b/src/pgsql_listen_sup.erl
@@ -25,6 +25,7 @@
-include_lib("rabbit_common/include/rabbit.hrl").
start_link() ->
+ rabbit:maybe_insert_default_data(),
mirrored_supervisor:start_link(
{local, ?MODULE}, ?MODULE,
fun rabbit_misc:execute_mnesia_transaction/1,
is a reasonable workaround.
Cheers, Simon
--
Simon MacMullen
RabbitMQ, Pivotal
More information about the rabbitmq-discuss
mailing list