diff options
author | Martin Schwenke <martin@meltin.net> | 2022-06-23 14:30:34 +1000 |
---|---|---|
committer | Amitay Isaacs <amitay@samba.org> | 2022-07-22 16:09:31 +0000 |
commit | d62fcba7dce6038c02c12b3531e953e7b808614a (patch) | |
tree | ef72b3d62b89ce8a818d4269e1594d4272a49092 /ctdb/server | |
parent | f5a20377347aba18700d010d4201775fc83a0b1b (diff) | |
download | samba-d62fcba7dce6038c02c12b3531e953e7b808614a.tar.gz |
ctdb-daemon: Avoid spurious error sending ARPs for released IP
A public IP address can be released in between (and probably before)
attempts to send ARPs. One situation when this can occur is when a
cluster is shutting down: node A shuts down first, public IPs from
node A are taken over by node B, node B is shutdown.
Notice this when it occurs and cancel further attempts to send ARPs.
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Diffstat (limited to 'ctdb/server')
-rw-r--r-- | ctdb/server/ctdb_takeover.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/ctdb/server/ctdb_takeover.c b/ctdb/server/ctdb_takeover.c index 99efb0af356..81c733a9c48 100644 --- a/ctdb/server/ctdb_takeover.c +++ b/ctdb/server/ctdb_takeover.c @@ -373,8 +373,17 @@ static void ctdb_control_send_arp(struct tevent_context *ev, struct ctdb_takeover_arp); int ret; struct ctdb_tcp_array *tcparray; - const char *iface = ctdb_vnn_iface_string(arp->vnn); + const char *iface; + + /* IP address might have been released between sends */ + if (arp->vnn->iface == NULL) { + DBG_INFO("Cancelling ARP send for released IP %s\n", + ctdb_addr_to_str(&arp->vnn->public_address)); + talloc_free(arp); + return; + } + iface = ctdb_vnn_iface_string(arp->vnn); ret = ctdb_sys_send_arp(&arp->addr, iface); if (ret != 0) { DBG_ERR("Failed to send ARP on interface %s: %s\n", |