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)
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)
{
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);
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++;
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);
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;