diff options
Diffstat (limited to 'ctdb')
-rw-r--r-- | ctdb/tests/src/ctdb_test_stubs.c | 9 | ||||
-rwxr-xr-x | ctdb/tests/tool/stubby.natgwlist.008.sh | 37 | ||||
-rw-r--r-- | ctdb/tools/ctdb.c | 13 |
3 files changed, 56 insertions, 3 deletions
diff --git a/ctdb/tests/src/ctdb_test_stubs.c b/ctdb/tests/src/ctdb_test_stubs.c index 1edbe6aee77..6149b3d334a 100644 --- a/ctdb/tests/src/ctdb_test_stubs.c +++ b/ctdb/tests/src/ctdb_test_stubs.c @@ -550,6 +550,15 @@ int ctdb_ctrl_getcapabilities_stub(struct ctdb_context *ctdb, struct timeval timeout, uint32_t destnode, uint32_t *capabilities) { + if (ctdb->nodes[destnode]->flags & NODE_FLAGS_DISCONNECTED) { + DEBUG(DEBUG_ERR, + ("ctdb_control error: 'ctdb_control to disconnected node\n")); + /* Placeholder for line#, instead of __location__ */ + DEBUG(DEBUG_ERR, + ("__LOCATION__ ctdb_ctrl_getcapabilities_recv failed\n")); + return -1; + } + *capabilities = ctdb->nodes[destnode]->capabilities; return 0; } diff --git a/ctdb/tests/tool/stubby.natgwlist.008.sh b/ctdb/tests/tool/stubby.natgwlist.008.sh new file mode 100755 index 00000000000..e213400ff9a --- /dev/null +++ b/ctdb/tests/tool/stubby.natgwlist.008.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +. "${TEST_SCRIPTS_DIR}/unit.sh" + +define_test "3 nodes, all in natgw group, 1 disconnected" + +setup_natgw <<EOF +192.168.20.41 +192.168.20.42 +192.168.20.43 +EOF + +required_result 0 <<EOF +1 192.168.20.42 +Number of nodes:3 +pnn:0 192.168.20.41 DISCONNECTED|INACTIVE +pnn:1 192.168.20.42 OK (THIS NODE) +pnn:2 192.168.20.43 OK +EOF + +simple_test <<EOF +NODEMAP +0 192.168.20.41 0x1 +1 192.168.20.42 0x0 CURRENT RECMASTER +2 192.168.20.43 0x0 + +VNNMAP +654321 +0 +1 +2 + +IFACES +:Name:LinkStatus:References: +:eth2:1:2: +:eth1:1:4: +EOF diff --git a/ctdb/tools/ctdb.c b/ctdb/tools/ctdb.c index ad85f084f29..74cf321fa26 100644 --- a/ctdb/tools/ctdb.c +++ b/ctdb/tools/ctdb.c @@ -1191,9 +1191,16 @@ filter_nodemap_by_capabilities(struct ctdb_context *ctdb, ret->num = 0; for (i = 0; i < nodemap->num; i++) { - int res = ctdb_ctrl_getcapabilities(ctdb, TIMELIMIT(), - nodemap->nodes[i].pnn, - &capabilities); + int res; + + /* Disconnected nodes have no capabilities! */ + if (nodemap->nodes[i].flags & NODE_FLAGS_DISCONNECTED) { + continue; + } + + res = ctdb_ctrl_getcapabilities(ctdb, TIMELIMIT(), + nodemap->nodes[i].pnn, + &capabilities); if (res != 0) { DEBUG(DEBUG_ERR, ("Unable to get capabilities from node %u\n", nodemap->nodes[i].pnn)); |