diff --git a/include/crm/compatibility.h b/include/crm/compatibility.h index b33b0c0d1c..f0e4d932ba 100644 --- a/include/crm/compatibility.h +++ b/include/crm/compatibility.h @@ -1,347 +1,10 @@ /* - * Copyright (C) 2012 Andrew Beekhof + * Copyright (C) 2012-2017 Andrew Beekhof * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * This source code is licensed under the GNU General Public License version 2 + * or later (GPLv2+) WITHOUT ANY WARRANTY. */ #ifndef CRM_COMPATIBILITY__H # define CRM_COMPATIBILITY__H -# define LOG_DEBUG_2 LOG_TRACE -# define LOG_DEBUG_3 LOG_TRACE -# define LOG_DEBUG_4 LOG_TRACE -# define LOG_DEBUG_5 LOG_TRACE -# define LOG_DEBUG_6 LOG_TRACE - -# define XML_CIB_ATTR_HASTATE "ha" -# define XML_CIB_ATTR_JOINSTATE XML_NODE_JOIN_STATE -# define XML_CIB_ATTR_EXPSTATE XML_NODE_EXPECTED -# define XML_CIB_ATTR_INCCM XML_NODE_IN_CLUSTER -# define XML_CIB_ATTR_CRMDSTATE XML_NODE_IS_PEER - -# define CRMD_STATE_ACTIVE CRMD_JOINSTATE_MEMBER -# define CRMD_STATE_INACTIVE CRMD_JOINSTATE_DOWN - -#define pcmk_err_dtd_validation pcmk_err_schema_validation - -/* *INDENT-OFF* */ -enum cib_errors { - cib_ok = pcmk_ok, - cib_operation = -EINVAL, - cib_create_msg = -EPROTO, - cib_not_connected = -ENOTCONN, - cib_not_authorized = -EACCES, - cib_send_failed = -ECOMM, - cib_reply_failed = -ENOMSG, - cib_return_code = -EPROTO, - cib_output_data = -ENOMSG, - cib_connection = -ENOTCONN, - cib_authentication = -EPROTO, - cib_missing = -EINVAL, - cib_variant = -EPROTONOSUPPORT, - CIBRES_MISSING_FIELD = -EINVAL, - cib_unknown = -EINVAL, - cib_STALE = -ENOKEY, - cib_EXISTS = -ENOTUNIQ, - cib_NOTEXISTS = -ENXIO, - cib_ACTIVATION = -ENODATA, - cib_NOOBJECT = -EINVAL, - cib_NOPARENT = -EINVAL, - cib_NOTSUPPORTED = -EPROTONOSUPPORT, - cib_registration_msg = -EPROTO, - cib_callback_token = -EPROTO, - cib_callback_register = -ECOMM, - cib_client_gone = -ECONNRESET, - cib_not_master = -EPERM, - cib_missing_data = -EINVAL, - cib_remote_timeout = -ETIME, - cib_no_quorum = -pcmk_err_no_quorum, - cib_diff_failed = -pcmk_err_diff_failed, - cib_diff_resync = -pcmk_err_diff_resync, - cib_old_data = -pcmk_err_old_data, - cib_dtd_validation = -pcmk_err_schema_validation, - cib_bad_section = -EINVAL, - cib_bad_permissions = -EACCES, - cib_invalid_argument = -EINVAL, - cib_transform_failed = -pcmk_err_transform_failed, - cib_permission_denied = -EACCES, -}; - -enum stonith_errors { - stonith_ok = pcmk_ok, - stonith_pending = -EINPROGRESS, - st_err_generic = -pcmk_err_generic, - st_err_internal = -EPROTO, - st_err_not_supported = -EPROTONOSUPPORT, - st_err_connection = -ENOTCONN, - st_err_missing = -EINVAL, - st_err_exists = -ENOTUNIQ, - st_err_timeout = -ETIME, - st_err_ipc = -ECOMM, - st_err_peer = -ENOMSG, - st_err_unknown_operation = -EOPNOTSUPP, - st_err_unknown_device = -ENODEV, - st_err_none_available = -EHOSTUNREACH, - st_err_signal = -ECONNABORTED, - st_err_agent_fork = -ECHILD, - st_err_agent_args = -EREMOTEIO, - st_err_agent = -ECONNABORTED, - st_err_invalid_level = -EINVAL, -}; - - -enum lrmd_errors { - lrmd_ok = pcmk_ok, - lrmd_pending = -EINPROGRESS, - lrmd_err_generic = -EPROTONOSUPPORT, - lrmd_err_internal = -EPROTO, - lrmd_err_connection = -ENOTCONN, - lrmd_err_missing = -EINVAL, - lrmd_err_ipc = -ECOMM, - lrmd_err_peer = -ENOMSG, - lrmd_err_unknown_operation = -EOPNOTSUPP, - lrmd_err_unknown_rsc = -ENODEV, - lrmd_err_no_metadata = -EIO, - lrmd_err_stonith_connection = -EUNATCH, - lrmd_err_provider_required = -EINVAL, -}; -/* *INDENT-ON* */ - -# define stonith_error2string pcmk_strerror -# define lrmd_error2string pcmk_strerror -# define cib_error2string pcmk_strerror - -static inline void -slist_basic_destroy(GListPtr list) -{ - GListPtr gIter = NULL; - - for (gIter = list; gIter != NULL; gIter = gIter->next) { - free(gIter->data); - } - g_list_free(list); -} - -# define crm_strdup strdup -# define set_bit_inplace set_bit -# define clear_bit_inplace clear_bit - -# define crm_malloc0(malloc_obj, length) do { \ - malloc_obj = malloc(length); \ - if(malloc_obj == NULL) { \ - crm_err("Failed allocation of %lu bytes", (unsigned long)length); \ - CRM_ASSERT(malloc_obj != NULL); \ - } \ - memset(malloc_obj, 0, length); \ - } while(0) - -# define crm_malloc(malloc_obj, length) do { \ - malloc_obj = malloc(length); \ - if(malloc_obj == NULL) { \ - crm_err("Failed allocation of %lu bytes", (unsigned long)length); \ - CRM_ASSERT(malloc_obj != NULL); \ - } \ - } while(0) - -# define crm_realloc(realloc_obj, length) do { \ - realloc_obj = realloc(realloc_obj, length); \ - CRM_ASSERT(realloc_obj != NULL); \ - } while(0) - -# define crm_free(free_obj) do { free(free_obj); free_obj=NULL; } while(0) - -/* These two child iterator macros are no longer to be used - * They exist for compatibility reasons and will be removed in a - * future release - */ -# define xml_child_iter(parent, child, code) do { \ - if(parent != NULL) { \ - xmlNode *child = NULL; \ - xmlNode *__crm_xml_iter = parent->children; \ - while(__crm_xml_iter != NULL) { \ - child = __crm_xml_iter; \ - __crm_xml_iter = __crm_xml_iter->next; \ - if(child->type == XML_ELEMENT_NODE) { \ - code; \ - } \ - } \ - } \ - } while(0) - -# define xml_child_iter_filter(parent, child, filter, code) do { \ - if(parent != NULL) { \ - xmlNode *child = NULL; \ - xmlNode *__crm_xml_iter = parent->children; \ - while(__crm_xml_iter != NULL) { \ - child = __crm_xml_iter; \ - __crm_xml_iter = __crm_xml_iter->next; \ - if(child->type == XML_ELEMENT_NODE) { \ - if(filter == NULL \ - || crm_str_eq(filter, (const char *)child->name, TRUE)) { \ - code; \ - } \ - } \ - } \ - } \ - } while(0) - -# define xml_prop_iter(parent, prop_name, prop_value, code) do { \ - if(parent != NULL) { \ - xmlAttrPtr prop_iter = parent->properties; \ - const char *prop_name = NULL; \ - const char *prop_value = NULL; \ - while(prop_iter != NULL) { \ - prop_name = (const char *)prop_iter->name; \ - prop_value = crm_element_value(parent, prop_name); \ - prop_iter = prop_iter->next; \ - if(prop_name) { \ - code; \ - } \ - } \ - } \ - } while(0) - -# define xml_prop_name_iter(parent, prop_name, code) do { \ - if(parent != NULL) { \ - xmlAttrPtr prop_iter = parent->properties; \ - const char *prop_name = NULL; \ - while(prop_iter != NULL) { \ - prop_name = (const char *)prop_iter->name; \ - prop_iter = prop_iter->next; \ - if(prop_name) { \ - code; \ - } \ - } \ - } \ - } while(0) - -# define zap_xml_from_parent(parent, xml_obj) free_xml(xml_obj); xml_obj = NULL - -/* For ABI compatibility with version < 1.1.4 */ -static inline char * -calculate_xml_digest(xmlNode * input, gboolean sort, gboolean do_filter) -{ - return calculate_xml_digest_v1(input, sort, do_filter); -} - -static inline void -free_xml_from_parent(xmlNode * parent, xmlNode * a_node) -{ - free_xml(a_node); -} - -/* Use something like this instead of the next macro: - - GListPtr gIter = rsc->children; - for(; gIter != NULL; gIter = gIter->next) { - resource_t *child_rsc = (resource_t*)gIter->data; - ... - } - */ -# define slist_destroy(child_type, child, parent, a) do { \ - GListPtr __crm_iter_head = parent; \ - child_type *child = NULL; \ - while(__crm_iter_head != NULL) { \ - child = (child_type *) __crm_iter_head->data; \ - __crm_iter_head = __crm_iter_head->next; \ - { a; } \ - } \ - g_list_free(parent); \ - } while(0) - -# ifdef CRM_ATTRD__H -static inline gboolean -attrd_update(crm_ipc_t * cluster, char command, const char *host, const char *name, - const char *value, const char *section, const char *set, const char *dampen) -{ - return attrd_update_delegate(cluster, command, host, name, value, section, set, dampen, - NULL, attrd_opt_none) > 0; -} - -static inline gboolean -attrd_lazy_update(char command, const char *host, const char *name, - const char *value, const char *section, const char *set, const char *dampen) -{ - return attrd_update_delegate(NULL, command, host, name, value, section, set, dampen, NULL, attrd_opt_none) > 0; -} - -static inline gboolean -attrd_update_no_mainloop(int *connection, char command, const char *host, - const char *name, const char *value, const char *section, - const char *set, const char *dampen) -{ - return attrd_update_delegate(NULL, command, host, name, value, section, set, dampen, NULL, attrd_opt_none) > 0; -} -# endif - -# ifdef CIB_UTIL__H -static inline int -update_attr(cib_t * the_cib, int call_options, - const char *section, const char *node_uuid, const char *set_type, const char *set_name, - const char *attr_id, const char *attr_name, const char *attr_value, gboolean to_console) -{ - return update_attr_delegate(the_cib, call_options, section, node_uuid, set_type, set_name, - attr_id, attr_name, attr_value, to_console, NULL, NULL); -} - -static inline int -find_nvpair_attr(cib_t * the_cib, const char *attr, const char *section, const char *node_uuid, - const char *set_type, const char *set_name, const char *attr_id, - const char *attr_name, gboolean to_console, char **value) -{ - return find_nvpair_attr_delegate(the_cib, attr, section, node_uuid, set_type, - set_name, attr_id, attr_name, to_console, value, NULL); -} - -static inline int -read_attr(cib_t * the_cib, - const char *section, const char *node_uuid, const char *set_type, const char *set_name, - const char *attr_id, const char *attr_name, char **attr_value, gboolean to_console) -{ - return read_attr_delegate(the_cib, section, node_uuid, set_type, set_name, - attr_id, attr_name, attr_value, to_console, NULL); -} - -static inline int -delete_attr(cib_t * the_cib, int options, - const char *section, const char *node_uuid, const char *set_type, const char *set_name, - const char *attr_id, const char *attr_name, const char *attr_value, gboolean to_console) -{ - return delete_attr_delegate(the_cib, options, section, node_uuid, set_type, set_name, - attr_id, attr_name, attr_value, to_console, NULL); -} - -static inline void -log_cib_diff(int log_level, xmlNode * diff, const char *function) -{ - xml_log_patchset(log_level, function, diff); -} - -static inline gboolean -apply_cib_diff(xmlNode * old, xmlNode * diff, xmlNode ** new) -{ - *new = copy_xml(old); - return (xml_apply_patchset(*new, diff, TRUE) == pcmk_ok); -} - -# endif - -# ifdef CRM_COMMON_XML__H -void -log_xml_diff(uint8_t log_level, xmlNode * diff, const char *function) -{ - xml_log_patchset(log_level, function, diff); -} -# endif #endif