From: Martin Schwenke Date: Thu, 18 Jan 2018 08:58:15 +0000 (+1100) Subject: ctdb-recoverd: Add fail callback to assign banning credits X-Git-Tag: samba-4.11.14~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d1f01ff312b74f28975910d6ef936b2ecacb8ff9;p=thirdparty%2Fsamba.git ctdb-recoverd: Add fail callback to assign banning credits Also drop error handling in main_loop() that is replaced by this change. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14466 Signed-off-by: Martin Schwenke Reviewed-by: Amitay Isaacs (cherry picked from commit 10ce0dbf1c11eaaab7b28b6bbd014235a36d1962) --- diff --git a/ctdb/server/ctdb_recoverd.c b/ctdb/server/ctdb_recoverd.c index 1418836044c..f0c5efd5b6d 100644 --- a/ctdb/server/ctdb_recoverd.c +++ b/ctdb/server/ctdb_recoverd.c @@ -2225,6 +2225,7 @@ done: struct remote_nodemaps_state { struct ctdb_node_map_old **remote_nodemaps; + struct ctdb_recoverd *rec; }; static void async_getnodemap_callback(struct ctdb_context *ctdb, @@ -2247,6 +2248,20 @@ static void async_getnodemap_callback(struct ctdb_context *ctdb, } +static void async_getnodemap_error(struct ctdb_context *ctdb, + uint32_t node_pnn, + int32_t res, + TDB_DATA outdata, + void *callback_data) +{ + struct remote_nodemaps_state *state = + (struct remote_nodemaps_state *)callback_data; + struct ctdb_recoverd *rec = state->rec; + + DBG_ERR("Failed to retrieve nodemap from node %u\n", node_pnn); + ctdb_set_culprit(rec, node_pnn); +} + static int get_remote_nodemaps(struct ctdb_recoverd *rec, TALLOC_CTX *mem_ctx, struct ctdb_node_map_old ***remote_nodemaps) @@ -2268,6 +2283,7 @@ static int get_remote_nodemaps(struct ctdb_recoverd *rec, nodes = list_of_active_nodes(ctdb, rec->nodemap, mem_ctx, true); state.remote_nodemaps = t; + state.rec = rec; ret = ctdb_client_async_control(ctdb, CTDB_CONTROL_GET_NODEMAP, @@ -2277,7 +2293,7 @@ static int get_remote_nodemaps(struct ctdb_recoverd *rec, false, tdb_null, async_getnodemap_callback, - NULL, + async_getnodemap_error, &state); talloc_free(nodes); @@ -2622,13 +2638,6 @@ static void main_loop(struct ctdb_context *ctdb, struct ctdb_recoverd *rec, continue; } - if (remote_nodemaps[j] == NULL) { - DEBUG(DEBUG_ERR,(__location__ " Did not get a remote nodemap for node %d, restarting monitoring\n", j)); - ctdb_set_culprit(rec, j); - - return; - } - /* if the nodes disagree on how many nodes there are then this is a good reason to try recovery */