ctdb-recoverd: Change get_remote_nodemaps() to use connected nodes
authorMartin Schwenke <martin@meltin.net>
Thu, 18 Jan 2018 09:02:42 +0000 (20:02 +1100)
committerKarolin Seeger <kseeger@samba.org>
Tue, 25 Aug 2020 13:57:28 +0000 (13:57 +0000)
The plan here is to use the nodemaps retrieved by get_remote_nodes()
in update_local_flags().  This will improve efficiency, since
get_remote_nodes() fetches flags from nodes in parallel.  It also
means that get_remote_nodes() can be used exactly once early on in
main_loop() to retrieve remote nodemaps.  Retrieving nodemaps multiple
times is unnecessary and racy - a single monitoring iteration should
not fetch flags multiple times and compare them.

This introduces a temporary behaviour change but it will be of no
consequence when the above changes are made.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14466
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
(cherry picked from commit 762d1d8a9605f97973a2c1176de5d29fcc61d15a)

ctdb/server/ctdb_recoverd.c

index 9fd1debbcf7be285adf562575ee040d387af1ee1..92bb9413b883a2c99adad643e39f6a2f87b7ba62 100644 (file)
@@ -2288,7 +2288,7 @@ static int get_remote_nodemaps(struct ctdb_recoverd *rec,
                return -1;
        }
 
-       nodes = list_of_active_nodes(ctdb, rec->nodemap, mem_ctx, true);
+       nodes = list_of_connected_nodes(ctdb, rec->nodemap, mem_ctx, true);
 
        state.remote_nodemaps = t;
        state.rec = rec;
@@ -2631,8 +2631,7 @@ static void main_loop(struct ctdb_context *ctdb, struct ctdb_recoverd *rec,
                goto takeover_run_checks;
        }
 
-       /* get the nodemap for all active remote nodes
-        */
+       /* Get the nodemaps for all connected remote nodes */
        ret = get_remote_nodemaps(rec, mem_ctx, &remote_nodemaps);
        if (ret != 0) {
                DBG_ERR("Failed to read remote nodemaps\n");