From 73d3531f313e7ff77b524d27c9f0f6012e8fabdd Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 21 Mar 2017 09:32:27 -0500 Subject: [PATCH 01/10] Refactor: libcrmcommon: avoid duplicate variable for /usr/sbin --- lib/common/Makefile.am | 3 +-- lib/common/watchdog.c | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/common/Makefile.am b/lib/common/Makefile.am index 05a0d74..7a68d1f 100644 --- a/lib/common/Makefile.am +++ b/lib/common/Makefile.am @@ -17,8 +17,7 @@ # include $(top_srcdir)/Makefile.common -AM_CPPFLAGS += -I$(top_builddir)/lib/gnu -I$(top_srcdir)/lib/gnu \ - -DSBINDIR=\"$(sbindir)\" +AM_CPPFLAGS += -I$(top_builddir)/lib/gnu -I$(top_srcdir)/lib/gnu ## libraries lib_LTLIBRARIES = libcrmcommon.la diff --git a/lib/common/watchdog.c b/lib/common/watchdog.c index a171721..4c4abc1 100644 --- a/lib/common/watchdog.c +++ b/lib/common/watchdog.c @@ -216,7 +216,7 @@ pcmk_locate_sbd(void) /* Look for the pid file */ pidfile = crm_strdup_printf("%s/sbd.pid", HA_STATE_DIR); - sbd_path = crm_strdup_printf("%s/sbd", SBINDIR); + sbd_path = crm_strdup_printf("%s/sbd", SBIN_DIR); /* Read the pid file */ CRM_ASSERT(pidfile); -- 1.8.3.1 From 7642b2c27d074078326b8cc90ed99f1910900a2d Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 21 Mar 2017 09:49:22 -0500 Subject: [PATCH 02/10] Low: libpe_status: use new ID generation functions Ensures values are sanitized, and fixes a memory leak --- lib/pengine/container.c | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/lib/pengine/container.c b/lib/pengine/container.c index d7d47ad..801d94a 100644 --- a/lib/pengine/container.c +++ b/lib/pengine/container.c @@ -88,10 +88,9 @@ create_resource(const char *name, const char *provider, const char *kind) static void create_nvp(xmlNode *parent, const char *name, const char *value) { - char *id = crm_strdup_printf("%s-%s", ID(parent), name); xmlNode *xml_nvp = create_xml_node(parent, XML_CIB_TAG_NVPAIR); - crm_xml_add(xml_nvp, XML_ATTR_ID, id); free(id); + crm_xml_set_id(xml_nvp, "%s-%s", ID(parent), name); crm_xml_add(xml_nvp, XML_NVPAIR_ATTR_NAME, name); crm_xml_add(xml_nvp, XML_NVPAIR_ATTR_VALUE, value); } @@ -99,10 +98,9 @@ create_nvp(xmlNode *parent, const char *name, const char *value) static void create_op(xmlNode *parent, const char *prefix, const char *task, const char *interval) { - char *id = crm_strdup_printf("%s-%s-%s", prefix, task, interval); xmlNode *xml_op = create_xml_node(parent, "op"); - crm_xml_add(xml_op, XML_ATTR_ID, id); free(id); + crm_xml_set_id(xml_op, "%s-%s-%s", prefix, task, interval); crm_xml_add(xml_op, XML_LRM_ATTR_INTERVAL, interval); crm_xml_add(xml_op, "name", task); } @@ -113,13 +111,16 @@ create_ip_resource( pe_working_set_t * data_set) { if(data->ip_range_start) { - char *id = crm_strdup_printf("%s-ip-%s", data->prefix, tuple->ipaddr); - xmlNode *xml_ip = create_resource(id, "heartbeat", "IPaddr2"); + char *id = NULL; + xmlNode *xml_ip = NULL; xmlNode *xml_obj = NULL; - id = crm_strdup_printf("%s-attributes-%d", data->prefix, tuple->offset); + id = crm_strdup_printf("%s-ip-%s", data->prefix, tuple->ipaddr); + crm_xml_sanitize_id(id); + xml_ip = create_resource(id, "heartbeat", "IPaddr2"); + xml_obj = create_xml_node(xml_ip, XML_TAG_ATTR_SETS); - crm_xml_add(xml_obj, XML_ATTR_ID, id); free(id); + crm_xml_set_id(xml_obj, "%s-attributes-%d", data->prefix, tuple->offset); create_nvp(xml_obj, "ip", tuple->ipaddr); if(data->host_network) { @@ -158,13 +159,16 @@ create_docker_resource( int doffset = 0, dmax = 1024; char *dbuffer = calloc(1, dmax+1); - char *id = crm_strdup_printf("%s-docker-%d", data->prefix, tuple->offset); - xmlNode *xml_docker = create_resource(id, "heartbeat", "docker"); + char *id = NULL; + xmlNode *xml_docker = NULL; xmlNode *xml_obj = NULL; - id = crm_strdup_printf("%s-attributes-%d", data->prefix, tuple->offset); + id = crm_strdup_printf("%s-docker-%d", data->prefix, tuple->offset); + crm_xml_sanitize_id(id); + xml_docker = create_resource(id, "heartbeat", "docker"); + xml_obj = create_xml_node(xml_docker, XML_TAG_ATTR_SETS); - crm_xml_add(xml_obj, XML_ATTR_ID, id); free(id); + crm_xml_set_id(xml_obj, "%s-attributes-%d", data->prefix, tuple->offset); create_nvp(xml_obj, "image", data->image); create_nvp(xml_obj, "allow_pull", "true"); @@ -288,16 +292,14 @@ create_remote_resource( xml_obj = create_xml_node(xml_remote, "operations"); create_op(xml_obj, ID(xml_remote), "monitor", "60s"); - id = crm_strdup_printf("%s-attributes-%d", data->prefix, tuple->offset); xml_obj = create_xml_node(xml_remote, XML_TAG_ATTR_SETS); - crm_xml_add(xml_obj, XML_ATTR_ID, id); free(id); + crm_xml_set_id(xml_obj, "%s-attributes-%d", data->prefix, tuple->offset); create_nvp(xml_obj, "addr", tuple->ipaddr); create_nvp(xml_obj, "port", crm_itoa(DEFAULT_REMOTE_PORT)); - id = crm_strdup_printf("%s-meta-%d", data->prefix, tuple->offset); xml_obj = create_xml_node(xml_remote, XML_TAG_META_SETS); - crm_xml_add(xml_obj, XML_ATTR_ID, id); free(id); + crm_xml_set_id(xml_obj, "%s-meta-%d", data->prefix, tuple->offset); create_nvp(xml_obj, XML_OP_ATTR_ALLOW_MIGRATE, "false"); @@ -458,13 +460,10 @@ container_unpack(resource_t * rsc, pe_working_set_t * data_set) xml_resource = create_xml_node(NULL, XML_CIB_TAG_INCARNATION); } - value = crm_strdup_printf("%s-%s", container_data->prefix, xml_resource->name); - crm_xml_add(xml_resource, XML_ATTR_ID, value); - free(value); + crm_xml_set_id(xml_resource, "%s-%s", container_data->prefix, xml_resource->name); - value = crm_strdup_printf("%s-%s-meta", container_data->prefix, xml_resource->name); xml_set = create_xml_node(xml_resource, XML_TAG_META_SETS); - free(value); + crm_xml_set_id(xml_resource, "%s-%s-meta", container_data->prefix, xml_resource->name); create_nvp(xml_set, XML_RSC_ATTR_ORDERED, "true"); -- 1.8.3.1 From 0e42b7427e71a8336b2b8d3fb3ec4d9470cad1e3 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 21 Mar 2017 09:56:58 -0500 Subject: [PATCH 03/10] Refactor: crmd,lrmd,liblrmd: pass pointer rather than structure --- crmd/lrm_state.c | 3 ++- include/crm_internal.h | 2 +- lib/lrmd/proxy_common.c | 4 ++-- lrmd/remote_ctl.c | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/crmd/lrm_state.c b/crmd/lrm_state.c index 83532a5..9a810df 100644 --- a/crmd/lrm_state.c +++ b/crmd/lrm_state.c @@ -408,7 +408,8 @@ crmd_remote_proxy_new(lrmd_t *lrmd, const char *node_name, const char *session_i .dispatch = remote_proxy_dispatch, .destroy = remote_proxy_disconnected }; - remote_proxy_t *proxy = remote_proxy_new(lrmd, proxy_callbacks, node_name, session_id, channel); + remote_proxy_t *proxy = remote_proxy_new(lrmd, &proxy_callbacks, node_name, + session_id, channel); if (safe_str_eq(channel, CRM_SYSTEM_CRMD)) { proxy->is_local = TRUE; diff --git a/include/crm_internal.h b/include/crm_internal.h index 206ec5f..d2f2f07 100644 --- a/include/crm_internal.h +++ b/include/crm_internal.h @@ -380,7 +380,7 @@ typedef struct remote_proxy_s { } remote_proxy_t; remote_proxy_t *remote_proxy_new( - lrmd_t *lrmd, struct ipc_client_callbacks proxy_callbacks, + lrmd_t *lrmd, struct ipc_client_callbacks *proxy_callbacks, const char *node_name, const char *session_id, const char *channel); int remote_proxy_check(lrmd_t *lrmd, GHashTable *hash); diff --git a/lib/lrmd/proxy_common.c b/lib/lrmd/proxy_common.c index 2e9d963..e0f3d87 100644 --- a/lib/lrmd/proxy_common.c +++ b/lib/lrmd/proxy_common.c @@ -172,7 +172,7 @@ remote_proxy_disconnected(gpointer userdata) } remote_proxy_t * -remote_proxy_new(lrmd_t *lrmd, struct ipc_client_callbacks proxy_callbacks, +remote_proxy_new(lrmd_t *lrmd, struct ipc_client_callbacks *proxy_callbacks, const char *node_name, const char *session_id, const char *channel) { remote_proxy_t *proxy = NULL; @@ -188,7 +188,7 @@ remote_proxy_new(lrmd_t *lrmd, struct ipc_client_callbacks proxy_callbacks, proxy->node_name = strdup(node_name); proxy->session_id = strdup(session_id); - proxy->source = mainloop_add_ipc_client(channel, G_PRIORITY_LOW, 0, proxy, &proxy_callbacks); + proxy->source = mainloop_add_ipc_client(channel, G_PRIORITY_LOW, 0, proxy, proxy_callbacks); proxy->ipc = mainloop_get_ipc_client(proxy->source); proxy->lrm = lrmd; diff --git a/lrmd/remote_ctl.c b/lrmd/remote_ctl.c index f3fc24f..4afa337 100644 --- a/lrmd/remote_ctl.c +++ b/lrmd/remote_ctl.c @@ -259,7 +259,7 @@ ctl_remote_proxy_cb(lrmd_t *lrmd, void *userdata, xmlNode *msg) .destroy = remote_proxy_disconnected }; - remote_proxy_new(lrmd, proxy_callbacks, options.node_name, session, channel); + remote_proxy_new(lrmd, &proxy_callbacks, options.node_name, session, channel); } else { remote_proxy_cb(lrmd, options.node_name, msg); -- 1.8.3.1 From 6e0782767bd8b057a363e6bb32327d6881699aae Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 21 Mar 2017 10:50:30 -0500 Subject: [PATCH 04/10] Low: crmd,liblrmd: handle crmd-local proxy requests properly --- crmd/lrm_state.c | 14 ++++++++------ lib/lrmd/proxy_common.c | 28 ++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/crmd/lrm_state.c b/crmd/lrm_state.c index 9a810df..86cedd8 100644 --- a/crmd/lrm_state.c +++ b/crmd/lrm_state.c @@ -410,10 +410,6 @@ crmd_remote_proxy_new(lrmd_t *lrmd, const char *node_name, const char *session_i }; remote_proxy_t *proxy = remote_proxy_new(lrmd, &proxy_callbacks, node_name, session_id, channel); - - if (safe_str_eq(channel, CRM_SYSTEM_CRMD)) { - proxy->is_local = TRUE; - } return proxy; } @@ -526,7 +522,7 @@ crmd_remote_proxy_cb(lrmd_t *lrmd, void *userdata, xmlNode *msg) } return; - } else if (safe_str_eq(op, LRMD_IPC_OP_REQUEST) && proxy->is_local) { + } else if (safe_str_eq(op, LRMD_IPC_OP_REQUEST) && proxy && proxy->is_local) { /* this is for the crmd, which we are, so don't try * and connect/send to ourselves over ipc. instead * do it directly. @@ -534,9 +530,15 @@ crmd_remote_proxy_cb(lrmd_t *lrmd, void *userdata, xmlNode *msg) int flags = 0; xmlNode *request = get_message_xml(msg, F_LRMD_IPC_MSG); + CRM_CHECK(request != NULL, return); +#if ENABLE_ACL + CRM_CHECK(lrm_state->node_name, return); + crm_xml_add(request, XML_ACL_TAG_ROLE, "pacemaker-remote"); + crm_acl_get_set_user(request, F_LRMD_IPC_USER, lrm_state->node_name); +#endif crmd_proxy_dispatch(session, request); - crm_element_value_int(msg, F_LRMD_IPC_MSG_FLAGS, &flags); + crm_element_value_int(msg, F_LRMD_IPC_MSG_FLAGS, &flags); if (flags & crm_ipc_client_response) { int msg_id = 0; xmlNode *op_reply = create_xml_node(NULL, "ack"); diff --git a/lib/lrmd/proxy_common.c b/lib/lrmd/proxy_common.c index e0f3d87..81796d4 100644 --- a/lib/lrmd/proxy_common.c +++ b/lib/lrmd/proxy_common.c @@ -187,15 +187,21 @@ remote_proxy_new(lrmd_t *lrmd, struct ipc_client_callbacks *proxy_callbacks, proxy->node_name = strdup(node_name); proxy->session_id = strdup(session_id); - - proxy->source = mainloop_add_ipc_client(channel, G_PRIORITY_LOW, 0, proxy, proxy_callbacks); - proxy->ipc = mainloop_get_ipc_client(proxy->source); proxy->lrm = lrmd; - if (proxy->source == NULL) { - remote_proxy_free(proxy); - remote_proxy_notify_destroy(lrmd, session_id); - return NULL; + if (safe_str_eq(crm_system_name, CRM_SYSTEM_CRMD) + && safe_str_eq(channel, CRM_SYSTEM_CRMD)) { + /* The crmd doesn't need to connect to itself */ + proxy->is_local = TRUE; + + } else { + proxy->source = mainloop_add_ipc_client(channel, G_PRIORITY_LOW, 0, proxy, proxy_callbacks); + proxy->ipc = mainloop_get_ipc_client(proxy->source); + if (proxy->source == NULL) { + remote_proxy_free(proxy); + remote_proxy_notify_destroy(lrmd, session_id); + return NULL; + } } crm_trace("new remote proxy client established to %s on %s, session id %s", @@ -237,7 +243,13 @@ remote_proxy_cb(lrmd_t *lrmd, const char *node_name, xmlNode *msg) /* proxy connection no longer exists */ remote_proxy_notify_destroy(lrmd, session); return; - } else if ((proxy->is_local == FALSE) && (crm_ipc_connected(proxy->ipc) == FALSE)) { + } + + /* crmd requests MUST be handled by the crmd, not us */ + CRM_CHECK(proxy->is_local == FALSE, + remote_proxy_end_session(proxy); return); + + if (crm_ipc_connected(proxy->ipc) == FALSE) { remote_proxy_end_session(proxy); return; } -- 1.8.3.1 From c76c85f7ca5d5fe2127473f13516694882fda603 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 21 Mar 2017 10:51:22 -0500 Subject: [PATCH 05/10] Refactor: libcrmcommon: remove dead code --- include/crm_internal.h | 8 -------- 1 file changed, 8 deletions(-) diff --git a/include/crm_internal.h b/include/crm_internal.h index d2f2f07..cf0f32d 100644 --- a/include/crm_internal.h +++ b/include/crm_internal.h @@ -162,10 +162,6 @@ crm_clear_bit(const char *function, int line, const char *target, long long word { long long rc = (word & ~bit); - /* if(bit == 0x00002) { */ - /* crm_err("Bit 0x%.8llx for %s cleared by %s:%d", bit, target, function, line); */ - /* } */ - if (rc == word) { /* Unchanged */ } else if (target) { @@ -182,10 +178,6 @@ crm_set_bit(const char *function, int line, const char *target, long long word, { long long rc = (word | bit); - /* if(bit == 0x00002) { */ - /* crm_err("Bit 0x%.8llx for %s set by %s:%d", bit, target, function, line); */ - /* } */ - if (rc == word) { /* Unchanged */ } else if (target) { -- 1.8.3.1 From 23cd184c09f2bdb19b9b5d34b8a091cd52d9d142 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 21 Mar 2017 10:58:09 -0500 Subject: [PATCH 06/10] Low: libpe_status: allow more than 254 containers in a bundle --- lib/pengine/container.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/lib/pengine/container.c b/lib/pengine/container.c index 801d94a..1c70f02 100644 --- a/lib/pengine/container.c +++ b/lib/pengine/container.c @@ -32,20 +32,28 @@ void tuple_free(container_grouping_t *tuple); static char * next_ip(const char *last_ip) { - int oct1 = 0; - int oct2 = 0; - int oct3 = 0; - int oct4 = 0; + unsigned int oct1 = 0; + unsigned int oct2 = 0; + unsigned int oct3 = 0; + unsigned int oct4 = 0; + int rc = sscanf(last_ip, "%u.%u.%u.%u", &oct1, &oct2, &oct3, &oct4); - int rc = sscanf(last_ip, "%d.%d.%d.%d", &oct1, &oct2, &oct3, &oct4); if (rc != 4) { + /*@ TODO check for IPv6 */ return NULL; - } else if(oct4 > 255) { + } else if (oct3 > 253) { return NULL; + + } else if (oct4 > 253) { + ++oct3; + oct4 = 1; + + } else { + ++oct4; } - return crm_strdup_printf("%d.%d.%d.%d", oct1, oct2, oct3, oct4+1); + return crm_strdup_printf("%u.%u.%u.%u", oct1, oct2, oct3, oct4); } static int -- 1.8.3.1 From 4751d74fbfb1be557fb2d4fca9db2c4a2b896950 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 21 Mar 2017 11:10:54 -0500 Subject: [PATCH 07/10] Low: libpe_status: avoid memory leaks in bundle handling --- lib/pengine/container.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/pengine/container.c b/lib/pengine/container.c index 1c70f02..816e96a 100644 --- a/lib/pengine/container.c +++ b/lib/pengine/container.c @@ -88,7 +88,7 @@ create_resource(const char *name, const char *provider, const char *kind) crm_xml_add(rsc, XML_ATTR_ID, name); crm_xml_add(rsc, XML_AGENT_ATTR_CLASS, "ocf"); crm_xml_add(rsc, XML_AGENT_ATTR_PROVIDER, provider); - crm_xml_add(rsc, "type", kind); + crm_xml_add(rsc, XML_ATTR_TYPE, kind); return rsc; } @@ -126,6 +126,7 @@ create_ip_resource( id = crm_strdup_printf("%s-ip-%s", data->prefix, tuple->ipaddr); crm_xml_sanitize_id(id); xml_ip = create_resource(id, "heartbeat", "IPaddr2"); + free(id); xml_obj = create_xml_node(xml_ip, XML_TAG_ATTR_SETS); crm_xml_set_id(xml_obj, "%s-attributes-%d", data->prefix, tuple->offset); @@ -174,6 +175,7 @@ create_docker_resource( id = crm_strdup_printf("%s-docker-%d", data->prefix, tuple->offset); crm_xml_sanitize_id(id); xml_docker = create_resource(id, "heartbeat", "docker"); + free(id); xml_obj = create_xml_node(xml_docker, XML_TAG_ATTR_SETS); crm_xml_set_id(xml_obj, "%s-attributes-%d", data->prefix, tuple->offset); @@ -203,6 +205,7 @@ create_docker_resource( } doffset += snprintf(dbuffer+doffset, dmax-doffset, "%s", source); offset += snprintf(buffer+offset, max-offset, " -v %s:%s", source, mount->target); + free(source); } else { offset += snprintf(buffer+offset, max-offset, " -v %s:%s", mount->source, mount->target); @@ -287,16 +290,19 @@ create_remote_resource( xmlNode *xml_obj = NULL; xmlNode *xml_remote = NULL; char *nodeid = crm_strdup_printf("%s-%d", data->prefix, tuple->offset); - char *id = strdup(nodeid); + char *id = NULL; - if(remote_id_conflict(id, data_set)) { + if (remote_id_conflict(nodeid, data_set)) { // The biggest hammer we have id = crm_strdup_printf("pcmk-internal-%s-remote-%d", tuple->child->id, tuple->offset); + CRM_ASSERT(remote_id_conflict(id, data_set) == FALSE); + } else { + id = strdup(nodeid); } - CRM_ASSERT(remote_id_conflict(id, data_set) == FALSE); - xml_remote = create_resource(id, "pacemaker", "remote"); + free(id); + xml_obj = create_xml_node(xml_remote, "operations"); create_op(xml_obj, ID(xml_remote), "monitor", "60s"); -- 1.8.3.1 From ef2cd27bf68b9950cb67872b72c878c995fac479 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 21 Mar 2017 11:14:41 -0500 Subject: [PATCH 08/10] Refactor: libpe_status: rename newly exposed function with pe_ prefix --- fencing/main.c | 1 - include/crm/pengine/internal.h | 3 ++- lib/pengine/container.c | 3 ++- lib/pengine/unpack.c | 19 ++++++++++++------- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/fencing/main.c b/fencing/main.c index 437c31f..1c61d8b 100644 --- a/fencing/main.c +++ b/fencing/main.c @@ -710,7 +710,6 @@ update_done: } extern xmlNode *do_calculations(pe_working_set_t * data_set, xmlNode * xml_input, crm_time_t * now); -extern node_t *create_node(const char *id, const char *uname, const char *type, const char *score, pe_working_set_t * data_set); /*! * \internal diff --git a/include/crm/pengine/internal.h b/include/crm/pengine/internal.h index adafefd..0da02cc 100644 --- a/include/crm/pengine/internal.h +++ b/include/crm/pengine/internal.h @@ -286,7 +286,8 @@ void print_rscs_brief(GListPtr rsc_list, const char * pre_text, long options, void * print_data, gboolean print_all); void pe_fence_node(pe_working_set_t * data_set, node_t * node, const char *reason); -node_t *create_node(const char *id, const char *uname, const char *type, const char *score, pe_working_set_t * data_set); +node_t *pe_create_node(const char *id, const char *uname, const char *type, + const char *score, pe_working_set_t * data_set); bool remote_id_conflict(const char *remote_name, pe_working_set_t *data); void common_print(resource_t * rsc, const char *pre_text, const char *name, node_t *node, long options, void *print_data); resource_t *find_container_child(const char *stem, resource_t * rsc, node_t *node); diff --git a/lib/pengine/container.c b/lib/pengine/container.c index 816e96a..4dc7594 100644 --- a/lib/pengine/container.c +++ b/lib/pengine/container.c @@ -326,7 +326,8 @@ create_remote_resource( // tuple->docker->fillers = g_list_append(tuple->docker->fillers, child); // -INFINITY prevents anyone else from running here - node = create_node(strdup(nodeid), nodeid, "remote", "-INFINITY", data_set); + node = pe_create_node(strdup(nodeid), nodeid, "remote", "-INFINITY", + data_set); tuple->node = node_copy(node); tuple->node->weight = 500; nodeid = NULL; diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c index 2f03493..ef51cd5 100644 --- a/lib/pengine/unpack.c +++ b/lib/pengine/unpack.c @@ -303,7 +303,8 @@ destroy_digest_cache(gpointer ptr) } node_t * -create_node(const char *id, const char *uname, const char *type, const char *score, pe_working_set_t * data_set) +pe_create_node(const char *id, const char *uname, const char *type, + const char *score, pe_working_set_t * data_set) { node_t *new_node = NULL; @@ -571,7 +572,7 @@ unpack_nodes(xmlNode * xml_nodes, pe_working_set_t * data_set) crm_config_err("Must specify id tag in "); continue; } - new_node = create_node(id, uname, type, score, data_set); + new_node = pe_create_node(id, uname, type, score, data_set); if (new_node == NULL) { return FALSE; @@ -595,7 +596,8 @@ unpack_nodes(xmlNode * xml_nodes, pe_working_set_t * data_set) if (data_set->localhost && pe_find_node(data_set->nodes, data_set->localhost) == NULL) { crm_info("Creating a fake local node"); - create_node(data_set->localhost, data_set->localhost, NULL, 0, data_set); + pe_create_node(data_set->localhost, data_set->localhost, NULL, 0, + data_set); } return TRUE; @@ -649,7 +651,8 @@ unpack_remote_nodes(xmlNode * xml_resources, pe_working_set_t * data_set) * an expanded node that has already been added to the node list. */ if (new_node_id && pe_find_node(data_set->nodes, new_node_id) == NULL) { crm_trace("Found baremetal remote node %s in container resource %s", new_node_id, ID(xml_obj)); - create_node(new_node_id, new_node_id, "remote", NULL, data_set); + pe_create_node(new_node_id, new_node_id, "remote", NULL, + data_set); } continue; } @@ -668,7 +671,8 @@ unpack_remote_nodes(xmlNode * xml_resources, pe_working_set_t * data_set) if (new_node_id && pe_find_node(data_set->nodes, new_node_id) == NULL) { crm_trace("Found guest remote node %s in container resource %s", new_node_id, ID(xml_obj)); - create_node(new_node_id, new_node_id, "remote", NULL, data_set); + pe_create_node(new_node_id, new_node_id, "remote", NULL, + data_set); } continue; @@ -681,7 +685,8 @@ unpack_remote_nodes(xmlNode * xml_resources, pe_working_set_t * data_set) if (new_node_id && pe_find_node(data_set->nodes, new_node_id) == NULL) { crm_trace("Found guest remote node %s in container resource %s which is in group %s", new_node_id, ID(xml_obj2), ID(xml_obj)); - create_node(new_node_id, new_node_id, "remote", NULL, data_set); + pe_create_node(new_node_id, new_node_id, "remote", NULL, + data_set); } } } @@ -1661,7 +1666,7 @@ create_fake_resource(const char *rsc_id, xmlNode * rsc_entry, pe_working_set_t * rsc->is_remote_node = TRUE; node = pe_find_node(data_set->nodes, rsc_id); if (node == NULL) { - node = create_node(rsc_id, rsc_id, "remote", NULL, data_set); + node = pe_create_node(rsc_id, rsc_id, "remote", NULL, data_set); } link_rsc2remotenode(data_set, rsc); -- 1.8.3.1 From b12bb91ab10166fa20f7ebcc7e48972688c3e8f8 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 21 Mar 2017 11:20:49 -0500 Subject: [PATCH 09/10] Low: xml: rename bucket to bundle here, too --- xml/resources-2.8.rng | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xml/resources-2.8.rng b/xml/resources-2.8.rng index f41f84d..2e69aba 100644 --- a/xml/resources-2.8.rng +++ b/xml/resources-2.8.rng @@ -14,7 +14,7 @@ - + @@ -66,8 +66,8 @@ - - + + -- 1.8.3.1 From 5e00b0b0d9df6cc8288f6368ffb1bce1ee24468a Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 21 Mar 2017 13:57:10 -0500 Subject: [PATCH 10/10] Low: tools: update validity regression tests for 2.8 schema --- tools/regression.validity.exp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/tools/regression.validity.exp b/tools/regression.validity.exp index 1278a09..8fcfcb2 100644 --- a/tools/regression.validity.exp +++ b/tools/regression.validity.exp @@ -62,7 +62,11 @@ element rsc_order: Relax-NG validity error : Element constraints has extra conte element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order ( schemas.c:NNN ) trace: update_validation: pacemaker-2.7 validation failed -Your current configuration pacemaker-1.2 could not validate with any schema in range [pacemaker-1.2, pacemaker-2.7], cannot upgrade to pacemaker-2.0. +( schemas.c:NNN ) debug: update_validation: Testing 'pacemaker-2.8' validation (14 of X) +element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order +element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order +( schemas.c:NNN ) trace: update_validation: pacemaker-2.8 validation failed +Your current configuration pacemaker-1.2 could not validate with any schema in range [pacemaker-1.2, pacemaker-2.8], cannot upgrade to pacemaker-2.0. =#=#=#= End test: Run crm_simulate with invalid CIB (enum violation) - Required key not available (126) =#=#=#= * Passed: crm_simulate - Run crm_simulate with invalid CIB (enum violation) =#=#=#= Begin test: Try to make resulting CIB invalid (unrecognized validate-with) =#=#=#= @@ -136,7 +140,10 @@ element cib: Relax-NG validity error : Invalid attribute validate-with for eleme ( schemas.c:NNN ) debug: update_validation: Testing 'pacemaker-2.7' validation (13 of X) element cib: Relax-NG validity error : Invalid attribute validate-with for element cib ( schemas.c:NNN ) trace: update_validation: pacemaker-2.7 validation failed -Your current configuration pacemaker-9999.0 could not validate with any schema in range [unknown, pacemaker-2.7], cannot upgrade to pacemaker-2.0. +( schemas.c:NNN ) debug: update_validation: Testing 'pacemaker-2.8' validation (14 of X) +element cib: Relax-NG validity error : Invalid attribute validate-with for element cib +( schemas.c:NNN ) trace: update_validation: pacemaker-2.8 validation failed +Your current configuration pacemaker-9999.0 could not validate with any schema in range [unknown, pacemaker-2.8], cannot upgrade to pacemaker-2.0. =#=#=#= End test: Run crm_simulate with invalid CIB (unrecognized validate-with) - Required key not available (126) =#=#=#= * Passed: crm_simulate - Run crm_simulate with invalid CIB (unrecognized validate-with) =#=#=#= Begin test: Try to make resulting CIB invalid, but possibly recoverable (valid with X.Y+1) =#=#=#= @@ -187,8 +194,11 @@ element tags: Relax-NG validity error : Element configuration has extra content: ( schemas.c:NNN ) debug: update_validation: pacemaker-2.6-style configuration is also valid for pacemaker-2.7 ( schemas.c:NNN ) debug: update_validation: Testing 'pacemaker-2.7' validation (13 of X) ( schemas.c:NNN ) debug: update_validation: Configuration valid for schema: pacemaker-2.7 -( schemas.c:NNN ) trace: update_validation: Stopping at pacemaker-2.7 -( schemas.c:NNN ) info: update_validation: Transformed the configuration from pacemaker-1.2 to pacemaker-2.7 +( schemas.c:NNN ) debug: update_validation: pacemaker-2.7-style configuration is also valid for pacemaker-2.8 +( schemas.c:NNN ) debug: update_validation: Testing 'pacemaker-2.8' validation (14 of X) +( schemas.c:NNN ) debug: update_validation: Configuration valid for schema: pacemaker-2.8 +( schemas.c:NNN ) trace: update_validation: Stopping at pacemaker-2.8 +( schemas.c:NNN ) info: update_validation: Transformed the configuration from pacemaker-1.2 to pacemaker-2.8 error: unpack_resources: Resource start-up disabled since no STONITH resources have been defined error: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option error: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity @@ -314,6 +324,8 @@ element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order +element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order +element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order =#=#=#= Current cib after: Make resulting CIB invalid, and without validate-with attribute =#=#=#= @@ -371,6 +383,8 @@ bad-1.2.xml:10: element rsc_order: Relax-NG validity error : Invalid attribute f bad-1.2.xml:10: element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order bad-1.2.xml:10: element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order bad-1.2.xml:10: element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order +bad-1.2.xml:10: element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order +bad-1.2.xml:10: element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order error: unpack_resources: Resource start-up disabled since no STONITH resources have been defined error: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option error: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity -- 1.8.3.1