Clustered ejabberd pubsub error

(crossposting from the mailing list).

Hi all.

I'm getting an error creating a pubsub node from a custom module, and
hoping someone here can help. Everything works just fine when
ejabberd is not clustered. I recently moved to a clustered setup, and
started getting errors. Here's a bit of info.

pertinent mnesia configuration:

(ejabberd at jabber02)1> mnesia:info().
===> System info in version "4.4.13", debug level = none <===
opt_disc. Directory "/var/lib/ejabberd/db" is used.
use fallback at restart = false
running db nodes   = ['ejabberd at jabber01','ejabberd at jabber02']
stopped db nodes   = []
master node tables = []
remote             = []
ram_copies         = [anonymous,captcha,http_bind,iq_response,mod_register_ip,
                      pubsub_subscription,reg_users_counter,route,s2s,session,
                      session_counter]
disc_copies        = [acl,caps_features,config,local_config,motd,motd_users,
                      passwd,privacy,private_storage,pubsub_index,pubsub_item,
                      pubsub_node,pubsub_state,roster,roster_version,schema,
                      vcard,vcard_search]
disc_only_copies   = []
[{'ejabberd at jabber01',disc_copies},{'ejabberd at jabber02',disc_copies}] = [schema,
          roster,
          motd_users,
          motd,
          passwd,
          config,
          vcard_search,
          privacy,
          acl,
          roster_version,
          pubsub_index,
          pubsub_state,
          pubsub_node,
          pubsub_item,
          private_storage,
          vcard]
[{'ejabberd at jabber01',ram_copies},{'ejabberd at jabber02',ram_copies}] = [captcha,
        session_counter,
        reg_users_counter,
        anonymous,
        s2s,
        http_bind,
        iq_response,
        route,
        session,
        pubsub_subscription]
[{'ejabberd at jabber02',disc_copies}] = [caps_features,local_config]
[{'ejabberd at jabber02',ram_copies}] = [mod_register_ip]

From the module, I construct and send a pubsub create request

send_pubsub() ->
   To = "pubsub." ++ ?MYNAME,
   From = #jid{user = "master", luser = "master", server = ?MYNAME, lserver = ?MYNAME, resource = "pubsub", lresource = "pubsub"},
   Message = {xmlelement, "iq",
              [{"type", "set"},
               {"from", jlib:jid_to_string(From)},
               {"to", To}],
              [{xmlelement, "pubsub",
                [{"xmlns", "http://jabber.org/protocol/pubsub"}],
                [{xmlelement, "create", [{"node", "Test"}], []},
                 {xmlelement, "configure", [], []}]}]},

   ejabberd_router:route(From, jlib:string_to_jid(To), Message).

And in the ejabberd log I see:

=ERROR REPORT==== 2010-05-19 17:01:02 ===
E(<0.312.0>:mod_pubsub:3686) : transaction return internal error: {atomic,
                                                                   {'EXIT',
                                                                    {aborted,
                                                                     {cyclic,
                                                                      'ejabberd@jabber01',
                                                                      {pubsub_index,
                                                                       node},
                                                                      write,
                                                                      write,
                                                                      {tid,
                                                                       1146520,
                                                                       <10205.297.0>}}}}}

=ERROR REPORT==== 2010-05-19 17:01:02 ===
E(<0.312.0>:mod_pubsub:3686) : transaction return internal error: {atomic,
                                                                   {'EXIT',
                                                                    {aborted,
                                                                     {cyclic,
                                                                      'ejabberd@jabber02',
                                                                      {pubsub_index,
                                                                       node},
                                                                      read,
                                                                      read,
                                                                      {tid,
                                                                       1146520,
                                                                       <10205.297.0>}}}}}

It's suspicious that there are two messages within the same second for
both nodes. Seems like an mnesia deadlock? Is it because I have RAM
and Disc copy set for the pubsub tables on both nodes or something
else entirely? Any help would be greatly appreciated. Thanks.

Syndicate content