From: Andrew Tridgell Date: Wed, 6 Jun 2007 11:34:36 +0000 (+1000) Subject: update flags in parent daemon too X-Git-Tag: tevent-0.9.20~348^2~2547 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4a7f116746fb93fff9b1b5e9d6719245daa64444;p=thirdparty%2Fsamba.git update flags in parent daemon too (This used to be ctdb commit 8995246d95e670753ab8c61d724d284cac2b414d) --- diff --git a/ctdb/common/ctdb_daemon.c b/ctdb/common/ctdb_daemon.c index 95935b8441b..78f5313babc 100644 --- a/ctdb/common/ctdb_daemon.c +++ b/ctdb/common/ctdb_daemon.c @@ -31,6 +31,25 @@ static void daemon_incoming_packet(void *, struct ctdb_req_header *); +/* + handler for when a node changes its flags +*/ +static void flag_change_handler(struct ctdb_context *ctdb, uint64_t srvid, + TDB_DATA data, void *private_data) +{ + struct ctdb_node_flag_change *c = (struct ctdb_node_flag_change *)data.dptr; + + if (data.dsize != sizeof(*c) || !ctdb_validate_vnn(ctdb, c->vnn)) { + DEBUG(0,(__location__ "Invalid data in ctdb_node_flag_change\n")); + return; + } + + /* don't get the connected flag from the other node */ + ctdb->nodes[c->vnn]->flags = + (ctdb->nodes[c->vnn]->flags&NODE_FLAGS_CONNECTED) + | (c->flags & ~NODE_FLAGS_CONNECTED); +} + /* called when the "startup" event script has finished */ static void ctdb_start_transport(struct ctdb_context *ctdb, int status, void *p) { @@ -51,6 +70,10 @@ static void ctdb_start_transport(struct ctdb_context *ctdb, int status, void *p) exit(11); } + /* a handler for when nodes are disabled/enabled */ + ctdb_register_message_handler(ctdb, ctdb, CTDB_SRVID_NODE_FLAGS_CHANGED, + flag_change_handler, NULL); + /* start monitoring for dead nodes */ ctdb_start_monitoring(ctdb); }