Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP3:GA
pacemaker.8397
pacemaker-set-meta_timeout-env-crm_resource-for...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File pacemaker-set-meta_timeout-env-crm_resource-force-executes-RA-2.patch of Package pacemaker.8397
commit aa00c73849444f1c6d194fce574c54036c2f6d34 Author: Kazunori INOUE <inouekazu@intellilink.co.jp> Date: Mon Oct 30 18:14:38 2017 +0900 Low: tools: set meta_timeout env when crm_resource --force-* executes RA (2) Index: pacemaker/include/crm/pengine/internal.h =================================================================== --- pacemaker.orig/include/crm/pengine/internal.h +++ pacemaker/include/crm/pengine/internal.h @@ -211,6 +211,9 @@ extern action_t *custom_action(resource_ rsc, demoted_key(rsc), CRMD_ACTION_DEMOTED, node, \ optional, TRUE, data_set) +extern int pe_get_configured_timeout(resource_t *rsc, const char *action, + pe_working_set_t *data_set); + extern action_t *find_first_action(GListPtr input, const char *uuid, const char *task, node_t * on_node); extern enum action_tasks get_complex_task(resource_t * rsc, const char *name, Index: pacemaker/lib/pengine/utils.c =================================================================== --- pacemaker.orig/lib/pengine/utils.c +++ pacemaker/lib/pengine/utils.c @@ -576,6 +576,44 @@ custom_action(resource_t * rsc, char *ke return action; } +int +pe_get_configured_timeout(resource_t *rsc, const char *action, pe_working_set_t *data_set) +{ + xmlNode *child = NULL; + const char *timeout = NULL; + int timeout_ms = 0; + + for (child = first_named_child(rsc->ops_xml, XML_ATTR_OP); + child != NULL; child = __xml_next(child)) { + if (safe_str_eq(action, crm_element_value(child, XML_NVPAIR_ATTR_NAME))) { + timeout = crm_element_value(child, XML_ATTR_TIMEOUT); + break; + } + } + + if (timeout == NULL && data_set->op_defaults) { + GHashTable *action_meta = g_hash_table_new_full(crm_str_hash, g_str_equal, free, free); + unpack_instance_attributes(data_set->input, data_set->op_defaults, XML_TAG_META_SETS, + NULL, action_meta, NULL, FALSE, data_set->now); + timeout = g_hash_table_lookup(action_meta, XML_ATTR_TIMEOUT); + } + + if (timeout == NULL && data_set->config_hash) { + timeout = pe_pref(data_set->config_hash, "default-action-timeout"); + } + + if (timeout == NULL) { + timeout = "20s"; + } + + timeout_ms = crm_get_msec(timeout); + if (timeout_ms < 0) { + timeout_ms = 0; + } + + return timeout_ms; +} + static const char * unpack_operation_on_fail(action_t * action) { Index: pacemaker/tools/crm_resource.c =================================================================== --- pacemaker.orig/tools/crm_resource.c +++ pacemaker/tools/crm_resource.c @@ -338,7 +338,7 @@ static struct crm_option long_options[] }, { "timeout", required_argument, NULL, 'T', - "\t(Advanced) Abort if command does not finish in this time (with --restart, --wait)" + "\t(Advanced) Abort if command does not finish in this time (with --restart, --wait, --force-*)" }, { "force", no_argument, NULL, 'f', @@ -823,7 +823,8 @@ main(int argc, char **argv) rc = wait_till_stable(timeout_ms, cib_conn); } else if (rsc_cmd == 0 && rsc_long_cmd) { /* force-(stop|start|check) */ - rc = cli_resource_execute(rsc_id, rsc_long_cmd, override_params, cib_conn, &data_set); + rc = cli_resource_execute(rsc_id, rsc_long_cmd, override_params, + timeout_ms, cib_conn, &data_set); if (rc >= 0) { is_ocf_rc = 1; } Index: pacemaker/tools/crm_resource.h =================================================================== --- pacemaker.orig/tools/crm_resource.h +++ pacemaker/tools/crm_resource.h @@ -74,7 +74,8 @@ int cli_resource_search(const char *rsc, int cli_resource_delete(cib_t *cib_conn, crm_ipc_t * crmd_channel, const char *host_uname, resource_t * rsc, pe_working_set_t * data_set); int cli_resource_restart(resource_t * rsc, const char *host, int timeout_ms, cib_t * cib); int cli_resource_move(const char *rsc_id, const char *host_name, cib_t * cib, pe_working_set_t *data_set); -int cli_resource_execute(const char *rsc_id, const char *rsc_action, GHashTable *override_hash, cib_t * cib, pe_working_set_t *data_set); +int cli_resource_execute(const char *rsc_id, const char *rsc_action, GHashTable *override_hash, + int timeout_ms, cib_t * cib, pe_working_set_t *data_set); int cli_resource_update_attribute(const char *rsc_id, const char *attr_set, const char *attr_id, const char *attr_name, const char *attr_value, bool recursive, Index: pacemaker/tools/crm_resource_runtime.c =================================================================== --- pacemaker.orig/tools/crm_resource_runtime.c +++ pacemaker/tools/crm_resource_runtime.c @@ -1450,7 +1450,8 @@ wait_till_stable(int timeout_ms, cib_t * } int -cli_resource_execute(const char *rsc_id, const char *rsc_action, GHashTable *override_hash, cib_t * cib, pe_working_set_t *data_set) +cli_resource_execute(const char *rsc_id, const char *rsc_action, GHashTable *override_hash, + int timeout_ms, cib_t * cib, pe_working_set_t *data_set) { int rc = pcmk_ok; svc_action_t *op = NULL; @@ -1461,10 +1462,6 @@ cli_resource_execute(const char *rsc_id, GHashTable *params = NULL; resource_t *rsc = pe_find_resource(data_set->resources, rsc_id); - xmlNode *child = NULL; - const char *timeout = NULL; - long timeout_ms = 0; - if (rsc == NULL) { CMD_ERR("Must supply a resource id with -r"); return -ENXIO; @@ -1513,42 +1510,22 @@ cli_resource_execute(const char *rsc_id, params = generate_resource_params(rsc, data_set); /* add meta_timeout env needed by some resource agents */ - child = first_named_child(rsc->xml, "operations"); - for (child = first_named_child(child, XML_ATTR_OP); - child != NULL; child = crm_next_same_xml(child)) { - if (safe_str_eq(action, crm_element_value(child, XML_NVPAIR_ATTR_NAME))) { - timeout = crm_element_value(child, XML_ATTR_TIMEOUT); - break; - } - } - if (timeout == NULL && data_set->op_defaults) { - GHashTable *action_meta = crm_str_table_new(); - unpack_instance_attributes(data_set->input, data_set->op_defaults, XML_TAG_META_SETS, - NULL, action_meta, NULL, FALSE, data_set->now); - timeout = g_hash_table_lookup(action_meta, XML_ATTR_TIMEOUT); - } - if (timeout == NULL && data_set->config_hash) { - timeout = pe_pref(data_set->config_hash, "default-action-timeout"); - } - if (timeout == NULL) { - timeout = CRM_DEFAULT_OP_TIMEOUT_S; - } - timeout_ms = crm_get_msec(timeout); - if (timeout_ms < 0) { - timeout_ms = 0; + if (timeout_ms == 0) { + timeout_ms = pe_get_configured_timeout(rsc, action, data_set); } g_hash_table_insert(params, strdup("CRM_meta_timeout"), - crm_strdup_printf("%ld", timeout_ms)); + crm_strdup_printf("%d", timeout_ms)); /* add crm_feature_set env needed by some resource agents */ g_hash_table_insert(params, strdup(XML_ATTR_CRM_VERSION), strdup(CRM_FEATURE_SET)); - op = resources_action_create(rsc->id, rclass, rprov, rtype, action, 0, -1, params, 0); + op = resources_action_create(rsc->id, rclass, rprov, rtype, action, 0, + timeout_ms, params, 0); if (op == NULL) { /* Re-run with stderr enabled so we can display a sane error message */ crm_enable_stderr(TRUE); op = resources_action_create(rsc->id, rclass, rprov, rtype, action, 0, - -1, params, 0); + timeout_ms, params, 0); /* We know op will be NULL, but this makes static analysis happy */ services_action_free(op);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor