diff options
| author | Martin Schwenke <martin@meltin.net> | 2012-12-04 14:28:06 +1100 |
|---|---|---|
| committer | Amitay Isaacs <amitay@gmail.com> | 2013-01-07 10:35:39 +1100 |
| commit | 6fbd3ea2c2d516084c4ef887af3a6ac048bd2eba (patch) | |
| tree | d03a5af9b1306f5b28578e81c877b9bf0b9df3de | |
| parent | 80a2bb84e7d04f4ee3b3369f734b80dce184ad72 (diff) | |
ctdbd: Initialise the node flags in just one place
Currently flags are initialised in 2 places. One of them is in
ctdb_tcp_listen_automatic(), which just seems wrong. This makes the
code easier to follow by just doing it in ctdb_start_daemon().
This means that the flags are now initialised later than previously.
However, it is still done before the transport is started and before
clients can connect.
In future it might make sense to do a similar thing with setting the
PNN. However, the current optimisation is reasonably obvious...
Signed-off-by: Martin Schwenke <martin@meltin.net>
Pair-programmed-with: Amitay Isaacs <amitay@gmail.com>
(This used to be ctdb commit 2bbee8ac23ad5b7adf7122d8c91d5f0d54582507)
| -rw-r--r-- | ctdb/server/ctdb_daemon.c | 23 | ||||
| -rw-r--r-- | ctdb/server/ctdb_server.c | 12 | ||||
| -rw-r--r-- | ctdb/server/ctdbd.c | 10 | ||||
| -rw-r--r-- | ctdb/tcp/tcp_connect.c | 11 |
4 files changed, 33 insertions, 23 deletions
diff --git a/ctdb/server/ctdb_daemon.c b/ctdb/server/ctdb_daemon.c index 13ea3192fe..623e623cca 100644 --- a/ctdb/server/ctdb_daemon.c +++ b/ctdb/server/ctdb_daemon.c @@ -1029,6 +1029,26 @@ failed: return -1; } +static void initialise_node_flags (struct ctdb_context *ctdb) +{ + if (ctdb->pnn == -1) { + ctdb_fatal(ctdb, "PNN is set to -1 (unknown value)"); + } + + ctdb->nodes[ctdb->pnn]->flags &= ~NODE_FLAGS_DISCONNECTED; + + /* do we start out in DISABLED mode? */ + if (ctdb->start_as_disabled != 0) { + DEBUG(DEBUG_INFO, ("This node is configured to start in DISABLED state\n")); + ctdb->nodes[ctdb->pnn]->flags |= NODE_FLAGS_DISABLED; + } + /* do we start out in STOPPED mode? */ + if (ctdb->start_as_stopped != 0) { + DEBUG(DEBUG_INFO, ("This node is configured to start in STOPPED state\n")); + ctdb->nodes[ctdb->pnn]->flags |= NODE_FLAGS_STOPPED; + } +} + static void ctdb_setup_event_callback(struct ctdb_context *ctdb, int status, void *private_data) { @@ -1189,6 +1209,9 @@ int ctdb_start_daemon(struct ctdb_context *ctdb, bool do_fork, bool use_syslog, if (ctdb->methods->initialise(ctdb) != 0) { ctdb_fatal(ctdb, "transport failed to initialise"); } + + initialise_node_flags(ctdb); + if (public_address_list) { ctdb->public_addresses_file = public_address_list; ret = ctdb_set_public_addresses(ctdb, true); diff --git a/ctdb/server/ctdb_server.c b/ctdb/server/ctdb_server.c index ec608cfa56..de3c6901d7 100644 --- a/ctdb/server/ctdb_server.c +++ b/ctdb/server/ctdb_server.c @@ -146,18 +146,6 @@ static int ctdb_add_node(struct ctdb_context *ctdb, char *nstr) ctdb_same_address(&ctdb->address, &node->address)) { /* for automatic binding to interfaces, see tcp_connect.c */ ctdb->pnn = node->pnn; - node->flags &= ~NODE_FLAGS_DISCONNECTED; - - /* do we start out in DISABLED mode? */ - if (ctdb->start_as_disabled != 0) { - DEBUG(DEBUG_INFO, ("This node is configured to start in DISABLED state\n")); - node->flags |= NODE_FLAGS_DISABLED; - } - /* do we start out in STOPPED mode? */ - if (ctdb->start_as_stopped != 0) { - DEBUG(DEBUG_INFO, ("This node is configured to start in STOPPED state\n")); - node->flags |= NODE_FLAGS_STOPPED; - } } ctdb->num_nodes++; diff --git a/ctdb/server/ctdbd.c b/ctdb/server/ctdbd.c index bcc950266a..491b4a2ff1 100644 --- a/ctdb/server/ctdbd.c +++ b/ctdb/server/ctdbd.c @@ -242,6 +242,16 @@ int main(int argc, const char *argv[]) ctdb->capabilities |= CTDB_CAP_LVS; } + /* Initialise this node's PNN to the unknown value. This will + * be set to the correct value by either ctdb_add_node() as + * part of loading the nodes file or by + * ctdb_tcp_listen_automatic() when the transport is + * initialised. At some point we should de-optimise this and + * pull it out into ctdb_start_daemon() so it is done clearly + * and only in one place. + */ + ctdb->pnn = -1; + /* tell ctdb what nodes are available */ ctdb_load_nodes_file(ctdb); diff --git a/ctdb/tcp/tcp_connect.c b/ctdb/tcp/tcp_connect.c index 26a280e30b..93111f37aa 100644 --- a/ctdb/tcp/tcp_connect.c +++ b/ctdb/tcp/tcp_connect.c @@ -374,21 +374,10 @@ static int ctdb_tcp_listen_automatic(struct ctdb_context *ctdb) ctdb->address.address, ctdb->address.port); ctdb->pnn = ctdb->nodes[i]->pnn; - ctdb->nodes[i]->flags &= ~NODE_FLAGS_DISCONNECTED; DEBUG(DEBUG_INFO,("ctdb chose network address %s:%u pnn %u\n", ctdb->address.address, ctdb->address.port, ctdb->pnn)); - /* do we start out in DISABLED mode? */ - if (ctdb->start_as_disabled != 0) { - DEBUG(DEBUG_INFO, ("This node is configured to start in DISABLED state\n")); - ctdb->nodes[i]->flags |= NODE_FLAGS_DISABLED; - } - /* do we start out in STOPPED mode? */ - if (ctdb->start_as_stopped != 0) { - DEBUG(DEBUG_INFO, ("This node is configured to start in STOPPED state\n")); - ctdb->nodes[i]->flags |= NODE_FLAGS_STOPPED; - } if (listen(ctcp->listen_fd, 10) == -1) { goto failed; |
