summaryrefslogtreecommitdiff
path: root/ctdb/server
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2022-06-23 14:30:34 +1000
committerAmitay Isaacs <amitay@samba.org>2022-07-22 16:09:31 +0000
commitd62fcba7dce6038c02c12b3531e953e7b808614a (patch)
treeef72b3d62b89ce8a818d4269e1594d4272a49092 /ctdb/server
parentf5a20377347aba18700d010d4201775fc83a0b1b (diff)
downloadsamba-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.c11
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",