Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion daemons/fenced/fenced_scheduler.c
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ fenced_scheduler_run(xmlNode *cib)

scheduler->input = cib;
pcmk__set_scheduler_flags(scheduler,
pcmk__sched_location_only|pcmk__sched_no_counts);
pcmk__sched_location_only|pcmk__sched_no_counts|pcmk__sched_for_fenced);
pcmk__schedule_actions(scheduler);
g_list_foreach(scheduler->priv->resources, register_if_fencing_device,
NULL);
Expand Down
7 changes: 7 additions & 0 deletions include/crm/common/scheduler_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,13 @@ enum pcmk__scheduler_flags {
* applying node-specific location criteria, assignment, etc.)
*/
pcmk__sched_validate_only = (1ULL << 27),
/* To maintain compatibility with fenced behavior in 2.1.9,
* when the node name is unknown, the local node name will be set
* for location calculations in fenced.
* This will cause stonith device registration to be performed
* when fenced receives the cib.
*/
pcmk__sched_for_fenced = (1ULL << 28),
};

// Implementation of pcmk__scheduler_private_t
Expand Down
2 changes: 2 additions & 0 deletions include/crm/pengine/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,8 @@ bool pe__native_is_filtered(const pcmk_resource_t *rsc, const GList *only_rsc,

xmlNode *pe__failed_probe_for_rsc(const pcmk_resource_t *rsc, const char *name);

void pe__create_fake_local_node(pcmk_scheduler_t * scheduler);

const char *pe__clone_child_id(const pcmk_resource_t *rsc);

int pe__sum_node_health_scores(const pcmk_node_t *node, int base_health);
Expand Down
9 changes: 1 addition & 8 deletions lib/pengine/status.c
Original file line number Diff line number Diff line change
Expand Up @@ -160,14 +160,7 @@ cluster_status(pcmk_scheduler_t * scheduler)
scheduler->priv->blocked_resources);
}

if ((scheduler->priv->local_node_name != NULL)
&& (pcmk_find_node(scheduler,
scheduler->priv->local_node_name) == NULL)) {
crm_info("Creating a fake local node for %s",
scheduler->priv->local_node_name);
pe_create_node(scheduler->priv->local_node_name,
scheduler->priv->local_node_name, NULL, 0, scheduler);
}
pe__create_fake_local_node(scheduler);

pcmk__set_scheduler_flags(scheduler, pcmk__sched_have_status);
return TRUE;
Expand Down
7 changes: 7 additions & 0 deletions lib/pengine/unpack.c
Original file line number Diff line number Diff line change
Expand Up @@ -643,6 +643,13 @@ unpack_nodes(xmlNode *xml_nodes, pcmk_scheduler_t *scheduler)
crm_trace("Done with node %s",
crm_element_value(xml_obj, PCMK_XA_UNAME));
}

/* If the request is from fenced and the node name is not set,
* the local node will be set.
*/
if (pcmk_is_set(scheduler->flags, pcmk__sched_for_fenced)) {
pe__create_fake_local_node(scheduler);
}

return TRUE;
}
Expand Down
12 changes: 12 additions & 0 deletions lib/pengine/utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -888,3 +888,15 @@ pe__failed_probe_for_rsc(const pcmk_resource_t *rsc, const char *name)

return NULL;
}

void
pe__create_fake_local_node(pcmk_scheduler_t * scheduler){
if ((scheduler->priv->local_node_name != NULL)
&& (pcmk_find_node(scheduler,
scheduler->priv->local_node_name) == NULL)) {
crm_info("Creating a fake local node for %s",
scheduler->priv->local_node_name);
pe_create_node(scheduler->priv->local_node_name,
scheduler->priv->local_node_name, NULL, 0, scheduler);
}
}