diff options
author | Martin Schwenke <martin@meltin.net> | 2020-03-19 17:14:10 +1100 |
---|---|---|
committer | Martin Schwenke <martins@samba.org> | 2022-01-17 10:21:33 +0000 |
commit | e60581d5b5ecbac2b4bae49fbf60e071372fc2d3 (patch) | |
tree | dda288dd2349e5e24148c0a1ccd9e293888c886d /ctdb | |
parent | 92fb68e9b8a5481d9dd5c9033c98e204035509fe (diff) | |
download | samba-e60581d5b5ecbac2b4bae49fbf60e071372fc2d3.tar.gz |
ctdb-tools: Use leader broadcast in get_leader()
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Diffstat (limited to 'ctdb')
-rw-r--r-- | ctdb/tools/ctdb.c | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/ctdb/tools/ctdb.c b/ctdb/tools/ctdb.c index 1c3e4ba55da..0294040eec4 100644 --- a/ctdb/tools/ctdb.c +++ b/ctdb/tools/ctdb.c @@ -744,24 +744,36 @@ static void leader_handler(uint64_t srvid, ctdb->leader_pnn = leader_pnn; } +static bool get_leader_done(void *private_data) +{ + struct ctdb_context *ctdb = talloc_get_type_abort( + private_data, struct ctdb_context); + + return ctdb->leader_pnn != CTDB_UNKNOWN_PNN; +} + static int get_leader(TALLOC_CTX *mem_ctx, struct ctdb_context *ctdb, uint32_t *leader) { - uint32_t pnn; int ret; - ret = ctdb_ctrl_get_recmaster(mem_ctx, - ctdb->ev, - ctdb->client, - ctdb->cmd_pnn, - TIMEOUT(), - &pnn); - if (ret != 0) { + ret = ctdb_client_wait_func_timeout(ctdb->ev, + get_leader_done, + ctdb, + TIMEOUT()); + /* + * If ETIMEDOUT then assume there is no leader and succeed so + * initial value of CTDB_UNKNOWN_PNN is returned + */ + if (ret == ETIMEDOUT) { + ret = 0; + } else if (ret != 0) { + fprintf(stderr, "Error getting recovery master\n"); return ret; } - *leader = pnn; + *leader = ctdb->leader_pnn; return 0; } |