From 69f3a09e6f338b54c27a79f48950b7508bc07bc2 Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Mon, 9 Jul 2007 13:21:17 +1000 Subject: [PATCH] when a remote node has sent us a message to update the flags for a node, dont let those messages modify the DISCONNECTED flag. the DISCONNECTED flag must be managed locally since it describes whether the local node can communicate with the remote node or not (This used to be ctdb commit 5650673205d335a32d4f27f66847ea66752a00f0) --- ctdb/server/ctdb_recoverd.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c index bba963b9d1d..0a07244fe30 100644 --- a/ctdb/server/ctdb_recoverd.c +++ b/ctdb/server/ctdb_recoverd.c @@ -1068,11 +1068,20 @@ static void monitor_handler(struct ctdb_context *ctdb, uint64_t srvid, return; } - if (nodemap->nodes[i].flags != c->flags) { + /* Dont let messages from remote nodes change the DISCONNECTED flag. + This flag is handled locally based on whether the local node + can communicate with the node or not. + */ + c->flags &= ~NODE_FLAGS_DISCONNECTED; + + /* check whether the flags (except for the DISCONNECTED flag have changed */ + if ((nodemap->nodes[i].flags&(~NODE_FLAGS_DISCONNECTED)) != c->flags) { DEBUG(0,("Node %u has changed flags - now 0x%x\n", c->vnn, c->flags)); } - nodemap->nodes[i].flags = c->flags; + /* Update the flags but leave the DISCONNECTED flag as is */ + nodemap->nodes[i].flags = c->flags + | (nodemap->nodes[i].flags&NODE_FLAGS_DISCONNECTED); ret = ctdb_ctrl_getrecmaster(ctdb, CONTROL_TIMEOUT(), CTDB_CURRENT_NODE, &ctdb->recovery_master); -- 2.47.3