commit dde47a0eca301ca97dbe03fc9a1f6328e3b127a3 Author: Andrew Beekhof Date: Mon Sep 23 09:23:45 2013 +1000 Fix: Fencing: Observe pcmk_host_list during automatic unfencing diff --git a/fencing/commands.c b/fencing/commands.c index 73a7fc1..7d04952 100644 --- a/fencing/commands.c +++ b/fencing/commands.c @@ -665,7 +665,7 @@ schedule_internal_command(const char *origin, schedule_stonith_command(cmd, device); } -static gboolean +gboolean string_in_list(GListPtr list, const char *item) { int lpc = 0; diff --git a/fencing/internal.h b/fencing/internal.h index 9a8b096..11a8c58 100644 --- a/fencing/internal.h +++ b/fencing/internal.h @@ -164,6 +164,8 @@ int stonith_manual_ack(xmlNode * msg, remote_fencing_op_t * op); void unfence_cb(GPid pid, int rc, const char *output, gpointer user_data); +gboolean string_in_list(GListPtr list, const char *item); + void schedule_internal_command(const char *origin, stonith_device_t * device, diff --git a/fencing/main.c b/fencing/main.c index 6401f2f..a90c43b 100644 --- a/fencing/main.c +++ b/fencing/main.c @@ -669,12 +669,24 @@ static void cib_device_update(resource_t *rsc, pe_working_set_t *data_set) if(have_fence_scsi == FALSE && safe_str_eq(agent, "fence_scsi")) { stonith_device_t *device = g_hash_table_lookup(device_list, rsc->id); - if(device) { - have_fence_scsi = TRUE; - crm_notice("Unfencing ourselves with %s (%s)", agent, device->id); - schedule_internal_command(__FUNCTION__, device, "on", stonith_our_uname, 0, NULL, unfence_cb); + if(stonith_our_uname == NULL) { + crm_trace("Cannot unfence ourselves: no local host name"); + + } else if(device == NULL) { + crm_err("Cannot unfence ourselves: no such device '%s'", rsc->id); + } else { - crm_err("Device %s does not exist", rsc->id); + const char *alias = g_hash_table_lookup(device->aliases, stonith_our_uname); + + if (!alias) { + alias = stonith_our_uname; + } + + if (device->targets && string_in_list(device->targets, alias)) { + have_fence_scsi = TRUE; + crm_notice("Unfencing ourselves with %s (%s)", agent, device->id); + schedule_internal_command(__FUNCTION__, device, "on", stonith_our_uname, 0, NULL, unfence_cb); + } } }