remove the fun argument in `rabbit_mnesia:init_db/3'.
re-added a boolean parameter to init_db to prevent upgrading
forgot to change the arity of init_db in the export
merge default
dumping schema table on changes in ram nodes
remove the subscription to the schema table

Since dump_tables won't work with the schema table (and works different to what
I had understood anyways) I don't think it's worth it to subscribe to the
table, and it's probably better to just modify the config file through
rabbit_node_monitor.
removed `rabbit_mnesia:force_cluster'

I'll also have to remove the `Force' parameter from `init_db', fixing
bug 24815.
merge bug24919
remove the bug 24919 stuff
added `join_cluster', deprecated `cluster, changed the structure of the node config
reseting when clustering, `reset' now disconnects correctly

Also, I check that we're not joining a cluster we're already in.
change function to find out about cluster nodes

See comment above `check_mnesia_running/1' in `rabbit_mnesia'. In short,
the function to find out about all/running nodes in the cluster do not
work if mnesia is down and the node is a ram node, while we assumed
that they would always work. Moreover, the functions to get the cluster
disc nodes require mnesia to be up.
fix leave_cluster, update rabbit_app.in
store more info about the cluster on disc, check other nodes before clustering

Now the `cluster_nodes.config; doesn't store a "config" anymore, but all
the information we need about the cluster nodes. This file is updated
whenever a new node comes up. Moreover, this file should be *always*
present, and it's set up in `rabbit:prepare/0'.

Now that we have this file, the various functions regarding the status
of the cluster (`all_clustered_nodes/0', `running_clustered_nodes/0;, etc.)
can "work" even when mnesia is down (and when the rode is a ram node).
Given the assumption that the status file is up to date, with the status
of the cluster (before the node went down if the node is down) a lot of
operations become easier.

I'd like a review at this point, the best thing is probably to diff directly
with default since a lot of previous commits are not relevant anymore.

The most noticeable changes compared to default:

  * `join_cluster' works differently. The nodes provided will be used to
    "discover" the cluster, and are not used to determine whether the node
    should be ram or not. The node will be a disc node by default, and
    can be initialized as RAM with the `--ram' flag. The old `cluster'
    command is preserved, adapted to work with the new functions while
    preserving similar semantics (we decide on whether the node is disc or
    not by looking at the list of nodes provided).
  * `force_cluster' has been removed.
  * The `join_cluster' operation will fail if:
    - The node is currently the only disc node of its cluster
    - We can't connect to any of the nodes provided
    - The node is currently already clustered with the cluster of the nodes
      provided
  * On default restart RAM nodes try to connect to the nodes that were first
    given by the user, and are not aware of the changes that might have
    occurred in the cluster when they were online. Since the cluster status
    is kept updated on disk now, the RAM node will be aware of changes in the
    cluster when restarted.
  * Before starting up mnesia, the node contacts the nodes it thinks it's
    clustered with, and if the nodes are not clustered with the node anymore
    the startup procedure fail. We fail only when we know for sure that
    something is wrong - e.g. it won't fail it it doesn't find any online
    node

Things to do:

  * Implement `uncluster'/`leave_cluster' to kick out a node from a cluster
    from another node - this is easy.
  * Implement something like `change_node_type', since given how `join_cluster'
    works it is not possible right now.
  * Rewrite the tests regarding to clustering.
  * Think hard about what can go wrong regarding the cluster status file and
    the relevant functions. The stuff in `rabbit_upgrade' is particularly
    worrying, and I need to make sure that things will work when upgrading
    rabbitmq, by reading old file or upgrading them.
  * Split `init_db/4' in various functions. We have much stronger assumptions
    now, for example we should never need to reset or wipe the schema in
    there. In general it's an ugly function, expecially the optional upgrade
    part
  * Probably something else...
merge default
moved functions around in rabbit_mnesia
change rabbitmqctl `join_cluster', add `recluster' and `change_node_type'

also, remove `cluster'.

Description for the commands:
  * recluster <clusternode>
    Instruct an offline node to try to cluster with the nodes provided when
    it comes back online. With "cluster" I mean cluster directly, only if the
    other nodes think the node is in the cluster already.
    This command is useful if we bring a node down and then change the cluster
    while it is offline.
  * change_node_type (ram|disc)
    Changed the node to the provided node type. The change will fail if the
    user is trying to create a standalone ram node.
  * join_cluster clusternode
    Same as before, but only takes one node as "discovery" node. We think
    this is better since we don't really make any attempt to verify that
    all the provided nodes are in the same cluster anyways.
change the cluster nodes functions to rely on the cluster status file only

+ some other fixes based on the fact that now we firmly assume that the
cluster status is as up to date as it can be.
forgot to replace old function
fix but in `rabbit_mnesia:status/0'