From 39ef082405a19b22554ffd6efaa75c39a586640f Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 14 May 2024 18:24:27 -0500 Subject: [PATCH 001/364] Doc: ChangeLog: update for 2.1.8-rc1 release --- ChangeLog | 462 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 462 insertions(+) diff --git a/ChangeLog b/ChangeLog index 2101aba60ce..8211238df17 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,465 @@ +* Wed May 15 2024 Ken Gaillot Pacemaker-2.1.8-rc1 +- 2480 commits with 507 files changed, 45891 insertions(+), 22991 deletions(-) + +- Features added since Pacemaker-2.1.7 + + CIB: deprecate omitting validate-with from the CIB or setting it to "none" + or an unknown schema + + CIB: deprecate "default" and "#default" as explicit meta-attribute values + + CIB: deprecate resource-discovery-enabled node attribute + + CIB: deprecate support for multiple top-level rules within a location + constraint (a single rule may still contain multiple sub-rules) + + CIB: deprecate support for node attribute expressions in rules beneath op, + op_defaults, or fence device meta-attributes + + CIB: deprecate support for rkt in bundles + + CIB: drop support for (nonworking) rules based on the #role node attribute + (role-based location constraints may still contain rules) + + CIB manager,controller,fencer,scheduler: deprecate "metadata" command-line + option (instead, use crm_attribute --list-options mentioned below) + + pacemaker-remoted: newer schema files are now downloaded from the cluster, + allowing more command-line tools to work when the Pacemaker Remote node + has an older Pacemaker version + + agents: deprecate the ocf:pacemaker:o2cb resource agent + + tools: crm_attribute --list-options lists all possible cluster options + + tools: crm_resource --list-options lists all possible primitive + meta-attributes or special fence device parameters + + tools: new --score option for cibadmin --modify and crm_attribute --update + enables expansion of "++" and "+=" in attribute values without a warning + (using such expansions without --score is now deprecated) + + tools: crm_ticket supports standard --output-as/--output-to arguments + + tools: deprecate --text-fancy standard command-line option + +- Fixes since Pacemaker-2.1.7 + + tools: restore the (deprecated) ability to automatically correct malformed + XML passed via standard input (regression introduced in 2.1.7) + + CIB: restore the (deprecated) ability to use validate-with="pacemaker-next" + (regression introduced in 2.1.6) + + controller: avoid zombie children when asynchronous actions exit while a + synchronous meta-data action is in progress + (regression introduced in 2.1.5) + + libcrmcommon: avoid file descriptor leak in asynchronous IPC clients + (regression introduced in 2.1.3) + + tools: crm_mon no longer crashes on some platforms when the fencer + connection is lost (regression introduced in 2.1.0) + + attribute manager: write Pacemaker Remote node attributes even if node is + not cached + + attribute manager: avoid use-after-free when remote node in cluster node + cache + + attribute manager: correctly propagate utilization attributes to peers + to avoid the possibility of later being written out as regular node + attributes + + fencer: correctly parse action-specific timeouts with units other than + seconds + + fencer: avoid unnecessary timeouts when the watchdog timeout is greater + than a query timeout, per-device fencing timeout, or stonith-timeout + + libcrmcommon: don't assume next schema will validate when not transforming + + libcrmcommon: when displaying XML, don't show "" for empty attribute + values, and properly escape special characters + + scheduler: if the user specifies a timeout of 0, use the default 20s as + documented + + agents: ocf:pacemaker:SysInfo respects attrd_updater dampening + + agents: ocf:pacemaker:HealthSMART properly handles SMART data missing + temperature + + tools: cibadmin --replace now leaves "++" and "+=" unexpanded in XML + attribute values rather than wrongly treat them as 0 + + tools: cibsecret avoids possible truncation issue in process listing + + tools: crm_attribute --node localhost or --node auto works + + tools: crm_resource ignores resource meta-attribute node expressions + for consistency with how the cluster works + + tools: crm_resource honors rules when getting utilization attributes + + tools: crm_verify --output-as=xml includes detailed messages + + tools: crm_mon exits upon loss of an attached pseudo-terminal to avoid + possibility of 100% CPU usage (seen when run via sudo with use_pty + configured) + +- Public API changes since Pacemaker-2.1.7 + + libcib: add cib_score_update cib_call_options value + + libcib: deprecate functions cib_get_generation(), cib_metadata(), + cib_pref(), query_node_uname(), and set_standby() + + libcib: deprecate T_CIB_DIFF_NOTIFY + + libcib: deprecate `` element in CIB create reply + + libcrmcluster: add enum pcmk_cluster_layer + + libcrmcluster: add functions pcmk_cluster_connect(), + pcmk_cluster_disconnect(), pcmk_cluster_layer_text(), + pcmk_cluster_set_destroy_fn(), pcmk_cpg_set_confchg_fn(), + pcmk_cpg_set_deliver_fn(), and pcmk_get_cluster_layer() + + libcrmcluster: add type pcmk_cluster_t + + libcrmcluster: deprecate functions cluster_connect_cpg(), + cluster_disconnect_cpg(), crm_active_peers(), crm_cluster_connect(), + crm_cluster_disconnect(), crm_get_peer(), crm_get_peer_full(), + crm_is_corosync_peer_active(), crm_is_peer_active(), crm_join_phase_str(), + crm_peer_destroy(), crm_peer_init(), crm_peer_uname(), + crm_peer_uuid(), crm_remote_node_cache_size(), + crm_remote_peer_cache_refresh(), crm_remote_peer_cache_remove(), + crm_remote_peer_get(), crm_set_autoreap(), crm_set_status_callback(), + get_cluster_type(), get_local_nodeid(), get_local_node_name(), + get_node_name(), is_corosync_cluster(), name_for_cluster_type(), + pcmk_cpg_membership(), pcmk_message_common_cs(), reap_crm_member(), + send_cluster_message(), send_cluster_text(), and text2msg_type() + + libcrmcluster: deprecate enums crm_ais_msg_types, crm_status_type, + cluster_type_e, crm_ais_msg_class, crm_get_peer_flags, crm_join_phase, + and crm_node_flags, including all their values + + libcrmcluster: deprecate global variables crm_have_quorum, crm_peer_cache, + crm_peer_seq, and crm_remote_peer_cache + + libcrmcluster: deprecate crm_cluster_t and struct crm_cluster_s, including + all its members + + libcrmcluster: deprecate crm_node_t and struct crm_peer_node_s, including + all its members + + libcrmcluster: deprecate constants CRM_NODE_LOST and CRM_NODE_MEMBER + + libcrmcommon: add constants PCMK_ACTION_METADATA, PCMK_META_ALLOW_MIGRATE, + PCMK_META_ALLOW_UNHEALTHY_NODES, PCMK_META_CONTAINER_ATTRIBUTE_TARGET, + PCMK_META_CRITICAL, PCMK_META_GLOBALLY_UNIQUE, PCMK_META_INTERLEAVE, + PCMK_META_INTERVAL, PCMK_META_INTERVAL_ORIGIN, PCMK_META_IS_MANAGED, + PCMK_META_MAINTENANCE, PCMK_META_MULTIPLE_ACTIVE, PCMK_META_NOTIFY, + PCMK_META_ON_FAIL, PCMK_META_ORDERED, PCMK_META_PRIORITY, + PCMK_META_PROMOTABLE, PCMK_META_RECORD_PENDING, PCMK_META_REMOTE_ADDR, + PCMK_META_REMOTE_ALLOW_MIGRATE, PCMK_META_REMOTE_CONNECT_TIMEOUT, + PCMK_META_REMOTE_NODE, PCMK_META_REMOTE_PORT, PCMK_META_REQUIRES, + PCMK_META_RESOURCE_STICKINESS, PCMK_META_START_DELAY, + PCMK_META_TARGET_ROLE, PCMK_META_TIMEOUT, PCMK_META_TIMESTAMP_FORMAT, + PCMK_NODE_ATTR_MAINTENANCE, PCMK_NODE_ATTR_STANDBY, PCMK_OPT_BATCH_LIMIT, + PCMK_OPT_CLUSTER_DELAY, PCMK_OPT_CLUSTER_INFRASTRUCTURE, + PCMK_OPT_CLUSTER_IPC_LIMIT, PCMK_OPT_CLUSTER_NAME, + PCMK_OPT_CLUSTER_RECHECK_INTERVAL, PCMK_OPT_CONCURRENT_FENCING, + PCMK_OPT_DC_DEADTIME, PCMK_OPT_DC_VERSION, PCMK_OPT_ELECTION_TIMEOUT, + PCMK_OPT_ENABLE_ACL, PCMK_OPT_ENABLE_STARTUP_PROBES, + PCMK_OPT_FENCE_REACTION, PCMK_OPT_HAVE_WATCHDOG, + PCMK_OPT_JOIN_FINALIZATION_TIMEOUT, PCMK_OPT_JOIN_INTEGRATION_TIMEOUT, + PCMK_OPT_LOAD_THRESHOLD, PCMK_OPT_MAINTENANCE_MODE, + PCMK_OPT_MIGRATION_LIMIT, PCMK_OPT_NODE_ACTION_LIMIT, + PCMK_OPT_NODE_HEALTH_BASE, PCMK_OPT_NODE_HEALTH_GREEN, + PCMK_OPT_NODE_HEALTH_RED, PCMK_OPT_NODE_HEALTH_STRATEGY, + PCMK_OPT_NODE_HEALTH_YELLOW, PCMK_OPT_NODE_PENDING_TIMEOUT, + PCMK_OPT_NO_QUORUM_POLICY, PCMK_OPT_PE_ERROR_SERIES_MAX, + PCMK_OPT_PE_INPUT_SERIES_MAX, PCMK_OPT_PE_WARN_SERIES_MAX, + PCMK_OPT_PLACEMENT_STRATEGY, PCMK_OPT_PRIORITY_FENCING_DELAY, + PCMK_OPT_SHUTDOWN_ESCALATION, PCMK_OPT_SHUTDOWN_LOCK, + PCMK_OPT_SHUTDOWN_LOCK_LIMIT, PCMK_OPT_STARTUP_FENCING, + PCMK_OPT_START_FAILURE_IS_FATAL, PCMK_OPT_STONITH_ACTION, + PCMK_OPT_STONITH_ENABLED, PCMK_OPT_STONITH_MAX_ATTEMPTS, + PCMK_OPT_STONITH_TIMEOUT, PCMK_OPT_STONITH_WATCHDOG_TIMEOUT, + PCMK_OPT_STOP_ALL_RESOURCES, PCMK_OPT_STOP_ORPHAN_ACTIONS, + PCMK_OPT_STOP_ORPHAN_RESOURCES, PCMK_OPT_SYMMETRIC_CLUSTER, + PCMK_OPT_TRANSITION_DELAY, PCMK_REMOTE_RA_ADDR, PCMK_REMOTE_RA_PORT, + PCMK_REMOTE_RA_RECONNECT_INTERVAL, PCMK_REMOTE_RA_SERVER, + PCMK_ROLE_PROMOTED, PCMK_ROLE_STARTED, PCMK_ROLE_STOPPED, + PCMK_ROLE_UNPROMOTED, PCMK_SCORE_INFINITY, PCMK_VALUE_ALWAYS, + PCMK_VALUE_AND, PCMK_VALUE_BALANCED, PCMK_VALUE_BLOCK, PCMK_VALUE_BOOLEAN, + PCMK_VALUE_CIB_BOOTSTRAP_OPTIONS, PCMK_VALUE_COROSYNC, PCMK_VALUE_CREATE, + PCMK_VALUE_CUSTOM, PCMK_VALUE_DATE_SPEC, PCMK_VALUE_DEFAULT, + PCMK_VALUE_DEFINED, PCMK_VALUE_DELETE, PCMK_VALUE_DEMOTE, PCMK_VALUE_DENY, + PCMK_VALUE_DURATION, PCMK_VALUE_DYNAMIC_LIST, PCMK_VALUE_EQ, + PCMK_VALUE_EXCLUSIVE, PCMK_VALUE_FAILED, PCMK_VALUE_FALSE, + PCMK_VALUE_FENCE, PCMK_VALUE_FENCE_LEGACY, PCMK_VALUE_FENCING, + PCMK_VALUE_FREEZE, PCMK_VALUE_GRANTED, PCMK_VALUE_GREEN, PCMK_VALUE_GT, + PCMK_VALUE_GTE, PCMK_VALUE_HOST, PCMK_VALUE_IGNORE, PCMK_VALUE_IN_RANGE, + PCMK_VALUE_INFINITY, PCMK_VALUE_INTEGER, PCMK_VALUE_LITERAL, + PCMK_VALUE_LT, PCMK_VALUE_LTE, PCMK_VALUE_MANDATORY, PCMK_VALUE_MEMBER, + PCMK_VALUE_META, PCMK_VALUE_MIGRATE_ON_RED, PCMK_VALUE_MINIMAL, + PCMK_VALUE_MINUS_INFINITY, PCMK_VALUE_MODIFY, PCMK_VALUE_MOVE, + PCMK_VALUE_NE, PCMK_VALUE_NEVER, PCMK_VALUE_NONE, + PCMK_VALUE_NONNEGATIVE_INTEGER, PCMK_VALUE_NOTHING, + PCMK_VALUE_NOT_DEFINED, PCMK_VALUE_NUMBER, PCMK_VALUE_OFFLINE, + PCMK_VALUE_ONLINE, PCMK_VALUE_ONLY_GREEN, PCMK_VALUE_OPTIONAL, + PCMK_VALUE_OR, PCMK_VALUE_PANIC, PCMK_VALUE_PARAM, PCMK_VALUE_PENDING, + PCMK_VALUE_PERCENTAGE, PCMK_VALUE_PLUS_INFINITY, PCMK_VALUE_PORT, + PCMK_VALUE_PROGRESSIVE, PCMK_VALUE_QUORUM, PCMK_VALUE_READ, + PCMK_VALUE_RED, PCMK_VALUE_REMOTE, PCMK_VALUE_RESTART, + PCMK_VALUE_RESTART_CONTAINER, PCMK_VALUE_REVOKED, PCMK_VALUE_SCORE, + PCMK_VALUE_SELECT, PCMK_VALUE_SERIALIZE, PCMK_VALUE_STANDBY, + PCMK_VALUE_STATIC_LIST, PCMK_VALUE_STATUS, PCMK_VALUE_STOP, + PCMK_VALUE_STOP_ONLY, PCMK_VALUE_STOP_START, PCMK_VALUE_STOP_UNEXPECTED, + PCMK_VALUE_STRING, PCMK_VALUE_SUCCESS, PCMK_VALUE_TIMEOUT, + PCMK_VALUE_TRUE, PCMK_VALUE_UNFENCING, PCMK_VALUE_UNKNOWN, + PCMK_VALUE_UTILIZATION, PCMK_VALUE_VERSION, PCMK_VALUE_WRITE, + PCMK_VALUE_YELLOW, PCMK_XA_ACTION, PCMK_XA_ACTIVE, PCMK_XA_ADD_HOST, + PCMK_XA_ADMIN_EPOCH, PCMK_XA_ADVANCED, PCMK_XA_AGENT, PCMK_XA_API_VERSION, + PCMK_XA_ATTRIBUTE, PCMK_XA_AUTHOR, PCMK_XA_AUTOMATIC, PCMK_XA_BLOCKED, + PCMK_XA_BOOLEAN_OP, PCMK_XA_BUILD, PCMK_XA_CACHED, PCMK_XA_CALL, + PCMK_XA_CIB_LAST_WRITTEN, PCMK_XA_CIB_NODE, PCMK_XA_CLASS, PCMK_XA_CLIENT, + PCMK_XA_CODE, PCMK_XA_COMMENT, PCMK_XA_COMPLETED, PCMK_XA_CONTROL_PORT, + PCMK_XA_COUNT, PCMK_XA_CRMD, PCMK_XA_CRM_DEBUG_ORIGIN, + PCMK_XA_CRM_FEATURE_SET, PCMK_XA_CRM_TIMESTAMP, PCMK_XA_DAYS, + PCMK_XA_DC_UUID, PCMK_XA_DEFAULT, PCMK_XA_DELEGATE, PCMK_XA_DESCRIPTION, + PCMK_XA_DEST, PCMK_XA_DEVICE, PCMK_XA_DEVICES, PCMK_XA_DISABLED, + PCMK_XA_DURATION, PCMK_XA_END, PCMK_XA_EPOCH, PCMK_XA_EXEC, + PCMK_XA_EXECUTION_CODE, PCMK_XA_EXECUTION_DATE, PCMK_XA_EXECUTION_MESSAGE, + PCMK_XA_EXEC_TIME, PCMK_XA_EXITCODE, PCMK_XA_EXITREASON, + PCMK_XA_EXITSTATUS, PCMK_XA_EXIT_REASON, PCMK_XA_EXPECTED, + PCMK_XA_EXPECTED_UP, PCMK_XA_EXTENDED_STATUS, PCMK_XA_FAILED, + PCMK_XA_FAILURE_IGNORED, PCMK_XA_FAIL_COUNT, PCMK_XA_FEATURES, + PCMK_XA_FEATURE_SET, PCMK_XA_FILE, PCMK_XA_FIRST, PCMK_XA_FIRST_ACTION, + PCMK_XA_FOR, PCMK_XA_FUNCTION, PCMK_XA_GENERATED, PCMK_XA_HASH, + PCMK_XA_HAVE_QUORUM, PCMK_XA_HEALTH, PCMK_XA_HOST, PCMK_XA_HOST_INTERFACE, + PCMK_XA_HOST_NETMASK, PCMK_XA_HOURS, PCMK_XA_ID, PCMK_XA_ID_AS_RESOURCE, + PCMK_XA_ID_REF, PCMK_XA_IMAGE, PCMK_XA_INDEX, PCMK_XA_INFLUENCE, + PCMK_XA_INSTANCE, PCMK_XA_INTERNAL_PORT, PCMK_XA_INTERVAL, + PCMK_XA_IP_RANGE_START, PCMK_XA_IS_DC, PCMK_XA_KIND, PCMK_XA_LANG, + PCMK_XA_LAST_FAILURE, PCMK_XA_LAST_GRANTED, PCMK_XA_LAST_RC_CHANGE, + PCMK_XA_LAST_UPDATED, PCMK_XA_LOCKED_TO, PCMK_XA_LOCKED_TO_HYPHEN, + PCMK_XA_LOSS_POLICY, PCMK_XA_MAINTENANCE, PCMK_XA_MAINTENANCE_MODE, + PCMK_XA_MANAGED, PCMK_XA_MESSAGE, PCMK_XA_MINUTES, PCMK_XA_MIXED_VERSION, + PCMK_XA_MONTHDAYS, PCMK_XA_MONTHS, PCMK_XA_MULTI_STATE, PCMK_XA_NAME, + PCMK_XA_NETWORK, PCMK_XA_NEXT_ROLE, PCMK_XA_NODE, PCMK_XA_NODEID, + PCMK_XA_NODES_RUNNING_ON, PCMK_XA_NODE_ATTRIBUTE, PCMK_XA_NODE_NAME, + PCMK_XA_NODE_PATH, PCMK_XA_NO_QUORUM_PANIC, PCMK_XA_NO_QUORUM_POLICY, + PCMK_XA_NUMBER, PCMK_XA_NUMBER_RESOURCES, PCMK_XA_NUM_UPDATES, + PCMK_XA_OBJECT_TYPE, PCMK_XA_ONLINE, PCMK_XA_ON_TARGET, PCMK_XA_OP, + PCMK_XA_OPERATION, PCMK_XA_OPTIONS, PCMK_XA_OP_KEY, PCMK_XA_ORIGIN, + PCMK_XA_ORPHAN, PCMK_XA_ORPHANED, PCMK_XA_PACEMAKERD_STATE, PCMK_XA_PATH, + PCMK_XA_PENDING, PCMK_XA_PORT, PCMK_XA_PRESENT, + PCMK_XA_PRIORITY_FENCING_DELAY_MS, PCMK_XA_PROGRAM, PCMK_XA_PROMOTABLE, + PCMK_XA_PROMOTED_MAX, PCMK_XA_PROMOTED_ONLY, PCMK_XA_PROVIDER, + PCMK_XA_QUEUED, PCMK_XA_QUEUE_TIME, PCMK_XA_QUORUM, PCMK_XA_RANGE, + PCMK_XA_RC, PCMK_XA_RC_TEXT, PCMK_XA_REASON, PCMK_XA_REFERENCE, + PCMK_XA_RELOADABLE, PCMK_XA_REMAIN_STOPPED, PCMK_XA_REMOTE_CLEAR_PORT, + PCMK_XA_REMOTE_NODE, PCMK_XA_REMOTE_TLS_PORT, PCMK_XA_REPLICAS, + PCMK_XA_REPLICAS_PER_HOST, PCMK_XA_REQUEST, PCMK_XA_REQUIRE_ALL, + PCMK_XA_RESOURCE, PCMK_XA_RESOURCES_RUNNING, PCMK_XA_RESOURCE_AGENT, + PCMK_XA_RESOURCE_DISCOVERY, PCMK_XA_RESULT, PCMK_XA_ROLE, PCMK_XA_RSC, + PCMK_XA_RSC_PATTERN, PCMK_XA_RSC_ROLE, PCMK_XA_RULE_ID, PCMK_XA_RUNNING, + PCMK_XA_RUNNING_ON, PCMK_XA_RUN_COMMAND, PCMK_XA_SCOPE, PCMK_XA_SCORE, + PCMK_XA_SCORE_ATTRIBUTE, PCMK_XA_SECONDS, PCMK_XA_SEQUENTIAL, + PCMK_XA_SHUTDOWN, PCMK_XA_SOURCE, PCMK_XA_SOURCE_DIR, + PCMK_XA_SOURCE_DIR_ROOT, PCMK_XA_SPEC, PCMK_XA_STANDARD, PCMK_XA_STANDBY, + PCMK_XA_STANDBY_ONFAIL, PCMK_XA_START, PCMK_XA_STATE, PCMK_XA_STATUS, + PCMK_XA_STONITH_ENABLED, PCMK_XA_STONITH_TIMEOUT_MS, + PCMK_XA_STOP_ALL_RESOURCES, PCMK_XA_SYMMETRICAL, + PCMK_XA_SYMMETRIC_CLUSTER, PCMK_XA_SYS_FROM, PCMK_XA_TAG, PCMK_XA_TARGET, + PCMK_XA_TARGET_ATTRIBUTE, PCMK_XA_TARGET_DIR, PCMK_XA_TARGET_PATTERN, + PCMK_XA_TARGET_ROLE, PCMK_XA_TARGET_VALUE, PCMK_XA_TASK, PCMK_XA_TEMPLATE, + PCMK_XA_THEN, PCMK_XA_THEN_ACTION, PCMK_XA_TICKET, PCMK_XA_TIME, + PCMK_XA_TYPE, PCMK_XA_UNAME, PCMK_XA_UNCLEAN, PCMK_XA_UNHEALTHY, + PCMK_XA_UNIQUE, PCMK_XA_UNMANAGED, PCMK_XA_UPDATE_CLIENT, + PCMK_XA_UPDATE_ORIGIN, PCMK_XA_UPDATE_USER, PCMK_XA_USER, PCMK_XA_VALID, + PCMK_XA_VALIDATE_WITH, PCMK_XA_VALUE, PCMK_XA_VALUE_SOURCE, + PCMK_XA_VERSION, PCMK_XA_WATCHDOG, PCMK_XA_WEEKDAYS, PCMK_XA_WEEKS, + PCMK_XA_WEEKYEARS, PCMK_XA_WEIGHT, PCMK_XA_WHEN, PCMK_XA_WITH_QUORUM, + PCMK_XA_WITH_RSC, PCMK_XA_WITH_RSC_ROLE, PCMK_XA_XPATH, PCMK_XA_YEARDAYS, + PCMK_XA_YEARS, PCMK_XE_ACLS, PCMK_XE_ACL_GROUP, PCMK_XE_ACL_PERMISSION, + PCMK_XE_ACL_ROLE, PCMK_XE_ACL_TARGET, PCMK_XE_ACTION, PCMK_XE_ACTIONS, + PCMK_XE_AGENT, PCMK_XE_AGENTS, PCMK_XE_AGENT_STATUS, PCMK_XE_ALERT, + PCMK_XE_ALERTS, PCMK_XE_ALLOCATIONS, PCMK_XE_ALLOCATIONS_UTILIZATIONS, + PCMK_XE_ATTRIBUTE, PCMK_XE_BAN, PCMK_XE_BANS, PCMK_XE_BUNDLE, + PCMK_XE_CAPACITY, PCMK_XE_CHANGE, PCMK_XE_CHANGE_ATTR, + PCMK_XE_CHANGE_LIST, PCMK_XE_CHANGE_RESULT, PCMK_XE_CHECK, PCMK_XE_CIB, + PCMK_XE_CLONE, PCMK_XE_CLUSTER_ACTION, PCMK_XE_CLUSTER_INFO, + PCMK_XE_CLUSTER_OPTIONS, PCMK_XE_CLUSTER_PROPERTY_SET, + PCMK_XE_CLUSTER_STATUS, PCMK_XE_COMMAND, PCMK_XE_CONFIGURATION, + PCMK_XE_CONSTRAINTS, PCMK_XE_CONTENT, PCMK_XE_CRM_CONFIG, PCMK_XE_CRM_MON, + PCMK_XE_CRM_MON_DISCONNECTED, PCMK_XE_CURRENT_DC, PCMK_XE_DATE_SPEC, + PCMK_XE_DC, PCMK_XE_DEPRECATED, PCMK_XE_DIFF, PCMK_XE_DIGEST, + PCMK_XE_DIGESTS, PCMK_XE_DOCKER, PCMK_XE_DURATION, PCMK_XE_ERROR, + PCMK_XE_ERRORS, PCMK_XE_EXPRESSION, PCMK_XE_FAILURE, PCMK_XE_FAILURES, + PCMK_XE_FEATURE, PCMK_XE_FEATURES, PCMK_XE_FENCE_EVENT, + PCMK_XE_FENCE_HISTORY, PCMK_XE_FENCING_ACTION, PCMK_XE_FENCING_LEVEL, + PCMK_XE_FENCING_TOPOLOGY, PCMK_XE_GROUP, PCMK_XE_INJECT_ATTR, + PCMK_XE_INJECT_SPEC, PCMK_XE_INSTANCE_ATTRIBUTES, PCMK_XE_INSTRUCTION, + PCMK_XE_ITEM, PCMK_XE_LAST_CHANGE, PCMK_XE_LAST_FENCED, + PCMK_XE_LAST_UPDATE, PCMK_XE_LIST, PCMK_XE_LONGDESC, PCMK_XE_METADATA, + PCMK_XE_META_ATTRIBUTES, PCMK_XE_MODIFICATIONS, PCMK_XE_MODIFY_NODE, + PCMK_XE_MODIFY_TICKET, PCMK_XE_NETWORK, PCMK_XE_NODE, PCMK_XE_NODES, + PCMK_XE_NODES_CONFIGURED, PCMK_XE_NODE_ACTION, PCMK_XE_NODE_ATTRIBUTES, + PCMK_XE_NODE_HISTORY, PCMK_XE_NODE_INFO, PCMK_XE_NODE_WEIGHT, + PCMK_XE_NVPAIR, PCMK_XE_OBJ_REF, PCMK_XE_OP, PCMK_XE_OPERATION, + PCMK_XE_OPERATIONS, PCMK_XE_OPERATION_HISTORY, PCMK_XE_OPTION, + PCMK_XE_OP_DEFAULTS, PCMK_XE_OUTPUT, PCMK_XE_OVERRIDE, PCMK_XE_OVERRIDES, + PCMK_XE_PACEMAKERD, PCMK_XE_PACEMAKER_RESULT, PCMK_XE_PARAMETER, + PCMK_XE_PARAMETERS, PCMK_XE_PODMAN, PCMK_XE_PORT_MAPPING, + PCMK_XE_POSITION, PCMK_XE_PRIMITIVE, PCMK_XE_PROMOTION_SCORE, + PCMK_XE_PROVIDER, PCMK_XE_PROVIDERS, PCMK_XE_PSEUDO_ACTION, + PCMK_XE_REASON, PCMK_XE_RECIPIENT, PCMK_XE_REPLICA, PCMK_XE_RESOURCE, + PCMK_XE_RESOURCES, PCMK_XE_RESOURCES_CONFIGURED, PCMK_XE_RESOURCE_AGENT, + PCMK_XE_RESOURCE_AGENT_ACTION, PCMK_XE_RESOURCE_CONFIG, + PCMK_XE_RESOURCE_HISTORY, PCMK_XE_RESOURCE_REF, PCMK_XE_RESOURCE_SET, + PCMK_XE_RESULT_CODE, PCMK_XE_REVISED_CLUSTER_STATUS, + PCMK_XE_ROLE, PCMK_XE_RSC_ACTION, PCMK_XE_RSC_COLOCATION, + PCMK_XE_RSC_DEFAULTS, PCMK_XE_RSC_LOCATION, PCMK_XE_RSC_ORDER, + PCMK_XE_RSC_TICKET, PCMK_XE_RULE, PCMK_XE_RULE_CHECK, PCMK_XE_SELECT, + PCMK_XE_SELECT_ATTRIBUTES, PCMK_XE_SELECT_FENCING, PCMK_XE_SELECT_NODES, + PCMK_XE_SELECT_RESOURCES, PCMK_XE_SHADOW, PCMK_XE_SHORTDESC, + PCMK_XE_SOURCE, PCMK_XE_SPECIAL, PCMK_XE_STACK, PCMK_XE_STATUS, + PCMK_XE_STORAGE, PCMK_XE_STORAGE_MAPPING, PCMK_XE_SUMMARY, PCMK_XE_TAG, + PCMK_XE_TAGS, PCMK_XE_TARGET, PCMK_XE_TEMPLATE, PCMK_XE_TICKET, + PCMK_XE_TICKETS, PCMK_XE_TIMING, PCMK_XE_TIMINGS, PCMK_XE_TRANSITION, + PCMK_XE_UTILIZATION, PCMK_XE_UTILIZATIONS, PCMK_XE_VALIDATE, + PCMK_XE_VERSION, PCMK_XE_XML, PCMK_XE_XML_PATCHSET, and + XML_CIB_TAG_ALERT_ATTRIBUTES + + libcrmcommon: add functions pcmk_action_text(), pcmk_find_node(), + pcmk_foreach_active_resource(), pcmk_get_dc(), pcmk_parse_interval_spec(), + pcmk_get_no_quorum_policy(), pcmk_has_quorum(), + pcmk_node_is_clean(), pcmk_update_configured_schema(), + pcmk_node_is_in_maintenance(), pcmk_node_is_online(), + pcmk_node_is_pending(), pcmk_node_is_shutting_down(), pcmk_on_fail_text(), + pcmk_parse_action(), pcmk_parse_role(), pcmk_resource_id(), + pcmk_resource_is_managed(), pcmk_role_text(), and pcmk_set_scheduler_cib() + + libcrmcommon: add type pcmk_rule_input_t + + libcrmcommon: deprecate globals crm_log_level, crm_trace_nonlog, + was_processing_error, and was_processing_warning + + libcrmcommon: deprecate functions add_message_xml(), add_node_copy(), + can_prune_leaf(), cli_config_update(), copy_in_properties(), copy_xml(), + create_hello_message(), pcmk_parse_action(), create_reply(), + create_reply_adv(), create_request(), create_request_adv(), + create_xml_node(), crm_map_element_name(), crm_next_same_xml(), + crm_parse_interval_spec(), crm_xml_escape(), diff_xml_object(), + dump_xml_formatted(), dump_xml_formatted_with_text(), + dump_xml_unformatted(), expand_plus_plus(), filename2xml(), + find_xml_children(), find_xml_node(), first_named_child(), + fix_plus_plus_recursive(), get_message_xml(), get_schema_name(), + get_schema_version(), get_xpath_object_relative(), ID(), + pcmk_action_text(), pcmk_create_html_node(), pcmk_create_xml_text_node(), + pcmk_hostname(), pcmk_on_fail_text(), purge_diff_markers(), + replace_xml_child(), stdin2xml(), string2xml(), subtract_xml_object(), + update_validation(), update_xml_child(), validate_xml(), + validate_xml_verbose(), write_xml_fd(), write_xml_file(), + xml_latest_schema(), and xml_remove_prop() + + libcrmcommon: deprecate constants CIB_OPTIONS_FIRST, CRM_INFINITY_S, + CRM_MINUS_INFINITY_S, CRM_OP_LOCAL_SHUTDOWN, CRM_PLUS_INFINITY_S, + CRM_SCORE_INFINITY, F_CLIENTNAME, F_CRM_DATA, F_CRM_DC_LEAVING, + F_CRM_ELECTION_AGE_S, F_CRM_ELECTION_AGE_US, F_CRM_ELECTION_ID, + F_CRM_ELECTION_OWNER, F_CRM_HOST_FROM, F_CRM_HOST_TO, F_CRM_JOIN_ID, + F_CRM_MSG_TYPE, F_CRM_ORIGIN, F_CRM_REFERENCE, F_CRM_SYS_FROM, + F_CRM_SYS_TO, F_CRM_TASK, F_CRM_TGRAPH, F_CRM_TGRAPH_INPUT, + F_CRM_THROTTLE_MAX, F_CRM_THROTTLE_MODE, F_CRM_USER, F_CRM_VERSION, + F_ORIG, F_SEQ, F_SUBTYPE, F_TYPE, F_XML_TAGNAME, INFINITY, INFINITY_S, + MINUS_INFINITY_S, OFFLINESTATUS, ONLINESTATUS, + PCMK_XA_PROMOTED_MAX_LEGACY, PCMK_XA_PROMOTED_NODE_MAX_LEGACY, + PCMK_XA_TARGET_PATTERN, PCMK_XA_UNAME, PCMK_XE_PROMOTABLE_LEGACY, + SUPPORT_UPSTART, T_ATTRD, T_CRM, XML_ACL_ATTR_ATTRIBUTE, + XML_ACL_ATTR_KIND, XML_ACL_ATTR_REF, XML_ACL_ATTR_REFv1, XML_ACL_ATTR_TAG, + XML_ACL_ATTR_TAGv1, XML_ACL_ATTR_XPATH, XML_ACL_TAG_DENY, + XML_ACL_TAG_GROUP, XML_ACL_TAG_PERMISSION, XML_ACL_TAG_READ, + XML_ACL_TAG_ROLE, XML_ACL_TAG_ROLE_REF, XML_ACL_TAG_ROLE_REFv1, + XML_ACL_TAG_USER, XML_ACL_TAG_USERv1, XML_ACL_TAG_WRITE, + XML_AGENT_ATTR_CLASS, XML_AGENT_ATTR_PROVIDER, XML_ALERT_ATTR_PATH, + XML_ALERT_ATTR_REC_VALUE, XML_ALERT_ATTR_TIMEOUT, + XML_ALERT_ATTR_TSTAMP_FORMAT, XML_ATTR_CRM_VERSION, XML_ATTR_DC_UUID, + XML_ATTR_DESC, XML_ATTR_DIGEST, XML_ATTR_GENERATION, + XML_ATTR_GENERATION_ADMIN, XML_ATTR_HAVE_QUORUM, XML_ATTR_HAVE_WATCHDOG, + XML_ATTR_ID, XML_ATTR_IDREF, XML_ATTR_ID_LONG, XML_ATTR_NAME, + XML_ATTR_NUMUPDATES, XML_ATTR_OP, XML_ATTR_ORIGIN, XML_ATTR_QUORUM_PANIC, + XML_ATTR_REFERENCE, XML_ATTR_REQUEST, XML_ATTR_RESPONSE, + XML_ATTR_STONITH_DEVICES, XML_ATTR_STONITH_INDEX, XML_ATTR_STONITH_TARGET, + XML_ATTR_STONITH_TARGET_ATTRIBUTE, XML_ATTR_STONITH_TARGET_VALUE, + XML_ATTR_TE_NOWAIT, XML_ATTR_TE_TARGET_RC, XML_ATTR_TIMEOUT, + XML_ATTR_TRANSITION_KEY, XML_ATTR_TRANSITION_MAGIC, XML_ATTR_TSTAMP, + XML_ATTR_TYPE, XML_ATTR_UPDATE_CLIENT, XML_ATTR_UPDATE_ORIGIN, + XML_ATTR_UPDATE_USER, XML_ATTR_VALIDATION, XML_ATTR_VERSION, + XML_BOOLEAN_FALSE, XML_BOOLEAN_NO, XML_BOOLEAN_TRUE, XML_BOOLEAN_YES, + XML_CIB_ATTR_PRIORITY, XML_CIB_ATTR_SHUTDOWN, XML_CIB_ATTR_WRITTEN, + XML_CIB_TAG_ACLS, XML_CIB_TAG_ALERT, XML_CIB_TAG_ALERTS, + XML_CIB_TAG_ALERT_ATTR, XML_CIB_TAG_ALERT_FENCING, + XML_CIB_TAG_ALERT_NODES, XML_CIB_TAG_ALERT_RECIPIENT, + XML_CIB_TAG_ALERT_RESOURCES, XML_CIB_TAG_ALERT_SELECT, + XML_CIB_TAG_CONFIGURATION, XML_CIB_TAG_CONSTRAINTS, XML_CIB_TAG_CONTAINER, + XML_CIB_TAG_CRMCONFIG, XML_CIB_TAG_GENERATION_TUPPLE, XML_CIB_TAG_GROUP, + XML_CIB_TAG_INCARNATION, XML_CIB_TAG_LRM, XML_CIB_TAG_NODE, + XML_CIB_TAG_NODES, XML_CIB_TAG_NVPAIR, XML_CIB_TAG_OBJ_REF, + XML_CIB_TAG_OPCONFIG, XML_CIB_TAG_PROPSET, XML_CIB_TAG_RESOURCE, + XML_CIB_TAG_RESOURCES, XML_CIB_TAG_RSCCONFIG, XML_CIB_TAG_RSC_TEMPLATE, + XML_CIB_TAG_SECTION_ALL, XML_CIB_TAG_STATE, XML_CIB_TAG_STATUS, + XML_CIB_TAG_TAG, XML_CIB_TAG_TAGS, XML_CIB_TAG_TICKETS, + XML_CIB_TAG_TICKET_STATE, XML_COLOC_ATTR_INFLUENCE, + XML_COLOC_ATTR_NODE_ATTR, XML_COLOC_ATTR_SOURCE, + XML_COLOC_ATTR_SOURCE_INSTANCE, XML_COLOC_ATTR_SOURCE_ROLE, + XML_COLOC_ATTR_TARGET, XML_COLOC_ATTR_TARGET_INSTANCE, + XML_COLOC_ATTR_TARGET_ROLE, XML_CONFIG_ATTR_DC_DEADTIME, + XML_CONFIG_ATTR_ELECTION_FAIL, XML_CONFIG_ATTR_FENCE_REACTION, + XML_CONFIG_ATTR_FORCE_QUIT, XML_CONFIG_ATTR_NODE_PENDING_TIMEOUT, + XML_CONFIG_ATTR_PRIORITY_FENCING_DELAY, XML_CONFIG_ATTR_RECHECK, + XML_CONFIG_ATTR_SHUTDOWN_LOCK, XML_CONFIG_ATTR_SHUTDOWN_LOCK_LIMIT, + XML_CONS_ATTR_SYMMETRICAL, XML_CONS_TAG_RSC_DEPEND, + XML_CONS_TAG_RSC_LOCATION, XML_CONS_TAG_RSC_ORDER, XML_CONS_TAG_RSC_SET, + XML_CONS_TAG_RSC_TICKET, XML_CRM_TAG_PING, XML_DIFF_ATTR, XML_DIFF_CHANGE, + XML_DIFF_LIST, XML_DIFF_MARKER, XML_DIFF_OP, XML_DIFF_PATH, + XML_DIFF_POSITION, XML_DIFF_RESULT, XML_DIFF_VERSION, XML_DIFF_VSOURCE, + XML_DIFF_VTARGET, XML_EXPR_ATTR_ATTRIBUTE, XML_EXPR_ATTR_OPERATION, + XML_EXPR_ATTR_TYPE, XML_EXPR_ATTR_VALUE, XML_EXPR_ATTR_VALUE_SOURCE, + XML_FAILCIB_ATTR_ID, XML_FAILCIB_ATTR_OBJTYPE, XML_FAILCIB_ATTR_OP, + XML_FAILCIB_ATTR_REASON, XML_FAIL_TAG_CIB, XML_GRAPH_TAG_CRM_EVENT, + XML_GRAPH_TAG_DOWNED, XML_GRAPH_TAG_MAINTENANCE, + XML_GRAPH_TAG_PSEUDO_EVENT, XML_GRAPH_TAG_RSC_OP, + XML_LOCATION_ATTR_DISCOVERY, XML_LOC_ATTR_SOURCE, + XML_LOC_ATTR_SOURCE_PATTERN, XML_LRM_ATTR_CALLID, + XML_LRM_ATTR_EXIT_REASON, XML_LRM_ATTR_INTERVAL, XML_LRM_ATTR_INTERVAL_MS, + XML_LRM_ATTR_MIGRATE_SOURCE, XML_LRM_ATTR_MIGRATE_TARGET, + XML_LRM_ATTR_OPSTATUS, XML_LRM_ATTR_OP_DIGEST, XML_LRM_ATTR_OP_RESTART, + XML_LRM_ATTR_OP_SECURE, XML_LRM_ATTR_RC, XML_LRM_ATTR_RESTART_DIGEST, + XML_LRM_ATTR_ROUTER_NODE, XML_LRM_ATTR_RSCID, XML_LRM_ATTR_SECURE_DIGEST, + XML_LRM_ATTR_TARGET, XML_LRM_ATTR_TARGET_UUID, XML_LRM_ATTR_TASK, + XML_LRM_ATTR_TASK_KEY, XML_LRM_TAG_RESOURCE, XML_LRM_TAG_RESOURCES, + XML_LRM_TAG_RSC_OP, XML_NODE_ATTR_RSC_DISCOVERY, XML_NODE_IS_FENCED, + XML_NODE_IS_MAINTENANCE, XML_NODE_IS_REMOTE, XML_NVPAIR_ATTR_NAME, + XML_NVPAIR_ATTR_VALUE, XML_OP_ATTR_ALLOW_MIGRATE, XML_OP_ATTR_DIGESTS_ALL, + XML_OP_ATTR_DIGESTS_SECURE, XML_OP_ATTR_INTERVAL_ORIGIN, + XML_OP_ATTR_ON_FAIL, XML_OP_ATTR_PENDING, XML_OP_ATTR_START_DELAY, + XML_ORDER_ATTR_FIRST, XML_ORDER_ATTR_FIRST_ACTION, XML_ORDER_ATTR_KIND, + XML_ORDER_ATTR_THEN, XML_ORDER_ATTR_THEN_ACTION, XML_PING_ATTR_CRMDSTATE, + XML_PING_ATTR_PACEMAKERDSTATE, XML_PING_ATTR_PACEMAKERDSTATE_INIT, + XML_PING_ATTR_PACEMAKERDSTATE_REMOTE, + XML_PING_ATTR_PACEMAKERDSTATE_RUNNING, + XML_PING_ATTR_PACEMAKERDSTATE_SHUTDOWNCOMPLETE, + XML_PING_ATTR_PACEMAKERDSTATE_SHUTTINGDOWN, + XML_PING_ATTR_PACEMAKERDSTATE_STARTINGDAEMONS, + XML_PING_ATTR_PACEMAKERDSTATE_WAITPING, XML_PING_ATTR_STATUS, + XML_PING_ATTR_SYSFROM, XML_REMOTE_ATTR_RECONNECT_INTERVAL, + XML_RSC_ATTR_CLEAR_INTERVAL, XML_RSC_ATTR_CLEAR_OP, + XML_RSC_ATTR_CONTAINER, XML_RSC_ATTR_CRITICAL, XML_RSC_ATTR_INCARNATION, + XML_RSC_ATTR_INTERLEAVE, XML_RSC_ATTR_INTERNAL_RSC, + XML_RSC_ATTR_MAINTENANCE, XML_RSC_ATTR_MANAGED, XML_RSC_ATTR_MULTIPLE, + XML_RSC_ATTR_NOTIFY, XML_RSC_ATTR_ORDERED, XML_RSC_ATTR_PROMOTABLE, + XML_RSC_ATTR_REMOTE_NODE, XML_RSC_ATTR_REMOTE_RA_ADDR, + XML_RSC_ATTR_REMOTE_RA_PORT, XML_RSC_ATTR_REMOTE_RA_SERVER, + XML_RSC_ATTR_REQUIRES, XML_RSC_ATTR_RESTART, XML_RSC_ATTR_STICKINESS, + XML_RSC_ATTR_TARGET, XML_RSC_ATTR_TARGET_ROLE, XML_RSC_ATTR_UNIQUE, + XML_RSC_OP_LAST_CHANGE, XML_RSC_OP_T_EXEC, XML_RSC_OP_T_QUEUE, + XML_RULE_ATTR_BOOLEAN_OP, XML_RULE_ATTR_ROLE, XML_RULE_ATTR_SCORE, + XML_RULE_ATTR_SCORE_ATTRIBUTE, XML_TAG_ATTRS, XML_TAG_ATTR_SETS, + XML_TAG_CIB, XML_TAG_DIFF, XML_TAG_EXPRESSION, XML_TAG_FAILED, + XML_TAG_FENCING_LEVEL, XML_TAG_FENCING_TOPOLOGY, XML_TAG_GRAPH, + XML_TAG_META_SETS, XML_TAG_OPTIONS, XML_TAG_PARAM, XML_TAG_PARAMS, + XML_TAG_RESOURCE_REF, XML_TAG_RULE, XML_TAG_TRANSIENT_NODEATTRS, + XML_TAG_UTILIZATION, XML_TICKET_ATTR_LOSS_POLICY, and + XML_TICKET_ATTR_TICKET + + libcrmcommon: deprecate direct access to all members of pcmk_scheduler_t, + pcmk_tag_t, and pcmk_ticket_t + + libcrmcommon: deprecate pcmk_rsc_methods_t, pcmk_assignment_methods_t, + struct pe_action_s, struct pe_resource_s, struct resource_alloc_functions_s, + struct resource_object_functions_s, struct pe_node_s, and + struct pe_node_shared_s, including all their members + + libcrmcommon: deprecate enums action_fail_response, action_tasks, + expression_type, node_type, pcmk_rsc_flags, pcmk_scheduler_flags, + pe_action_flags, pe_discover_e, pe_obj_types, rsc_recovery_type, and + rsc_start_requirement, including all their values + + liblrmd: deprecate constants F_LRMD_ALERT, F_LRMD_ALERT_ID, + F_LRMD_ALERT_PATH, F_LRMD_CALLBACK_TOKEN, F_LRMD_CALLDATA, F_LRMD_CALLID, + F_LRMD_CALLOPTS, F_LRMD_CLASS, F_LRMD_CLIENTID, F_LRMD_CLIENTNAME, + F_LRMD_EXEC_RC, F_LRMD_IPC_CLIENT, F_LRMD_IPC_IPC_SERVER, F_LRMD_IPC_MSG, + F_LRMD_IPC_MSG_FLAGS, F_LRMD_IPC_MSG_ID, F_LRMD_IPC_OP, F_LRMD_IPC_USER, + F_LRMD_IS_IPC_PROVIDER, F_LRMD_OPERATION, F_LRMD_OP_STATUS, F_LRMD_ORIGIN, + F_LRMD_PROTOCOL_VERSION, F_LRMD_PROVIDER, F_LRMD_RC, F_LRMD_REMOTE_MSG_ID, + F_LRMD_REMOTE_MSG_TYPE, F_LRMD_RSC, F_LRMD_RSC_ACTION, F_LRMD_RSC_DELETED, + F_LRMD_RSC_EXEC_TIME, F_LRMD_RSC_EXIT_REASON, F_LRMD_RSC_ID, + F_LRMD_RSC_INTERVAL, F_LRMD_RSC_OUTPUT, F_LRMD_RSC_QUEUE_TIME, + F_LRMD_RSC_RCCHANGE_TIME, F_LRMD_RSC_RUN_TIME, F_LRMD_RSC_START_DELAY, + F_LRMD_RSC_USERDATA_STR, F_LRMD_TIMEOUT, F_LRMD_TYPE, F_LRMD_WATCHDOG, + T_LRMD, T_LRMD_IPC_PROXY, T_LRMD_NOTIFY, T_LRMD_REPLY, and T_LRMD_RSC_OP + + libpacemaker: distribute pacemaker.h header to allow high-level API usage + + libpe_rules: deprecate functions find_expression_type(), + pe_evaluate_rules(), pe_eval_expr(), pe_eval_rules(), pe_eval_subexpr(), + pe_expand_re_matches(), pe_test_expression(), and pe_test_rule() + + libpe_rules,libpe_status: move enum expression_type and globals + was_processing_error and was_processing_warning to libcrmcommon + + libpe_rules,libpe_status: deprecate role member of pe_op_eval_data + + libpe_rules,libpe_status: deprecate functions text2task(), fail2text(), + recovery2text(), role2text(), task2text(), and text2role() + + libpe_status: deprecate functions pe_find_node(), pe_pref(), + pe_rsc_is_anon_clone(), pe_rsc_is_bundled(), pe_rsc_is_clone(), + pe_rsc_is_unique_clone(), + + libpe_status: deprecate global resource_class_functions + + libstonithd: deprecate constants T_STONITH_NOTIFY_DISCONNECT, + T_STONITH_NOTIFY_FENCE, T_STONITH_NOTIFY_HISTORY, and + T_STONITH_NOTIFY_HISTORY_SYNCED + * Tue Dec 19 2023 Ken Gaillot Pacemaker-2.1.7 - 1388 commits with 358 files changed, 23771 insertions(+), 17219 deletions(-) From a2db1c020f0338b38960d06f24471add59915c2b Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 15 May 2024 10:44:22 -0500 Subject: [PATCH 002/364] Refactor: libcrmcommon: drop unnecessary arguments to parse_int() The lone caller always passed field_width 10 and upper_bound 0. Also, use bool instead of gboolean, drop the unnecessary "intermediate" variable, and use a switch where appropriate. This allows the code to simplify a bit and highlights problems with it. In particular, the algorithm for parsing fractions was wildly wrong and always ended with a result of 0. Rather than fix it, just leave the result 0 for now. --- lib/common/iso8601.c | 69 ++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/lib/common/iso8601.c b/lib/common/iso8601.c index d24f2688e1c..0cbd7da8d3c 100644 --- a/lib/common/iso8601.c +++ b/lib/common/iso8601.c @@ -1027,53 +1027,54 @@ parse_date(const char *date_str) } // Parse an ISO 8601 numeric value and return number of characters consumed -// @TODO This cannot handle >INT_MAX int values -// @TODO Fractions appear to be not working -// @TODO Error out on invalid specifications static int -parse_int(const char *str, int field_width, int upper_bound, int *result) +parse_int(const char *str, int *result) { - int lpc = 0; - int offset = 0; - int intermediate = 0; - gboolean fraction = FALSE; - gboolean negate = FALSE; + unsigned int lpc; + int offset = (str[0] == 'T')? 1 : 0; + bool fraction = false; + bool negate = false; *result = 0; if (*str == '\0') { return 0; } - if (str[offset] == 'T') { - offset++; - } + // @TODO This cannot handle combinations of these characters + switch (str[offset]) { + case '.': + case ',': + fraction = true; + offset++; + break; + + case '-': + negate = true; + offset++; + break; - if (str[offset] == '.' || str[offset] == ',') { - fraction = TRUE; - field_width = -1; - offset++; - } else if (str[offset] == '-') { - negate = TRUE; - offset++; - } else if (str[offset] == '+' || str[offset] == ':') { - offset++; + case '+': + case ':': + offset++; + break; + + default: + break; } - for (; (fraction || lpc < field_width) && isdigit((int)str[offset]); lpc++) { + for (lpc = 0; (fraction || (lpc < 10)) && isdigit(str[offset]); lpc++) { + const int digit = str[offset++] - '0'; + if (fraction) { - intermediate = (str[offset] - '0') / (10 ^ lpc); + /* @TODO The previous code here had bugs that always yielded a + * result of 0. Since it never worked, it has been removed rather + * than fixed. Effort would be better spent replacing our ISO 8601 + * code with GDateTime. + */ } else { - *result *= 10; - intermediate = str[offset] - '0'; + // @TODO lpc == 9 could yield a 32-bit integer overflow + *result = *result * 10 + digit; } - *result += intermediate; - offset++; - } - if (fraction) { - *result = (int)(*result * upper_bound); - - } else if (upper_bound > 0 && *result > upper_bound) { - *result = upper_bound; } if (negate) { *result = 0 - *result; @@ -1136,7 +1137,7 @@ crm_time_parse_duration(const char *period_s) } // An integer must be next - rc = parse_int(current, 10, 0, &an_int); + rc = parse_int(current, &an_int); if (rc == 0) { crm_err("'%s' is not a valid ISO 8601 time duration " "because no integer at '%s'", period_s, current); From 80740b2c820abf3c1e4bacaecc790c82f433ccb3 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 15 May 2024 11:26:11 -0500 Subject: [PATCH 003/364] Fix: libcrmcommon: avoid possible buffer overflow in parse_date() Thanks to Adam Korczynski and the OSS-Fuzz project for finding and reporting the issue and suggesting the fix. --- lib/common/iso8601.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/common/iso8601.c b/lib/common/iso8601.c index 0cbd7da8d3c..7db00ade83b 100644 --- a/lib/common/iso8601.c +++ b/lib/common/iso8601.c @@ -888,7 +888,8 @@ parse_date(const char *date_str) goto invalid; } - if ((date_str[0] == 'T') || (date_str[2] == ':')) { + if ((date_str[0] == 'T') + || ((strlen(date_str) > 2) && (date_str[2] == ':'))) { /* Just a time supplied - Infer current date */ dt = crm_time_new(NULL); if (date_str[0] == 'T') { From 57b2055ec862bbd398ee8004c9d611b3d240b12a Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 20 May 2024 11:21:12 -0500 Subject: [PATCH 004/364] Test: libcrmcommon: add unit tests for pcmk__time_format_hr() This does not include a test for a format string ending with % and a number, because that does not currently work. --- lib/common/tests/iso8601/Makefile.am | 3 +- .../tests/iso8601/pcmk__time_format_hr_test.c | 109 ++++++++++++++++++ 2 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 lib/common/tests/iso8601/pcmk__time_format_hr_test.c diff --git a/lib/common/tests/iso8601/Makefile.am b/lib/common/tests/iso8601/Makefile.am index 581115a2d15..5135f4706be 100644 --- a/lib/common/tests/iso8601/Makefile.am +++ b/lib/common/tests/iso8601/Makefile.am @@ -13,6 +13,7 @@ include $(top_srcdir)/mk/unittest.mk # Add "_test" to the end of all test program names to simplify .gitignore. check_PROGRAMS = pcmk__add_time_from_xml_test \ pcmk__readable_interval_test \ - pcmk__set_time_if_earlier_test + pcmk__set_time_if_earlier_test \ + pcmk__time_format_hr_test TESTS = $(check_PROGRAMS) diff --git a/lib/common/tests/iso8601/pcmk__time_format_hr_test.c b/lib/common/tests/iso8601/pcmk__time_format_hr_test.c new file mode 100644 index 00000000000..c7b821bb2d0 --- /dev/null +++ b/lib/common/tests/iso8601/pcmk__time_format_hr_test.c @@ -0,0 +1,109 @@ +/* + * Copyright 2024 the Pacemaker project contributors + * + * The version control history for this file may have further details. + * + * This source code is licensed under the GNU General Public License version 2 + * or later (GPLv2+) WITHOUT ANY WARRANTY. + */ + +#include + +#include // NULL + +#include +#include + +#define TEST_TIME pcmk__time_hr_new("2024-01-02 03:04:05 +00:00") + +/*! + * \internal + * \brief Assert that pcmk__time_format_hr() produced expected result + * + * \param[in] format Time format string + * \param[in] expected Assertion succeeds if result matches this + * \param[in] alternate If this is not NULL, assertion may also succeed if + * result matches this + * + * \note This allows two possible results because different strftime() + * implementations handle certain format syntax differently. + */ +static void +assert_hr_format(const char *format, const char *expected, + const char *alternate) +{ + pcmk__time_hr_t *hr = TEST_TIME; + char *result = pcmk__time_format_hr(format, hr); + + pcmk__time_hr_free(hr); + + if (expected == NULL) { + assert_null(result); + return; + } + + assert_non_null(result); + + if (alternate == NULL) { + assert_string_equal(result, expected); + } else { + assert_true((strcmp(result, expected) == 0) + || (strcmp(result, alternate) == 0)); + } + + free(result); +} + +static void +null_format(void **state) +{ + assert_null(pcmk__time_format_hr(NULL, NULL)); + assert_hr_format(NULL, NULL, NULL); // for pcmk__time_format_hr(NULL, hr) +} + +static void +no_specifiers(void **state) +{ + assert_hr_format("no specifiers", "no specifiers", NULL); + assert_hr_format("this has a literal % in it", + "this has a literal % in it", + // *BSD strftime() strips single % + "this has a literal in it"); + assert_hr_format("this has a literal %01 in it", + "this has a literal %01 in it", + // *BSD strftime() strips %0 + "this has a literal 1 in it"); + assert_hr_format("%2 this starts and ends with %", + "%2 this starts and ends with %", + // *BSD strftime() strips % in front of nonzero number + "2 this starts and ends with %"); +} + +static void +without_nano(void **state) +{ + assert_hr_format("%H:%M %a %b %d", "03:04 Tue Jan 02", NULL); + assert_hr_format("%H:%M:%S", "03:04:05", NULL); + assert_hr_format("The time is %H:%M right now", + "The time is 03:04 right now", NULL); + assert_hr_format("%3S seconds", "005 seconds", + // *BSD strftime() doesn't support field widths + "3S seconds"); + + // strftime() treats %% as a literal % + assert_hr_format("%%H %%N", "%H %N", NULL); +} + +static void +with_nano(void **state) +{ + assert_hr_format("%H:%M:%S.%06N", "03:04:05.000000", NULL); + assert_hr_format("The time is %H:%M:%S.%06N right NOW", + "The time is 03:04:05.000000 right NOW", NULL); +} + +PCMK__UNIT_TEST(NULL, NULL, + cmocka_unit_test(null_format), + cmocka_unit_test(no_specifiers), + cmocka_unit_test(without_nano), + cmocka_unit_test(with_nano)) From 5b8e09910e55a967494d2ef3e54309e3ec951575 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 20 May 2024 10:54:11 -0500 Subject: [PATCH 005/364] Refactor: libcrmcommon: drop "fmt_len" variable in pcmk__time_format_hr() --- lib/common/iso8601.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/common/iso8601.c b/lib/common/iso8601.c index 7db00ade83b..089546630ca 100644 --- a/lib/common/iso8601.c +++ b/lib/common/iso8601.c @@ -1945,21 +1945,22 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) while ((format[scanned_pos]) != '\0') { mark_s = strchr(&format[scanned_pos], '%'); if (mark_s) { - int fmt_len = 1; - fmt_pos = mark_s - format; - while ((format[fmt_pos+fmt_len] != '\0') && - (format[fmt_pos+fmt_len] >= '0') && - (format[fmt_pos+fmt_len] <= '9')) { - fmt_len++; + + // Skip % and any field width + scanned_pos = fmt_pos + 1; + while (isdigit(format[scanned_pos])) { + scanned_pos++; } - scanned_pos = fmt_pos + fmt_len + 1; - if (format[fmt_pos+fmt_len] == 'N') { + + if (format[scanned_pos] == 'N') { + scanned_pos++; nano_digits = atoi(&format[fmt_pos+1]); nano_digits = (nano_digits > 6)?6:nano_digits; nano_digits = (nano_digits < 0)?0:nano_digits; sprintf(&nanofmt_s[1], ".%ds", nano_digits); } else { + scanned_pos++; if (format[scanned_pos] != '\0') { continue; } From a104fb4052e711970353e644292ab86847012eac Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 20 May 2024 10:59:45 -0500 Subject: [PATCH 006/364] Refactor: use switch in pcmk__time_format_hr() This will make planned changes easier --- lib/common/iso8601.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/lib/common/iso8601.c b/lib/common/iso8601.c index 089546630ca..9cede57b3f2 100644 --- a/lib/common/iso8601.c +++ b/lib/common/iso8601.c @@ -1953,18 +1953,23 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) scanned_pos++; } - if (format[scanned_pos] == 'N') { - scanned_pos++; - nano_digits = atoi(&format[fmt_pos+1]); - nano_digits = (nano_digits > 6)?6:nano_digits; - nano_digits = (nano_digits < 0)?0:nano_digits; - sprintf(&nanofmt_s[1], ".%ds", nano_digits); - } else { - scanned_pos++; - if (format[scanned_pos] != '\0') { - continue; - } - fmt_pos = scanned_pos; /* print till end */ + switch (format[scanned_pos]) { + case 'N': // %[width]N + scanned_pos++; + + // Parse field width + nano_digits = atoi(&format[fmt_pos + 1]); + nano_digits = QB_MAX(nano_digits, 0); + nano_digits = QB_MIN(nano_digits, 6); + sprintf(&nanofmt_s[1], ".%ds", nano_digits); + break; + + default: // Some other specifier + if (format[++scanned_pos] != '\0') { // More to parse + continue; + } + fmt_pos = scanned_pos; // Pass remaining string as-is + break; } } else { scanned_pos = strlen(format); From 7fd8e65b45f8c0f839b978c806ad16b505a1c936 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 20 May 2024 11:01:50 -0500 Subject: [PATCH 007/364] Refactor: libcrmcommon: clean up pcmk__time_format_hr() a bit Add comments including a doxygen block, scope variables more tightly where possible, move (shorter) NULL case first, and improve formatting. --- lib/common/iso8601.c | 46 +++++++++++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/lib/common/iso8601.c b/lib/common/iso8601.c index 9cede57b3f2..f977e9cb814 100644 --- a/lib/common/iso8601.c +++ b/lib/common/iso8601.c @@ -1916,36 +1916,53 @@ pcmk__time_hr_free(pcmk__time_hr_t * hr_dt) free(hr_dt); } +/*! + * \internal + * \brief Expand a date/time format string, including %N for nanoseconds + * + * \param[in] format Date/time format string as per strftime(3) with the + * addition of %N for nanoseconds + * \param[in] hr_dt Time value to format + * + * \return Newly allocated string with formatted string + */ char * pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) { #define DATE_LEN_MAX 128 - const char *mark_s = NULL; - int scanned_pos = 0; - int printed_pos = 0; - int fmt_pos = 0; + int scanned_pos = 0; // How many characters of format have been parsed + int printed_pos = 0; // How many characters of format have been processed size_t date_len = 0; - int nano_digits = 0; char nano_s[10] = { '\0', }; char date_s[DATE_LEN_MAX] = { '\0', }; char nanofmt_s[5] = "%"; - char *tmp_fmt_s = NULL; struct tm tm = { 0, }; crm_time_t dt = { 0, }; - if (!format) { + if (format == NULL) { return NULL; } pcmk__time_set_hr_dt(&dt, hr_dt); ha_get_tm_time(&tm, &dt); sprintf(nano_s, "%06d000", hr_dt->useconds); - while ((format[scanned_pos]) != '\0') { - mark_s = strchr(&format[scanned_pos], '%'); - if (mark_s) { - fmt_pos = mark_s - format; + while (format[scanned_pos] != '\0') { + int fmt_pos; // Index after last character to pass as-is + int nano_digits = 0; // Length of %N field width (if any) + char *tmp_fmt_s = NULL; + + // Look for next format specifier + const char *mark_s = strchr(&format[scanned_pos], '%'); + + if (mark_s == NULL) { + // No more specifiers, so pass remaining string to strftime() as-is + scanned_pos = strlen(format); + fmt_pos = scanned_pos; + + } else { + fmt_pos = mark_s - format; // Index of % // Skip % and any field width scanned_pos = fmt_pos + 1; @@ -1971,10 +1988,8 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) fmt_pos = scanned_pos; // Pass remaining string as-is break; } - } else { - scanned_pos = strlen(format); - fmt_pos = scanned_pos; /* print till end */ } + tmp_fmt_s = strndup(&format[printed_pos], fmt_pos - printed_pos); #ifdef HAVE_FORMAT_NONLITERAL #pragma GCC diagnostic push @@ -1997,11 +2012,10 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) #ifdef HAVE_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif - nano_digits = 0; } } - return (date_len == 0)?NULL:strdup(date_s); + return (date_len == 0)? NULL : pcmk__str_copy(date_s); #undef DATE_LEN_MAX } From 9b1e986f97ffe54739617a04ed5972b3b08af446 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 15 May 2024 12:19:52 -0500 Subject: [PATCH 008/364] Refactor: libcrmcommon: avoid a nonliteral format in pcmk__time_format_hr() --- lib/common/iso8601.c | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/lib/common/iso8601.c b/lib/common/iso8601.c index f977e9cb814..75d2d3bde7c 100644 --- a/lib/common/iso8601.c +++ b/lib/common/iso8601.c @@ -1936,7 +1936,6 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) char nano_s[10] = { '\0', }; char date_s[DATE_LEN_MAX] = { '\0', }; - char nanofmt_s[5] = "%"; struct tm tm = { 0, }; crm_time_t dt = { 0, }; @@ -1978,7 +1977,6 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) nano_digits = atoi(&format[fmt_pos + 1]); nano_digits = QB_MAX(nano_digits, 0); nano_digits = QB_MIN(nano_digits, 6); - sprintf(&nanofmt_s[1], ".%ds", nano_digits); break; default: // Some other specifier @@ -2002,16 +2000,9 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) #endif printed_pos = scanned_pos; free(tmp_fmt_s); - if (nano_digits) { -#ifdef HAVE_FORMAT_NONLITERAL -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wformat-nonliteral" -#endif + if (nano_digits != 0) { date_len += snprintf(&date_s[date_len], DATE_LEN_MAX - date_len, - nanofmt_s, nano_s); -#ifdef HAVE_FORMAT_NONLITERAL -#pragma GCC diagnostic pop -#endif + "%.*s", nano_digits, nano_s); } } From 6a6a34f452461235748b01c7b95ffb04428560d3 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 20 May 2024 12:48:18 -0500 Subject: [PATCH 009/364] Test: libcrmcommon: add convenience function for enabling unit test logging --- include/crm/common/unittest_internal.h | 2 ++ lib/common/unittest.c | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/include/crm/common/unittest_internal.h b/include/crm/common/unittest_internal.h index 565dcc9f42a..4e4fc8f8ec3 100644 --- a/include/crm/common/unittest_internal.h +++ b/include/crm/common/unittest_internal.h @@ -96,6 +96,8 @@ char *pcmk__cib_test_copy_cib(const char *in_file); */ void pcmk__cib_test_cleanup(char *out_path); +void pcmk__test_init_logging(const char *name, const char *filename); + /*! * \internal * \brief Assert that a statement aborts through CRM_ASSERT(). diff --git a/lib/common/unittest.c b/lib/common/unittest.c index 0e63915f7b7..6cbecf461ee 100644 --- a/lib/common/unittest.c +++ b/lib/common/unittest.c @@ -125,4 +125,23 @@ pcmk__cib_test_cleanup(char *out_path) unsetenv("CIB_file"); } +/*! + * \internal + * \brief Initialize logging for unit testing purposes + * + * \param[in] name What to use as system name for logging + * \param[in] filename If not NULL, enable debug logs to this file (intended + * for debugging during development rather than committed + * unit tests) + */ +void +pcmk__test_init_logging(const char *name, const char *filename) +{ + pcmk__cli_init_logging(name, 0); + if (filename != NULL) { + pcmk__add_logfile(filename); + set_crm_log_level(LOG_DEBUG); + } +} + // LCOV_EXCL_STOP From eab888d98ed01b9214f8b30de75b4f9328ce1a14 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 15 May 2024 12:23:41 -0500 Subject: [PATCH 010/364] Fix: libcrmcommon: avoid possible buffer overflow in pcmk__time_format_hr() Also add a unit test. Thanks to Adam Korczynski and the OSS-Fuzz project for finding and reporting the issue. --- lib/common/iso8601.c | 4 ++++ lib/common/tests/iso8601/pcmk__time_format_hr_test.c | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/lib/common/iso8601.c b/lib/common/iso8601.c index 75d2d3bde7c..078f682089f 100644 --- a/lib/common/iso8601.c +++ b/lib/common/iso8601.c @@ -1970,6 +1970,10 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) } switch (format[scanned_pos]) { + case '\0': // Literal % and possibly digits at end of string + fmt_pos = scanned_pos; // Pass remaining string as-is + break; + case 'N': // %[width]N scanned_pos++; diff --git a/lib/common/tests/iso8601/pcmk__time_format_hr_test.c b/lib/common/tests/iso8601/pcmk__time_format_hr_test.c index c7b821bb2d0..c4c9f7c65db 100644 --- a/lib/common/tests/iso8601/pcmk__time_format_hr_test.c +++ b/lib/common/tests/iso8601/pcmk__time_format_hr_test.c @@ -77,6 +77,13 @@ no_specifiers(void **state) "%2 this starts and ends with %", // *BSD strftime() strips % in front of nonzero number "2 this starts and ends with %"); + + /* strftime() treats % with a number (and no specifier) as a literal string + * to be formatted with a field width (undocumented and probably a bug ...) + */ + assert_hr_format("this ends with %10", "this ends with %10", + // *BSD strftime() strips % in front of nonzero number + "this ends with 10"); } static void From 988bf9961e91b30f3e1c37532e0d859ef02d6f4e Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Mon, 6 May 2024 03:22:00 -0700 Subject: [PATCH 011/364] Doc: tools: cibadmin incorrect example for score update Should use --score. Also change formatting of --score option documentation. It appeared correctly in help output, but the man page generation yielded ugly indentation. The new formatting looks worse (but passable) for --help output and looks better (previously unpassable) for man page. Signed-off-by: Reid Wahl --- tools/cibadmin.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tools/cibadmin.c b/tools/cibadmin.c index 9ac252d486d..bc30ac05564 100644 --- a/tools/cibadmin.c +++ b/tools/cibadmin.c @@ -391,23 +391,23 @@ static GOptionEntry addl_entries[] = { { "score", 0, G_OPTION_FLAG_NONE, G_OPTION_ARG_NONE, &options.score_update, "Treat new attribute values as atomic score updates where possible " - "(with --modify/-M)\n\n" + "(with --modify/-M).\n" INDENT "This currently happens by default and cannot be disabled, but\n" INDENT "this default behavior is deprecated and will be removed in a\n" - INDENT "future release. Set this flag if this behavior is desired.\n\n" + INDENT "future release. Set this flag if this behavior is desired.\n" INDENT "This option takes effect when updating XML attributes. For an\n" INDENT "attribute named \"name\", if the new value is \"name++\" or\n" INDENT "\"name+=X\" for some score X, the new value is set as follows:\n" - INDENT " * If attribute \"name\" is not already set to some value in\n" - INDENT " the element being updated, the new value is set as a literal\n" - INDENT " string.\n" - INDENT " * If the new value is \"name++\", then the attribute is set to\n" - INDENT " its existing value (parsed as a score) plus 1.\n" - INDENT " * If the new value is \"name+=X\" for some score X, then the\n" - INDENT " attribute is set to its existing value plus X, where the\n" - INDENT " existing value and X are parsed and added as scores.\n\n" + INDENT "If attribute \"name\" is not already set to some value in\n" + INDENT "the element being updated, the new value is set as a literal\n" + INDENT "string.\n" + INDENT "If the new value is \"name++\", then the attribute is set to \n" + INDENT "its existing value (parsed as a score) plus 1.\n" + INDENT "If the new value is \"name+=X\" for some score X, then the\n" + INDENT "attribute is set to its existing value plus X, where the\n" + INDENT "existing value and X are parsed and added as scores.\n" INDENT "Scores are integer values capped at INFINITY and -INFINITY.\n" INDENT "Refer to Pacemaker Explained and to the char2score() function\n" @@ -483,7 +483,7 @@ build_arg_context(pcmk__common_args_t *args) " --xml-file $HOME/constraints.xml\n\n" "Increase configuration version to prevent old configurations from " "being loaded accidentally:\n\n" - "\t# cibadmin --modify --xml-text " + "\t# cibadmin --modify --score --xml-text " "'<" PCMK_XE_CIB " " PCMK_XA_ADMIN_EPOCH "=\"" PCMK_XA_ADMIN_EPOCH "++\"/>'\n\n" "Edit the configuration with your favorite $EDITOR:\n\n" From 6e0e37037254dee016c2f122c3c094ea3112998b Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 28 May 2024 14:10:34 -0500 Subject: [PATCH 012/364] Refactor: libcrmcommon: check for "sync-" independent of panic action This will make it easier to add new options --- lib/common/watchdog.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/common/watchdog.c b/lib/common/watchdog.c index b7921fe87ae..3340bc616ed 100644 --- a/lib/common/watchdog.c +++ b/lib/common/watchdog.c @@ -54,6 +54,10 @@ panic_local(void) pid_t ppid = getppid(); const char *panic_action = pcmk__env_option(PCMK__ENV_PANIC_ACTION); + // Default panic action is to reboot + char sysrq = 'b'; + int reboot_cmd = RB_AUTOBOOT; + if(uid != 0 && ppid > 1) { /* We're a non-root pacemaker daemon (pacemaker-based, * pacemaker-controld, pacemaker-schedulerd, pacemaker-attrd, etc.) with @@ -90,21 +94,17 @@ panic_local(void) /* We're either pacemakerd, or a pacemaker daemon running as root */ - if (pcmk__str_eq(panic_action, "crash", pcmk__str_casei)) { - sysrq_trigger('c'); - - } else if (pcmk__str_eq(panic_action, "sync-crash", pcmk__str_casei)) { + if (pcmk__starts_with(panic_action, "sync-")) { sync(); - sysrq_trigger('c'); + panic_action += strlen("sync-"); + }; - } else { - if (pcmk__str_eq(panic_action, "sync-reboot", pcmk__str_casei)) { - sync(); - } - sysrq_trigger('b'); + if (pcmk__str_eq(panic_action, "crash", pcmk__str_casei)) { + sysrq = 'c'; } - /* reboot(RB_HALT_SYSTEM); rc = errno; */ - reboot(RB_AUTOBOOT); + + sysrq_trigger(sysrq); + reboot(reboot_cmd); rc = errno; crm_emerg("Reboot failed, escalating to parent %lld: %s " CRM_XS " rc=%d", From bd9690fa5184d1758e8f53b37173b5df3766f5ae Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 28 May 2024 14:11:14 -0500 Subject: [PATCH 013/364] Feature: libcrmcommon: support PCMK_panic_action="off" or "sync-off" This leaves the system powered down after a panic. Fixes T826 --- lib/common/watchdog.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/common/watchdog.c b/lib/common/watchdog.c index 3340bc616ed..561ec40fe63 100644 --- a/lib/common/watchdog.c +++ b/lib/common/watchdog.c @@ -101,6 +101,14 @@ panic_local(void) if (pcmk__str_eq(panic_action, "crash", pcmk__str_casei)) { sysrq = 'c'; + + } else if (pcmk__str_eq(panic_action, "off", pcmk__str_casei)) { + sysrq = 'o'; +#ifdef RB_POWER_OFF + reboot_cmd = RB_POWER_OFF; +#elif defined(RB_POWEROFF) + reboot_cmd = RB_POWEROFF; +#endif } sysrq_trigger(sysrq); From 349003d20f76c685d7c098eebfc76cd0a45014c0 Mon Sep 17 00:00:00 2001 From: "Gao,Yan" Date: Tue, 28 May 2024 09:08:49 +0200 Subject: [PATCH 014/364] Fix: libstonithd: avoid use-after-free when retrieving metadata of Linux-HA fence agents Regression introduced by acfbd5e01 (not yet released). A st_info_fn() may free any existing output buffer every time when it's called like: https://github.com/ClusterLabs/cluster-glue/blob/5cc622b4/lib/plugins/stonith/external.c#L612 So we should copy the output every time. --- lib/fencing/st_lha.c | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/lib/fencing/st_lha.c b/lib/fencing/st_lha.c index a379c108101..3f31412b51c 100644 --- a/lib/fencing/st_lha.c +++ b/lib/fencing/st_lha.c @@ -203,34 +203,37 @@ stonith__lha_metadata(const char *agent, int timeout, char **output) } if (lha_agents_lib && st_new_fn && st_del_fn && st_info_fn && st_log_fn) { - const char *meta_longdesc = NULL; - const char *meta_shortdesc = NULL; - const char *meta_param = NULL; + char *meta_longdesc = NULL; + char *meta_shortdesc = NULL; + char *meta_param = NULL; const char *timeout_str = NULL; - gchar *meta_longdesc_esc = NULL; - gchar *meta_shortdesc_esc = NULL; - stonith_obj = st_new_fn(agent); if (stonith_obj != NULL) { st_log_fn(stonith_obj, (PILLogFun) &stonith_plugin); - meta_longdesc = st_info_fn(stonith_obj, ST_DEVICEDESCR); + /* A st_info_fn() may free any existing output buffer every time + * when it's called. Copy the output every time. + */ + meta_longdesc = pcmk__str_copy(st_info_fn(stonith_obj, + ST_DEVICEDESCR)); if (meta_longdesc == NULL) { crm_warn("no long description in %s's metadata.", agent); - meta_longdesc = no_parameter_info; + meta_longdesc = pcmk__str_copy(no_parameter_info); } - meta_shortdesc = st_info_fn(stonith_obj, ST_DEVICEID); + meta_shortdesc = pcmk__str_copy(st_info_fn(stonith_obj, + ST_DEVICEID)); if (meta_shortdesc == NULL) { crm_warn("no short description in %s's metadata.", agent); - meta_shortdesc = no_parameter_info; + meta_shortdesc = pcmk__str_copy(no_parameter_info); } - meta_param = st_info_fn(stonith_obj, ST_CONF_XML); + meta_param = pcmk__str_copy(st_info_fn(stonith_obj, + ST_CONF_XML)); if (meta_param == NULL) { crm_warn("no list of parameters in %s's metadata.", agent); - meta_param = no_parameter_info; + meta_param = pcmk__str_copy(no_parameter_info); } st_del_fn(stonith_obj); @@ -242,13 +245,17 @@ stonith__lha_metadata(const char *agent, int timeout, char **output) } if (pcmk__xml_needs_escape(meta_longdesc, pcmk__xml_escape_text)) { - meta_longdesc_esc = pcmk__xml_escape(meta_longdesc, - pcmk__xml_escape_text); + gchar *meta_longdesc_esc = pcmk__xml_escape(meta_longdesc, + pcmk__xml_escape_text); + + free(meta_longdesc); meta_longdesc = meta_longdesc_esc; } if (pcmk__xml_needs_escape(meta_shortdesc, pcmk__xml_escape_text)) { - meta_shortdesc_esc = pcmk__xml_escape(meta_shortdesc, - pcmk__xml_escape_text); + gchar *meta_shortdesc_esc = pcmk__xml_escape(meta_shortdesc, + pcmk__xml_escape_text); + + free(meta_shortdesc); meta_shortdesc = meta_shortdesc_esc; } @@ -261,8 +268,9 @@ stonith__lha_metadata(const char *agent, int timeout, char **output) meta_shortdesc, meta_param, timeout_str, timeout_str, timeout_str); - g_free(meta_longdesc_esc); - g_free(meta_shortdesc_esc); + free(meta_longdesc); + free(meta_shortdesc); + free(meta_param); } if (output) { *output = buffer; From 569aa41ecccd4da46725ac274c3a41c4edda1bb0 Mon Sep 17 00:00:00 2001 From: "Gao,Yan" Date: Thu, 30 May 2024 07:16:58 +0200 Subject: [PATCH 015/364] Fix: libstonithd: free escaped metadata descriptions with g_free() They were created as gchar *. --- lib/fencing/st_lha.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/fencing/st_lha.c b/lib/fencing/st_lha.c index 3f31412b51c..708bf9b6353 100644 --- a/lib/fencing/st_lha.c +++ b/lib/fencing/st_lha.c @@ -208,6 +208,9 @@ stonith__lha_metadata(const char *agent, int timeout, char **output) char *meta_param = NULL; const char *timeout_str = NULL; + gchar *meta_longdesc_esc = NULL; + gchar *meta_shortdesc_esc = NULL; + stonith_obj = st_new_fn(agent); if (stonith_obj != NULL) { st_log_fn(stonith_obj, (PILLogFun) &stonith_plugin); @@ -245,18 +248,12 @@ stonith__lha_metadata(const char *agent, int timeout, char **output) } if (pcmk__xml_needs_escape(meta_longdesc, pcmk__xml_escape_text)) { - gchar *meta_longdesc_esc = pcmk__xml_escape(meta_longdesc, - pcmk__xml_escape_text); - - free(meta_longdesc); - meta_longdesc = meta_longdesc_esc; + meta_longdesc_esc = pcmk__xml_escape(meta_longdesc, + pcmk__xml_escape_text); } if (pcmk__xml_needs_escape(meta_shortdesc, pcmk__xml_escape_text)) { - gchar *meta_shortdesc_esc = pcmk__xml_escape(meta_shortdesc, - pcmk__xml_escape_text); - - free(meta_shortdesc); - meta_shortdesc = meta_shortdesc_esc; + meta_shortdesc_esc = pcmk__xml_escape(meta_shortdesc, + pcmk__xml_escape_text); } /* @TODO This needs a string that's parsable by crm_get_msec(). In @@ -264,9 +261,16 @@ stonith__lha_metadata(const char *agent, int timeout, char **output) * here because PCMK_DEFAULT_ACTION_TIMEOUT_MS is 20000 -> "20s". */ timeout_str = pcmk__readable_interval(PCMK_DEFAULT_ACTION_TIMEOUT_MS); - buffer = crm_strdup_printf(META_TEMPLATE, agent, meta_longdesc, - meta_shortdesc, meta_param, - timeout_str, timeout_str, timeout_str); + buffer = crm_strdup_printf(META_TEMPLATE, agent, + ((meta_longdesc_esc != NULL) ? + meta_longdesc_esc : meta_longdesc), + ((meta_shortdesc_esc != NULL) ? + meta_shortdesc_esc : meta_shortdesc), + meta_param, timeout_str, timeout_str, + timeout_str); + + g_free(meta_longdesc_esc); + g_free(meta_shortdesc_esc); free(meta_longdesc); free(meta_shortdesc); From f5075cbe3b6c9a77def4991a96ec4703e55798ea Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 28 May 2024 16:08:51 -0500 Subject: [PATCH 016/364] Refactor: pacemaker-based: use flags variable in do_local_notify() ... for readability --- daemons/based/based_callbacks.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/daemons/based/based_callbacks.c b/daemons/based/based_callbacks.c index b1a82092706..f5b12167829 100644 --- a/daemons/based/based_callbacks.c +++ b/daemons/based/based_callbacks.c @@ -185,6 +185,7 @@ do_local_notify(const xmlNode *notify_src, const char *client_id, int rid = 0; int call_id = 0; pcmk__client_t *client_obj = NULL; + uint32_t flags = crm_ipc_server_event; CRM_ASSERT(notify_src && client_id); @@ -198,9 +199,8 @@ do_local_notify(const xmlNode *notify_src, const char *client_id, } if (sync_reply) { - if (client_obj->ipcs) { - CRM_LOG_ASSERT(client_obj->request_id); - + flags = crm_ipc_flags_none; + if (client_obj->ipcs != NULL) { rid = client_obj->request_id; client_obj->request_id = 0; @@ -223,9 +223,7 @@ do_local_notify(const xmlNode *notify_src, const char *client_id, case pcmk__client_ipc: { int rc = pcmk__ipc_send_xml(client_obj, rid, notify_src, - (sync_reply? crm_ipc_flags_none - : crm_ipc_server_event)); - + flags); if (rc != pcmk_rc_ok) { crm_warn("%s reply to client %s failed: %s " CRM_XS " rc=%d", (sync_reply? "Synchronous" : "Asynchronous"), From 1a2b9c817ce6361fcb414ef55d5901827644da7c Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 28 May 2024 16:09:31 -0500 Subject: [PATCH 017/364] Log: pacemaker-based: improve local notification messages --- daemons/based/based_callbacks.c | 61 +++++++++++++++------------------ 1 file changed, 27 insertions(+), 34 deletions(-) diff --git a/daemons/based/based_callbacks.c b/daemons/based/based_callbacks.c index f5b12167829..8925d007c4a 100644 --- a/daemons/based/based_callbacks.c +++ b/daemons/based/based_callbacks.c @@ -182,66 +182,59 @@ static void do_local_notify(const xmlNode *notify_src, const char *client_id, bool sync_reply, bool from_peer) { - int rid = 0; - int call_id = 0; + int msg_id = 0; + int rc = pcmk_rc_ok; pcmk__client_t *client_obj = NULL; uint32_t flags = crm_ipc_server_event; - CRM_ASSERT(notify_src && client_id); + CRM_CHECK((notify_src != NULL) && (client_id != NULL), return); - crm_element_value_int(notify_src, PCMK__XA_CIB_CALLID, &call_id); + crm_element_value_int(notify_src, PCMK__XA_CIB_CALLID, &msg_id); client_obj = pcmk__find_client_by_id(client_id); if (client_obj == NULL) { - crm_debug("Could not send response %d: client %s not found", - call_id, client_id); + crm_debug("Could not notify client %s%s %s of call %d result: " + "client no longer exists", client_id, + (from_peer? " (originator of delegated request)" : ""), + (sync_reply? "synchronously" : "asynchronously"), msg_id); return; } if (sync_reply) { flags = crm_ipc_flags_none; if (client_obj->ipcs != NULL) { - rid = client_obj->request_id; + msg_id = client_obj->request_id; client_obj->request_id = 0; - - crm_trace("Sending response %d to client %s%s", - rid, pcmk__client_name(client_obj), - (from_peer? " (originator of delegated request)" : "")); - } else { - crm_trace("Sending response (call %d) to client %s%s", - call_id, pcmk__client_name(client_obj), - (from_peer? " (originator of delegated request)" : "")); } - - } else { - crm_trace("Sending event %d to client %s%s", - call_id, pcmk__client_name(client_obj), - (from_peer? " (originator of delegated request)" : "")); } switch (PCMK__CLIENT_TYPE(client_obj)) { case pcmk__client_ipc: - { - int rc = pcmk__ipc_send_xml(client_obj, rid, notify_src, - flags); - if (rc != pcmk_rc_ok) { - crm_warn("%s reply to client %s failed: %s " CRM_XS " rc=%d", - (sync_reply? "Synchronous" : "Asynchronous"), - pcmk__client_name(client_obj), pcmk_rc_str(rc), - rc); - } - } + rc = pcmk__ipc_send_xml(client_obj, msg_id, notify_src, flags); break; #ifdef HAVE_GNUTLS_GNUTLS_H case pcmk__client_tls: #endif case pcmk__client_tcp: - pcmk__remote_send_xml(client_obj->remote, notify_src); + rc = pcmk__remote_send_xml(client_obj->remote, notify_src); break; default: - crm_err("Unknown transport for client %s " - CRM_XS " flags=%#016" PRIx64, - pcmk__client_name(client_obj), client_obj->flags); + rc = EPROTONOSUPPORT; + break; + } + if (rc == pcmk_rc_ok) { + crm_trace("Notified %s client %s%s %s of call %d result", + pcmk__client_type_str(PCMK__CLIENT_TYPE(client_obj)), + pcmk__client_name(client_obj), + (from_peer? " (originator of delegated request)" : ""), + (sync_reply? "synchronously" : "asynchronously"), msg_id); + } else { + crm_warn("Could not notify %s client %s%s %s of call %d result: %s", + pcmk__client_type_str(PCMK__CLIENT_TYPE(client_obj)), + pcmk__client_name(client_obj), + (from_peer? " (originator of delegated request)" : ""), + (sync_reply? "synchronously" : "asynchronously"), msg_id, + pcmk_rc_str(rc)); } } From 153cfcf4ffe15777908860b69737a6340c0d91df Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 22 May 2024 09:47:43 -0500 Subject: [PATCH 018/364] Log: pacemakerd: improve subdaemon check messages --- daemons/pacemakerd/pcmkd_subdaemons.c | 77 +++++++++++---------------- 1 file changed, 31 insertions(+), 46 deletions(-) diff --git a/daemons/pacemakerd/pcmkd_subdaemons.c b/daemons/pacemakerd/pcmkd_subdaemons.c index 5bd351244b5..dfd3dc6d853 100644 --- a/daemons/pacemakerd/pcmkd_subdaemons.c +++ b/daemons/pacemakerd/pcmkd_subdaemons.c @@ -139,41 +139,36 @@ static gboolean check_next_subdaemon(gpointer user_data) { static int next_child = 0; - int rc = child_liveness(&pcmk_children[next_child]); + + pcmk_child_t *child = &(pcmk_children[next_child]); + const long long pid = PCMK__SPECIAL_PID_AS_0(child->pid); + int rc = child_liveness(child); crm_trace("Checked %s[%lld]: %s (%d)", - pcmk_children[next_child].name, - (long long) PCMK__SPECIAL_PID_AS_0(pcmk_children[next_child].pid), - pcmk_rc_str(rc), rc); + child->name, pid, pcmk_rc_str(rc), rc); switch (rc) { case pcmk_rc_ok: - pcmk_children[next_child].check_count = 0; + child->check_count = 0; subdaemon_check_progress = time(NULL); break; - case pcmk_rc_ipc_pid_only: // This case: it was previously OK - pcmk_children[next_child].check_count++; - if (pcmk_children[next_child].check_count >= PCMK_PROCESS_CHECK_RETRIES) { - crm_err("%s[%lld] is unresponsive to ipc after %d tries but " - "we found the pid so have it killed that we can restart", - pcmk_children[next_child].name, - (long long) PCMK__SPECIAL_PID_AS_0( - pcmk_children[next_child].pid), - pcmk_children[next_child].check_count); - stop_child(&pcmk_children[next_child], SIGKILL); - if (pcmk_is_set(pcmk_children[next_child].flags, child_respawn)) { - /* as long as the respawn-limit isn't reached - give it another round of check retries - */ - pcmk_children[next_child].check_count = 0; + + case pcmk_rc_ipc_pid_only: // Child was previously OK + if (++(child->check_count) >= PCMK_PROCESS_CHECK_RETRIES) { + crm_crit("%s[%lld] is unresponsive to IPC after %d attempt%s " + "and will now be killed", + child->name, pid, child->check_count, + pcmk__plural_s(child->check_count)); + stop_child(child, SIGKILL); + if (pcmk_is_set(child->flags, child_respawn)) { + // Respawn limit hasn't been reached, so retry another round + child->check_count = 0; } } else { - crm_notice("%s[%lld] is unresponsive to ipc after %d tries", - pcmk_children[next_child].name, - (long long) PCMK__SPECIAL_PID_AS_0( - pcmk_children[next_child].pid), - pcmk_children[next_child].check_count); - if (pcmk_is_set(pcmk_children[next_child].flags, child_respawn)) { + crm_notice("%s[%lld] is unresponsive to IPC after %d attempt%s", + child->name, pid, child->check_count, + pcmk__plural_s(child->check_count)); + if (pcmk_is_set(child->flags, child_respawn)) { /* as long as the respawn-limit isn't reached and we haven't run out of connect retries we account this as progress we are willing @@ -187,46 +182,36 @@ check_next_subdaemon(gpointer user_data) */ break; case pcmk_rc_ipc_unresponsive: - if (!pcmk_is_set(pcmk_children[next_child].flags, child_respawn)) { + if (!pcmk_is_set(child->flags, child_respawn)) { /* if a subdaemon is down and we don't want it to be restarted this is a success during shutdown. if it isn't restarted anymore due to MAX_RESPAWN it is rather no success. */ - if (pcmk_children[next_child].respawn_count <= MAX_RESPAWN) { + if (child->respawn_count <= MAX_RESPAWN) { subdaemon_check_progress = time(NULL); } } - if (!pcmk_is_set(pcmk_children[next_child].flags, child_active_before_startup)) { - crm_trace("found %s[%lld] missing - signal-handler " - "will take care of it", - pcmk_children[next_child].name, - (long long) PCMK__SPECIAL_PID_AS_0( - pcmk_children[next_child].pid)); + if (!pcmk_is_set(child->flags, child_active_before_startup)) { + crm_trace("%s[%lld] terminated (relying on SIGCHLD handler)", + child->name, pid); break; } - if (pcmk_is_set(pcmk_children[next_child].flags, child_respawn)) { - crm_err("%s[%lld] terminated", - pcmk_children[next_child].name, - (long long) PCMK__SPECIAL_PID_AS_0( - pcmk_children[next_child].pid)); + if (pcmk_is_set(child->flags, child_respawn)) { + crm_err("%s[%lld] terminated", child->name, pid); } else { /* orderly shutdown */ - crm_notice("%s[%lld] terminated", - pcmk_children[next_child].name, - (long long) PCMK__SPECIAL_PID_AS_0( - pcmk_children[next_child].pid)); + crm_notice("%s[%lld] terminated", child->name, pid); } - pcmk_process_exit(&(pcmk_children[next_child])); + pcmk_process_exit(child); break; default: crm_exit(CRM_EX_FATAL); break; /* static analysis/noreturn */ } - next_child++; - if (next_child >= PCMK__NELEM(pcmk_children)) { + if (++next_child >= PCMK__NELEM(pcmk_children)) { next_child = 0; } From 7eba6b8df397d95b6d5b80b2c77a964464fec056 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 22 May 2024 10:51:34 -0500 Subject: [PATCH 019/364] Low: libcrmcommon: interpret pcmk__remote_ready() return code correctly --- lib/common/remote.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/common/remote.c b/lib/common/remote.c index 9f8419b1bde..90a39b63765 100644 --- a/lib/common/remote.c +++ b/lib/common/remote.c @@ -132,18 +132,16 @@ int pcmk__tls_client_handshake(pcmk__remote_t *remote, int timeout_ms) { int rc = 0; - int pollrc = 0; time_t time_limit = time(NULL) + timeout_ms / 1000; do { rc = gnutls_handshake(*remote->tls_session); if ((rc == GNUTLS_E_INTERRUPTED) || (rc == GNUTLS_E_AGAIN)) { - pollrc = pcmk__remote_ready(remote, 1000); - if ((pollrc != pcmk_rc_ok) && (pollrc != ETIME)) { - /* poll returned error, there is no hope */ + rc = pcmk__remote_ready(remote, 1000); + if ((rc != pcmk_rc_ok) && (rc != ETIME)) { // Fatal error crm_trace("TLS handshake poll failed: %s (%d)", - pcmk_strerror(pollrc), pollrc); - return pcmk_legacy2rc(pollrc); + pcmk_rc_str(rc), rc); + return rc; } } else if (rc < 0) { crm_trace("TLS handshake failed: %s (%d)", From 537455184b8022ed9f2da193cfc36ff68b486306 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 22 May 2024 11:34:11 -0500 Subject: [PATCH 020/364] Log: liblrmd: make TLS handshake error handling consistent --- lib/lrmd/lrmd_client.c | 45 ++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/lib/lrmd/lrmd_client.c b/lib/lrmd/lrmd_client.c index ebd6f0f9d29..31b4e7cbd24 100644 --- a/lib/lrmd/lrmd_client.c +++ b/lib/lrmd/lrmd_client.c @@ -60,7 +60,9 @@ static void lrmd_internal_proxy_dispatch(lrmd_t *lrmd, xmlNode *msg); void lrmd_internal_set_proxy_callback(lrmd_t * lrmd, void *userdata, void (*callback)(lrmd_t *lrmd, void *userdata, xmlNode *msg)); #ifdef HAVE_GNUTLS_GNUTLS_H -# define LRMD_CLIENT_HANDSHAKE_TIMEOUT 5000 /* 5 seconds */ +// GnuTLS client handshake timeout in milliseconds +#define TLS_HANDSHAKE_TIMEOUT 5000 + gnutls_psk_client_credentials_t psk_cred_s; static void lrmd_tls_disconnect(lrmd_t * lrmd); static int global_remote_msg_id = 0; @@ -1401,10 +1403,30 @@ report_async_connection_result(lrmd_t * lrmd, int rc) } #ifdef HAVE_GNUTLS_GNUTLS_H -static inline int -lrmd__tls_client_handshake(pcmk__remote_t *remote) +/*! + * \internal + * \brief Perform a TLS client handshake with a Pacemaker Remote server + * + * \param[in] lrmd Newly established Pacemaker Remote executor connection + * + * \return Standard Pacemaker return code + */ +static int +tls_client_handshake(lrmd_t *lrmd) { - return pcmk__tls_client_handshake(remote, LRMD_CLIENT_HANDSHAKE_TIMEOUT); + lrmd_private_t *native = lrmd->lrmd_private; + int rc = pcmk__tls_client_handshake(native->remote, TLS_HANDSHAKE_TIMEOUT); + + if (rc != pcmk_rc_ok) { + crm_warn("Disconnecting after TLS handshake with " + "Pacemaker Remote server %s:%d failed", + native->server, native->port); + gnutls_deinit(*native->remote->tls_session); + gnutls_free(native->remote->tls_session); + native->remote->tls_session = NULL; + lrmd_tls_connection_destroy(lrmd); + } + return rc; } /*! @@ -1496,13 +1518,7 @@ lrmd_tcp_connect_cb(void *userdata, int rc, int sock) return; } - if (lrmd__tls_client_handshake(native->remote) != pcmk_rc_ok) { - crm_warn("Disconnecting after TLS handshake with Pacemaker Remote server %s:%d failed", - native->server, native->port); - gnutls_deinit(*native->remote->tls_session); - gnutls_free(native->remote->tls_session); - native->remote->tls_session = NULL; - lrmd_tls_connection_destroy(lrmd); + if (tls_client_handshake(lrmd) != pcmk_rc_ok) { report_async_connection_result(lrmd, -EKEYREJECTED); return; } @@ -1573,12 +1589,7 @@ lrmd_tls_connect(lrmd_t * lrmd, int *fd) return -EPROTO; } - if (lrmd__tls_client_handshake(native->remote) != pcmk_rc_ok) { - crm_err("Session creation for %s:%d failed", native->server, native->port); - gnutls_deinit(*native->remote->tls_session); - gnutls_free(native->remote->tls_session); - native->remote->tls_session = NULL; - lrmd_tls_connection_destroy(lrmd); + if (tls_client_handshake(lrmd) != pcmk_rc_ok) { return -EKEYREJECTED; } From a695ab1ca423c9064202d622770ac5d5f97f0e30 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 22 May 2024 11:10:31 -0500 Subject: [PATCH 021/364] Refactor: libcrmcommon: make pcmk__tls_client_handshake() take timeout in seconds ... since that's how it's actually used --- include/crm/common/remote_internal.h | 6 +++--- lib/cib/cib_remote.c | 5 +++-- lib/common/remote.c | 4 ++-- lib/lrmd/lrmd_client.c | 4 ++-- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/include/crm/common/remote_internal.h b/include/crm/common/remote_internal.h index d55f25fd223..4e31613b230 100644 --- a/include/crm/common/remote_internal.h +++ b/include/crm/common/remote_internal.h @@ -88,12 +88,12 @@ int pcmk__read_handshake_data(const pcmk__client_t *client); * \internal * \brief Perform client TLS handshake after establishing TCP socket * - * \param[in,out] remote Newly established remote connection - * \param[in] timeout_ms Abort if handshake is not complete within this + * \param[in,out] remote Newly established remote connection + * \param[in] timeout_sec Abort handshake if not completed within this time * * \return Standard Pacemaker return code */ -int pcmk__tls_client_handshake(pcmk__remote_t *remote, int timeout_ms); +int pcmk__tls_client_handshake(pcmk__remote_t *remote, int timeout_sec); #endif // HAVE_GNUTLS_GNUTLS_H #endif // PCMK__CRM_COMMON_REMOTE_INTERNAL__H diff --git a/lib/cib/cib_remote.c b/lib/cib/cib_remote.c index fa558a5adbc..9e12b05d6e4 100644 --- a/lib/cib/cib_remote.c +++ b/lib/cib/cib_remote.c @@ -32,7 +32,8 @@ # include -# define TLS_HANDSHAKE_TIMEOUT_MS 5000 +// GnuTLS handshake timeout in seconds +#define TLS_HANDSHAKE_TIMEOUT 5 static gnutls_anon_client_credentials_t anon_cred_c; static gboolean remote_gnutls_credentials_init = FALSE; @@ -366,7 +367,7 @@ cib_tls_signon(cib_t *cib, pcmk__remote_t *connection, gboolean event_channel) return -1; } - if (pcmk__tls_client_handshake(connection, TLS_HANDSHAKE_TIMEOUT_MS) + if (pcmk__tls_client_handshake(connection, TLS_HANDSHAKE_TIMEOUT) != pcmk_rc_ok) { crm_err("Session creation for %s:%d failed", private->server, private->port); diff --git a/lib/common/remote.c b/lib/common/remote.c index 90a39b63765..c83475588f7 100644 --- a/lib/common/remote.c +++ b/lib/common/remote.c @@ -129,10 +129,10 @@ localized_remote_header(pcmk__remote_t *remote) #ifdef HAVE_GNUTLS_GNUTLS_H int -pcmk__tls_client_handshake(pcmk__remote_t *remote, int timeout_ms) +pcmk__tls_client_handshake(pcmk__remote_t *remote, int timeout_sec) { int rc = 0; - time_t time_limit = time(NULL) + timeout_ms / 1000; + const time_t time_limit = time(NULL) + timeout_sec; do { rc = gnutls_handshake(*remote->tls_session); diff --git a/lib/lrmd/lrmd_client.c b/lib/lrmd/lrmd_client.c index 31b4e7cbd24..032a9b674c3 100644 --- a/lib/lrmd/lrmd_client.c +++ b/lib/lrmd/lrmd_client.c @@ -60,8 +60,8 @@ static void lrmd_internal_proxy_dispatch(lrmd_t *lrmd, xmlNode *msg); void lrmd_internal_set_proxy_callback(lrmd_t * lrmd, void *userdata, void (*callback)(lrmd_t *lrmd, void *userdata, xmlNode *msg)); #ifdef HAVE_GNUTLS_GNUTLS_H -// GnuTLS client handshake timeout in milliseconds -#define TLS_HANDSHAKE_TIMEOUT 5000 +// GnuTLS client handshake timeout in seconds +#define TLS_HANDSHAKE_TIMEOUT 5 gnutls_psk_client_credentials_t psk_cred_s; static void lrmd_tls_disconnect(lrmd_t * lrmd); From 53307e4bec7e1516f474198edaa9217f4224692a Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 22 May 2024 11:12:01 -0500 Subject: [PATCH 022/364] Refactor: libcrmcommon: return GnuTLS code in pcmk__tls_client_handshake() ... as an output argument, to allow better logs at callers. It would be cleaner to map GnuTLS error codes to (new) standard Pacemaker return codes, but there are too many to make that practical. Nothing uses the new argument yet. --- include/crm/common/remote_internal.h | 6 +++++- lib/cib/cib_remote.c | 4 ++-- lib/common/remote.c | 17 ++++++++++------- lib/lrmd/lrmd_client.c | 3 ++- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/include/crm/common/remote_internal.h b/include/crm/common/remote_internal.h index 4e31613b230..a6a0a0a1521 100644 --- a/include/crm/common/remote_internal.h +++ b/include/crm/common/remote_internal.h @@ -90,10 +90,14 @@ int pcmk__read_handshake_data(const pcmk__client_t *client); * * \param[in,out] remote Newly established remote connection * \param[in] timeout_sec Abort handshake if not completed within this time + * \param[out] gnutls_rc If this is non-NULL, it will be set to the GnuTLS + * rc (for logging) if this function returns EPROTO, + * otherwise GNUTLS_E_SUCCESS * * \return Standard Pacemaker return code */ -int pcmk__tls_client_handshake(pcmk__remote_t *remote, int timeout_sec); +int pcmk__tls_client_handshake(pcmk__remote_t *remote, int timeout_sec, + int *gnutls_rc); #endif // HAVE_GNUTLS_GNUTLS_H #endif // PCMK__CRM_COMMON_REMOTE_INTERNAL__H diff --git a/lib/cib/cib_remote.c b/lib/cib/cib_remote.c index 9e12b05d6e4..6e944088d67 100644 --- a/lib/cib/cib_remote.c +++ b/lib/cib/cib_remote.c @@ -367,8 +367,8 @@ cib_tls_signon(cib_t *cib, pcmk__remote_t *connection, gboolean event_channel) return -1; } - if (pcmk__tls_client_handshake(connection, TLS_HANDSHAKE_TIMEOUT) - != pcmk_rc_ok) { + if (pcmk__tls_client_handshake(connection, TLS_HANDSHAKE_TIMEOUT, + NULL) != pcmk_rc_ok) { crm_err("Session creation for %s:%d failed", private->server, private->port); gnutls_deinit(*connection->tls_session); diff --git a/lib/common/remote.c b/lib/common/remote.c index c83475588f7..228051b0c3f 100644 --- a/lib/common/remote.c +++ b/lib/common/remote.c @@ -129,23 +129,26 @@ localized_remote_header(pcmk__remote_t *remote) #ifdef HAVE_GNUTLS_GNUTLS_H int -pcmk__tls_client_handshake(pcmk__remote_t *remote, int timeout_sec) +pcmk__tls_client_handshake(pcmk__remote_t *remote, int timeout_sec, + int *gnutls_rc) { - int rc = 0; const time_t time_limit = time(NULL) + timeout_sec; + if (gnutls_rc != NULL) { + *gnutls_rc = GNUTLS_E_SUCCESS; + } do { - rc = gnutls_handshake(*remote->tls_session); + int rc = gnutls_handshake(*remote->tls_session); + if ((rc == GNUTLS_E_INTERRUPTED) || (rc == GNUTLS_E_AGAIN)) { rc = pcmk__remote_ready(remote, 1000); if ((rc != pcmk_rc_ok) && (rc != ETIME)) { // Fatal error - crm_trace("TLS handshake poll failed: %s (%d)", - pcmk_rc_str(rc), rc); return rc; } } else if (rc < 0) { - crm_trace("TLS handshake failed: %s (%d)", - gnutls_strerror(rc), rc); + if (gnutls_rc != NULL) { + *gnutls_rc = rc; + } return EPROTO; } else { return pcmk_rc_ok; diff --git a/lib/lrmd/lrmd_client.c b/lib/lrmd/lrmd_client.c index 032a9b674c3..6f06494de5d 100644 --- a/lib/lrmd/lrmd_client.c +++ b/lib/lrmd/lrmd_client.c @@ -1415,7 +1415,8 @@ static int tls_client_handshake(lrmd_t *lrmd) { lrmd_private_t *native = lrmd->lrmd_private; - int rc = pcmk__tls_client_handshake(native->remote, TLS_HANDSHAKE_TIMEOUT); + int rc = pcmk__tls_client_handshake(native->remote, TLS_HANDSHAKE_TIMEOUT, + NULL); if (rc != pcmk_rc_ok) { crm_warn("Disconnecting after TLS handshake with " From 552a4149c706f8fe37333934510f0a63b46d9812 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 28 May 2024 16:01:24 -0500 Subject: [PATCH 023/364] Refactor: libcrmcommon: use switch in pcmk__tls_client_handshake() ... for readability --- lib/common/remote.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/lib/common/remote.c b/lib/common/remote.c index 228051b0c3f..8054a203ae3 100644 --- a/lib/common/remote.c +++ b/lib/common/remote.c @@ -140,18 +140,23 @@ pcmk__tls_client_handshake(pcmk__remote_t *remote, int timeout_sec, do { int rc = gnutls_handshake(*remote->tls_session); - if ((rc == GNUTLS_E_INTERRUPTED) || (rc == GNUTLS_E_AGAIN)) { - rc = pcmk__remote_ready(remote, 1000); - if ((rc != pcmk_rc_ok) && (rc != ETIME)) { // Fatal error - return rc; - } - } else if (rc < 0) { - if (gnutls_rc != NULL) { - *gnutls_rc = rc; - } - return EPROTO; - } else { - return pcmk_rc_ok; + switch (rc) { + case GNUTLS_E_SUCCESS: + return pcmk_rc_ok; + + case GNUTLS_E_INTERRUPTED: + case GNUTLS_E_AGAIN: + rc = pcmk__remote_ready(remote, 1000); + if ((rc != pcmk_rc_ok) && (rc != ETIME)) { // Fatal error + return rc; + } + break; + + default: + if (gnutls_rc != NULL) { + *gnutls_rc = rc; + } + return EPROTO; } } while (time(NULL) < time_limit); return ETIME; From 48957192b7cc0a21d018411288aef51da03e3ee8 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 22 May 2024 11:32:42 -0500 Subject: [PATCH 024/364] Log: libcib,liblrmd: improve TLS handshake error messages --- lib/cib/cib_remote.c | 12 ++++++++---- lib/lrmd/lrmd_client.c | 8 +++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/cib/cib_remote.c b/lib/cib/cib_remote.c index 6e944088d67..3d62344214b 100644 --- a/lib/cib/cib_remote.c +++ b/lib/cib/cib_remote.c @@ -349,6 +349,8 @@ cib_tls_signon(cib_t *cib, pcmk__remote_t *connection, gboolean event_channel) } if (private->encrypted) { + int tls_rc = GNUTLS_E_SUCCESS; + /* initialize GnuTls lib */ #ifdef HAVE_GNUTLS_GNUTLS_H if (remote_gnutls_credentials_init == FALSE) { @@ -367,10 +369,12 @@ cib_tls_signon(cib_t *cib, pcmk__remote_t *connection, gboolean event_channel) return -1; } - if (pcmk__tls_client_handshake(connection, TLS_HANDSHAKE_TIMEOUT, - NULL) != pcmk_rc_ok) { - crm_err("Session creation for %s:%d failed", private->server, private->port); - + rc = pcmk__tls_client_handshake(connection, TLS_HANDSHAKE_TIMEOUT, + &tls_rc); + if (rc != pcmk_rc_ok) { + crm_err("Remote CIB session creation for %s:%d failed: %s", + private->server, private->port, + (rc == EPROTO)? gnutls_strerror(tls_rc) : pcmk_rc_str(rc)); gnutls_deinit(*connection->tls_session); gnutls_free(connection->tls_session); connection->tls_session = NULL; diff --git a/lib/lrmd/lrmd_client.c b/lib/lrmd/lrmd_client.c index 6f06494de5d..74292fb8fe8 100644 --- a/lib/lrmd/lrmd_client.c +++ b/lib/lrmd/lrmd_client.c @@ -1415,13 +1415,15 @@ static int tls_client_handshake(lrmd_t *lrmd) { lrmd_private_t *native = lrmd->lrmd_private; + int tls_rc = GNUTLS_E_SUCCESS; int rc = pcmk__tls_client_handshake(native->remote, TLS_HANDSHAKE_TIMEOUT, - NULL); + &tls_rc); if (rc != pcmk_rc_ok) { crm_warn("Disconnecting after TLS handshake with " - "Pacemaker Remote server %s:%d failed", - native->server, native->port); + "Pacemaker Remote server %s:%d failed: %s", + native->server, native->port, + (rc == EPROTO)? gnutls_strerror(tls_rc) : pcmk_rc_str(rc)); gnutls_deinit(*native->remote->tls_session); gnutls_free(native->remote->tls_session); native->remote->tls_session = NULL; From f3ba8a125f126a722b7905d2de8630ab121d2951 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 15 May 2024 17:42:38 -0500 Subject: [PATCH 025/364] Doc: ChangeLog: fix 2.1.8-rc1 typos --- ChangeLog | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8211238df17..c1d3f3d2fe5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -282,8 +282,7 @@ PCMK_XE_TAGS, PCMK_XE_TARGET, PCMK_XE_TEMPLATE, PCMK_XE_TICKET, PCMK_XE_TICKETS, PCMK_XE_TIMING, PCMK_XE_TIMINGS, PCMK_XE_TRANSITION, PCMK_XE_UTILIZATION, PCMK_XE_UTILIZATIONS, PCMK_XE_VALIDATE, - PCMK_XE_VERSION, PCMK_XE_XML, PCMK_XE_XML_PATCHSET, and - XML_CIB_TAG_ALERT_ATTRIBUTES + PCMK_XE_VERSION, PCMK_XE_XML, and PCMK_XE_XML_PATCHSET + libcrmcommon: add functions pcmk_action_text(), pcmk_find_node(), pcmk_foreach_active_resource(), pcmk_get_dc(), pcmk_parse_interval_spec(), pcmk_get_no_quorum_policy(), pcmk_has_quorum(), @@ -347,18 +346,18 @@ XML_BOOLEAN_FALSE, XML_BOOLEAN_NO, XML_BOOLEAN_TRUE, XML_BOOLEAN_YES, XML_CIB_ATTR_PRIORITY, XML_CIB_ATTR_SHUTDOWN, XML_CIB_ATTR_WRITTEN, XML_CIB_TAG_ACLS, XML_CIB_TAG_ALERT, XML_CIB_TAG_ALERTS, - XML_CIB_TAG_ALERT_ATTR, XML_CIB_TAG_ALERT_FENCING, - XML_CIB_TAG_ALERT_NODES, XML_CIB_TAG_ALERT_RECIPIENT, - XML_CIB_TAG_ALERT_RESOURCES, XML_CIB_TAG_ALERT_SELECT, - XML_CIB_TAG_CONFIGURATION, XML_CIB_TAG_CONSTRAINTS, XML_CIB_TAG_CONTAINER, - XML_CIB_TAG_CRMCONFIG, XML_CIB_TAG_GENERATION_TUPPLE, XML_CIB_TAG_GROUP, - XML_CIB_TAG_INCARNATION, XML_CIB_TAG_LRM, XML_CIB_TAG_NODE, - XML_CIB_TAG_NODES, XML_CIB_TAG_NVPAIR, XML_CIB_TAG_OBJ_REF, - XML_CIB_TAG_OPCONFIG, XML_CIB_TAG_PROPSET, XML_CIB_TAG_RESOURCE, - XML_CIB_TAG_RESOURCES, XML_CIB_TAG_RSCCONFIG, XML_CIB_TAG_RSC_TEMPLATE, - XML_CIB_TAG_SECTION_ALL, XML_CIB_TAG_STATE, XML_CIB_TAG_STATUS, - XML_CIB_TAG_TAG, XML_CIB_TAG_TAGS, XML_CIB_TAG_TICKETS, - XML_CIB_TAG_TICKET_STATE, XML_COLOC_ATTR_INFLUENCE, + XML_CIB_TAG_ALERT_ATTR, XML_CIB_TAG_ALERT_ATTRIBUTES, + XML_CIB_TAG_ALERT_FENCING, XML_CIB_TAG_ALERT_NODES, + XML_CIB_TAG_ALERT_RECIPIENT, XML_CIB_TAG_ALERT_RESOURCES, + XML_CIB_TAG_ALERT_SELECT, XML_CIB_TAG_CONFIGURATION, + XML_CIB_TAG_CONSTRAINTS, XML_CIB_TAG_CONTAINER, XML_CIB_TAG_CRMCONFIG, + XML_CIB_TAG_GENERATION_TUPPLE, XML_CIB_TAG_GROUP, XML_CIB_TAG_INCARNATION, + XML_CIB_TAG_LRM, XML_CIB_TAG_NODE, XML_CIB_TAG_NODES, XML_CIB_TAG_NVPAIR, + XML_CIB_TAG_OBJ_REF, XML_CIB_TAG_OPCONFIG, XML_CIB_TAG_PROPSET, + XML_CIB_TAG_RESOURCE, XML_CIB_TAG_RESOURCES, XML_CIB_TAG_RSCCONFIG, + XML_CIB_TAG_RSC_TEMPLATE, XML_CIB_TAG_SECTION_ALL, XML_CIB_TAG_STATE, + XML_CIB_TAG_STATUS, XML_CIB_TAG_TAG, XML_CIB_TAG_TAGS, + XML_CIB_TAG_TICKETS, XML_CIB_TAG_TICKET_STATE, XML_COLOC_ATTR_INFLUENCE, XML_COLOC_ATTR_NODE_ATTR, XML_COLOC_ATTR_SOURCE, XML_COLOC_ATTR_SOURCE_INSTANCE, XML_COLOC_ATTR_SOURCE_ROLE, XML_COLOC_ATTR_TARGET, XML_COLOC_ATTR_TARGET_INSTANCE, @@ -454,7 +453,7 @@ recovery2text(), role2text(), task2text(), and text2role() + libpe_status: deprecate functions pe_find_node(), pe_pref(), pe_rsc_is_anon_clone(), pe_rsc_is_bundled(), pe_rsc_is_clone(), - pe_rsc_is_unique_clone(), + and pe_rsc_is_unique_clone() + libpe_status: deprecate global resource_class_functions + libstonithd: deprecate constants T_STONITH_NOTIFY_DISCONNECT, T_STONITH_NOTIFY_FENCE, T_STONITH_NOTIFY_HISTORY, and From 070bd8669f5e132d1ad2425b2753d14bcaaa8039 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 29 May 2024 15:40:40 -0500 Subject: [PATCH 026/364] Log: libcrmcommon,libpe_status: correct typos --- include/crm/common/scheduler.h | 2 +- lib/pengine/utils.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/crm/common/scheduler.h b/include/crm/common/scheduler.h index f75d8089b06..fe8d8fe0cd5 100644 --- a/include/crm/common/scheduler.h +++ b/include/crm/common/scheduler.h @@ -192,7 +192,7 @@ struct pe_working_set_s { // Be careful about when each piece of information is available and final // NOTE: sbd (as of at least 1.5.2) uses this - //! \deprecated To set scheduler iput, use pcmk_set_scheduler_cib() instead + //! \deprecated Set scheduler input with pcmk_set_scheduler_cib() instead xmlNode *input; // CIB XML crm_time_t *now; // Current time for evaluation purposes diff --git a/lib/pengine/utils.c b/lib/pengine/utils.c index d8d9c2e3118..2cf3745b9ab 100644 --- a/lib/pengine/utils.c +++ b/lib/pengine/utils.c @@ -535,7 +535,7 @@ ticket_new(const char *ticket_id, pcmk_scheduler_t *scheduler) return NULL; } - crm_trace("Creaing ticket entry for %s", ticket_id); + crm_trace("Creating ticket entry for %s", ticket_id); ticket->id = strdup(ticket_id); ticket->granted = FALSE; From c5cff3f651249d12ae80ba0e238bc7f14c67e5f4 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Fri, 31 May 2024 18:11:25 -0700 Subject: [PATCH 027/364] Doc: various: Fix "the the" occurrences Signed-off-by: Reid Wahl --- daemons/controld/controld_lrm.h | 10 +++++----- doc/sphinx/Pacemaker_Administration/upgrading.rst | 4 ++-- doc/sphinx/Pacemaker_Development/helpers.rst | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/daemons/controld/controld_lrm.h b/daemons/controld/controld_lrm.h index c3113e49c3a..26a0d124abe 100644 --- a/daemons/controld/controld_lrm.h +++ b/daemons/controld/controld_lrm.h @@ -119,11 +119,11 @@ lrm_state_t *lrm_state_find(const char *node_name); lrm_state_t *lrm_state_find_or_create(const char *node_name); /*! - * The functions below are wrappers for the executor API the the controller - * uses. These wrapper functions allow us to treat the controller's remote - * executor connection resources the same as regular resources. Internally, - * regular resources go to the executor, and remote connection resources are - * handled locally in the controller. + * The functions below are wrappers for the executor API the controller uses. + * These wrapper functions allow us to treat the controller's remote executor + * connection resources the same as regular resources. Internally, regular + * resources go to the executor, and remote connection resources are handled + * locally in the controller. */ void lrm_state_disconnect_only(lrm_state_t * lrm_state); void lrm_state_disconnect(lrm_state_t * lrm_state); diff --git a/doc/sphinx/Pacemaker_Administration/upgrading.rst b/doc/sphinx/Pacemaker_Administration/upgrading.rst index bccfc22842a..121e26ee41e 100644 --- a/doc/sphinx/Pacemaker_Administration/upgrading.rst +++ b/doc/sphinx/Pacemaker_Administration/upgrading.rst @@ -163,8 +163,8 @@ See the `Pacemaker release calendar `_ on the ClusterLabs wiki to figure out whether the CRM feature set and/or -Pacemaker Remote protocol version changed between the the Pacemaker release -versions in your rolling upgrade. +Pacemaker Remote protocol version changed between the Pacemaker release versions +in your rolling upgrade. To perform a rolling upgrade, on each node in turn: diff --git a/doc/sphinx/Pacemaker_Development/helpers.rst b/doc/sphinx/Pacemaker_Development/helpers.rst index 6bd19266b4a..dd244a4e485 100644 --- a/doc/sphinx/Pacemaker_Development/helpers.rst +++ b/doc/sphinx/Pacemaker_Development/helpers.rst @@ -167,8 +167,8 @@ you can see, there are already tests for other functions in this same file in the ``lib/common/tests/strings`` directory. * cd into ``lib/common/tests/strings`` -* Add the new file to the the ``check_PROGRAMS`` variable in ``Makefile.am``, - making it something like this: +* Add the new file to the ``check_PROGRAMS`` variable in ``Makefile.am``, making + it something like this: .. code-block:: none From 2b306f1f4e5aeb4212940620ec82e84137d7cbb4 Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Mon, 3 Jun 2024 12:09:47 -0400 Subject: [PATCH 028/364] Low: libpacemaker: Add spaces back to attrd_updater query output. Introduced by 8d12f32efa06878778c86045fb01ee2d0bbe05ab, but never in a final release. --- lib/pacemaker/pcmk_output.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pacemaker/pcmk_output.c b/lib/pacemaker/pcmk_output.c index 12a6710571c..e4a183614f0 100644 --- a/lib/pacemaker/pcmk_output.c +++ b/lib/pacemaker/pcmk_output.c @@ -2132,7 +2132,7 @@ cluster_status_html(pcmk__output_t *out, va_list args) if (legacy) { \ pcmk__g_strcat(s, k "=", pcmk__s(v, ""), " ", NULL); \ } else { \ - pcmk__g_strcat(s, k "=\"", pcmk__s(v, ""), "\"", NULL); \ + pcmk__g_strcat(s, k "=\"", pcmk__s(v, ""), "\" ", NULL); \ } \ } while (0) From 5c29b675b8b44c23c623a7c87d0982f9f977ec42 Mon Sep 17 00:00:00 2001 From: "Gao,Yan" Date: Wed, 5 Jun 2024 18:18:30 +0200 Subject: [PATCH 029/364] Fix: libpacemaker: correctly retrieve any existing fail-count for increment The attribute name of an nvpair for this should be "value". Regression introduced by ce3a9863df (not yet released). --- lib/pacemaker/pcmk_injections.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pacemaker/pcmk_injections.c b/lib/pacemaker/pcmk_injections.c index 60ddef91482..41bdea649fb 100644 --- a/lib/pacemaker/pcmk_injections.c +++ b/lib/pacemaker/pcmk_injections.c @@ -116,7 +116,7 @@ pcmk__inject_failcount(pcmk__output_t *out, cib_t *cib_conn, xmlNode *cib_node, pcmk__xe_id(cib_node), NULL, NULL, NULL, name, NULL, &output) == pcmk_rc_ok) { - if (crm_element_value_int(output, name, &failcount) != 0) { + if (crm_element_value_int(output, PCMK_XA_VALUE, &failcount) != 0) { failcount = 0; } } From be4f91c1745911556068d0cac0c03c799c723be8 Mon Sep 17 00:00:00 2001 From: tomyouyou Date: Thu, 6 Jun 2024 17:22:19 +0800 Subject: [PATCH 030/364] prevent to free 'op_reply' repeatedly in 'stonith_send_command' --- lib/fencing/st_client.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/fencing/st_client.c b/lib/fencing/st_client.c index 27ea86b5bef..17f4766944e 100644 --- a/lib/fencing/st_client.c +++ b/lib/fencing/st_client.c @@ -1639,12 +1639,14 @@ stonith_send_command(stonith_t * stonith, const char *op, xmlNode * data, xmlNod crm_err("Received bad reply: No id set"); crm_log_xml_err(op_reply, "Bad reply"); free_xml(op_reply); + op_reply = NULL; rc = -ENOMSG; } else { crm_err("Received bad reply: %d (wanted %d)", reply_id, stonith->call_id); crm_log_xml_err(op_reply, "Old reply"); free_xml(op_reply); + op_reply = NULL; rc = -ENOMSG; } From d79acb9b5e49ef9fb91d6b3d70f7a1c1fe8716d8 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 29 May 2024 17:20:47 -0500 Subject: [PATCH 031/364] Low: scheduler: use -INFINITY promotion score for inactive instances Previously they would be zero. This has no effect but is more logical. Suggested by Andrew Beekhof --- lib/pacemaker/pcmk_sched_promotable.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/pacemaker/pcmk_sched_promotable.c b/lib/pacemaker/pcmk_sched_promotable.c index fb8bb9a2050..8b12bd7f636 100644 --- a/lib/pacemaker/pcmk_sched_promotable.c +++ b/lib/pacemaker/pcmk_sched_promotable.c @@ -425,7 +425,14 @@ set_sort_index_to_node_score(gpointer data, gpointer user_data) "(unmanaged promoted)", child->id); - } else if ((chosen == NULL) || (child->sort_index < 0)) { + } else if (chosen == NULL) { + child->sort_index = -PCMK_SCORE_INFINITY; + pcmk__rsc_trace(clone, + "Final promotion priority for %s is %s " + "(will not be active)", + child->id, pcmk_readable_score(-PCMK_SCORE_INFINITY)); + + } else if (child->sort_index < 0) { pcmk__rsc_trace(clone, "Final sort index for %s is %d (ignoring node score)", child->id, child->sort_index); From 77923ea4fda453fc8f2cfb09d2a60261334ceb39 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 29 May 2024 17:21:18 -0500 Subject: [PATCH 032/364] Log: scheduler: improve promotion score message for inactive instances --- lib/pacemaker/pcmk_sched_promotable.c | 13 +++++++++---- lib/pengine/pe_output.c | 11 +++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/pacemaker/pcmk_sched_promotable.c b/lib/pacemaker/pcmk_sched_promotable.c index 8b12bd7f636..5977187244a 100644 --- a/lib/pacemaker/pcmk_sched_promotable.c +++ b/lib/pacemaker/pcmk_sched_promotable.c @@ -902,13 +902,18 @@ show_promotion_score(pcmk_resource_t *instance) out->message(out, "promotion-score", instance, chosen, pcmk_readable_score(instance->sort_index)); + + } else if (chosen == NULL) { + pcmk__rsc_debug(pe__const_top_resource(instance, false), + "%s promotion score (inactive): %s (priority=%d)", + instance->id, pcmk_readable_score(instance->sort_index), instance->priority); + } else { pcmk__rsc_debug(pe__const_top_resource(instance, false), - "%s promotion score on %s: sort=%s priority=%s", - instance->id, - ((chosen == NULL)? "none" : pcmk__node_name(chosen)), + "%s promotion score on %s: %s (priority=%d)", + instance->id, pcmk__node_name(chosen), pcmk_readable_score(instance->sort_index), - pcmk_readable_score(instance->priority)); + instance->priority); } } diff --git a/lib/pengine/pe_output.c b/lib/pengine/pe_output.c index b1cd8ccd797..7792983e0ae 100644 --- a/lib/pengine/pe_output.c +++ b/lib/pengine/pe_output.c @@ -2850,10 +2850,13 @@ promotion_score(pcmk__output_t *out, va_list args) pcmk_node_t *chosen = va_arg(args, pcmk_node_t *); const char *score = va_arg(args, const char *); - out->list_item(out, NULL, "%s promotion score on %s: %s", - child_rsc->id, - chosen? chosen->details->uname : "none", - score); + if (chosen == NULL) { + out->list_item(out, NULL, "%s promotion score (inactive): %s", + child_rsc->id, score); + } else { + out->list_item(out, NULL, "%s promotion score on %s: %s", + child_rsc->id, pcmk__node_name(chosen), score); + } return pcmk_rc_ok; } From 5725a1c1cf6e6010a25dd77193b582a2ade9b02a Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 3 Jun 2024 10:29:30 -0500 Subject: [PATCH 033/364] Test: cts-lab: rsyslog rate-limiting messages may vary in wording --- python/pacemaker/_cts/patterns.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/pacemaker/_cts/patterns.py b/python/pacemaker/_cts/patterns.py index 333eac4bfa8..03a405c708b 100644 --- a/python/pacemaker/_cts/patterns.py +++ b/python/pacemaker/_cts/patterns.py @@ -203,7 +203,7 @@ def __init__(self): r"Parameters to .* changed", r"pacemakerd.*\[[0-9]+\] terminated( with signal| as IPC server|$)", r"pacemaker-schedulerd.*Recover\s+.*\(.* -\> .*\)", - r"rsyslogd.* imuxsock lost .* messages from pid .* due to rate-limiting", + r"rsyslogd.* lost .* due to rate-limiting", r"Peer is not part of our cluster", r"We appear to be in an election loop", r"Unknown node -> we will not deliver message", From 2713eb3b31dfbabdcf3d0aae8a58c0d4bb46b681 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 4 Jun 2024 11:24:22 -0500 Subject: [PATCH 034/364] Low: libcrmcommon: bounds-check ISO 8601 duration elements Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=69432 --- lib/common/iso8601.c | 88 ++++++++++++++++++++++++++++---------------- 1 file changed, 57 insertions(+), 31 deletions(-) diff --git a/lib/common/iso8601.c b/lib/common/iso8601.c index 078f682089f..32ea9117212 100644 --- a/lib/common/iso8601.c +++ b/lib/common/iso8601.c @@ -1033,21 +1033,15 @@ parse_int(const char *str, int *result) { unsigned int lpc; int offset = (str[0] == 'T')? 1 : 0; - bool fraction = false; bool negate = false; *result = 0; - if (*str == '\0') { - return 0; - } // @TODO This cannot handle combinations of these characters switch (str[offset]) { case '.': case ',': - fraction = true; - offset++; - break; + return 0; // Fractions are not supported case '-': negate = true; @@ -1063,28 +1057,18 @@ parse_int(const char *str, int *result) break; } - for (lpc = 0; (fraction || (lpc < 10)) && isdigit(str[offset]); lpc++) { + for (lpc = 0; (lpc < 10) && isdigit(str[offset]); lpc++) { const int digit = str[offset++] - '0'; - if (fraction) { - /* @TODO The previous code here had bugs that always yielded a - * result of 0. Since it never worked, it has been removed rather - * than fixed. Effort would be better spent replacing our ISO 8601 - * code with GDateTime. - */ - } else { - // @TODO lpc == 9 could yield a 32-bit integer overflow - *result = *result * 10 + digit; + if ((*result * 10LL + digit) > INT_MAX) { + return 0; // Overflow } + *result = *result * 10 + digit; } if (negate) { *result = 0 - *result; } - if (lpc > 0) { - crm_trace("Found int: %d. Stopped at str[%d]='%c'", *result, lpc, str[lpc]); - return offset; - } - return 0; + return (lpc > 0)? offset : 0; } /*! @@ -1141,7 +1125,7 @@ crm_time_parse_duration(const char *period_s) rc = parse_int(current, &an_int); if (rc == 0) { crm_err("'%s' is not a valid ISO 8601 time duration " - "because no integer at '%s'", period_s, current); + "because no valid integer at '%s'", period_s, current); goto invalid; } current += rc; @@ -1151,30 +1135,72 @@ crm_time_parse_duration(const char *period_s) case 'Y': diff->years = an_int; break; + case 'M': - if (is_time) { - /* Minutes */ - diff->seconds += an_int * 60; - } else { + if (!is_time) { // Months diff->months = an_int; + + // Minutes + } else if ((diff->seconds + (an_int * 60LL)) > INT_MAX) { + crm_err("'%s' is not a valid ISO 8601 time duration " + "because integer at '%s' is too large", + period_s, current - rc); + goto invalid; + } else { + diff->seconds += an_int * 60; } break; + case 'W': - diff->days += an_int * 7; + if ((diff->days + (an_int * 7LL)) > INT_MAX) { + crm_err("'%s' is not a valid ISO 8601 time duration " + "because integer at '%s' is too large", + period_s, current - rc); + goto invalid; + } else { + diff->days += an_int * 7; + } break; + case 'D': - diff->days += an_int; + if ((diff->days + (long long) an_int) > INT_MAX) { + crm_err("'%s' is not a valid ISO 8601 time duration " + "because integer at '%s' is too large", + period_s, current - rc); + goto invalid; + } else { + diff->days += an_int; + } break; + case 'H': - diff->seconds += an_int * HOUR_SECONDS; + if ((diff->seconds + ((long long) an_int * HOUR_SECONDS)) + > INT_MAX) { + crm_err("'%s' is not a valid ISO 8601 time duration " + "because integer at '%s' is too large", + period_s, current - rc); + goto invalid; + } else { + diff->seconds += an_int * HOUR_SECONDS; + } break; + case 'S': - diff->seconds += an_int; + if ((diff->seconds + (long long) an_int) > INT_MAX) { + crm_err("'%s' is not a valid ISO 8601 time duration " + "because integer at '%s' is too large", + period_s, current - rc); + goto invalid; + } else { + diff->seconds += an_int; + } break; + case '\0': crm_err("'%s' is not a valid ISO 8601 time duration " "because no units after %d", period_s, an_int); goto invalid; + default: crm_err("'%s' is not a valid ISO 8601 time duration " "because '%c' is not a valid time unit", From 0f5500b7426547ba019a79e45e6ea8d47469ad8d Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 4 Jun 2024 12:16:26 -0500 Subject: [PATCH 035/364] Low: libcrmcommon: reject ISO 8601 duration without any values Setting duration TRUE before checking for legal values meant that the crm_time_is_defined() check near the end would always be true. --- lib/common/iso8601.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/common/iso8601.c b/lib/common/iso8601.c index 32ea9117212..cf29bfe386f 100644 --- a/lib/common/iso8601.c +++ b/lib/common/iso8601.c @@ -1104,7 +1104,6 @@ crm_time_parse_duration(const char *period_s) } diff = crm_time_new_undefined(); - diff->duration = TRUE; for (const char *current = period_s + 1; current[0] && (current[0] != '/') && !isspace(current[0]); @@ -1214,6 +1213,8 @@ crm_time_parse_duration(const char *period_s) "because no amounts and units given", period_s); goto invalid; } + + diff->duration = TRUE; return diff; invalid: From 5bc27d916685c34ad6efe38f6913a8850af612b3 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 4 Jun 2024 12:19:09 -0500 Subject: [PATCH 036/364] Test: libcrmcommon: add unit tests for crm_time_parse_duration() --- lib/common/tests/iso8601/Makefile.am | 3 +- .../iso8601/crm_time_parse_duration_test.c | 92 +++++++++++++++++++ 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 lib/common/tests/iso8601/crm_time_parse_duration_test.c diff --git a/lib/common/tests/iso8601/Makefile.am b/lib/common/tests/iso8601/Makefile.am index 5135f4706be..8a9b581c31d 100644 --- a/lib/common/tests/iso8601/Makefile.am +++ b/lib/common/tests/iso8601/Makefile.am @@ -11,7 +11,8 @@ include $(top_srcdir)/mk/tap.mk include $(top_srcdir)/mk/unittest.mk # Add "_test" to the end of all test program names to simplify .gitignore. -check_PROGRAMS = pcmk__add_time_from_xml_test \ +check_PROGRAMS = crm_time_parse_duration_test \ + pcmk__add_time_from_xml_test \ pcmk__readable_interval_test \ pcmk__set_time_if_earlier_test \ pcmk__time_format_hr_test diff --git a/lib/common/tests/iso8601/crm_time_parse_duration_test.c b/lib/common/tests/iso8601/crm_time_parse_duration_test.c new file mode 100644 index 00000000000..d614760bca6 --- /dev/null +++ b/lib/common/tests/iso8601/crm_time_parse_duration_test.c @@ -0,0 +1,92 @@ +/* + * Copyright 2024 the Pacemaker project contributors + * + * The version control history for this file may have further details. + * + * This source code is licensed under the GNU General Public License version 2 + * or later (GPLv2+) WITHOUT ANY WARRANTY. + */ + +#include + +#include + +#include +#include "crmcommon_private.h" + +static void +empty_arg(void **state) +{ + assert_null(crm_time_parse_duration(NULL)); + assert_null(crm_time_parse_duration("")); +} + +static void +invalid_arg(void **state) +{ + // Valid except doesn't start with P + assert_null(crm_time_parse_duration("X3Y6M4DT12H30M5S")); + + // Illegal character after P + assert_null(crm_time_parse_duration("P")); + assert_null(crm_time_parse_duration("P 3Y6M4DT12H30M5S")); + assert_null(crm_time_parse_duration("PX3Y6M4DT12H30M5S")); + + // Integer overflow + assert_null(crm_time_parse_duration("P2147483648Y6M4DT12H30M5S")); + assert_null(crm_time_parse_duration("P3Y2147483648M4DT12H30M5S")); + assert_null(crm_time_parse_duration("P3Y6M2147483648DT12H30M5S")); + assert_null(crm_time_parse_duration("P3Y6M4DT2147483648H30M5S")); + assert_null(crm_time_parse_duration("P3Y6M4DT12H2147483648M5S")); + assert_null(crm_time_parse_duration("P3Y6M4DT12H30MP2147483648S")); + + // Missing or invalid units + assert_null(crm_time_parse_duration("P3Y6M4DT12H30M5")); + assert_null(crm_time_parse_duration("P3Y6M4DT12H30M5X")); + assert_null(crm_time_parse_duration("P3X6M4DT12H30M5S")); + assert_null(crm_time_parse_duration("PT")); + assert_null(crm_time_parse_duration("P/")); + +#if 0 + // @TODO The current implementation treats these as valid + + // Units out of order + assert_null(crm_time_parse_duration("P6M3Y4DT12H30M5S")); + assert_null(crm_time_parse_duration("P6M3DT12HY430M5S")); + + // Same unit specified multiple times + assert_null(crm_time_parse_duration("P6Y4M3D1MT12H30M5S")); + + // Weeks mixed with other units + assert_null(crm_time_parse_duration("P6Y4M3W3D1MT12H30M5S")); + assert_null(crm_time_parse_duration("P3WT12H30M5S")); +#endif +} + +static void +valid_arg(void **state) +{ + // @TODO Check result value + assert_non_null(crm_time_parse_duration("P3Y6M4DT12H30M5S")); + assert_non_null(crm_time_parse_duration("P3Y6M4DT12H30M")); + assert_non_null(crm_time_parse_duration("P3Y6M4D")); + assert_non_null(crm_time_parse_duration("P1M")); // 1 month + assert_non_null(crm_time_parse_duration("PT1M")); // 1 minute + assert_non_null(crm_time_parse_duration("P7W")); + +#if 0 + // @TODO Current implementation can't handle these cases + + // Fractional value for last unit + assert_non_null(crm_time_parse_duration("P3Y6M4DT12H30.5M")); + assert_non_null(crm_time_parse_duration("P3Y6M4DT12H30,5M")); + + // P--
T:: format + assert_non_null(crm_time_parse_duration("P0003-02-01T11:10:09"); +#endif +} + +PCMK__UNIT_TEST(NULL, NULL, + cmocka_unit_test(empty_arg), + cmocka_unit_test(invalid_arg), + cmocka_unit_test(valid_arg)); From 2186d4be466367fd22b7bf0d6af7bedd6f9b87ad Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 29 May 2024 17:25:58 -0500 Subject: [PATCH 037/364] Test: scheduler: update expected output for recent changes --- cts/scheduler/scores/bug-1572-1.scores | 4 +-- cts/scheduler/scores/bug-1572-2.scores | 4 +-- cts/scheduler/scores/bug-1685.scores | 2 +- cts/scheduler/scores/bug-1765.scores | 4 +-- cts/scheduler/scores/bug-1822.scores | 2 +- cts/scheduler/scores/bug-5059.scores | 2 +- .../scores/bug-5140-require-all-false.scores | 8 ++--- .../scores/bug-5143-ms-shuffle.scores | 2 +- cts/scheduler/scores/bug-cl-5168.scores | 2 +- cts/scheduler/scores/bug-cl-5212.scores | 4 +-- cts/scheduler/scores/bug-cl-5247.scores | 2 +- cts/scheduler/scores/bug-lf-1852.scores | 2 +- cts/scheduler/scores/bug-lf-2153.scores | 2 +- cts/scheduler/scores/bug-lf-2358.scores | 4 +-- cts/scheduler/scores/bug-lf-2544.scores | 4 +-- cts/scheduler/scores/bug-lf-2606.scores | 2 +- .../scores/bundle-probe-order-1.scores | 6 ++-- .../scores/bundle-probe-order-2.scores | 6 ++-- .../scores/bundle-probe-order-3.scores | 6 ++-- cts/scheduler/scores/clone-no-shuffle.scores | 2 +- .../clone-requires-quorum-recovery.scores | 2 +- .../scores/clone-requires-quorum.scores | 2 +- .../scores/coloc-unpromoted-anti.scores | 2 +- .../scores/colocate-unmanaged-group.scores | 4 +-- .../scores/colocation-influence.scores | 22 +++++++------- ...olocation_constraint_stops_promoted.scores | 4 +-- ...ocation_constraint_stops_unpromoted.scores | 2 +- cts/scheduler/scores/dc-fence-ordering.scores | 10 +++---- cts/scheduler/scores/group14.scores | 16 +++++----- cts/scheduler/scores/history-1.scores | 2 +- cts/scheduler/scores/inc12.scores | 24 +++++++-------- .../scores/leftover-pending-monitor.scores | 2 +- cts/scheduler/scores/migrate-fencing.scores | 2 +- cts/scheduler/scores/migrate-partial-4.scores | 30 +++++++++---------- cts/scheduler/scores/migrate-shutdown.scores | 8 ++--- .../migration-intermediary-cleaned.scores | 4 +-- cts/scheduler/scores/no_quorum_demote.scores | 6 ++-- cts/scheduler/scores/novell-239082.scores | 4 +-- cts/scheduler/scores/on_fail_demote4.scores | 8 ++--- .../one-or-more-unrunnable-instances.scores | 12 ++++---- .../order_constraint_stops_promoted.scores | 2 +- cts/scheduler/scores/probe-2.scores | 4 +-- cts/scheduler/scores/probe-3.scores | 2 +- cts/scheduler/scores/probe-4.scores | 2 +- cts/scheduler/scores/promoted-0.scores | 2 +- cts/scheduler/scores/promoted-1.scores | 2 +- cts/scheduler/scores/promoted-10.scores | 2 +- cts/scheduler/scores/promoted-12.scores | 2 +- cts/scheduler/scores/promoted-13.scores | 2 +- cts/scheduler/scores/promoted-2.scores | 2 +- cts/scheduler/scores/promoted-3.scores | 2 +- cts/scheduler/scores/promoted-7.scores | 4 +-- cts/scheduler/scores/promoted-8.scores | 4 +-- cts/scheduler/scores/promoted-9.scores | 12 ++++---- .../scores/promoted-asymmetrical-order.scores | 4 +-- cts/scheduler/scores/promoted-demote.scores | 2 +- cts/scheduler/scores/promoted-depend.scores | 2 +- .../scores/promoted-dependent-ban.scores | 2 +- .../scores/promoted-failed-demote-2.scores | 2 +- .../scores/promoted-failed-demote.scores | 2 +- cts/scheduler/scores/promoted-ordering.scores | 4 +-- .../promoted-promotion-constraint.scores | 2 +- cts/scheduler/scores/promoted-stop.scores | 2 +- .../scores/promoted-unmanaged-monitor.scores | 2 +- .../scores/promoted_monitor_restart.scores | 2 +- cts/scheduler/scores/rec-node-13.scores | 12 ++++---- .../remote-connection-unrecoverable.scores | 4 +-- cts/scheduler/scores/remote-orphaned.scores | 2 +- .../scores/remote-reconnect-delay.scores | 2 +- .../scores/remote-recover-all.scores | 28 ++++++++--------- .../scores/remote-recover-connection.scores | 26 ++++++++-------- .../scores/remote-recover-no-resources.scores | 28 ++++++++--------- .../scores/remote-recover-unknown.scores | 28 ++++++++--------- cts/scheduler/scores/remote-recovery.scores | 26 ++++++++-------- .../scores/remote-stale-node-entry.scores | 6 ++-- cts/scheduler/scores/rsc-sets-promoted.scores | 2 +- cts/scheduler/scores/stonith-0.scores | 8 ++--- cts/scheduler/scores/stonith-1.scores | 4 +-- cts/scheduler/scores/stonith-2.scores | 4 +-- cts/scheduler/scores/target-1.scores | 2 +- cts/scheduler/scores/ticket-promoted-1.scores | 4 +-- .../scores/ticket-promoted-13.scores | 4 +-- .../scores/ticket-promoted-14.scores | 4 +-- .../scores/ticket-promoted-15.scores | 4 +-- .../scores/ticket-promoted-21.scores | 2 +- cts/scheduler/scores/ticket-promoted-3.scores | 4 +-- cts/scheduler/scores/ticket-promoted-9.scores | 2 +- cts/scheduler/scores/whitebox-fail3.scores | 4 +-- 88 files changed, 258 insertions(+), 258 deletions(-) diff --git a/cts/scheduler/scores/bug-1572-1.scores b/cts/scheduler/scores/bug-1572-1.scores index f575a4f8f47..a16b52c9f5d 100644 --- a/cts/scheduler/scores/bug-1572-1.scores +++ b/cts/scheduler/scores/bug-1572-1.scores @@ -23,6 +23,6 @@ pcmk__primitive_assign: rsc_drbd_7788:0 allocation score on arc-dknightlx: -INFI pcmk__primitive_assign: rsc_drbd_7788:0 allocation score on arc-tkincaidlx.wsicorp.com: -INFINITY pcmk__primitive_assign: rsc_drbd_7788:1 allocation score on arc-dknightlx: -INFINITY pcmk__primitive_assign: rsc_drbd_7788:1 allocation score on arc-tkincaidlx.wsicorp.com: 101 -rsc_drbd_7788:0 promotion score on none: 0 +rsc_drbd_7788:0 promotion score (inactive): -INFINITY rsc_drbd_7788:1 promotion score on arc-tkincaidlx.wsicorp.com: 200 -rsc_drbd_7788:2 promotion score on none: 0 +rsc_drbd_7788:2 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/bug-1572-2.scores b/cts/scheduler/scores/bug-1572-2.scores index 80b07c48621..395552a7cc5 100644 --- a/cts/scheduler/scores/bug-1572-2.scores +++ b/cts/scheduler/scores/bug-1572-2.scores @@ -23,6 +23,6 @@ pcmk__primitive_assign: rsc_drbd_7788:0 allocation score on arc-dknightlx: -INFI pcmk__primitive_assign: rsc_drbd_7788:0 allocation score on arc-tkincaidlx.wsicorp.com: -INFINITY pcmk__primitive_assign: rsc_drbd_7788:1 allocation score on arc-dknightlx: -INFINITY pcmk__primitive_assign: rsc_drbd_7788:1 allocation score on arc-tkincaidlx.wsicorp.com: 1 -rsc_drbd_7788:0 promotion score on none: 0 +rsc_drbd_7788:0 promotion score (inactive): -INFINITY rsc_drbd_7788:1 promotion score on arc-tkincaidlx.wsicorp.com: -1 -rsc_drbd_7788:2 promotion score on none: 0 +rsc_drbd_7788:2 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/bug-1685.scores b/cts/scheduler/scores/bug-1685.scores index fef220e241e..51a7fc4c9a7 100644 --- a/cts/scheduler/scores/bug-1685.scores +++ b/cts/scheduler/scores/bug-1685.scores @@ -13,4 +13,4 @@ pcmk__primitive_assign: shared_filesystem allocation score on redun1: -INFINITY pcmk__primitive_assign: shared_filesystem allocation score on redun2: 875 prim_shared_storage:0 promotion score on redun2: 75 prim_shared_storage:1 promotion score on redun1: 75 -prim_shared_storage:2 promotion score on none: 0 +prim_shared_storage:2 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/bug-1765.scores b/cts/scheduler/scores/bug-1765.scores index 7ee39af92e1..4a327d94581 100644 --- a/cts/scheduler/scores/bug-1765.scores +++ b/cts/scheduler/scores/bug-1765.scores @@ -1,10 +1,10 @@ drbd0:0 promotion score on sles236: INFINITY drbd0:1 promotion score on sles238: -INFINITY -drbd0:2 promotion score on none: 0 +drbd0:2 promotion score (inactive): -INFINITY drbd1:0 promotion score on sles238: 75 drbd1:1 promotion score on sles236: 75 -drbd1:2 promotion score on none: 0 +drbd1:2 promotion score (inactive): -INFINITY pcmk__clone_assign: drbd0:0 allocation score on sles236: 76 pcmk__clone_assign: drbd0:0 allocation score on sles238: 75 pcmk__clone_assign: drbd0:1 allocation score on sles236: 10 diff --git a/cts/scheduler/scores/bug-1822.scores b/cts/scheduler/scores/bug-1822.scores index 0a9056bbf3e..4d3d4184104 100644 --- a/cts/scheduler/scores/bug-1822.scores +++ b/cts/scheduler/scores/bug-1822.scores @@ -1,6 +1,6 @@ ms-sf_group:0 promotion score on process2b: 49 -ms-sf_group:1 promotion score on none: 0 +ms-sf_group:1 promotion score (inactive): -INFINITY pcmk__clone_assign: ms-sf allocation score on process1a: 0 pcmk__clone_assign: ms-sf allocation score on process2b: 0 pcmk__clone_assign: ms-sf_group:0 allocation score on process1a: 0 diff --git a/cts/scheduler/scores/bug-5059.scores b/cts/scheduler/scores/bug-5059.scores index 5cbe9c316c5..f7f94f873fe 100644 --- a/cts/scheduler/scores/bug-5059.scores +++ b/cts/scheduler/scores/bug-5059.scores @@ -1,7 +1,7 @@ g_stateful:0 promotion score on gluster01.h: 5 g_stateful:1 promotion score on gluster02.h: 5 -g_stateful:2 promotion score on none: 0 +g_stateful:2 promotion score (inactive): -INFINITY pcmk__clone_assign: c_dummy allocation score on gluster01.h: 0 pcmk__clone_assign: c_dummy allocation score on gluster02.h: 0 pcmk__clone_assign: c_dummy allocation score on gluster03.h: 0 diff --git a/cts/scheduler/scores/bug-5140-require-all-false.scores b/cts/scheduler/scores/bug-5140-require-all-false.scores index 2922f2e708c..de46d1397f6 100644 --- a/cts/scheduler/scores/bug-5140-require-all-false.scores +++ b/cts/scheduler/scores/bug-5140-require-all-false.scores @@ -1,8 +1,8 @@ -drbd-r0:0 promotion score on none: 0 -drbd-r0:1 promotion score on none: 0 -drbd-r1:0 promotion score on none: 0 -drbd-r1:1 promotion score on none: 0 +drbd-r0:0 promotion score (inactive): -INFINITY +drbd-r0:1 promotion score (inactive): -INFINITY +drbd-r1:0 promotion score (inactive): -INFINITY +drbd-r1:1 promotion score (inactive): -INFINITY pcmk__clone_assign: baseclone allocation score on hex-1: 0 pcmk__clone_assign: baseclone allocation score on hex-2: 0 pcmk__clone_assign: baseclone allocation score on hex-3: 0 diff --git a/cts/scheduler/scores/bug-5143-ms-shuffle.scores b/cts/scheduler/scores/bug-5143-ms-shuffle.scores index 87bb4e4e26a..cfa26b560d6 100644 --- a/cts/scheduler/scores/bug-5143-ms-shuffle.scores +++ b/cts/scheduler/scores/bug-5143-ms-shuffle.scores @@ -1,7 +1,7 @@ drbd-r0:0 promotion score on hex-1: 10000 drbd-r0:1 promotion score on hex-2: 10000 -drbd-r0:2 promotion score on none: 0 +drbd-r0:2 promotion score (inactive): -INFINITY drbd-r1:0 promotion score on hex-2: -1 drbd-r1:1 promotion score on hex-3: 10000 pcmk__clone_assign: baseclone allocation score on hex-1: 0 diff --git a/cts/scheduler/scores/bug-cl-5168.scores b/cts/scheduler/scores/bug-cl-5168.scores index 59dee5d39b3..4463d3430a6 100644 --- a/cts/scheduler/scores/bug-cl-5168.scores +++ b/cts/scheduler/scores/bug-cl-5168.scores @@ -3,7 +3,7 @@ drbd-r0:0 promotion score on hex-2: -1 drbd-r0:1 promotion score on hex-1: INFINITY drbd-r1:0 promotion score on hex-2: 1000 drbd-r1:1 promotion score on hex-3: INFINITY -drbd-r1:2 promotion score on none: 0 +drbd-r1:2 promotion score (inactive): -INFINITY pcmk__clone_assign: baseclone allocation score on hex-1: 0 pcmk__clone_assign: baseclone allocation score on hex-2: 0 pcmk__clone_assign: baseclone allocation score on hex-3: 0 diff --git a/cts/scheduler/scores/bug-cl-5212.scores b/cts/scheduler/scores/bug-cl-5212.scores index 58f663adb54..45e2f112ad5 100644 --- a/cts/scheduler/scores/bug-cl-5212.scores +++ b/cts/scheduler/scores/bug-cl-5212.scores @@ -68,6 +68,6 @@ pcmk__primitive_assign: prmStonith2-1 allocation score on srv03: 0 pcmk__primitive_assign: prmStonith3-1 allocation score on srv01: INFINITY pcmk__primitive_assign: prmStonith3-1 allocation score on srv02: 0 pcmk__primitive_assign: prmStonith3-1 allocation score on srv03: -INFINITY -pgsql:0 promotion score on none: 0 -pgsql:1 promotion score on none: 0 +pgsql:0 promotion score (inactive): -INFINITY +pgsql:1 promotion score (inactive): -INFINITY pgsql:2 promotion score on srv03: 105 diff --git a/cts/scheduler/scores/bug-cl-5247.scores b/cts/scheduler/scores/bug-cl-5247.scores index 166f62f7268..ef047a35714 100644 --- a/cts/scheduler/scores/bug-cl-5247.scores +++ b/cts/scheduler/scores/bug-cl-5247.scores @@ -79,5 +79,5 @@ pcmk__primitive_assign: vip-rep allocation score on bl460g8n3: -INFINITY pcmk__primitive_assign: vip-rep allocation score on bl460g8n4: -INFINITY pcmk__primitive_assign: vip-rep allocation score on pgsr01: 0 pcmk__primitive_assign: vip-rep allocation score on pgsr02: -INFINITY -pgsql:0 promotion score on none: 0 +pgsql:0 promotion score (inactive): -INFINITY pgsql:1 promotion score on pgsr01: 10 diff --git a/cts/scheduler/scores/bug-lf-1852.scores b/cts/scheduler/scores/bug-lf-1852.scores index 041a3f93b9a..ef11cbcf614 100644 --- a/cts/scheduler/scores/bug-lf-1852.scores +++ b/cts/scheduler/scores/bug-lf-1852.scores @@ -1,7 +1,7 @@ drbd0:0 promotion score on mysql-02: INFINITY drbd0:1 promotion score on mysql-01: 75 -drbd0:2 promotion score on none: 0 +drbd0:2 promotion score (inactive): -INFINITY pcmk__clone_assign: drbd0:0 allocation score on mysql-01: 0 pcmk__clone_assign: drbd0:0 allocation score on mysql-02: INFINITY pcmk__clone_assign: drbd0:1 allocation score on mysql-01: 75 diff --git a/cts/scheduler/scores/bug-lf-2153.scores b/cts/scheduler/scores/bug-lf-2153.scores index afad730d99f..6a8112b9392 100644 --- a/cts/scheduler/scores/bug-lf-2153.scores +++ b/cts/scheduler/scores/bug-lf-2153.scores @@ -49,5 +49,5 @@ pcmk__primitive_assign: res_tgtd:0 allocation score on alice: -INFINITY pcmk__primitive_assign: res_tgtd:0 allocation score on bob: -INFINITY pcmk__primitive_assign: res_tgtd:1 allocation score on alice: 1700 pcmk__primitive_assign: res_tgtd:1 allocation score on bob: -INFINITY -res_drbd_iscsivg01:0 promotion score on none: 0 +res_drbd_iscsivg01:0 promotion score (inactive): -INFINITY res_drbd_iscsivg01:1 promotion score on alice: 3100 diff --git a/cts/scheduler/scores/bug-lf-2358.scores b/cts/scheduler/scores/bug-lf-2358.scores index 7960ab19729..422d9d8ea11 100644 --- a/cts/scheduler/scores/bug-lf-2358.scores +++ b/cts/scheduler/scores/bug-lf-2358.scores @@ -75,5 +75,5 @@ res_drbd_mysql1:0 promotion score on bob.demo: 0 res_drbd_mysql1:1 promotion score on alice.demo: -INFINITY res_drbd_mysql2:0 promotion score on bob.demo: 10000 res_drbd_mysql2:1 promotion score on alice.demo: 10000 -res_drbd_nfsexport:0 promotion score on none: 0 -res_drbd_nfsexport:1 promotion score on none: 0 +res_drbd_nfsexport:0 promotion score (inactive): -INFINITY +res_drbd_nfsexport:1 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/bug-lf-2544.scores b/cts/scheduler/scores/bug-lf-2544.scores index 98937a9dd7e..80280748877 100644 --- a/cts/scheduler/scores/bug-lf-2544.scores +++ b/cts/scheduler/scores/bug-lf-2544.scores @@ -11,5 +11,5 @@ pcmk__primitive_assign: s0:1 allocation score on node-0: -INFINITY pcmk__primitive_assign: s0:1 allocation score on node-1: 6 s0:0 promotion score on node-0: 5 s0:1 promotion score on node-1: INFINITY -s0:2 promotion score on none: 0 -s0:3 promotion score on none: 0 +s0:2 promotion score (inactive): -INFINITY +s0:3 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/bug-lf-2606.scores b/cts/scheduler/scores/bug-lf-2606.scores index d109cb3437c..9713c30f2ee 100644 --- a/cts/scheduler/scores/bug-lf-2606.scores +++ b/cts/scheduler/scores/bug-lf-2606.scores @@ -16,4 +16,4 @@ pcmk__primitive_assign: rsc3:1 allocation score on node2: -INFINITY pcmk__primitive_assign: rsc_stonith allocation score on node1: 0 pcmk__primitive_assign: rsc_stonith allocation score on node2: 0 rsc3:0 promotion score on node1: -1 -rsc3:1 promotion score on none: 0 +rsc3:1 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/bundle-probe-order-1.scores b/cts/scheduler/scores/bundle-probe-order-1.scores index edaaaa359ad..e8171f22ac3 100644 --- a/cts/scheduler/scores/bundle-probe-order-1.scores +++ b/cts/scheduler/scores/bundle-probe-order-1.scores @@ -1,7 +1,7 @@ -galera:0 promotion score on none: 0 -galera:1 promotion score on none: 0 -galera:2 promotion score on none: 0 +galera:0 promotion score (inactive): -INFINITY +galera:1 promotion score (inactive): -INFINITY +galera:2 promotion score (inactive): -INFINITY pcmk__bundle_assign: galera-bundle allocation score on centos1: -INFINITY pcmk__bundle_assign: galera-bundle allocation score on centos2: 0 pcmk__bundle_assign: galera-bundle allocation score on centos3: -INFINITY diff --git a/cts/scheduler/scores/bundle-probe-order-2.scores b/cts/scheduler/scores/bundle-probe-order-2.scores index 2de3bbc1ab8..77549143446 100644 --- a/cts/scheduler/scores/bundle-probe-order-2.scores +++ b/cts/scheduler/scores/bundle-probe-order-2.scores @@ -1,7 +1,7 @@ -galera:0 promotion score on none: 0 -galera:1 promotion score on none: 0 -galera:2 promotion score on none: 0 +galera:0 promotion score (inactive): -INFINITY +galera:1 promotion score (inactive): -INFINITY +galera:2 promotion score (inactive): -INFINITY pcmk__bundle_assign: galera-bundle allocation score on centos1: -INFINITY pcmk__bundle_assign: galera-bundle allocation score on centos2: 0 pcmk__bundle_assign: galera-bundle allocation score on centos3: -INFINITY diff --git a/cts/scheduler/scores/bundle-probe-order-3.scores b/cts/scheduler/scores/bundle-probe-order-3.scores index e63fa8475a5..3e3435c59c4 100644 --- a/cts/scheduler/scores/bundle-probe-order-3.scores +++ b/cts/scheduler/scores/bundle-probe-order-3.scores @@ -1,7 +1,7 @@ -galera:0 promotion score on none: 0 -galera:1 promotion score on none: 0 -galera:2 promotion score on none: 0 +galera:0 promotion score (inactive): -INFINITY +galera:1 promotion score (inactive): -INFINITY +galera:2 promotion score (inactive): -INFINITY pcmk__bundle_assign: galera-bundle allocation score on centos1: -INFINITY pcmk__bundle_assign: galera-bundle allocation score on centos2: 0 pcmk__bundle_assign: galera-bundle allocation score on centos3: -INFINITY diff --git a/cts/scheduler/scores/clone-no-shuffle.scores b/cts/scheduler/scores/clone-no-shuffle.scores index a51c17a1427..17230a964fc 100644 --- a/cts/scheduler/scores/clone-no-shuffle.scores +++ b/cts/scheduler/scores/clone-no-shuffle.scores @@ -1,5 +1,5 @@ -drbd1:0 promotion score on none: 0 +drbd1:0 promotion score (inactive): -INFINITY drbd1:1 promotion score on dktest1sles10: -1 pcmk__clone_assign: drbd1:0 allocation score on dktest1sles10: 0 pcmk__clone_assign: drbd1:0 allocation score on dktest2sles10: -INFINITY diff --git a/cts/scheduler/scores/clone-requires-quorum-recovery.scores b/cts/scheduler/scores/clone-requires-quorum-recovery.scores index 1f411574503..96db1e9cfcd 100644 --- a/cts/scheduler/scores/clone-requires-quorum-recovery.scores +++ b/cts/scheduler/scores/clone-requires-quorum-recovery.scores @@ -2,7 +2,7 @@ dummy-boss:0 promotion score on rhel7-3: 10 dummy-boss:1 promotion score on rhel7-4: 5 dummy-boss:2 promotion score on rhel7-2: 5 -dummy-boss:3 promotion score on none: 0 +dummy-boss:3 promotion score (inactive): -INFINITY pcmk__clone_assign: dummy-boss-clone allocation score on rhel7-1: 0 pcmk__clone_assign: dummy-boss-clone allocation score on rhel7-2: 0 pcmk__clone_assign: dummy-boss-clone allocation score on rhel7-3: 0 diff --git a/cts/scheduler/scores/clone-requires-quorum.scores b/cts/scheduler/scores/clone-requires-quorum.scores index aa309fe5a7c..f04e07436cf 100644 --- a/cts/scheduler/scores/clone-requires-quorum.scores +++ b/cts/scheduler/scores/clone-requires-quorum.scores @@ -2,7 +2,7 @@ dummy-boss:0 promotion score on rhel7-3: 10 dummy-boss:1 promotion score on rhel7-4: 5 dummy-boss:2 promotion score on rhel7-2: 5 -dummy-boss:3 promotion score on none: 0 +dummy-boss:3 promotion score (inactive): -INFINITY pcmk__clone_assign: dummy-boss-clone allocation score on rhel7-1: 0 pcmk__clone_assign: dummy-boss-clone allocation score on rhel7-2: 0 pcmk__clone_assign: dummy-boss-clone allocation score on rhel7-3: 0 diff --git a/cts/scheduler/scores/coloc-unpromoted-anti.scores b/cts/scheduler/scores/coloc-unpromoted-anti.scores index c1ddf4b95c6..0e4b97f2fc5 100644 --- a/cts/scheduler/scores/coloc-unpromoted-anti.scores +++ b/cts/scheduler/scores/coloc-unpromoted-anti.scores @@ -1,7 +1,7 @@ drbd-r0:0 promotion score on pollux: 425 drbd-r0:1 promotion score on sirius: 375 -drbd-r0:2 promotion score on none: 0 +drbd-r0:2 promotion score (inactive): -INFINITY pcmk__clone_assign: drbd-msr allocation score on pollux: 0 pcmk__clone_assign: drbd-msr allocation score on sirius: 0 pcmk__clone_assign: drbd-r0:0 allocation score on pollux: 275 diff --git a/cts/scheduler/scores/colocate-unmanaged-group.scores b/cts/scheduler/scores/colocate-unmanaged-group.scores index d04d0b72988..636f2fb04a4 100644 --- a/cts/scheduler/scores/colocate-unmanaged-group.scores +++ b/cts/scheduler/scores/colocate-unmanaged-group.scores @@ -23,5 +23,5 @@ pcmk__primitive_assign: prmStateful:0 allocation score on rh80-test01: -INFINITY pcmk__primitive_assign: prmStateful:0 allocation score on rh80-test02: -INFINITY pcmk__primitive_assign: prmStateful:1 allocation score on rh80-test01: -INFINITY pcmk__primitive_assign: prmStateful:1 allocation score on rh80-test02: -INFINITY -prmStateful:0 promotion score on none: 0 -prmStateful:1 promotion score on none: 0 +prmStateful:0 promotion score (inactive): -INFINITY +prmStateful:1 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/colocation-influence.scores b/cts/scheduler/scores/colocation-influence.scores index 2eb86ec947d..681f1ef38bc 100644 --- a/cts/scheduler/scores/colocation-influence.scores +++ b/cts/scheduler/scores/colocation-influence.scores @@ -657,17 +657,17 @@ rsc13b:0 promotion score on rhel7-3: 10 rsc13b:1 promotion score on rhel7-4: 5 rsc13b:2 promotion score on rhel7-1: 5 rsc13b:3 promotion score on rhel7-2: 5 -rsc13b:4 promotion score on none: 0 -rsc13b:5 promotion score on none: 0 -rsc13b:6 promotion score on none: 0 -rsc13b:7 promotion score on none: 0 -rsc13b:8 promotion score on none: 0 +rsc13b:4 promotion score (inactive): -INFINITY +rsc13b:5 promotion score (inactive): -INFINITY +rsc13b:6 promotion score (inactive): -INFINITY +rsc13b:7 promotion score (inactive): -INFINITY +rsc13b:8 promotion score (inactive): -INFINITY rsc14a:0 promotion score on rhel7-3: -INFINITY -rsc14a:1 promotion score on none: 0 +rsc14a:1 promotion score (inactive): -INFINITY rsc14a:2 promotion score on rhel7-1: -INFINITY rsc14a:3 promotion score on rhel7-2: -INFINITY -rsc14a:4 promotion score on none: 0 -rsc14a:5 promotion score on none: 0 -rsc14a:6 promotion score on none: 0 -rsc14a:7 promotion score on none: 0 -rsc14a:8 promotion score on none: 0 +rsc14a:4 promotion score (inactive): -INFINITY +rsc14a:5 promotion score (inactive): -INFINITY +rsc14a:6 promotion score (inactive): -INFINITY +rsc14a:7 promotion score (inactive): -INFINITY +rsc14a:8 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/colocation_constraint_stops_promoted.scores b/cts/scheduler/scores/colocation_constraint_stops_promoted.scores index 2b89b1db613..0f8731982c6 100644 --- a/cts/scheduler/scores/colocation_constraint_stops_promoted.scores +++ b/cts/scheduler/scores/colocation_constraint_stops_promoted.scores @@ -1,6 +1,6 @@ -NATIVE_RSC_A:0 promotion score on none: 0 -NATIVE_RSC_A:1 promotion score on none: 0 +NATIVE_RSC_A:0 promotion score (inactive): -INFINITY +NATIVE_RSC_A:1 promotion score (inactive): -INFINITY pcmk__clone_assign: NATIVE_RSC_A:0 allocation score on fc16-builder2: -INFINITY pcmk__clone_assign: NATIVE_RSC_A:0 allocation score on fc16-builder: -INFINITY pcmk__clone_assign: PROMOTABLE_RSC_A allocation score on fc16-builder2: -INFINITY diff --git a/cts/scheduler/scores/colocation_constraint_stops_unpromoted.scores b/cts/scheduler/scores/colocation_constraint_stops_unpromoted.scores index fe2f35a2fc2..d31831ccea9 100644 --- a/cts/scheduler/scores/colocation_constraint_stops_unpromoted.scores +++ b/cts/scheduler/scores/colocation_constraint_stops_unpromoted.scores @@ -1,5 +1,5 @@ -NATIVE_RSC_A:0 promotion score on none: 0 +NATIVE_RSC_A:0 promotion score (inactive): -INFINITY pcmk__clone_assign: NATIVE_RSC_A:0 allocation score on fc16-builder2: -INFINITY pcmk__clone_assign: NATIVE_RSC_A:0 allocation score on fc16-builder: -INFINITY pcmk__clone_assign: PROMOTABLE_RSC_A allocation score on fc16-builder2: -INFINITY diff --git a/cts/scheduler/scores/dc-fence-ordering.scores b/cts/scheduler/scores/dc-fence-ordering.scores index d55c7e1768e..e5c36c11266 100644 --- a/cts/scheduler/scores/dc-fence-ordering.scores +++ b/cts/scheduler/scores/dc-fence-ordering.scores @@ -194,8 +194,8 @@ pcmk__primitive_assign: stateful-1:4 allocation score on rhel7-2: -INFINITY pcmk__primitive_assign: stateful-1:4 allocation score on rhel7-3: -INFINITY pcmk__primitive_assign: stateful-1:4 allocation score on rhel7-4: -INFINITY pcmk__primitive_assign: stateful-1:4 allocation score on rhel7-5: -INFINITY -stateful-1:0 promotion score on none: 0 -stateful-1:1 promotion score on none: 0 -stateful-1:2 promotion score on none: 0 -stateful-1:3 promotion score on none: 0 -stateful-1:4 promotion score on none: 0 +stateful-1:0 promotion score (inactive): -INFINITY +stateful-1:1 promotion score (inactive): -INFINITY +stateful-1:2 promotion score (inactive): -INFINITY +stateful-1:3 promotion score (inactive): -INFINITY +stateful-1:4 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/group14.scores b/cts/scheduler/scores/group14.scores index 1749427321c..a30dab9c992 100644 --- a/cts/scheduler/scores/group14.scores +++ b/cts/scheduler/scores/group14.scores @@ -1,16 +1,16 @@ ocf_msdummy:0 promotion score on c001n06: -1 ocf_msdummy:1 promotion score on c001n07: -1 -ocf_msdummy:10 promotion score on none: 0 -ocf_msdummy:11 promotion score on none: 0 +ocf_msdummy:10 promotion score (inactive): -INFINITY +ocf_msdummy:11 promotion score (inactive): -INFINITY ocf_msdummy:2 promotion score on c001n06: -1 ocf_msdummy:3 promotion score on c001n07: -1 -ocf_msdummy:4 promotion score on none: 0 -ocf_msdummy:5 promotion score on none: 0 -ocf_msdummy:6 promotion score on none: 0 -ocf_msdummy:7 promotion score on none: 0 -ocf_msdummy:8 promotion score on none: 0 -ocf_msdummy:9 promotion score on none: 0 +ocf_msdummy:4 promotion score (inactive): -INFINITY +ocf_msdummy:5 promotion score (inactive): -INFINITY +ocf_msdummy:6 promotion score (inactive): -INFINITY +ocf_msdummy:7 promotion score (inactive): -INFINITY +ocf_msdummy:8 promotion score (inactive): -INFINITY +ocf_msdummy:9 promotion score (inactive): -INFINITY pcmk__clone_assign: DoFencing allocation score on c001n02: 0 pcmk__clone_assign: DoFencing allocation score on c001n03: 0 pcmk__clone_assign: DoFencing allocation score on c001n04: 0 diff --git a/cts/scheduler/scores/history-1.scores b/cts/scheduler/scores/history-1.scores index 312375f49ad..80fe310ab85 100644 --- a/cts/scheduler/scores/history-1.scores +++ b/cts/scheduler/scores/history-1.scores @@ -162,4 +162,4 @@ pcmk__primitive_assign: stateful-1:3 allocation score on pcmk-4: -INFINITY stateful-1:0 promotion score on pcmk-1: -1 stateful-1:1 promotion score on pcmk-2: -1 stateful-1:2 promotion score on pcmk-3: -1 -stateful-1:3 promotion score on none: 0 +stateful-1:3 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/inc12.scores b/cts/scheduler/scores/inc12.scores index 3652381057b..eb388f6e87b 100644 --- a/cts/scheduler/scores/inc12.scores +++ b/cts/scheduler/scores/inc12.scores @@ -1,16 +1,16 @@ -ocf_msdummy:0 promotion score on none: 0 -ocf_msdummy:1 promotion score on none: 0 -ocf_msdummy:10 promotion score on none: 0 -ocf_msdummy:11 promotion score on none: 0 -ocf_msdummy:2 promotion score on none: 0 -ocf_msdummy:3 promotion score on none: 0 -ocf_msdummy:4 promotion score on none: 0 -ocf_msdummy:5 promotion score on none: 0 -ocf_msdummy:6 promotion score on none: 0 -ocf_msdummy:7 promotion score on none: 0 -ocf_msdummy:8 promotion score on none: 0 -ocf_msdummy:9 promotion score on none: 0 +ocf_msdummy:0 promotion score (inactive): -INFINITY +ocf_msdummy:1 promotion score (inactive): -INFINITY +ocf_msdummy:10 promotion score (inactive): -INFINITY +ocf_msdummy:11 promotion score (inactive): -INFINITY +ocf_msdummy:2 promotion score (inactive): -INFINITY +ocf_msdummy:3 promotion score (inactive): -INFINITY +ocf_msdummy:4 promotion score (inactive): -INFINITY +ocf_msdummy:5 promotion score (inactive): -INFINITY +ocf_msdummy:6 promotion score (inactive): -INFINITY +ocf_msdummy:7 promotion score (inactive): -INFINITY +ocf_msdummy:8 promotion score (inactive): -INFINITY +ocf_msdummy:9 promotion score (inactive): -INFINITY pcmk__clone_assign: DoFencing allocation score on c001n02: 0 pcmk__clone_assign: DoFencing allocation score on c001n03: 0 pcmk__clone_assign: DoFencing allocation score on c001n04: 0 diff --git a/cts/scheduler/scores/leftover-pending-monitor.scores b/cts/scheduler/scores/leftover-pending-monitor.scores index 103c4cd2d0d..4c3b16e8316 100644 --- a/cts/scheduler/scores/leftover-pending-monitor.scores +++ b/cts/scheduler/scores/leftover-pending-monitor.scores @@ -25,4 +25,4 @@ pcmk__primitive_assign: stateful-1:2 allocation score on node-2: -INFINITY pcmk__primitive_assign: stateful-1:2 allocation score on node-3: -INFINITY stateful-1:0 promotion score on node-3: INFINITY stateful-1:1 promotion score on node-1: -1 -stateful-1:2 promotion score on none: 0 +stateful-1:2 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/migrate-fencing.scores b/cts/scheduler/scores/migrate-fencing.scores index 6e77ee641ae..e9328f9d882 100644 --- a/cts/scheduler/scores/migrate-fencing.scores +++ b/cts/scheduler/scores/migrate-fencing.scores @@ -159,7 +159,7 @@ pcmk__primitive_assign: stateful-1:3 allocation score on pcmk-1: -INFINITY pcmk__primitive_assign: stateful-1:3 allocation score on pcmk-2: 6 pcmk__primitive_assign: stateful-1:3 allocation score on pcmk-3: -INFINITY pcmk__primitive_assign: stateful-1:3 allocation score on pcmk-4: -INFINITY -stateful-1:0 promotion score on none: 0 +stateful-1:0 promotion score (inactive): -INFINITY stateful-1:1 promotion score on pcmk-1: 5 stateful-1:2 promotion score on pcmk-3: 5 stateful-1:3 promotion score on pcmk-2: 5 diff --git a/cts/scheduler/scores/migrate-partial-4.scores b/cts/scheduler/scores/migrate-partial-4.scores index 720a4daf60b..9be6a307077 100644 --- a/cts/scheduler/scores/migrate-partial-4.scores +++ b/cts/scheduler/scores/migrate-partial-4.scores @@ -1,21 +1,21 @@ drbd-mgs:0 promotion score on lustre01-left: -1 drbd-mgs:1 promotion score on lustre02-left: -1 -drbd-testfs-mdt0000-left:0 promotion score on none: 0 -drbd-testfs-mdt0000-left:1 promotion score on none: 0 -drbd-testfs-mdt0000:0 promotion score on none: 0 -drbd-testfs-ost0000-left:0 promotion score on none: 0 -drbd-testfs-ost0000-left:1 promotion score on none: 0 -drbd-testfs-ost0000:0 promotion score on none: 0 -drbd-testfs-ost0001-left:0 promotion score on none: 0 -drbd-testfs-ost0001-left:1 promotion score on none: 0 -drbd-testfs-ost0001:0 promotion score on none: 0 -drbd-testfs-ost0002-left:0 promotion score on none: 0 -drbd-testfs-ost0002-left:1 promotion score on none: 0 -drbd-testfs-ost0002:0 promotion score on none: 0 -drbd-testfs-ost0003-left:0 promotion score on none: 0 -drbd-testfs-ost0003-left:1 promotion score on none: 0 -drbd-testfs-ost0003:0 promotion score on none: 0 +drbd-testfs-mdt0000-left:0 promotion score (inactive): -INFINITY +drbd-testfs-mdt0000-left:1 promotion score (inactive): -INFINITY +drbd-testfs-mdt0000:0 promotion score (inactive): -INFINITY +drbd-testfs-ost0000-left:0 promotion score (inactive): -INFINITY +drbd-testfs-ost0000-left:1 promotion score (inactive): -INFINITY +drbd-testfs-ost0000:0 promotion score (inactive): -INFINITY +drbd-testfs-ost0001-left:0 promotion score (inactive): -INFINITY +drbd-testfs-ost0001-left:1 promotion score (inactive): -INFINITY +drbd-testfs-ost0001:0 promotion score (inactive): -INFINITY +drbd-testfs-ost0002-left:0 promotion score (inactive): -INFINITY +drbd-testfs-ost0002-left:1 promotion score (inactive): -INFINITY +drbd-testfs-ost0002:0 promotion score (inactive): -INFINITY +drbd-testfs-ost0003-left:0 promotion score (inactive): -INFINITY +drbd-testfs-ost0003-left:1 promotion score (inactive): -INFINITY +drbd-testfs-ost0003:0 promotion score (inactive): -INFINITY pcmk__clone_assign: drbd-mgs:0 allocation score on lustre01-left: 0 pcmk__clone_assign: drbd-mgs:0 allocation score on lustre02-left: 0 pcmk__clone_assign: drbd-mgs:0 allocation score on lustre03-left: -INFINITY diff --git a/cts/scheduler/scores/migrate-shutdown.scores b/cts/scheduler/scores/migrate-shutdown.scores index 5843bf29036..71f9cfe2610 100644 --- a/cts/scheduler/scores/migrate-shutdown.scores +++ b/cts/scheduler/scores/migrate-shutdown.scores @@ -127,7 +127,7 @@ pcmk__primitive_assign: stateful-1:3 allocation score on pcmk-1: -INFINITY pcmk__primitive_assign: stateful-1:3 allocation score on pcmk-2: -INFINITY pcmk__primitive_assign: stateful-1:3 allocation score on pcmk-3: -INFINITY pcmk__primitive_assign: stateful-1:3 allocation score on pcmk-4: -INFINITY -stateful-1:0 promotion score on none: 0 -stateful-1:1 promotion score on none: 0 -stateful-1:2 promotion score on none: 0 -stateful-1:3 promotion score on none: 0 +stateful-1:0 promotion score (inactive): -INFINITY +stateful-1:1 promotion score (inactive): -INFINITY +stateful-1:2 promotion score (inactive): -INFINITY +stateful-1:3 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/migration-intermediary-cleaned.scores b/cts/scheduler/scores/migration-intermediary-cleaned.scores index 207f7aa5ce2..3783886a5d2 100644 --- a/cts/scheduler/scores/migration-intermediary-cleaned.scores +++ b/cts/scheduler/scores/migration-intermediary-cleaned.scores @@ -197,5 +197,5 @@ pcmk__primitive_assign: stateful-1:4 allocation score on rhel8-5: -INFINITY stateful-1:0 promotion score on rhel8-3: 10 stateful-1:1 promotion score on rhel8-4: 5 stateful-1:2 promotion score on rhel8-5: 5 -stateful-1:3 promotion score on none: 0 -stateful-1:4 promotion score on none: 0 +stateful-1:3 promotion score (inactive): -INFINITY +stateful-1:4 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/no_quorum_demote.scores b/cts/scheduler/scores/no_quorum_demote.scores index 79b44f7f848..fcf98d492bf 100644 --- a/cts/scheduler/scores/no_quorum_demote.scores +++ b/cts/scheduler/scores/no_quorum_demote.scores @@ -66,6 +66,6 @@ pcmk__primitive_assign: rsc2 allocation score on rhel7-4: 0 pcmk__primitive_assign: rsc2 allocation score on rhel7-5: 0 rsc1:0 promotion score on rhel7-1: 10 rsc1:1 promotion score on rhel7-2: 5 -rsc1:2 promotion score on none: 0 -rsc1:3 promotion score on none: 0 -rsc1:4 promotion score on none: 0 +rsc1:2 promotion score (inactive): -INFINITY +rsc1:3 promotion score (inactive): -INFINITY +rsc1:4 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/novell-239082.scores b/cts/scheduler/scores/novell-239082.scores index 899867acde8..f65512f3303 100644 --- a/cts/scheduler/scores/novell-239082.scores +++ b/cts/scheduler/scores/novell-239082.scores @@ -1,7 +1,7 @@ drbd0:0 promotion score on xen-2: 10 -drbd0:1 promotion score on none: 0 -drbd0:2 promotion score on none: 0 +drbd0:1 promotion score (inactive): -INFINITY +drbd0:2 promotion score (inactive): -INFINITY pcmk__clone_assign: drbd0:0 allocation score on xen-1: 0 pcmk__clone_assign: drbd0:0 allocation score on xen-2: 110 pcmk__clone_assign: drbd0:1 allocation score on xen-1: 100 diff --git a/cts/scheduler/scores/on_fail_demote4.scores b/cts/scheduler/scores/on_fail_demote4.scores index b4896e14f49..d77f12e4c57 100644 --- a/cts/scheduler/scores/on_fail_demote4.scores +++ b/cts/scheduler/scores/on_fail_demote4.scores @@ -453,17 +453,17 @@ pcmk__primitive_assign: stateful-bundle-ip-192.168.122.133 allocation score on r pcmk__primitive_assign: stateful-bundle-ip-192.168.122.133 allocation score on rhel7-3: 0 pcmk__primitive_assign: stateful-bundle-ip-192.168.122.133 allocation score on rhel7-4: -INFINITY pcmk__primitive_assign: stateful-bundle-ip-192.168.122.133 allocation score on rhel7-5: -INFINITY -rsc1:0 promotion score on none: 0 +rsc1:0 promotion score (inactive): -INFINITY rsc1:1 promotion score on rhel7-3: 5 rsc1:2 promotion score on rhel7-5: 5 rsc1:3 promotion score on rhel7-1: 5 -rsc1:4 promotion score on none: 0 +rsc1:4 promotion score (inactive): -INFINITY rsc1:5 promotion score on lxc2: 5 rsc1:6 promotion score on lxc1: 5 -rsc2:0 promotion score on none: 0 +rsc2:0 promotion score (inactive): -INFINITY rsc2:1 promotion score on rhel7-3: 5 rsc2:2 promotion score on rhel7-5: 5 rsc2:3 promotion score on rhel7-1: 5 -rsc2:4 promotion score on none: 0 +rsc2:4 promotion score (inactive): -INFINITY rsc2:5 promotion score on lxc2: 5 rsc2:6 promotion score on lxc1: 5 diff --git a/cts/scheduler/scores/one-or-more-unrunnable-instances.scores b/cts/scheduler/scores/one-or-more-unrunnable-instances.scores index 57c8355e39d..1d32627b8ff 100644 --- a/cts/scheduler/scores/one-or-more-unrunnable-instances.scores +++ b/cts/scheduler/scores/one-or-more-unrunnable-instances.scores @@ -2,9 +2,9 @@ galera:0 promotion score on rdo7-node1: 100 galera:1 promotion score on rdo7-node2: 100 galera:2 promotion score on rdo7-node3: 100 -galera:3 promotion score on none: 0 -galera:4 promotion score on none: 0 -galera:5 promotion score on none: 0 +galera:3 promotion score (inactive): -INFINITY +galera:4 promotion score (inactive): -INFINITY +galera:5 promotion score (inactive): -INFINITY pcmk__clone_assign: ceilometer-alarm-evaluator-clone allocation score on mrg-07: -INFINITY pcmk__clone_assign: ceilometer-alarm-evaluator-clone allocation score on mrg-08: -INFINITY pcmk__clone_assign: ceilometer-alarm-evaluator-clone allocation score on mrg-09: -INFINITY @@ -3704,6 +3704,6 @@ pcmk__primitive_assign: vip-swift allocation score on rdo7-node3: 0 redis:0 promotion score on rdo7-node1: 1000 redis:1 promotion score on rdo7-node2: 1 redis:2 promotion score on rdo7-node3: 1 -redis:3 promotion score on none: 0 -redis:4 promotion score on none: 0 -redis:5 promotion score on none: 0 +redis:3 promotion score (inactive): -INFINITY +redis:4 promotion score (inactive): -INFINITY +redis:5 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/order_constraint_stops_promoted.scores b/cts/scheduler/scores/order_constraint_stops_promoted.scores index 808d3cf8c88..1ed6f5f2422 100644 --- a/cts/scheduler/scores/order_constraint_stops_promoted.scores +++ b/cts/scheduler/scores/order_constraint_stops_promoted.scores @@ -1,6 +1,6 @@ NATIVE_RSC_A:0 promotion score on fc16-builder: 10 -NATIVE_RSC_A:1 promotion score on none: 0 +NATIVE_RSC_A:1 promotion score (inactive): -INFINITY pcmk__clone_assign: NATIVE_RSC_A:0 allocation score on fc16-builder2: -INFINITY pcmk__clone_assign: NATIVE_RSC_A:0 allocation score on fc16-builder: 11 pcmk__clone_assign: PROMOTABLE_RSC_A allocation score on fc16-builder2: -INFINITY diff --git a/cts/scheduler/scores/probe-2.scores b/cts/scheduler/scores/probe-2.scores index d3b50ce2a1f..67ec704098c 100644 --- a/cts/scheduler/scores/probe-2.scores +++ b/cts/scheduler/scores/probe-2.scores @@ -1,8 +1,8 @@ drbd_mysql:0 promotion score on wc01: 75 -drbd_mysql:1 promotion score on none: 0 +drbd_mysql:1 promotion score (inactive): -INFINITY drbd_www:0 promotion score on wc01: 175 -drbd_www:1 promotion score on none: 0 +drbd_www:1 promotion score (inactive): -INFINITY pcmk__clone_assign: DoFencing allocation score on wc01: 0 pcmk__clone_assign: DoFencing allocation score on wc02: 0 pcmk__clone_assign: apache2:0 allocation score on wc01: 1 diff --git a/cts/scheduler/scores/probe-3.scores b/cts/scheduler/scores/probe-3.scores index 4ab33b94abb..6f15b973dc3 100644 --- a/cts/scheduler/scores/probe-3.scores +++ b/cts/scheduler/scores/probe-3.scores @@ -162,4 +162,4 @@ pcmk__primitive_assign: stateful-1:3 allocation score on pcmk-4: -INFINITY stateful-1:0 promotion score on pcmk-1: 10 stateful-1:1 promotion score on pcmk-2: 5 stateful-1:2 promotion score on pcmk-3: 5 -stateful-1:3 promotion score on none: 0 +stateful-1:3 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/probe-4.scores b/cts/scheduler/scores/probe-4.scores index 4ab33b94abb..6f15b973dc3 100644 --- a/cts/scheduler/scores/probe-4.scores +++ b/cts/scheduler/scores/probe-4.scores @@ -162,4 +162,4 @@ pcmk__primitive_assign: stateful-1:3 allocation score on pcmk-4: -INFINITY stateful-1:0 promotion score on pcmk-1: 10 stateful-1:1 promotion score on pcmk-2: 5 stateful-1:2 promotion score on pcmk-3: 5 -stateful-1:3 promotion score on none: 0 +stateful-1:3 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/promoted-0.scores b/cts/scheduler/scores/promoted-0.scores index 00ee099f3e2..aeb33eb2363 100644 --- a/cts/scheduler/scores/promoted-0.scores +++ b/cts/scheduler/scores/promoted-0.scores @@ -3,7 +3,7 @@ child_rsc1:0 promotion score on node1: -1 child_rsc1:1 promotion score on node2: -1 child_rsc1:2 promotion score on node1: -1 child_rsc1:3 promotion score on node2: -1 -child_rsc1:4 promotion score on none: 0 +child_rsc1:4 promotion score (inactive): -INFINITY pcmk__clone_assign: child_rsc1:0 allocation score on node1: 0 pcmk__clone_assign: child_rsc1:0 allocation score on node2: 0 pcmk__clone_assign: child_rsc1:1 allocation score on node1: 0 diff --git a/cts/scheduler/scores/promoted-1.scores b/cts/scheduler/scores/promoted-1.scores index e737e896b2f..03f7a514e95 100644 --- a/cts/scheduler/scores/promoted-1.scores +++ b/cts/scheduler/scores/promoted-1.scores @@ -3,7 +3,7 @@ child_rsc1:0 promotion score on node1: -1 child_rsc1:1 promotion score on node2: 198 child_rsc1:2 promotion score on node1: -1 child_rsc1:3 promotion score on node2: 198 -child_rsc1:4 promotion score on none: 0 +child_rsc1:4 promotion score (inactive): -INFINITY pcmk__clone_assign: child_rsc1:0 allocation score on node1: 0 pcmk__clone_assign: child_rsc1:0 allocation score on node2: 0 pcmk__clone_assign: child_rsc1:1 allocation score on node1: 0 diff --git a/cts/scheduler/scores/promoted-10.scores b/cts/scheduler/scores/promoted-10.scores index 6923744f3a4..19e025745b4 100644 --- a/cts/scheduler/scores/promoted-10.scores +++ b/cts/scheduler/scores/promoted-10.scores @@ -3,7 +3,7 @@ child_rsc1:0 promotion score on node1: 230 child_rsc1:1 promotion score on node2: 30 child_rsc1:2 promotion score on node1: 230 child_rsc1:3 promotion score on node2: 30 -child_rsc1:4 promotion score on none: 0 +child_rsc1:4 promotion score (inactive): -INFINITY pcmk__clone_assign: child_rsc1:0 allocation score on node1: 20 pcmk__clone_assign: child_rsc1:0 allocation score on node2: 0 pcmk__clone_assign: child_rsc1:1 allocation score on node1: 0 diff --git a/cts/scheduler/scores/promoted-12.scores b/cts/scheduler/scores/promoted-12.scores index 93c71ddde4c..cfc8c38e9d4 100644 --- a/cts/scheduler/scores/promoted-12.scores +++ b/cts/scheduler/scores/promoted-12.scores @@ -1,7 +1,7 @@ drbd0:0 promotion score on sel4: 75 drbd0:1 promotion score on sel3: 175 -drbd0:2 promotion score on none: 0 +drbd0:2 promotion score (inactive): -INFINITY pcmk__clone_assign: drbd0:0 allocation score on sel3: 0 pcmk__clone_assign: drbd0:0 allocation score on sel4: 76 pcmk__clone_assign: drbd0:1 allocation score on sel3: 76 diff --git a/cts/scheduler/scores/promoted-13.scores b/cts/scheduler/scores/promoted-13.scores index 19b299cded0..fd8cb8819d1 100644 --- a/cts/scheduler/scores/promoted-13.scores +++ b/cts/scheduler/scores/promoted-13.scores @@ -1,7 +1,7 @@ drbd0:0 promotion score on odin: 75 drbd0:1 promotion score on frigg: 1 -drbd0:2 promotion score on none: 0 +drbd0:2 promotion score (inactive): -INFINITY pcmk__clone_assign: drbd0:0 allocation score on frigg: 0 pcmk__clone_assign: drbd0:0 allocation score on odin: INFINITY pcmk__clone_assign: drbd0:1 allocation score on frigg: INFINITY diff --git a/cts/scheduler/scores/promoted-2.scores b/cts/scheduler/scores/promoted-2.scores index 6923744f3a4..19e025745b4 100644 --- a/cts/scheduler/scores/promoted-2.scores +++ b/cts/scheduler/scores/promoted-2.scores @@ -3,7 +3,7 @@ child_rsc1:0 promotion score on node1: 230 child_rsc1:1 promotion score on node2: 30 child_rsc1:2 promotion score on node1: 230 child_rsc1:3 promotion score on node2: 30 -child_rsc1:4 promotion score on none: 0 +child_rsc1:4 promotion score (inactive): -INFINITY pcmk__clone_assign: child_rsc1:0 allocation score on node1: 20 pcmk__clone_assign: child_rsc1:0 allocation score on node2: 0 pcmk__clone_assign: child_rsc1:1 allocation score on node1: 0 diff --git a/cts/scheduler/scores/promoted-3.scores b/cts/scheduler/scores/promoted-3.scores index 452caac0171..168a8399f15 100644 --- a/cts/scheduler/scores/promoted-3.scores +++ b/cts/scheduler/scores/promoted-3.scores @@ -3,7 +3,7 @@ child_rsc1:0 promotion score on node1: -INFINITY child_rsc1:1 promotion score on node2: 198 child_rsc1:2 promotion score on node1: -INFINITY child_rsc1:3 promotion score on node2: 198 -child_rsc1:4 promotion score on none: 0 +child_rsc1:4 promotion score (inactive): -INFINITY pcmk__clone_assign: child_rsc1:0 allocation score on node1: 0 pcmk__clone_assign: child_rsc1:0 allocation score on node2: 0 pcmk__clone_assign: child_rsc1:1 allocation score on node1: 0 diff --git a/cts/scheduler/scores/promoted-7.scores b/cts/scheduler/scores/promoted-7.scores index 02f444ceb04..0dbdef25ef0 100644 --- a/cts/scheduler/scores/promoted-7.scores +++ b/cts/scheduler/scores/promoted-7.scores @@ -1,9 +1,9 @@ -ocf_msdummy:0 promotion score on none: 0 +ocf_msdummy:0 promotion score (inactive): -INFINITY ocf_msdummy:1 promotion score on c001n03: -1 ocf_msdummy:2 promotion score on c001n02: -1 ocf_msdummy:3 promotion score on c001n08: -1 -ocf_msdummy:4 promotion score on none: 0 +ocf_msdummy:4 promotion score (inactive): -INFINITY ocf_msdummy:5 promotion score on c001n03: -1 ocf_msdummy:6 promotion score on c001n02: -1 ocf_msdummy:7 promotion score on c001n08: -1 diff --git a/cts/scheduler/scores/promoted-8.scores b/cts/scheduler/scores/promoted-8.scores index ac3232335cc..e5ba9a531d9 100644 --- a/cts/scheduler/scores/promoted-8.scores +++ b/cts/scheduler/scores/promoted-8.scores @@ -3,8 +3,8 @@ ocf_msdummy:0 promotion score on c001n03: -1 ocf_msdummy:1 promotion score on c001n03: -1 ocf_msdummy:2 promotion score on c001n02: -1 ocf_msdummy:3 promotion score on c001n08: -1 -ocf_msdummy:4 promotion score on none: 0 -ocf_msdummy:5 promotion score on none: 0 +ocf_msdummy:4 promotion score (inactive): -INFINITY +ocf_msdummy:5 promotion score (inactive): -INFINITY ocf_msdummy:6 promotion score on c001n02: -1 ocf_msdummy:7 promotion score on c001n08: -1 pcmk__clone_assign: DoFencing allocation score on c001n01: 0 diff --git a/cts/scheduler/scores/promoted-9.scores b/cts/scheduler/scores/promoted-9.scores index 11c62ded122..e41033e9720 100644 --- a/cts/scheduler/scores/promoted-9.scores +++ b/cts/scheduler/scores/promoted-9.scores @@ -1,12 +1,12 @@ ocf_msdummy:0 promotion score on va1: 1000 ocf_msdummy:1 promotion score on va1: -1 -ocf_msdummy:2 promotion score on none: 0 -ocf_msdummy:3 promotion score on none: 0 -ocf_msdummy:4 promotion score on none: 0 -ocf_msdummy:5 promotion score on none: 0 -ocf_msdummy:6 promotion score on none: 0 -ocf_msdummy:7 promotion score on none: 0 +ocf_msdummy:2 promotion score (inactive): -INFINITY +ocf_msdummy:3 promotion score (inactive): -INFINITY +ocf_msdummy:4 promotion score (inactive): -INFINITY +ocf_msdummy:5 promotion score (inactive): -INFINITY +ocf_msdummy:6 promotion score (inactive): -INFINITY +ocf_msdummy:7 promotion score (inactive): -INFINITY pcmk__clone_assign: DoFencing allocation score on ibm1: 0 pcmk__clone_assign: DoFencing allocation score on sgi2: 0 pcmk__clone_assign: DoFencing allocation score on test02: 0 diff --git a/cts/scheduler/scores/promoted-asymmetrical-order.scores b/cts/scheduler/scores/promoted-asymmetrical-order.scores index 18bc704551e..b6027df5654 100644 --- a/cts/scheduler/scores/promoted-asymmetrical-order.scores +++ b/cts/scheduler/scores/promoted-asymmetrical-order.scores @@ -23,7 +23,7 @@ pcmk__primitive_assign: rsc2:0 allocation score on node1: 1 pcmk__primitive_assign: rsc2:0 allocation score on node2: 0 pcmk__primitive_assign: rsc2:1 allocation score on node1: -INFINITY pcmk__primitive_assign: rsc2:1 allocation score on node2: 1 -rsc1:0 promotion score on none: 0 -rsc1:1 promotion score on none: 0 +rsc1:0 promotion score (inactive): -INFINITY +rsc1:1 promotion score (inactive): -INFINITY rsc2:0 promotion score on node1: -1 rsc2:1 promotion score on node2: 99 diff --git a/cts/scheduler/scores/promoted-demote.scores b/cts/scheduler/scores/promoted-demote.scores index a0ddf9ac50f..fb3762c230d 100644 --- a/cts/scheduler/scores/promoted-demote.scores +++ b/cts/scheduler/scores/promoted-demote.scores @@ -3,7 +3,7 @@ cyrus_drbd_node:0 promotion score on cxa1: 285 cyrus_drbd_node:1 promotion score on cxb1: 275 named_drbd_node:0 promotion score on cxa1: 275 named_drbd_node:1 promotion score on cxb1: 285 -named_drbd_node:2 promotion score on none: 0 +named_drbd_node:2 promotion score (inactive): -INFINITY pcmk__clone_assign: cyrus_drbd allocation score on cxa1: 210 pcmk__clone_assign: cyrus_drbd allocation score on cxb1: 200 pcmk__clone_assign: cyrus_drbd_node:0 allocation score on cxa1: 76 diff --git a/cts/scheduler/scores/promoted-depend.scores b/cts/scheduler/scores/promoted-depend.scores index 5bc60de132c..285b6b9baf7 100644 --- a/cts/scheduler/scores/promoted-depend.scores +++ b/cts/scheduler/scores/promoted-depend.scores @@ -1,6 +1,6 @@ drbd0:0 promotion score on vbox4: -1 -drbd0:1 promotion score on none: 0 +drbd0:1 promotion score (inactive): -INFINITY pcmk__clone_assign: clvmd:0 allocation score on vbox3: 0 pcmk__clone_assign: clvmd:0 allocation score on vbox4: 0 pcmk__clone_assign: clvmd:1 allocation score on vbox3: 0 diff --git a/cts/scheduler/scores/promoted-dependent-ban.scores b/cts/scheduler/scores/promoted-dependent-ban.scores index 4577c12ee1e..90977808df2 100644 --- a/cts/scheduler/scores/promoted-dependent-ban.scores +++ b/cts/scheduler/scores/promoted-dependent-ban.scores @@ -1,7 +1,7 @@ p_drbd-dtest1:0 promotion score on c7: 1000 p_drbd-dtest1:1 promotion score on c6: 1 -p_drbd-dtest1:2 promotion score on none: 0 +p_drbd-dtest1:2 promotion score (inactive): -INFINITY pcmk__clone_assign: ms_drbd-dtest1 allocation score on c6: 0 pcmk__clone_assign: ms_drbd-dtest1 allocation score on c7: 0 pcmk__clone_assign: ms_drbd-dtest1 allocation score on c8: -INFINITY diff --git a/cts/scheduler/scores/promoted-failed-demote-2.scores b/cts/scheduler/scores/promoted-failed-demote-2.scores index 39399d9eac4..67b236aa36e 100644 --- a/cts/scheduler/scores/promoted-failed-demote-2.scores +++ b/cts/scheduler/scores/promoted-failed-demote-2.scores @@ -1,5 +1,5 @@ -group:0 promotion score on none: 0 +group:0 promotion score (inactive): -INFINITY group:1 promotion score on dl380g5a: 99 pcmk__clone_assign: group:0 allocation score on dl380g5a: 0 pcmk__clone_assign: group:0 allocation score on dl380g5b: 0 diff --git a/cts/scheduler/scores/promoted-failed-demote.scores b/cts/scheduler/scores/promoted-failed-demote.scores index 39399d9eac4..67b236aa36e 100644 --- a/cts/scheduler/scores/promoted-failed-demote.scores +++ b/cts/scheduler/scores/promoted-failed-demote.scores @@ -1,5 +1,5 @@ -group:0 promotion score on none: 0 +group:0 promotion score (inactive): -INFINITY group:1 promotion score on dl380g5a: 99 pcmk__clone_assign: group:0 allocation score on dl380g5a: 0 pcmk__clone_assign: group:0 allocation score on dl380g5b: 0 diff --git a/cts/scheduler/scores/promoted-ordering.scores b/cts/scheduler/scores/promoted-ordering.scores index 5162abf1a50..340f91be60c 100644 --- a/cts/scheduler/scores/promoted-ordering.scores +++ b/cts/scheduler/scores/promoted-ordering.scores @@ -1,8 +1,8 @@ drbd_mysql:0 promotion score on webcluster01: -1 -drbd_mysql:1 promotion score on none: 0 +drbd_mysql:1 promotion score (inactive): -INFINITY drbd_www:0 promotion score on webcluster01: -1 -drbd_www:1 promotion score on none: 0 +drbd_www:1 promotion score (inactive): -INFINITY pcmk__clone_assign: apache2:0 allocation score on webcluster01: 0 pcmk__clone_assign: apache2:0 allocation score on webcluster02: 0 pcmk__clone_assign: apache2:1 allocation score on webcluster01: 0 diff --git a/cts/scheduler/scores/promoted-promotion-constraint.scores b/cts/scheduler/scores/promoted-promotion-constraint.scores index df0cda69ce1..4b4f12963b1 100644 --- a/cts/scheduler/scores/promoted-promotion-constraint.scores +++ b/cts/scheduler/scores/promoted-promotion-constraint.scores @@ -23,4 +23,4 @@ pcmk__primitive_assign: s0:1 allocation score on hex-13: 6 pcmk__primitive_assign: s0:1 allocation score on hex-14: -INFINITY s0:0 promotion score on hex-14: -INFINITY s0:1 promotion score on hex-13: -INFINITY -s0:2 promotion score on none: 0 +s0:2 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/promoted-stop.scores b/cts/scheduler/scores/promoted-stop.scores index f04df9bba57..ec29232c46f 100644 --- a/cts/scheduler/scores/promoted-stop.scores +++ b/cts/scheduler/scores/promoted-stop.scores @@ -1,7 +1,7 @@ dummy:0 promotion score on node1: -INFINITY dummy:1 promotion score on node2: -INFINITY -dummy:2 promotion score on none: 0 +dummy:2 promotion score (inactive): -INFINITY pcmk__clone_assign: dummy:0 allocation score on node1: 1 pcmk__clone_assign: dummy:0 allocation score on node2: 0 pcmk__clone_assign: dummy:0 allocation score on node3: -INFINITY diff --git a/cts/scheduler/scores/promoted-unmanaged-monitor.scores b/cts/scheduler/scores/promoted-unmanaged-monitor.scores index b646d269017..f40c2a71aec 100644 --- a/cts/scheduler/scores/promoted-unmanaged-monitor.scores +++ b/cts/scheduler/scores/promoted-unmanaged-monitor.scores @@ -162,4 +162,4 @@ pcmk__primitive_assign: stateful-1:3 allocation score on pcmk-4: -INFINITY stateful-1:0 promotion score on pcmk-2: -INFINITY stateful-1:1 promotion score on pcmk-3: INFINITY stateful-1:2 promotion score on pcmk-4: -INFINITY -stateful-1:3 promotion score on none: 0 +stateful-1:3 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/promoted_monitor_restart.scores b/cts/scheduler/scores/promoted_monitor_restart.scores index 74ec8f999bf..24d59ad58b0 100644 --- a/cts/scheduler/scores/promoted_monitor_restart.scores +++ b/cts/scheduler/scores/promoted_monitor_restart.scores @@ -1,6 +1,6 @@ MS_RSC_NATIVE:0 promotion score on node1: 10 -MS_RSC_NATIVE:1 promotion score on none: 0 +MS_RSC_NATIVE:1 promotion score (inactive): -INFINITY pcmk__clone_assign: MS_RSC allocation score on node1: 0 pcmk__clone_assign: MS_RSC allocation score on node2: 0 pcmk__clone_assign: MS_RSC_NATIVE:0 allocation score on node1: 11 diff --git a/cts/scheduler/scores/rec-node-13.scores b/cts/scheduler/scores/rec-node-13.scores index 5fc4ca2153f..561cb5381a9 100644 --- a/cts/scheduler/scores/rec-node-13.scores +++ b/cts/scheduler/scores/rec-node-13.scores @@ -1,14 +1,14 @@ ocf_msdummy:0 promotion score on c001n02: 1000 -ocf_msdummy:1 promotion score on none: 0 +ocf_msdummy:1 promotion score (inactive): -INFINITY ocf_msdummy:10 promotion score on c001n06: -1 ocf_msdummy:11 promotion score on c001n07: -1 -ocf_msdummy:2 promotion score on none: 0 -ocf_msdummy:3 promotion score on none: 0 +ocf_msdummy:2 promotion score (inactive): -INFINITY +ocf_msdummy:3 promotion score (inactive): -INFINITY ocf_msdummy:4 promotion score on c001n02: -1 -ocf_msdummy:5 promotion score on none: 0 -ocf_msdummy:6 promotion score on none: 0 -ocf_msdummy:7 promotion score on none: 0 +ocf_msdummy:5 promotion score (inactive): -INFINITY +ocf_msdummy:6 promotion score (inactive): -INFINITY +ocf_msdummy:7 promotion score (inactive): -INFINITY ocf_msdummy:8 promotion score on c001n06: -1 ocf_msdummy:9 promotion score on c001n07: -1 pcmk__clone_assign: DoFencing allocation score on c001n02: 0 diff --git a/cts/scheduler/scores/remote-connection-unrecoverable.scores b/cts/scheduler/scores/remote-connection-unrecoverable.scores index ae32d5e5827..f35d7cda2fb 100644 --- a/cts/scheduler/scores/remote-connection-unrecoverable.scores +++ b/cts/scheduler/scores/remote-connection-unrecoverable.scores @@ -29,6 +29,6 @@ pcmk__primitive_assign: rsc2:1 allocation score on remote1: -INFINITY pcmk__primitive_assign: rsc2:2 allocation score on node1: -INFINITY pcmk__primitive_assign: rsc2:2 allocation score on node2: -INFINITY pcmk__primitive_assign: rsc2:2 allocation score on remote1: -INFINITY -rsc2:0 promotion score on none: 0 +rsc2:0 promotion score (inactive): -INFINITY rsc2:1 promotion score on node2: 10 -rsc2:2 promotion score on none: 0 +rsc2:2 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/remote-orphaned.scores b/cts/scheduler/scores/remote-orphaned.scores index 8c646d41992..9e8e281d0fd 100644 --- a/cts/scheduler/scores/remote-orphaned.scores +++ b/cts/scheduler/scores/remote-orphaned.scores @@ -97,4 +97,4 @@ pcmk__primitive_assign: stateful-1:2 allocation score on 18node3: -INFINITY pcmk__primitive_assign: stateful-1:2 allocation score on remote1: -INFINITY stateful-1:0 promotion score on 18node1: 10 stateful-1:1 promotion score on 18node3: 5 -stateful-1:2 promotion score on none: 0 +stateful-1:2 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/remote-reconnect-delay.scores b/cts/scheduler/scores/remote-reconnect-delay.scores index 0ca386410f2..2b5ea72ce3c 100644 --- a/cts/scheduler/scores/remote-reconnect-delay.scores +++ b/cts/scheduler/scores/remote-reconnect-delay.scores @@ -203,4 +203,4 @@ stateful-1:0 promotion score on rhel7-1: 5 stateful-1:1 promotion score on rhel7-2: 10 stateful-1:2 promotion score on rhel7-4: 5 stateful-1:3 promotion score on rhel7-5: 5 -stateful-1:4 promotion score on none: 0 +stateful-1:4 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/remote-recover-all.scores b/cts/scheduler/scores/remote-recover-all.scores index 85d66e0de76..5f3235d419c 100644 --- a/cts/scheduler/scores/remote-recover-all.scores +++ b/cts/scheduler/scores/remote-recover-all.scores @@ -1,13 +1,13 @@ galera:0 promotion score on galera-1: 100 -galera:1 promotion score on none: 0 +galera:1 promotion score (inactive): -INFINITY galera:2 promotion score on galera-0: 100 -galera:3 promotion score on none: 0 -galera:4 promotion score on none: 0 -galera:5 promotion score on none: 0 -galera:6 promotion score on none: 0 -galera:7 promotion score on none: 0 -galera:8 promotion score on none: 0 +galera:3 promotion score (inactive): -INFINITY +galera:4 promotion score (inactive): -INFINITY +galera:5 promotion score (inactive): -INFINITY +galera:6 promotion score (inactive): -INFINITY +galera:7 promotion score (inactive): -INFINITY +galera:8 promotion score (inactive): -INFINITY pcmk__clone_assign: galera-master allocation score on controller-0: -INFINITY pcmk__clone_assign: galera-master allocation score on controller-1: -INFINITY pcmk__clone_assign: galera-master allocation score on controller-2: -INFINITY @@ -836,12 +836,12 @@ pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on g pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-0: -INFINITY pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-1: -INFINITY pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-2: -INFINITY -redis:0 promotion score on none: 0 +redis:0 promotion score (inactive): -INFINITY redis:1 promotion score on controller-0: 1 redis:2 promotion score on controller-2: 1 -redis:3 promotion score on none: 0 -redis:4 promotion score on none: 0 -redis:5 promotion score on none: 0 -redis:6 promotion score on none: 0 -redis:7 promotion score on none: 0 -redis:8 promotion score on none: 0 +redis:3 promotion score (inactive): -INFINITY +redis:4 promotion score (inactive): -INFINITY +redis:5 promotion score (inactive): -INFINITY +redis:6 promotion score (inactive): -INFINITY +redis:7 promotion score (inactive): -INFINITY +redis:8 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/remote-recover-connection.scores b/cts/scheduler/scores/remote-recover-connection.scores index dbdcd2f3a53..db73abc510e 100644 --- a/cts/scheduler/scores/remote-recover-connection.scores +++ b/cts/scheduler/scores/remote-recover-connection.scores @@ -2,12 +2,12 @@ galera:0 promotion score on galera-1: 100 galera:1 promotion score on galera-2: 100 galera:2 promotion score on galera-0: 100 -galera:3 promotion score on none: 0 -galera:4 promotion score on none: 0 -galera:5 promotion score on none: 0 -galera:6 promotion score on none: 0 -galera:7 promotion score on none: 0 -galera:8 promotion score on none: 0 +galera:3 promotion score (inactive): -INFINITY +galera:4 promotion score (inactive): -INFINITY +galera:5 promotion score (inactive): -INFINITY +galera:6 promotion score (inactive): -INFINITY +galera:7 promotion score (inactive): -INFINITY +galera:8 promotion score (inactive): -INFINITY pcmk__clone_assign: galera-master allocation score on controller-0: -INFINITY pcmk__clone_assign: galera-master allocation score on controller-1: -INFINITY pcmk__clone_assign: galera-master allocation score on controller-2: -INFINITY @@ -836,12 +836,12 @@ pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on g pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-0: -INFINITY pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-1: -INFINITY pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-2: -INFINITY -redis:0 promotion score on none: 0 +redis:0 promotion score (inactive): -INFINITY redis:1 promotion score on controller-0: 1 redis:2 promotion score on controller-2: 1 -redis:3 promotion score on none: 0 -redis:4 promotion score on none: 0 -redis:5 promotion score on none: 0 -redis:6 promotion score on none: 0 -redis:7 promotion score on none: 0 -redis:8 promotion score on none: 0 +redis:3 promotion score (inactive): -INFINITY +redis:4 promotion score (inactive): -INFINITY +redis:5 promotion score (inactive): -INFINITY +redis:6 promotion score (inactive): -INFINITY +redis:7 promotion score (inactive): -INFINITY +redis:8 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/remote-recover-no-resources.scores b/cts/scheduler/scores/remote-recover-no-resources.scores index 6d3e2519b7f..5cbc46848e7 100644 --- a/cts/scheduler/scores/remote-recover-no-resources.scores +++ b/cts/scheduler/scores/remote-recover-no-resources.scores @@ -1,13 +1,13 @@ galera:0 promotion score on galera-1: 100 galera:1 promotion score on galera-0: 100 -galera:2 promotion score on none: 0 -galera:3 promotion score on none: 0 -galera:4 promotion score on none: 0 -galera:5 promotion score on none: 0 -galera:6 promotion score on none: 0 -galera:7 promotion score on none: 0 -galera:8 promotion score on none: 0 +galera:2 promotion score (inactive): -INFINITY +galera:3 promotion score (inactive): -INFINITY +galera:4 promotion score (inactive): -INFINITY +galera:5 promotion score (inactive): -INFINITY +galera:6 promotion score (inactive): -INFINITY +galera:7 promotion score (inactive): -INFINITY +galera:8 promotion score (inactive): -INFINITY pcmk__clone_assign: galera-master allocation score on controller-0: -INFINITY pcmk__clone_assign: galera-master allocation score on controller-1: -INFINITY pcmk__clone_assign: galera-master allocation score on controller-2: -INFINITY @@ -836,12 +836,12 @@ pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on g pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-0: -INFINITY pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-1: -INFINITY pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-2: -INFINITY -redis:0 promotion score on none: 0 +redis:0 promotion score (inactive): -INFINITY redis:1 promotion score on controller-0: 1 redis:2 promotion score on controller-2: 1 -redis:3 promotion score on none: 0 -redis:4 promotion score on none: 0 -redis:5 promotion score on none: 0 -redis:6 promotion score on none: 0 -redis:7 promotion score on none: 0 -redis:8 promotion score on none: 0 +redis:3 promotion score (inactive): -INFINITY +redis:4 promotion score (inactive): -INFINITY +redis:5 promotion score (inactive): -INFINITY +redis:6 promotion score (inactive): -INFINITY +redis:7 promotion score (inactive): -INFINITY +redis:8 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/remote-recover-unknown.scores b/cts/scheduler/scores/remote-recover-unknown.scores index 6d3e2519b7f..5cbc46848e7 100644 --- a/cts/scheduler/scores/remote-recover-unknown.scores +++ b/cts/scheduler/scores/remote-recover-unknown.scores @@ -1,13 +1,13 @@ galera:0 promotion score on galera-1: 100 galera:1 promotion score on galera-0: 100 -galera:2 promotion score on none: 0 -galera:3 promotion score on none: 0 -galera:4 promotion score on none: 0 -galera:5 promotion score on none: 0 -galera:6 promotion score on none: 0 -galera:7 promotion score on none: 0 -galera:8 promotion score on none: 0 +galera:2 promotion score (inactive): -INFINITY +galera:3 promotion score (inactive): -INFINITY +galera:4 promotion score (inactive): -INFINITY +galera:5 promotion score (inactive): -INFINITY +galera:6 promotion score (inactive): -INFINITY +galera:7 promotion score (inactive): -INFINITY +galera:8 promotion score (inactive): -INFINITY pcmk__clone_assign: galera-master allocation score on controller-0: -INFINITY pcmk__clone_assign: galera-master allocation score on controller-1: -INFINITY pcmk__clone_assign: galera-master allocation score on controller-2: -INFINITY @@ -836,12 +836,12 @@ pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on g pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-0: -INFINITY pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-1: -INFINITY pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-2: -INFINITY -redis:0 promotion score on none: 0 +redis:0 promotion score (inactive): -INFINITY redis:1 promotion score on controller-0: 1 redis:2 promotion score on controller-2: 1 -redis:3 promotion score on none: 0 -redis:4 promotion score on none: 0 -redis:5 promotion score on none: 0 -redis:6 promotion score on none: 0 -redis:7 promotion score on none: 0 -redis:8 promotion score on none: 0 +redis:3 promotion score (inactive): -INFINITY +redis:4 promotion score (inactive): -INFINITY +redis:5 promotion score (inactive): -INFINITY +redis:6 promotion score (inactive): -INFINITY +redis:7 promotion score (inactive): -INFINITY +redis:8 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/remote-recovery.scores b/cts/scheduler/scores/remote-recovery.scores index dbdcd2f3a53..db73abc510e 100644 --- a/cts/scheduler/scores/remote-recovery.scores +++ b/cts/scheduler/scores/remote-recovery.scores @@ -2,12 +2,12 @@ galera:0 promotion score on galera-1: 100 galera:1 promotion score on galera-2: 100 galera:2 promotion score on galera-0: 100 -galera:3 promotion score on none: 0 -galera:4 promotion score on none: 0 -galera:5 promotion score on none: 0 -galera:6 promotion score on none: 0 -galera:7 promotion score on none: 0 -galera:8 promotion score on none: 0 +galera:3 promotion score (inactive): -INFINITY +galera:4 promotion score (inactive): -INFINITY +galera:5 promotion score (inactive): -INFINITY +galera:6 promotion score (inactive): -INFINITY +galera:7 promotion score (inactive): -INFINITY +galera:8 promotion score (inactive): -INFINITY pcmk__clone_assign: galera-master allocation score on controller-0: -INFINITY pcmk__clone_assign: galera-master allocation score on controller-1: -INFINITY pcmk__clone_assign: galera-master allocation score on controller-2: -INFINITY @@ -836,12 +836,12 @@ pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on g pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-0: -INFINITY pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-1: -INFINITY pcmk__primitive_assign: stonith-fence_ipmilan-525400bbf613 allocation score on messaging-2: -INFINITY -redis:0 promotion score on none: 0 +redis:0 promotion score (inactive): -INFINITY redis:1 promotion score on controller-0: 1 redis:2 promotion score on controller-2: 1 -redis:3 promotion score on none: 0 -redis:4 promotion score on none: 0 -redis:5 promotion score on none: 0 -redis:6 promotion score on none: 0 -redis:7 promotion score on none: 0 -redis:8 promotion score on none: 0 +redis:3 promotion score (inactive): -INFINITY +redis:4 promotion score (inactive): -INFINITY +redis:5 promotion score (inactive): -INFINITY +redis:6 promotion score (inactive): -INFINITY +redis:7 promotion score (inactive): -INFINITY +redis:8 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/remote-stale-node-entry.scores b/cts/scheduler/scores/remote-stale-node-entry.scores index 1f429cfd6d4..ab925cec3c0 100644 --- a/cts/scheduler/scores/remote-stale-node-entry.scores +++ b/cts/scheduler/scores/remote-stale-node-entry.scores @@ -119,6 +119,6 @@ pcmk__primitive_assign: stateful-1:2 allocation score on remote1: -INFINITY pcmk__primitive_assign: stateful-1:2 allocation score on rhel7-node1: -INFINITY pcmk__primitive_assign: stateful-1:2 allocation score on rhel7-node2: -INFINITY pcmk__primitive_assign: stateful-1:2 allocation score on rhel7-node3: -INFINITY -stateful-1:0 promotion score on none: 0 -stateful-1:1 promotion score on none: 0 -stateful-1:2 promotion score on none: 0 +stateful-1:0 promotion score (inactive): -INFINITY +stateful-1:1 promotion score (inactive): -INFINITY +stateful-1:2 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/rsc-sets-promoted.scores b/cts/scheduler/scores/rsc-sets-promoted.scores index 0ac3b4a46f0..d7fdfbedb1d 100644 --- a/cts/scheduler/scores/rsc-sets-promoted.scores +++ b/cts/scheduler/scores/rsc-sets-promoted.scores @@ -15,5 +15,5 @@ pcmk__primitive_assign: rsc:0 allocation score on node1: -INFINITY pcmk__primitive_assign: rsc:0 allocation score on node2: -INFINITY pcmk__primitive_assign: rsc:1 allocation score on node1: -INFINITY pcmk__primitive_assign: rsc:1 allocation score on node2: 1 -rsc:0 promotion score on none: 0 +rsc:0 promotion score (inactive): -INFINITY rsc:1 promotion score on node2: 299 diff --git a/cts/scheduler/scores/stonith-0.scores b/cts/scheduler/scores/stonith-0.scores index 617d2dbba81..b36d1af56c9 100644 --- a/cts/scheduler/scores/stonith-0.scores +++ b/cts/scheduler/scores/stonith-0.scores @@ -9,10 +9,10 @@ ocf_msdummy:2 promotion score on c001n07: -1 ocf_msdummy:3 promotion score on c001n07: -1 ocf_msdummy:4 promotion score on c001n08: -1 ocf_msdummy:5 promotion score on c001n08: -1 -ocf_msdummy:6 promotion score on none: 0 -ocf_msdummy:7 promotion score on none: 0 -ocf_msdummy:8 promotion score on none: 0 -ocf_msdummy:9 promotion score on none: 0 +ocf_msdummy:6 promotion score (inactive): -INFINITY +ocf_msdummy:7 promotion score (inactive): -INFINITY +ocf_msdummy:8 promotion score (inactive): -INFINITY +ocf_msdummy:9 promotion score (inactive): -INFINITY pcmk__clone_assign: DoFencing allocation score on c001n02: 0 pcmk__clone_assign: DoFencing allocation score on c001n03: 0 pcmk__clone_assign: DoFencing allocation score on c001n04: 0 diff --git a/cts/scheduler/scores/stonith-1.scores b/cts/scheduler/scores/stonith-1.scores index 6e19af258be..eed5ad51385 100644 --- a/cts/scheduler/scores/stonith-1.scores +++ b/cts/scheduler/scores/stonith-1.scores @@ -5,8 +5,8 @@ ocf_msdummy:2 promotion score on sles-2: -1 ocf_msdummy:3 promotion score on sles-4: -1 ocf_msdummy:4 promotion score on sles-1: -1 ocf_msdummy:5 promotion score on sles-2: -1 -ocf_msdummy:6 promotion score on none: 0 -ocf_msdummy:7 promotion score on none: 0 +ocf_msdummy:6 promotion score (inactive): -INFINITY +ocf_msdummy:7 promotion score (inactive): -INFINITY pcmk__clone_assign: DoFencing allocation score on sles-1: 0 pcmk__clone_assign: DoFencing allocation score on sles-2: 0 pcmk__clone_assign: DoFencing allocation score on sles-3: 0 diff --git a/cts/scheduler/scores/stonith-2.scores b/cts/scheduler/scores/stonith-2.scores index f31178dbe90..ccc8d6becae 100644 --- a/cts/scheduler/scores/stonith-2.scores +++ b/cts/scheduler/scores/stonith-2.scores @@ -7,8 +7,8 @@ ocf_msdummy:2 promotion score on sles-4: -1 ocf_msdummy:3 promotion score on sles-1: -1 ocf_msdummy:4 promotion score on sles-2: -1 ocf_msdummy:5 promotion score on sles-1: -1 -ocf_msdummy:6 promotion score on none: 0 -ocf_msdummy:7 promotion score on none: 0 +ocf_msdummy:6 promotion score (inactive): -INFINITY +ocf_msdummy:7 promotion score (inactive): -INFINITY ocf_msdummy:8 promotion score on sles-6: -1 ocf_msdummy:9 promotion score on sles-6: -1 pcmk__clone_assign: DoFencing allocation score on sles-1: 0 diff --git a/cts/scheduler/scores/target-1.scores b/cts/scheduler/scores/target-1.scores index aec2c2b68a4..483e314c6a8 100644 --- a/cts/scheduler/scores/target-1.scores +++ b/cts/scheduler/scores/target-1.scores @@ -28,4 +28,4 @@ pcmk__primitive_assign: rsc_c001n08 allocation score on c001n02: -INFINITY pcmk__primitive_assign: rsc_c001n08 allocation score on c001n03: -INFINITY pcmk__primitive_assign: rsc_c001n08 allocation score on c001n08: -INFINITY rsc_c001n03:0 promotion score on c001n03: -1 -rsc_c001n03:1 promotion score on none: 0 +rsc_c001n03:1 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/ticket-promoted-1.scores b/cts/scheduler/scores/ticket-promoted-1.scores index e6f630413ff..9d6d7c7c95f 100644 --- a/cts/scheduler/scores/ticket-promoted-1.scores +++ b/cts/scheduler/scores/ticket-promoted-1.scores @@ -11,5 +11,5 @@ pcmk__primitive_assign: rsc1:1 allocation score on node1: -INFINITY pcmk__primitive_assign: rsc1:1 allocation score on node2: -INFINITY pcmk__primitive_assign: rsc_stonith allocation score on node1: 0 pcmk__primitive_assign: rsc_stonith allocation score on node2: 0 -rsc1:0 promotion score on none: 0 -rsc1:1 promotion score on none: 0 +rsc1:0 promotion score (inactive): -INFINITY +rsc1:1 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/ticket-promoted-13.scores b/cts/scheduler/scores/ticket-promoted-13.scores index e6f630413ff..9d6d7c7c95f 100644 --- a/cts/scheduler/scores/ticket-promoted-13.scores +++ b/cts/scheduler/scores/ticket-promoted-13.scores @@ -11,5 +11,5 @@ pcmk__primitive_assign: rsc1:1 allocation score on node1: -INFINITY pcmk__primitive_assign: rsc1:1 allocation score on node2: -INFINITY pcmk__primitive_assign: rsc_stonith allocation score on node1: 0 pcmk__primitive_assign: rsc_stonith allocation score on node2: 0 -rsc1:0 promotion score on none: 0 -rsc1:1 promotion score on none: 0 +rsc1:0 promotion score (inactive): -INFINITY +rsc1:1 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/ticket-promoted-14.scores b/cts/scheduler/scores/ticket-promoted-14.scores index e6f630413ff..9d6d7c7c95f 100644 --- a/cts/scheduler/scores/ticket-promoted-14.scores +++ b/cts/scheduler/scores/ticket-promoted-14.scores @@ -11,5 +11,5 @@ pcmk__primitive_assign: rsc1:1 allocation score on node1: -INFINITY pcmk__primitive_assign: rsc1:1 allocation score on node2: -INFINITY pcmk__primitive_assign: rsc_stonith allocation score on node1: 0 pcmk__primitive_assign: rsc_stonith allocation score on node2: 0 -rsc1:0 promotion score on none: 0 -rsc1:1 promotion score on none: 0 +rsc1:0 promotion score (inactive): -INFINITY +rsc1:1 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/ticket-promoted-15.scores b/cts/scheduler/scores/ticket-promoted-15.scores index e6f630413ff..9d6d7c7c95f 100644 --- a/cts/scheduler/scores/ticket-promoted-15.scores +++ b/cts/scheduler/scores/ticket-promoted-15.scores @@ -11,5 +11,5 @@ pcmk__primitive_assign: rsc1:1 allocation score on node1: -INFINITY pcmk__primitive_assign: rsc1:1 allocation score on node2: -INFINITY pcmk__primitive_assign: rsc_stonith allocation score on node1: 0 pcmk__primitive_assign: rsc_stonith allocation score on node2: 0 -rsc1:0 promotion score on none: 0 -rsc1:1 promotion score on none: 0 +rsc1:0 promotion score (inactive): -INFINITY +rsc1:1 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/ticket-promoted-21.scores b/cts/scheduler/scores/ticket-promoted-21.scores index a3bafb753fd..5e7f9cbb45b 100644 --- a/cts/scheduler/scores/ticket-promoted-21.scores +++ b/cts/scheduler/scores/ticket-promoted-21.scores @@ -11,5 +11,5 @@ pcmk__primitive_assign: rsc1:1 allocation score on node1: -INFINITY pcmk__primitive_assign: rsc1:1 allocation score on node2: 1 pcmk__primitive_assign: rsc_stonith allocation score on node1: 0 pcmk__primitive_assign: rsc_stonith allocation score on node2: 0 -rsc1:0 promotion score on none: 0 +rsc1:0 promotion score (inactive): -INFINITY rsc1:1 promotion score on node2: -1 diff --git a/cts/scheduler/scores/ticket-promoted-3.scores b/cts/scheduler/scores/ticket-promoted-3.scores index e6f630413ff..9d6d7c7c95f 100644 --- a/cts/scheduler/scores/ticket-promoted-3.scores +++ b/cts/scheduler/scores/ticket-promoted-3.scores @@ -11,5 +11,5 @@ pcmk__primitive_assign: rsc1:1 allocation score on node1: -INFINITY pcmk__primitive_assign: rsc1:1 allocation score on node2: -INFINITY pcmk__primitive_assign: rsc_stonith allocation score on node1: 0 pcmk__primitive_assign: rsc_stonith allocation score on node2: 0 -rsc1:0 promotion score on none: 0 -rsc1:1 promotion score on none: 0 +rsc1:0 promotion score (inactive): -INFINITY +rsc1:1 promotion score (inactive): -INFINITY diff --git a/cts/scheduler/scores/ticket-promoted-9.scores b/cts/scheduler/scores/ticket-promoted-9.scores index a3bafb753fd..5e7f9cbb45b 100644 --- a/cts/scheduler/scores/ticket-promoted-9.scores +++ b/cts/scheduler/scores/ticket-promoted-9.scores @@ -11,5 +11,5 @@ pcmk__primitive_assign: rsc1:1 allocation score on node1: -INFINITY pcmk__primitive_assign: rsc1:1 allocation score on node2: 1 pcmk__primitive_assign: rsc_stonith allocation score on node1: 0 pcmk__primitive_assign: rsc_stonith allocation score on node2: 0 -rsc1:0 promotion score on none: 0 +rsc1:0 promotion score (inactive): -INFINITY rsc1:1 promotion score on node2: -1 diff --git a/cts/scheduler/scores/whitebox-fail3.scores b/cts/scheduler/scores/whitebox-fail3.scores index 08a5b274b7a..d757b46fe22 100644 --- a/cts/scheduler/scores/whitebox-fail3.scores +++ b/cts/scheduler/scores/whitebox-fail3.scores @@ -1,10 +1,10 @@ W:0 promotion score on dvossel-laptop2: 10 W:1 promotion score on 18builder: -1 -W:2 promotion score on none: 0 +W:2 promotion score (inactive): -INFINITY X:0 promotion score on dvossel-laptop2: 10 X:1 promotion score on 18builder: -1 -X:2 promotion score on none: 0 +X:2 promotion score (inactive): -INFINITY pcmk__clone_assign: W-master allocation score on 18builder: 0 pcmk__clone_assign: W-master allocation score on 18node1: 0 pcmk__clone_assign: W-master allocation score on dvossel-laptop2: 0 From 96c0440af3c82cef62f1c9b0b2b7d5dfea1de8f0 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 29 May 2024 17:27:26 -0500 Subject: [PATCH 038/364] Test: cts-cli: update expected output for recent changes --- cts/cli/regression.dates.exp | 2 +- cts/cli/regression.tools.exp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cts/cli/regression.dates.exp b/cts/cli/regression.dates.exp index 9c42c6d4cf4..9630eff7377 100644 --- a/cts/cli/regression.dates.exp +++ b/cts/cli/regression.dates.exp @@ -74,7 +74,7 @@ iso8601: Invalid interval specified: P1Z/2019-02-20 00:00:00Z =#=#=#= End test: Invalid period - [P1Z/2019-02-20 00:00:00Z] - Invalid parameter (2) =#=#=#= * Passed: iso8601 - Invalid period - [P1Z/2019-02-20 00:00:00Z] =#=#=#= Begin test: Invalid period - [P1YM/2019-02-20 00:00:00Z] =#=#=#= -crm_time_parse_duration error: 'P1YM/2019-02-20 00:00:00Z' is not a valid ISO 8601 time duration because no integer at 'M/2019-02-20 00:00:00Z' +crm_time_parse_duration error: 'P1YM/2019-02-20 00:00:00Z' is not a valid ISO 8601 time duration because no valid integer at 'M/2019-02-20 00:00:00Z' iso8601: Invalid interval specified: P1YM/2019-02-20 00:00:00Z =#=#=#= End test: Invalid period - [P1YM/2019-02-20 00:00:00Z] - Invalid parameter (2) =#=#=#= * Passed: iso8601 - Invalid period - [P1YM/2019-02-20 00:00:00Z] diff --git a/cts/cli/regression.tools.exp b/cts/cli/regression.tools.exp index 6eef1786811..9e85861e12e 100644 --- a/cts/cli/regression.tools.exp +++ b/cts/cli/regression.tools.exp @@ -8027,10 +8027,10 @@ export overcloud-rabbit-2=overcloud-rabbit-2 - - - + + + From a8fe876dbeed821167e8a556ccec43502c742fc1 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 4 Jun 2024 14:59:42 -0500 Subject: [PATCH 039/364] Doc: ChangeLog: add missed entry for 2.1.8-rc1 --- ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index c1d3f3d2fe5..a7a0dcb714d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -31,6 +31,8 @@ - Fixes since Pacemaker-2.1.7 + tools: restore the (deprecated) ability to automatically correct malformed XML passed via standard input (regression introduced in 2.1.7) + + CIB manager: avoid memory leak from asynchronous client requests + (regression introduced in 2.1.7) + CIB: restore the (deprecated) ability to use validate-with="pacemaker-next" (regression introduced in 2.1.6) + controller: avoid zombie children when asynchronous actions exit while a From cbf6db3391c4549661cc9ba305a1d779ed52e1fe Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 11 Jun 2024 11:57:23 -0500 Subject: [PATCH 040/364] Doc: ChangeLog: update for 2.1.8-rc2 release --- ChangeLog | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/ChangeLog b/ChangeLog index a7a0dcb714d..ffe0f0a9045 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +* Tue Jun 11 2024 Ken Gaillot Pacemaker-2.1.8-rc2 +- 38 commits with 23 files changed, 600 insertions(+), 283 deletions(-) + +- Features added since Pacemaker-2.1.8-rc1 + + libcrmcommon: support PCMK_panic_action="off" or "sync-off" + +- Fixes since Pacemaker-2.1.8-rc1 + + libcrmcommon: avoid possible buffer overflows when parsing date/times + + libpacemaker: correctly retrieve any existing fail-count for increment + (regression introduced in 2.1.8-rc1) + + libstonithd: avoid double free when invalid replies are received + + libstonithd: avoid use-after-free when retrieving metadata of Linux-HA fence agents + (regression introduced in 2.1.8-rc1) + + libstonithd: free escaped metadata descriptions with g_free() + (regression introduced in 2.1.8-rc1) + + tools: restore whitespace to attrd_updater query output + (regression introduced in 2.1.8-rc1) + * Wed May 15 2024 Ken Gaillot Pacemaker-2.1.8-rc1 - 2480 commits with 507 files changed, 45891 insertions(+), 22991 deletions(-) From 967701673c3432e2d495126f3800e70f56ce79b2 Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Wed, 12 Jun 2024 14:39:02 -0400 Subject: [PATCH 041/364] Low: tools: Don't skip formatting if running crm_simulate interactively. Somewhere along the line, we changed the interactive behavior of crm_simulate to not enable fancy text formatting. This is necessary for non-interactive use (like when running cts-scheduler), but for interactive use, it is hard to read. Change the conditional on when fancy text is enabled to be always, as long as we are not showing scores in quiet mode. This seems to be the combination that differentiates interactive use from regression test use. Fixes T833 --- tools/crm_simulate.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/crm_simulate.c b/tools/crm_simulate.c index 81ff8b3e8d2..bfa4176451f 100644 --- a/tools/crm_simulate.c +++ b/tools/crm_simulate.c @@ -492,9 +492,7 @@ main(int argc, char **argv) } if (pcmk__str_eq(args->output_ty, "text", pcmk__str_null_matches) && - !pcmk_is_set(options.flags, pcmk_sim_show_scores) && - !pcmk_is_set(options.flags, pcmk_sim_show_utilization)) { - + !(pcmk_is_set(options.flags, pcmk_sim_show_scores) && args->quiet)) { pcmk__output_text_set_fancy(out, true); } From 9eccc3628f1ad6eaa36cb4865a4876cf6ff29312 Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Wed, 12 Jun 2024 16:33:16 -0400 Subject: [PATCH 042/364] Test: Update regression results for crm_simulate changes. --- cts/cli/regression.tools.exp | 112 +++++++++++++++++++---------------- 1 file changed, 62 insertions(+), 50 deletions(-) diff --git a/cts/cli/regression.tools.exp b/cts/cli/regression.tools.exp index 9e85861e12e..df0d1f64811 100644 --- a/cts/cli/regression.tools.exp +++ b/cts/cli/regression.tools.exp @@ -8043,58 +8043,70 @@ export overcloud-rabbit-2=overcloud-rabbit-2 =#=#=#= Begin test: Show utilization with crm_simulate =#=#=#= 4 of 32 resource instances DISABLED and 0 BLOCKED from further action due to failure -[ cluster01 cluster02 ] -[ httpd-bundle-0 httpd-bundle-1 ] - -Started: [ cluster01 cluster02 ] -Fencing (stonith:fence_xvm): Started cluster01 -dummy (ocf:pacemaker:Dummy): Started cluster02 -Stopped (disabled): [ cluster01 cluster02 ] -inactive-dummy-1 (ocf:pacemaker:Dummy): Stopped (disabled) -inactive-dummy-2 (ocf:pacemaker:Dummy): Stopped (disabled) -httpd-bundle-0 (192.168.122.131) (ocf:heartbeat:apache): Started cluster01 -httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 -httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped -Public-IP (ocf:heartbeat:IPaddr): Started cluster02 -Email (lsb:exim): Started cluster02 -Started: [ cluster01 cluster02 ] -Promoted: [ cluster02 ] -Unpromoted: [ cluster01 ] +Current cluster status: + * Node List: + * Online: [ cluster01 cluster02 ] + * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] + * Full List of Resources: + * Clone Set: ping-clone [ping]: + * Started: [ cluster01 cluster02 ] + * Fencing (stonith:fence_xvm): Started cluster01 + * dummy (ocf:pacemaker:Dummy): Started cluster02 + * Clone Set: inactive-clone [inactive-dhcpd] (disabled): + * Stopped (disabled): [ cluster01 cluster02 ] + * Resource Group: inactive-group (disabled): + * inactive-dummy-1 (ocf:pacemaker:Dummy): Stopped (disabled) + * inactive-dummy-2 (ocf:pacemaker:Dummy): Stopped (disabled) + * Container bundle set: httpd-bundle [pcmk:http]: + * httpd-bundle-0 (192.168.122.131) (ocf:heartbeat:apache): Started cluster01 + * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 + * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped + * Resource Group: exim-group: + * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 + * Email (lsb:exim): Started cluster02 + * Clone Set: mysql-clone-group [mysql-group]: + * Started: [ cluster01 cluster02 ] + * Clone Set: promotable-clone [promotable-rsc] (promotable): + * Promoted: [ cluster02 ] + * Unpromoted: [ cluster01 ] + +Utilization Information: Only 'private' parameters to 1m-interval monitor for dummy on cluster02 changed: 0:0;16:2:0:4a9e64d6-e1dd-4395-917c-1596312eafe4 -Original: cluster01 capacity: -Original: cluster02 capacity: -Original: httpd-bundle-0 capacity: -Original: httpd-bundle-1 capacity: -Original: httpd-bundle-2 capacity: -pcmk__assign_resource: ping:0 utilization on cluster02: -pcmk__assign_resource: ping:1 utilization on cluster01: -pcmk__assign_resource: Fencing utilization on cluster01: -pcmk__assign_resource: dummy utilization on cluster02: -pcmk__assign_resource: httpd-bundle-docker-0 utilization on cluster01: -pcmk__assign_resource: httpd-bundle-docker-1 utilization on cluster02: -pcmk__assign_resource: httpd-bundle-ip-192.168.122.131 utilization on cluster01: -pcmk__assign_resource: httpd-bundle-0 utilization on cluster01: -pcmk__assign_resource: httpd:0 utilization on httpd-bundle-0: -pcmk__assign_resource: httpd-bundle-ip-192.168.122.132 utilization on cluster02: -pcmk__assign_resource: httpd-bundle-1 utilization on cluster02: -pcmk__assign_resource: httpd:1 utilization on httpd-bundle-1: -pcmk__assign_resource: httpd-bundle-2 utilization on cluster01: -pcmk__assign_resource: httpd:2 utilization on httpd-bundle-2: -pcmk__assign_resource: Public-IP utilization on cluster02: -pcmk__assign_resource: Email utilization on cluster02: -pcmk__assign_resource: mysql-proxy:0 utilization on cluster02: -pcmk__assign_resource: mysql-proxy:1 utilization on cluster01: -pcmk__assign_resource: promotable-rsc:0 utilization on cluster02: -pcmk__assign_resource: promotable-rsc:1 utilization on cluster01: -Remaining: cluster01 capacity: -Remaining: cluster02 capacity: -Remaining: httpd-bundle-0 capacity: -Remaining: httpd-bundle-1 capacity: -Remaining: httpd-bundle-2 capacity: - -Start httpd-bundle-2 ( cluster01 ) due to unrunnable httpd-bundle-docker-2 start (blocked) -Start httpd:2 ( httpd-bundle-2 ) due to unrunnable httpd-bundle-docker-2 start (blocked) + * Original: cluster01 capacity: + * Original: cluster02 capacity: + * Original: httpd-bundle-0 capacity: + * Original: httpd-bundle-1 capacity: + * Original: httpd-bundle-2 capacity: + * pcmk__assign_resource: ping:0 utilization on cluster02: + * pcmk__assign_resource: ping:1 utilization on cluster01: + * pcmk__assign_resource: Fencing utilization on cluster01: + * pcmk__assign_resource: dummy utilization on cluster02: + * pcmk__assign_resource: httpd-bundle-docker-0 utilization on cluster01: + * pcmk__assign_resource: httpd-bundle-docker-1 utilization on cluster02: + * pcmk__assign_resource: httpd-bundle-ip-192.168.122.131 utilization on cluster01: + * pcmk__assign_resource: httpd-bundle-0 utilization on cluster01: + * pcmk__assign_resource: httpd:0 utilization on httpd-bundle-0: + * pcmk__assign_resource: httpd-bundle-ip-192.168.122.132 utilization on cluster02: + * pcmk__assign_resource: httpd-bundle-1 utilization on cluster02: + * pcmk__assign_resource: httpd:1 utilization on httpd-bundle-1: + * pcmk__assign_resource: httpd-bundle-2 utilization on cluster01: + * pcmk__assign_resource: httpd:2 utilization on httpd-bundle-2: + * pcmk__assign_resource: Public-IP utilization on cluster02: + * pcmk__assign_resource: Email utilization on cluster02: + * pcmk__assign_resource: mysql-proxy:0 utilization on cluster02: + * pcmk__assign_resource: mysql-proxy:1 utilization on cluster01: + * pcmk__assign_resource: promotable-rsc:0 utilization on cluster02: + * pcmk__assign_resource: promotable-rsc:1 utilization on cluster01: + * Remaining: cluster01 capacity: + * Remaining: cluster02 capacity: + * Remaining: httpd-bundle-0 capacity: + * Remaining: httpd-bundle-1 capacity: + * Remaining: httpd-bundle-2 capacity: + +Transition Summary: + * Start httpd-bundle-2 ( cluster01 ) due to unrunnable httpd-bundle-docker-2 start (blocked) + * Start httpd:2 ( httpd-bundle-2 ) due to unrunnable httpd-bundle-docker-2 start (blocked) =#=#=#= End test: Show utilization with crm_simulate - OK (0) =#=#=#= * Passed: crm_simulate - Show utilization with crm_simulate =#=#=#= Begin test: Simulate injecting a failure =#=#=#= From a77cd364ad2a7e105c33d1251de8a010392be214 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 11 Jun 2024 12:34:30 -0500 Subject: [PATCH 043/364] Test: scheduler: add regression test for inner group constraints This tests a group banned from its current node when an inner member is ordered after and colocated with a separate resource. Currently, the behavior is broken (the cluster stops the group). --- cts/cts-scheduler.in | 2 + .../dot/banned-group-inner-constraints.dot | 12 ++ .../exp/banned-group-inner-constraints.exp | 57 ++++++ .../banned-group-inner-constraints.scores | 36 ++++ .../banned-group-inner-constraints.summary | 31 +++ .../xml/banned-group-inner-constraints.xml | 192 ++++++++++++++++++ 6 files changed, 330 insertions(+) create mode 100644 cts/scheduler/dot/banned-group-inner-constraints.dot create mode 100644 cts/scheduler/exp/banned-group-inner-constraints.exp create mode 100644 cts/scheduler/scores/banned-group-inner-constraints.scores create mode 100644 cts/scheduler/summary/banned-group-inner-constraints.summary create mode 100644 cts/scheduler/xml/banned-group-inner-constraints.xml diff --git a/cts/cts-scheduler.in b/cts/cts-scheduler.in index 50c32f6c7cd..2fa657ccc76 100644 --- a/cts/cts-scheduler.in +++ b/cts/cts-scheduler.in @@ -84,6 +84,8 @@ TESTS = [ "coloc-with-inner-group-member", "Consider explicit colocations with inner group members" ], + [ "banned-group-inner-constraints", + "Group banned from current node, inner member constrained" ], ], [ [ "rsc_dep1", "Must not" ], diff --git a/cts/scheduler/dot/banned-group-inner-constraints.dot b/cts/scheduler/dot/banned-group-inner-constraints.dot new file mode 100644 index 00000000000..6adcb37a405 --- /dev/null +++ b/cts/scheduler/dot/banned-group-inner-constraints.dot @@ -0,0 +1,12 @@ + digraph "g" { +"G-RSC1_stop_0 node2" -> "G_stopped_0" [ style = bold] +"G-RSC1_stop_0 node2" [ style=bold color="green" fontcolor="black"] +"G-RSC2_stop_0 node2" -> "G-RSC1_stop_0 node2" [ style = bold] +"G-RSC2_stop_0 node2" -> "G_stopped_0" [ style = bold] +"G-RSC2_stop_0 node2" [ style=bold color="green" fontcolor="black"] +"G_stop_0" -> "G-RSC1_stop_0 node2" [ style = bold] +"G_stop_0" -> "G-RSC2_stop_0 node2" [ style = bold] +"G_stop_0" -> "G_stopped_0" [ style = bold] +"G_stop_0" [ style=bold color="green" fontcolor="orange"] +"G_stopped_0" [ style=bold color="green" fontcolor="orange"] +} diff --git a/cts/scheduler/exp/banned-group-inner-constraints.exp b/cts/scheduler/exp/banned-group-inner-constraints.exp new file mode 100644 index 00000000000..048405f7b2e --- /dev/null +++ b/cts/scheduler/exp/banned-group-inner-constraints.exp @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cts/scheduler/scores/banned-group-inner-constraints.scores b/cts/scheduler/scores/banned-group-inner-constraints.scores new file mode 100644 index 00000000000..480edc8abee --- /dev/null +++ b/cts/scheduler/scores/banned-group-inner-constraints.scores @@ -0,0 +1,36 @@ + +pcmk__group_assign: G allocation score on node1: 0 +pcmk__group_assign: G allocation score on node2: 0 +pcmk__group_assign: G allocation score on node3: 0 +pcmk__group_assign: G allocation score on node4: 0 +pcmk__group_assign: G allocation score on node5: 0 +pcmk__group_assign: G-RSC1 allocation score on node1: 0 +pcmk__group_assign: G-RSC1 allocation score on node2: -INFINITY +pcmk__group_assign: G-RSC1 allocation score on node3: 0 +pcmk__group_assign: G-RSC1 allocation score on node4: 0 +pcmk__group_assign: G-RSC1 allocation score on node5: 0 +pcmk__group_assign: G-RSC2 allocation score on node1: 0 +pcmk__group_assign: G-RSC2 allocation score on node2: 0 +pcmk__group_assign: G-RSC2 allocation score on node3: 0 +pcmk__group_assign: G-RSC2 allocation score on node4: 0 +pcmk__group_assign: G-RSC2 allocation score on node5: 0 +pcmk__primitive_assign: Fencing allocation score on node1: 0 +pcmk__primitive_assign: Fencing allocation score on node2: 0 +pcmk__primitive_assign: Fencing allocation score on node3: 0 +pcmk__primitive_assign: Fencing allocation score on node4: 0 +pcmk__primitive_assign: Fencing allocation score on node5: 0 +pcmk__primitive_assign: G-RSC1 allocation score on node1: -INFINITY +pcmk__primitive_assign: G-RSC1 allocation score on node2: -INFINITY +pcmk__primitive_assign: G-RSC1 allocation score on node3: -INFINITY +pcmk__primitive_assign: G-RSC1 allocation score on node4: -INFINITY +pcmk__primitive_assign: G-RSC1 allocation score on node5: -INFINITY +pcmk__primitive_assign: G-RSC2 allocation score on node1: -INFINITY +pcmk__primitive_assign: G-RSC2 allocation score on node2: -INFINITY +pcmk__primitive_assign: G-RSC2 allocation score on node3: -INFINITY +pcmk__primitive_assign: G-RSC2 allocation score on node4: -INFINITY +pcmk__primitive_assign: G-RSC2 allocation score on node5: -INFINITY +pcmk__primitive_assign: dummy allocation score on node1: 0 +pcmk__primitive_assign: dummy allocation score on node2: 0 +pcmk__primitive_assign: dummy allocation score on node3: 0 +pcmk__primitive_assign: dummy allocation score on node4: 0 +pcmk__primitive_assign: dummy allocation score on node5: 0 diff --git a/cts/scheduler/summary/banned-group-inner-constraints.summary b/cts/scheduler/summary/banned-group-inner-constraints.summary new file mode 100644 index 00000000000..5eff0b5530e --- /dev/null +++ b/cts/scheduler/summary/banned-group-inner-constraints.summary @@ -0,0 +1,31 @@ +Current cluster status: + * Node List: + * Online: [ node1 node2 node3 node4 node5 ] + + * Full List of Resources: + * Fencing (stonith:fence_xvm): Started node1 + * dummy (ocf:pacemaker:Dummy): Started node2 + * Resource Group: G: + * G-RSC1 (ocf:pacemaker:Dummy): Started node2 + * G-RSC2 (ocf:pacemaker:Dummy): Started node2 + +Transition Summary: + * Stop G-RSC1 ( node2 ) due to node availability + * Stop G-RSC2 ( node2 ) due to node availability + +Executing Cluster Transition: + * Pseudo action: G_stop_0 + * Resource action: G-RSC2 stop on node2 + * Resource action: G-RSC1 stop on node2 + * Pseudo action: G_stopped_0 + +Revised Cluster Status: + * Node List: + * Online: [ node1 node2 node3 node4 node5 ] + + * Full List of Resources: + * Fencing (stonith:fence_xvm): Started node1 + * dummy (ocf:pacemaker:Dummy): Started node2 + * Resource Group: G: + * G-RSC1 (ocf:pacemaker:Dummy): Stopped + * G-RSC2 (ocf:pacemaker:Dummy): Stopped diff --git a/cts/scheduler/xml/banned-group-inner-constraints.xml b/cts/scheduler/xml/banned-group-inner-constraints.xml new file mode 100644 index 00000000000..cef377e4a73 --- /dev/null +++ b/cts/scheduler/xml/banned-group-inner-constraints.xml @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 28e9b7c61144b23f15991f85b35688c86dc04fe7 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 12 Jun 2024 11:52:45 -0500 Subject: [PATCH 044/364] Log: scheduler: consolidate pcmk__apply_location() trace messages --- lib/pacemaker/pcmk_sched_location.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/lib/pacemaker/pcmk_sched_location.c b/lib/pacemaker/pcmk_sched_location.c index 94914f0bc2c..22d6d556a73 100644 --- a/lib/pacemaker/pcmk_sched_location.c +++ b/lib/pacemaker/pcmk_sched_location.c @@ -691,26 +691,25 @@ pcmk__apply_location(pcmk_resource_t *rsc, pcmk__location_t *location) return; } - pcmk__rsc_trace(rsc, "Applying %s%s%s to %s", location->id, - (need_role? " for role " : ""), - (need_role? pcmk_role_text(location->role_filter) : ""), - rsc->id); - for (GList *iter = location->nodes; iter != NULL; iter = iter->next) { pcmk_node_t *node = iter->data; pcmk_node_t *allowed_node = g_hash_table_lookup(rsc->allowed_nodes, node->details->id); + pcmk__rsc_trace(rsc, "Applying %s%s%s to %s score on %s: %c %s", + location->id, + (need_role? " for role " : ""), + (need_role? pcmk_role_text(location->role_filter) : ""), + rsc->id, pcmk__node_name(node), + ((allowed_node == NULL)? '=' : '+'), + pcmk_readable_score(node->weight)); + if (allowed_node == NULL) { - pcmk__rsc_trace(rsc, "* = %d on %s", - node->weight, pcmk__node_name(node)); allowed_node = pe__copy_node(node); g_hash_table_insert(rsc->allowed_nodes, (gpointer) allowed_node->details->id, allowed_node); } else { - pcmk__rsc_trace(rsc, "* + %d on %s", - node->weight, pcmk__node_name(node)); allowed_node->weight = pcmk__add_scores(allowed_node->weight, node->weight); } From bc4710c5ff3a2c8abb3649d7ee36153903fe87ff Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Thu, 13 Jun 2024 10:31:19 -0500 Subject: [PATCH 045/364] Refactor: scheduler: avoid reset_scores variable in pcmk__group_apply_location() ... to make the code a bit easier to follow. Also improve comments. --- lib/pacemaker/pcmk_sched_group.c | 39 +++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/lib/pacemaker/pcmk_sched_group.c b/lib/pacemaker/pcmk_sched_group.c index 74b5efaaa95..9585d5c47aa 100644 --- a/lib/pacemaker/pcmk_sched_group.c +++ b/lib/pacemaker/pcmk_sched_group.c @@ -613,31 +613,48 @@ pcmk__group_apply_location(pcmk_resource_t *rsc, pcmk__location_t *location) { GList *node_list_orig = NULL; GList *node_list_copy = NULL; - bool reset_scores = true; CRM_ASSERT(pcmk__is_group(rsc) && (location != NULL)); + // Save the constraint's original node list (with the constraint score) node_list_orig = location->nodes; - node_list_copy = pcmk__copy_node_list(node_list_orig, true); - reset_scores = pe__group_flag_is_set(rsc, pcmk__group_colocated); - // Apply the constraint for the group itself (updates node scores) + // Make a copy of the nodes with all zero scores + node_list_copy = pcmk__copy_node_list(node_list_orig, true); + + /* Apply the constraint to the group itself. This ensures that any nodes + * affected by the constraint are in the group's allowed nodes, with the + * constraint score added. + */ pcmk__apply_location(rsc, location); // Apply the constraint for each member for (GList *iter = rsc->children; iter != NULL; iter = iter->next) { pcmk_resource_t *member = (pcmk_resource_t *) iter->data; - member->cmds->apply_location(member, location); - - if (reset_scores) { - /* The first member of colocated groups needs to use the original - * node scores, but subsequent members should work on a copy, since - * the first member's scores already incorporate theirs. + if (pe__group_flag_is_set(rsc, pcmk__group_colocated) + && (iter != rsc->children)) { + /* When apply_location() is called below for the first member (iter + * == rsc->children), the constraint score will be added to + * the member's affected allowed nodes. + * + * For subsequent members, we reset the constraint's node table to + * the copy with all 0 scores. Otherwise, when assigning the member, + * the constraint score would be counted multiple times (once for + * each later member) due to internal group colocations. Though the + * 0 score will not affect these members' allowed node scores, it + * ensures that affected nodes are in each member's allowed nodes, + * enabling the member on those nodes in asymmetric clusters. + * + * This is suboptimal if a group member other than the first is + * explicitly colocated with another resource. In that case, when + * the colocation primary is assigned, it will not consider the + * group's location preferences. */ - reset_scores = false; location->nodes = node_list_copy; } + + member->cmds->apply_location(member, location); } location->nodes = node_list_orig; From cf7cb041f8a6b0631fffa40f29850a1f00ce346a Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Thu, 13 Jun 2024 11:15:07 -0500 Subject: [PATCH 046/364] Fix: scheduler: consider group locations when member is explicit colocation dependent When location constraints are applied for a group, the location constraint score is added to the first member's allowed nodes, but not subsequent members'. This avoid counting the scores multiple times due to the internal group colocations. However that means that if a group member other than the first is the explicit dependent in a user-configured colocation, the colocation primary will not consider the group's location preferences. Special-case this situation by backing up the member's allowed nodes, adding the group location preferences to it before determining the best node score for colocation purposes, then restore the original allowed nodes. It's clunky, but the least intrusive approach I could come up with. --- lib/pacemaker/pcmk_sched_colocation.c | 50 +++++++++++++++++++++++---- lib/pacemaker/pcmk_sched_group.c | 5 --- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/lib/pacemaker/pcmk_sched_colocation.c b/lib/pacemaker/pcmk_sched_colocation.c index 5c16cffad55..3c11dd80003 100644 --- a/lib/pacemaker/pcmk_sched_colocation.c +++ b/lib/pacemaker/pcmk_sched_colocation.c @@ -1461,19 +1461,50 @@ pcmk__apply_coloc_to_priority(pcmk_resource_t *dependent, * \internal * \brief Find score of highest-scored node that matches colocation attribute * - * \param[in] rsc Resource whose allowed nodes should be searched - * \param[in] attr Colocation attribute name (must not be NULL) - * \param[in] value Colocation attribute value to require + * \param[in] colocation Colocation constraint being applied + * \param[in,out] rsc Resource whose allowed nodes should be searched + * \param[in] attr Colocation attribute name (must not be NULL) + * \param[in] value Colocation attribute value to require */ static int -best_node_score_matching_attr(const pcmk_resource_t *rsc, const char *attr, +best_node_score_matching_attr(const pcmk__colocation_t *colocation, + pcmk_resource_t *rsc, const char *attr, const char *value) { + GHashTable *allowed_nodes_orig = NULL; GHashTableIter iter; pcmk_node_t *node = NULL; int best_score = -PCMK_SCORE_INFINITY; const char *best_node = NULL; + if ((colocation != NULL) && (rsc == colocation->dependent) + && pcmk_is_set(colocation->flags, pcmk__coloc_explicit) + && pcmk__is_group(rsc->parent) + && (rsc != rsc->parent->children->data)) { + /* The resource is a user-configured colocation's explicit dependent, + * and a group member other than the first, which means the group's + * location constraint scores were not applied to it (see + * pcmk__group_apply_location()). Explicitly consider those scores now. + * + * @TODO This does leave one suboptimal case: if the group itself or + * another member other than the first is explicitly colocated with + * the same primary, the primary will count the group's location scores + * multiple times. This is much less likely than a single member being + * explicitly colocated, so it's an acceptable tradeoff for now. + */ + allowed_nodes_orig = rsc->allowed_nodes; + rsc->allowed_nodes = pcmk__copy_node_table(allowed_nodes_orig); + for (GList *loc_iter = rsc->cluster->placement_constraints; + loc_iter != NULL; loc_iter = loc_iter->next) { + + pcmk__location_t *location = loc_iter->data; + + if (location->rsc == rsc->parent) { + rsc->cmds->apply_location(rsc, location); + } + } + } + // Find best allowed node with matching attribute g_hash_table_iter_init(&iter, rsc->allowed_nodes); while (g_hash_table_iter_next(&iter, NULL, (void **) &node)) { @@ -1498,6 +1529,11 @@ best_node_score_matching_attr(const pcmk_resource_t *rsc, const char *attr, best_node, rsc->id, best_score, attr, value); } } + + if (allowed_nodes_orig != NULL) { + g_hash_table_destroy(rsc->allowed_nodes); + rsc->allowed_nodes = allowed_nodes_orig; + } return best_score; } @@ -1537,7 +1573,7 @@ allowed_on_one(const pcmk_resource_t *rsc) * nodes' scores to the node's score. * * \param[in,out] nodes Table of nodes with assignment scores so far - * \param[in] source_rsc Resource whose node scores to add + * \param[in,out] source_rsc Resource whose node scores to add * \param[in] target_rsc Resource on whose behalf to update \p nodes * \param[in] colocation Original colocation constraint (used to get * configured primary resource's stickiness, and @@ -1548,7 +1584,7 @@ allowed_on_one(const pcmk_resource_t *rsc) */ static void add_node_scores_matching_attr(GHashTable *nodes, - const pcmk_resource_t *source_rsc, + pcmk_resource_t *source_rsc, const pcmk_resource_t *target_rsc, const pcmk__colocation_t *colocation, float factor, bool only_positive) @@ -1566,7 +1602,7 @@ add_node_scores_matching_attr(GHashTable *nodes, int new_score = 0; const char *value = pcmk__colocation_node_attr(node, attr, target_rsc); - score = best_node_score_matching_attr(source_rsc, attr, value); + score = best_node_score_matching_attr(colocation, source_rsc, attr, value); if ((factor < 0) && (score < 0)) { /* If the dependent is anti-colocated, we generally don't want the diff --git a/lib/pacemaker/pcmk_sched_group.c b/lib/pacemaker/pcmk_sched_group.c index 9585d5c47aa..68596f96289 100644 --- a/lib/pacemaker/pcmk_sched_group.c +++ b/lib/pacemaker/pcmk_sched_group.c @@ -645,11 +645,6 @@ pcmk__group_apply_location(pcmk_resource_t *rsc, pcmk__location_t *location) * 0 score will not affect these members' allowed node scores, it * ensures that affected nodes are in each member's allowed nodes, * enabling the member on those nodes in asymmetric clusters. - * - * This is suboptimal if a group member other than the first is - * explicitly colocated with another resource. In that case, when - * the colocation primary is assigned, it will not consider the - * group's location preferences. */ location->nodes = node_list_copy; } From 9a12141f2b24060b1730a2f2a09f546be2efeac7 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Thu, 13 Jun 2024 11:18:39 -0500 Subject: [PATCH 047/364] Test: scheduler: update regression test for group member colocation fix The test behavior is now correct. --- .../dot/banned-group-inner-constraints.dot | 24 +++ .../exp/banned-group-inner-constraints.exp | 159 ++++++++++++++++-- .../banned-group-inner-constraints.scores | 8 +- .../banned-group-inner-constraints.summary | 20 ++- 4 files changed, 189 insertions(+), 22 deletions(-) diff --git a/cts/scheduler/dot/banned-group-inner-constraints.dot b/cts/scheduler/dot/banned-group-inner-constraints.dot index 6adcb37a405..6dc32a7a7f1 100644 --- a/cts/scheduler/dot/banned-group-inner-constraints.dot +++ b/cts/scheduler/dot/banned-group-inner-constraints.dot @@ -1,12 +1,36 @@ digraph "g" { +"G-RSC1_monitor_30000 node3" [ style=bold color="green" fontcolor="black"] +"G-RSC1_start_0 node3" -> "G-RSC1_monitor_30000 node3" [ style = bold] +"G-RSC1_start_0 node3" -> "G-RSC2_start_0 node3" [ style = bold] +"G-RSC1_start_0 node3" -> "G_running_0" [ style = bold] +"G-RSC1_start_0 node3" [ style=bold color="green" fontcolor="black"] +"G-RSC1_stop_0 node2" -> "G-RSC1_start_0 node3" [ style = bold] "G-RSC1_stop_0 node2" -> "G_stopped_0" [ style = bold] "G-RSC1_stop_0 node2" [ style=bold color="green" fontcolor="black"] +"G-RSC2_monitor_30000 node3" [ style=bold color="green" fontcolor="black"] +"G-RSC2_start_0 node3" -> "G-RSC2_monitor_30000 node3" [ style = bold] +"G-RSC2_start_0 node3" -> "G_running_0" [ style = bold] +"G-RSC2_start_0 node3" [ style=bold color="green" fontcolor="black"] "G-RSC2_stop_0 node2" -> "G-RSC1_stop_0 node2" [ style = bold] +"G-RSC2_stop_0 node2" -> "G-RSC2_start_0 node3" [ style = bold] "G-RSC2_stop_0 node2" -> "G_stopped_0" [ style = bold] +"G-RSC2_stop_0 node2" -> "dummy_stop_0 node2" [ style = bold] "G-RSC2_stop_0 node2" [ style=bold color="green" fontcolor="black"] +"G_running_0" [ style=bold color="green" fontcolor="orange"] +"G_start_0" -> "G-RSC1_start_0 node3" [ style = bold] +"G_start_0" -> "G-RSC2_start_0 node3" [ style = bold] +"G_start_0" -> "G_running_0" [ style = bold] +"G_start_0" [ style=bold color="green" fontcolor="orange"] "G_stop_0" -> "G-RSC1_stop_0 node2" [ style = bold] "G_stop_0" -> "G-RSC2_stop_0 node2" [ style = bold] "G_stop_0" -> "G_stopped_0" [ style = bold] "G_stop_0" [ style=bold color="green" fontcolor="orange"] +"G_stopped_0" -> "G_start_0" [ style = bold] "G_stopped_0" [ style=bold color="green" fontcolor="orange"] +"dummy_monitor_20000 node3" [ style=bold color="green" fontcolor="black"] +"dummy_start_0 node3" -> "G-RSC2_start_0 node3" [ style = bold] +"dummy_start_0 node3" -> "dummy_monitor_20000 node3" [ style = bold] +"dummy_start_0 node3" [ style=bold color="green" fontcolor="black"] +"dummy_stop_0 node2" -> "dummy_start_0 node3" [ style = bold] +"dummy_stop_0 node2" [ style=bold color="green" fontcolor="black"] } diff --git a/cts/scheduler/exp/banned-group-inner-constraints.exp b/cts/scheduler/exp/banned-group-inner-constraints.exp index 048405f7b2e..84ccb51ed93 100644 --- a/cts/scheduler/exp/banned-group-inner-constraints.exp +++ b/cts/scheduler/exp/banned-group-inner-constraints.exp @@ -1,56 +1,189 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + diff --git a/cts/scheduler/scores/banned-group-inner-constraints.scores b/cts/scheduler/scores/banned-group-inner-constraints.scores index 480edc8abee..57d1f349b23 100644 --- a/cts/scheduler/scores/banned-group-inner-constraints.scores +++ b/cts/scheduler/scores/banned-group-inner-constraints.scores @@ -1,6 +1,6 @@ pcmk__group_assign: G allocation score on node1: 0 -pcmk__group_assign: G allocation score on node2: 0 +pcmk__group_assign: G allocation score on node2: -INFINITY pcmk__group_assign: G allocation score on node3: 0 pcmk__group_assign: G allocation score on node4: 0 pcmk__group_assign: G allocation score on node5: 0 @@ -21,16 +21,16 @@ pcmk__primitive_assign: Fencing allocation score on node4: 0 pcmk__primitive_assign: Fencing allocation score on node5: 0 pcmk__primitive_assign: G-RSC1 allocation score on node1: -INFINITY pcmk__primitive_assign: G-RSC1 allocation score on node2: -INFINITY -pcmk__primitive_assign: G-RSC1 allocation score on node3: -INFINITY +pcmk__primitive_assign: G-RSC1 allocation score on node3: 0 pcmk__primitive_assign: G-RSC1 allocation score on node4: -INFINITY pcmk__primitive_assign: G-RSC1 allocation score on node5: -INFINITY pcmk__primitive_assign: G-RSC2 allocation score on node1: -INFINITY pcmk__primitive_assign: G-RSC2 allocation score on node2: -INFINITY -pcmk__primitive_assign: G-RSC2 allocation score on node3: -INFINITY +pcmk__primitive_assign: G-RSC2 allocation score on node3: 0 pcmk__primitive_assign: G-RSC2 allocation score on node4: -INFINITY pcmk__primitive_assign: G-RSC2 allocation score on node5: -INFINITY pcmk__primitive_assign: dummy allocation score on node1: 0 -pcmk__primitive_assign: dummy allocation score on node2: 0 +pcmk__primitive_assign: dummy allocation score on node2: -INFINITY pcmk__primitive_assign: dummy allocation score on node3: 0 pcmk__primitive_assign: dummy allocation score on node4: 0 pcmk__primitive_assign: dummy allocation score on node5: 0 diff --git a/cts/scheduler/summary/banned-group-inner-constraints.summary b/cts/scheduler/summary/banned-group-inner-constraints.summary index 5eff0b5530e..77dc3db9012 100644 --- a/cts/scheduler/summary/banned-group-inner-constraints.summary +++ b/cts/scheduler/summary/banned-group-inner-constraints.summary @@ -10,14 +10,24 @@ Current cluster status: * G-RSC2 (ocf:pacemaker:Dummy): Started node2 Transition Summary: - * Stop G-RSC1 ( node2 ) due to node availability - * Stop G-RSC2 ( node2 ) due to node availability + * Move dummy ( node2 -> node3 ) + * Move G-RSC1 ( node2 -> node3 ) + * Move G-RSC2 ( node2 -> node3 ) Executing Cluster Transition: * Pseudo action: G_stop_0 * Resource action: G-RSC2 stop on node2 + * Resource action: dummy stop on node2 * Resource action: G-RSC1 stop on node2 + * Resource action: dummy start on node3 * Pseudo action: G_stopped_0 + * Pseudo action: G_start_0 + * Resource action: G-RSC1 start on node3 + * Resource action: G-RSC2 start on node3 + * Resource action: dummy monitor=20000 on node3 + * Pseudo action: G_running_0 + * Resource action: G-RSC1 monitor=30000 on node3 + * Resource action: G-RSC2 monitor=30000 on node3 Revised Cluster Status: * Node List: @@ -25,7 +35,7 @@ Revised Cluster Status: * Full List of Resources: * Fencing (stonith:fence_xvm): Started node1 - * dummy (ocf:pacemaker:Dummy): Started node2 + * dummy (ocf:pacemaker:Dummy): Started node3 * Resource Group: G: - * G-RSC1 (ocf:pacemaker:Dummy): Stopped - * G-RSC2 (ocf:pacemaker:Dummy): Stopped + * G-RSC1 (ocf:pacemaker:Dummy): Started node3 + * G-RSC2 (ocf:pacemaker:Dummy): Started node3 From 03850b47bba1534d48e38b9f565668638faf4448 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 18 Jun 2024 09:26:56 -0500 Subject: [PATCH 048/364] Low: libcrmcommon: handle formatting errors in pcmk__time_format_hr() --- lib/common/iso8601.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/common/iso8601.c b/lib/common/iso8601.c index cf29bfe386f..56a21c3680d 100644 --- a/lib/common/iso8601.c +++ b/lib/common/iso8601.c @@ -1978,6 +1978,7 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) int fmt_pos; // Index after last character to pass as-is int nano_digits = 0; // Length of %N field width (if any) char *tmp_fmt_s = NULL; + size_t nbytes = 0; // Look for next format specifier const char *mark_s = strchr(&format[scanned_pos], '%'); @@ -2024,16 +2025,25 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat-nonliteral" #endif - date_len += strftime(&date_s[date_len], DATE_LEN_MAX - date_len, - tmp_fmt_s, &tm); + nbytes = strftime(&date_s[date_len], DATE_LEN_MAX - date_len, + tmp_fmt_s, &tm); #ifdef HAVE_FORMAT_NONLITERAL #pragma GCC diagnostic pop #endif - printed_pos = scanned_pos; free(tmp_fmt_s); + if (nbytes == 0) { // Would overflow buffer + return NULL; + } + date_len += nbytes; + printed_pos = scanned_pos; if (nano_digits != 0) { - date_len += snprintf(&date_s[date_len], DATE_LEN_MAX - date_len, - "%.*s", nano_digits, nano_s); + int nc = snprintf(&date_s[date_len], DATE_LEN_MAX - date_len, + "%.*s", nano_digits, nano_s); + + if ((nc < 0) || (nc == (DATE_LEN_MAX - date_len))) { + return NULL; // Error or would overflow buffer + } + date_len += nc; } } From 3145c2c80752914f9e48609419b1bae52900f9f4 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 18 Jun 2024 09:28:30 -0500 Subject: [PATCH 049/364] Refactor: libcrmcommon: use sizeof() in pcmk__time_format_hr() ... to avoid needing DATE_LEN_MAX constant --- lib/common/iso8601.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/common/iso8601.c b/lib/common/iso8601.c index 56a21c3680d..cfee46ba124 100644 --- a/lib/common/iso8601.c +++ b/lib/common/iso8601.c @@ -1956,13 +1956,12 @@ pcmk__time_hr_free(pcmk__time_hr_t * hr_dt) char * pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) { -#define DATE_LEN_MAX 128 int scanned_pos = 0; // How many characters of format have been parsed int printed_pos = 0; // How many characters of format have been processed size_t date_len = 0; char nano_s[10] = { '\0', }; - char date_s[DATE_LEN_MAX] = { '\0', }; + char date_s[128] = { '\0', }; struct tm tm = { 0, }; crm_time_t dt = { 0, }; @@ -2025,7 +2024,7 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat-nonliteral" #endif - nbytes = strftime(&date_s[date_len], DATE_LEN_MAX - date_len, + nbytes = strftime(&date_s[date_len], sizeof(date_s) - date_len, tmp_fmt_s, &tm); #ifdef HAVE_FORMAT_NONLITERAL #pragma GCC diagnostic pop @@ -2037,10 +2036,10 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) date_len += nbytes; printed_pos = scanned_pos; if (nano_digits != 0) { - int nc = snprintf(&date_s[date_len], DATE_LEN_MAX - date_len, + int nc = snprintf(&date_s[date_len], sizeof(date_s) - date_len, "%.*s", nano_digits, nano_s); - if ((nc < 0) || (nc == (DATE_LEN_MAX - date_len))) { + if ((nc < 0) || (nc == (sizeof(date_s) - date_len))) { return NULL; // Error or would overflow buffer } date_len += nc; @@ -2048,7 +2047,6 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) } return (date_len == 0)? NULL : pcmk__str_copy(date_s); -#undef DATE_LEN_MAX } /*! From 435fd55c111fa3a3c15115d83d7efc4938dc9165 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 18 Jun 2024 11:16:29 -0500 Subject: [PATCH 050/364] Fix: libcrmcommon: don't try to add to full string in pcmk__time_format_hr() Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=69431 --- lib/common/iso8601.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/common/iso8601.c b/lib/common/iso8601.c index cfee46ba124..aeb8ae9483b 100644 --- a/lib/common/iso8601.c +++ b/lib/common/iso8601.c @@ -2019,6 +2019,10 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) } } + if (date_len >= sizeof(date_s)) { + return NULL; // No room for remaining string + } + tmp_fmt_s = strndup(&format[printed_pos], fmt_pos - printed_pos); #ifdef HAVE_FORMAT_NONLITERAL #pragma GCC diagnostic push @@ -2036,8 +2040,13 @@ pcmk__time_format_hr(const char *format, const pcmk__time_hr_t *hr_dt) date_len += nbytes; printed_pos = scanned_pos; if (nano_digits != 0) { - int nc = snprintf(&date_s[date_len], sizeof(date_s) - date_len, - "%.*s", nano_digits, nano_s); + int nc = 0; + + if (date_len >= sizeof(date_s)) { + return NULL; // No room to add nanoseconds + } + nc = snprintf(&date_s[date_len], sizeof(date_s) - date_len, + "%.*s", nano_digits, nano_s); if ((nc < 0) || (nc == (sizeof(date_s) - date_len))) { return NULL; // Error or would overflow buffer From 956aa45399b64fb69cdaa416701492cdc0541f9a Mon Sep 17 00:00:00 2001 From: "Gao,Yan" Date: Wed, 19 Jun 2024 08:56:03 +0200 Subject: [PATCH 051/364] Fix: tools: crm_verify distinguishes configuration warnings and errors The output of crm_verify no longer distinguished configuration warnings from errors as brought up from: https://github.com/ClusterLabs/pacemaker/pull/3266#discussion_r1636411072 Regression introduced in 2.1.7 by 0c5a32624a This commit fixes it by splitting output_config_issue() into separate error and warning handlers, and add the "warning:" or "error:" prefix to the message. Fixes T834 --- tools/crm_verify.c | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/tools/crm_verify.c b/tools/crm_verify.c index 81e375a4ccc..e781c8905a3 100644 --- a/tools/crm_verify.c +++ b/tools/crm_verify.c @@ -114,7 +114,7 @@ build_arg_context(pcmk__common_args_t *args, GOptionGroup **group) { /*! * \internal - * \brief Output a configuration issue + * \brief Output a configuration error * * \param[in] ctx Output object * \param[in] msg printf(3)-style format string @@ -122,7 +122,7 @@ build_arg_context(pcmk__common_args_t *args, GOptionGroup **group) { */ G_GNUC_PRINTF(2, 3) static void -output_config_issue(void *ctx, const char *msg, ...) +output_config_error(void *ctx, const char *msg, ...) { va_list ap; char *buf = NULL; @@ -131,7 +131,31 @@ output_config_issue(void *ctx, const char *msg, ...) va_start(ap, msg); CRM_ASSERT(vasprintf(&buf, msg, ap) > 0); if (options.verbosity > 0) { - out->err(out, "%s", buf); + out->err(out, "error: %s", buf); + } + va_end(ap); +} + +/*! + * \internal + * \brief Output a configuration warning + * + * \param[in] ctx Output object + * \param[in] msg printf(3)-style format string + * \param[in] ... Format string arguments + */ +G_GNUC_PRINTF(2, 3) +static void +output_config_warning(void *ctx, const char *msg, ...) +{ + va_list ap; + char *buf = NULL; + pcmk__output_t *out = ctx; + + va_start(ap, msg); + CRM_ASSERT(vasprintf(&buf, msg, ap) > 0); + if (options.verbosity > 0) { + out->err(out, "warning: %s", buf); } va_end(ap); } @@ -187,8 +211,8 @@ main(int argc, char **argv) pcmk__register_lib_messages(out); - pcmk__set_config_error_handler(output_config_issue, out); - pcmk__set_config_warning_handler(output_config_issue, out); + pcmk__set_config_error_handler(output_config_error, out); + pcmk__set_config_warning_handler(output_config_warning, out); if (pcmk__str_eq(args->output_ty, "xml", pcmk__str_none)) { args->verbosity = 1; From b95ea85430dae0caea28826d33411d980c4ea8a3 Mon Sep 17 00:00:00 2001 From: "Gao,Yan" Date: Wed, 19 Jun 2024 10:19:57 +0200 Subject: [PATCH 052/364] Test: cts-cli: update expected output for crm_verify to distinguish configuration warnings and errors --- cts/cli/regression.tools.exp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/cts/cli/regression.tools.exp b/cts/cli/regression.tools.exp index df0d1f64811..2dd46bb314d 100644 --- a/cts/cli/regression.tools.exp +++ b/cts/cli/regression.tools.exp @@ -10274,9 +10274,9 @@ Errors found during check: config not valid * Passed: crm_verify - Verify a file-specified invalid configuration (text output) =#=#=#= Begin test: Verify a file-specified invalid configuration (verbose text output) =#=#=#= unpack_config warning: Blind faith: not fencing unseen nodes -Resource test2:0 is of type systemd and therefore cannot be used as a promotable clone resource -Ignoring resource 'test2-clone' because configuration is invalid -CIB did not pass schema validation +error: Resource test2:0 is of type systemd and therefore cannot be used as a promotable clone resource +error: Ignoring resource 'test2-clone' because configuration is invalid +error: CIB did not pass schema validation Errors found during check: config not valid =#=#=#= End test: Verify a file-specified invalid configuration (verbose text output) - Invalid configuration (78) =#=#=#= * Passed: crm_verify - Verify a file-specified invalid configuration (verbose text output) @@ -10287,9 +10287,9 @@ Errors found during check: config not valid - Resource test2:0 is of type systemd and therefore cannot be used as a promotable clone resource - Ignoring <clone> resource 'test2-clone' because configuration is invalid - CIB did not pass schema validation + error: Resource test2:0 is of type systemd and therefore cannot be used as a promotable clone resource + error: Ignoring <clone> resource 'test2-clone' because configuration is invalid + error: CIB did not pass schema validation Errors found during check: config not valid @@ -10301,9 +10301,9 @@ unpack_config warning: Blind faith: not fencing unseen nodes - Resource test2:0 is of type systemd and therefore cannot be used as a promotable clone resource - Ignoring <clone> resource 'test2-clone' because configuration is invalid - CIB did not pass schema validation + error: Resource test2:0 is of type systemd and therefore cannot be used as a promotable clone resource + error: Ignoring <clone> resource 'test2-clone' because configuration is invalid + error: CIB did not pass schema validation Errors found during check: config not valid @@ -10314,9 +10314,9 @@ unpack_config warning: Blind faith: not fencing unseen nodes - Resource test2:0 is of type systemd and therefore cannot be used as a promotable clone resource - Ignoring <clone> resource 'test2-clone' because configuration is invalid - CIB did not pass schema validation + error: Resource test2:0 is of type systemd and therefore cannot be used as a promotable clone resource + error: Ignoring <clone> resource 'test2-clone' because configuration is invalid + error: CIB did not pass schema validation @@ -10326,12 +10326,12 @@ unpack_config warning: Blind faith: not fencing unseen nodes - Resource start-up disabled since no STONITH resources have been defined - Either configure some or disable STONITH with the stonith-enabled option - NOTE: Clusters with shared data need STONITH to ensure data integrity - Node pcmk-1 is unclean but cannot be fenced - Node pcmk-2 is unclean but cannot be fenced - CIB did not pass schema validation + error: Resource start-up disabled since no STONITH resources have been defined + error: Either configure some or disable STONITH with the stonith-enabled option + error: NOTE: Clusters with shared data need STONITH to ensure data integrity + warning: Node pcmk-1 is unclean but cannot be fenced + warning: Node pcmk-2 is unclean but cannot be fenced + error: CIB did not pass schema validation Errors found during check: config not valid From df7e49b46c84fe0b6143efb65dc0e7e221779206 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Tue, 25 Jun 2024 21:03:37 -0700 Subject: [PATCH 053/364] Fix: tools: Don't double-free XML in crm_verify after schema update Currently, if an updated schema is acceptable, the old CIB XML is freed by pcmk_update_configured_schema() and then again by crm_verify.c:main(). Here we fix this by passing a pointer-to-pointer into pcmk__verify(), so that crm_verify gets a pointer to the new XML object instead of to the freed one. This fixes a regression introduced by a744f1a8. Signed-off-by: Reid Wahl --- include/pcmki/pcmki_verify.h | 5 +++-- lib/pacemaker/pcmk_verify.c | 21 ++++++++++++--------- tools/crm_verify.c | 2 +- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/include/pcmki/pcmki_verify.h b/include/pcmki/pcmki_verify.h index 28f20cd0945..2d713b44381 100644 --- a/include/pcmki/pcmki_verify.h +++ b/include/pcmki/pcmki_verify.h @@ -40,10 +40,11 @@ int pcmk__parse_cib(pcmk__output_t *out, const char *cib_source, xmlNodePtr *cib * * \param[in,out] scheduler Scheduler data * \param[in] out Output to use for logging and printing results - * \param[in] cib_object The parsed CIB object + * \param[in,out] cib_object The parsed CIB object * * \return Standard Pacemaker return code */ -int pcmk__verify(pcmk_scheduler_t *scheduler, pcmk__output_t *out, xmlNode *cib_object); +int pcmk__verify(pcmk_scheduler_t *scheduler, pcmk__output_t *out, + xmlNode **cib_object); #endif diff --git a/lib/pacemaker/pcmk_verify.c b/lib/pacemaker/pcmk_verify.c index 464fff1d107..76350c82dd0 100644 --- a/lib/pacemaker/pcmk_verify.c +++ b/lib/pacemaker/pcmk_verify.c @@ -47,31 +47,34 @@ pcmk__parse_cib(pcmk__output_t *out, const char *cib_source, xmlNodePtr *cib_obj } int -pcmk__verify(pcmk_scheduler_t *scheduler, pcmk__output_t *out, xmlNode *cib_object) +pcmk__verify(pcmk_scheduler_t *scheduler, pcmk__output_t *out, + xmlNode **cib_object) { int rc = pcmk_rc_ok; xmlNode *status = NULL; xmlNode *cib_object_copy = NULL; - if (!pcmk__xe_is(cib_object, PCMK_XE_CIB)) { + CRM_ASSERT(cib_object != NULL); + + if (!pcmk__xe_is(*cib_object, PCMK_XE_CIB)) { rc = EBADMSG; out->err(out, "This tool can only check complete configurations (i.e. those starting with )."); goto verify_done; } - status = pcmk_find_cib_element(cib_object, PCMK_XE_STATUS); + status = pcmk_find_cib_element(*cib_object, PCMK_XE_STATUS); if (status == NULL) { - pcmk__xe_create(cib_object, PCMK_XE_STATUS); + pcmk__xe_create(*cib_object, PCMK_XE_STATUS); } - if (!pcmk__validate_xml(cib_object, NULL, + if (!pcmk__validate_xml(*cib_object, NULL, (xmlRelaxNGValidityErrorFunc) out->err, out)) { crm_config_error = TRUE; rc = pcmk_rc_schema_validation; goto verify_done; } - rc = pcmk_update_configured_schema(&cib_object, false); + rc = pcmk_update_configured_schema(cib_object, false); if (rc != pcmk_rc_ok) { crm_config_error = TRUE; out->err(out, "The cluster will NOT be able to use this configuration.\n" @@ -85,14 +88,14 @@ pcmk__verify(pcmk_scheduler_t *scheduler, pcmk__output_t *out, xmlNode *cib_obje * @TODO Some parts of the configuration are unpacked only when needed (for * example, action configuration), so we aren't necessarily checking those. */ - if (cib_object != NULL) { + if (*cib_object != NULL) { unsigned long long flags = pcmk_sched_no_counts|pcmk_sched_no_compat; if (status == NULL) { // No status available, so do minimal checks flags |= pcmk_sched_validate_only; } - cib_object_copy = pcmk__xml_copy(NULL, cib_object); + cib_object_copy = pcmk__xml_copy(NULL, *cib_object); /* The scheduler takes ownership of the XML object and potentially * frees it later. We want the caller of pcmk__verify to retain @@ -143,7 +146,7 @@ pcmk_verify(xmlNodePtr *xml, const char *cib_source) } scheduler->priv = out; - rc = pcmk__verify(scheduler, out, cib_object); + rc = pcmk__verify(scheduler, out, &cib_object); done: pe_free_working_set(scheduler); diff --git a/tools/crm_verify.c b/tools/crm_verify.c index 81e375a4ccc..8ab3826d17c 100644 --- a/tools/crm_verify.c +++ b/tools/crm_verify.c @@ -231,7 +231,7 @@ main(int argc, char **argv) scheduler->priv = out; - rc = pcmk__verify(scheduler, out, cib_object); + rc = pcmk__verify(scheduler, out, &cib_object); if (rc == pcmk_rc_schema_validation) { if (crm_config_error) { From dbc35d4a9858c9484fb8c68646b497dbcdc25b33 Mon Sep 17 00:00:00 2001 From: "Gao,Yan" Date: Fri, 28 Jun 2024 11:33:25 +0200 Subject: [PATCH 054/364] Fix: libcrmcluster: use local hostname for node name if not configured in corosync Regression introduced by c63acbadd6 (not yet released). It also removes an unexpected "break" if not SUPPORT_COROSYNC. --- lib/cluster/cluster.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/cluster/cluster.c b/lib/cluster/cluster.c index d650ca5019a..0447031dc47 100644 --- a/lib/cluster/cluster.c +++ b/lib/cluster/cluster.c @@ -268,14 +268,17 @@ pcmk__cluster_send_message(const crm_node_t *node, char * pcmk__cluster_node_name(uint32_t nodeid) { + char *name = NULL; const enum pcmk_cluster_layer cluster_layer = pcmk_get_cluster_layer(); const char *cluster_layer_s = pcmk_cluster_layer_text(cluster_layer); switch (cluster_layer) { #if SUPPORT_COROSYNC case pcmk_cluster_layer_corosync: - return pcmk__corosync_name(0, nodeid); -#else + name = pcmk__corosync_name(0, nodeid); + if (name != NULL) { + return name; + } break; #endif // SUPPORT_COROSYNC From 32c899802fbcefafd2ff2627dc2ea83c4cfd674a Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 1 Jul 2024 15:35:59 -0500 Subject: [PATCH 055/364] Doc: libcrmcommon: document booth compatibility issue --- include/crm/common/cmdline_internal.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/crm/common/cmdline_internal.h b/include/crm/common/cmdline_internal.h index db4fd59195d..a4e0321f3e0 100644 --- a/include/crm/common/cmdline_internal.h +++ b/include/crm/common/cmdline_internal.h @@ -153,6 +153,10 @@ gchar *pcmk__quote_cmdline(gchar **argv); * \param[in] argv The command line arguments. * \param[in] special Single-letter command line arguments that take a value. * These letters will all have pre-processing applied. + * + * \note @COMPAT We should drop this at a new major or minor release series + * after we no longer support building with Booth <1.2, which invokes + * Pacemaker CLI tools using the getopt syntax. */ gchar ** pcmk__cmdline_preproc(char *const *argv, const char *special); From 1e0c9f524df9134d1dd9b1405f611ad6c5665f62 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 1 Jul 2024 15:54:21 -0500 Subject: [PATCH 056/364] Feature: sysconfig: deprecate PCMK_dh_min_bits environment variable The GnuTLS feature that this relies on has been deprecated since 2013. --- etc/sysconfig/pacemaker.in | 4 +++- lib/common/remote.c | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/etc/sysconfig/pacemaker.in b/etc/sysconfig/pacemaker.in index 7ec86c0e76a..c74fae708e7 100644 --- a/etc/sysconfig/pacemaker.in +++ b/etc/sysconfig/pacemaker.in @@ -258,7 +258,7 @@ # Default: PCMK_tls_priorities="@PCMK_GNUTLS_PRIORITIES@" # Example: PCMK_tls_priorities="SECURE128:+SECURE192:-VERS-ALL:+VERS-TLS1.2" -# PCMK_dh_min_bits (Advanced Use Only) +# PCMK_dh_min_bits (DEPRECATED; Advanced Use Only) # # Set a lower bound on the bit length of the prime number generated for # Diffie-Hellman parameters needed by TLS connections. The default is no @@ -276,6 +276,8 @@ # the value must be lowered in order for the client's GnuTLS library to accept # a connection to an older server. # +# This variable is deprecated and will be ignored by Pacemaker 3.0.0 and later. +# # Default: PCMK_dh_min_bits="0" (no minimum) # PCMK_dh_max_bits (Advanced Use Only) diff --git a/lib/common/remote.c b/lib/common/remote.c index 8054a203ae3..0974ccfb1d1 100644 --- a/lib/common/remote.c +++ b/lib/common/remote.c @@ -183,6 +183,9 @@ set_minimum_dh_bits(const gnutls_session_t *session) if (dh_min_bits > 0) { crm_info("Requiring server use a Diffie-Hellman prime of at least %d bits", dh_min_bits); + crm_warn("Support for the " PCMK__ENV_DH_MIN_BITS " " + "environment variable is deprecated and will be removed " + "in a future release"); gnutls_dh_set_prime_bits(*session, dh_min_bits); } } From f73f033d58a926c3329c199219f361c473487d5a Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 2 Jul 2024 12:48:32 -0500 Subject: [PATCH 057/364] Doc: ChangeLog: update for 2.1.8-rc3 release --- ChangeLog | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/ChangeLog b/ChangeLog index ffe0f0a9045..a0193c9be61 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +* Tue Jul 02 2024 Ken Gaillot Pacemaker-2.1.8-rc3 +- 16 commits with 11 files changed, 157 insertions(+), 57 deletions(-) + +- Features added since Pacemaker-2.1.8-rc2 + + sysconfig: deprecate PCMK_dh_min_bits environment variable + +- Fixes since Pacemaker-2.1.8-rc2 + + libcrmcluster: use local hostname for node name if not configured in + Corosync (regression introduced in 2.1.8-rc1) + + tools: crm_verify distinguishes configuration warnings and errors + (regression introduced in 2.1.7) + + tools: avoid double-free XML in crm_verify after schema update + (regression introduced in 2.1.8-rc1) + + libcrmcommon: avoid potential buffer overflows when formatting date/times + + scheduler: consider group's location constraints when a member is an + explicit dependent in a colocation constraint + * Tue Jun 11 2024 Ken Gaillot Pacemaker-2.1.8-rc2 - 38 commits with 23 files changed, 600 insertions(+), 283 deletions(-) From b9a52615d3c1a5f3a65eff7a9e9d3bfbe7b7e6e5 Mon Sep 17 00:00:00 2001 From: Grace Chin Date: Wed, 3 Jul 2024 00:31:43 -0400 Subject: [PATCH 058/364] crm_verify: Improve checking of fencing level IDs closes T699 --- daemons/fenced/fenced_commands.c | 8 +++---- daemons/fenced/fenced_remote.c | 10 ++++----- daemons/fenced/pacemaker-fenced.h | 2 +- include/crm/fencing/internal.h | 6 +++++- include/crm_internal.h | 9 +++++++- lib/pengine/pe_status_private.h | 4 ++++ lib/pengine/status.c | 4 ++++ lib/pengine/unpack.c | 36 +++++++++++++++++++++++++++++++ 8 files changed, 67 insertions(+), 12 deletions(-) diff --git a/daemons/fenced/fenced_commands.c b/daemons/fenced/fenced_commands.c index 223a70157cc..dc8ace77b7c 100644 --- a/daemons/fenced/fenced_commands.c +++ b/daemons/fenced/fenced_commands.c @@ -1534,7 +1534,7 @@ count_active_levels(const stonith_topology_t *tp) int lpc = 0; int count = 0; - for (lpc = 0; lpc < ST_LEVEL_MAX; lpc++) { + for (lpc = 0; lpc < ST__LEVEL_COUNT; lpc++) { if (tp->levels[lpc] != NULL) { count++; } @@ -1549,7 +1549,7 @@ free_topology_entry(gpointer data) int lpc = 0; - for (lpc = 0; lpc < ST_LEVEL_MAX; lpc++) { + for (lpc = 0; lpc < ST__LEVEL_COUNT; lpc++) { if (tp->levels[lpc] != NULL) { g_list_free_full(tp->levels[lpc], free); } @@ -1767,7 +1767,7 @@ fenced_register_level(xmlNode *msg, char **desc, pcmk__action_result_t *result) } // Ensure level ID is in allowed range - if ((id <= 0) || (id >= ST_LEVEL_MAX)) { + if ((id < ST__LEVEL_MIN) || (id > ST__LEVEL_MAX)) { crm_warn("Ignoring topology registration for %s with invalid level %d", target, id); free(target); @@ -1854,7 +1854,7 @@ fenced_unregister_level(xmlNode *msg, char **desc, } // Ensure level ID is in allowed range - if ((id < 0) || (id >= ST_LEVEL_MAX)) { + if ((id < 0) || (id >= ST__LEVEL_COUNT)) { crm_warn("Ignoring topology unregistration for %s with invalid level %d", target, id); free(target); diff --git a/daemons/fenced/fenced_remote.c b/daemons/fenced/fenced_remote.c index f87eeb6e88c..0146cd1ddff 100644 --- a/daemons/fenced/fenced_remote.c +++ b/daemons/fenced/fenced_remote.c @@ -781,7 +781,7 @@ topology_is_empty(stonith_topology_t *tp) return TRUE; } - for (i = 0; i < ST_LEVEL_MAX; i++) { + for (i = 0; i < ST__LEVEL_COUNT; i++) { if (tp->levels[i] != NULL) { return FALSE; } @@ -958,9 +958,9 @@ advance_topology_level(remote_fencing_op_t *op, bool empty_ok) do { op->level++; - } while (op->level < ST_LEVEL_MAX && tp->levels[op->level] == NULL); + } while (op->level < ST__LEVEL_COUNT && tp->levels[op->level] == NULL); - if (op->level < ST_LEVEL_MAX) { + if (op->level < ST__LEVEL_COUNT) { crm_trace("Attempting fencing level %d targeting %s (%d devices) " "for client %s@%s (id=%.8s)", op->level, op->target, g_list_length(tp->levels[op->level]), @@ -1621,7 +1621,7 @@ get_op_total_timeout(const remote_fencing_op_t *op, * Loop3: For each device in a fencing level, see what peer owns it * and what that peer has reported the timeout is for the device. */ - for (i = 0; i < ST_LEVEL_MAX; i++) { + for (i = 0; i < ST__LEVEL_COUNT; i++) { if (!tp->levels[i]) { continue; } @@ -2122,7 +2122,7 @@ all_topology_devices_found(const remote_fencing_op_t *op) skip_target = TRUE; } - for (i = 0; i < ST_LEVEL_MAX; i++) { + for (i = 0; i < ST__LEVEL_COUNT; i++) { for (device = tp->levels[i]; device; device = device->next) { match = NULL; for (iter = op->query_results; iter && !match; iter = iter->next) { diff --git a/daemons/fenced/pacemaker-fenced.h b/daemons/fenced/pacemaker-fenced.h index 2d8047cd685..50c61582df1 100644 --- a/daemons/fenced/pacemaker-fenced.h +++ b/daemons/fenced/pacemaker-fenced.h @@ -209,7 +209,7 @@ typedef struct stonith_topology_s { char *target_attribute; /*! Names of fencing devices at each topology level */ - GList *levels[ST_LEVEL_MAX]; + GList *levels[ST__LEVEL_COUNT]; } stonith_topology_t; diff --git a/include/crm/fencing/internal.h b/include/crm/fencing/internal.h index 414086dc4bc..55ba89107d4 100644 --- a/include/crm/fencing/internal.h +++ b/include/crm/fencing/internal.h @@ -100,7 +100,11 @@ void stonith__device_parameter_flags(uint32_t *device_flags, const char *device_name, xmlNode *metadata); -# define ST_LEVEL_MAX 10 +/* Only 1-9 is allowed for fencing topology levels, + * however, 0 is used to unregister all levels in + * unregister requests. + */ +# define ST__LEVEL_COUNT 10 // @COMPAT Deprecated since 1.1.17 (and see T773 to drop it) # define STONITH_ATTR_ACTION_OP "action" diff --git a/include/crm_internal.h b/include/crm_internal.h index 590f88cc7cb..358aad6bf98 100644 --- a/include/crm_internal.h +++ b/include/crm_internal.h @@ -84,4 +84,11 @@ #define PCMK__CONTROLD_CMD_NODES "list-nodes" -#endif /* CRM_INTERNAL__H */ +#define ST__LEVEL_MIN 1 +#define ST__LEVEL_MAX 9 + +#ifdef __cplusplus + +#endif + +#endif // CRM_INTERNAL__H diff --git a/lib/pengine/pe_status_private.h b/lib/pengine/pe_status_private.h index 309f0b7629b..9cdd2ec115b 100644 --- a/lib/pengine/pe_status_private.h +++ b/lib/pengine/pe_status_private.h @@ -101,6 +101,10 @@ G_GNUC_INTERNAL gboolean unpack_resources(const xmlNode *xml_resources, pcmk_scheduler_t *scheduler); +G_GNUC_INTERNAL +void pcmk__unpack_fencing_topology(const xmlNode *xml_fencing_topology, + pcmk_scheduler_t *scheduler); + G_GNUC_INTERNAL gboolean unpack_config(xmlNode *config, pcmk_scheduler_t *scheduler); diff --git a/lib/pengine/status.c b/lib/pengine/status.c index 36209da7340..1a1390d95c8 100644 --- a/lib/pengine/status.c +++ b/lib/pengine/status.c @@ -160,6 +160,10 @@ cluster_status(pcmk_scheduler_t * scheduler) } unpack_resources(section, scheduler); + section = get_xpath_object("//" PCMK_XE_FENCING_TOPOLOGY, scheduler->input, + LOG_TRACE); + pcmk__unpack_fencing_topology(section, scheduler); + section = get_xpath_object("//" PCMK_XE_TAGS, scheduler->input, LOG_NEVER); unpack_tags(section, scheduler); diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c index de623d49260..28867b878a9 100644 --- a/lib/pengine/unpack.c +++ b/lib/pengine/unpack.c @@ -909,6 +909,42 @@ unpack_resources(const xmlNode *xml_resources, pcmk_scheduler_t *scheduler) return TRUE; } +/*! + * \internal + * \brief Parse configuration XML for fencing topology information + * + * \param[in] xml_fencing_topology Top of fencing topology configuration XML + * \param[in,out] scheduler Scheduler data + * + * \return void + */ +void +pcmk__unpack_fencing_topology(const xmlNode *xml_fencing_topology, pcmk_scheduler_t *scheduler) +{ + xmlNode *xml_obj = NULL; + int id = 0; + + for (xml_obj = pcmk__xe_first_child(xml_fencing_topology, PCMK_XE_FENCING_LEVEL, NULL, NULL); + xml_obj != NULL; xml_obj = pcmk__xe_next_same(xml_obj)) { + + crm_element_value_int(xml_obj, PCMK_XA_INDEX, &id); + + // Ensure an ID was given + if (pcmk__str_empty(pcmk__xe_id(xml_obj))) { + pcmk__config_warn("Ignoring registration for topology level without ID"); + continue; + } + + // Ensure level ID is in allowed range + if ((id < ST__LEVEL_MIN) || (id > ST__LEVEL_MAX)) { + pcmk__config_warn("Ignoring topology registration with invalid level %d", + id); + continue; + } + + } +} + gboolean unpack_tags(xmlNode *xml_tags, pcmk_scheduler_t *scheduler) { From c8d04fc969d513c7cef4e5a7c1c6f8ab049aa62f Mon Sep 17 00:00:00 2001 From: Grace Chin Date: Wed, 3 Jul 2024 15:00:38 -0400 Subject: [PATCH 059/364] crm_verify: Add test for checking of fencing level IDs --- .../crm_verify_invalid_fencing_topology.xml | 260 ++++++++++++++++++ cts/cli/regression.tools.exp | 5 + cts/cts-cli.in | 7 +- include/crm_internal.h | 4 - lib/pengine/pe_status_private.h | 2 +- 5 files changed, 272 insertions(+), 6 deletions(-) create mode 100644 cts/cli/crm_verify_invalid_fencing_topology.xml diff --git a/cts/cli/crm_verify_invalid_fencing_topology.xml b/cts/cli/crm_verify_invalid_fencing_topology.xml new file mode 100644 index 00000000000..a6647fbd132 --- /dev/null +++ b/cts/cli/crm_verify_invalid_fencing_topology.xml @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cts/cli/regression.tools.exp b/cts/cli/regression.tools.exp index 2dd46bb314d..b1bfc3c451e 100644 --- a/cts/cli/regression.tools.exp +++ b/cts/cli/regression.tools.exp @@ -10267,6 +10267,11 @@ crm_shadow: Could not access shadow instance 'cts-cli': No such file or director =#=#=#= End test: Switch to nonexistent shadow instance (force) (XML) - No such object (105) =#=#=#= * Passed: crm_shadow - Switch to nonexistent shadow instance (force) (XML) +=#=#=#= Begin test: Verbosely verify a file-specified configuration with an unallowed fencing level ID =#=#=#= +warning: Ignoring topology registration with invalid level 10 +Warnings found during check: config not valid +=#=#=#= End test: Verbosely verify a file-specified configuration with an unallowed fencing level ID - Invalid configuration (78) =#=#=#= +* Passed: crm_verify - Verbosely verify a file-specified configuration with an unallowed fencing level ID =#=#=#= Begin test: Verify a file-specified invalid configuration (text output) =#=#=#= Errors found during check: config not valid -V may provide more details diff --git a/cts/cts-cli.in b/cts/cts-cli.in index 37dd530691f..faa83a86a32 100755 --- a/cts/cts-cli.in +++ b/cts/cts-cli.in @@ -2468,7 +2468,12 @@ function test_tools() { CIB_file_invalid_1="$test_home/cli/crm_verify_invalid_bz.xml" CIB_file_invalid_2="$test_home/cli/crm_verify_invalid_no_stonith.xml" - + CIB_file_invalid_3="$test_home/cli/crm_verify_invalid_fencing_topology.xml" + + desc="Verbosely verify a file-specified configuration with an unallowed fencing level ID" + cmd="crm_verify --xml-file '$CIB_file_invalid_3' --verbose" + test_assert $CRM_EX_CONFIG 0 + desc="Verify a file-specified invalid configuration (text output)" cmd="crm_verify --xml-file '$CIB_file_invalid_1'" test_assert $CRM_EX_CONFIG 0 diff --git a/include/crm_internal.h b/include/crm_internal.h index 358aad6bf98..18388b9fc26 100644 --- a/include/crm_internal.h +++ b/include/crm_internal.h @@ -87,8 +87,4 @@ #define ST__LEVEL_MIN 1 #define ST__LEVEL_MAX 9 -#ifdef __cplusplus - -#endif - #endif // CRM_INTERNAL__H diff --git a/lib/pengine/pe_status_private.h b/lib/pengine/pe_status_private.h index 9cdd2ec115b..b7837f4c824 100644 --- a/lib/pengine/pe_status_private.h +++ b/lib/pengine/pe_status_private.h @@ -103,7 +103,7 @@ gboolean unpack_resources(const xmlNode *xml_resources, G_GNUC_INTERNAL void pcmk__unpack_fencing_topology(const xmlNode *xml_fencing_topology, - pcmk_scheduler_t *scheduler); + pcmk_scheduler_t *scheduler); G_GNUC_INTERNAL gboolean unpack_config(xmlNode *config, pcmk_scheduler_t *scheduler); From 7ab61e764df38b7ec8349d54e46b66a1447b0b59 Mon Sep 17 00:00:00 2001 From: "Gao,Yan" Date: Tue, 2 Jul 2024 00:12:14 +0200 Subject: [PATCH 060/364] Refactor: libcib: new function cib__signon_attempts() ... for future use It's similar to how it's done in pcmk__connect_ipc(). --- include/crm/cib/internal.h | 3 +++ lib/cib/cib_utils.c | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/include/crm/cib/internal.h b/include/crm/cib/internal.h index d191009ff57..b4f46e61ca0 100644 --- a/include/crm/cib/internal.h +++ b/include/crm/cib/internal.h @@ -288,6 +288,9 @@ cib_callback_client_t* cib__lookup_id (int call_id); */ int cib__signon_query(pcmk__output_t *out, cib_t **cib, xmlNode **cib_object); +int cib__signon_attempts(cib_t *cib, const char *name, enum cib_conn_type type, + int attempts); + int cib__clean_up_connection(cib_t **cib); int cib__update_node_attr(pcmk__output_t *out, cib_t *cib, int call_options, diff --git a/lib/cib/cib_utils.c b/lib/cib/cib_utils.c index 7ef378929eb..34652dc97a4 100644 --- a/lib/cib/cib_utils.c +++ b/lib/cib/cib_utils.c @@ -1015,6 +1015,33 @@ cib__signon_query(pcmk__output_t *out, cib_t **cib, xmlNode **cib_object) return rc; } +int +cib__signon_attempts(cib_t *cib, const char *name, enum cib_conn_type type, + int attempts) +{ + int rc = pcmk_rc_ok; + + crm_trace("Attempting connection to CIB manager (up to %d time%s)", + attempts, pcmk__plural_s(attempts)); + + for (int remaining = attempts - 1; remaining >= 0; --remaining) { + rc = cib->cmds->signon(cib, name, type); + + if ((rc == pcmk_rc_ok) + || (remaining == 0) + || ((errno != EAGAIN) && (errno != EALREADY))) { + break; + } + + // Retry after soft error (interrupted by signal, etc.) + pcmk__sleep_ms((attempts - remaining) * 500); + crm_debug("Re-attempting connection to CIB manager (%d attempt%s remaining)", + remaining, pcmk__plural_s(remaining)); + } + + return rc; +} + int cib__clean_up_connection(cib_t **cib) { From 843a8e6cc96f137819fb5f4e1d45abce58c05ca3 Mon Sep 17 00:00:00 2001 From: "Gao,Yan" Date: Tue, 2 Jul 2024 10:20:24 +0200 Subject: [PATCH 061/364] Fix: tools: CIB clients retry signon upon an EAGAIN error ... up to 5 times. Previously CIB clients wouldn't retry signon upon an EAGAIN and directly return a connection error, which made them not resilient enough. --- tools/cibadmin.c | 2 +- tools/crm_attribute.c | 2 +- tools/crm_node.c | 2 +- tools/crm_resource.c | 2 +- tools/crm_shadow.c | 2 +- tools/crm_ticket.c | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/cibadmin.c b/tools/cibadmin.c index bc30ac05564..74a142c9f3a 100644 --- a/tools/cibadmin.c +++ b/tools/cibadmin.c @@ -948,7 +948,7 @@ do_init(void) int rc = pcmk_ok; the_cib = cib_new(); - rc = the_cib->cmds->signon(the_cib, crm_system_name, cib_command); + rc = cib__signon_attempts(the_cib, crm_system_name, cib_command, 5); if (rc != pcmk_ok) { crm_err("Could not connect to the CIB: %s", pcmk_strerror(rc)); fprintf(stderr, "Could not connect to the CIB: %s\n", diff --git a/tools/crm_attribute.c b/tools/crm_attribute.c index f9b14344ccf..c941afa88b7 100644 --- a/tools/crm_attribute.c +++ b/tools/crm_attribute.c @@ -818,7 +818,7 @@ main(int argc, char **argv) } the_cib = cib_new(); - rc = the_cib->cmds->signon(the_cib, crm_system_name, cib_command); + rc = cib__signon_attempts(the_cib, crm_system_name, cib_command, 5); rc = pcmk_legacy2rc(rc); if (rc != pcmk_rc_ok) { diff --git a/tools/crm_node.c b/tools/crm_node.c index 3a8d2d1b21c..d4153605a69 100644 --- a/tools/crm_node.c +++ b/tools/crm_node.c @@ -579,7 +579,7 @@ purge_node_from_cib(const char *node_name, long node_id) if (cib == NULL) { return ENOTCONN; } - rc = cib->cmds->signon(cib, crm_system_name, cib_command); + rc = cib__signon_attempts(cib, crm_system_name, cib_command, 5); if (rc == pcmk_ok) { rc = cib->cmds->init_transaction(cib); } diff --git a/tools/crm_resource.c b/tools/crm_resource.c index c592e86a023..ea4f268b9f0 100644 --- a/tools/crm_resource.c +++ b/tools/crm_resource.c @@ -1708,7 +1708,7 @@ main(int argc, char **argv) _("Could not create CIB connection")); goto done; } - rc = cib_conn->cmds->signon(cib_conn, crm_system_name, cib_command); + rc = cib__signon_attempts(cib_conn, crm_system_name, cib_command, 5); rc = pcmk_legacy2rc(rc); if (rc != pcmk_rc_ok) { exit_code = pcmk_rc2exitc(rc); diff --git a/tools/crm_shadow.c b/tools/crm_shadow.c index aedf805c907..b7a9918dad1 100644 --- a/tools/crm_shadow.c +++ b/tools/crm_shadow.c @@ -455,7 +455,7 @@ connect_real_cib(cib_t **real_cib, GError **error) return rc; } - rc = (*real_cib)->cmds->signon(*real_cib, crm_system_name, cib_command); + rc = cib__signon_attempts(*real_cib, crm_system_name, cib_command, 5); rc = pcmk_legacy2rc(rc); if (rc != pcmk_rc_ok) { exit_code = pcmk_rc2exitc(rc); diff --git a/tools/crm_ticket.c b/tools/crm_ticket.c index 2faa74e2a24..bd2bbcf167b 100644 --- a/tools/crm_ticket.c +++ b/tools/crm_ticket.c @@ -405,7 +405,7 @@ main(int argc, char **argv) goto done; } - rc = cib_conn->cmds->signon(cib_conn, crm_system_name, cib_command); + rc = cib__signon_attempts(cib_conn, crm_system_name, cib_command, 5); rc = pcmk_legacy2rc(rc); if (rc != pcmk_rc_ok) { From 22e093a5bff608c86d0ea68588078ca747a6d945 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Thu, 11 Jul 2024 12:29:34 -0700 Subject: [PATCH 062/364] Fix: tools: crm_node -i must initialize nodeid before passing pointer This is a regression introduced in 2.1.7 via a27f099. Currently, crm_node -i passes a pointer to the uninitialized uint32_t nodeid variable, to pcmk__query_node_info(). Since the pointer is non-NULL, pcmk__query_node_info() dereferences it. Whatever garbage value resides there gets passed as the ID to query. The controller parses the node ID from the request as an int. If the garbage value is greater than INT_MAX, it overflows to a negative int value, and the controller (in handle_node_info_request()) defaults it to 0. In that case, there's no problem: we search for the local node name instead of the garbage node ID. If the garbage value is less than or equal to INT_MAX, we search for it directly. We won't find a matching node unless one happens to exist with that garbage node ID. In the case of no match, crm_node -i outputs "Node is not known to cluster" instead of the local node's cluster-layer ID. Thanks to Artur Novik for the report: https://lists.clusterlabs.org/pipermail/users/2024-July/036270.html Fixes T847 Signed-off-by: Reid Wahl --- lib/pacemaker/pcmk_cluster_queries.c | 22 +++++++++++----------- tools/crm_node.c | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/pacemaker/pcmk_cluster_queries.c b/lib/pacemaker/pcmk_cluster_queries.c index 3229fae3eff..8404584580e 100644 --- a/lib/pacemaker/pcmk_cluster_queries.c +++ b/lib/pacemaker/pcmk_cluster_queries.c @@ -586,25 +586,25 @@ pcmk_designated_controller(xmlNodePtr *xml, unsigned int message_timeout_ms) * the controller * * \param[in,out] out Output object - * \param[in,out] node_id ID of node whose name to get. If \p NULL - * or 0, get the local node name. If not - * \p NULL, store the true node ID here on + * \param[in,out] node_id ID of node whose info to get. If \p NULL + * or 0, get the local node's info. If not + * \c NULL, store the true node ID here on * success. - * \param[out] node_name If not \p NULL, where to store the node + * \param[out] node_name If not \c NULL, where to store the node * name - * \param[out] uuid If not \p NULL, where to store the node + * \param[out] uuid If not \c NULL, where to store the node * UUID - * \param[out] state If not \p NULL, where to store the + * \param[out] state If not \c NULL, where to store the * membership state - * \param[out] is_remote If not \p NULL, where to store whether the + * \param[out] is_remote If not \c NULL, where to store whether the * node is a Pacemaker Remote node - * \param[out] have_quorum If not \p NULL, where to store whether the + * \param[out] have_quorum If not \c NULL, where to store whether the * node has quorum * \param[in] show_output Whether to show the node info * \param[in] message_timeout_ms How long to wait for a reply from the - * \p pacemaker-controld API. If 0, - * \p pcmk_ipc_dispatch_sync will be used. - * Otherwise, \p pcmk_ipc_dispatch_poll will + * \c pacemaker-controld API. If 0, + * \c pcmk_ipc_dispatch_sync will be used. + * Otherwise, \c pcmk_ipc_dispatch_poll will * be used. * * \return Standard Pacemaker return code diff --git a/tools/crm_node.c b/tools/crm_node.c index d4153605a69..8aa8d3d29c7 100644 --- a/tools/crm_node.c +++ b/tools/crm_node.c @@ -434,7 +434,7 @@ run_controller_mainloop(void) static void print_node_id(void) { - uint32_t nodeid; + uint32_t nodeid = 0; int rc = pcmk__query_node_info(out, &nodeid, NULL, NULL, NULL, NULL, NULL, false, 0); From d7c233090057d4f660fa458a2ff97896b15ea951 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Thu, 11 Jul 2024 12:43:49 -0700 Subject: [PATCH 063/364] Refactor: various: Don't set cluster-layer node ID as XML ID Currently, we call the pcmk__xe_set_id() function using a stringified version of the numeric cluster-layer node ID. However, pcmk__xe_set_id() tries to sanitize its input to a valid XML ID. An XML ID cannot begin with a digit. crm_xml_set_id() does not sanitize comprehensively, and in particular, it does not care whether its argument begins with a digit. So the current code doesn't cause a problem. Still, as a best practice, set the PCMK_XA_ID attribute using crm_xml_add_ll() instead. Ref T848 Signed-off-by: Reid Wahl --- daemons/controld/controld_messages.c | 6 +++++- lib/cluster/corosync.c | 2 +- lib/common/ipc_client.c | 2 +- lib/common/ipc_controld.c | 9 ++++++--- tools/crm_node.c | 4 ++-- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/daemons/controld/controld_messages.c b/daemons/controld/controld_messages.c index 5f7a78c1088..60dad32c9a0 100644 --- a/daemons/controld/controld_messages.c +++ b/daemons/controld/controld_messages.c @@ -908,7 +908,11 @@ handle_node_info_request(const xmlNode *msg) pcmk_is_set(controld_globals.flags, controld_has_quorum)); - // Check whether client requested node info by ID and/or name + /* Check whether client requested node info by ID and/or name + * + * @TODO A Corosync-layer node ID is of type uint32_t. We should be able to + * handle legitimate node IDs greater than INT_MAX, but currently we do not. + */ crm_element_value_int(msg, PCMK_XA_ID, &node_id); if (node_id < 0) { node_id = 0; diff --git a/lib/cluster/corosync.c b/lib/cluster/corosync.c index ff4da6035d5..3ec4dcb1ce3 100644 --- a/lib/cluster/corosync.c +++ b/lib/cluster/corosync.c @@ -646,7 +646,7 @@ pcmk__corosync_add_nodes(xmlNode *xml_parent) if (xml_parent) { xmlNode *node = pcmk__xe_create(xml_parent, PCMK_XE_NODE); - crm_xml_set_id(node, "%u", nodeid); + crm_xml_add_ll(node, PCMK_XA_ID, (long long) nodeid); crm_xml_add(node, PCMK_XA_UNAME, name); } } diff --git a/lib/common/ipc_client.c b/lib/common/ipc_client.c index 37a098279cf..1a097cb2ae3 100644 --- a/lib/common/ipc_client.c +++ b/lib/common/ipc_client.c @@ -769,7 +769,7 @@ create_purge_node_request(const pcmk_ipc_api_t *api, const char *node_name, request = create_request(CRM_OP_RM_NODE_CACHE, NULL, NULL, pcmk_ipc_name(api, false), client, NULL); if (nodeid > 0) { - crm_xml_set_id(request, "%lu", (unsigned long) nodeid); + crm_xml_add_ll(request, PCMK_XA_ID, (long long) nodeid); } crm_xml_add(request, PCMK_XA_UNAME, node_name); break; diff --git a/lib/common/ipc_controld.c b/lib/common/ipc_controld.c index 755c034e22c..b9044793fdf 100644 --- a/lib/common/ipc_controld.c +++ b/lib/common/ipc_controld.c @@ -9,9 +9,12 @@ #include -#include -#include #include +#include // PRIu32 +#include +#include // uint32_t +#include + #include #include @@ -417,7 +420,7 @@ pcmk_controld_api_node_info(pcmk_ipc_api_t *api, uint32_t nodeid) return EINVAL; } if (nodeid > 0) { - crm_xml_set_id(request, "%lu", (unsigned long) nodeid); + crm_xml_add_ll(request, PCMK_XA_ID, nodeid); } rc = send_controller_request(api, request, true); diff --git a/tools/crm_node.c b/tools/crm_node.c index 8aa8d3d29c7..079233e7f0b 100644 --- a/tools/crm_node.c +++ b/tools/crm_node.c @@ -549,7 +549,7 @@ remove_from_section(cib_t *cib, const char *element, const char *section, crm_xml_add(xml, PCMK_XA_UNAME, node_name); if (node_id > 0) { - crm_xml_set_id(xml, "%ld", node_id); + crm_xml_add_ll(xml, PCMK_XA_ID, node_id); } rc = cib->cmds->remove(cib, section, xml, cib_transaction); @@ -689,7 +689,7 @@ purge_node_from_fencer(const char *node_name, long node_id) cmd = create_request(CRM_OP_RM_NODE_CACHE, NULL, NULL, "stonith-ng", crm_system_name, NULL); if (node_id > 0) { - crm_xml_set_id(cmd, "%ld", node_id); + crm_xml_add_ll(cmd, PCMK_XA_ID, node_id); } crm_xml_add(cmd, PCMK_XA_UNAME, node_name); From bf1a172d5f199332c461ac14a9c9ca518689c995 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 16 Jul 2024 18:15:38 -0500 Subject: [PATCH 064/364] Doc: ChangeLog: update for 2.1.8-rc4 release ... and drop a duplicate entry from an earlier release --- ChangeLog | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index a0193c9be61..22c7e078f4f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +* Tue Jul 16 2024 Ken Gaillot Pacemaker-2.1.8-rc4 +- 6 commits with 21 files changed, 126 insertions(+), 38 deletions(-) + +- Features added since Pacemaker-2.1.8-rc3 + + tools: crm_verify now reports invalid fence topology levels + +- Fixes since Pacemaker-2.1.8-rc3 + + tools: crm_node -i must initialize nodeid before passing pointer + (regression introduced in 2.1.7) + + tools: cibadmin, crm_attribute, crm_node, crm_resource, crm_shadow, and + crm_ticket now retry CIB connections after transient failures + * Tue Jul 02 2024 Ken Gaillot Pacemaker-2.1.8-rc3 - 16 commits with 11 files changed, 157 insertions(+), 57 deletions(-) @@ -1139,7 +1151,6 @@ agent's metadata action runs crm_node + controller: avoid timing issue that increments resource fail count twice + fencing: unfence all nodes after device configuration changes - + fencing: avoid memory leaks when processing topology requests + fencing: ignore node that executed action when checking whether actions are equivalent + scheduler,controller: calculate secure digest consistently From 671d2752db0464938ec907559811b8ed744779a2 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 22 Jul 2024 16:21:01 -0500 Subject: [PATCH 065/364] Test: cts-lab: allow forcing systemd journal usage --- python/pacemaker/_cts/environment.py | 7 +++++-- python/pacemaker/_cts/watcher.py | 6 +++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/python/pacemaker/_cts/environment.py b/python/pacemaker/_cts/environment.py index 2407414ab46..6d81af55d44 100644 --- a/python/pacemaker/_cts/environment.py +++ b/python/pacemaker/_cts/environment.py @@ -357,7 +357,7 @@ def _parse_args(self, argv): grp2 = parser.add_argument_group("Options that CTS will usually auto-detect correctly") grp2.add_argument("-L", "--logfile", metavar="PATH", - help="Where to look for logs from cluster nodes") + help="Where to look for logs from cluster nodes (or 'journal' for systemd journal)") grp2.add_argument("--at-boot", "--cluster-starts-at-boot", choices=["1", "0", "yes", "no"], help="Does the cluster software start at boot time?") @@ -584,7 +584,10 @@ def _parse_args(self, argv): self["ClobberCIB"] = True self["IPBase"] = args.ip - if args.logfile: + if args.logfile == "journal": + self["LogAuditDisabled"] = True + self["log_kind"] = LogKind.JOURNAL + elif args.logfile: self["LogAuditDisabled"] = True self["LogFileName"] = args.logfile self["log_kind"] = LogKind.REMOTE_FILE diff --git a/python/pacemaker/_cts/watcher.py b/python/pacemaker/_cts/watcher.py index 7870a9f9454..6227e31dd99 100644 --- a/python/pacemaker/_cts/watcher.py +++ b/python/pacemaker/_cts/watcher.py @@ -218,7 +218,7 @@ def __init__(self, host=None, name=None): host -- The cluster node on which to watch the journal name -- A unique name to use when logging about this watch """ - SearchObj.__init__(self, name, host, name) + SearchObj.__init__(self, "journal", host, name) self._parser = isoparser() def _msg_after_limit(self, msg): @@ -400,8 +400,8 @@ def __init__(self, log, regexes, hosts, kind, name="Anon", timeout=10, if not self.hosts: raise ValueError("LogWatcher requires hosts argument") - if not self.filename: - raise ValueError("LogWatcher requires log argument") + if self.kind != LogKind.JOURNAL and not self.filename: + raise ValueError("LogWatcher requires log file name if not journal") if not silent: for regex in self.regexes: From 06fd2be5eb326ea84f53186c655cc1d3314d7b71 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 23 Jul 2024 16:26:40 -0500 Subject: [PATCH 066/364] Doc: Pacemaker Explained: correct rST typo --- doc/sphinx/Pacemaker_Explained/local-options.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/sphinx/Pacemaker_Explained/local-options.rst b/doc/sphinx/Pacemaker_Explained/local-options.rst index 915a65b9ecd..74785f5b668 100644 --- a/doc/sphinx/Pacemaker_Explained/local-options.rst +++ b/doc/sphinx/Pacemaker_Explained/local-options.rst @@ -713,7 +713,7 @@ environment variables when Pacemaker daemons start up. * - .. _sbd_sync_resource_startup: .. index:: - pair:: node option; SBD_SYNC_RESOURCE_STARTUP + pair: node option; SBD_SYNC_RESOURCE_STARTUP SBD_SYNC_RESOURCE_STARTUP - :ref:`boolean ` @@ -726,7 +726,7 @@ environment variables when Pacemaker daemons start up. * - .. _sbd_watchdog_timeout: .. index:: - pair:: node option; SBD_WATCHDOG_TIMEOUT + pair: node option; SBD_WATCHDOG_TIMEOUT SBD_WATCHDOG_TIMEOUT - :ref:`duration ` From 95e81858264b0553e95af4d3512d5640a17ccbb1 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 23 Jul 2024 16:41:25 -0500 Subject: [PATCH 067/364] Doc: Pacemaker Explained: overhaul status chapter Most importantly, specify that the status section's structure and contents are internal and subject to change, and update the in_ccm and crmd types to epoch times. Also convert tables to list tables, and improve wording and indexing. --- doc/sphinx/Pacemaker_Explained/status.rst | 579 +++++++++++++--------- 1 file changed, 335 insertions(+), 244 deletions(-) diff --git a/doc/sphinx/Pacemaker_Explained/status.rst b/doc/sphinx/Pacemaker_Explained/status.rst index 6384edaef6f..2cdf20c7e88 100644 --- a/doc/sphinx/Pacemaker_Explained/status.rst +++ b/doc/sphinx/Pacemaker_Explained/status.rst @@ -1,280 +1,373 @@ .. index:: - single: status - single: XML element, status + pair: XML element; status -Status -- Here be dragons -------------------------- +Status +------ +Pacemaker automatically generates a ``status`` section in the CIB (inside the +``cib`` element, at the same level as ``configuration``). The status is +transient, and is not stored to disk with the rest of the CIB. -Most users never need to understand the contents of the status section -and can be happy with the output from ``crm_mon``. +The section's structure and contents are internal to Pacemaker and subject to +change from release to release. Its often obscure element and attribute names +are kept for historical reasons, to maintain compatibility with older versions +during rolling upgrades. + +Users should not modify the section directly, though various command-line tool +options affect it indirectly. -However for those with a curious inclination, this section attempts to -provide an overview of its contents. .. index:: - single: node; status + pair: XML element; node_state + single: node; state -Node Status -########### +Node State +########## -In addition to the cluster's configuration, the CIB holds an -up-to-date representation of each cluster node in the ``status`` section. +The ``status`` element contains ``node_state`` elements for each node in the +cluster (and potentially nodes that have been removed from the configuration +since the cluster started). The ``node_state`` element has attributes that +allow the cluster to determine whether the node is healthy. -.. topic:: A bare-bones status entry for a healthy node **cl-virt-1** +.. topic:: Example minimal node state entry .. code-block:: xml - + -Users are highly recommended *not* to modify any part of a node's -state *directly*. The cluster will periodically regenerate the entire -section from authoritative sources, so any changes should be done -with the tools appropriate to those sources. - -.. table:: **Authoritative Sources for State Information** - :widths: 1 1 - - +----------------------+----------------------+ - | CIB Object | Authoritative Source | - +======================+======================+ - | node_state | pacemaker-controld | - +----------------------+----------------------+ - | transient_attributes | pacemaker-attrd | - +----------------------+----------------------+ - | lrm | pacemaker-execd | - +----------------------+----------------------+ - -The fields used in the ``node_state`` objects are named as they are -largely for historical reasons, to maintain compatibility with older versions. - -.. table:: **Node Status Fields** - :widths: 1 3 - - +------------------+----------------------------------------------------------+ - | Field | Description | - +==================+==========================================================+ - | id | .. index: | - | | single: id; node status | - | | single: node; status, id | - | | | - | | Unique identifier for the node. Corosync-based clusters | - | | use a numeric counter. | - +------------------+----------------------------------------------------------+ - | uname | .. index:: | - | | single: uname; node status | - | | single: node; status, uname | - | | | - | | The node's name as known by the cluster | - +------------------+----------------------------------------------------------+ - | in_ccm | .. index:: | - | | single: in_ccm; node status | - | | single: node; status, in_ccm | - | | | - | | Is the node a member at the cluster communication later? | - | | Allowed values: ``true``, ``false``. | - +------------------+----------------------------------------------------------+ - | crmd | .. index:: | - | | single: crmd; node status | - | | single: node; status, crmd | - | | | - | | Is the node a member at the pacemaker layer? Allowed | - | | values: ``online``, ``offline``. | - +------------------+----------------------------------------------------------+ - | crm-debug-origin | .. index:: | - | | single: crm-debug-origin; node status | - | | single: node; status, crm-debug-origin | - | | | - | | The name of the source function that made the most | - | | recent change (for debugging purposes). | - +------------------+----------------------------------------------------------+ - | join | .. index:: | - | | single: join; node status | - | | single: node; status, join | - | | | - | | Does the node participate in hosting resources? | - | | Allowed values: ``down``, ``pending``, ``member``. | - | | ``banned``. | - +------------------+----------------------------------------------------------+ - | expected | .. index:: | - | | single: expected; node status | - | | single: node; status, expected | - | | | - | | Expected value for ``join``. | - +------------------+----------------------------------------------------------+ - -The cluster uses these fields to determine whether, at the node level, the -node is healthy or is in a failed state and needs to be fenced. - +.. list-table:: **Attributes of a node_state Element** + :class: longtable + :widths: 1 1 3 + :header-rows: 1 + + * - Name + - Type + - Description + * - .. _node_state_id: + + .. index:: + pair: node_state; id + + id + - :ref:`text ` + - Node ID (identical to ``id`` of corresponding ``node`` element in the + ``configuration`` section) + * - .. node_state_uname: + + .. index:: + pair: node_state; uname + + uname + - :ref:`text ` + - Node name (identical to ``uname`` of corresponding ``node`` element in the + ``configuration`` section) + * - .. node_state_in_ccm: + + .. index:: + pair: node_state; in_ccm + + in_ccm + - :ref:`epoch time ` *(since 2.1.7; previously boolean)* + - If the node's controller is currently in the cluster layer's membership, + this is the epoch time at which it joined (or 1 if the node is in the + process of leaving the cluster), otherwise 0 *(since 2.1.7; previously, + it was "true" or "false")* + * - .. node_state_crmd: + + .. index:: + pair: node_state; crmd + + crmd + - :ref:`epoch time ` *(since 2.1.7; previously an enumeration)* + - If the node's controller is currently in the cluster layer's controller + messaging group, this is the epoch time at which it joined, otherwise 0 + *(since 2.1.7; previously, the value was either "online" or "offline")* + * - .. node_state_crm_debug_origin: + + .. index:: + pair: node_state; crm-debug-origin + + crm-debug-origin + - :ref:`text ` + - Name of the source code function that recorded this ``node_state`` + element (for debugging) + * - .. node_state_join: + + .. index:: + pair: node_state; join + + join + - :ref:`enumeration ` + - Current status of node's controller join sequence (and thus whether it + is eligible to run resources). Allowed values: + + * ``down``: Not yet joined + * ``pending``: In the process of joining or leaving + * ``member``: Fully joined + * ``banned``: Rejected by DC + * - .. node_state_expected: + + .. index:: + pair: node_state; expected + + expected + - :ref:`enumeration ` + - What cluster expects ``join`` to be in the immediate future. Allowed + values are same as for ``join``. + + +.. _transient_attributes: + +.. index:: + pair: XML element; transient_attributes + single: node; transient attribute + single: node attribute; transient + Transient Node Attributes ######################### -Like regular :ref:`node_attributes`, the name/value -pairs listed in the ``transient_attributes`` section help to describe the -node. However they are forgotten by the cluster when the node goes offline. -This can be useful, for instance, when you want a node to be in standby mode -(not able to run resources) just until the next reboot. - -In addition to any values the administrator sets, the cluster will -also store information about failed resources here. +The ``transient_attributes`` section specifies transient +:ref:`node_attributes`. In addition to any values set by the administrator or +resource agents using the ``attrd_updater`` or ``crm_attribute`` tools, the +cluster stores various state information here. -.. topic:: A set of transient node attributes for node **cl-virt-1** +.. topic:: Example transient node attributes for a node .. code-block:: xml - -In the above example, we can see that a monitor on the ``pingd:0`` resource has -failed once, at 09:22:22 UTC 6 April 2009. [#]_. -We also see that the node is connected to three **pingd** peers and that -all known resources have been checked for on this machine (``probe_complete``). - .. index:: - single: Operation History + pair: XML element; lrm + pair: XML element; lrm_resources + pair: node; history -Operation History -################# - -A node's resource history is held in the ``lrm_resources`` element (a child -of the ``lrm`` element). The information stored here includes enough -information for the cluster to stop the resource safely if it is -removed from the ``configuration`` section. Specifically, the resource's -``id``, ``class``, ``type`` and ``provider`` are stored. +Node History +############ -.. topic:: A record of the ``apcstonith`` resource +Each ``node_state`` element contains an ``lrm`` element with a history of +certain resource actions performed on the node. The ``lrm`` element contains an +``lrm_resources`` element. - .. code-block:: xml +.. index:: + pair: XML element; lrm_resource + pair: resource; history - - -Additionally, we store history entries for certain actions. +Resource History +________________ + +The ``lrm_resources`` element contains an ``lrm_resource`` element for each +resource that has had an action performed on the node. + +An ``lrm_resource`` entry has attributes allowing the cluster to stop the +resource safely even if it is removed from the configuration. Specifically, the +resource's ``id``, ``class``, ``type`` and ``provider`` are recorded. + +.. index:: + pair: XML element; lrm_rsc_op + pair: action; history + +Action History +______________ -.. table:: **Attributes of an lrm_rsc_op element** +Each ``lrm_resource`` element contains an ``lrm_rsc_op`` element for each +recorded action performed for that resource on that node. (Not all actions are +recorded, just enough to determine the resource's state.) + +.. list-table:: **Attributes of an lrm_rsc_op element** :class: longtable - :widths: 1 3 - - +------------------+----------------------------------------------------------+ - | Field | Description | - +==================+==========================================================+ - | id | .. index:: | - | | single: id; action status | - | | single: action; status, id | - | | | - | | Identifier for the history entry constructed from the | - | | resource ID, action name, and operation interval. | - +------------------+----------------------------------------------------------+ - | call-id | .. index:: | - | | single: call-id; action status | - | | single: action; status, call-id | - | | | - | | A node-specific counter used to determine the order in | - | | which actions were executed. | - +------------------+----------------------------------------------------------+ - | operation | .. index:: | - | | single: operation; action status | - | | single: action; status, operation | - | | | - | | The action name the resource agent was invoked with. | - +------------------+----------------------------------------------------------+ - | interval | .. index:: | - | | single: interval; action status | - | | single: action; status, interval | - | | | - | | The frequency, in milliseconds, at which the operation | - | | will be repeated. One-time execution is indicated by 0. | - +------------------+----------------------------------------------------------+ - | op-status | .. index:: | - | | single: op-status; action status | - | | single: action; status, op-status | - | | | - | | The execution status of this action. The meanings of | - | | these codes are internal to Pacemaker. | - +------------------+----------------------------------------------------------+ - | rc-code | .. index:: | - | | single: rc-code; action status | - | | single: action; status, rc-code | - | | | - | | The resource agent's exit status for this action. Refer | - | | to the *Resource Agents* chapter of | - | | *Pacemaker Administration* for how these values are | - | | interpreted. | - +------------------+----------------------------------------------------------+ - | last-rc-change | .. index:: | - | | single: last-rc-change; action status | - | | single: action; status, last-rc-change | - | | | - | | Machine-local date/time, in seconds since epoch, at | - | | which the action first returned the current value of | - | | ``rc-code``. For diagnostic purposes. | - +------------------+----------------------------------------------------------+ - | exec-time | .. index:: | - | | single: exec-time; action status | - | | single: action; status, exec-time | - | | | - | | Time, in milliseconds, that the action was running for. | - | | For diagnostic purposes. | - +------------------+----------------------------------------------------------+ - | queue-time | .. index:: | - | | single: queue-time; action status | - | | single: action; status, queue-time | - | | | - | | Time, in seconds, that the action was queued for in the | - | | local executor. For diagnostic purposes. | - +------------------+----------------------------------------------------------+ - | crm_feature_set | .. index:: | - | | single: crm_feature_set; action status | - | | single: action; status, crm_feature_set | - | | | - | | The Pacemaker feature set used to record this entry. | - +------------------+----------------------------------------------------------+ - | transition-key | .. index:: | - | | single: transition-key; action status | - | | single: action; status, transition-key | - | | | - | | A concatenation of the action's graph action number, the | - | | graph number, the expected result and the UUID of the | - | | controller instance that scheduled it. This is used to | - | | construct ``transition-magic`` (below). | - +------------------+----------------------------------------------------------+ - | transition-magic | .. index:: | - | | single: transition-magic; action status | - | | single: action; status, transition-magic | - | | | - | | A concatenation of ``op-status``, ``rc-code`` | - | | and ``transition-key``. Guaranteed to be unique for the | - | | life of the cluster (which ensures it is part of CIB | - | | update notifications) and contains all the information | - | | needed for the controller to correctly analyze and | - | | process the completed action. Most importantly, the | - | | decomposed elements tell the controller if the history | - | | entry was expected and whether it failed. | - +------------------+----------------------------------------------------------+ - | op-digest | .. index:: | - | | single: op-digest; action status | - | | single: action; status, op-digest | - | | | - | | An MD5 sum representing the parameters passed to the | - | | action. Used to detect changes to the configuration, to | - | | restart resources if necessary. | - +------------------+----------------------------------------------------------+ - | crm-debug-origin | .. index:: | - | | single: crm-debug-origin; action status | - | | single: action; status, crm-debug-origin | - | | | - | | The origin of the current values. For diagnostic | - | | purposes. | - +------------------+----------------------------------------------------------+ - + :widths: 1 1 3 + :header-rows: 1 + + * - Name + - Type + - Description + * - .. _lrm_rsc_op_id: + + .. index:: + pair: lrm_rsc_op; id + + id + - :ref:`text ` + - Identifier for the history entry constructed from the resource ID, + action name or history entry type, and action interval. + * - .. _lrm_rsc_op_operation_key: + + .. index:: + pair: lrm_rsc_op; operation_key + + operation_key + - :ref:`text ` + - Identifier for the action that was executed, constructed from the + resource ID, action name, and action interval. + * - .. _lrm_rsc_op_operation: + + .. index:: + pair: lrm_rsc_op; operation + + operation + - :ref:`text ` + - The name of the action the history entry is for + * - .. _lrm_rsc_op_crm_debug_origin: + + .. index:: + pair: lrm_rsc_op; crm-debug-origin + + crm-debug-origin + - :ref:`text ` + - Name of the source code function that recorded this entry (for + debugging) + * - .. _lrm_rsc_op_crm_feature_set: + + .. index:: + pair: lrm_rsc_op; crm_feature_set + + crm_feature_set + - :ref:`version ` + - The Pacemaker feature set used to record this entry. + * - .. _lrm_rsc_op_transition_key: + + .. index:: + pair: lrm_rsc_op; transition-key + + transition-key + - :ref:`text ` + - A concatenation of the action's transition graph action number, the + transition graph number, the action's expected result, and the UUID of + the controller instance that scheduled it. + * - .. _lrm_rsc_op_transition_magic: + + .. index:: + pair: lrm_rsc_op; transition-magic + + transition-magic + - :ref:`text ` + - A concatenation of ``op-status``, ``rc-code``, and ``transition-key``. + * - .. _lrm_rsc_op_exit_reason: + + .. index:: + pair: lrm_rsc_op; exit-reason + + exit-reason + - :ref:`text ` + - An error message (if available) from the resource agent or Pacemaker if + the action did not return success. + * - .. _lrm_rsc_op_on_node: + + .. index:: + pair: lrm_rsc_op; on_node + + on_node + - :ref:`text ` + - The name of the node that executed the action (identical to the + ``uname`` of the enclosing ``node_state`` element) + * - .. _lrm_rsc_op_call_id: + + .. index:: + pair: lrm_rsc_op; call-id + + call-id + - :ref:`integer ` + - A node-specific counter used to determine the order in which actions + were executed. + * - .. _lrm_rsc_op_rc_code: + + .. index:: + pair: lrm_rsc_op; rc-code + + rc-code + - :ref:`integer ` + - The resource agent's exit status for this action. Refer to the *Resource + Agents* chapter of *Pacemaker Administration* for how these values are + interpreted. + * - .. _lrm_rsc_op_op_status: + + .. index:: + pair: lrm_rsc_op; op-status + + op-status + - :ref:`integer ` + - The execution status of this action. The meanings of these codes are + internal to Pacemaker. + * - .. _lrm_rsc_op_interval: + + .. index:: + pair: lrm_rsc_op; interval + + interval + - :ref:`nonnegative integer ` + - If the action is recurring, its frequency (in milliseconds), otherwise + 0. + * - .. _lrm_rsc_op_last_rc_change: + + .. index:: + pair: lrm_rsc_op; last-rc-change + + last-rc-change + - :ref:`epoch time ` + - Node-local time at which the action first returned the current value of + ``rc-code``. + * - .. _lrm_rsc_op_exec_time: + + .. index:: + pair: lrm_rsc_op; exec-time + + exec-time + - :ref:`integer ` + - Time (in seconds) that action execution took (if known) + * - .. _lrm_rsc_op_queue_time: + + .. index:: + pair: lrm_rsc_op; queue-time + + queue-time + - :ref:`integer ` + - Time (in seconds) that action was queued in the local executor (if known) + * - .. _lrm_rsc_op_op_digest: + + .. index:: + pair: lrm_rsc_op; op-digest + + op-digest + - :ref:`text ` + - If present, this is a hash of the parameters passed to the action. If a + hash of the currently configured parameters does not match this, that + means the resource configuration changed since the action was performed, + and the resource must be reloaded or restarted. + * - .. _lrm_rsc_op_op_restart_digest: + + .. index:: + pair: lrm_rsc_op; op-restart-digest + + op-restart-digest + - :ref:`text ` + - If present, the resource agent supports reloadable parameters, and this + is a hash of the non-reloadable parameters passed to the action. This + allows the cluster to choose between reload and restart when one is + needed. + * - .. _lrm_rsc_op_op_secure_digest: + + .. index:: + pair: lrm_rsc_op; op-secure-digest + + op-secure-digest + - :ref:`text ` + - If present, the resource agent marks some parameters as sensitive, and + this is a hash of the non-sensitive parameters passed to the action. + This allows the value of sensitive parameters to be removed from a saved + copy of the CIB while still allowing scheduler simulations to be + performed on that copy. + + Simple Operation History Example ________________________________ @@ -292,8 +385,8 @@ ________________________________ last-rc-change="1239008085" exec-time="10" queue-time="0"/> -In the above example, the action is a non-recurring monitor operation -often referred to as a "probe" for the ``apcstonith`` resource. +The above example shows the history entry for a probe (non-recurring monitor +operation) for the ``apcstonith`` resource. The cluster schedules probes for every configured resource on a node when the node first starts, in order to determine the resource's current state @@ -345,7 +438,8 @@ them by ``call-id`` before interpreting them. Once sorted, the above example can be summarized as: -#. A non-recurring monitor operation returning 7 (not running), with a ``call-id`` of 3 +#. A non-recurring monitor operation returning 7 (not running), with a + ``call-id`` of 3 #. A stop operation returning 0 (success), with a ``call-id`` of 32 #. A start operation returning 0 (success), with a ``call-id`` of 33 #. A recurring monitor returning 0 (success), with a ``call-id`` of 34 @@ -363,6 +457,3 @@ resource has been restarted. Specifically this occurred as part of actions 11 and 31 of transition 11 from the controller instance with the key ``2668bbeb...``. This information can be helpful for locating the relevant section of the logs when looking for the source of a failure. - -.. [#] You can use the standard ``date`` command to print a human-readable version - of any seconds-since-epoch value, for example ``date -d @1239009742``. From 3df1a3ce5af84816d56a1477dadf629fce4f559a Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Wed, 12 Jun 2024 22:28:04 -0700 Subject: [PATCH 068/364] Log: libpacemaker: Log correct score in pcmk__apply_coloc_to_priority() All calls to pcmk__readable_score() use the same buffer. Signed-off-by: Reid Wahl --- lib/pacemaker/pcmk_sched_colocation.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pacemaker/pcmk_sched_colocation.c b/lib/pacemaker/pcmk_sched_colocation.c index 3c11dd80003..1d511f888fb 100644 --- a/lib/pacemaker/pcmk_sched_colocation.c +++ b/lib/pacemaker/pcmk_sched_colocation.c @@ -1450,11 +1450,11 @@ pcmk__apply_coloc_to_priority(pcmk_resource_t *dependent, dependent->priority = pcmk__add_scores(score_multiplier * colocation->score, dependent->priority); pcmk__rsc_trace(dependent, - "Applied %s to %s promotion priority (now %s after %s %s)", + "Applied %s to %s promotion priority (now %s after %s %d)", colocation->id, dependent->id, pcmk_readable_score(dependent->priority), ((score_multiplier == 1)? "adding" : "subtracting"), - pcmk_readable_score(colocation->score)); + colocation->score); } /*! From 7275eb26329826a0d79666483c279bb053431518 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Wed, 10 Jul 2024 01:36:45 -0700 Subject: [PATCH 069/364] Test: cts-scheduler: Add tests for cloned group promoted colocations The mandatory case already works correctly, although the group's promotion score is incorrect, so it's probably getting caught in a later step like apply_coloc_to_dependent(). However, the optional case behaves incorrectly. Signed-off-by: Reid Wahl --- cts/cts-scheduler.in | 8 + ...coloc-cloned-group-promoted-dependent1.dot | 2 + ...coloc-cloned-group-promoted-dependent2.dot | 26 +++ ...coloc-cloned-group-promoted-dependent1.exp | 1 + ...coloc-cloned-group-promoted-dependent2.exp | 148 ++++++++++++++++++ ...oc-cloned-group-promoted-dependent1.scores | 27 ++++ ...oc-cloned-group-promoted-dependent2.scores | 27 ++++ ...c-cloned-group-promoted-dependent1.summary | 23 +++ ...c-cloned-group-promoted-dependent2.summary | 37 +++++ ...coloc-cloned-group-promoted-dependent1.xml | 103 ++++++++++++ ...coloc-cloned-group-promoted-dependent2.xml | 103 ++++++++++++ 11 files changed, 505 insertions(+) create mode 100644 cts/scheduler/dot/coloc-cloned-group-promoted-dependent1.dot create mode 100644 cts/scheduler/dot/coloc-cloned-group-promoted-dependent2.dot create mode 100644 cts/scheduler/exp/coloc-cloned-group-promoted-dependent1.exp create mode 100644 cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp create mode 100644 cts/scheduler/scores/coloc-cloned-group-promoted-dependent1.scores create mode 100644 cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores create mode 100644 cts/scheduler/summary/coloc-cloned-group-promoted-dependent1.summary create mode 100644 cts/scheduler/summary/coloc-cloned-group-promoted-dependent2.summary create mode 100644 cts/scheduler/xml/coloc-cloned-group-promoted-dependent1.xml create mode 100644 cts/scheduler/xml/coloc-cloned-group-promoted-dependent2.xml diff --git a/cts/cts-scheduler.in b/cts/cts-scheduler.in index 2fa657ccc76..e86f970d7f3 100644 --- a/cts/cts-scheduler.in +++ b/cts/cts-scheduler.in @@ -292,6 +292,14 @@ TESTS = [ [ "primitive-with-unrunnable-group", "Block primitive colocated with group that can't start", ], + [ + "coloc-cloned-group-promoted-dependent1", + "Cloned group promoted role with primitive (mandatory)" + ], + [ + "coloc-cloned-group-promoted-dependent2", + "Cloned group promoted role with primitive (optional)" + ], ], [ [ "rsc-sets-seq-true", "Resource Sets - sequential=false" ], diff --git a/cts/scheduler/dot/coloc-cloned-group-promoted-dependent1.dot b/cts/scheduler/dot/coloc-cloned-group-promoted-dependent1.dot new file mode 100644 index 00000000000..d8f1c9f22b2 --- /dev/null +++ b/cts/scheduler/dot/coloc-cloned-group-promoted-dependent1.dot @@ -0,0 +1,2 @@ + digraph "g" { +} diff --git a/cts/scheduler/dot/coloc-cloned-group-promoted-dependent2.dot b/cts/scheduler/dot/coloc-cloned-group-promoted-dependent2.dot new file mode 100644 index 00000000000..f6de4a45d75 --- /dev/null +++ b/cts/scheduler/dot/coloc-cloned-group-promoted-dependent2.dot @@ -0,0 +1,26 @@ + digraph "g" { +"Cancel rsc1_monitor_10000 node2" -> "rsc1_promote_0 node2" [ style = bold] +"Cancel rsc1_monitor_10000 node2" [ style=bold color="green" fontcolor="black"] +"grp1-clone_demote_0" -> "grp1-clone_demoted_0" [ style = bold] +"grp1-clone_demote_0" -> "grp1:1_demote_0" [ style = bold] +"grp1-clone_demote_0" [ style=bold color="green" fontcolor="orange"] +"grp1-clone_demoted_0" -> "grp1-clone_promote_0" [ style = bold] +"grp1-clone_demoted_0" [ style=bold color="green" fontcolor="orange"] +"grp1-clone_promote_0" -> "grp1:0_promote_0" [ style = bold] +"grp1-clone_promote_0" [ style=bold color="green" fontcolor="orange"] +"grp1-clone_promoted_0" [ style=bold color="green" fontcolor="orange"] +"grp1:0_promote_0" -> "rsc1_promote_0 node2" [ style = bold] +"grp1:0_promote_0" [ style=bold color="green" fontcolor="orange"] +"grp1:0_promoted_0" -> "grp1-clone_promoted_0" [ style = bold] +"grp1:0_promoted_0" [ style=bold color="green" fontcolor="orange"] +"grp1:1_demote_0" -> "rsc1_demote_0 node1" [ style = bold] +"grp1:1_demote_0" [ style=bold color="green" fontcolor="orange"] +"grp1:1_demoted_0" -> "grp1-clone_demoted_0" [ style = bold] +"grp1:1_demoted_0" [ style=bold color="green" fontcolor="orange"] +"rsc1_demote_0 node1" -> "grp1:1_demoted_0" [ style = bold] +"rsc1_demote_0 node1" -> "rsc1_monitor_10000 node1" [ style = bold] +"rsc1_demote_0 node1" [ style=bold color="green" fontcolor="black"] +"rsc1_monitor_10000 node1" [ style=bold color="green" fontcolor="black"] +"rsc1_promote_0 node2" -> "grp1:0_promoted_0" [ style = bold] +"rsc1_promote_0 node2" [ style=bold color="green" fontcolor="black"] +} diff --git a/cts/scheduler/exp/coloc-cloned-group-promoted-dependent1.exp b/cts/scheduler/exp/coloc-cloned-group-promoted-dependent1.exp new file mode 100644 index 00000000000..56e315ff015 --- /dev/null +++ b/cts/scheduler/exp/coloc-cloned-group-promoted-dependent1.exp @@ -0,0 +1 @@ + diff --git a/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp b/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp new file mode 100644 index 00000000000..1f95c4db130 --- /dev/null +++ b/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cts/scheduler/scores/coloc-cloned-group-promoted-dependent1.scores b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent1.scores new file mode 100644 index 00000000000..cb587f5d8d2 --- /dev/null +++ b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent1.scores @@ -0,0 +1,27 @@ + +grp1:0 promotion score on node2: 50 +grp1:1 promotion score on node1: 11 +pcmk__clone_assign: grp1-clone allocation score on node1: 0 +pcmk__clone_assign: grp1-clone allocation score on node2: 0 +pcmk__clone_assign: grp1:0 allocation score on node1: 0 +pcmk__clone_assign: grp1:0 allocation score on node2: 50 +pcmk__clone_assign: grp1:1 allocation score on node1: 10 +pcmk__clone_assign: grp1:1 allocation score on node2: 0 +pcmk__clone_assign: rsc1:0 allocation score on node1: 0 +pcmk__clone_assign: rsc1:0 allocation score on node2: 1 +pcmk__clone_assign: rsc1:1 allocation score on node1: 1 +pcmk__clone_assign: rsc1:1 allocation score on node2: 0 +pcmk__group_assign: grp1:0 allocation score on node1: 0 +pcmk__group_assign: grp1:0 allocation score on node2: 50 +pcmk__group_assign: grp1:1 allocation score on node1: 10 +pcmk__group_assign: grp1:1 allocation score on node2: -INFINITY +pcmk__group_assign: rsc1:0 allocation score on node1: 0 +pcmk__group_assign: rsc1:0 allocation score on node2: 1 +pcmk__group_assign: rsc1:1 allocation score on node1: 1 +pcmk__group_assign: rsc1:1 allocation score on node2: -INFINITY +pcmk__primitive_assign: primary allocation score on node1: 1 +pcmk__primitive_assign: primary allocation score on node2: 0 +pcmk__primitive_assign: rsc1:0 allocation score on node1: 0 +pcmk__primitive_assign: rsc1:0 allocation score on node2: 1 +pcmk__primitive_assign: rsc1:1 allocation score on node1: 1 +pcmk__primitive_assign: rsc1:1 allocation score on node2: -INFINITY diff --git a/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores new file mode 100644 index 00000000000..cb587f5d8d2 --- /dev/null +++ b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores @@ -0,0 +1,27 @@ + +grp1:0 promotion score on node2: 50 +grp1:1 promotion score on node1: 11 +pcmk__clone_assign: grp1-clone allocation score on node1: 0 +pcmk__clone_assign: grp1-clone allocation score on node2: 0 +pcmk__clone_assign: grp1:0 allocation score on node1: 0 +pcmk__clone_assign: grp1:0 allocation score on node2: 50 +pcmk__clone_assign: grp1:1 allocation score on node1: 10 +pcmk__clone_assign: grp1:1 allocation score on node2: 0 +pcmk__clone_assign: rsc1:0 allocation score on node1: 0 +pcmk__clone_assign: rsc1:0 allocation score on node2: 1 +pcmk__clone_assign: rsc1:1 allocation score on node1: 1 +pcmk__clone_assign: rsc1:1 allocation score on node2: 0 +pcmk__group_assign: grp1:0 allocation score on node1: 0 +pcmk__group_assign: grp1:0 allocation score on node2: 50 +pcmk__group_assign: grp1:1 allocation score on node1: 10 +pcmk__group_assign: grp1:1 allocation score on node2: -INFINITY +pcmk__group_assign: rsc1:0 allocation score on node1: 0 +pcmk__group_assign: rsc1:0 allocation score on node2: 1 +pcmk__group_assign: rsc1:1 allocation score on node1: 1 +pcmk__group_assign: rsc1:1 allocation score on node2: -INFINITY +pcmk__primitive_assign: primary allocation score on node1: 1 +pcmk__primitive_assign: primary allocation score on node2: 0 +pcmk__primitive_assign: rsc1:0 allocation score on node1: 0 +pcmk__primitive_assign: rsc1:0 allocation score on node2: 1 +pcmk__primitive_assign: rsc1:1 allocation score on node1: 1 +pcmk__primitive_assign: rsc1:1 allocation score on node2: -INFINITY diff --git a/cts/scheduler/summary/coloc-cloned-group-promoted-dependent1.summary b/cts/scheduler/summary/coloc-cloned-group-promoted-dependent1.summary new file mode 100644 index 00000000000..6e8518093e1 --- /dev/null +++ b/cts/scheduler/summary/coloc-cloned-group-promoted-dependent1.summary @@ -0,0 +1,23 @@ +Current cluster status: + * Node List: + * Online: [ node1 node2 ] + + * Full List of Resources: + * Clone Set: grp1-clone [grp1] (promotable): + * Promoted: [ node1 ] + * Unpromoted: [ node2 ] + * primary (ocf:pacemaker:Dummy): Started node1 + +Transition Summary: + +Executing Cluster Transition: + +Revised Cluster Status: + * Node List: + * Online: [ node1 node2 ] + + * Full List of Resources: + * Clone Set: grp1-clone [grp1] (promotable): + * Promoted: [ node1 ] + * Unpromoted: [ node2 ] + * primary (ocf:pacemaker:Dummy): Started node1 diff --git a/cts/scheduler/summary/coloc-cloned-group-promoted-dependent2.summary b/cts/scheduler/summary/coloc-cloned-group-promoted-dependent2.summary new file mode 100644 index 00000000000..68110d06ac0 --- /dev/null +++ b/cts/scheduler/summary/coloc-cloned-group-promoted-dependent2.summary @@ -0,0 +1,37 @@ +Current cluster status: + * Node List: + * Online: [ node1 node2 ] + + * Full List of Resources: + * Clone Set: grp1-clone [grp1] (promotable): + * Promoted: [ node1 ] + * Unpromoted: [ node2 ] + * primary (ocf:pacemaker:Dummy): Started node1 + +Transition Summary: + * Promote rsc1:0 ( Unpromoted -> Promoted node2 ) + * Demote rsc1:1 ( Promoted -> Unpromoted node1 ) + +Executing Cluster Transition: + * Resource action: rsc1 cancel=10000 on node2 + * Pseudo action: grp1-clone_demote_0 + * Pseudo action: grp1:1_demote_0 + * Resource action: rsc1 demote on node1 + * Pseudo action: grp1:1_demoted_0 + * Resource action: rsc1 monitor=10000 on node1 + * Pseudo action: grp1-clone_demoted_0 + * Pseudo action: grp1-clone_promote_0 + * Pseudo action: grp1:0_promote_0 + * Resource action: rsc1 promote on node2 + * Pseudo action: grp1:0_promoted_0 + * Pseudo action: grp1-clone_promoted_0 + +Revised Cluster Status: + * Node List: + * Online: [ node1 node2 ] + + * Full List of Resources: + * Clone Set: grp1-clone [grp1] (promotable): + * Promoted: [ node2 ] + * Unpromoted: [ node1 ] + * primary (ocf:pacemaker:Dummy): Started node1 diff --git a/cts/scheduler/xml/coloc-cloned-group-promoted-dependent1.xml b/cts/scheduler/xml/coloc-cloned-group-promoted-dependent1.xml new file mode 100644 index 00000000000..58df0980f96 --- /dev/null +++ b/cts/scheduler/xml/coloc-cloned-group-promoted-dependent1.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cts/scheduler/xml/coloc-cloned-group-promoted-dependent2.xml b/cts/scheduler/xml/coloc-cloned-group-promoted-dependent2.xml new file mode 100644 index 00000000000..1fbfcbb9039 --- /dev/null +++ b/cts/scheduler/xml/coloc-cloned-group-promoted-dependent2.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 71fb5f6cd809cb1934ec4e1a062ac3cfd353f850 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Tue, 18 Jun 2024 12:52:33 -0700 Subject: [PATCH 070/364] Refactor: libpacemaker: Clean up pcmk__apply_coloc_to_priority() Move as much of the early return logic to the top as possible. Add comments. Reduce variable scope. Ensure we log a trace message even if we're setting the score to -INFINITY. Signed-off-by: Reid Wahl --- lib/pacemaker/pcmk_sched_colocation.c | 44 ++++++++++++++++++--------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/lib/pacemaker/pcmk_sched_colocation.c b/lib/pacemaker/pcmk_sched_colocation.c index 1d511f888fb..27682da3a10 100644 --- a/lib/pacemaker/pcmk_sched_colocation.c +++ b/lib/pacemaker/pcmk_sched_colocation.c @@ -1414,36 +1414,50 @@ pcmk__apply_coloc_to_priority(pcmk_resource_t *dependent, const char *attr = colocation->node_attribute; int score_multiplier = 1; - const pcmk_resource_t *primary_role_rsc = NULL; - - CRM_ASSERT((dependent != NULL) && (primary != NULL) && - (colocation != NULL)); + CRM_ASSERT((dependent != NULL) && (primary != NULL) + && (colocation != NULL)); if ((primary->allocated_to == NULL) || (dependent->allocated_to == NULL)) { return; } + if (colocation->primary_role != pcmk_role_unknown) { + /* Colocation applies only if the primary's next role matches + * + * @TODO Why ignore a mandatory colocation in this case when we apply + * its negation in the mismatched value case? + */ + const pcmk_resource_t *role_rsc = get_resource_for_role(primary); + + if (colocation->primary_role != role_rsc->next_role) { + return; + } + } + dependent_value = pcmk__colocation_node_attr(dependent->allocated_to, attr, dependent); primary_value = pcmk__colocation_node_attr(primary->allocated_to, attr, primary); - primary_role_rsc = get_resource_for_role(primary); - if (!pcmk__str_eq(dependent_value, primary_value, pcmk__str_casei)) { if ((colocation->score == PCMK_SCORE_INFINITY) && (colocation->dependent_role == pcmk_role_promoted)) { - dependent->priority = -PCMK_SCORE_INFINITY; - } - return; - } - if ((colocation->primary_role != pcmk_role_unknown) - && (colocation->primary_role != primary_role_rsc->next_role)) { - return; - } + /* For a mandatory promoted-role colocation, mark the dependent node + * ineligible to promote the dependent if its attribute value + * doesn't match the primary node's + */ + score_multiplier = -1; + + } else { + // Otherwise, ignore the colocation if attribute values don't match + return; + } - if (colocation->dependent_role == pcmk_role_unpromoted) { + } else if (colocation->dependent_role == pcmk_role_unpromoted) { + /* Node attribute values matched, so we want to avoid promoting the + * dependent on this node + */ score_multiplier = -1; } From bb8286c9554c4dd222bedf1820746a564f8fba60 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Wed, 10 Jul 2024 12:55:29 -0700 Subject: [PATCH 071/364] Refactor: libpacemaker: apply_coloc_score() returns priority delta ...of the dependent. In other words, the apply_coloc_score() method now returns the score that it added to the priv->priority member of its dependent argument (which may be 0). apply_coloc_score() affects priority only when determining clone instance roles, not during assignment. Nothing meaningfully uses this return value yet, but it will allow us to fix a bug with colocations involving cloned groups. Signed-off-by: Reid Wahl --- lib/pacemaker/libpacemaker_private.h | 56 ++++++++++++++------------- lib/pacemaker/pcmk_sched_bundle.c | 33 ++++++++++------ lib/pacemaker/pcmk_sched_clone.c | 36 ++++++++++------- lib/pacemaker/pcmk_sched_colocation.c | 17 +++++--- lib/pacemaker/pcmk_sched_group.c | 42 ++++++++++++-------- lib/pacemaker/pcmk_sched_primitive.c | 18 +++++---- lib/pacemaker/pcmk_sched_promotable.c | 10 ++++- 7 files changed, 130 insertions(+), 82 deletions(-) diff --git a/lib/pacemaker/libpacemaker_private.h b/lib/pacemaker/libpacemaker_private.h index 4738e476099..3f8870b304b 100644 --- a/lib/pacemaker/libpacemaker_private.h +++ b/lib/pacemaker/libpacemaker_private.h @@ -129,11 +129,13 @@ struct resource_alloc_functions_s { * \param[in] primary Primary resource in colocation * \param[in] colocation Colocation constraint to apply * \param[in] for_dependent true if called on behalf of dependent + * + * \return The score added to the dependent's priority */ - void (*apply_coloc_score)(pcmk_resource_t *dependent, - const pcmk_resource_t *primary, - const pcmk__colocation_t *colocation, - bool for_dependent); + int (*apply_coloc_score)(pcmk_resource_t *dependent, + const pcmk_resource_t *primary, + const pcmk__colocation_t *colocation, + bool for_dependent); /*! * \internal @@ -538,9 +540,9 @@ void pcmk__apply_coloc_to_scores(pcmk_resource_t *dependent, const pcmk__colocation_t *colocation); G_GNUC_INTERNAL -void pcmk__apply_coloc_to_priority(pcmk_resource_t *dependent, - const pcmk_resource_t *primary, - const pcmk__colocation_t *colocation); +int pcmk__apply_coloc_to_priority(pcmk_resource_t *dependent, + const pcmk_resource_t *primary, + const pcmk__colocation_t *colocation); G_GNUC_INTERNAL void pcmk__add_colocated_node_scores(pcmk_resource_t *source_rsc, @@ -726,10 +728,10 @@ void pcmk__update_dependent_with_promotable(const pcmk_resource_t *primary, *colocation); G_GNUC_INTERNAL -void pcmk__update_promotable_dependent_priority(const pcmk_resource_t *primary, - pcmk_resource_t *dependent, - const pcmk__colocation_t - *colocation); +int pcmk__update_promotable_dependent_priority(const pcmk_resource_t *primary, + pcmk_resource_t *dependent, + const pcmk__colocation_t + *colocation); // Pacemaker Remote nodes (pcmk_sched_remote.c) @@ -773,10 +775,10 @@ uint32_t pcmk__primitive_action_flags(pcmk_action_t *action, const pcmk_node_t *node); G_GNUC_INTERNAL -void pcmk__primitive_apply_coloc_score(pcmk_resource_t *dependent, - const pcmk_resource_t *primary, - const pcmk__colocation_t *colocation, - bool for_dependent); +int pcmk__primitive_apply_coloc_score(pcmk_resource_t *dependent, + const pcmk_resource_t *primary, + const pcmk__colocation_t *colocation, + bool for_dependent); G_GNUC_INTERNAL void pcmk__with_primitive_colocations(const pcmk_resource_t *rsc, @@ -817,10 +819,10 @@ G_GNUC_INTERNAL void pcmk__group_internal_constraints(pcmk_resource_t *rsc); G_GNUC_INTERNAL -void pcmk__group_apply_coloc_score(pcmk_resource_t *dependent, - const pcmk_resource_t *primary, - const pcmk__colocation_t *colocation, - bool for_dependent); +int pcmk__group_apply_coloc_score(pcmk_resource_t *dependent, + const pcmk_resource_t *primary, + const pcmk__colocation_t *colocation, + bool for_dependent); G_GNUC_INTERNAL void pcmk__with_group_colocations(const pcmk_resource_t *rsc, @@ -886,10 +888,10 @@ G_GNUC_INTERNAL void pcmk__clone_internal_constraints(pcmk_resource_t *rsc); G_GNUC_INTERNAL -void pcmk__clone_apply_coloc_score(pcmk_resource_t *dependent, - const pcmk_resource_t *primary, - const pcmk__colocation_t *colocation, - bool for_dependent); +int pcmk__clone_apply_coloc_score(pcmk_resource_t *dependent, + const pcmk_resource_t *primary, + const pcmk__colocation_t *colocation, + bool for_dependent); G_GNUC_INTERNAL void pcmk__with_clone_colocations(const pcmk_resource_t *rsc, @@ -939,10 +941,10 @@ G_GNUC_INTERNAL void pcmk__bundle_internal_constraints(pcmk_resource_t *rsc); G_GNUC_INTERNAL -void pcmk__bundle_apply_coloc_score(pcmk_resource_t *dependent, - const pcmk_resource_t *primary, - const pcmk__colocation_t *colocation, - bool for_dependent); +int pcmk__bundle_apply_coloc_score(pcmk_resource_t *dependent, + const pcmk_resource_t *primary, + const pcmk__colocation_t *colocation, + bool for_dependent); G_GNUC_INTERNAL void pcmk__with_bundle_colocations(const pcmk_resource_t *rsc, diff --git a/lib/pacemaker/pcmk_sched_bundle.c b/lib/pacemaker/pcmk_sched_bundle.c index 167f519bd32..48a7eb63e1d 100644 --- a/lib/pacemaker/pcmk_sched_bundle.c +++ b/lib/pacemaker/pcmk_sched_bundle.c @@ -454,6 +454,7 @@ struct coloc_data { const pcmk__colocation_t *colocation; pcmk_resource_t *dependent; GList *container_hosts; + int priority_delta; }; /*! @@ -473,10 +474,14 @@ replica_apply_coloc_score(const pcmk__bundle_replica_t *replica, pcmk_node_t *chosen = NULL; if (coloc_data->colocation->score < PCMK_SCORE_INFINITY) { - replica->container->cmds->apply_coloc_score(coloc_data->dependent, - replica->container, - coloc_data->colocation, - false); + int priority_delta = + replica->container->cmds->apply_coloc_score(coloc_data->dependent, + replica->container, + coloc_data->colocation, + false); + + coloc_data->priority_delta = + pcmk__add_scores(coloc_data->priority_delta, priority_delta); return true; } @@ -513,14 +518,16 @@ replica_apply_coloc_score(const pcmk__bundle_replica_t *replica, * \param[in] primary Primary resource in colocation * \param[in] colocation Colocation constraint to apply * \param[in] for_dependent true if called on behalf of dependent + * + * \return The score added to the dependent's priority */ -void +int pcmk__bundle_apply_coloc_score(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation, bool for_dependent) { - struct coloc_data coloc_data = { colocation, dependent, NULL }; + struct coloc_data coloc_data = { colocation, dependent, NULL, 0 }; /* This should never be called for the bundle itself as a dependent. * Instead, we add its colocation constraints to its containers and bundled @@ -534,7 +541,7 @@ pcmk__bundle_apply_coloc_score(pcmk_resource_t *dependent, "Skipping applying colocation %s " "because %s is still provisional", colocation->id, primary->id); - return; + return 0; } pcmk__rsc_trace(primary, "Applying colocation %s (%s with %s at %s)", colocation->id, dependent->id, primary->id, @@ -550,10 +557,13 @@ pcmk__bundle_apply_coloc_score(pcmk_resource_t *dependent, if (primary_container != NULL) { // Success, we found one pcmk__rsc_debug(primary, "Pairing %s with %s", dependent->id, primary_container->id); - dependent->cmds->apply_coloc_score(dependent, primary_container, - colocation, true); - } else if (colocation->score >= PCMK_SCORE_INFINITY) { + return dependent->cmds->apply_coloc_score(dependent, + primary_container, + colocation, true); + } + + if (colocation->score >= PCMK_SCORE_INFINITY) { // Failure, and it's fatal crm_notice("%s cannot run because there is no compatible " "instance of %s to colocate with", @@ -565,7 +575,7 @@ pcmk__bundle_apply_coloc_score(pcmk_resource_t *dependent, "%s cannot be colocated with any instance of %s", dependent->id, primary->id); } - return; + return 0; } pe__foreach_const_bundle_replica(primary, replica_apply_coloc_score, @@ -576,6 +586,7 @@ pcmk__bundle_apply_coloc_score(pcmk_resource_t *dependent, coloc_data.container_hosts, false); } g_list_free(coloc_data.container_hosts); + return coloc_data.priority_delta; } // Bundle implementation of pcmk_assignment_methods_t:with_this_colocations() diff --git a/lib/pacemaker/pcmk_sched_clone.c b/lib/pacemaker/pcmk_sched_clone.c index dacee7f5ec4..23b72fce4f3 100644 --- a/lib/pacemaker/pcmk_sched_clone.c +++ b/lib/pacemaker/pcmk_sched_clone.c @@ -240,14 +240,17 @@ can_interleave(const pcmk__colocation_t *colocation) * \param[in] primary Primary resource in colocation * \param[in] colocation Colocation constraint to apply * \param[in] for_dependent true if called on behalf of dependent + * + * \return The score added to the dependent's priority */ -void +int pcmk__clone_apply_coloc_score(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation, bool for_dependent) { const GList *iter = NULL; + int priority_delta = 0; /* This should never be called for the clone itself as a dependent. Instead, * we add its colocation constraints to its instances and call the @@ -263,7 +266,7 @@ pcmk__clone_apply_coloc_score(pcmk_resource_t *dependent, "Delaying processing colocation %s " "because cloned primary %s is still provisional", colocation->id, primary->id); - return; + return 0; } pcmk__rsc_trace(primary, "Processing colocation %s (%s with clone %s @%s)", @@ -278,14 +281,14 @@ pcmk__clone_apply_coloc_score(pcmk_resource_t *dependent, // We're assigning the dependent to a node pcmk__update_dependent_with_promotable(primary, dependent, colocation); - return; + return 0; } if (colocation->dependent_role == pcmk_role_promoted) { // We're choosing a role for the dependent - pcmk__update_promotable_dependent_priority(primary, dependent, - colocation); - return; + return pcmk__update_promotable_dependent_priority(primary, + dependent, + colocation); } } @@ -299,10 +302,13 @@ pcmk__clone_apply_coloc_score(pcmk_resource_t *dependent, if (primary_instance != NULL) { pcmk__rsc_debug(primary, "Interleaving %s with %s", dependent->id, primary_instance->id); - dependent->cmds->apply_coloc_score(dependent, primary_instance, - colocation, true); - } else if (colocation->score >= PCMK_SCORE_INFINITY) { + return dependent->cmds->apply_coloc_score(dependent, + primary_instance, + colocation, true); + } + + if (colocation->score >= PCMK_SCORE_INFINITY) { crm_notice("%s cannot run because it cannot interleave with " "any instance of %s", dependent->id, primary->id); pcmk__assign_resource(dependent, NULL, true, true); @@ -314,7 +320,7 @@ pcmk__clone_apply_coloc_score(pcmk_resource_t *dependent, dependent->id, primary->id); } - return; + return 0; } // Apply mandatory colocations @@ -337,16 +343,20 @@ pcmk__clone_apply_coloc_score(pcmk_resource_t *dependent, pcmk__colocation_intersect_nodes(dependent, primary, colocation, primary_nodes, false); g_list_free(primary_nodes); - return; + return 0; } // Apply optional colocations for (iter = primary->children; iter != NULL; iter = iter->next) { const pcmk_resource_t *instance = iter->data; + int instance_delta = instance->cmds->apply_coloc_score(dependent, + instance, + colocation, + false); - instance->cmds->apply_coloc_score(dependent, instance, colocation, - false); + priority_delta = pcmk__add_scores(priority_delta, instance_delta); } + return priority_delta; } // Clone implementation of pcmk_assignment_methods_t:with_this_colocations() diff --git a/lib/pacemaker/pcmk_sched_colocation.c b/lib/pacemaker/pcmk_sched_colocation.c index 27682da3a10..b6e8d9627dd 100644 --- a/lib/pacemaker/pcmk_sched_colocation.c +++ b/lib/pacemaker/pcmk_sched_colocation.c @@ -1403,8 +1403,10 @@ pcmk__apply_coloc_to_scores(pcmk_resource_t *dependent, * \param[in,out] dependent Dependent resource in colocation * \param[in] primary Primary resource in colocation * \param[in] colocation Colocation constraint + * + * \return The score added to the dependent's priority */ -void +int pcmk__apply_coloc_to_priority(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation) @@ -1413,12 +1415,13 @@ pcmk__apply_coloc_to_priority(pcmk_resource_t *dependent, const char *primary_value = NULL; const char *attr = colocation->node_attribute; int score_multiplier = 1; + int priority_delta = 0; CRM_ASSERT((dependent != NULL) && (primary != NULL) && (colocation != NULL)); if ((primary->allocated_to == NULL) || (dependent->allocated_to == NULL)) { - return; + return 0; } if (colocation->primary_role != pcmk_role_unknown) { @@ -1430,7 +1433,7 @@ pcmk__apply_coloc_to_priority(pcmk_resource_t *dependent, const pcmk_resource_t *role_rsc = get_resource_for_role(primary); if (colocation->primary_role != role_rsc->next_role) { - return; + return 0; } } @@ -1451,7 +1454,7 @@ pcmk__apply_coloc_to_priority(pcmk_resource_t *dependent, } else { // Otherwise, ignore the colocation if attribute values don't match - return; + return 0; } } else if (colocation->dependent_role == pcmk_role_unpromoted) { @@ -1461,14 +1464,16 @@ pcmk__apply_coloc_to_priority(pcmk_resource_t *dependent, score_multiplier = -1; } - dependent->priority = pcmk__add_scores(score_multiplier * colocation->score, - dependent->priority); + priority_delta = score_multiplier * colocation->score; + dependent->priority = pcmk__add_scores(priority_delta, dependent->priority); pcmk__rsc_trace(dependent, "Applied %s to %s promotion priority (now %s after %s %d)", colocation->id, dependent->id, pcmk_readable_score(dependent->priority), ((score_multiplier == 1)? "adding" : "subtracting"), colocation->score); + + return priority_delta; } /*! diff --git a/lib/pacemaker/pcmk_sched_group.c b/lib/pacemaker/pcmk_sched_group.c index 68596f96289..a34f1402d02 100644 --- a/lib/pacemaker/pcmk_sched_group.c +++ b/lib/pacemaker/pcmk_sched_group.c @@ -11,6 +11,8 @@ #include +#include // QB_ABS() + #include #include @@ -344,15 +346,15 @@ pcmk__group_internal_constraints(pcmk_resource_t *rsc) * \param[in,out] dependent Dependent group resource in colocation * \param[in] primary Primary resource in colocation * \param[in] colocation Colocation constraint to apply + * + * \return The score added to the dependent's priority */ -static void +static int colocate_group_with(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation) { - pcmk_resource_t *member = NULL; - if (dependent->children == NULL) { - return; + return 0; } pcmk__rsc_trace(primary, "Processing %s (group %s with %s) for dependent", @@ -360,23 +362,26 @@ colocate_group_with(pcmk_resource_t *dependent, const pcmk_resource_t *primary, if (pe__group_flag_is_set(dependent, pcmk__group_colocated)) { // Colocate first member (internal colocations will handle the rest) - member = (pcmk_resource_t *) dependent->children->data; + pcmk_resource_t *member = dependent->children->data; + member->cmds->apply_coloc_score(member, primary, colocation, true); - return; + return 0; } if (colocation->score >= PCMK_SCORE_INFINITY) { pcmk__config_err("%s: Cannot perform mandatory colocation between " "non-colocated group and %s", dependent->id, primary->id); - return; + return 0; } // Colocate each member individually for (GList *iter = dependent->children; iter != NULL; iter = iter->next) { - member = (pcmk_resource_t *) iter->data; + pcmk_resource_t *member = iter->data; + member->cmds->apply_coloc_score(member, primary, colocation, true); } + return 0; } /*! @@ -390,8 +395,10 @@ colocate_group_with(pcmk_resource_t *dependent, const pcmk_resource_t *primary, * \param[in,out] dependent Dependent resource in colocation * \param[in] primary Primary group resource in colocation * \param[in] colocation Colocation constraint to apply + * + * \return The score added to the dependent's priority */ -static void +static int colocate_with_group(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation) { @@ -402,7 +409,7 @@ colocate_with_group(pcmk_resource_t *dependent, const pcmk_resource_t *primary, colocation->id, dependent->id, primary->id); if (pcmk_is_set(primary->flags, pcmk_rsc_unassigned)) { - return; + return 0; } if (pe__group_flag_is_set(primary, pcmk__group_colocated)) { @@ -421,18 +428,18 @@ colocate_with_group(pcmk_resource_t *dependent, const pcmk_resource_t *primary, member = (pcmk_resource_t *) primary->children->data; } if (member == NULL) { - return; // Nothing to colocate with + return 0; // Nothing to colocate with } member->cmds->apply_coloc_score(dependent, member, colocation, false); - return; + return 0; } if (colocation->score >= PCMK_SCORE_INFINITY) { pcmk__config_err("%s: Cannot perform mandatory colocation with" " non-colocated group %s", dependent->id, primary->id); - return; + return 0; } // Colocate dependent with each member individually @@ -441,6 +448,7 @@ colocate_with_group(pcmk_resource_t *dependent, const pcmk_resource_t *primary, member = iter->data; member->cmds->apply_coloc_score(dependent, member, colocation, false); } + return 0; } /*! @@ -455,8 +463,10 @@ colocate_with_group(pcmk_resource_t *dependent, const pcmk_resource_t *primary, * \param[in] primary Primary resource in colocation * \param[in] colocation Colocation constraint to apply * \param[in] for_dependent true if called on behalf of dependent + * + * \return The score added to the dependent's priority */ -void +int pcmk__group_apply_coloc_score(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation, @@ -466,13 +476,13 @@ pcmk__group_apply_coloc_score(pcmk_resource_t *dependent, && (colocation != NULL)); if (for_dependent) { - colocate_group_with(dependent, primary, colocation); + return colocate_group_with(dependent, primary, colocation); } else { // Method should only be called for primitive dependents CRM_ASSERT(pcmk__is_primitive(dependent)); - colocate_with_group(dependent, primary, colocation); + return colocate_with_group(dependent, primary, colocation); } } diff --git a/lib/pacemaker/pcmk_sched_primitive.c b/lib/pacemaker/pcmk_sched_primitive.c index a113ccaeef5..40c4b3ab6ea 100644 --- a/lib/pacemaker/pcmk_sched_primitive.c +++ b/lib/pacemaker/pcmk_sched_primitive.c @@ -1091,8 +1091,10 @@ pcmk__primitive_internal_constraints(pcmk_resource_t *rsc) * \param[in] primary Primary resource in colocation * \param[in] colocation Colocation constraint to apply * \param[in] for_dependent true if called on behalf of dependent + * + * \return The score added to the dependent's priority */ -void +int pcmk__primitive_apply_coloc_score(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation, @@ -1105,8 +1107,8 @@ pcmk__primitive_apply_coloc_score(pcmk_resource_t *dependent, if (for_dependent) { // Always process on behalf of primary resource - primary->cmds->apply_coloc_score(dependent, primary, colocation, false); - return; + return primary->cmds->apply_coloc_score(dependent, primary, colocation, + false); } filter_results = pcmk__colocation_affects(dependent, primary, colocation, @@ -1119,13 +1121,15 @@ pcmk__primitive_apply_coloc_score(pcmk_resource_t *dependent, switch (filter_results) { case pcmk__coloc_affects_role: - pcmk__apply_coloc_to_priority(dependent, primary, colocation); - break; + return pcmk__apply_coloc_to_priority(dependent, primary, + colocation); + case pcmk__coloc_affects_location: pcmk__apply_coloc_to_scores(dependent, primary, colocation); - break; + return 0; + default: // pcmk__coloc_affects_nothing - return; + return 0; } } diff --git a/lib/pacemaker/pcmk_sched_promotable.c b/lib/pacemaker/pcmk_sched_promotable.c index 5977187244a..77b231bdad8 100644 --- a/lib/pacemaker/pcmk_sched_promotable.c +++ b/lib/pacemaker/pcmk_sched_promotable.c @@ -1286,8 +1286,10 @@ pcmk__update_dependent_with_promotable(const pcmk_resource_t *primary, * \param[in] primary Primary resource in the colocation * \param[in,out] dependent Dependent resource in the colocation * \param[in] colocation Colocation constraint to apply + * + * \return The score added to the dependent's priority */ -void +int pcmk__update_promotable_dependent_priority(const pcmk_resource_t *primary, pcmk_resource_t *dependent, const pcmk__colocation_t *colocation) @@ -1313,13 +1315,17 @@ pcmk__update_promotable_dependent_priority(const pcmk_resource_t *primary, pcmk_readable_score(colocation->score), pcmk_readable_score(new_priority)); dependent->priority = new_priority; + return colocation->score; + } - } else if (colocation->score >= PCMK_SCORE_INFINITY) { + if (colocation->score >= PCMK_SCORE_INFINITY) { // Mandatory colocation, but primary won't be here pcmk__rsc_trace(colocation->primary, "Applying %s (%s with %s) to %s: can't be promoted", colocation->id, colocation->dependent->id, colocation->primary->id, dependent->id); dependent->priority = -PCMK_SCORE_INFINITY; + return -PCMK_SCORE_INFINITY; } + return 0; } From e1d0562875cfa6504a3d2890b8bf6a3c35646993 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Wed, 10 Jul 2024 12:55:29 -0700 Subject: [PATCH 072/364] Fix: libpacemaker: Apply promotion priority to cloned group instance Rather than only to its members (only its first member in the case of colocated groups). We sort instances for promotion based on each instance's priority. In the case of a cloned group, each instance is a group, and we call pcmk__apply_coloc_to_priority() for the group's member(s) (first member for colocated groups, or all members for non-colocated groups). The members' priorities are not visible to the instance sorting code. Signed-off-by: Reid Wahl --- ...coloc-cloned-group-promoted-dependent2.dot | 24 --- ...coloc-cloned-group-promoted-dependent2.exp | 149 +----------------- .../scores/coloc-clone-stays-active.scores | 4 +- ...oc-cloned-group-promoted-dependent1.scores | 4 +- ...oc-cloned-group-promoted-dependent2.scores | 2 +- .../promoted-partially-demoted-group.scores | 2 +- ...c-cloned-group-promoted-dependent2.summary | 18 +-- lib/pacemaker/pcmk_sched_group.c | 68 ++++++-- 8 files changed, 60 insertions(+), 211 deletions(-) diff --git a/cts/scheduler/dot/coloc-cloned-group-promoted-dependent2.dot b/cts/scheduler/dot/coloc-cloned-group-promoted-dependent2.dot index f6de4a45d75..d8f1c9f22b2 100644 --- a/cts/scheduler/dot/coloc-cloned-group-promoted-dependent2.dot +++ b/cts/scheduler/dot/coloc-cloned-group-promoted-dependent2.dot @@ -1,26 +1,2 @@ digraph "g" { -"Cancel rsc1_monitor_10000 node2" -> "rsc1_promote_0 node2" [ style = bold] -"Cancel rsc1_monitor_10000 node2" [ style=bold color="green" fontcolor="black"] -"grp1-clone_demote_0" -> "grp1-clone_demoted_0" [ style = bold] -"grp1-clone_demote_0" -> "grp1:1_demote_0" [ style = bold] -"grp1-clone_demote_0" [ style=bold color="green" fontcolor="orange"] -"grp1-clone_demoted_0" -> "grp1-clone_promote_0" [ style = bold] -"grp1-clone_demoted_0" [ style=bold color="green" fontcolor="orange"] -"grp1-clone_promote_0" -> "grp1:0_promote_0" [ style = bold] -"grp1-clone_promote_0" [ style=bold color="green" fontcolor="orange"] -"grp1-clone_promoted_0" [ style=bold color="green" fontcolor="orange"] -"grp1:0_promote_0" -> "rsc1_promote_0 node2" [ style = bold] -"grp1:0_promote_0" [ style=bold color="green" fontcolor="orange"] -"grp1:0_promoted_0" -> "grp1-clone_promoted_0" [ style = bold] -"grp1:0_promoted_0" [ style=bold color="green" fontcolor="orange"] -"grp1:1_demote_0" -> "rsc1_demote_0 node1" [ style = bold] -"grp1:1_demote_0" [ style=bold color="green" fontcolor="orange"] -"grp1:1_demoted_0" -> "grp1-clone_demoted_0" [ style = bold] -"grp1:1_demoted_0" [ style=bold color="green" fontcolor="orange"] -"rsc1_demote_0 node1" -> "grp1:1_demoted_0" [ style = bold] -"rsc1_demote_0 node1" -> "rsc1_monitor_10000 node1" [ style = bold] -"rsc1_demote_0 node1" [ style=bold color="green" fontcolor="black"] -"rsc1_monitor_10000 node1" [ style=bold color="green" fontcolor="black"] -"rsc1_promote_0 node2" -> "grp1:0_promoted_0" [ style = bold] -"rsc1_promote_0 node2" [ style=bold color="green" fontcolor="black"] } diff --git a/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp b/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp index 1f95c4db130..56e315ff015 100644 --- a/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp +++ b/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp @@ -1,148 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/cts/scheduler/scores/coloc-clone-stays-active.scores b/cts/scheduler/scores/coloc-clone-stays-active.scores index 52c6bc59efb..69951768538 100644 --- a/cts/scheduler/scores/coloc-clone-stays-active.scores +++ b/cts/scheduler/scores/coloc-clone-stays-active.scores @@ -16,8 +16,8 @@ drbd-vds-http:1 promotion score on s01-0: 10000 drbd-vds-tftpboot:0 promotion score on s01-1: 10000 drbd-vds-tftpboot:1 promotion score on s01-0: 10000 iscsi-pool-0-vips-fw:0 promotion score on s01-1: -INFINITY -iscsi-pool-0-vips-fw:1 promotion score on s01-0: 2000 -iscsi-pool-1-vips-fw:0 promotion score on s01-1: 2000 +iscsi-pool-0-vips-fw:1 promotion score on s01-0: INFINITY +iscsi-pool-1-vips-fw:0 promotion score on s01-1: INFINITY iscsi-pool-1-vips-fw:1 promotion score on s01-0: -INFINITY iscsi-vds-dom0-stateless-0-vips-fw:0 promotion score on s01-1: -INFINITY iscsi-vds-dom0-stateless-0-vips-fw:1 promotion score on s01-0: -INFINITY diff --git a/cts/scheduler/scores/coloc-cloned-group-promoted-dependent1.scores b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent1.scores index cb587f5d8d2..a900815c340 100644 --- a/cts/scheduler/scores/coloc-cloned-group-promoted-dependent1.scores +++ b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent1.scores @@ -1,6 +1,6 @@ -grp1:0 promotion score on node2: 50 -grp1:1 promotion score on node1: 11 +grp1:0 promotion score on node2: -INFINITY +grp1:1 promotion score on node1: INFINITY pcmk__clone_assign: grp1-clone allocation score on node1: 0 pcmk__clone_assign: grp1-clone allocation score on node2: 0 pcmk__clone_assign: grp1:0 allocation score on node1: 0 diff --git a/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores index cb587f5d8d2..151a57d702b 100644 --- a/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores +++ b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores @@ -1,6 +1,6 @@ grp1:0 promotion score on node2: 50 -grp1:1 promotion score on node1: 11 +grp1:1 promotion score on node1: 2011 pcmk__clone_assign: grp1-clone allocation score on node1: 0 pcmk__clone_assign: grp1-clone allocation score on node2: 0 pcmk__clone_assign: grp1:0 allocation score on node1: 0 diff --git a/cts/scheduler/scores/promoted-partially-demoted-group.scores b/cts/scheduler/scores/promoted-partially-demoted-group.scores index f266c64753b..d1504ac08ce 100644 --- a/cts/scheduler/scores/promoted-partially-demoted-group.scores +++ b/cts/scheduler/scores/promoted-partially-demoted-group.scores @@ -2,7 +2,7 @@ cdev-pool-0-drbd:0 promotion score on sd01-1: 10800 cdev-pool-0-drbd:1 promotion score on sd01-0: INFINITY cdev-pool-0-iscsi-vips-fw:0 promotion score on sd01-1: -INFINITY -cdev-pool-0-iscsi-vips-fw:1 promotion score on sd01-0: 2000 +cdev-pool-0-iscsi-vips-fw:1 promotion score on sd01-0: INFINITY pcmk__clone_assign: cdev-pool-0-drbd:0 allocation score on sd01-0: 0 pcmk__clone_assign: cdev-pool-0-drbd:0 allocation score on sd01-1: 10100 pcmk__clone_assign: cdev-pool-0-drbd:1 allocation score on sd01-0: 10100 diff --git a/cts/scheduler/summary/coloc-cloned-group-promoted-dependent2.summary b/cts/scheduler/summary/coloc-cloned-group-promoted-dependent2.summary index 68110d06ac0..6e8518093e1 100644 --- a/cts/scheduler/summary/coloc-cloned-group-promoted-dependent2.summary +++ b/cts/scheduler/summary/coloc-cloned-group-promoted-dependent2.summary @@ -9,22 +9,8 @@ Current cluster status: * primary (ocf:pacemaker:Dummy): Started node1 Transition Summary: - * Promote rsc1:0 ( Unpromoted -> Promoted node2 ) - * Demote rsc1:1 ( Promoted -> Unpromoted node1 ) Executing Cluster Transition: - * Resource action: rsc1 cancel=10000 on node2 - * Pseudo action: grp1-clone_demote_0 - * Pseudo action: grp1:1_demote_0 - * Resource action: rsc1 demote on node1 - * Pseudo action: grp1:1_demoted_0 - * Resource action: rsc1 monitor=10000 on node1 - * Pseudo action: grp1-clone_demoted_0 - * Pseudo action: grp1-clone_promote_0 - * Pseudo action: grp1:0_promote_0 - * Resource action: rsc1 promote on node2 - * Pseudo action: grp1:0_promoted_0 - * Pseudo action: grp1-clone_promoted_0 Revised Cluster Status: * Node List: @@ -32,6 +18,6 @@ Revised Cluster Status: * Full List of Resources: * Clone Set: grp1-clone [grp1] (promotable): - * Promoted: [ node2 ] - * Unpromoted: [ node1 ] + * Promoted: [ node1 ] + * Unpromoted: [ node2 ] * primary (ocf:pacemaker:Dummy): Started node1 diff --git a/lib/pacemaker/pcmk_sched_group.c b/lib/pacemaker/pcmk_sched_group.c index a34f1402d02..6d892b2c120 100644 --- a/lib/pacemaker/pcmk_sched_group.c +++ b/lib/pacemaker/pcmk_sched_group.c @@ -353,6 +353,8 @@ static int colocate_group_with(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation) { + int priority_delta = 0; + if (dependent->children == NULL) { return 0; } @@ -364,24 +366,50 @@ colocate_group_with(pcmk_resource_t *dependent, const pcmk_resource_t *primary, // Colocate first member (internal colocations will handle the rest) pcmk_resource_t *member = dependent->children->data; - member->cmds->apply_coloc_score(member, primary, colocation, true); - return 0; - } + priority_delta = member->cmds->apply_coloc_score(member, primary, + colocation, true); - if (colocation->score >= PCMK_SCORE_INFINITY) { - pcmk__config_err("%s: Cannot perform mandatory colocation between " - "non-colocated group and %s", - dependent->id, primary->id); - return 0; + } else { + if (colocation->score >= PCMK_SCORE_INFINITY) { + pcmk__config_err("%s: Cannot perform mandatory colocation between " + "non-colocated group and %s", + dependent->id, primary->id); + return 0; + } + + // Colocate each member individually + for (GList *iter = dependent->children; iter != NULL; + iter = iter->next) { + + pcmk_resource_t *member = iter->data; + int instance_delta = member->cmds->apply_coloc_score(member, + primary, + colocation, + false); + + /* priority_delta is used for determining which instances of a + * promotable clone to promote. It's possible that colocations + * involving promotable cloned non-colocated groups may not behave + * correctly in all circumstances. Non-colocated groups are + * deprecated, and testing focused on colocated groups. + */ + priority_delta = pcmk__add_scores(priority_delta, instance_delta); + } } - // Colocate each member individually - for (GList *iter = dependent->children; iter != NULL; iter = iter->next) { - pcmk_resource_t *member = iter->data; + if (priority_delta != 0) { + dependent->priority = pcmk__add_scores(priority_delta, + dependent->priority); - member->cmds->apply_coloc_score(member, primary, colocation, true); + pcmk__rsc_trace(dependent, + "Applied %s to %s promotion priority " + "(now %s after %s %d)", + colocation->id, dependent->id, + pcmk_readable_score(dependent->priority), + ((priority_delta > 0)? "adding" : "subtracting"), + QB_ABS(priority_delta)); } - return 0; + return priority_delta; } /*! @@ -402,6 +430,7 @@ static int colocate_with_group(pcmk_resource_t *dependent, const pcmk_resource_t *primary, const pcmk__colocation_t *colocation) { + int priority_delta = 0; const pcmk_resource_t *member = NULL; pcmk__rsc_trace(primary, @@ -431,8 +460,8 @@ colocate_with_group(pcmk_resource_t *dependent, const pcmk_resource_t *primary, return 0; // Nothing to colocate with } - member->cmds->apply_coloc_score(dependent, member, colocation, false); - return 0; + return member->cmds->apply_coloc_score(dependent, member, colocation, + false); } if (colocation->score >= PCMK_SCORE_INFINITY) { @@ -445,10 +474,15 @@ colocate_with_group(pcmk_resource_t *dependent, const pcmk_resource_t *primary, // Colocate dependent with each member individually for (const GList *iter = primary->children; iter != NULL; iter = iter->next) { + + int instance_delta = 0; + member = iter->data; - member->cmds->apply_coloc_score(dependent, member, colocation, false); + instance_delta = member->cmds->apply_coloc_score(dependent, member, + colocation, false); + priority_delta = pcmk__add_scores(priority_delta, instance_delta); } - return 0; + return priority_delta; } /*! From 5c44246ad1ffac05b040d94e56326a2085db2174 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Tue, 18 Jun 2024 15:56:08 -0700 Subject: [PATCH 073/364] Test: cts-scheduler: Test for doubled colocation scores for promotion In task T832, a user reported that colocation scores were sometimes being applied twice when determining which clone instance to promote. So far, this has been reproducible only when the primary resource in the colocation will be scheduled to move due to a mandatory location constraint. There may be other possible triggers; however, that's the one we use in these tests. Currently, coloc-optional-promoted-dependent-stays-1 and coloc-optional-promoted-dependent-moves-2 tests exhibit the correct behavior, and the other two exhibit incorrect behavior. However, even in the tests that behave correctly, the scores are incorrect. Ref T832 Signed-off-by: Reid Wahl --- cts/cts-scheduler.in | 16 ++ ...oc-optional-promoted-dependent-moves-1.dot | 7 + ...oc-optional-promoted-dependent-moves-2.dot | 27 +++ ...oc-optional-promoted-dependent-stays-1.dot | 7 + ...oc-optional-promoted-dependent-stays-2.dot | 27 +++ ...oc-optional-promoted-dependent-moves-1.exp | 37 ++++ ...oc-optional-promoted-dependent-moves-2.exp | 160 ++++++++++++++++++ ...oc-optional-promoted-dependent-stays-1.exp | 37 ++++ ...oc-optional-promoted-dependent-stays-2.exp | 160 ++++++++++++++++++ ...optional-promoted-dependent-moves-1.scores | 15 ++ ...optional-promoted-dependent-moves-2.scores | 15 ++ ...optional-promoted-dependent-stays-1.scores | 15 ++ ...optional-promoted-dependent-stays-2.scores | 15 ++ ...ptional-promoted-dependent-moves-1.summary | 27 +++ ...ptional-promoted-dependent-moves-2.summary | 39 +++++ ...ptional-promoted-dependent-stays-1.summary | 27 +++ ...ptional-promoted-dependent-stays-2.summary | 39 +++++ ...oc-optional-promoted-dependent-moves-1.xml | 113 +++++++++++++ ...oc-optional-promoted-dependent-moves-2.xml | 113 +++++++++++++ ...oc-optional-promoted-dependent-stays-1.xml | 113 +++++++++++++ ...oc-optional-promoted-dependent-stays-2.xml | 113 +++++++++++++ 21 files changed, 1122 insertions(+) create mode 100644 cts/scheduler/dot/coloc-optional-promoted-dependent-moves-1.dot create mode 100644 cts/scheduler/dot/coloc-optional-promoted-dependent-moves-2.dot create mode 100644 cts/scheduler/dot/coloc-optional-promoted-dependent-stays-1.dot create mode 100644 cts/scheduler/dot/coloc-optional-promoted-dependent-stays-2.dot create mode 100644 cts/scheduler/exp/coloc-optional-promoted-dependent-moves-1.exp create mode 100644 cts/scheduler/exp/coloc-optional-promoted-dependent-moves-2.exp create mode 100644 cts/scheduler/exp/coloc-optional-promoted-dependent-stays-1.exp create mode 100644 cts/scheduler/exp/coloc-optional-promoted-dependent-stays-2.exp create mode 100644 cts/scheduler/scores/coloc-optional-promoted-dependent-moves-1.scores create mode 100644 cts/scheduler/scores/coloc-optional-promoted-dependent-moves-2.scores create mode 100644 cts/scheduler/scores/coloc-optional-promoted-dependent-stays-1.scores create mode 100644 cts/scheduler/scores/coloc-optional-promoted-dependent-stays-2.scores create mode 100644 cts/scheduler/summary/coloc-optional-promoted-dependent-moves-1.summary create mode 100644 cts/scheduler/summary/coloc-optional-promoted-dependent-moves-2.summary create mode 100644 cts/scheduler/summary/coloc-optional-promoted-dependent-stays-1.summary create mode 100644 cts/scheduler/summary/coloc-optional-promoted-dependent-stays-2.summary create mode 100644 cts/scheduler/xml/coloc-optional-promoted-dependent-moves-1.xml create mode 100644 cts/scheduler/xml/coloc-optional-promoted-dependent-moves-2.xml create mode 100644 cts/scheduler/xml/coloc-optional-promoted-dependent-stays-1.xml create mode 100644 cts/scheduler/xml/coloc-optional-promoted-dependent-stays-2.xml diff --git a/cts/cts-scheduler.in b/cts/cts-scheduler.in index e86f970d7f3..066c39b2375 100644 --- a/cts/cts-scheduler.in +++ b/cts/cts-scheduler.in @@ -300,6 +300,22 @@ TESTS = [ "coloc-cloned-group-promoted-dependent2", "Cloned group promoted role with primitive (optional)" ], + [ + "coloc-optional-promoted-dependent-moves-1", + "Colocation score less than promotion score difference: move" + ], + [ + "coloc-optional-promoted-dependent-moves-2", + "Colocation score greater than promotion score difference: move" + ], + [ + "coloc-optional-promoted-dependent-stays-1", + "Colocation score greater than promotion score difference: stay" + ], + [ + "coloc-optional-promoted-dependent-stays-2", + "Colocation score less than promotion score difference: stay" + ], ], [ [ "rsc-sets-seq-true", "Resource Sets - sequential=false" ], diff --git a/cts/scheduler/dot/coloc-optional-promoted-dependent-moves-1.dot b/cts/scheduler/dot/coloc-optional-promoted-dependent-moves-1.dot new file mode 100644 index 00000000000..c5b568f6d55 --- /dev/null +++ b/cts/scheduler/dot/coloc-optional-promoted-dependent-moves-1.dot @@ -0,0 +1,7 @@ + digraph "g" { +"coloc_primary_monitor_10000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_primary_start_0 fastvm-fedora39-23" -> "coloc_primary_monitor_10000 fastvm-fedora39-23" [ style = bold] +"coloc_primary_start_0 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_primary_stop_0 fastvm-fedora39-22" -> "coloc_primary_start_0 fastvm-fedora39-23" [ style = bold] +"coloc_primary_stop_0 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] +} diff --git a/cts/scheduler/dot/coloc-optional-promoted-dependent-moves-2.dot b/cts/scheduler/dot/coloc-optional-promoted-dependent-moves-2.dot new file mode 100644 index 00000000000..0bc1cfc6f94 --- /dev/null +++ b/cts/scheduler/dot/coloc-optional-promoted-dependent-moves-2.dot @@ -0,0 +1,27 @@ + digraph "g" { +"Cancel coloc_dependent_monitor_10000 fastvm-fedora39-22" -> "coloc_dependent_demote_0 fastvm-fedora39-22" [ style = bold] +"Cancel coloc_dependent_monitor_10000 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] +"Cancel coloc_dependent_monitor_11000 fastvm-fedora39-23" -> "coloc_dependent_promote_0 fastvm-fedora39-23" [ style = bold] +"Cancel coloc_dependent_monitor_11000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_dependent-clone_demote_0" -> "coloc_dependent-clone_demoted_0" [ style = bold] +"coloc_dependent-clone_demote_0" -> "coloc_dependent_demote_0 fastvm-fedora39-22" [ style = bold] +"coloc_dependent-clone_demote_0" [ style=bold color="green" fontcolor="orange"] +"coloc_dependent-clone_demoted_0" -> "coloc_dependent-clone_promote_0" [ style = bold] +"coloc_dependent-clone_demoted_0" [ style=bold color="green" fontcolor="orange"] +"coloc_dependent-clone_promote_0" -> "coloc_dependent_promote_0 fastvm-fedora39-23" [ style = bold] +"coloc_dependent-clone_promote_0" [ style=bold color="green" fontcolor="orange"] +"coloc_dependent-clone_promoted_0" [ style=bold color="green" fontcolor="orange"] +"coloc_dependent_demote_0 fastvm-fedora39-22" -> "coloc_dependent-clone_demoted_0" [ style = bold] +"coloc_dependent_demote_0 fastvm-fedora39-22" -> "coloc_dependent_monitor_11000 fastvm-fedora39-22" [ style = bold] +"coloc_dependent_demote_0 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] +"coloc_dependent_monitor_10000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_dependent_monitor_11000 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] +"coloc_dependent_promote_0 fastvm-fedora39-23" -> "coloc_dependent-clone_promoted_0" [ style = bold] +"coloc_dependent_promote_0 fastvm-fedora39-23" -> "coloc_dependent_monitor_10000 fastvm-fedora39-23" [ style = bold] +"coloc_dependent_promote_0 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_primary_monitor_10000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_primary_start_0 fastvm-fedora39-23" -> "coloc_primary_monitor_10000 fastvm-fedora39-23" [ style = bold] +"coloc_primary_start_0 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_primary_stop_0 fastvm-fedora39-22" -> "coloc_primary_start_0 fastvm-fedora39-23" [ style = bold] +"coloc_primary_stop_0 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] +} diff --git a/cts/scheduler/dot/coloc-optional-promoted-dependent-stays-1.dot b/cts/scheduler/dot/coloc-optional-promoted-dependent-stays-1.dot new file mode 100644 index 00000000000..c5b568f6d55 --- /dev/null +++ b/cts/scheduler/dot/coloc-optional-promoted-dependent-stays-1.dot @@ -0,0 +1,7 @@ + digraph "g" { +"coloc_primary_monitor_10000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_primary_start_0 fastvm-fedora39-23" -> "coloc_primary_monitor_10000 fastvm-fedora39-23" [ style = bold] +"coloc_primary_start_0 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_primary_stop_0 fastvm-fedora39-22" -> "coloc_primary_start_0 fastvm-fedora39-23" [ style = bold] +"coloc_primary_stop_0 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] +} diff --git a/cts/scheduler/dot/coloc-optional-promoted-dependent-stays-2.dot b/cts/scheduler/dot/coloc-optional-promoted-dependent-stays-2.dot new file mode 100644 index 00000000000..0bc1cfc6f94 --- /dev/null +++ b/cts/scheduler/dot/coloc-optional-promoted-dependent-stays-2.dot @@ -0,0 +1,27 @@ + digraph "g" { +"Cancel coloc_dependent_monitor_10000 fastvm-fedora39-22" -> "coloc_dependent_demote_0 fastvm-fedora39-22" [ style = bold] +"Cancel coloc_dependent_monitor_10000 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] +"Cancel coloc_dependent_monitor_11000 fastvm-fedora39-23" -> "coloc_dependent_promote_0 fastvm-fedora39-23" [ style = bold] +"Cancel coloc_dependent_monitor_11000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_dependent-clone_demote_0" -> "coloc_dependent-clone_demoted_0" [ style = bold] +"coloc_dependent-clone_demote_0" -> "coloc_dependent_demote_0 fastvm-fedora39-22" [ style = bold] +"coloc_dependent-clone_demote_0" [ style=bold color="green" fontcolor="orange"] +"coloc_dependent-clone_demoted_0" -> "coloc_dependent-clone_promote_0" [ style = bold] +"coloc_dependent-clone_demoted_0" [ style=bold color="green" fontcolor="orange"] +"coloc_dependent-clone_promote_0" -> "coloc_dependent_promote_0 fastvm-fedora39-23" [ style = bold] +"coloc_dependent-clone_promote_0" [ style=bold color="green" fontcolor="orange"] +"coloc_dependent-clone_promoted_0" [ style=bold color="green" fontcolor="orange"] +"coloc_dependent_demote_0 fastvm-fedora39-22" -> "coloc_dependent-clone_demoted_0" [ style = bold] +"coloc_dependent_demote_0 fastvm-fedora39-22" -> "coloc_dependent_monitor_11000 fastvm-fedora39-22" [ style = bold] +"coloc_dependent_demote_0 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] +"coloc_dependent_monitor_10000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_dependent_monitor_11000 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] +"coloc_dependent_promote_0 fastvm-fedora39-23" -> "coloc_dependent-clone_promoted_0" [ style = bold] +"coloc_dependent_promote_0 fastvm-fedora39-23" -> "coloc_dependent_monitor_10000 fastvm-fedora39-23" [ style = bold] +"coloc_dependent_promote_0 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_primary_monitor_10000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_primary_start_0 fastvm-fedora39-23" -> "coloc_primary_monitor_10000 fastvm-fedora39-23" [ style = bold] +"coloc_primary_start_0 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_primary_stop_0 fastvm-fedora39-22" -> "coloc_primary_start_0 fastvm-fedora39-23" [ style = bold] +"coloc_primary_stop_0 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] +} diff --git a/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-1.exp b/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-1.exp new file mode 100644 index 00000000000..48451cfb4a8 --- /dev/null +++ b/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-1.exp @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-2.exp b/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-2.exp new file mode 100644 index 00000000000..e02a4666114 --- /dev/null +++ b/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-2.exp @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-1.exp b/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-1.exp new file mode 100644 index 00000000000..48451cfb4a8 --- /dev/null +++ b/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-1.exp @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-2.exp b/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-2.exp new file mode 100644 index 00000000000..e02a4666114 --- /dev/null +++ b/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-2.exp @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-1.scores b/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-1.scores new file mode 100644 index 00000000000..98da9a4b981 --- /dev/null +++ b/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-1.scores @@ -0,0 +1,15 @@ + +coloc_dependent:0 promotion score on fastvm-fedora39-22: 151 +coloc_dependent:1 promotion score on fastvm-fedora39-23: 160 +pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-22: 0 +pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-23: 0 +pcmk__clone_assign: coloc_dependent:0 allocation score on fastvm-fedora39-22: 151 +pcmk__clone_assign: coloc_dependent:0 allocation score on fastvm-fedora39-23: 0 +pcmk__clone_assign: coloc_dependent:1 allocation score on fastvm-fedora39-22: 0 +pcmk__clone_assign: coloc_dependent:1 allocation score on fastvm-fedora39-23: 101 +pcmk__primitive_assign: coloc_dependent:0 allocation score on fastvm-fedora39-22: 151 +pcmk__primitive_assign: coloc_dependent:0 allocation score on fastvm-fedora39-23: 0 +pcmk__primitive_assign: coloc_dependent:1 allocation score on fastvm-fedora39-22: -INFINITY +pcmk__primitive_assign: coloc_dependent:1 allocation score on fastvm-fedora39-23: 101 +pcmk__primitive_assign: coloc_primary allocation score on fastvm-fedora39-22: 1 +pcmk__primitive_assign: coloc_primary allocation score on fastvm-fedora39-23: INFINITY diff --git a/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-2.scores b/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-2.scores new file mode 100644 index 00000000000..9d89c26462a --- /dev/null +++ b/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-2.scores @@ -0,0 +1,15 @@ + +coloc_dependent:0 promotion score on fastvm-fedora39-22: 151 +coloc_dependent:1 promotion score on fastvm-fedora39-23: 220 +pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-22: 0 +pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-23: 0 +pcmk__clone_assign: coloc_dependent:0 allocation score on fastvm-fedora39-22: 151 +pcmk__clone_assign: coloc_dependent:0 allocation score on fastvm-fedora39-23: 0 +pcmk__clone_assign: coloc_dependent:1 allocation score on fastvm-fedora39-22: 0 +pcmk__clone_assign: coloc_dependent:1 allocation score on fastvm-fedora39-23: 101 +pcmk__primitive_assign: coloc_dependent:0 allocation score on fastvm-fedora39-22: 151 +pcmk__primitive_assign: coloc_dependent:0 allocation score on fastvm-fedora39-23: 0 +pcmk__primitive_assign: coloc_dependent:1 allocation score on fastvm-fedora39-22: -INFINITY +pcmk__primitive_assign: coloc_dependent:1 allocation score on fastvm-fedora39-23: 101 +pcmk__primitive_assign: coloc_primary allocation score on fastvm-fedora39-22: 1 +pcmk__primitive_assign: coloc_primary allocation score on fastvm-fedora39-23: INFINITY diff --git a/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-1.scores b/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-1.scores new file mode 100644 index 00000000000..144fb31819a --- /dev/null +++ b/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-1.scores @@ -0,0 +1,15 @@ + +coloc_dependent:0 promotion score on fastvm-fedora39-22: 101 +coloc_dependent:1 promotion score on fastvm-fedora39-23: 270 +pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-22: 0 +pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-23: 0 +pcmk__clone_assign: coloc_dependent:0 allocation score on fastvm-fedora39-22: 101 +pcmk__clone_assign: coloc_dependent:0 allocation score on fastvm-fedora39-23: 0 +pcmk__clone_assign: coloc_dependent:1 allocation score on fastvm-fedora39-22: 0 +pcmk__clone_assign: coloc_dependent:1 allocation score on fastvm-fedora39-23: 151 +pcmk__primitive_assign: coloc_dependent:0 allocation score on fastvm-fedora39-22: 101 +pcmk__primitive_assign: coloc_dependent:0 allocation score on fastvm-fedora39-23: -INFINITY +pcmk__primitive_assign: coloc_dependent:1 allocation score on fastvm-fedora39-22: 0 +pcmk__primitive_assign: coloc_dependent:1 allocation score on fastvm-fedora39-23: 151 +pcmk__primitive_assign: coloc_primary allocation score on fastvm-fedora39-22: 1 +pcmk__primitive_assign: coloc_primary allocation score on fastvm-fedora39-23: INFINITY diff --git a/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-2.scores b/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-2.scores new file mode 100644 index 00000000000..98da9a4b981 --- /dev/null +++ b/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-2.scores @@ -0,0 +1,15 @@ + +coloc_dependent:0 promotion score on fastvm-fedora39-22: 151 +coloc_dependent:1 promotion score on fastvm-fedora39-23: 160 +pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-22: 0 +pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-23: 0 +pcmk__clone_assign: coloc_dependent:0 allocation score on fastvm-fedora39-22: 151 +pcmk__clone_assign: coloc_dependent:0 allocation score on fastvm-fedora39-23: 0 +pcmk__clone_assign: coloc_dependent:1 allocation score on fastvm-fedora39-22: 0 +pcmk__clone_assign: coloc_dependent:1 allocation score on fastvm-fedora39-23: 101 +pcmk__primitive_assign: coloc_dependent:0 allocation score on fastvm-fedora39-22: 151 +pcmk__primitive_assign: coloc_dependent:0 allocation score on fastvm-fedora39-23: 0 +pcmk__primitive_assign: coloc_dependent:1 allocation score on fastvm-fedora39-22: -INFINITY +pcmk__primitive_assign: coloc_dependent:1 allocation score on fastvm-fedora39-23: 101 +pcmk__primitive_assign: coloc_primary allocation score on fastvm-fedora39-22: 1 +pcmk__primitive_assign: coloc_primary allocation score on fastvm-fedora39-23: INFINITY diff --git a/cts/scheduler/summary/coloc-optional-promoted-dependent-moves-1.summary b/cts/scheduler/summary/coloc-optional-promoted-dependent-moves-1.summary new file mode 100644 index 00000000000..6c7fc42d177 --- /dev/null +++ b/cts/scheduler/summary/coloc-optional-promoted-dependent-moves-1.summary @@ -0,0 +1,27 @@ +Current cluster status: + * Node List: + * Online: [ fastvm-fedora39-22 fastvm-fedora39-23 ] + + * Full List of Resources: + * coloc_primary (ocf:pacemaker:Dummy): Started fastvm-fedora39-22 + * Clone Set: coloc_dependent-clone [coloc_dependent] (promotable): + * Promoted: [ fastvm-fedora39-23 ] + * Unpromoted: [ fastvm-fedora39-22 ] + +Transition Summary: + * Move coloc_primary ( fastvm-fedora39-22 -> fastvm-fedora39-23 ) + +Executing Cluster Transition: + * Resource action: coloc_primary stop on fastvm-fedora39-22 + * Resource action: coloc_primary start on fastvm-fedora39-23 + * Resource action: coloc_primary monitor=10000 on fastvm-fedora39-23 + +Revised Cluster Status: + * Node List: + * Online: [ fastvm-fedora39-22 fastvm-fedora39-23 ] + + * Full List of Resources: + * coloc_primary (ocf:pacemaker:Dummy): Started fastvm-fedora39-23 + * Clone Set: coloc_dependent-clone [coloc_dependent] (promotable): + * Promoted: [ fastvm-fedora39-23 ] + * Unpromoted: [ fastvm-fedora39-22 ] diff --git a/cts/scheduler/summary/coloc-optional-promoted-dependent-moves-2.summary b/cts/scheduler/summary/coloc-optional-promoted-dependent-moves-2.summary new file mode 100644 index 00000000000..d7142d54fa4 --- /dev/null +++ b/cts/scheduler/summary/coloc-optional-promoted-dependent-moves-2.summary @@ -0,0 +1,39 @@ +Current cluster status: + * Node List: + * Online: [ fastvm-fedora39-22 fastvm-fedora39-23 ] + + * Full List of Resources: + * coloc_primary (ocf:pacemaker:Dummy): Started fastvm-fedora39-22 + * Clone Set: coloc_dependent-clone [coloc_dependent] (promotable): + * Promoted: [ fastvm-fedora39-22 ] + * Unpromoted: [ fastvm-fedora39-23 ] + +Transition Summary: + * Move coloc_primary ( fastvm-fedora39-22 -> fastvm-fedora39-23 ) + * Demote coloc_dependent:0 ( Promoted -> Unpromoted fastvm-fedora39-22 ) + * Promote coloc_dependent:1 ( Unpromoted -> Promoted fastvm-fedora39-23 ) + +Executing Cluster Transition: + * Resource action: coloc_primary stop on fastvm-fedora39-22 + * Resource action: coloc_dependent cancel=10000 on fastvm-fedora39-22 + * Resource action: coloc_dependent cancel=11000 on fastvm-fedora39-23 + * Pseudo action: coloc_dependent-clone_demote_0 + * Resource action: coloc_primary start on fastvm-fedora39-23 + * Resource action: coloc_dependent demote on fastvm-fedora39-22 + * Pseudo action: coloc_dependent-clone_demoted_0 + * Pseudo action: coloc_dependent-clone_promote_0 + * Resource action: coloc_primary monitor=10000 on fastvm-fedora39-23 + * Resource action: coloc_dependent monitor=11000 on fastvm-fedora39-22 + * Resource action: coloc_dependent promote on fastvm-fedora39-23 + * Pseudo action: coloc_dependent-clone_promoted_0 + * Resource action: coloc_dependent monitor=10000 on fastvm-fedora39-23 + +Revised Cluster Status: + * Node List: + * Online: [ fastvm-fedora39-22 fastvm-fedora39-23 ] + + * Full List of Resources: + * coloc_primary (ocf:pacemaker:Dummy): Started fastvm-fedora39-23 + * Clone Set: coloc_dependent-clone [coloc_dependent] (promotable): + * Promoted: [ fastvm-fedora39-23 ] + * Unpromoted: [ fastvm-fedora39-22 ] diff --git a/cts/scheduler/summary/coloc-optional-promoted-dependent-stays-1.summary b/cts/scheduler/summary/coloc-optional-promoted-dependent-stays-1.summary new file mode 100644 index 00000000000..6c7fc42d177 --- /dev/null +++ b/cts/scheduler/summary/coloc-optional-promoted-dependent-stays-1.summary @@ -0,0 +1,27 @@ +Current cluster status: + * Node List: + * Online: [ fastvm-fedora39-22 fastvm-fedora39-23 ] + + * Full List of Resources: + * coloc_primary (ocf:pacemaker:Dummy): Started fastvm-fedora39-22 + * Clone Set: coloc_dependent-clone [coloc_dependent] (promotable): + * Promoted: [ fastvm-fedora39-23 ] + * Unpromoted: [ fastvm-fedora39-22 ] + +Transition Summary: + * Move coloc_primary ( fastvm-fedora39-22 -> fastvm-fedora39-23 ) + +Executing Cluster Transition: + * Resource action: coloc_primary stop on fastvm-fedora39-22 + * Resource action: coloc_primary start on fastvm-fedora39-23 + * Resource action: coloc_primary monitor=10000 on fastvm-fedora39-23 + +Revised Cluster Status: + * Node List: + * Online: [ fastvm-fedora39-22 fastvm-fedora39-23 ] + + * Full List of Resources: + * coloc_primary (ocf:pacemaker:Dummy): Started fastvm-fedora39-23 + * Clone Set: coloc_dependent-clone [coloc_dependent] (promotable): + * Promoted: [ fastvm-fedora39-23 ] + * Unpromoted: [ fastvm-fedora39-22 ] diff --git a/cts/scheduler/summary/coloc-optional-promoted-dependent-stays-2.summary b/cts/scheduler/summary/coloc-optional-promoted-dependent-stays-2.summary new file mode 100644 index 00000000000..d7142d54fa4 --- /dev/null +++ b/cts/scheduler/summary/coloc-optional-promoted-dependent-stays-2.summary @@ -0,0 +1,39 @@ +Current cluster status: + * Node List: + * Online: [ fastvm-fedora39-22 fastvm-fedora39-23 ] + + * Full List of Resources: + * coloc_primary (ocf:pacemaker:Dummy): Started fastvm-fedora39-22 + * Clone Set: coloc_dependent-clone [coloc_dependent] (promotable): + * Promoted: [ fastvm-fedora39-22 ] + * Unpromoted: [ fastvm-fedora39-23 ] + +Transition Summary: + * Move coloc_primary ( fastvm-fedora39-22 -> fastvm-fedora39-23 ) + * Demote coloc_dependent:0 ( Promoted -> Unpromoted fastvm-fedora39-22 ) + * Promote coloc_dependent:1 ( Unpromoted -> Promoted fastvm-fedora39-23 ) + +Executing Cluster Transition: + * Resource action: coloc_primary stop on fastvm-fedora39-22 + * Resource action: coloc_dependent cancel=10000 on fastvm-fedora39-22 + * Resource action: coloc_dependent cancel=11000 on fastvm-fedora39-23 + * Pseudo action: coloc_dependent-clone_demote_0 + * Resource action: coloc_primary start on fastvm-fedora39-23 + * Resource action: coloc_dependent demote on fastvm-fedora39-22 + * Pseudo action: coloc_dependent-clone_demoted_0 + * Pseudo action: coloc_dependent-clone_promote_0 + * Resource action: coloc_primary monitor=10000 on fastvm-fedora39-23 + * Resource action: coloc_dependent monitor=11000 on fastvm-fedora39-22 + * Resource action: coloc_dependent promote on fastvm-fedora39-23 + * Pseudo action: coloc_dependent-clone_promoted_0 + * Resource action: coloc_dependent monitor=10000 on fastvm-fedora39-23 + +Revised Cluster Status: + * Node List: + * Online: [ fastvm-fedora39-22 fastvm-fedora39-23 ] + + * Full List of Resources: + * coloc_primary (ocf:pacemaker:Dummy): Started fastvm-fedora39-23 + * Clone Set: coloc_dependent-clone [coloc_dependent] (promotable): + * Promoted: [ fastvm-fedora39-23 ] + * Unpromoted: [ fastvm-fedora39-22 ] diff --git a/cts/scheduler/xml/coloc-optional-promoted-dependent-moves-1.xml b/cts/scheduler/xml/coloc-optional-promoted-dependent-moves-1.xml new file mode 100644 index 00000000000..276b4026579 --- /dev/null +++ b/cts/scheduler/xml/coloc-optional-promoted-dependent-moves-1.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cts/scheduler/xml/coloc-optional-promoted-dependent-moves-2.xml b/cts/scheduler/xml/coloc-optional-promoted-dependent-moves-2.xml new file mode 100644 index 00000000000..c1e99e7bfa0 --- /dev/null +++ b/cts/scheduler/xml/coloc-optional-promoted-dependent-moves-2.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cts/scheduler/xml/coloc-optional-promoted-dependent-stays-1.xml b/cts/scheduler/xml/coloc-optional-promoted-dependent-stays-1.xml new file mode 100644 index 00000000000..5c6ac3cd866 --- /dev/null +++ b/cts/scheduler/xml/coloc-optional-promoted-dependent-stays-1.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cts/scheduler/xml/coloc-optional-promoted-dependent-stays-2.xml b/cts/scheduler/xml/coloc-optional-promoted-dependent-stays-2.xml new file mode 100644 index 00000000000..c3f0d1f6ab7 --- /dev/null +++ b/cts/scheduler/xml/coloc-optional-promoted-dependent-stays-2.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 456c46ba74313e7e377ff492195e76633bacc4ea Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Tue, 18 Jun 2024 13:26:14 -0700 Subject: [PATCH 074/364] Fix: libpacemaker: Don't apply colocation twice for promotion priority This fixes a regression introduced by 2984222d in 2.1.7. Fixes T832 Signed-off-by: Reid Wahl --- lib/pacemaker/pcmk_sched_colocation.c | 10 +++++--- lib/pacemaker/pcmk_sched_promotable.c | 36 +-------------------------- 2 files changed, 8 insertions(+), 38 deletions(-) diff --git a/lib/pacemaker/pcmk_sched_colocation.c b/lib/pacemaker/pcmk_sched_colocation.c index b6e8d9627dd..00155b7c4e5 100644 --- a/lib/pacemaker/pcmk_sched_colocation.c +++ b/lib/pacemaker/pcmk_sched_colocation.c @@ -1420,12 +1420,16 @@ pcmk__apply_coloc_to_priority(pcmk_resource_t *dependent, CRM_ASSERT((dependent != NULL) && (primary != NULL) && (colocation != NULL)); - if ((primary->allocated_to == NULL) || (dependent->allocated_to == NULL)) { + if (dependent->allocated_to == NULL) { return 0; } - if (colocation->primary_role != pcmk_role_unknown) { - /* Colocation applies only if the primary's next role matches + if ((primary->allocated_to != NULL) + && (colocation->primary_role != pcmk_role_unknown)) { + /* Colocation applies only if the primary's next role matches. + * + * If primary->allocated_to == NULL, we want to proceed past this block, + * so that dependent->allocated_to is marked ineligible for promotion. * * @TODO Why ignore a mandatory colocation in this case when we apply * its negation in the mismatched value case? diff --git a/lib/pacemaker/pcmk_sched_promotable.c b/lib/pacemaker/pcmk_sched_promotable.c index 77b231bdad8..e129b7df458 100644 --- a/lib/pacemaker/pcmk_sched_promotable.c +++ b/lib/pacemaker/pcmk_sched_promotable.c @@ -340,37 +340,6 @@ add_sort_index_to_node_score(gpointer data, gpointer user_data) pcmk__node_name(node), pcmk_readable_score(node->weight)); } -/*! - * \internal - * \brief Apply colocation to dependent's node scores if for promoted role - * - * \param[in,out] data Colocation constraint to apply - * \param[in,out] user_data Promotable clone that is constraint's dependent - */ -static void -apply_coloc_to_dependent(gpointer data, gpointer user_data) -{ - pcmk__colocation_t *colocation = data; - pcmk_resource_t *clone = user_data; - pcmk_resource_t *primary = colocation->primary; - uint32_t flags = pcmk__coloc_select_default; - float factor = colocation->score / (float) PCMK_SCORE_INFINITY; - - if (colocation->dependent_role != pcmk_role_promoted) { - return; - } - if (colocation->score < PCMK_SCORE_INFINITY) { - flags = pcmk__coloc_select_active; - } - pcmk__rsc_trace(clone, "Applying colocation %s (promoted %s with %s) @%s", - colocation->id, colocation->dependent->id, - colocation->primary->id, - pcmk_readable_score(colocation->score)); - primary->cmds->add_colocated_node_scores(primary, clone, clone->id, - &clone->allowed_nodes, colocation, - factor, flags); -} - /*! * \internal * \brief Apply colocation to primary's node scores if for promoted role @@ -478,10 +447,7 @@ sort_promotable_instances(pcmk_resource_t *clone) g_list_foreach(clone->children, add_sort_index_to_node_score, clone); - colocations = pcmk__this_with_colocations(clone); - g_list_foreach(colocations, apply_coloc_to_dependent, clone); - g_list_free(colocations); - + // "this with" colocations were already applied via set_instance_priority() colocations = pcmk__with_this_colocations(clone); g_list_foreach(colocations, apply_coloc_to_primary, clone); g_list_free(colocations); From 4e8a8ddbdc1ce4365ecae846dbcb84f32df45237 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Tue, 18 Jun 2024 16:12:50 -0700 Subject: [PATCH 075/364] Test: cts-scheduler: Update outputs for double colocation fix Scores that change in the bug-lf-2358 and use-after-free-merge tests do so correctly. In the coloc-cloned-group-promoted-dependent2 scores, we see that the stickiness is no longer added to the promotion priority. This is okay, and we don't need to consider stickiness in order to break ties. The instances are numbered/ordered starting with the currently promoted ones, which avoids unnecessary demotion/promotion. Ref T832 Signed-off-by: Reid Wahl --- ...oc-optional-promoted-dependent-moves-1.dot | 20 +++ ...oc-optional-promoted-dependent-stays-2.dot | 20 --- ...oc-optional-promoted-dependent-moves-1.exp | 123 ++++++++++++++++++ ...oc-optional-promoted-dependent-stays-2.exp | 123 ------------------ cts/scheduler/scores/bug-lf-2358.scores | 2 +- ...oc-cloned-group-promoted-dependent2.scores | 2 +- ...optional-promoted-dependent-moves-1.scores | 4 +- ...optional-promoted-dependent-moves-2.scores | 4 +- ...optional-promoted-dependent-stays-1.scores | 4 +- ...optional-promoted-dependent-stays-2.scores | 4 +- .../scores/use-after-free-merge.scores | 4 +- ...ptional-promoted-dependent-moves-1.summary | 18 ++- ...ptional-promoted-dependent-stays-2.summary | 18 +-- 13 files changed, 173 insertions(+), 173 deletions(-) diff --git a/cts/scheduler/dot/coloc-optional-promoted-dependent-moves-1.dot b/cts/scheduler/dot/coloc-optional-promoted-dependent-moves-1.dot index c5b568f6d55..002a4388cad 100644 --- a/cts/scheduler/dot/coloc-optional-promoted-dependent-moves-1.dot +++ b/cts/scheduler/dot/coloc-optional-promoted-dependent-moves-1.dot @@ -1,4 +1,24 @@ digraph "g" { +"Cancel coloc_dependent_monitor_10000 fastvm-fedora39-23" -> "coloc_dependent_demote_0 fastvm-fedora39-23" [ style = bold] +"Cancel coloc_dependent_monitor_10000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"Cancel coloc_dependent_monitor_11000 fastvm-fedora39-22" -> "coloc_dependent_promote_0 fastvm-fedora39-22" [ style = bold] +"Cancel coloc_dependent_monitor_11000 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] +"coloc_dependent-clone_demote_0" -> "coloc_dependent-clone_demoted_0" [ style = bold] +"coloc_dependent-clone_demote_0" -> "coloc_dependent_demote_0 fastvm-fedora39-23" [ style = bold] +"coloc_dependent-clone_demote_0" [ style=bold color="green" fontcolor="orange"] +"coloc_dependent-clone_demoted_0" -> "coloc_dependent-clone_promote_0" [ style = bold] +"coloc_dependent-clone_demoted_0" [ style=bold color="green" fontcolor="orange"] +"coloc_dependent-clone_promote_0" -> "coloc_dependent_promote_0 fastvm-fedora39-22" [ style = bold] +"coloc_dependent-clone_promote_0" [ style=bold color="green" fontcolor="orange"] +"coloc_dependent-clone_promoted_0" [ style=bold color="green" fontcolor="orange"] +"coloc_dependent_demote_0 fastvm-fedora39-23" -> "coloc_dependent-clone_demoted_0" [ style = bold] +"coloc_dependent_demote_0 fastvm-fedora39-23" -> "coloc_dependent_monitor_11000 fastvm-fedora39-23" [ style = bold] +"coloc_dependent_demote_0 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_dependent_monitor_10000 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] +"coloc_dependent_monitor_11000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] +"coloc_dependent_promote_0 fastvm-fedora39-22" -> "coloc_dependent-clone_promoted_0" [ style = bold] +"coloc_dependent_promote_0 fastvm-fedora39-22" -> "coloc_dependent_monitor_10000 fastvm-fedora39-22" [ style = bold] +"coloc_dependent_promote_0 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] "coloc_primary_monitor_10000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] "coloc_primary_start_0 fastvm-fedora39-23" -> "coloc_primary_monitor_10000 fastvm-fedora39-23" [ style = bold] "coloc_primary_start_0 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] diff --git a/cts/scheduler/dot/coloc-optional-promoted-dependent-stays-2.dot b/cts/scheduler/dot/coloc-optional-promoted-dependent-stays-2.dot index 0bc1cfc6f94..c5b568f6d55 100644 --- a/cts/scheduler/dot/coloc-optional-promoted-dependent-stays-2.dot +++ b/cts/scheduler/dot/coloc-optional-promoted-dependent-stays-2.dot @@ -1,24 +1,4 @@ digraph "g" { -"Cancel coloc_dependent_monitor_10000 fastvm-fedora39-22" -> "coloc_dependent_demote_0 fastvm-fedora39-22" [ style = bold] -"Cancel coloc_dependent_monitor_10000 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] -"Cancel coloc_dependent_monitor_11000 fastvm-fedora39-23" -> "coloc_dependent_promote_0 fastvm-fedora39-23" [ style = bold] -"Cancel coloc_dependent_monitor_11000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] -"coloc_dependent-clone_demote_0" -> "coloc_dependent-clone_demoted_0" [ style = bold] -"coloc_dependent-clone_demote_0" -> "coloc_dependent_demote_0 fastvm-fedora39-22" [ style = bold] -"coloc_dependent-clone_demote_0" [ style=bold color="green" fontcolor="orange"] -"coloc_dependent-clone_demoted_0" -> "coloc_dependent-clone_promote_0" [ style = bold] -"coloc_dependent-clone_demoted_0" [ style=bold color="green" fontcolor="orange"] -"coloc_dependent-clone_promote_0" -> "coloc_dependent_promote_0 fastvm-fedora39-23" [ style = bold] -"coloc_dependent-clone_promote_0" [ style=bold color="green" fontcolor="orange"] -"coloc_dependent-clone_promoted_0" [ style=bold color="green" fontcolor="orange"] -"coloc_dependent_demote_0 fastvm-fedora39-22" -> "coloc_dependent-clone_demoted_0" [ style = bold] -"coloc_dependent_demote_0 fastvm-fedora39-22" -> "coloc_dependent_monitor_11000 fastvm-fedora39-22" [ style = bold] -"coloc_dependent_demote_0 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] -"coloc_dependent_monitor_10000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] -"coloc_dependent_monitor_11000 fastvm-fedora39-22" [ style=bold color="green" fontcolor="black"] -"coloc_dependent_promote_0 fastvm-fedora39-23" -> "coloc_dependent-clone_promoted_0" [ style = bold] -"coloc_dependent_promote_0 fastvm-fedora39-23" -> "coloc_dependent_monitor_10000 fastvm-fedora39-23" [ style = bold] -"coloc_dependent_promote_0 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] "coloc_primary_monitor_10000 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] "coloc_primary_start_0 fastvm-fedora39-23" -> "coloc_primary_monitor_10000 fastvm-fedora39-23" [ style = bold] "coloc_primary_start_0 fastvm-fedora39-23" [ style=bold color="green" fontcolor="black"] diff --git a/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-1.exp b/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-1.exp index 48451cfb4a8..eb03489eb36 100644 --- a/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-1.exp +++ b/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-1.exp @@ -34,4 +34,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-2.exp b/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-2.exp index e02a4666114..48451cfb4a8 100644 --- a/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-2.exp +++ b/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-2.exp @@ -34,127 +34,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cts/scheduler/scores/bug-lf-2358.scores b/cts/scheduler/scores/bug-lf-2358.scores index 422d9d8ea11..3d36027701e 100644 --- a/cts/scheduler/scores/bug-lf-2358.scores +++ b/cts/scheduler/scores/bug-lf-2358.scores @@ -71,7 +71,7 @@ pcmk__primitive_assign: res_mysql2 allocation score on alice.demo: 0 pcmk__primitive_assign: res_mysql2 allocation score on bob.demo: -INFINITY pcmk__primitive_assign: res_nfs allocation score on alice.demo: -INFINITY pcmk__primitive_assign: res_nfs allocation score on bob.demo: -INFINITY -res_drbd_mysql1:0 promotion score on bob.demo: 0 +res_drbd_mysql1:0 promotion score on bob.demo: 10000 res_drbd_mysql1:1 promotion score on alice.demo: -INFINITY res_drbd_mysql2:0 promotion score on bob.demo: 10000 res_drbd_mysql2:1 promotion score on alice.demo: 10000 diff --git a/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores index 151a57d702b..ac0a7f2d541 100644 --- a/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores +++ b/cts/scheduler/scores/coloc-cloned-group-promoted-dependent2.scores @@ -1,6 +1,6 @@ grp1:0 promotion score on node2: 50 -grp1:1 promotion score on node1: 2011 +grp1:1 promotion score on node1: 2010 pcmk__clone_assign: grp1-clone allocation score on node1: 0 pcmk__clone_assign: grp1-clone allocation score on node2: 0 pcmk__clone_assign: grp1:0 allocation score on node1: 0 diff --git a/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-1.scores b/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-1.scores index 98da9a4b981..cf497120d1e 100644 --- a/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-1.scores +++ b/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-1.scores @@ -1,6 +1,6 @@ -coloc_dependent:0 promotion score on fastvm-fedora39-22: 151 -coloc_dependent:1 promotion score on fastvm-fedora39-23: 160 +coloc_dependent:0 promotion score on fastvm-fedora39-22: 150 +coloc_dependent:1 promotion score on fastvm-fedora39-23: 130 pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-22: 0 pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-23: 0 pcmk__clone_assign: coloc_dependent:0 allocation score on fastvm-fedora39-22: 151 diff --git a/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-2.scores b/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-2.scores index 9d89c26462a..b02db784d5e 100644 --- a/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-2.scores +++ b/cts/scheduler/scores/coloc-optional-promoted-dependent-moves-2.scores @@ -1,6 +1,6 @@ -coloc_dependent:0 promotion score on fastvm-fedora39-22: 151 -coloc_dependent:1 promotion score on fastvm-fedora39-23: 220 +coloc_dependent:0 promotion score on fastvm-fedora39-22: 150 +coloc_dependent:1 promotion score on fastvm-fedora39-23: 160 pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-22: 0 pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-23: 0 pcmk__clone_assign: coloc_dependent:0 allocation score on fastvm-fedora39-22: 151 diff --git a/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-1.scores b/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-1.scores index 144fb31819a..830e01b0ffd 100644 --- a/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-1.scores +++ b/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-1.scores @@ -1,6 +1,6 @@ -coloc_dependent:0 promotion score on fastvm-fedora39-22: 101 -coloc_dependent:1 promotion score on fastvm-fedora39-23: 270 +coloc_dependent:0 promotion score on fastvm-fedora39-22: 100 +coloc_dependent:1 promotion score on fastvm-fedora39-23: 210 pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-22: 0 pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-23: 0 pcmk__clone_assign: coloc_dependent:0 allocation score on fastvm-fedora39-22: 101 diff --git a/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-2.scores b/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-2.scores index 98da9a4b981..cf497120d1e 100644 --- a/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-2.scores +++ b/cts/scheduler/scores/coloc-optional-promoted-dependent-stays-2.scores @@ -1,6 +1,6 @@ -coloc_dependent:0 promotion score on fastvm-fedora39-22: 151 -coloc_dependent:1 promotion score on fastvm-fedora39-23: 160 +coloc_dependent:0 promotion score on fastvm-fedora39-22: 150 +coloc_dependent:1 promotion score on fastvm-fedora39-23: 130 pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-22: 0 pcmk__clone_assign: coloc_dependent-clone allocation score on fastvm-fedora39-23: 0 pcmk__clone_assign: coloc_dependent:0 allocation score on fastvm-fedora39-22: 151 diff --git a/cts/scheduler/scores/use-after-free-merge.scores b/cts/scheduler/scores/use-after-free-merge.scores index ff428e90316..04efe041072 100644 --- a/cts/scheduler/scores/use-after-free-merge.scores +++ b/cts/scheduler/scores/use-after-free-merge.scores @@ -21,5 +21,5 @@ pcmk__primitive_assign: s0:0 allocation score on hex-13: 0 pcmk__primitive_assign: s0:0 allocation score on hex-14: 0 pcmk__primitive_assign: s0:1 allocation score on hex-13: -INFINITY pcmk__primitive_assign: s0:1 allocation score on hex-14: 0 -s0:0 promotion score on hex-13: -1 -s0:1 promotion score on hex-14: -1 +s0:0 promotion score on hex-13: -INFINITY +s0:1 promotion score on hex-14: -INFINITY diff --git a/cts/scheduler/summary/coloc-optional-promoted-dependent-moves-1.summary b/cts/scheduler/summary/coloc-optional-promoted-dependent-moves-1.summary index 6c7fc42d177..0da352d9e89 100644 --- a/cts/scheduler/summary/coloc-optional-promoted-dependent-moves-1.summary +++ b/cts/scheduler/summary/coloc-optional-promoted-dependent-moves-1.summary @@ -9,12 +9,24 @@ Current cluster status: * Unpromoted: [ fastvm-fedora39-22 ] Transition Summary: - * Move coloc_primary ( fastvm-fedora39-22 -> fastvm-fedora39-23 ) + * Move coloc_primary ( fastvm-fedora39-22 -> fastvm-fedora39-23 ) + * Promote coloc_dependent:0 ( Unpromoted -> Promoted fastvm-fedora39-22 ) + * Demote coloc_dependent:1 ( Promoted -> Unpromoted fastvm-fedora39-23 ) Executing Cluster Transition: * Resource action: coloc_primary stop on fastvm-fedora39-22 + * Resource action: coloc_dependent cancel=11000 on fastvm-fedora39-22 + * Resource action: coloc_dependent cancel=10000 on fastvm-fedora39-23 + * Pseudo action: coloc_dependent-clone_demote_0 * Resource action: coloc_primary start on fastvm-fedora39-23 + * Resource action: coloc_dependent demote on fastvm-fedora39-23 + * Pseudo action: coloc_dependent-clone_demoted_0 + * Pseudo action: coloc_dependent-clone_promote_0 * Resource action: coloc_primary monitor=10000 on fastvm-fedora39-23 + * Resource action: coloc_dependent promote on fastvm-fedora39-22 + * Resource action: coloc_dependent monitor=11000 on fastvm-fedora39-23 + * Pseudo action: coloc_dependent-clone_promoted_0 + * Resource action: coloc_dependent monitor=10000 on fastvm-fedora39-22 Revised Cluster Status: * Node List: @@ -23,5 +35,5 @@ Revised Cluster Status: * Full List of Resources: * coloc_primary (ocf:pacemaker:Dummy): Started fastvm-fedora39-23 * Clone Set: coloc_dependent-clone [coloc_dependent] (promotable): - * Promoted: [ fastvm-fedora39-23 ] - * Unpromoted: [ fastvm-fedora39-22 ] + * Promoted: [ fastvm-fedora39-22 ] + * Unpromoted: [ fastvm-fedora39-23 ] diff --git a/cts/scheduler/summary/coloc-optional-promoted-dependent-stays-2.summary b/cts/scheduler/summary/coloc-optional-promoted-dependent-stays-2.summary index d7142d54fa4..1f1f2081e8a 100644 --- a/cts/scheduler/summary/coloc-optional-promoted-dependent-stays-2.summary +++ b/cts/scheduler/summary/coloc-optional-promoted-dependent-stays-2.summary @@ -9,24 +9,12 @@ Current cluster status: * Unpromoted: [ fastvm-fedora39-23 ] Transition Summary: - * Move coloc_primary ( fastvm-fedora39-22 -> fastvm-fedora39-23 ) - * Demote coloc_dependent:0 ( Promoted -> Unpromoted fastvm-fedora39-22 ) - * Promote coloc_dependent:1 ( Unpromoted -> Promoted fastvm-fedora39-23 ) + * Move coloc_primary ( fastvm-fedora39-22 -> fastvm-fedora39-23 ) Executing Cluster Transition: * Resource action: coloc_primary stop on fastvm-fedora39-22 - * Resource action: coloc_dependent cancel=10000 on fastvm-fedora39-22 - * Resource action: coloc_dependent cancel=11000 on fastvm-fedora39-23 - * Pseudo action: coloc_dependent-clone_demote_0 * Resource action: coloc_primary start on fastvm-fedora39-23 - * Resource action: coloc_dependent demote on fastvm-fedora39-22 - * Pseudo action: coloc_dependent-clone_demoted_0 - * Pseudo action: coloc_dependent-clone_promote_0 * Resource action: coloc_primary monitor=10000 on fastvm-fedora39-23 - * Resource action: coloc_dependent monitor=11000 on fastvm-fedora39-22 - * Resource action: coloc_dependent promote on fastvm-fedora39-23 - * Pseudo action: coloc_dependent-clone_promoted_0 - * Resource action: coloc_dependent monitor=10000 on fastvm-fedora39-23 Revised Cluster Status: * Node List: @@ -35,5 +23,5 @@ Revised Cluster Status: * Full List of Resources: * coloc_primary (ocf:pacemaker:Dummy): Started fastvm-fedora39-23 * Clone Set: coloc_dependent-clone [coloc_dependent] (promotable): - * Promoted: [ fastvm-fedora39-23 ] - * Unpromoted: [ fastvm-fedora39-22 ] + * Promoted: [ fastvm-fedora39-22 ] + * Unpromoted: [ fastvm-fedora39-23 ] From e74b85ab059ef47cba41801e8a07c9157802ca27 Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Mon, 13 May 2024 20:49:39 -0700 Subject: [PATCH 076/364] Doc: Pacemaker Explained: Render footnote correctly Signed-off-by: Reid Wahl --- doc/sphinx/Pacemaker_Explained/operations.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/sphinx/Pacemaker_Explained/operations.rst b/doc/sphinx/Pacemaker_Explained/operations.rst index c831f815c6a..a8df8f14d99 100644 --- a/doc/sphinx/Pacemaker_Explained/operations.rst +++ b/doc/sphinx/Pacemaker_Explained/operations.rst @@ -659,6 +659,7 @@ path. Also, if a migratable resource depends on a non-migratable resource, and both need to be moved, the migratable resource will be restarted. + .. rubric:: Footnotes .. [#] Currently, anyway. Automatic monitoring operations may be added in a future From f0d10093fd76f7c4e105200124eaae6ca86a2f0a Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 6 Aug 2024 09:41:44 -0500 Subject: [PATCH 077/364] Refactor: libcrmcommon: mark configuration message handlers as printf-like ... so pcmk__config_warn() and pcmk__config_err() format errors are detected at compile time --- include/crm/common/logging_internal.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/crm/common/logging_internal.h b/include/crm/common/logging_internal.h index 3bfd5047147..53e5848a209 100644 --- a/include/crm/common/logging_internal.h +++ b/include/crm/common/logging_internal.h @@ -77,8 +77,10 @@ enum pcmk__warnings { } \ } while (0) -typedef void (*pcmk__config_error_func) (void *ctx, const char *msg, ...); -typedef void (*pcmk__config_warning_func) (void *ctx, const char *msg, ...); +typedef void (*pcmk__config_error_func) (void *ctx, const char *msg, ...) + G_GNUC_PRINTF(2, 3); +typedef void (*pcmk__config_warning_func) (void *ctx, const char *msg, ...) + G_GNUC_PRINTF(2, 3); extern pcmk__config_error_func pcmk__config_error_handler; extern pcmk__config_warning_func pcmk__config_warning_handler; From b9c4207a441694412fa50512c6f155f67273a494 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 6 Aug 2024 09:45:29 -0500 Subject: [PATCH 078/364] Log: scheduler: correct format arguments --- lib/common/rules.c | 4 ++-- lib/pacemaker/pcmk_sched_colocation.c | 2 +- lib/pacemaker/pcmk_sched_tickets.c | 2 +- lib/pacemaker/pcmk_sched_utilization.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/common/rules.c b/lib/common/rules.c index 32af83510d6..c32df1f2778 100644 --- a/lib/common/rules.c +++ b/lib/common/rules.c @@ -588,7 +588,7 @@ pcmk__evaluate_date_expression(const xmlNode *date_expression, */ pcmk__config_warn("Treating " PCMK_XE_DATE_EXPRESSION " %s as not passing because '%s' is not a valid " - PCMK_XE_OPERATION, op); + PCMK_XE_OPERATION, id, op); } crm_trace(PCMK_XE_DATE_EXPRESSION " %s (%s): %s (%d)", @@ -1150,7 +1150,7 @@ pcmk__evaluate_attr_expression(const xmlNode *expression, */ pcmk__config_warn("Non-empty node attribute values will be treated as " "equal for " PCMK_XE_EXPRESSION " %s because '%s' " - "is not a valid type", id, type); + "is not a valid type", id, type_s); } rc = evaluate_attr_comparison(actual, reference, type, comparison); diff --git a/lib/pacemaker/pcmk_sched_colocation.c b/lib/pacemaker/pcmk_sched_colocation.c index 00155b7c4e5..43edebc03cc 100644 --- a/lib/pacemaker/pcmk_sched_colocation.c +++ b/lib/pacemaker/pcmk_sched_colocation.c @@ -800,7 +800,7 @@ unpack_simple_colocation(xmlNode *xml_obj, const char *id, if (primary == NULL) { pcmk__config_warn("Ignoring constraint '%s' because resource '%s' " "does not have an instance '%s'", - "'%s'", id, primary_id, primary_instance); + id, primary_id, primary_instance); return; } } diff --git a/lib/pacemaker/pcmk_sched_tickets.c b/lib/pacemaker/pcmk_sched_tickets.c index a22ed4595ab..ca476003f93 100644 --- a/lib/pacemaker/pcmk_sched_tickets.c +++ b/lib/pacemaker/pcmk_sched_tickets.c @@ -343,7 +343,7 @@ unpack_simple_rsc_ticket(xmlNode *xml_obj, pcmk_scheduler_t *scheduler) if (rsc == NULL) { pcmk__config_warn("Ignoring constraint '%s' because resource '%s' " "does not have an instance '%s'", - "'%s'", id, rsc_id, instance); + id, rsc_id, instance); return; } } diff --git a/lib/pacemaker/pcmk_sched_utilization.c b/lib/pacemaker/pcmk_sched_utilization.c index 05e3cf6bae0..6c7a30fb904 100644 --- a/lib/pacemaker/pcmk_sched_utilization.c +++ b/lib/pacemaker/pcmk_sched_utilization.c @@ -32,7 +32,7 @@ utilization_value(const char *s) if ((s != NULL) && (pcmk__scan_min_int(s, &value, INT_MIN) == EINVAL)) { pcmk__config_warn("Using 0 for utilization instead of " - "invalid value '%s'", value); + "invalid value '%s'", s); value = 0; } return value; From 840b1052406b474fb4ac6fe3b592c673597b7a06 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Wed, 7 Aug 2024 17:26:14 -0500 Subject: [PATCH 079/364] Doc: libcrmcommon: remove stray declaration ... so the one marked "deprecated" in util_compat.h is used --- include/crm/common/util.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/crm/common/util.h b/include/crm/common/util.h index 2ae3f8e595a..9247a573881 100644 --- a/include/crm/common/util.h +++ b/include/crm/common/util.h @@ -51,8 +51,6 @@ int crm_str_to_boolean(const char *s, int *ret); // NOTE: sbd (as of at least 1.5.2) uses this long long crm_get_msec(const char *input); -char * crm_strip_trailing_newline(char *str); - // NOTE: sbd (as of at least 1.5.2) uses this char *crm_strdup_printf(char const *format, ...) G_GNUC_PRINTF(1, 2); From 9a15fed0f0285fd8cc6379c53b4b0f1654725ce8 Mon Sep 17 00:00:00 2001 From: Grace Chin Date: Wed, 31 Jul 2024 11:02:51 -0400 Subject: [PATCH 080/364] Add a public wrapper for pcmk__update_configured_schema --- daemons/execd/cts-exec-helper.c | 2 +- daemons/schedulerd/schedulerd_messages.c | 2 +- include/crm/common/schemas.h | 3 ++- include/crm/common/schemas_internal.h | 2 ++ include/pacemaker.h | 1 + lib/common/schemas.c | 10 ++++++++-- lib/pacemaker/pcmk_simulate.c | 2 +- lib/pacemaker/pcmk_status.c | 2 +- lib/pacemaker/pcmk_verify.c | 2 +- tools/crm_resource_runtime.c | 2 +- tools/crm_simulate.c | 2 +- tools/crm_ticket.c | 2 +- 12 files changed, 21 insertions(+), 11 deletions(-) diff --git a/daemons/execd/cts-exec-helper.c b/daemons/execd/cts-exec-helper.c index b8f4407e51c..b0ac0bc5509 100644 --- a/daemons/execd/cts-exec-helper.c +++ b/daemons/execd/cts-exec-helper.c @@ -461,7 +461,7 @@ generate_params(void) if (rc != pcmk_rc_ok) { return rc; } - rc = pcmk_update_configured_schema(&cib_xml_copy, false); + rc = pcmk__update_configured_schema(&cib_xml_copy, false); if (rc != pcmk_rc_ok) { return rc; } diff --git a/daemons/schedulerd/schedulerd_messages.c b/daemons/schedulerd/schedulerd_messages.c index 5dcec392be8..ac666d0a0c9 100644 --- a/daemons/schedulerd/schedulerd_messages.c +++ b/daemons/schedulerd/schedulerd_messages.c @@ -81,7 +81,7 @@ handle_pecalc_request(pcmk__request_t *request) digest = calculate_xml_versioned_digest(xml_data, FALSE, FALSE, CRM_FEATURE_SET); converted = pcmk__xml_copy(NULL, xml_data); - if (pcmk_update_configured_schema(&converted, true) != pcmk_rc_ok) { + if (pcmk__update_configured_schema(&converted, true) != pcmk_rc_ok) { scheduler->graph = pcmk__xe_create(NULL, PCMK__XE_TRANSITION_GRAPH); crm_xml_add_int(scheduler->graph, "transition_id", 0); crm_xml_add_int(scheduler->graph, PCMK_OPT_CLUSTER_DELAY, 0); diff --git a/include/crm/common/schemas.h b/include/crm/common/schemas.h index 81fdc1933a1..338311ba75b 100644 --- a/include/crm/common/schemas.h +++ b/include/crm/common/schemas.h @@ -23,7 +23,8 @@ extern "C" { * \ingroup core */ -int pcmk_update_configured_schema(xmlNode **xml, bool to_logs); +int +pcmk_update_configured_schema(xmlNode **xml); #ifdef __cplusplus } diff --git a/include/crm/common/schemas_internal.h b/include/crm/common/schemas_internal.h index 0104016897c..0264cda0ce4 100644 --- a/include/crm/common/schemas_internal.h +++ b/include/crm/common/schemas_internal.h @@ -34,4 +34,6 @@ int pcmk__update_schema(xmlNode **xml, const char *max_schema_name, bool transform, bool to_logs); void pcmk__warn_if_schema_deprecated(const char *schema); +int pcmk__update_configured_schema(xmlNode **xml, bool to_logs); + #endif // PCMK__SCHEMAS_INTERNAL__H diff --git a/include/pacemaker.h b/include/pacemaker.h index 75d1b1f9615..b061691b6b4 100644 --- a/include/pacemaker.h +++ b/include/pacemaker.h @@ -705,6 +705,7 @@ int pcmk_fence_unregister_level(stonith_t *st, const char *target, int pcmk_fence_validate(xmlNodePtr *xml, stonith_t *st, const char *agent, const char *id, const stonith_key_value_t *params, unsigned int timeout); + #endif #ifdef __cplusplus diff --git a/lib/common/schemas.c b/lib/common/schemas.c index 16f2ccbee24..d931c7498ec 100644 --- a/lib/common/schemas.c +++ b/lib/common/schemas.c @@ -1238,6 +1238,12 @@ pcmk__update_schema(xmlNode **xml, const char *max_schema_name, bool transform, return rc; } +int +pcmk_update_configured_schema(xmlNode **xml) +{ + return pcmk__update_configured_schema(xml, true); +} + /*! * \brief Update XML from its configured schema to the latest major series * @@ -1248,7 +1254,7 @@ pcmk__update_schema(xmlNode **xml, const char *max_schema_name, bool transform, * \return Standard Pacemaker return code */ int -pcmk_update_configured_schema(xmlNode **xml, bool to_logs) +pcmk__update_configured_schema(xmlNode **xml, bool to_logs) { int rc = pcmk_rc_ok; char *original_schema_name = NULL; @@ -1722,7 +1728,7 @@ validate_xml_verbose(const xmlNode *xml_blob) gboolean cli_config_update(xmlNode **xml, int *best_version, gboolean to_logs) { - int rc = pcmk_update_configured_schema(xml, to_logs); + int rc = pcmk__update_configured_schema(xml, to_logs); if (best_version != NULL) { const char *name = crm_element_value(*xml, PCMK_XA_VALIDATE_WITH); diff --git a/lib/pacemaker/pcmk_simulate.c b/lib/pacemaker/pcmk_simulate.c index 4146f2d097f..5646b2b9064 100644 --- a/lib/pacemaker/pcmk_simulate.c +++ b/lib/pacemaker/pcmk_simulate.c @@ -345,7 +345,7 @@ profile_file(const char *xml_file, long long repeat, pcmk__xe_create(cib_object, PCMK_XE_STATUS); } - if (pcmk_update_configured_schema(&cib_object, false) != pcmk_rc_ok) { + if (pcmk__update_configured_schema(&cib_object, false) != pcmk_rc_ok) { free_xml(cib_object); return; } diff --git a/lib/pacemaker/pcmk_status.c b/lib/pacemaker/pcmk_status.c index d12c2bb5788..f707e71d52c 100644 --- a/lib/pacemaker/pcmk_status.c +++ b/lib/pacemaker/pcmk_status.c @@ -86,7 +86,7 @@ pcmk__output_cluster_status(pcmk__output_t *out, stonith_t *stonith, cib_t *cib, int rc = pcmk_rc_ok; - rc = pcmk_update_configured_schema(&cib_copy, false); + rc = pcmk__update_configured_schema(&cib_copy, false); if (rc != pcmk_rc_ok) { cib__clean_up_connection(&cib); free_xml(cib_copy); diff --git a/lib/pacemaker/pcmk_verify.c b/lib/pacemaker/pcmk_verify.c index 76350c82dd0..ea7b3824b80 100644 --- a/lib/pacemaker/pcmk_verify.c +++ b/lib/pacemaker/pcmk_verify.c @@ -74,7 +74,7 @@ pcmk__verify(pcmk_scheduler_t *scheduler, pcmk__output_t *out, goto verify_done; } - rc = pcmk_update_configured_schema(cib_object, false); + rc = pcmk__update_configured_schema(cib_object, false); if (rc != pcmk_rc_ok) { crm_config_error = TRUE; out->err(out, "The cluster will NOT be able to use this configuration.\n" diff --git a/tools/crm_resource_runtime.c b/tools/crm_resource_runtime.c index 5b4fd2b3abd..746bf726d80 100644 --- a/tools/crm_resource_runtime.c +++ b/tools/crm_resource_runtime.c @@ -1297,7 +1297,7 @@ static void display_list(pcmk__output_t *out, GList *items, const char *tag) int update_scheduler_input(pcmk_scheduler_t *scheduler, xmlNode **xml) { - int rc = pcmk_update_configured_schema(xml, false); + int rc = pcmk__update_configured_schema(xml, false); if (rc == pcmk_rc_ok) { scheduler->input = *xml; diff --git a/tools/crm_simulate.c b/tools/crm_simulate.c index bfa4176451f..0b97fb99d44 100644 --- a/tools/crm_simulate.c +++ b/tools/crm_simulate.c @@ -376,7 +376,7 @@ setup_input(pcmk__output_t *out, const char *input, const char *output, pcmk__xe_create(cib_object, PCMK_XE_STATUS); } - rc = pcmk_update_configured_schema(&cib_object, false); + rc = pcmk__update_configured_schema(&cib_object, false); if (rc != pcmk_rc_ok) { free_xml(cib_object); return rc; diff --git a/tools/crm_ticket.c b/tools/crm_ticket.c index bd2bbcf167b..04c0491ad3d 100644 --- a/tools/crm_ticket.c +++ b/tools/crm_ticket.c @@ -430,7 +430,7 @@ main(int argc, char **argv) } } - rc = pcmk_update_configured_schema(&cib_xml_copy, false); + rc = pcmk__update_configured_schema(&cib_xml_copy, false); if (rc != pcmk_rc_ok) { exit_code = pcmk_rc2exitc(rc); g_set_error(&error, PCMK__EXITC_ERROR, exit_code, From 3980678f0372f2c7c294c01f61d63f0b2cafaad1 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Thu, 8 Aug 2024 09:20:34 -0500 Subject: [PATCH 081/364] Doc: ChangeLog: update for 2.1.8 release --- ChangeLog | 74 +++++++++++++++++-------------------------------------- 1 file changed, 23 insertions(+), 51 deletions(-) diff --git a/ChangeLog b/ChangeLog index 22c7e078f4f..4a4d44cf38c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,54 +1,9 @@ -* Tue Jul 16 2024 Ken Gaillot Pacemaker-2.1.8-rc4 -- 6 commits with 21 files changed, 126 insertions(+), 38 deletions(-) - -- Features added since Pacemaker-2.1.8-rc3 - + tools: crm_verify now reports invalid fence topology levels - -- Fixes since Pacemaker-2.1.8-rc3 - + tools: crm_node -i must initialize nodeid before passing pointer - (regression introduced in 2.1.7) - + tools: cibadmin, crm_attribute, crm_node, crm_resource, crm_shadow, and - crm_ticket now retry CIB connections after transient failures - -* Tue Jul 02 2024 Ken Gaillot Pacemaker-2.1.8-rc3 -- 16 commits with 11 files changed, 157 insertions(+), 57 deletions(-) - -- Features added since Pacemaker-2.1.8-rc2 - + sysconfig: deprecate PCMK_dh_min_bits environment variable - -- Fixes since Pacemaker-2.1.8-rc2 - + libcrmcluster: use local hostname for node name if not configured in - Corosync (regression introduced in 2.1.8-rc1) - + tools: crm_verify distinguishes configuration warnings and errors - (regression introduced in 2.1.7) - + tools: avoid double-free XML in crm_verify after schema update - (regression introduced in 2.1.8-rc1) - + libcrmcommon: avoid potential buffer overflows when formatting date/times - + scheduler: consider group's location constraints when a member is an - explicit dependent in a colocation constraint - -* Tue Jun 11 2024 Ken Gaillot Pacemaker-2.1.8-rc2 -- 38 commits with 23 files changed, 600 insertions(+), 283 deletions(-) - -- Features added since Pacemaker-2.1.8-rc1 - + libcrmcommon: support PCMK_panic_action="off" or "sync-off" - -- Fixes since Pacemaker-2.1.8-rc1 - + libcrmcommon: avoid possible buffer overflows when parsing date/times - + libpacemaker: correctly retrieve any existing fail-count for increment - (regression introduced in 2.1.8-rc1) - + libstonithd: avoid double free when invalid replies are received - + libstonithd: avoid use-after-free when retrieving metadata of Linux-HA fence agents - (regression introduced in 2.1.8-rc1) - + libstonithd: free escaped metadata descriptions with g_free() - (regression introduced in 2.1.8-rc1) - + tools: restore whitespace to attrd_updater query output - (regression introduced in 2.1.8-rc1) - -* Wed May 15 2024 Ken Gaillot Pacemaker-2.1.8-rc1 -- 2480 commits with 507 files changed, 45891 insertions(+), 22991 deletions(-) +* Thu Aug 08 2024 Ken Gaillot Pacemaker-2.1.8 +- 2559 commits with 511 files changed, 46898 insertions(+), 23417 deletions(-) - Features added since Pacemaker-2.1.7 + + local options: support PCMK_panic_action="off" or "sync-off" + + local options: deprecate PCMK_dh_min_bits environment variable + CIB: deprecate omitting validate-with from the CIB or setting it to "none" or an unknown schema + CIB: deprecate "default" and "#default" as explicit meta-attribute values @@ -64,22 +19,29 @@ option (instead, use crm_attribute --list-options mentioned below) + pacemaker-remoted: newer schema files are now downloaded from the cluster, allowing more command-line tools to work when the Pacemaker Remote node - has an older Pacemaker version + has an older Pacemaker version than the cluster + agents: deprecate the ocf:pacemaker:o2cb resource agent + + tools: deprecate --text-fancy command-line option in all tools + tools: crm_attribute --list-options lists all possible cluster options + tools: crm_resource --list-options lists all possible primitive meta-attributes or special fence device parameters + + tools: crm_verify now reports invalid fence topology levels + tools: new --score option for cibadmin --modify and crm_attribute --update enables expansion of "++" and "+=" in attribute values without a warning (using such expansions without --score is now deprecated) + tools: crm_ticket supports standard --output-as/--output-to arguments - + tools: deprecate --text-fancy standard command-line option - Fixes since Pacemaker-2.1.7 + tools: restore the (deprecated) ability to automatically correct malformed XML passed via standard input (regression introduced in 2.1.7) + + tools: crm_verify distinguishes configuration warnings and errors + (regression introduced in 2.1.7) + + tools: crm_node -i must initialize nodeid before passing pointer + (regression introduced in 2.1.7) + CIB manager: avoid memory leak from asynchronous client requests (regression introduced in 2.1.7) + + scheduler: don't apply colocations twice for promotion priority + (regression introduced in 2.1.7) + CIB: restore the (deprecated) ability to use validate-with="pacemaker-next" (regression introduced in 2.1.6) + controller: avoid zombie children when asynchronous actions exit while a @@ -87,6 +49,8 @@ (regression introduced in 2.1.5) + libcrmcommon: avoid file descriptor leak in asynchronous IPC clients (regression introduced in 2.1.3) + + scheduler: avoid crash when logging an invalid utilization attribute value + (regression introduced in 2.1.3) + tools: crm_mon no longer crashes on some platforms when the fencer connection is lost (regression introduced in 2.1.0) + attribute manager: write Pacemaker Remote node attributes even if node is @@ -100,14 +64,22 @@ seconds + fencer: avoid unnecessary timeouts when the watchdog timeout is greater than a query timeout, per-device fencing timeout, or stonith-timeout + + libcrmcommon: avoid possible buffer overflows when parsing and formatting + date/times + libcrmcommon: don't assume next schema will validate when not transforming + libcrmcommon: when displaying XML, don't show "" for empty attribute values, and properly escape special characters + + libstonithd: avoid double free when invalid replies are received + scheduler: if the user specifies a timeout of 0, use the default 20s as documented + + scheduler: consider group's location constraints when a member is an + explicit dependent in a colocation constraint + + scheduler: sort promotable cloned group instances properly for promotion + agents: ocf:pacemaker:SysInfo respects attrd_updater dampening + agents: ocf:pacemaker:HealthSMART properly handles SMART data missing temperature + + tools: cibadmin, crm_attribute, crm_node, crm_resource, crm_shadow, and + crm_ticket now retry CIB connections after transient failures + tools: cibadmin --replace now leaves "++" and "+=" unexpanded in XML attribute values rather than wrongly treat them as 0 + tools: cibsecret avoids possible truncation issue in process listing From 74041dd735a8620890861132cdc33bc9921a4e73 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 30 Jul 2024 11:56:15 -0500 Subject: [PATCH 082/364] Low: controller,libpacemaker: transition graph IDs should be positive Previously, -1 was used to indicate an empty graph (an allocated graph object not parsed from XML), and 0 was the first actual graph ID. However that led to awkward log messages referring to "Transition -1" and "Transition 0". Now, use 0 to indicate an empty graph, and 1 as the first actual ID. This still leaves "Transition 0" for empty graphs (such as aborting a transition before any transition has happened), but that can be addressed separately. --- daemons/controld/controld_callbacks.c | 2 +- lib/pacemaker/pcmk_graph_consumer.c | 6 +----- lib/pacemaker/pcmk_graph_producer.c | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/daemons/controld/controld_callbacks.c b/daemons/controld/controld_callbacks.c index 16e64242f7e..5140b59a533 100644 --- a/daemons/controld/controld_callbacks.c +++ b/daemons/controld/controld_callbacks.c @@ -310,7 +310,7 @@ peer_update_callback(enum crm_status_type type, crm_node_t * node, const void *d } else if (appeared == FALSE) { if ((controld_globals.transition_graph == NULL) - || (controld_globals.transition_graph->id == -1)) { + || (controld_globals.transition_graph->id <= 0)) { crm_info("Stonith/shutdown of node %s is unknown to the " "current DC", node->uname); } else { diff --git a/lib/pacemaker/pcmk_graph_consumer.c b/lib/pacemaker/pcmk_graph_consumer.c index 6f1943a41b5..e1449bac334 100644 --- a/lib/pacemaker/pcmk_graph_consumer.c +++ b/lib/pacemaker/pcmk_graph_consumer.c @@ -754,10 +754,6 @@ pcmk__unpack_graph(const xmlNode *xml_graph, const char *reference) return NULL; } - new_graph->id = -1; - new_graph->abort_priority = 0; - new_graph->network_delay = 0; - new_graph->stonith_timeout = 0; new_graph->completion_action = pcmk__graph_done; // Parse top-level attributes from PCMK__XE_TRANSITION_GRAPH @@ -766,7 +762,7 @@ pcmk__unpack_graph(const xmlNode *xml_graph, const char *reference) CRM_CHECK(buf != NULL, pcmk__free_graph(new_graph); return NULL); - pcmk__scan_min_int(buf, &(new_graph->id), -1); + pcmk__scan_min_int(buf, &(new_graph->id), 1); buf = crm_element_value(xml_graph, PCMK_OPT_CLUSTER_DELAY); CRM_CHECK(buf != NULL, diff --git a/lib/pacemaker/pcmk_graph_producer.c b/lib/pacemaker/pcmk_graph_producer.c index 286a518566b..f3fbd666d02 100644 --- a/lib/pacemaker/pcmk_graph_producer.c +++ b/lib/pacemaker/pcmk_graph_producer.c @@ -932,7 +932,7 @@ add_action_to_graph(gpointer data, gpointer user_data) } } -static int transition_id = -1; +static int transition_id = 0; /*! * \internal From 5dfcd9ebe476a4813dbcbf1339a2125b79afd034 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Thu, 1 Aug 2024 11:37:38 -0500 Subject: [PATCH 083/364] Test: cts-scheduler: update expected graph outputs for transition number change Every test changes transition_id from 0 to 1 --- cts/scheduler/exp/1-a-then-bm-move-b.exp | 2 +- cts/scheduler/exp/10-a-then-bm-b-move-a-clone.exp | 2 +- cts/scheduler/exp/11-a-then-bm-b-move-a-clone-starting.exp | 2 +- cts/scheduler/exp/1360.exp | 2 +- cts/scheduler/exp/1484.exp | 2 +- cts/scheduler/exp/1494.exp | 2 +- cts/scheduler/exp/2-am-then-b-move-a.exp | 2 +- cts/scheduler/exp/3-am-then-bm-both-migrate.exp | 2 +- cts/scheduler/exp/4-am-then-bm-b-not-migratable.exp | 2 +- cts/scheduler/exp/5-am-then-bm-a-not-migratable.exp | 2 +- cts/scheduler/exp/594.exp | 2 +- cts/scheduler/exp/6-migrate-group.exp | 2 +- cts/scheduler/exp/662.exp | 2 +- cts/scheduler/exp/696.exp | 2 +- cts/scheduler/exp/7-migrate-group-one-unmigratable.exp | 2 +- cts/scheduler/exp/726.exp | 2 +- cts/scheduler/exp/735.exp | 2 +- cts/scheduler/exp/764.exp | 2 +- cts/scheduler/exp/797.exp | 2 +- cts/scheduler/exp/8-am-then-bm-a-migrating-b-stopping.exp | 2 +- cts/scheduler/exp/829.exp | 2 +- cts/scheduler/exp/9-am-then-bm-b-migrating-a-stopping.exp | 2 +- cts/scheduler/exp/994-2.exp | 2 +- cts/scheduler/exp/994.exp | 2 +- cts/scheduler/exp/a-demote-then-b-migrate.exp | 2 +- cts/scheduler/exp/a-promote-then-b-migrate.exp | 2 +- cts/scheduler/exp/allow-unhealthy-nodes.exp | 2 +- cts/scheduler/exp/anon-instance-pending.exp | 2 +- cts/scheduler/exp/anti-colocation-order.exp | 2 +- cts/scheduler/exp/anti-colocation-promoted.exp | 2 +- cts/scheduler/exp/anti-colocation-unpromoted.exp | 2 +- cts/scheduler/exp/asymmetric.exp | 2 +- cts/scheduler/exp/asymmetrical-order-move.exp | 2 +- cts/scheduler/exp/asymmetrical-order-restart.exp | 2 +- cts/scheduler/exp/attrs1.exp | 2 +- cts/scheduler/exp/attrs2.exp | 2 +- cts/scheduler/exp/attrs3.exp | 2 +- cts/scheduler/exp/attrs4.exp | 2 +- cts/scheduler/exp/attrs5.exp | 2 +- cts/scheduler/exp/attrs6.exp | 2 +- cts/scheduler/exp/attrs7.exp | 2 +- cts/scheduler/exp/attrs8.exp | 2 +- cts/scheduler/exp/balanced.exp | 2 +- cts/scheduler/exp/banned-group-inner-constraints.exp | 2 +- cts/scheduler/exp/base-score.exp | 2 +- cts/scheduler/exp/bnc-515172.exp | 2 +- cts/scheduler/exp/bug-1572-1.exp | 2 +- cts/scheduler/exp/bug-1572-2.exp | 2 +- cts/scheduler/exp/bug-1573.exp | 2 +- cts/scheduler/exp/bug-1685.exp | 2 +- cts/scheduler/exp/bug-1718.exp | 2 +- cts/scheduler/exp/bug-1765.exp | 2 +- cts/scheduler/exp/bug-1820-1.exp | 2 +- cts/scheduler/exp/bug-1820.exp | 2 +- cts/scheduler/exp/bug-1822.exp | 2 +- cts/scheduler/exp/bug-5014-A-start-B-start.exp | 2 +- cts/scheduler/exp/bug-5014-A-stop-B-started.exp | 2 +- cts/scheduler/exp/bug-5014-A-stopped-B-stopped.exp | 2 +- cts/scheduler/exp/bug-5014-CLONE-A-start-B-start.exp | 2 +- cts/scheduler/exp/bug-5014-CLONE-A-stop-B-started.exp | 2 +- cts/scheduler/exp/bug-5014-CthenAthenB-C-stopped.exp | 2 +- cts/scheduler/exp/bug-5014-GROUP-A-start-B-start.exp | 2 +- cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-started.exp | 2 +- cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-stopped.exp | 2 +- cts/scheduler/exp/bug-5014-ordered-set-symmetrical-false.exp | 2 +- cts/scheduler/exp/bug-5014-ordered-set-symmetrical-true.exp | 2 +- cts/scheduler/exp/bug-5025-1.exp | 2 +- cts/scheduler/exp/bug-5025-2.exp | 2 +- cts/scheduler/exp/bug-5025-3.exp | 2 +- cts/scheduler/exp/bug-5025-4.exp | 2 +- cts/scheduler/exp/bug-5028-bottom.exp | 2 +- cts/scheduler/exp/bug-5028-detach.exp | 2 +- cts/scheduler/exp/bug-5028.exp | 2 +- cts/scheduler/exp/bug-5038.exp | 2 +- cts/scheduler/exp/bug-5059.exp | 2 +- cts/scheduler/exp/bug-5069-op-disabled.exp | 2 +- cts/scheduler/exp/bug-5069-op-enabled.exp | 2 +- cts/scheduler/exp/bug-5140-require-all-false.exp | 2 +- cts/scheduler/exp/bug-5143-ms-shuffle.exp | 2 +- cts/scheduler/exp/bug-5186-partial-migrate.exp | 2 +- cts/scheduler/exp/bug-cl-5168.exp | 2 +- cts/scheduler/exp/bug-cl-5170.exp | 2 +- cts/scheduler/exp/bug-cl-5212.exp | 2 +- cts/scheduler/exp/bug-cl-5213.exp | 2 +- cts/scheduler/exp/bug-cl-5219.exp | 2 +- cts/scheduler/exp/bug-cl-5247.exp | 2 +- cts/scheduler/exp/bug-lf-1852.exp | 2 +- cts/scheduler/exp/bug-lf-1920.exp | 2 +- cts/scheduler/exp/bug-lf-2106.exp | 2 +- cts/scheduler/exp/bug-lf-2153.exp | 2 +- cts/scheduler/exp/bug-lf-2160.exp | 2 +- cts/scheduler/exp/bug-lf-2171.exp | 2 +- cts/scheduler/exp/bug-lf-2213.exp | 2 +- cts/scheduler/exp/bug-lf-2317.exp | 2 +- cts/scheduler/exp/bug-lf-2358.exp | 2 +- cts/scheduler/exp/bug-lf-2361.exp | 2 +- cts/scheduler/exp/bug-lf-2422.exp | 2 +- cts/scheduler/exp/bug-lf-2435.exp | 2 +- cts/scheduler/exp/bug-lf-2445.exp | 2 +- cts/scheduler/exp/bug-lf-2453.exp | 2 +- cts/scheduler/exp/bug-lf-2474.exp | 2 +- cts/scheduler/exp/bug-lf-2493.exp | 2 +- cts/scheduler/exp/bug-lf-2508.exp | 2 +- cts/scheduler/exp/bug-lf-2544.exp | 2 +- cts/scheduler/exp/bug-lf-2551.exp | 2 +- cts/scheduler/exp/bug-lf-2574.exp | 2 +- cts/scheduler/exp/bug-lf-2581.exp | 2 +- cts/scheduler/exp/bug-lf-2606.exp | 2 +- cts/scheduler/exp/bug-lf-2619.exp | 2 +- cts/scheduler/exp/bug-n-385265-2.exp | 2 +- cts/scheduler/exp/bug-n-385265.exp | 2 +- cts/scheduler/exp/bug-n-387749.exp | 2 +- cts/scheduler/exp/bug-pm-11.exp | 2 +- cts/scheduler/exp/bug-pm-12.exp | 2 +- cts/scheduler/exp/bug-rh-1097457.exp | 2 +- cts/scheduler/exp/bug-rh-880249.exp | 2 +- cts/scheduler/exp/bug-suse-707150.exp | 2 +- cts/scheduler/exp/bundle-connection-with-container.exp | 2 +- cts/scheduler/exp/bundle-interleave-promote.exp | 2 +- cts/scheduler/exp/bundle-interleave-start.exp | 2 +- cts/scheduler/exp/bundle-nested-colocation.exp | 2 +- cts/scheduler/exp/bundle-order-fencing.exp | 2 +- cts/scheduler/exp/bundle-order-partial-start-2.exp | 2 +- cts/scheduler/exp/bundle-order-partial-start.exp | 2 +- cts/scheduler/exp/bundle-order-partial-stop.exp | 2 +- cts/scheduler/exp/bundle-order-startup-clone-2.exp | 2 +- cts/scheduler/exp/bundle-order-startup-clone.exp | 2 +- cts/scheduler/exp/bundle-order-startup.exp | 2 +- cts/scheduler/exp/bundle-order-stop-clone.exp | 2 +- cts/scheduler/exp/bundle-order-stop-on-remote.exp | 2 +- cts/scheduler/exp/bundle-order-stop.exp | 2 +- cts/scheduler/exp/bundle-probe-order-1.exp | 2 +- cts/scheduler/exp/bundle-probe-order-2.exp | 2 +- cts/scheduler/exp/bundle-probe-order-3.exp | 2 +- cts/scheduler/exp/bundle-probe-remotes.exp | 2 +- cts/scheduler/exp/bundle-promoted-anticolocation-1.exp | 2 +- cts/scheduler/exp/bundle-promoted-anticolocation-2.exp | 2 +- cts/scheduler/exp/bundle-promoted-anticolocation-3.exp | 2 +- cts/scheduler/exp/bundle-promoted-anticolocation-4.exp | 2 +- cts/scheduler/exp/bundle-promoted-anticolocation-5.exp | 2 +- cts/scheduler/exp/bundle-promoted-anticolocation-6.exp | 2 +- cts/scheduler/exp/bundle-promoted-colocation-1.exp | 2 +- cts/scheduler/exp/bundle-promoted-colocation-2.exp | 2 +- cts/scheduler/exp/bundle-promoted-colocation-3.exp | 2 +- cts/scheduler/exp/bundle-promoted-colocation-4.exp | 2 +- cts/scheduler/exp/bundle-promoted-colocation-5.exp | 2 +- cts/scheduler/exp/bundle-promoted-colocation-6.exp | 2 +- cts/scheduler/exp/bundle-promoted-location-1.exp | 2 +- cts/scheduler/exp/bundle-promoted-location-2.exp | 2 +- cts/scheduler/exp/bundle-promoted-location-3.exp | 2 +- cts/scheduler/exp/bundle-promoted-location-4.exp | 2 +- cts/scheduler/exp/bundle-promoted-location-5.exp | 2 +- cts/scheduler/exp/bundle-promoted-location-6.exp | 2 +- cts/scheduler/exp/bundle-replicas-change.exp | 2 +- cts/scheduler/exp/cancel-behind-moving-remote.exp | 2 +- cts/scheduler/exp/clbz5007-promotable-colocation.exp | 2 +- cts/scheduler/exp/clone-anon-dup.exp | 2 +- cts/scheduler/exp/clone-anon-failcount.exp | 2 +- cts/scheduler/exp/clone-anon-probe-1.exp | 2 +- cts/scheduler/exp/clone-anon-probe-2.exp | 2 +- cts/scheduler/exp/clone-fail-block-colocation.exp | 2 +- cts/scheduler/exp/clone-interleave-1.exp | 2 +- cts/scheduler/exp/clone-interleave-2.exp | 2 +- cts/scheduler/exp/clone-interleave-3.exp | 2 +- cts/scheduler/exp/clone-max-zero.exp | 2 +- cts/scheduler/exp/clone-no-shuffle.exp | 2 +- cts/scheduler/exp/clone-order-16instances.exp | 2 +- cts/scheduler/exp/clone-order-primitive.exp | 2 +- cts/scheduler/exp/clone-recover-no-shuffle-1.exp | 2 +- cts/scheduler/exp/clone-recover-no-shuffle-10.exp | 2 +- cts/scheduler/exp/clone-recover-no-shuffle-11.exp | 2 +- cts/scheduler/exp/clone-recover-no-shuffle-12.exp | 2 +- cts/scheduler/exp/clone-recover-no-shuffle-2.exp | 2 +- cts/scheduler/exp/clone-recover-no-shuffle-3.exp | 2 +- cts/scheduler/exp/clone-recover-no-shuffle-4.exp | 2 +- cts/scheduler/exp/clone-recover-no-shuffle-5.exp | 2 +- cts/scheduler/exp/clone-recover-no-shuffle-6.exp | 2 +- cts/scheduler/exp/clone-recover-no-shuffle-7.exp | 2 +- cts/scheduler/exp/clone-recover-no-shuffle-8.exp | 2 +- cts/scheduler/exp/clone-recover-no-shuffle-9.exp | 2 +- cts/scheduler/exp/clone-require-all-1.exp | 2 +- cts/scheduler/exp/clone-require-all-2.exp | 2 +- cts/scheduler/exp/clone-require-all-3.exp | 2 +- cts/scheduler/exp/clone-require-all-4.exp | 2 +- cts/scheduler/exp/clone-require-all-5.exp | 2 +- cts/scheduler/exp/clone-require-all-6.exp | 2 +- cts/scheduler/exp/clone-require-all-7.exp | 2 +- cts/scheduler/exp/clone-require-all-no-interleave-1.exp | 2 +- cts/scheduler/exp/clone-require-all-no-interleave-2.exp | 2 +- cts/scheduler/exp/clone-require-all-no-interleave-3.exp | 2 +- cts/scheduler/exp/clone-requires-quorum-recovery.exp | 2 +- cts/scheduler/exp/clone-requires-quorum.exp | 2 +- cts/scheduler/exp/clone_min_interleave_start_one.exp | 2 +- cts/scheduler/exp/clone_min_interleave_start_two.exp | 2 +- cts/scheduler/exp/clone_min_interleave_stop_one.exp | 2 +- cts/scheduler/exp/clone_min_interleave_stop_two.exp | 2 +- cts/scheduler/exp/clone_min_start_one.exp | 2 +- cts/scheduler/exp/clone_min_start_two.exp | 2 +- cts/scheduler/exp/clone_min_stop_all.exp | 2 +- cts/scheduler/exp/clone_min_stop_one.exp | 2 +- cts/scheduler/exp/clone_min_stop_two.exp | 2 +- cts/scheduler/exp/cloned-group-stop.exp | 2 +- cts/scheduler/exp/cloned-group.exp | 2 +- cts/scheduler/exp/cloned_start_one.exp | 2 +- cts/scheduler/exp/cloned_start_two.exp | 2 +- cts/scheduler/exp/cloned_stop_one.exp | 2 +- cts/scheduler/exp/cloned_stop_two.exp | 2 +- cts/scheduler/exp/cluster-specific-params.exp | 2 +- cts/scheduler/exp/colo_promoted_w_native.exp | 2 +- cts/scheduler/exp/colo_unpromoted_w_native.exp | 2 +- cts/scheduler/exp/coloc-attr.exp | 2 +- cts/scheduler/exp/coloc-clone-stays-active.exp | 2 +- cts/scheduler/exp/coloc-cloned-group-promoted-dependent1.exp | 2 +- cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp | 2 +- cts/scheduler/exp/coloc-dependee-should-move.exp | 2 +- cts/scheduler/exp/coloc-dependee-should-stay.exp | 2 +- cts/scheduler/exp/coloc-group.exp | 2 +- cts/scheduler/exp/coloc-intra-set.exp | 2 +- cts/scheduler/exp/coloc-list.exp | 2 +- cts/scheduler/exp/coloc-loop.exp | 2 +- cts/scheduler/exp/coloc-many-one.exp | 2 +- cts/scheduler/exp/coloc-negative-group.exp | 2 +- cts/scheduler/exp/coloc-optional-promoted-dependent-moves-1.exp | 2 +- cts/scheduler/exp/coloc-optional-promoted-dependent-moves-2.exp | 2 +- cts/scheduler/exp/coloc-optional-promoted-dependent-stays-1.exp | 2 +- cts/scheduler/exp/coloc-optional-promoted-dependent-stays-2.exp | 2 +- cts/scheduler/exp/coloc-unpromoted-anti.exp | 2 +- cts/scheduler/exp/coloc-with-inner-group-member.exp | 2 +- cts/scheduler/exp/coloc_fp_logic.exp | 2 +- cts/scheduler/exp/colocate-primitive-with-clone.exp | 2 +- cts/scheduler/exp/colocate-unmanaged-group.exp | 2 +- cts/scheduler/exp/colocated-utilization-clone.exp | 2 +- cts/scheduler/exp/colocated-utilization-group.exp | 2 +- cts/scheduler/exp/colocated-utilization-primitive-1.exp | 2 +- cts/scheduler/exp/colocated-utilization-primitive-2.exp | 2 +- cts/scheduler/exp/colocation-influence.exp | 2 +- cts/scheduler/exp/colocation-priority-group.exp | 2 +- cts/scheduler/exp/colocation-vs-stickiness.exp | 2 +- cts/scheduler/exp/colocation_constraint_stops_promoted.exp | 2 +- cts/scheduler/exp/colocation_constraint_stops_unpromoted.exp | 2 +- cts/scheduler/exp/comments.exp | 2 +- cts/scheduler/exp/complex_enforce_colo.exp | 2 +- cts/scheduler/exp/concurrent-fencing.exp | 2 +- cts/scheduler/exp/container-1.exp | 2 +- cts/scheduler/exp/container-2.exp | 2 +- cts/scheduler/exp/container-3.exp | 2 +- cts/scheduler/exp/container-4.exp | 2 +- cts/scheduler/exp/container-group-1.exp | 2 +- cts/scheduler/exp/container-group-2.exp | 2 +- cts/scheduler/exp/container-group-3.exp | 2 +- cts/scheduler/exp/container-group-4.exp | 2 +- cts/scheduler/exp/container-is-remote-node.exp | 2 +- cts/scheduler/exp/date-1.exp | 2 +- cts/scheduler/exp/date-2.exp | 2 +- cts/scheduler/exp/date-3.exp | 2 +- cts/scheduler/exp/dc-fence-ordering.exp | 2 +- cts/scheduler/exp/enforce-colo1.exp | 2 +- cts/scheduler/exp/expire-non-blocked-failure.exp | 2 +- cts/scheduler/exp/expired-failed-probe-primitive.exp | 2 +- cts/scheduler/exp/expired-stop-1.exp | 2 +- cts/scheduler/exp/failcount-block.exp | 2 +- cts/scheduler/exp/failcount.exp | 2 +- cts/scheduler/exp/failed-demote-recovery-promoted.exp | 2 +- cts/scheduler/exp/failed-demote-recovery.exp | 2 +- cts/scheduler/exp/failed-probe-clone.exp | 2 +- cts/scheduler/exp/failed-probe-primitive.exp | 2 +- cts/scheduler/exp/failed-sticky-anticolocated-group.exp | 2 +- cts/scheduler/exp/failed-sticky-group.exp | 2 +- cts/scheduler/exp/force-anon-clone-max.exp | 2 +- cts/scheduler/exp/group-anticolocation-2.exp | 2 +- cts/scheduler/exp/group-anticolocation-3.exp | 2 +- cts/scheduler/exp/group-anticolocation-4.exp | 2 +- cts/scheduler/exp/group-anticolocation-5.exp | 2 +- cts/scheduler/exp/group-anticolocation.exp | 2 +- cts/scheduler/exp/group-colocation-failure.exp | 2 +- cts/scheduler/exp/group-dependents.exp | 2 +- cts/scheduler/exp/group-fail.exp | 2 +- cts/scheduler/exp/group-stop-ordering.exp | 2 +- cts/scheduler/exp/group-unmanaged-stopped.exp | 2 +- cts/scheduler/exp/group-unmanaged.exp | 2 +- cts/scheduler/exp/group1.exp | 2 +- cts/scheduler/exp/group10.exp | 2 +- cts/scheduler/exp/group11.exp | 2 +- cts/scheduler/exp/group13.exp | 2 +- cts/scheduler/exp/group14.exp | 2 +- cts/scheduler/exp/group15.exp | 2 +- cts/scheduler/exp/group2.exp | 2 +- cts/scheduler/exp/group3.exp | 2 +- cts/scheduler/exp/group4.exp | 2 +- cts/scheduler/exp/group5.exp | 2 +- cts/scheduler/exp/group6.exp | 2 +- cts/scheduler/exp/group7.exp | 2 +- cts/scheduler/exp/group8.exp | 2 +- cts/scheduler/exp/group9.exp | 2 +- cts/scheduler/exp/guest-host-not-fenceable.exp | 2 +- cts/scheduler/exp/guest-node-cleanup.exp | 2 +- cts/scheduler/exp/guest-node-host-dies.exp | 2 +- cts/scheduler/exp/history-1.exp | 2 +- cts/scheduler/exp/honor_stonith_rsc_order1.exp | 2 +- cts/scheduler/exp/honor_stonith_rsc_order2.exp | 2 +- cts/scheduler/exp/honor_stonith_rsc_order3.exp | 2 +- cts/scheduler/exp/honor_stonith_rsc_order4.exp | 2 +- cts/scheduler/exp/ignore_stonith_rsc_order1.exp | 2 +- cts/scheduler/exp/ignore_stonith_rsc_order2.exp | 2 +- cts/scheduler/exp/ignore_stonith_rsc_order3.exp | 2 +- cts/scheduler/exp/ignore_stonith_rsc_order4.exp | 2 +- cts/scheduler/exp/inc0.exp | 2 +- cts/scheduler/exp/inc1.exp | 2 +- cts/scheduler/exp/inc10.exp | 2 +- cts/scheduler/exp/inc11.exp | 2 +- cts/scheduler/exp/inc12.exp | 2 +- cts/scheduler/exp/inc2.exp | 2 +- cts/scheduler/exp/inc3.exp | 2 +- cts/scheduler/exp/inc4.exp | 2 +- cts/scheduler/exp/inc5.exp | 2 +- cts/scheduler/exp/inc6.exp | 2 +- cts/scheduler/exp/inc7.exp | 2 +- cts/scheduler/exp/inc8.exp | 2 +- cts/scheduler/exp/inc9.exp | 2 +- cts/scheduler/exp/interleave-0.exp | 2 +- cts/scheduler/exp/interleave-1.exp | 2 +- cts/scheduler/exp/interleave-2.exp | 2 +- cts/scheduler/exp/interleave-3.exp | 2 +- cts/scheduler/exp/interleave-pseudo-stop.exp | 2 +- cts/scheduler/exp/interleave-restart.exp | 2 +- cts/scheduler/exp/interleave-stop.exp | 2 +- cts/scheduler/exp/intervals.exp | 2 +- cts/scheduler/exp/leftover-pending-monitor.exp | 2 +- cts/scheduler/exp/load-stopped-loop-2.exp | 2 +- cts/scheduler/exp/load-stopped-loop.exp | 2 +- cts/scheduler/exp/location-date-rules-1.exp | 2 +- cts/scheduler/exp/location-date-rules-2.exp | 2 +- cts/scheduler/exp/location-sets-templates.exp | 2 +- cts/scheduler/exp/managed-0.exp | 2 +- cts/scheduler/exp/managed-1.exp | 2 +- cts/scheduler/exp/managed-2.exp | 2 +- cts/scheduler/exp/migrate-1.exp | 2 +- cts/scheduler/exp/migrate-2.exp | 2 +- cts/scheduler/exp/migrate-3.exp | 2 +- cts/scheduler/exp/migrate-4.exp | 2 +- cts/scheduler/exp/migrate-5.exp | 2 +- cts/scheduler/exp/migrate-begin.exp | 2 +- cts/scheduler/exp/migrate-both-vms.exp | 2 +- cts/scheduler/exp/migrate-fail-2.exp | 2 +- cts/scheduler/exp/migrate-fail-3.exp | 2 +- cts/scheduler/exp/migrate-fail-4.exp | 2 +- cts/scheduler/exp/migrate-fail-5.exp | 2 +- cts/scheduler/exp/migrate-fail-6.exp | 2 +- cts/scheduler/exp/migrate-fail-7.exp | 2 +- cts/scheduler/exp/migrate-fail-8.exp | 2 +- cts/scheduler/exp/migrate-fail-9.exp | 2 +- cts/scheduler/exp/migrate-fencing.exp | 2 +- cts/scheduler/exp/migrate-partial-1.exp | 2 +- cts/scheduler/exp/migrate-partial-2.exp | 2 +- cts/scheduler/exp/migrate-partial-3.exp | 2 +- cts/scheduler/exp/migrate-partial-4.exp | 2 +- cts/scheduler/exp/migrate-shutdown.exp | 2 +- cts/scheduler/exp/migrate-start-complex.exp | 2 +- cts/scheduler/exp/migrate-start.exp | 2 +- cts/scheduler/exp/migrate-stop-complex.exp | 2 +- cts/scheduler/exp/migrate-stop-start-complex.exp | 2 +- cts/scheduler/exp/migrate-stop.exp | 2 +- cts/scheduler/exp/migrate-stop_start.exp | 2 +- cts/scheduler/exp/migrate-success.exp | 2 +- cts/scheduler/exp/migration-behind-migrating-remote.exp | 2 +- cts/scheduler/exp/migration-intermediary-cleaned.exp | 2 +- cts/scheduler/exp/migration-ping-pong.exp | 2 +- cts/scheduler/exp/minimal.exp | 2 +- cts/scheduler/exp/mon-rsc-1.exp | 2 +- cts/scheduler/exp/mon-rsc-2.exp | 2 +- cts/scheduler/exp/mon-rsc-3.exp | 2 +- cts/scheduler/exp/mon-rsc-4.exp | 2 +- cts/scheduler/exp/monitor-onfail-restart.exp | 2 +- cts/scheduler/exp/monitor-onfail-stop.exp | 2 +- cts/scheduler/exp/monitor-recovery.exp | 2 +- cts/scheduler/exp/multi1.exp | 2 +- cts/scheduler/exp/multiple-active-block-group.exp | 2 +- cts/scheduler/exp/multiple-monitor-one-failed.exp | 2 +- cts/scheduler/exp/multiply-active-stonith.exp | 2 +- cts/scheduler/exp/nested-remote-recovery.exp | 2 +- cts/scheduler/exp/no-promote-on-unrunnable-guest.exp | 2 +- cts/scheduler/exp/no_quorum_demote.exp | 2 +- cts/scheduler/exp/node-maintenance-1.exp | 2 +- cts/scheduler/exp/node-maintenance-2.exp | 2 +- cts/scheduler/exp/node-pending-timeout.exp | 2 +- cts/scheduler/exp/not-installed-agent.exp | 2 +- cts/scheduler/exp/not-installed-tools.exp | 2 +- cts/scheduler/exp/not-reschedule-unneeded-monitor.exp | 2 +- cts/scheduler/exp/notifs-for-unrunnable.exp | 2 +- cts/scheduler/exp/notify-0.exp | 2 +- cts/scheduler/exp/notify-1.exp | 2 +- cts/scheduler/exp/notify-2.exp | 2 +- cts/scheduler/exp/notify-3.exp | 2 +- cts/scheduler/exp/notify-behind-stopping-remote.exp | 2 +- cts/scheduler/exp/novell-239079.exp | 2 +- cts/scheduler/exp/novell-239082.exp | 2 +- cts/scheduler/exp/novell-239087.exp | 2 +- cts/scheduler/exp/novell-251689.exp | 2 +- cts/scheduler/exp/novell-252693-2.exp | 2 +- cts/scheduler/exp/novell-252693-3.exp | 2 +- cts/scheduler/exp/novell-252693.exp | 2 +- cts/scheduler/exp/nvpair-date-rules-1.exp | 2 +- cts/scheduler/exp/nvpair-id-ref.exp | 2 +- cts/scheduler/exp/obsolete-lrm-resource.exp | 2 +- cts/scheduler/exp/ocf_degraded-remap-ocf_ok.exp | 2 +- cts/scheduler/exp/ocf_degraded_promoted-remap-ocf_ok.exp | 2 +- cts/scheduler/exp/on-fail-ignore.exp | 2 +- cts/scheduler/exp/on_fail_demote1.exp | 2 +- cts/scheduler/exp/on_fail_demote2.exp | 2 +- cts/scheduler/exp/on_fail_demote3.exp | 2 +- cts/scheduler/exp/on_fail_demote4.exp | 2 +- cts/scheduler/exp/one-or-more-0.exp | 2 +- cts/scheduler/exp/one-or-more-1.exp | 2 +- cts/scheduler/exp/one-or-more-2.exp | 2 +- cts/scheduler/exp/one-or-more-3.exp | 2 +- cts/scheduler/exp/one-or-more-4.exp | 2 +- cts/scheduler/exp/one-or-more-5.exp | 2 +- cts/scheduler/exp/one-or-more-6.exp | 2 +- cts/scheduler/exp/one-or-more-7.exp | 2 +- cts/scheduler/exp/one-or-more-unrunnable-instances.exp | 2 +- cts/scheduler/exp/op-defaults-2.exp | 2 +- cts/scheduler/exp/op-defaults-3.exp | 2 +- cts/scheduler/exp/op-defaults.exp | 2 +- cts/scheduler/exp/order-clone.exp | 2 +- cts/scheduler/exp/order-expired-failure.exp | 2 +- cts/scheduler/exp/order-first-probes.exp | 2 +- cts/scheduler/exp/order-mandatory.exp | 2 +- cts/scheduler/exp/order-optional-keyword.exp | 2 +- cts/scheduler/exp/order-optional.exp | 2 +- cts/scheduler/exp/order-required.exp | 2 +- cts/scheduler/exp/order-serialize-set.exp | 2 +- cts/scheduler/exp/order-serialize.exp | 2 +- cts/scheduler/exp/order-sets.exp | 2 +- cts/scheduler/exp/order-wrong-kind.exp | 2 +- cts/scheduler/exp/order1.exp | 2 +- cts/scheduler/exp/order2.exp | 2 +- cts/scheduler/exp/order3.exp | 2 +- cts/scheduler/exp/order4.exp | 2 +- cts/scheduler/exp/order5.exp | 2 +- cts/scheduler/exp/order6.exp | 2 +- cts/scheduler/exp/order7.exp | 2 +- cts/scheduler/exp/order_constraint_stops_promoted.exp | 2 +- cts/scheduler/exp/order_constraint_stops_unpromoted.exp | 2 +- cts/scheduler/exp/ordered-set-basic-startup.exp | 2 +- cts/scheduler/exp/ordered-set-natural.exp | 2 +- cts/scheduler/exp/origin.exp | 2 +- cts/scheduler/exp/orphan-0.exp | 2 +- cts/scheduler/exp/orphan-1.exp | 2 +- cts/scheduler/exp/orphan-2.exp | 2 +- cts/scheduler/exp/params-0.exp | 2 +- cts/scheduler/exp/params-1.exp | 2 +- cts/scheduler/exp/params-2.exp | 2 +- cts/scheduler/exp/params-3.exp | 2 +- cts/scheduler/exp/params-4.exp | 2 +- cts/scheduler/exp/params-5.exp | 2 +- cts/scheduler/exp/params-6.exp | 2 +- cts/scheduler/exp/partial-live-migration-multiple-active.exp | 2 +- cts/scheduler/exp/partial-unmanaged-group.exp | 2 +- cts/scheduler/exp/pending-node-no-uname.exp | 2 +- cts/scheduler/exp/per-node-attrs.exp | 2 +- cts/scheduler/exp/per-op-failcount.exp | 2 +- cts/scheduler/exp/placement-capacity.exp | 2 +- cts/scheduler/exp/placement-location.exp | 2 +- cts/scheduler/exp/placement-priority.exp | 2 +- cts/scheduler/exp/placement-stickiness.exp | 2 +- cts/scheduler/exp/primitive-with-group-with-clone.exp | 2 +- cts/scheduler/exp/primitive-with-group-with-promoted.exp | 2 +- cts/scheduler/exp/primitive-with-unrunnable-group.exp | 2 +- cts/scheduler/exp/priority-fencing-delay.exp | 2 +- cts/scheduler/exp/probe-0.exp | 2 +- cts/scheduler/exp/probe-1.exp | 2 +- cts/scheduler/exp/probe-2.exp | 2 +- cts/scheduler/exp/probe-3.exp | 2 +- cts/scheduler/exp/probe-4.exp | 2 +- cts/scheduler/exp/probe-pending-node.exp | 2 +- cts/scheduler/exp/probe-target-of-failed-migrate_to-1.exp | 2 +- cts/scheduler/exp/probe-target-of-failed-migrate_to-2.exp | 2 +- cts/scheduler/exp/probe-timeout.exp | 2 +- cts/scheduler/exp/promoted-0.exp | 2 +- cts/scheduler/exp/promoted-1.exp | 2 +- cts/scheduler/exp/promoted-10.exp | 2 +- cts/scheduler/exp/promoted-11.exp | 2 +- cts/scheduler/exp/promoted-12.exp | 2 +- cts/scheduler/exp/promoted-13.exp | 2 +- cts/scheduler/exp/promoted-2.exp | 2 +- cts/scheduler/exp/promoted-3.exp | 2 +- cts/scheduler/exp/promoted-4.exp | 2 +- cts/scheduler/exp/promoted-5.exp | 2 +- cts/scheduler/exp/promoted-6.exp | 2 +- cts/scheduler/exp/promoted-7.exp | 2 +- cts/scheduler/exp/promoted-8.exp | 2 +- cts/scheduler/exp/promoted-9.exp | 2 +- cts/scheduler/exp/promoted-allow-start.exp | 2 +- cts/scheduler/exp/promoted-asymmetrical-order.exp | 2 +- cts/scheduler/exp/promoted-colocation.exp | 2 +- cts/scheduler/exp/promoted-demote-2.exp | 2 +- cts/scheduler/exp/promoted-demote-block.exp | 2 +- cts/scheduler/exp/promoted-demote.exp | 2 +- cts/scheduler/exp/promoted-depend.exp | 2 +- cts/scheduler/exp/promoted-dependent-ban.exp | 2 +- cts/scheduler/exp/promoted-failed-demote-2.exp | 2 +- cts/scheduler/exp/promoted-failed-demote.exp | 2 +- cts/scheduler/exp/promoted-group.exp | 2 +- cts/scheduler/exp/promoted-move.exp | 2 +- cts/scheduler/exp/promoted-notify.exp | 2 +- cts/scheduler/exp/promoted-ordering.exp | 2 +- cts/scheduler/exp/promoted-partially-demoted-group.exp | 2 +- cts/scheduler/exp/promoted-probed-score.exp | 2 +- cts/scheduler/exp/promoted-promotion-constraint.exp | 2 +- cts/scheduler/exp/promoted-pseudo.exp | 2 +- cts/scheduler/exp/promoted-reattach.exp | 2 +- cts/scheduler/exp/promoted-role.exp | 2 +- cts/scheduler/exp/promoted-score-startup.exp | 2 +- cts/scheduler/exp/promoted-stop.exp | 2 +- cts/scheduler/exp/promoted-unmanaged-monitor.exp | 2 +- cts/scheduler/exp/promoted-with-blocked.exp | 2 +- cts/scheduler/exp/promoted_monitor_restart.exp | 2 +- cts/scheduler/exp/quorum-1.exp | 2 +- cts/scheduler/exp/quorum-2.exp | 2 +- cts/scheduler/exp/quorum-3.exp | 2 +- cts/scheduler/exp/quorum-4.exp | 2 +- cts/scheduler/exp/quorum-5.exp | 2 +- cts/scheduler/exp/quorum-6.exp | 2 +- cts/scheduler/exp/rebalance-unique-clones.exp | 2 +- cts/scheduler/exp/rec-node-1.exp | 2 +- cts/scheduler/exp/rec-node-10.exp | 2 +- cts/scheduler/exp/rec-node-11.exp | 2 +- cts/scheduler/exp/rec-node-12.exp | 2 +- cts/scheduler/exp/rec-node-13.exp | 2 +- cts/scheduler/exp/rec-node-14.exp | 2 +- cts/scheduler/exp/rec-node-15.exp | 2 +- cts/scheduler/exp/rec-node-2.exp | 2 +- cts/scheduler/exp/rec-node-3.exp | 2 +- cts/scheduler/exp/rec-node-4.exp | 2 +- cts/scheduler/exp/rec-node-5.exp | 2 +- cts/scheduler/exp/rec-node-6.exp | 2 +- cts/scheduler/exp/rec-node-7.exp | 2 +- cts/scheduler/exp/rec-node-8.exp | 2 +- cts/scheduler/exp/rec-node-9.exp | 2 +- cts/scheduler/exp/rec-rsc-0.exp | 2 +- cts/scheduler/exp/rec-rsc-1.exp | 2 +- cts/scheduler/exp/rec-rsc-2.exp | 2 +- cts/scheduler/exp/rec-rsc-3.exp | 2 +- cts/scheduler/exp/rec-rsc-4.exp | 2 +- cts/scheduler/exp/rec-rsc-5.exp | 2 +- cts/scheduler/exp/rec-rsc-6.exp | 2 +- cts/scheduler/exp/rec-rsc-7.exp | 2 +- cts/scheduler/exp/rec-rsc-8.exp | 2 +- cts/scheduler/exp/rec-rsc-9.exp | 2 +- cts/scheduler/exp/reload-becomes-restart.exp | 2 +- cts/scheduler/exp/remote-connection-shutdown.exp | 2 +- cts/scheduler/exp/remote-connection-unrecoverable.exp | 2 +- cts/scheduler/exp/remote-disable.exp | 2 +- cts/scheduler/exp/remote-fence-before-reconnect.exp | 2 +- cts/scheduler/exp/remote-fence-unclean-3.exp | 2 +- cts/scheduler/exp/remote-fence-unclean.exp | 2 +- cts/scheduler/exp/remote-fence-unclean2.exp | 2 +- cts/scheduler/exp/remote-move.exp | 2 +- cts/scheduler/exp/remote-orphaned.exp | 2 +- cts/scheduler/exp/remote-orphaned2.exp | 2 +- cts/scheduler/exp/remote-partial-migrate.exp | 2 +- cts/scheduler/exp/remote-partial-migrate2.exp | 2 +- cts/scheduler/exp/remote-probe-disable.exp | 2 +- cts/scheduler/exp/remote-reconnect-delay.exp | 2 +- cts/scheduler/exp/remote-recover-all.exp | 2 +- cts/scheduler/exp/remote-recover-connection.exp | 2 +- cts/scheduler/exp/remote-recover-fail.exp | 2 +- cts/scheduler/exp/remote-recover-no-resources.exp | 2 +- cts/scheduler/exp/remote-recover-unknown.exp | 2 +- cts/scheduler/exp/remote-recover.exp | 2 +- cts/scheduler/exp/remote-recovery.exp | 2 +- cts/scheduler/exp/remote-stale-node-entry.exp | 2 +- cts/scheduler/exp/remote-start-fail.exp | 2 +- cts/scheduler/exp/remote-startup-probes.exp | 2 +- cts/scheduler/exp/remote-startup.exp | 2 +- cts/scheduler/exp/remote-unclean2.exp | 2 +- cts/scheduler/exp/reprobe-target_rc.exp | 2 +- cts/scheduler/exp/resource-discovery.exp | 2 +- cts/scheduler/exp/restart-with-extra-op-params.exp | 2 +- cts/scheduler/exp/route-remote-notify.exp | 2 +- cts/scheduler/exp/rsc-defaults-2.exp | 2 +- cts/scheduler/exp/rsc-defaults.exp | 2 +- cts/scheduler/exp/rsc-discovery-per-node.exp | 2 +- cts/scheduler/exp/rsc-maintenance.exp | 2 +- cts/scheduler/exp/rsc-sets-clone-1.exp | 2 +- cts/scheduler/exp/rsc-sets-clone.exp | 2 +- cts/scheduler/exp/rsc-sets-promoted.exp | 2 +- cts/scheduler/exp/rsc-sets-seq-false.exp | 2 +- cts/scheduler/exp/rsc-sets-seq-true.exp | 2 +- cts/scheduler/exp/rsc_dep1.exp | 2 +- cts/scheduler/exp/rsc_dep10.exp | 2 +- cts/scheduler/exp/rsc_dep2.exp | 2 +- cts/scheduler/exp/rsc_dep3.exp | 2 +- cts/scheduler/exp/rsc_dep4.exp | 2 +- cts/scheduler/exp/rsc_dep5.exp | 2 +- cts/scheduler/exp/rsc_dep7.exp | 2 +- cts/scheduler/exp/rsc_dep8.exp | 2 +- cts/scheduler/exp/rule-dbl-as-auto-number-match.exp | 2 +- cts/scheduler/exp/rule-dbl-as-auto-number-no-match.exp | 2 +- cts/scheduler/exp/rule-dbl-as-integer-match.exp | 2 +- cts/scheduler/exp/rule-dbl-as-integer-no-match.exp | 2 +- cts/scheduler/exp/rule-dbl-as-number-match.exp | 2 +- cts/scheduler/exp/rule-dbl-as-number-no-match.exp | 2 +- cts/scheduler/exp/rule-dbl-parse-fail-default-str-match.exp | 2 +- cts/scheduler/exp/rule-dbl-parse-fail-default-str-no-match.exp | 2 +- cts/scheduler/exp/rule-int-as-auto-integer-match.exp | 2 +- cts/scheduler/exp/rule-int-as-auto-integer-no-match.exp | 2 +- cts/scheduler/exp/rule-int-as-integer-match.exp | 2 +- cts/scheduler/exp/rule-int-as-integer-no-match.exp | 2 +- cts/scheduler/exp/rule-int-as-number-match.exp | 2 +- cts/scheduler/exp/rule-int-as-number-no-match.exp | 2 +- cts/scheduler/exp/rule-int-parse-fail-default-str-match.exp | 2 +- cts/scheduler/exp/rule-int-parse-fail-default-str-no-match.exp | 2 +- cts/scheduler/exp/shutdown-lock-expiration.exp | 2 +- cts/scheduler/exp/shutdown-lock.exp | 2 +- cts/scheduler/exp/shutdown-maintenance-node.exp | 2 +- cts/scheduler/exp/simple1.exp | 2 +- cts/scheduler/exp/simple11.exp | 2 +- cts/scheduler/exp/simple12.exp | 2 +- cts/scheduler/exp/simple2.exp | 2 +- cts/scheduler/exp/simple3.exp | 2 +- cts/scheduler/exp/simple4.exp | 2 +- cts/scheduler/exp/simple6.exp | 2 +- cts/scheduler/exp/simple7.exp | 2 +- cts/scheduler/exp/simple8.exp | 2 +- cts/scheduler/exp/site-specific-params.exp | 2 +- cts/scheduler/exp/standby.exp | 2 +- cts/scheduler/exp/start-then-stop-with-unfence.exp | 2 +- cts/scheduler/exp/stonith-0.exp | 2 +- cts/scheduler/exp/stonith-1.exp | 2 +- cts/scheduler/exp/stonith-2.exp | 2 +- cts/scheduler/exp/stonith-3.exp | 2 +- cts/scheduler/exp/stonith-4.exp | 2 +- cts/scheduler/exp/stop-all-resources.exp | 2 +- cts/scheduler/exp/stop-failure-no-fencing.exp | 2 +- cts/scheduler/exp/stop-failure-no-quorum.exp | 2 +- cts/scheduler/exp/stop-failure-with-fencing.exp | 2 +- cts/scheduler/exp/stop-unexpected-2.exp | 2 +- cts/scheduler/exp/stop-unexpected.exp | 2 +- cts/scheduler/exp/stopped-monitor-00.exp | 2 +- cts/scheduler/exp/stopped-monitor-01.exp | 2 +- cts/scheduler/exp/stopped-monitor-02.exp | 2 +- cts/scheduler/exp/stopped-monitor-03.exp | 2 +- cts/scheduler/exp/stopped-monitor-04.exp | 2 +- cts/scheduler/exp/stopped-monitor-05.exp | 2 +- cts/scheduler/exp/stopped-monitor-06.exp | 2 +- cts/scheduler/exp/stopped-monitor-07.exp | 2 +- cts/scheduler/exp/stopped-monitor-08.exp | 2 +- cts/scheduler/exp/stopped-monitor-09.exp | 2 +- cts/scheduler/exp/stopped-monitor-10.exp | 2 +- cts/scheduler/exp/stopped-monitor-11.exp | 2 +- cts/scheduler/exp/stopped-monitor-12.exp | 2 +- cts/scheduler/exp/stopped-monitor-20.exp | 2 +- cts/scheduler/exp/stopped-monitor-21.exp | 2 +- cts/scheduler/exp/stopped-monitor-22.exp | 2 +- cts/scheduler/exp/stopped-monitor-23.exp | 2 +- cts/scheduler/exp/stopped-monitor-24.exp | 2 +- cts/scheduler/exp/stopped-monitor-25.exp | 2 +- cts/scheduler/exp/stopped-monitor-26.exp | 2 +- cts/scheduler/exp/stopped-monitor-27.exp | 2 +- cts/scheduler/exp/stopped-monitor-30.exp | 2 +- cts/scheduler/exp/stopped-monitor-31.exp | 2 +- cts/scheduler/exp/suicide-needed-inquorate.exp | 2 +- cts/scheduler/exp/suicide-not-needed-initial-quorum.exp | 2 +- cts/scheduler/exp/suicide-not-needed-never-quorate.exp | 2 +- cts/scheduler/exp/suicide-not-needed-quorate.exp | 2 +- cts/scheduler/exp/systemhealth1.exp | 2 +- cts/scheduler/exp/systemhealth2.exp | 2 +- cts/scheduler/exp/systemhealth3.exp | 2 +- cts/scheduler/exp/systemhealthm1.exp | 2 +- cts/scheduler/exp/systemhealthm2.exp | 2 +- cts/scheduler/exp/systemhealthm3.exp | 2 +- cts/scheduler/exp/systemhealthn1.exp | 2 +- cts/scheduler/exp/systemhealthn2.exp | 2 +- cts/scheduler/exp/systemhealthn3.exp | 2 +- cts/scheduler/exp/systemhealtho1.exp | 2 +- cts/scheduler/exp/systemhealtho2.exp | 2 +- cts/scheduler/exp/systemhealtho3.exp | 2 +- cts/scheduler/exp/systemhealthp1.exp | 2 +- cts/scheduler/exp/systemhealthp2.exp | 2 +- cts/scheduler/exp/systemhealthp3.exp | 2 +- cts/scheduler/exp/tags-coloc-order-1.exp | 2 +- cts/scheduler/exp/tags-coloc-order-2.exp | 2 +- cts/scheduler/exp/tags-location.exp | 2 +- cts/scheduler/exp/tags-ticket.exp | 2 +- cts/scheduler/exp/target-0.exp | 2 +- cts/scheduler/exp/target-1.exp | 2 +- cts/scheduler/exp/target-2.exp | 2 +- cts/scheduler/exp/template-1.exp | 2 +- cts/scheduler/exp/template-2.exp | 2 +- cts/scheduler/exp/template-3.exp | 2 +- cts/scheduler/exp/template-clone-group.exp | 2 +- cts/scheduler/exp/template-clone-primitive.exp | 2 +- cts/scheduler/exp/template-coloc-1.exp | 2 +- cts/scheduler/exp/template-coloc-2.exp | 2 +- cts/scheduler/exp/template-coloc-3.exp | 2 +- cts/scheduler/exp/template-order-1.exp | 2 +- cts/scheduler/exp/template-order-2.exp | 2 +- cts/scheduler/exp/template-order-3.exp | 2 +- cts/scheduler/exp/template-rsc-sets-1.exp | 2 +- cts/scheduler/exp/template-rsc-sets-2.exp | 2 +- cts/scheduler/exp/template-rsc-sets-3.exp | 2 +- cts/scheduler/exp/template-rsc-sets-4.exp | 2 +- cts/scheduler/exp/template-ticket.exp | 2 +- cts/scheduler/exp/ticket-clone-1.exp | 2 +- cts/scheduler/exp/ticket-clone-10.exp | 2 +- cts/scheduler/exp/ticket-clone-11.exp | 2 +- cts/scheduler/exp/ticket-clone-12.exp | 2 +- cts/scheduler/exp/ticket-clone-13.exp | 2 +- cts/scheduler/exp/ticket-clone-14.exp | 2 +- cts/scheduler/exp/ticket-clone-15.exp | 2 +- cts/scheduler/exp/ticket-clone-16.exp | 2 +- cts/scheduler/exp/ticket-clone-17.exp | 2 +- cts/scheduler/exp/ticket-clone-18.exp | 2 +- cts/scheduler/exp/ticket-clone-19.exp | 2 +- cts/scheduler/exp/ticket-clone-2.exp | 2 +- cts/scheduler/exp/ticket-clone-20.exp | 2 +- cts/scheduler/exp/ticket-clone-21.exp | 2 +- cts/scheduler/exp/ticket-clone-22.exp | 2 +- cts/scheduler/exp/ticket-clone-23.exp | 2 +- cts/scheduler/exp/ticket-clone-24.exp | 2 +- cts/scheduler/exp/ticket-clone-3.exp | 2 +- cts/scheduler/exp/ticket-clone-4.exp | 2 +- cts/scheduler/exp/ticket-clone-5.exp | 2 +- cts/scheduler/exp/ticket-clone-6.exp | 2 +- cts/scheduler/exp/ticket-clone-7.exp | 2 +- cts/scheduler/exp/ticket-clone-8.exp | 2 +- cts/scheduler/exp/ticket-clone-9.exp | 2 +- cts/scheduler/exp/ticket-group-1.exp | 2 +- cts/scheduler/exp/ticket-group-10.exp | 2 +- cts/scheduler/exp/ticket-group-11.exp | 2 +- cts/scheduler/exp/ticket-group-12.exp | 2 +- cts/scheduler/exp/ticket-group-13.exp | 2 +- cts/scheduler/exp/ticket-group-14.exp | 2 +- cts/scheduler/exp/ticket-group-15.exp | 2 +- cts/scheduler/exp/ticket-group-16.exp | 2 +- cts/scheduler/exp/ticket-group-17.exp | 2 +- cts/scheduler/exp/ticket-group-18.exp | 2 +- cts/scheduler/exp/ticket-group-19.exp | 2 +- cts/scheduler/exp/ticket-group-2.exp | 2 +- cts/scheduler/exp/ticket-group-20.exp | 2 +- cts/scheduler/exp/ticket-group-21.exp | 2 +- cts/scheduler/exp/ticket-group-22.exp | 2 +- cts/scheduler/exp/ticket-group-23.exp | 2 +- cts/scheduler/exp/ticket-group-24.exp | 2 +- cts/scheduler/exp/ticket-group-3.exp | 2 +- cts/scheduler/exp/ticket-group-4.exp | 2 +- cts/scheduler/exp/ticket-group-5.exp | 2 +- cts/scheduler/exp/ticket-group-6.exp | 2 +- cts/scheduler/exp/ticket-group-7.exp | 2 +- cts/scheduler/exp/ticket-group-8.exp | 2 +- cts/scheduler/exp/ticket-group-9.exp | 2 +- cts/scheduler/exp/ticket-primitive-1.exp | 2 +- cts/scheduler/exp/ticket-primitive-10.exp | 2 +- cts/scheduler/exp/ticket-primitive-11.exp | 2 +- cts/scheduler/exp/ticket-primitive-12.exp | 2 +- cts/scheduler/exp/ticket-primitive-13.exp | 2 +- cts/scheduler/exp/ticket-primitive-14.exp | 2 +- cts/scheduler/exp/ticket-primitive-15.exp | 2 +- cts/scheduler/exp/ticket-primitive-16.exp | 2 +- cts/scheduler/exp/ticket-primitive-17.exp | 2 +- cts/scheduler/exp/ticket-primitive-18.exp | 2 +- cts/scheduler/exp/ticket-primitive-19.exp | 2 +- cts/scheduler/exp/ticket-primitive-2.exp | 2 +- cts/scheduler/exp/ticket-primitive-20.exp | 2 +- cts/scheduler/exp/ticket-primitive-21.exp | 2 +- cts/scheduler/exp/ticket-primitive-22.exp | 2 +- cts/scheduler/exp/ticket-primitive-23.exp | 2 +- cts/scheduler/exp/ticket-primitive-24.exp | 2 +- cts/scheduler/exp/ticket-primitive-3.exp | 2 +- cts/scheduler/exp/ticket-primitive-4.exp | 2 +- cts/scheduler/exp/ticket-primitive-5.exp | 2 +- cts/scheduler/exp/ticket-primitive-6.exp | 2 +- cts/scheduler/exp/ticket-primitive-7.exp | 2 +- cts/scheduler/exp/ticket-primitive-8.exp | 2 +- cts/scheduler/exp/ticket-primitive-9.exp | 2 +- cts/scheduler/exp/ticket-promoted-1.exp | 2 +- cts/scheduler/exp/ticket-promoted-10.exp | 2 +- cts/scheduler/exp/ticket-promoted-11.exp | 2 +- cts/scheduler/exp/ticket-promoted-12.exp | 2 +- cts/scheduler/exp/ticket-promoted-13.exp | 2 +- cts/scheduler/exp/ticket-promoted-14.exp | 2 +- cts/scheduler/exp/ticket-promoted-15.exp | 2 +- cts/scheduler/exp/ticket-promoted-16.exp | 2 +- cts/scheduler/exp/ticket-promoted-17.exp | 2 +- cts/scheduler/exp/ticket-promoted-18.exp | 2 +- cts/scheduler/exp/ticket-promoted-19.exp | 2 +- cts/scheduler/exp/ticket-promoted-2.exp | 2 +- cts/scheduler/exp/ticket-promoted-20.exp | 2 +- cts/scheduler/exp/ticket-promoted-21.exp | 2 +- cts/scheduler/exp/ticket-promoted-22.exp | 2 +- cts/scheduler/exp/ticket-promoted-23.exp | 2 +- cts/scheduler/exp/ticket-promoted-24.exp | 2 +- cts/scheduler/exp/ticket-promoted-3.exp | 2 +- cts/scheduler/exp/ticket-promoted-4.exp | 2 +- cts/scheduler/exp/ticket-promoted-5.exp | 2 +- cts/scheduler/exp/ticket-promoted-6.exp | 2 +- cts/scheduler/exp/ticket-promoted-7.exp | 2 +- cts/scheduler/exp/ticket-promoted-8.exp | 2 +- cts/scheduler/exp/ticket-promoted-9.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-1.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-10.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-11.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-12.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-13.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-14.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-2.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-3.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-4.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-5.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-6.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-7.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-8.exp | 2 +- cts/scheduler/exp/ticket-rsc-sets-9.exp | 2 +- cts/scheduler/exp/timeout-by-node.exp | 2 +- cts/scheduler/exp/unfence-definition.exp | 2 +- cts/scheduler/exp/unfence-device.exp | 2 +- cts/scheduler/exp/unfence-parameters.exp | 2 +- cts/scheduler/exp/unfence-startup.exp | 2 +- cts/scheduler/exp/unmanaged-block-restart.exp | 2 +- cts/scheduler/exp/unmanaged-promoted.exp | 2 +- cts/scheduler/exp/unmanaged-stop-1.exp | 2 +- cts/scheduler/exp/unmanaged-stop-2.exp | 2 +- cts/scheduler/exp/unmanaged-stop-3.exp | 2 +- cts/scheduler/exp/unmanaged-stop-4.exp | 2 +- cts/scheduler/exp/unrunnable-1.exp | 2 +- cts/scheduler/exp/unrunnable-2.exp | 2 +- cts/scheduler/exp/use-after-free-merge.exp | 2 +- cts/scheduler/exp/utilization-check-allowed-nodes.exp | 2 +- cts/scheduler/exp/utilization-complex.exp | 2 +- cts/scheduler/exp/utilization-order1.exp | 2 +- cts/scheduler/exp/utilization-order2.exp | 2 +- cts/scheduler/exp/utilization-order3.exp | 2 +- cts/scheduler/exp/utilization-order4.exp | 2 +- cts/scheduler/exp/utilization-shuffle.exp | 2 +- cts/scheduler/exp/utilization.exp | 2 +- cts/scheduler/exp/value-source.exp | 2 +- cts/scheduler/exp/whitebox-asymmetric.exp | 2 +- cts/scheduler/exp/whitebox-fail1.exp | 2 +- cts/scheduler/exp/whitebox-fail2.exp | 2 +- cts/scheduler/exp/whitebox-fail3.exp | 2 +- cts/scheduler/exp/whitebox-imply-stop-on-fence.exp | 2 +- cts/scheduler/exp/whitebox-migrate1.exp | 2 +- cts/scheduler/exp/whitebox-move.exp | 2 +- cts/scheduler/exp/whitebox-ms-ordering-move.exp | 2 +- cts/scheduler/exp/whitebox-ms-ordering.exp | 2 +- cts/scheduler/exp/whitebox-nested-group.exp | 2 +- cts/scheduler/exp/whitebox-orphan-ms.exp | 2 +- cts/scheduler/exp/whitebox-orphaned.exp | 2 +- cts/scheduler/exp/whitebox-start.exp | 2 +- cts/scheduler/exp/whitebox-stop.exp | 2 +- cts/scheduler/exp/whitebox-unexpectedly-running.exp | 2 +- cts/scheduler/exp/year-2038.exp | 2 +- 853 files changed, 853 insertions(+), 853 deletions(-) diff --git a/cts/scheduler/exp/1-a-then-bm-move-b.exp b/cts/scheduler/exp/1-a-then-bm-move-b.exp index 8019a0349e2..41e999f1caf 100644 --- a/cts/scheduler/exp/1-a-then-bm-move-b.exp +++ b/cts/scheduler/exp/1-a-then-bm-move-b.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/10-a-then-bm-b-move-a-clone.exp b/cts/scheduler/exp/10-a-then-bm-b-move-a-clone.exp index 5cead0db32d..3aa2b52780f 100644 --- a/cts/scheduler/exp/10-a-then-bm-b-move-a-clone.exp +++ b/cts/scheduler/exp/10-a-then-bm-b-move-a-clone.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/11-a-then-bm-b-move-a-clone-starting.exp b/cts/scheduler/exp/11-a-then-bm-b-move-a-clone-starting.exp index d3ce8b7ab71..275c836a89c 100644 --- a/cts/scheduler/exp/11-a-then-bm-b-move-a-clone-starting.exp +++ b/cts/scheduler/exp/11-a-then-bm-b-move-a-clone-starting.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/1360.exp b/cts/scheduler/exp/1360.exp index 3cb749f4e90..0053b7cd5f9 100644 --- a/cts/scheduler/exp/1360.exp +++ b/cts/scheduler/exp/1360.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/1484.exp b/cts/scheduler/exp/1484.exp index 00418383b07..c407e4e8108 100644 --- a/cts/scheduler/exp/1484.exp +++ b/cts/scheduler/exp/1484.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/1494.exp b/cts/scheduler/exp/1494.exp index 344c7c4226c..46820f74934 100644 --- a/cts/scheduler/exp/1494.exp +++ b/cts/scheduler/exp/1494.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/2-am-then-b-move-a.exp b/cts/scheduler/exp/2-am-then-b-move-a.exp index 25ecb631b91..68b14b45fcb 100644 --- a/cts/scheduler/exp/2-am-then-b-move-a.exp +++ b/cts/scheduler/exp/2-am-then-b-move-a.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/3-am-then-bm-both-migrate.exp b/cts/scheduler/exp/3-am-then-bm-both-migrate.exp index b3c065c63e7..a8f78a041af 100644 --- a/cts/scheduler/exp/3-am-then-bm-both-migrate.exp +++ b/cts/scheduler/exp/3-am-then-bm-both-migrate.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/4-am-then-bm-b-not-migratable.exp b/cts/scheduler/exp/4-am-then-bm-b-not-migratable.exp index 2edba795659..651010935e0 100644 --- a/cts/scheduler/exp/4-am-then-bm-b-not-migratable.exp +++ b/cts/scheduler/exp/4-am-then-bm-b-not-migratable.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/5-am-then-bm-a-not-migratable.exp b/cts/scheduler/exp/5-am-then-bm-a-not-migratable.exp index cf69cdbf27a..97d5e544ca0 100644 --- a/cts/scheduler/exp/5-am-then-bm-a-not-migratable.exp +++ b/cts/scheduler/exp/5-am-then-bm-a-not-migratable.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/594.exp b/cts/scheduler/exp/594.exp index c0025f07a39..9dacf33d087 100644 --- a/cts/scheduler/exp/594.exp +++ b/cts/scheduler/exp/594.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/6-migrate-group.exp b/cts/scheduler/exp/6-migrate-group.exp index 1b17af5bfe5..d7bc544b431 100644 --- a/cts/scheduler/exp/6-migrate-group.exp +++ b/cts/scheduler/exp/6-migrate-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/662.exp b/cts/scheduler/exp/662.exp index a5643a0d40e..963f2fd258c 100644 --- a/cts/scheduler/exp/662.exp +++ b/cts/scheduler/exp/662.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/696.exp b/cts/scheduler/exp/696.exp index 8ba70587784..3cbdc860eab 100644 --- a/cts/scheduler/exp/696.exp +++ b/cts/scheduler/exp/696.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/7-migrate-group-one-unmigratable.exp b/cts/scheduler/exp/7-migrate-group-one-unmigratable.exp index b1ad13fe616..c57edacfe73 100644 --- a/cts/scheduler/exp/7-migrate-group-one-unmigratable.exp +++ b/cts/scheduler/exp/7-migrate-group-one-unmigratable.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/726.exp b/cts/scheduler/exp/726.exp index 46b2e6af8f7..32eeaab085e 100644 --- a/cts/scheduler/exp/726.exp +++ b/cts/scheduler/exp/726.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/735.exp b/cts/scheduler/exp/735.exp index 54fe59cf905..13359db0676 100644 --- a/cts/scheduler/exp/735.exp +++ b/cts/scheduler/exp/735.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/764.exp b/cts/scheduler/exp/764.exp index f7a0ff82bd8..03677760236 100644 --- a/cts/scheduler/exp/764.exp +++ b/cts/scheduler/exp/764.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/797.exp b/cts/scheduler/exp/797.exp index f7d13a27705..d1e0de2ed0d 100644 --- a/cts/scheduler/exp/797.exp +++ b/cts/scheduler/exp/797.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/8-am-then-bm-a-migrating-b-stopping.exp b/cts/scheduler/exp/8-am-then-bm-a-migrating-b-stopping.exp index b236a174824..be7a5c0ad7e 100644 --- a/cts/scheduler/exp/8-am-then-bm-a-migrating-b-stopping.exp +++ b/cts/scheduler/exp/8-am-then-bm-a-migrating-b-stopping.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/829.exp b/cts/scheduler/exp/829.exp index 40be4f48dd2..3eb01f3fedb 100644 --- a/cts/scheduler/exp/829.exp +++ b/cts/scheduler/exp/829.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/9-am-then-bm-b-migrating-a-stopping.exp b/cts/scheduler/exp/9-am-then-bm-b-migrating-a-stopping.exp index dd8db61d1ae..7bcee2ec735 100644 --- a/cts/scheduler/exp/9-am-then-bm-b-migrating-a-stopping.exp +++ b/cts/scheduler/exp/9-am-then-bm-b-migrating-a-stopping.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/994-2.exp b/cts/scheduler/exp/994-2.exp index 108e04cc115..c8108e9d183 100644 --- a/cts/scheduler/exp/994-2.exp +++ b/cts/scheduler/exp/994-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/994.exp b/cts/scheduler/exp/994.exp index c6c6e5107b9..a2bedd8c367 100644 --- a/cts/scheduler/exp/994.exp +++ b/cts/scheduler/exp/994.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/a-demote-then-b-migrate.exp b/cts/scheduler/exp/a-demote-then-b-migrate.exp index a90db0572f2..757149f93c5 100644 --- a/cts/scheduler/exp/a-demote-then-b-migrate.exp +++ b/cts/scheduler/exp/a-demote-then-b-migrate.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/a-promote-then-b-migrate.exp b/cts/scheduler/exp/a-promote-then-b-migrate.exp index 28de3e84554..bca053399f2 100644 --- a/cts/scheduler/exp/a-promote-then-b-migrate.exp +++ b/cts/scheduler/exp/a-promote-then-b-migrate.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/allow-unhealthy-nodes.exp b/cts/scheduler/exp/allow-unhealthy-nodes.exp index 9fc5aab67a0..12563e43015 100644 --- a/cts/scheduler/exp/allow-unhealthy-nodes.exp +++ b/cts/scheduler/exp/allow-unhealthy-nodes.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/anon-instance-pending.exp b/cts/scheduler/exp/anon-instance-pending.exp index dee6772b516..3acba37c55b 100644 --- a/cts/scheduler/exp/anon-instance-pending.exp +++ b/cts/scheduler/exp/anon-instance-pending.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/anti-colocation-order.exp b/cts/scheduler/exp/anti-colocation-order.exp index d1c2d05bad4..a366de586c8 100644 --- a/cts/scheduler/exp/anti-colocation-order.exp +++ b/cts/scheduler/exp/anti-colocation-order.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/anti-colocation-promoted.exp b/cts/scheduler/exp/anti-colocation-promoted.exp index 52d44bff83b..68272959b77 100644 --- a/cts/scheduler/exp/anti-colocation-promoted.exp +++ b/cts/scheduler/exp/anti-colocation-promoted.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/anti-colocation-unpromoted.exp b/cts/scheduler/exp/anti-colocation-unpromoted.exp index f3e49bf5d48..8cf270e366d 100644 --- a/cts/scheduler/exp/anti-colocation-unpromoted.exp +++ b/cts/scheduler/exp/anti-colocation-unpromoted.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/asymmetric.exp b/cts/scheduler/exp/asymmetric.exp index 3277f70a909..27ea8c562b7 100644 --- a/cts/scheduler/exp/asymmetric.exp +++ b/cts/scheduler/exp/asymmetric.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/asymmetrical-order-move.exp b/cts/scheduler/exp/asymmetrical-order-move.exp index afa55001ba6..e54259f0fdf 100644 --- a/cts/scheduler/exp/asymmetrical-order-move.exp +++ b/cts/scheduler/exp/asymmetrical-order-move.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/asymmetrical-order-restart.exp b/cts/scheduler/exp/asymmetrical-order-restart.exp index c0b627a95a5..c1fbdb7e8d7 100644 --- a/cts/scheduler/exp/asymmetrical-order-restart.exp +++ b/cts/scheduler/exp/asymmetrical-order-restart.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/attrs1.exp b/cts/scheduler/exp/attrs1.exp index 17a700975a0..4c903c58de8 100644 --- a/cts/scheduler/exp/attrs1.exp +++ b/cts/scheduler/exp/attrs1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/attrs2.exp b/cts/scheduler/exp/attrs2.exp index 17a700975a0..4c903c58de8 100644 --- a/cts/scheduler/exp/attrs2.exp +++ b/cts/scheduler/exp/attrs2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/attrs3.exp b/cts/scheduler/exp/attrs3.exp index 367ce6eba23..4050f8ac2f1 100644 --- a/cts/scheduler/exp/attrs3.exp +++ b/cts/scheduler/exp/attrs3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/attrs4.exp b/cts/scheduler/exp/attrs4.exp index 367ce6eba23..4050f8ac2f1 100644 --- a/cts/scheduler/exp/attrs4.exp +++ b/cts/scheduler/exp/attrs4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/attrs5.exp b/cts/scheduler/exp/attrs5.exp index 64e9955cd7c..97d66e7e910 100644 --- a/cts/scheduler/exp/attrs5.exp +++ b/cts/scheduler/exp/attrs5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/attrs6.exp b/cts/scheduler/exp/attrs6.exp index 367ce6eba23..4050f8ac2f1 100644 --- a/cts/scheduler/exp/attrs6.exp +++ b/cts/scheduler/exp/attrs6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/attrs7.exp b/cts/scheduler/exp/attrs7.exp index 17a700975a0..4c903c58de8 100644 --- a/cts/scheduler/exp/attrs7.exp +++ b/cts/scheduler/exp/attrs7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/attrs8.exp b/cts/scheduler/exp/attrs8.exp index 17a700975a0..4c903c58de8 100644 --- a/cts/scheduler/exp/attrs8.exp +++ b/cts/scheduler/exp/attrs8.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/balanced.exp b/cts/scheduler/exp/balanced.exp index cd10d895f83..ebcbcb2f050 100644 --- a/cts/scheduler/exp/balanced.exp +++ b/cts/scheduler/exp/balanced.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/banned-group-inner-constraints.exp b/cts/scheduler/exp/banned-group-inner-constraints.exp index 84ccb51ed93..777f87857b6 100644 --- a/cts/scheduler/exp/banned-group-inner-constraints.exp +++ b/cts/scheduler/exp/banned-group-inner-constraints.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/base-score.exp b/cts/scheduler/exp/base-score.exp index 9bf5c2d687e..7af6152c4c9 100644 --- a/cts/scheduler/exp/base-score.exp +++ b/cts/scheduler/exp/base-score.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bnc-515172.exp b/cts/scheduler/exp/bnc-515172.exp index 596c060f2ab..5d3167b2555 100644 --- a/cts/scheduler/exp/bnc-515172.exp +++ b/cts/scheduler/exp/bnc-515172.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-1572-1.exp b/cts/scheduler/exp/bug-1572-1.exp index 0639f52300a..a5c7466ae7f 100644 --- a/cts/scheduler/exp/bug-1572-1.exp +++ b/cts/scheduler/exp/bug-1572-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-1572-2.exp b/cts/scheduler/exp/bug-1572-2.exp index 7c30eaf28b5..23db4878f8b 100644 --- a/cts/scheduler/exp/bug-1572-2.exp +++ b/cts/scheduler/exp/bug-1572-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-1573.exp b/cts/scheduler/exp/bug-1573.exp index 2f90fb1579d..f8ad05a7058 100644 --- a/cts/scheduler/exp/bug-1573.exp +++ b/cts/scheduler/exp/bug-1573.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-1685.exp b/cts/scheduler/exp/bug-1685.exp index b8634e349c0..590145974f6 100644 --- a/cts/scheduler/exp/bug-1685.exp +++ b/cts/scheduler/exp/bug-1685.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-1718.exp b/cts/scheduler/exp/bug-1718.exp index f55104d5892..d8e5cda2af7 100644 --- a/cts/scheduler/exp/bug-1718.exp +++ b/cts/scheduler/exp/bug-1718.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-1765.exp b/cts/scheduler/exp/bug-1765.exp index eda2dcb3c4d..42de9092046 100644 --- a/cts/scheduler/exp/bug-1765.exp +++ b/cts/scheduler/exp/bug-1765.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-1820-1.exp b/cts/scheduler/exp/bug-1820-1.exp index 6210740a1b8..8aa14a3a895 100644 --- a/cts/scheduler/exp/bug-1820-1.exp +++ b/cts/scheduler/exp/bug-1820-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-1820.exp b/cts/scheduler/exp/bug-1820.exp index a7b8b5b184a..f6a3da48caa 100644 --- a/cts/scheduler/exp/bug-1820.exp +++ b/cts/scheduler/exp/bug-1820.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-1822.exp b/cts/scheduler/exp/bug-1822.exp index 9960c68daa9..a7b50aac259 100644 --- a/cts/scheduler/exp/bug-1822.exp +++ b/cts/scheduler/exp/bug-1822.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5014-A-start-B-start.exp b/cts/scheduler/exp/bug-5014-A-start-B-start.exp index d375e7abcb1..852761631d7 100644 --- a/cts/scheduler/exp/bug-5014-A-start-B-start.exp +++ b/cts/scheduler/exp/bug-5014-A-start-B-start.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5014-A-stop-B-started.exp b/cts/scheduler/exp/bug-5014-A-stop-B-started.exp index 4c15e227bd1..833ad919bb2 100644 --- a/cts/scheduler/exp/bug-5014-A-stop-B-started.exp +++ b/cts/scheduler/exp/bug-5014-A-stop-B-started.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5014-A-stopped-B-stopped.exp b/cts/scheduler/exp/bug-5014-A-stopped-B-stopped.exp index 5549ff8fe93..92d93dc8b67 100644 --- a/cts/scheduler/exp/bug-5014-A-stopped-B-stopped.exp +++ b/cts/scheduler/exp/bug-5014-A-stopped-B-stopped.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5014-CLONE-A-start-B-start.exp b/cts/scheduler/exp/bug-5014-CLONE-A-start-B-start.exp index dd18da5c0d1..8d44fee058e 100644 --- a/cts/scheduler/exp/bug-5014-CLONE-A-start-B-start.exp +++ b/cts/scheduler/exp/bug-5014-CLONE-A-start-B-start.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5014-CLONE-A-stop-B-started.exp b/cts/scheduler/exp/bug-5014-CLONE-A-stop-B-started.exp index 25cab0a21c3..ef5b8d47539 100644 --- a/cts/scheduler/exp/bug-5014-CLONE-A-stop-B-started.exp +++ b/cts/scheduler/exp/bug-5014-CLONE-A-stop-B-started.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5014-CthenAthenB-C-stopped.exp b/cts/scheduler/exp/bug-5014-CthenAthenB-C-stopped.exp index 42e829d1123..b5c21abd9ad 100644 --- a/cts/scheduler/exp/bug-5014-CthenAthenB-C-stopped.exp +++ b/cts/scheduler/exp/bug-5014-CthenAthenB-C-stopped.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5014-GROUP-A-start-B-start.exp b/cts/scheduler/exp/bug-5014-GROUP-A-start-B-start.exp index 49c1a11eac2..bd37f099575 100644 --- a/cts/scheduler/exp/bug-5014-GROUP-A-start-B-start.exp +++ b/cts/scheduler/exp/bug-5014-GROUP-A-start-B-start.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-started.exp b/cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-started.exp index 03a0a35010c..cc3a87e4485 100644 --- a/cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-started.exp +++ b/cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-started.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-stopped.exp b/cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-stopped.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-stopped.exp +++ b/cts/scheduler/exp/bug-5014-GROUP-A-stopped-B-stopped.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/bug-5014-ordered-set-symmetrical-false.exp b/cts/scheduler/exp/bug-5014-ordered-set-symmetrical-false.exp index 679a30fface..718d909cb62 100644 --- a/cts/scheduler/exp/bug-5014-ordered-set-symmetrical-false.exp +++ b/cts/scheduler/exp/bug-5014-ordered-set-symmetrical-false.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5014-ordered-set-symmetrical-true.exp b/cts/scheduler/exp/bug-5014-ordered-set-symmetrical-true.exp index ab0957e4e54..bfd0a8a5f7b 100644 --- a/cts/scheduler/exp/bug-5014-ordered-set-symmetrical-true.exp +++ b/cts/scheduler/exp/bug-5014-ordered-set-symmetrical-true.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5025-1.exp b/cts/scheduler/exp/bug-5025-1.exp index c81d8bf00c5..546d49b4326 100644 --- a/cts/scheduler/exp/bug-5025-1.exp +++ b/cts/scheduler/exp/bug-5025-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5025-2.exp b/cts/scheduler/exp/bug-5025-2.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/bug-5025-2.exp +++ b/cts/scheduler/exp/bug-5025-2.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/bug-5025-3.exp b/cts/scheduler/exp/bug-5025-3.exp index 064843b0985..da6ed8467de 100644 --- a/cts/scheduler/exp/bug-5025-3.exp +++ b/cts/scheduler/exp/bug-5025-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5025-4.exp b/cts/scheduler/exp/bug-5025-4.exp index 61ea8a4ca9b..0571d548015 100644 --- a/cts/scheduler/exp/bug-5025-4.exp +++ b/cts/scheduler/exp/bug-5025-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5028-bottom.exp b/cts/scheduler/exp/bug-5028-bottom.exp index f3d8b1d8a67..3545c1a0130 100644 --- a/cts/scheduler/exp/bug-5028-bottom.exp +++ b/cts/scheduler/exp/bug-5028-bottom.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5028-detach.exp b/cts/scheduler/exp/bug-5028-detach.exp index 9f9df5ecfcc..bdc01de568a 100644 --- a/cts/scheduler/exp/bug-5028-detach.exp +++ b/cts/scheduler/exp/bug-5028-detach.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5028.exp b/cts/scheduler/exp/bug-5028.exp index 7b0308e2d81..066d7077eff 100644 --- a/cts/scheduler/exp/bug-5028.exp +++ b/cts/scheduler/exp/bug-5028.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5038.exp b/cts/scheduler/exp/bug-5038.exp index 915363575f9..122415b7ce5 100644 --- a/cts/scheduler/exp/bug-5038.exp +++ b/cts/scheduler/exp/bug-5038.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/bug-5059.exp b/cts/scheduler/exp/bug-5059.exp index a234f566b47..343f8cf0abb 100644 --- a/cts/scheduler/exp/bug-5059.exp +++ b/cts/scheduler/exp/bug-5059.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5069-op-disabled.exp b/cts/scheduler/exp/bug-5069-op-disabled.exp index c60abe6c7d1..94e2980889b 100644 --- a/cts/scheduler/exp/bug-5069-op-disabled.exp +++ b/cts/scheduler/exp/bug-5069-op-disabled.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5069-op-enabled.exp b/cts/scheduler/exp/bug-5069-op-enabled.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/bug-5069-op-enabled.exp +++ b/cts/scheduler/exp/bug-5069-op-enabled.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/bug-5140-require-all-false.exp b/cts/scheduler/exp/bug-5140-require-all-false.exp index dcd32ea9e64..381ecbca443 100644 --- a/cts/scheduler/exp/bug-5140-require-all-false.exp +++ b/cts/scheduler/exp/bug-5140-require-all-false.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5143-ms-shuffle.exp b/cts/scheduler/exp/bug-5143-ms-shuffle.exp index 1cbf828eb5c..46454ca3c5b 100644 --- a/cts/scheduler/exp/bug-5143-ms-shuffle.exp +++ b/cts/scheduler/exp/bug-5143-ms-shuffle.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-5186-partial-migrate.exp b/cts/scheduler/exp/bug-5186-partial-migrate.exp index f88e573ec31..ec5ed5e9ec5 100644 --- a/cts/scheduler/exp/bug-5186-partial-migrate.exp +++ b/cts/scheduler/exp/bug-5186-partial-migrate.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-cl-5168.exp b/cts/scheduler/exp/bug-cl-5168.exp index 7a303757a6a..7e9b39f8b10 100644 --- a/cts/scheduler/exp/bug-cl-5168.exp +++ b/cts/scheduler/exp/bug-cl-5168.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-cl-5170.exp b/cts/scheduler/exp/bug-cl-5170.exp index 3e1c8c15e45..13a8bfcdcc7 100644 --- a/cts/scheduler/exp/bug-cl-5170.exp +++ b/cts/scheduler/exp/bug-cl-5170.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-cl-5212.exp b/cts/scheduler/exp/bug-cl-5212.exp index 8a2e1833d8c..e64c0c6bde3 100644 --- a/cts/scheduler/exp/bug-cl-5212.exp +++ b/cts/scheduler/exp/bug-cl-5212.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-cl-5213.exp b/cts/scheduler/exp/bug-cl-5213.exp index d685dd790e3..d12aa53a5b5 100644 --- a/cts/scheduler/exp/bug-cl-5213.exp +++ b/cts/scheduler/exp/bug-cl-5213.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-cl-5219.exp b/cts/scheduler/exp/bug-cl-5219.exp index 1545cd9a9ab..f9d23db9d57 100644 --- a/cts/scheduler/exp/bug-cl-5219.exp +++ b/cts/scheduler/exp/bug-cl-5219.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-cl-5247.exp b/cts/scheduler/exp/bug-cl-5247.exp index 1f5c7f6a998..68cbf7bbea4 100644 --- a/cts/scheduler/exp/bug-cl-5247.exp +++ b/cts/scheduler/exp/bug-cl-5247.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-1852.exp b/cts/scheduler/exp/bug-lf-1852.exp index 33950152f19..f0aa514b1d2 100644 --- a/cts/scheduler/exp/bug-lf-1852.exp +++ b/cts/scheduler/exp/bug-lf-1852.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-1920.exp b/cts/scheduler/exp/bug-lf-1920.exp index 06a4bfff2e5..4110db72d4c 100644 --- a/cts/scheduler/exp/bug-lf-1920.exp +++ b/cts/scheduler/exp/bug-lf-1920.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2106.exp b/cts/scheduler/exp/bug-lf-2106.exp index c753ab05fb2..acd025ce9e9 100644 --- a/cts/scheduler/exp/bug-lf-2106.exp +++ b/cts/scheduler/exp/bug-lf-2106.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2153.exp b/cts/scheduler/exp/bug-lf-2153.exp index 987b52e20c4..c7c0f1cbda5 100644 --- a/cts/scheduler/exp/bug-lf-2153.exp +++ b/cts/scheduler/exp/bug-lf-2153.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2160.exp b/cts/scheduler/exp/bug-lf-2160.exp index fc36e0d0e4a..2e92c118928 100644 --- a/cts/scheduler/exp/bug-lf-2160.exp +++ b/cts/scheduler/exp/bug-lf-2160.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2171.exp b/cts/scheduler/exp/bug-lf-2171.exp index d922b0d13d3..9fe68ca765b 100644 --- a/cts/scheduler/exp/bug-lf-2171.exp +++ b/cts/scheduler/exp/bug-lf-2171.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2213.exp b/cts/scheduler/exp/bug-lf-2213.exp index 3537883c0df..d594b414802 100644 --- a/cts/scheduler/exp/bug-lf-2213.exp +++ b/cts/scheduler/exp/bug-lf-2213.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2317.exp b/cts/scheduler/exp/bug-lf-2317.exp index a3572274782..b9f0c8aad7d 100644 --- a/cts/scheduler/exp/bug-lf-2317.exp +++ b/cts/scheduler/exp/bug-lf-2317.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2358.exp b/cts/scheduler/exp/bug-lf-2358.exp index e14a80a7ac7..0fadc235177 100644 --- a/cts/scheduler/exp/bug-lf-2358.exp +++ b/cts/scheduler/exp/bug-lf-2358.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2361.exp b/cts/scheduler/exp/bug-lf-2361.exp index 9369be1e6ca..0a7c96d8a06 100644 --- a/cts/scheduler/exp/bug-lf-2361.exp +++ b/cts/scheduler/exp/bug-lf-2361.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2422.exp b/cts/scheduler/exp/bug-lf-2422.exp index 4728c2499c5..3cc639391e2 100644 --- a/cts/scheduler/exp/bug-lf-2422.exp +++ b/cts/scheduler/exp/bug-lf-2422.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2435.exp b/cts/scheduler/exp/bug-lf-2435.exp index 69a4a18bd5a..2038e8222d4 100644 --- a/cts/scheduler/exp/bug-lf-2435.exp +++ b/cts/scheduler/exp/bug-lf-2435.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2445.exp b/cts/scheduler/exp/bug-lf-2445.exp index 7ea61857066..278af704a29 100644 --- a/cts/scheduler/exp/bug-lf-2445.exp +++ b/cts/scheduler/exp/bug-lf-2445.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2453.exp b/cts/scheduler/exp/bug-lf-2453.exp index 83ef6c7f5f0..732739a2009 100644 --- a/cts/scheduler/exp/bug-lf-2453.exp +++ b/cts/scheduler/exp/bug-lf-2453.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2474.exp b/cts/scheduler/exp/bug-lf-2474.exp index ef56fba5935..da44a71d6c1 100644 --- a/cts/scheduler/exp/bug-lf-2474.exp +++ b/cts/scheduler/exp/bug-lf-2474.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2493.exp b/cts/scheduler/exp/bug-lf-2493.exp index 6c55e2690dc..af2a891d91f 100644 --- a/cts/scheduler/exp/bug-lf-2493.exp +++ b/cts/scheduler/exp/bug-lf-2493.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2508.exp b/cts/scheduler/exp/bug-lf-2508.exp index a49e319910f..c73379b979e 100644 --- a/cts/scheduler/exp/bug-lf-2508.exp +++ b/cts/scheduler/exp/bug-lf-2508.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2544.exp b/cts/scheduler/exp/bug-lf-2544.exp index 114bd3ec402..e0193609d38 100644 --- a/cts/scheduler/exp/bug-lf-2544.exp +++ b/cts/scheduler/exp/bug-lf-2544.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2551.exp b/cts/scheduler/exp/bug-lf-2551.exp index b02de4cc28d..c08d486d95e 100644 --- a/cts/scheduler/exp/bug-lf-2551.exp +++ b/cts/scheduler/exp/bug-lf-2551.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2574.exp b/cts/scheduler/exp/bug-lf-2574.exp index 726e0c0cd98..7fb6327e271 100644 --- a/cts/scheduler/exp/bug-lf-2574.exp +++ b/cts/scheduler/exp/bug-lf-2574.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2581.exp b/cts/scheduler/exp/bug-lf-2581.exp index a920d325208..6a7c653bc30 100644 --- a/cts/scheduler/exp/bug-lf-2581.exp +++ b/cts/scheduler/exp/bug-lf-2581.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2606.exp b/cts/scheduler/exp/bug-lf-2606.exp index 448a7ace686..06a1dbf82d7 100644 --- a/cts/scheduler/exp/bug-lf-2606.exp +++ b/cts/scheduler/exp/bug-lf-2606.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-lf-2619.exp b/cts/scheduler/exp/bug-lf-2619.exp index c454c3e7689..3ec39fd64e6 100644 --- a/cts/scheduler/exp/bug-lf-2619.exp +++ b/cts/scheduler/exp/bug-lf-2619.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-n-385265-2.exp b/cts/scheduler/exp/bug-n-385265-2.exp index 216c309df3c..d7f917072f2 100644 --- a/cts/scheduler/exp/bug-n-385265-2.exp +++ b/cts/scheduler/exp/bug-n-385265-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-n-385265.exp b/cts/scheduler/exp/bug-n-385265.exp index eed4bb95c0b..28b9d221883 100644 --- a/cts/scheduler/exp/bug-n-385265.exp +++ b/cts/scheduler/exp/bug-n-385265.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-n-387749.exp b/cts/scheduler/exp/bug-n-387749.exp index 2b300ee08ab..27a9ab5a9db 100644 --- a/cts/scheduler/exp/bug-n-387749.exp +++ b/cts/scheduler/exp/bug-n-387749.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-pm-11.exp b/cts/scheduler/exp/bug-pm-11.exp index aa5d61fee09..b1354438f5b 100644 --- a/cts/scheduler/exp/bug-pm-11.exp +++ b/cts/scheduler/exp/bug-pm-11.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-pm-12.exp b/cts/scheduler/exp/bug-pm-12.exp index 4d15a6f78f2..3b16119b82b 100644 --- a/cts/scheduler/exp/bug-pm-12.exp +++ b/cts/scheduler/exp/bug-pm-12.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-rh-1097457.exp b/cts/scheduler/exp/bug-rh-1097457.exp index 0f60fa62b72..ef5c24d2a02 100644 --- a/cts/scheduler/exp/bug-rh-1097457.exp +++ b/cts/scheduler/exp/bug-rh-1097457.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-rh-880249.exp b/cts/scheduler/exp/bug-rh-880249.exp index 7f12b98093d..b6bf597eadd 100644 --- a/cts/scheduler/exp/bug-rh-880249.exp +++ b/cts/scheduler/exp/bug-rh-880249.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bug-suse-707150.exp b/cts/scheduler/exp/bug-suse-707150.exp index c66c32fb3af..153f112693a 100644 --- a/cts/scheduler/exp/bug-suse-707150.exp +++ b/cts/scheduler/exp/bug-suse-707150.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-connection-with-container.exp b/cts/scheduler/exp/bundle-connection-with-container.exp index ff1c8f016d2..d41f9ce3c6b 100644 --- a/cts/scheduler/exp/bundle-connection-with-container.exp +++ b/cts/scheduler/exp/bundle-connection-with-container.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-interleave-promote.exp b/cts/scheduler/exp/bundle-interleave-promote.exp index 3a3252adda4..399a6b3898d 100644 --- a/cts/scheduler/exp/bundle-interleave-promote.exp +++ b/cts/scheduler/exp/bundle-interleave-promote.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-interleave-start.exp b/cts/scheduler/exp/bundle-interleave-start.exp index 4f726cd82f3..7b71469bc8b 100644 --- a/cts/scheduler/exp/bundle-interleave-start.exp +++ b/cts/scheduler/exp/bundle-interleave-start.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-nested-colocation.exp b/cts/scheduler/exp/bundle-nested-colocation.exp index ec7a71ff697..77f3eaf145d 100644 --- a/cts/scheduler/exp/bundle-nested-colocation.exp +++ b/cts/scheduler/exp/bundle-nested-colocation.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-order-fencing.exp b/cts/scheduler/exp/bundle-order-fencing.exp index a47bd4f4e09..c39583cead5 100644 --- a/cts/scheduler/exp/bundle-order-fencing.exp +++ b/cts/scheduler/exp/bundle-order-fencing.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-order-partial-start-2.exp b/cts/scheduler/exp/bundle-order-partial-start-2.exp index fc8a148a83f..54b4676e223 100644 --- a/cts/scheduler/exp/bundle-order-partial-start-2.exp +++ b/cts/scheduler/exp/bundle-order-partial-start-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-order-partial-start.exp b/cts/scheduler/exp/bundle-order-partial-start.exp index 2f4d0b8b24c..bafae33bc35 100644 --- a/cts/scheduler/exp/bundle-order-partial-start.exp +++ b/cts/scheduler/exp/bundle-order-partial-start.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-order-partial-stop.exp b/cts/scheduler/exp/bundle-order-partial-stop.exp index 4b85ab54937..a79b2fce734 100644 --- a/cts/scheduler/exp/bundle-order-partial-stop.exp +++ b/cts/scheduler/exp/bundle-order-partial-stop.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-order-startup-clone-2.exp b/cts/scheduler/exp/bundle-order-startup-clone-2.exp index e4a35c75836..ec1b0dda8b6 100644 --- a/cts/scheduler/exp/bundle-order-startup-clone-2.exp +++ b/cts/scheduler/exp/bundle-order-startup-clone-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-order-startup-clone.exp b/cts/scheduler/exp/bundle-order-startup-clone.exp index e479a6ebe5f..d8b572768f6 100644 --- a/cts/scheduler/exp/bundle-order-startup-clone.exp +++ b/cts/scheduler/exp/bundle-order-startup-clone.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-order-startup.exp b/cts/scheduler/exp/bundle-order-startup.exp index 51970ed8b61..ba9a48e3947 100644 --- a/cts/scheduler/exp/bundle-order-startup.exp +++ b/cts/scheduler/exp/bundle-order-startup.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-order-stop-clone.exp b/cts/scheduler/exp/bundle-order-stop-clone.exp index f6981e7ef55..43fb588cc5c 100644 --- a/cts/scheduler/exp/bundle-order-stop-clone.exp +++ b/cts/scheduler/exp/bundle-order-stop-clone.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-order-stop-on-remote.exp b/cts/scheduler/exp/bundle-order-stop-on-remote.exp index 11ec5575a48..a4cae1ad85e 100644 --- a/cts/scheduler/exp/bundle-order-stop-on-remote.exp +++ b/cts/scheduler/exp/bundle-order-stop-on-remote.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-order-stop.exp b/cts/scheduler/exp/bundle-order-stop.exp index 4b85ab54937..a79b2fce734 100644 --- a/cts/scheduler/exp/bundle-order-stop.exp +++ b/cts/scheduler/exp/bundle-order-stop.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-probe-order-1.exp b/cts/scheduler/exp/bundle-probe-order-1.exp index e5f2a9b28b2..8b933e25d1a 100644 --- a/cts/scheduler/exp/bundle-probe-order-1.exp +++ b/cts/scheduler/exp/bundle-probe-order-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-probe-order-2.exp b/cts/scheduler/exp/bundle-probe-order-2.exp index 5b280508da8..9aeb1601109 100644 --- a/cts/scheduler/exp/bundle-probe-order-2.exp +++ b/cts/scheduler/exp/bundle-probe-order-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-probe-order-3.exp b/cts/scheduler/exp/bundle-probe-order-3.exp index 69140a41841..dcd7734c187 100644 --- a/cts/scheduler/exp/bundle-probe-order-3.exp +++ b/cts/scheduler/exp/bundle-probe-order-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-probe-remotes.exp b/cts/scheduler/exp/bundle-probe-remotes.exp index 41a6cf134ca..1fa6362fcdc 100644 --- a/cts/scheduler/exp/bundle-probe-remotes.exp +++ b/cts/scheduler/exp/bundle-probe-remotes.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-anticolocation-1.exp b/cts/scheduler/exp/bundle-promoted-anticolocation-1.exp index bb2aee15a39..6cd6b9837d7 100644 --- a/cts/scheduler/exp/bundle-promoted-anticolocation-1.exp +++ b/cts/scheduler/exp/bundle-promoted-anticolocation-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-anticolocation-2.exp b/cts/scheduler/exp/bundle-promoted-anticolocation-2.exp index bb2aee15a39..6cd6b9837d7 100644 --- a/cts/scheduler/exp/bundle-promoted-anticolocation-2.exp +++ b/cts/scheduler/exp/bundle-promoted-anticolocation-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-anticolocation-3.exp b/cts/scheduler/exp/bundle-promoted-anticolocation-3.exp index 7febd99cb90..209f73d2441 100644 --- a/cts/scheduler/exp/bundle-promoted-anticolocation-3.exp +++ b/cts/scheduler/exp/bundle-promoted-anticolocation-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-anticolocation-4.exp b/cts/scheduler/exp/bundle-promoted-anticolocation-4.exp index 7febd99cb90..209f73d2441 100644 --- a/cts/scheduler/exp/bundle-promoted-anticolocation-4.exp +++ b/cts/scheduler/exp/bundle-promoted-anticolocation-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-anticolocation-5.exp b/cts/scheduler/exp/bundle-promoted-anticolocation-5.exp index d5861ab4731..87198bf3e83 100644 --- a/cts/scheduler/exp/bundle-promoted-anticolocation-5.exp +++ b/cts/scheduler/exp/bundle-promoted-anticolocation-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-anticolocation-6.exp b/cts/scheduler/exp/bundle-promoted-anticolocation-6.exp index d5861ab4731..87198bf3e83 100644 --- a/cts/scheduler/exp/bundle-promoted-anticolocation-6.exp +++ b/cts/scheduler/exp/bundle-promoted-anticolocation-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-colocation-1.exp b/cts/scheduler/exp/bundle-promoted-colocation-1.exp index 8d7ea7ac6b4..846fd865244 100644 --- a/cts/scheduler/exp/bundle-promoted-colocation-1.exp +++ b/cts/scheduler/exp/bundle-promoted-colocation-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-colocation-2.exp b/cts/scheduler/exp/bundle-promoted-colocation-2.exp index 8d7ea7ac6b4..846fd865244 100644 --- a/cts/scheduler/exp/bundle-promoted-colocation-2.exp +++ b/cts/scheduler/exp/bundle-promoted-colocation-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-colocation-3.exp b/cts/scheduler/exp/bundle-promoted-colocation-3.exp index 1963bbbb219..46b32e7a232 100644 --- a/cts/scheduler/exp/bundle-promoted-colocation-3.exp +++ b/cts/scheduler/exp/bundle-promoted-colocation-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-colocation-4.exp b/cts/scheduler/exp/bundle-promoted-colocation-4.exp index 1963bbbb219..46b32e7a232 100644 --- a/cts/scheduler/exp/bundle-promoted-colocation-4.exp +++ b/cts/scheduler/exp/bundle-promoted-colocation-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-colocation-5.exp b/cts/scheduler/exp/bundle-promoted-colocation-5.exp index d3c6df3f009..3ab8b669e63 100644 --- a/cts/scheduler/exp/bundle-promoted-colocation-5.exp +++ b/cts/scheduler/exp/bundle-promoted-colocation-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-colocation-6.exp b/cts/scheduler/exp/bundle-promoted-colocation-6.exp index d3c6df3f009..3ab8b669e63 100644 --- a/cts/scheduler/exp/bundle-promoted-colocation-6.exp +++ b/cts/scheduler/exp/bundle-promoted-colocation-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-location-1.exp b/cts/scheduler/exp/bundle-promoted-location-1.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/bundle-promoted-location-1.exp +++ b/cts/scheduler/exp/bundle-promoted-location-1.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-location-2.exp b/cts/scheduler/exp/bundle-promoted-location-2.exp index cbb74babd71..f4539abd1c1 100644 --- a/cts/scheduler/exp/bundle-promoted-location-2.exp +++ b/cts/scheduler/exp/bundle-promoted-location-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-location-3.exp b/cts/scheduler/exp/bundle-promoted-location-3.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/bundle-promoted-location-3.exp +++ b/cts/scheduler/exp/bundle-promoted-location-3.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-location-4.exp b/cts/scheduler/exp/bundle-promoted-location-4.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/bundle-promoted-location-4.exp +++ b/cts/scheduler/exp/bundle-promoted-location-4.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-location-5.exp b/cts/scheduler/exp/bundle-promoted-location-5.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/bundle-promoted-location-5.exp +++ b/cts/scheduler/exp/bundle-promoted-location-5.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/bundle-promoted-location-6.exp b/cts/scheduler/exp/bundle-promoted-location-6.exp index 07a6a2d35e5..138c7c5acf8 100644 --- a/cts/scheduler/exp/bundle-promoted-location-6.exp +++ b/cts/scheduler/exp/bundle-promoted-location-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/bundle-replicas-change.exp b/cts/scheduler/exp/bundle-replicas-change.exp index ec89d948b5b..046b0c28707 100644 --- a/cts/scheduler/exp/bundle-replicas-change.exp +++ b/cts/scheduler/exp/bundle-replicas-change.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/cancel-behind-moving-remote.exp b/cts/scheduler/exp/cancel-behind-moving-remote.exp index 91651ba9e26..4f63367c5d1 100644 --- a/cts/scheduler/exp/cancel-behind-moving-remote.exp +++ b/cts/scheduler/exp/cancel-behind-moving-remote.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clbz5007-promotable-colocation.exp b/cts/scheduler/exp/clbz5007-promotable-colocation.exp index 8ce63724765..9bc2b092622 100644 --- a/cts/scheduler/exp/clbz5007-promotable-colocation.exp +++ b/cts/scheduler/exp/clbz5007-promotable-colocation.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-anon-dup.exp b/cts/scheduler/exp/clone-anon-dup.exp index 2ba7ede9940..b32a996c83a 100644 --- a/cts/scheduler/exp/clone-anon-dup.exp +++ b/cts/scheduler/exp/clone-anon-dup.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-anon-failcount.exp b/cts/scheduler/exp/clone-anon-failcount.exp index a48f69b88de..11b2efacc75 100644 --- a/cts/scheduler/exp/clone-anon-failcount.exp +++ b/cts/scheduler/exp/clone-anon-failcount.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-anon-probe-1.exp b/cts/scheduler/exp/clone-anon-probe-1.exp index 3eb15b8ff3b..198efd955d0 100644 --- a/cts/scheduler/exp/clone-anon-probe-1.exp +++ b/cts/scheduler/exp/clone-anon-probe-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-anon-probe-2.exp b/cts/scheduler/exp/clone-anon-probe-2.exp index df84aae0c15..3ac6f9bd9e3 100644 --- a/cts/scheduler/exp/clone-anon-probe-2.exp +++ b/cts/scheduler/exp/clone-anon-probe-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-fail-block-colocation.exp b/cts/scheduler/exp/clone-fail-block-colocation.exp index 0f6c3470c93..bb7c0071c64 100644 --- a/cts/scheduler/exp/clone-fail-block-colocation.exp +++ b/cts/scheduler/exp/clone-fail-block-colocation.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-interleave-1.exp b/cts/scheduler/exp/clone-interleave-1.exp index 255022c66e4..75974a0ebaa 100644 --- a/cts/scheduler/exp/clone-interleave-1.exp +++ b/cts/scheduler/exp/clone-interleave-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-interleave-2.exp b/cts/scheduler/exp/clone-interleave-2.exp index 4a6b512ff7d..e6ab2e280a4 100644 --- a/cts/scheduler/exp/clone-interleave-2.exp +++ b/cts/scheduler/exp/clone-interleave-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-interleave-3.exp b/cts/scheduler/exp/clone-interleave-3.exp index 1cb7e292747..c88156a54bf 100644 --- a/cts/scheduler/exp/clone-interleave-3.exp +++ b/cts/scheduler/exp/clone-interleave-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-max-zero.exp b/cts/scheduler/exp/clone-max-zero.exp index 53f4109cf7f..01a0f1f0bc8 100644 --- a/cts/scheduler/exp/clone-max-zero.exp +++ b/cts/scheduler/exp/clone-max-zero.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-no-shuffle.exp b/cts/scheduler/exp/clone-no-shuffle.exp index 88f18f9aa0e..43b6ef4f57d 100644 --- a/cts/scheduler/exp/clone-no-shuffle.exp +++ b/cts/scheduler/exp/clone-no-shuffle.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-order-16instances.exp b/cts/scheduler/exp/clone-order-16instances.exp index b06826b4c2e..4f351a5b4d9 100644 --- a/cts/scheduler/exp/clone-order-16instances.exp +++ b/cts/scheduler/exp/clone-order-16instances.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-order-primitive.exp b/cts/scheduler/exp/clone-order-primitive.exp index b54c970d5d0..b397869d465 100644 --- a/cts/scheduler/exp/clone-order-primitive.exp +++ b/cts/scheduler/exp/clone-order-primitive.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-recover-no-shuffle-1.exp b/cts/scheduler/exp/clone-recover-no-shuffle-1.exp index 670a823dac9..4b5cd599951 100644 --- a/cts/scheduler/exp/clone-recover-no-shuffle-1.exp +++ b/cts/scheduler/exp/clone-recover-no-shuffle-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-recover-no-shuffle-10.exp b/cts/scheduler/exp/clone-recover-no-shuffle-10.exp index 27b8b7037c3..d1a5a3cb1ce 100644 --- a/cts/scheduler/exp/clone-recover-no-shuffle-10.exp +++ b/cts/scheduler/exp/clone-recover-no-shuffle-10.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-recover-no-shuffle-11.exp b/cts/scheduler/exp/clone-recover-no-shuffle-11.exp index 40cf1f69c11..9d44a89f0f8 100644 --- a/cts/scheduler/exp/clone-recover-no-shuffle-11.exp +++ b/cts/scheduler/exp/clone-recover-no-shuffle-11.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-recover-no-shuffle-12.exp b/cts/scheduler/exp/clone-recover-no-shuffle-12.exp index 919e6b291c0..ee008aa9e59 100644 --- a/cts/scheduler/exp/clone-recover-no-shuffle-12.exp +++ b/cts/scheduler/exp/clone-recover-no-shuffle-12.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-recover-no-shuffle-2.exp b/cts/scheduler/exp/clone-recover-no-shuffle-2.exp index 84b1e1bc98c..d9f0a2485b7 100644 --- a/cts/scheduler/exp/clone-recover-no-shuffle-2.exp +++ b/cts/scheduler/exp/clone-recover-no-shuffle-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-recover-no-shuffle-3.exp b/cts/scheduler/exp/clone-recover-no-shuffle-3.exp index 6b6ed075f57..8482709e27e 100644 --- a/cts/scheduler/exp/clone-recover-no-shuffle-3.exp +++ b/cts/scheduler/exp/clone-recover-no-shuffle-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-recover-no-shuffle-4.exp b/cts/scheduler/exp/clone-recover-no-shuffle-4.exp index 670a823dac9..4b5cd599951 100644 --- a/cts/scheduler/exp/clone-recover-no-shuffle-4.exp +++ b/cts/scheduler/exp/clone-recover-no-shuffle-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-recover-no-shuffle-5.exp b/cts/scheduler/exp/clone-recover-no-shuffle-5.exp index 84b1e1bc98c..d9f0a2485b7 100644 --- a/cts/scheduler/exp/clone-recover-no-shuffle-5.exp +++ b/cts/scheduler/exp/clone-recover-no-shuffle-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-recover-no-shuffle-6.exp b/cts/scheduler/exp/clone-recover-no-shuffle-6.exp index 6b6ed075f57..8482709e27e 100644 --- a/cts/scheduler/exp/clone-recover-no-shuffle-6.exp +++ b/cts/scheduler/exp/clone-recover-no-shuffle-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-recover-no-shuffle-7.exp b/cts/scheduler/exp/clone-recover-no-shuffle-7.exp index 870ed54e9c2..fa9059f93bd 100644 --- a/cts/scheduler/exp/clone-recover-no-shuffle-7.exp +++ b/cts/scheduler/exp/clone-recover-no-shuffle-7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-recover-no-shuffle-8.exp b/cts/scheduler/exp/clone-recover-no-shuffle-8.exp index 763a2f02fb0..df98313e1f4 100644 --- a/cts/scheduler/exp/clone-recover-no-shuffle-8.exp +++ b/cts/scheduler/exp/clone-recover-no-shuffle-8.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-recover-no-shuffle-9.exp b/cts/scheduler/exp/clone-recover-no-shuffle-9.exp index e249bc737e6..2b2e3d644c6 100644 --- a/cts/scheduler/exp/clone-recover-no-shuffle-9.exp +++ b/cts/scheduler/exp/clone-recover-no-shuffle-9.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-require-all-1.exp b/cts/scheduler/exp/clone-require-all-1.exp index d77d1f366b7..d61e796a5ca 100644 --- a/cts/scheduler/exp/clone-require-all-1.exp +++ b/cts/scheduler/exp/clone-require-all-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-require-all-2.exp b/cts/scheduler/exp/clone-require-all-2.exp index 6caf5f9bb29..025c53e2953 100644 --- a/cts/scheduler/exp/clone-require-all-2.exp +++ b/cts/scheduler/exp/clone-require-all-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-require-all-3.exp b/cts/scheduler/exp/clone-require-all-3.exp index 8b223c88ba8..ea186f02e7a 100644 --- a/cts/scheduler/exp/clone-require-all-3.exp +++ b/cts/scheduler/exp/clone-require-all-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-require-all-4.exp b/cts/scheduler/exp/clone-require-all-4.exp index 2e36de620bf..d3d6dca955b 100644 --- a/cts/scheduler/exp/clone-require-all-4.exp +++ b/cts/scheduler/exp/clone-require-all-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-require-all-5.exp b/cts/scheduler/exp/clone-require-all-5.exp index 34dab7b51cc..9c99ab62a37 100644 --- a/cts/scheduler/exp/clone-require-all-5.exp +++ b/cts/scheduler/exp/clone-require-all-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-require-all-6.exp b/cts/scheduler/exp/clone-require-all-6.exp index 3efc8ed4881..183797779de 100644 --- a/cts/scheduler/exp/clone-require-all-6.exp +++ b/cts/scheduler/exp/clone-require-all-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-require-all-7.exp b/cts/scheduler/exp/clone-require-all-7.exp index 6c401b36d99..458fa0873df 100644 --- a/cts/scheduler/exp/clone-require-all-7.exp +++ b/cts/scheduler/exp/clone-require-all-7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-require-all-no-interleave-1.exp b/cts/scheduler/exp/clone-require-all-no-interleave-1.exp index ae9845972c4..ae31b5e5dc7 100644 --- a/cts/scheduler/exp/clone-require-all-no-interleave-1.exp +++ b/cts/scheduler/exp/clone-require-all-no-interleave-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-require-all-no-interleave-2.exp b/cts/scheduler/exp/clone-require-all-no-interleave-2.exp index d63b0d9d69b..0cdd53d2aea 100644 --- a/cts/scheduler/exp/clone-require-all-no-interleave-2.exp +++ b/cts/scheduler/exp/clone-require-all-no-interleave-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-require-all-no-interleave-3.exp b/cts/scheduler/exp/clone-require-all-no-interleave-3.exp index c50b8c8a06c..4b7f749eae0 100644 --- a/cts/scheduler/exp/clone-require-all-no-interleave-3.exp +++ b/cts/scheduler/exp/clone-require-all-no-interleave-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-requires-quorum-recovery.exp b/cts/scheduler/exp/clone-requires-quorum-recovery.exp index 13a9e717f73..ddf22dccc4f 100644 --- a/cts/scheduler/exp/clone-requires-quorum-recovery.exp +++ b/cts/scheduler/exp/clone-requires-quorum-recovery.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone-requires-quorum.exp b/cts/scheduler/exp/clone-requires-quorum.exp index 5c6dce05293..9f532fd23fe 100644 --- a/cts/scheduler/exp/clone-requires-quorum.exp +++ b/cts/scheduler/exp/clone-requires-quorum.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone_min_interleave_start_one.exp b/cts/scheduler/exp/clone_min_interleave_start_one.exp index c9150542475..2f2fd620f2a 100644 --- a/cts/scheduler/exp/clone_min_interleave_start_one.exp +++ b/cts/scheduler/exp/clone_min_interleave_start_one.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone_min_interleave_start_two.exp b/cts/scheduler/exp/clone_min_interleave_start_two.exp index a82af703ed3..ded2b284067 100644 --- a/cts/scheduler/exp/clone_min_interleave_start_two.exp +++ b/cts/scheduler/exp/clone_min_interleave_start_two.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone_min_interleave_stop_one.exp b/cts/scheduler/exp/clone_min_interleave_stop_one.exp index 6b0ebc51b71..806ca43e559 100644 --- a/cts/scheduler/exp/clone_min_interleave_stop_one.exp +++ b/cts/scheduler/exp/clone_min_interleave_stop_one.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone_min_interleave_stop_two.exp b/cts/scheduler/exp/clone_min_interleave_stop_two.exp index 2a84007a78b..7cb61b7987c 100644 --- a/cts/scheduler/exp/clone_min_interleave_stop_two.exp +++ b/cts/scheduler/exp/clone_min_interleave_stop_two.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone_min_start_one.exp b/cts/scheduler/exp/clone_min_start_one.exp index 9ea1efe7d1b..c2aed566676 100644 --- a/cts/scheduler/exp/clone_min_start_one.exp +++ b/cts/scheduler/exp/clone_min_start_one.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone_min_start_two.exp b/cts/scheduler/exp/clone_min_start_two.exp index 48e1bfd0089..8c39a792b50 100644 --- a/cts/scheduler/exp/clone_min_start_two.exp +++ b/cts/scheduler/exp/clone_min_start_two.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone_min_stop_all.exp b/cts/scheduler/exp/clone_min_stop_all.exp index ff42f1469a6..6e97f6bfb1b 100644 --- a/cts/scheduler/exp/clone_min_stop_all.exp +++ b/cts/scheduler/exp/clone_min_stop_all.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone_min_stop_one.exp b/cts/scheduler/exp/clone_min_stop_one.exp index a1a0247d1f4..a1569ba43f9 100644 --- a/cts/scheduler/exp/clone_min_stop_one.exp +++ b/cts/scheduler/exp/clone_min_stop_one.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/clone_min_stop_two.exp b/cts/scheduler/exp/clone_min_stop_two.exp index 27bb08c1c07..6638fe1acc4 100644 --- a/cts/scheduler/exp/clone_min_stop_two.exp +++ b/cts/scheduler/exp/clone_min_stop_two.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/cloned-group-stop.exp b/cts/scheduler/exp/cloned-group-stop.exp index 436fc2eda0c..05dd655ee20 100644 --- a/cts/scheduler/exp/cloned-group-stop.exp +++ b/cts/scheduler/exp/cloned-group-stop.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/cloned-group.exp b/cts/scheduler/exp/cloned-group.exp index 414906e72c8..5d0bbea23be 100644 --- a/cts/scheduler/exp/cloned-group.exp +++ b/cts/scheduler/exp/cloned-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/cloned_start_one.exp b/cts/scheduler/exp/cloned_start_one.exp index 63847872194..bc2eacddfdd 100644 --- a/cts/scheduler/exp/cloned_start_one.exp +++ b/cts/scheduler/exp/cloned_start_one.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/cloned_start_two.exp b/cts/scheduler/exp/cloned_start_two.exp index 80ccf2e7c7f..369fa8468d3 100644 --- a/cts/scheduler/exp/cloned_start_two.exp +++ b/cts/scheduler/exp/cloned_start_two.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/cloned_stop_one.exp b/cts/scheduler/exp/cloned_stop_one.exp index e1cb0d06d5e..f87b3f4ace7 100644 --- a/cts/scheduler/exp/cloned_stop_one.exp +++ b/cts/scheduler/exp/cloned_stop_one.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/cloned_stop_two.exp b/cts/scheduler/exp/cloned_stop_two.exp index 08e8dc96167..df49ab2be9a 100644 --- a/cts/scheduler/exp/cloned_stop_two.exp +++ b/cts/scheduler/exp/cloned_stop_two.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/cluster-specific-params.exp b/cts/scheduler/exp/cluster-specific-params.exp index 77a02e823e4..f80db65ae11 100644 --- a/cts/scheduler/exp/cluster-specific-params.exp +++ b/cts/scheduler/exp/cluster-specific-params.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/colo_promoted_w_native.exp b/cts/scheduler/exp/colo_promoted_w_native.exp index dc5e99adb33..615c6ef97f9 100644 --- a/cts/scheduler/exp/colo_promoted_w_native.exp +++ b/cts/scheduler/exp/colo_promoted_w_native.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/colo_unpromoted_w_native.exp b/cts/scheduler/exp/colo_unpromoted_w_native.exp index 0a01b357768..e14c1ab3282 100644 --- a/cts/scheduler/exp/colo_unpromoted_w_native.exp +++ b/cts/scheduler/exp/colo_unpromoted_w_native.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-attr.exp b/cts/scheduler/exp/coloc-attr.exp index f761ad57b60..0d22952ae98 100644 --- a/cts/scheduler/exp/coloc-attr.exp +++ b/cts/scheduler/exp/coloc-attr.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-clone-stays-active.exp b/cts/scheduler/exp/coloc-clone-stays-active.exp index b86d3a12768..957416cbc54 100644 --- a/cts/scheduler/exp/coloc-clone-stays-active.exp +++ b/cts/scheduler/exp/coloc-clone-stays-active.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-cloned-group-promoted-dependent1.exp b/cts/scheduler/exp/coloc-cloned-group-promoted-dependent1.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/coloc-cloned-group-promoted-dependent1.exp +++ b/cts/scheduler/exp/coloc-cloned-group-promoted-dependent1.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp b/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp +++ b/cts/scheduler/exp/coloc-cloned-group-promoted-dependent2.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/coloc-dependee-should-move.exp b/cts/scheduler/exp/coloc-dependee-should-move.exp index b826d3b5469..972a9ddb4f4 100644 --- a/cts/scheduler/exp/coloc-dependee-should-move.exp +++ b/cts/scheduler/exp/coloc-dependee-should-move.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-dependee-should-stay.exp b/cts/scheduler/exp/coloc-dependee-should-stay.exp index 915363575f9..122415b7ce5 100644 --- a/cts/scheduler/exp/coloc-dependee-should-stay.exp +++ b/cts/scheduler/exp/coloc-dependee-should-stay.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/coloc-group.exp b/cts/scheduler/exp/coloc-group.exp index 79ecac42e25..ae8fcf29426 100644 --- a/cts/scheduler/exp/coloc-group.exp +++ b/cts/scheduler/exp/coloc-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-intra-set.exp b/cts/scheduler/exp/coloc-intra-set.exp index fbd26bf827b..15b35bd8514 100644 --- a/cts/scheduler/exp/coloc-intra-set.exp +++ b/cts/scheduler/exp/coloc-intra-set.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-list.exp b/cts/scheduler/exp/coloc-list.exp index d7dec3e60ce..3f0f7a8d280 100644 --- a/cts/scheduler/exp/coloc-list.exp +++ b/cts/scheduler/exp/coloc-list.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-loop.exp b/cts/scheduler/exp/coloc-loop.exp index 8cecc00a1ea..2dab5d4c43f 100644 --- a/cts/scheduler/exp/coloc-loop.exp +++ b/cts/scheduler/exp/coloc-loop.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-many-one.exp b/cts/scheduler/exp/coloc-many-one.exp index e1397aa01dd..4b815e13b0a 100644 --- a/cts/scheduler/exp/coloc-many-one.exp +++ b/cts/scheduler/exp/coloc-many-one.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-negative-group.exp b/cts/scheduler/exp/coloc-negative-group.exp index d8e908e640f..4dec8567475 100644 --- a/cts/scheduler/exp/coloc-negative-group.exp +++ b/cts/scheduler/exp/coloc-negative-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-1.exp b/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-1.exp index eb03489eb36..9825e7d6ef8 100644 --- a/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-1.exp +++ b/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-2.exp b/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-2.exp index e02a4666114..cad19276ce1 100644 --- a/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-2.exp +++ b/cts/scheduler/exp/coloc-optional-promoted-dependent-moves-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-1.exp b/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-1.exp index 48451cfb4a8..eef50350555 100644 --- a/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-1.exp +++ b/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-2.exp b/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-2.exp index 48451cfb4a8..eef50350555 100644 --- a/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-2.exp +++ b/cts/scheduler/exp/coloc-optional-promoted-dependent-stays-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-unpromoted-anti.exp b/cts/scheduler/exp/coloc-unpromoted-anti.exp index 0f76cfb9fae..79a9017b9f0 100644 --- a/cts/scheduler/exp/coloc-unpromoted-anti.exp +++ b/cts/scheduler/exp/coloc-unpromoted-anti.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc-with-inner-group-member.exp b/cts/scheduler/exp/coloc-with-inner-group-member.exp index bb8f779feb1..2f1db5d935f 100644 --- a/cts/scheduler/exp/coloc-with-inner-group-member.exp +++ b/cts/scheduler/exp/coloc-with-inner-group-member.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/coloc_fp_logic.exp b/cts/scheduler/exp/coloc_fp_logic.exp index 6527fa212df..efaf4c23e11 100644 --- a/cts/scheduler/exp/coloc_fp_logic.exp +++ b/cts/scheduler/exp/coloc_fp_logic.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/colocate-primitive-with-clone.exp b/cts/scheduler/exp/colocate-primitive-with-clone.exp index 638fc48c26e..81b05b68bc2 100644 --- a/cts/scheduler/exp/colocate-primitive-with-clone.exp +++ b/cts/scheduler/exp/colocate-primitive-with-clone.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/colocate-unmanaged-group.exp b/cts/scheduler/exp/colocate-unmanaged-group.exp index e2c16ab50fa..a1418d9ba69 100644 --- a/cts/scheduler/exp/colocate-unmanaged-group.exp +++ b/cts/scheduler/exp/colocate-unmanaged-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/colocated-utilization-clone.exp b/cts/scheduler/exp/colocated-utilization-clone.exp index 68cd6d4c52c..f83092d25f2 100644 --- a/cts/scheduler/exp/colocated-utilization-clone.exp +++ b/cts/scheduler/exp/colocated-utilization-clone.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/colocated-utilization-group.exp b/cts/scheduler/exp/colocated-utilization-group.exp index ebfa46f3d70..93e7857c766 100644 --- a/cts/scheduler/exp/colocated-utilization-group.exp +++ b/cts/scheduler/exp/colocated-utilization-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/colocated-utilization-primitive-1.exp b/cts/scheduler/exp/colocated-utilization-primitive-1.exp index 570ef6c9d44..45e301a1d52 100644 --- a/cts/scheduler/exp/colocated-utilization-primitive-1.exp +++ b/cts/scheduler/exp/colocated-utilization-primitive-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/colocated-utilization-primitive-2.exp b/cts/scheduler/exp/colocated-utilization-primitive-2.exp index 9d5e5132cc1..d51c7de47ff 100644 --- a/cts/scheduler/exp/colocated-utilization-primitive-2.exp +++ b/cts/scheduler/exp/colocated-utilization-primitive-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/colocation-influence.exp b/cts/scheduler/exp/colocation-influence.exp index 410c46f460b..4f1fe040cfa 100644 --- a/cts/scheduler/exp/colocation-influence.exp +++ b/cts/scheduler/exp/colocation-influence.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/colocation-priority-group.exp b/cts/scheduler/exp/colocation-priority-group.exp index ae79d836130..3b2e6615f3b 100644 --- a/cts/scheduler/exp/colocation-priority-group.exp +++ b/cts/scheduler/exp/colocation-priority-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/colocation-vs-stickiness.exp b/cts/scheduler/exp/colocation-vs-stickiness.exp index 915363575f9..122415b7ce5 100644 --- a/cts/scheduler/exp/colocation-vs-stickiness.exp +++ b/cts/scheduler/exp/colocation-vs-stickiness.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/colocation_constraint_stops_promoted.exp b/cts/scheduler/exp/colocation_constraint_stops_promoted.exp index 1c395d71c65..9d6cec097a7 100644 --- a/cts/scheduler/exp/colocation_constraint_stops_promoted.exp +++ b/cts/scheduler/exp/colocation_constraint_stops_promoted.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/colocation_constraint_stops_unpromoted.exp b/cts/scheduler/exp/colocation_constraint_stops_unpromoted.exp index 212b8691ee3..c94a846f07d 100644 --- a/cts/scheduler/exp/colocation_constraint_stops_unpromoted.exp +++ b/cts/scheduler/exp/colocation_constraint_stops_unpromoted.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/comments.exp b/cts/scheduler/exp/comments.exp index 60bf98ebe52..1bcc5c3e2d5 100644 --- a/cts/scheduler/exp/comments.exp +++ b/cts/scheduler/exp/comments.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/complex_enforce_colo.exp b/cts/scheduler/exp/complex_enforce_colo.exp index db9e2469caa..449bd372fb7 100644 --- a/cts/scheduler/exp/complex_enforce_colo.exp +++ b/cts/scheduler/exp/complex_enforce_colo.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/concurrent-fencing.exp b/cts/scheduler/exp/concurrent-fencing.exp index 23295e3fe5c..5ec9694399c 100644 --- a/cts/scheduler/exp/concurrent-fencing.exp +++ b/cts/scheduler/exp/concurrent-fencing.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/container-1.exp b/cts/scheduler/exp/container-1.exp index 24828c7ab9b..d51d26908a3 100644 --- a/cts/scheduler/exp/container-1.exp +++ b/cts/scheduler/exp/container-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/container-2.exp b/cts/scheduler/exp/container-2.exp index 70b5485847c..07230ca12c4 100644 --- a/cts/scheduler/exp/container-2.exp +++ b/cts/scheduler/exp/container-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/container-3.exp b/cts/scheduler/exp/container-3.exp index 5237858a082..5bdde4eb0fa 100644 --- a/cts/scheduler/exp/container-3.exp +++ b/cts/scheduler/exp/container-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/container-4.exp b/cts/scheduler/exp/container-4.exp index 77ebec46d8c..d053374e920 100644 --- a/cts/scheduler/exp/container-4.exp +++ b/cts/scheduler/exp/container-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/container-group-1.exp b/cts/scheduler/exp/container-group-1.exp index a430c98bb75..97990ad8da7 100644 --- a/cts/scheduler/exp/container-group-1.exp +++ b/cts/scheduler/exp/container-group-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/container-group-2.exp b/cts/scheduler/exp/container-group-2.exp index e766c5f45ce..06d34ae6ddb 100644 --- a/cts/scheduler/exp/container-group-2.exp +++ b/cts/scheduler/exp/container-group-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/container-group-3.exp b/cts/scheduler/exp/container-group-3.exp index ceb59717279..b9e1f2f3310 100644 --- a/cts/scheduler/exp/container-group-3.exp +++ b/cts/scheduler/exp/container-group-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/container-group-4.exp b/cts/scheduler/exp/container-group-4.exp index 3d5df62c04c..88531328d5c 100644 --- a/cts/scheduler/exp/container-group-4.exp +++ b/cts/scheduler/exp/container-group-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/container-is-remote-node.exp b/cts/scheduler/exp/container-is-remote-node.exp index 35c21818d84..ab6c91b400d 100644 --- a/cts/scheduler/exp/container-is-remote-node.exp +++ b/cts/scheduler/exp/container-is-remote-node.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/date-1.exp b/cts/scheduler/exp/date-1.exp index 32d0d80bbe7..4bc5283e410 100644 --- a/cts/scheduler/exp/date-1.exp +++ b/cts/scheduler/exp/date-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/date-2.exp b/cts/scheduler/exp/date-2.exp index f51289df827..b2add290196 100644 --- a/cts/scheduler/exp/date-2.exp +++ b/cts/scheduler/exp/date-2.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/date-3.exp b/cts/scheduler/exp/date-3.exp index 4487d632ebe..3e16cf9945c 100644 --- a/cts/scheduler/exp/date-3.exp +++ b/cts/scheduler/exp/date-3.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/dc-fence-ordering.exp b/cts/scheduler/exp/dc-fence-ordering.exp index 429db5a6d7d..207cef59ba7 100644 --- a/cts/scheduler/exp/dc-fence-ordering.exp +++ b/cts/scheduler/exp/dc-fence-ordering.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/enforce-colo1.exp b/cts/scheduler/exp/enforce-colo1.exp index 8e1530850c4..81bfa6a4508 100644 --- a/cts/scheduler/exp/enforce-colo1.exp +++ b/cts/scheduler/exp/enforce-colo1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/expire-non-blocked-failure.exp b/cts/scheduler/exp/expire-non-blocked-failure.exp index 32bedc8dade..ad708fedbbc 100644 --- a/cts/scheduler/exp/expire-non-blocked-failure.exp +++ b/cts/scheduler/exp/expire-non-blocked-failure.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/expired-failed-probe-primitive.exp b/cts/scheduler/exp/expired-failed-probe-primitive.exp index 3c2cbfe4119..3aed9a787eb 100644 --- a/cts/scheduler/exp/expired-failed-probe-primitive.exp +++ b/cts/scheduler/exp/expired-failed-probe-primitive.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/expired-stop-1.exp b/cts/scheduler/exp/expired-stop-1.exp index 61a6afbbdb2..56c721ce62e 100644 --- a/cts/scheduler/exp/expired-stop-1.exp +++ b/cts/scheduler/exp/expired-stop-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/failcount-block.exp b/cts/scheduler/exp/failcount-block.exp index 85beb5c3155..391bcbe12d5 100644 --- a/cts/scheduler/exp/failcount-block.exp +++ b/cts/scheduler/exp/failcount-block.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/failcount.exp b/cts/scheduler/exp/failcount.exp index bf6aff3ef3b..1598c1e1369 100644 --- a/cts/scheduler/exp/failcount.exp +++ b/cts/scheduler/exp/failcount.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/failed-demote-recovery-promoted.exp b/cts/scheduler/exp/failed-demote-recovery-promoted.exp index bffa22011cc..469c835aff2 100644 --- a/cts/scheduler/exp/failed-demote-recovery-promoted.exp +++ b/cts/scheduler/exp/failed-demote-recovery-promoted.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/failed-demote-recovery.exp b/cts/scheduler/exp/failed-demote-recovery.exp index fd086675449..3741a741ef8 100644 --- a/cts/scheduler/exp/failed-demote-recovery.exp +++ b/cts/scheduler/exp/failed-demote-recovery.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/failed-probe-clone.exp b/cts/scheduler/exp/failed-probe-clone.exp index 6be18935bf9..5fe1f04a709 100644 --- a/cts/scheduler/exp/failed-probe-clone.exp +++ b/cts/scheduler/exp/failed-probe-clone.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/failed-probe-primitive.exp b/cts/scheduler/exp/failed-probe-primitive.exp index d0d8aa44dc9..899aa67984f 100644 --- a/cts/scheduler/exp/failed-probe-primitive.exp +++ b/cts/scheduler/exp/failed-probe-primitive.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/failed-sticky-anticolocated-group.exp b/cts/scheduler/exp/failed-sticky-anticolocated-group.exp index 4e57e1831a0..9633aaa9933 100644 --- a/cts/scheduler/exp/failed-sticky-anticolocated-group.exp +++ b/cts/scheduler/exp/failed-sticky-anticolocated-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/failed-sticky-group.exp b/cts/scheduler/exp/failed-sticky-group.exp index ad3e17cab6b..f9dc92dc596 100644 --- a/cts/scheduler/exp/failed-sticky-group.exp +++ b/cts/scheduler/exp/failed-sticky-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/force-anon-clone-max.exp b/cts/scheduler/exp/force-anon-clone-max.exp index 3d016143cce..32621d6c8e9 100644 --- a/cts/scheduler/exp/force-anon-clone-max.exp +++ b/cts/scheduler/exp/force-anon-clone-max.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group-anticolocation-2.exp b/cts/scheduler/exp/group-anticolocation-2.exp index 4e57e1831a0..9633aaa9933 100644 --- a/cts/scheduler/exp/group-anticolocation-2.exp +++ b/cts/scheduler/exp/group-anticolocation-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group-anticolocation-3.exp b/cts/scheduler/exp/group-anticolocation-3.exp index 066b3bd5f45..3a7e42214c5 100644 --- a/cts/scheduler/exp/group-anticolocation-3.exp +++ b/cts/scheduler/exp/group-anticolocation-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group-anticolocation-4.exp b/cts/scheduler/exp/group-anticolocation-4.exp index 4e57e1831a0..9633aaa9933 100644 --- a/cts/scheduler/exp/group-anticolocation-4.exp +++ b/cts/scheduler/exp/group-anticolocation-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group-anticolocation-5.exp b/cts/scheduler/exp/group-anticolocation-5.exp index 2394b4e4772..f8fa9383c3e 100644 --- a/cts/scheduler/exp/group-anticolocation-5.exp +++ b/cts/scheduler/exp/group-anticolocation-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group-anticolocation.exp b/cts/scheduler/exp/group-anticolocation.exp index 5a375593299..a8a4c1d7d6d 100644 --- a/cts/scheduler/exp/group-anticolocation.exp +++ b/cts/scheduler/exp/group-anticolocation.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group-colocation-failure.exp b/cts/scheduler/exp/group-colocation-failure.exp index c57ba8bf6be..75ff7cf5f41 100644 --- a/cts/scheduler/exp/group-colocation-failure.exp +++ b/cts/scheduler/exp/group-colocation-failure.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group-dependents.exp b/cts/scheduler/exp/group-dependents.exp index 98b81b4918f..62d2675762c 100644 --- a/cts/scheduler/exp/group-dependents.exp +++ b/cts/scheduler/exp/group-dependents.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group-fail.exp b/cts/scheduler/exp/group-fail.exp index 80bf0871559..5a60b81c648 100644 --- a/cts/scheduler/exp/group-fail.exp +++ b/cts/scheduler/exp/group-fail.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group-stop-ordering.exp b/cts/scheduler/exp/group-stop-ordering.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/group-stop-ordering.exp +++ b/cts/scheduler/exp/group-stop-ordering.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/group-unmanaged-stopped.exp b/cts/scheduler/exp/group-unmanaged-stopped.exp index cc874ea2174..5b295d62fa4 100644 --- a/cts/scheduler/exp/group-unmanaged-stopped.exp +++ b/cts/scheduler/exp/group-unmanaged-stopped.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group-unmanaged.exp b/cts/scheduler/exp/group-unmanaged.exp index 915363575f9..122415b7ce5 100644 --- a/cts/scheduler/exp/group-unmanaged.exp +++ b/cts/scheduler/exp/group-unmanaged.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/group1.exp b/cts/scheduler/exp/group1.exp index d07251984eb..be5c80bf105 100644 --- a/cts/scheduler/exp/group1.exp +++ b/cts/scheduler/exp/group1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group10.exp b/cts/scheduler/exp/group10.exp index 0f825d23635..e77c8e872c4 100644 --- a/cts/scheduler/exp/group10.exp +++ b/cts/scheduler/exp/group10.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group11.exp b/cts/scheduler/exp/group11.exp index 38b5fab3004..54ae27e86cd 100644 --- a/cts/scheduler/exp/group11.exp +++ b/cts/scheduler/exp/group11.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group13.exp b/cts/scheduler/exp/group13.exp index e947c5e92de..f0a0449f521 100644 --- a/cts/scheduler/exp/group13.exp +++ b/cts/scheduler/exp/group13.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group14.exp b/cts/scheduler/exp/group14.exp index b0f1217cb5a..bd26227afbd 100644 --- a/cts/scheduler/exp/group14.exp +++ b/cts/scheduler/exp/group14.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group15.exp b/cts/scheduler/exp/group15.exp index d2e3e462503..596fb81c0c5 100644 --- a/cts/scheduler/exp/group15.exp +++ b/cts/scheduler/exp/group15.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group2.exp b/cts/scheduler/exp/group2.exp index c50bd2bf57a..def7a949554 100644 --- a/cts/scheduler/exp/group2.exp +++ b/cts/scheduler/exp/group2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group3.exp b/cts/scheduler/exp/group3.exp index 332027d7a27..61b0c59d836 100644 --- a/cts/scheduler/exp/group3.exp +++ b/cts/scheduler/exp/group3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group4.exp b/cts/scheduler/exp/group4.exp index 6b945b041e5..71b470270a0 100644 --- a/cts/scheduler/exp/group4.exp +++ b/cts/scheduler/exp/group4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group5.exp b/cts/scheduler/exp/group5.exp index cbf70e68522..4705f65bbe9 100644 --- a/cts/scheduler/exp/group5.exp +++ b/cts/scheduler/exp/group5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group6.exp b/cts/scheduler/exp/group6.exp index f96807b6ff9..43a7f795470 100644 --- a/cts/scheduler/exp/group6.exp +++ b/cts/scheduler/exp/group6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group7.exp b/cts/scheduler/exp/group7.exp index f5c6c4ecaba..52217c4b0da 100644 --- a/cts/scheduler/exp/group7.exp +++ b/cts/scheduler/exp/group7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group8.exp b/cts/scheduler/exp/group8.exp index 203b3055e81..8bf437f7616 100644 --- a/cts/scheduler/exp/group8.exp +++ b/cts/scheduler/exp/group8.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/group9.exp b/cts/scheduler/exp/group9.exp index 69a20b2455f..f918a0e2af4 100644 --- a/cts/scheduler/exp/group9.exp +++ b/cts/scheduler/exp/group9.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/guest-host-not-fenceable.exp b/cts/scheduler/exp/guest-host-not-fenceable.exp index 7cf64462e08..fbbea59e6a4 100644 --- a/cts/scheduler/exp/guest-host-not-fenceable.exp +++ b/cts/scheduler/exp/guest-host-not-fenceable.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/guest-node-cleanup.exp b/cts/scheduler/exp/guest-node-cleanup.exp index 2253a97547a..688de2c3150 100644 --- a/cts/scheduler/exp/guest-node-cleanup.exp +++ b/cts/scheduler/exp/guest-node-cleanup.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/guest-node-host-dies.exp b/cts/scheduler/exp/guest-node-host-dies.exp index cc601e2ae23..bd5c127e60d 100644 --- a/cts/scheduler/exp/guest-node-host-dies.exp +++ b/cts/scheduler/exp/guest-node-host-dies.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/history-1.exp b/cts/scheduler/exp/history-1.exp index 915363575f9..122415b7ce5 100644 --- a/cts/scheduler/exp/history-1.exp +++ b/cts/scheduler/exp/history-1.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/honor_stonith_rsc_order1.exp b/cts/scheduler/exp/honor_stonith_rsc_order1.exp index 84774cdd3be..92cca654559 100644 --- a/cts/scheduler/exp/honor_stonith_rsc_order1.exp +++ b/cts/scheduler/exp/honor_stonith_rsc_order1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/honor_stonith_rsc_order2.exp b/cts/scheduler/exp/honor_stonith_rsc_order2.exp index 5bbd3aaac61..d27d3de8b57 100644 --- a/cts/scheduler/exp/honor_stonith_rsc_order2.exp +++ b/cts/scheduler/exp/honor_stonith_rsc_order2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/honor_stonith_rsc_order3.exp b/cts/scheduler/exp/honor_stonith_rsc_order3.exp index 5990381b5b8..92fb886687c 100644 --- a/cts/scheduler/exp/honor_stonith_rsc_order3.exp +++ b/cts/scheduler/exp/honor_stonith_rsc_order3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/honor_stonith_rsc_order4.exp b/cts/scheduler/exp/honor_stonith_rsc_order4.exp index 35ddb3e5299..9e4e1aa72c2 100644 --- a/cts/scheduler/exp/honor_stonith_rsc_order4.exp +++ b/cts/scheduler/exp/honor_stonith_rsc_order4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ignore_stonith_rsc_order1.exp b/cts/scheduler/exp/ignore_stonith_rsc_order1.exp index 9063bc6f624..bb9229b4c9f 100644 --- a/cts/scheduler/exp/ignore_stonith_rsc_order1.exp +++ b/cts/scheduler/exp/ignore_stonith_rsc_order1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ignore_stonith_rsc_order2.exp b/cts/scheduler/exp/ignore_stonith_rsc_order2.exp index d942d536829..71e649f4593 100644 --- a/cts/scheduler/exp/ignore_stonith_rsc_order2.exp +++ b/cts/scheduler/exp/ignore_stonith_rsc_order2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ignore_stonith_rsc_order3.exp b/cts/scheduler/exp/ignore_stonith_rsc_order3.exp index 111e6568dc2..32ff21a4241 100644 --- a/cts/scheduler/exp/ignore_stonith_rsc_order3.exp +++ b/cts/scheduler/exp/ignore_stonith_rsc_order3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ignore_stonith_rsc_order4.exp b/cts/scheduler/exp/ignore_stonith_rsc_order4.exp index dd04fa791c3..475d9d32032 100644 --- a/cts/scheduler/exp/ignore_stonith_rsc_order4.exp +++ b/cts/scheduler/exp/ignore_stonith_rsc_order4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/inc0.exp b/cts/scheduler/exp/inc0.exp index a24ef181ca8..436aec0d013 100644 --- a/cts/scheduler/exp/inc0.exp +++ b/cts/scheduler/exp/inc0.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/inc1.exp b/cts/scheduler/exp/inc1.exp index 9c83d455877..072a19f4a27 100644 --- a/cts/scheduler/exp/inc1.exp +++ b/cts/scheduler/exp/inc1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/inc10.exp b/cts/scheduler/exp/inc10.exp index e63bb55846a..00351a08075 100644 --- a/cts/scheduler/exp/inc10.exp +++ b/cts/scheduler/exp/inc10.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/inc11.exp b/cts/scheduler/exp/inc11.exp index 22425ac3ae2..c5237d8dac7 100644 --- a/cts/scheduler/exp/inc11.exp +++ b/cts/scheduler/exp/inc11.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/inc12.exp b/cts/scheduler/exp/inc12.exp index 47721e444c2..fc20224e976 100644 --- a/cts/scheduler/exp/inc12.exp +++ b/cts/scheduler/exp/inc12.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/inc2.exp b/cts/scheduler/exp/inc2.exp index 5c1943ae419..9cba58e2b07 100644 --- a/cts/scheduler/exp/inc2.exp +++ b/cts/scheduler/exp/inc2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/inc3.exp b/cts/scheduler/exp/inc3.exp index 2181d442f77..f9d42c043db 100644 --- a/cts/scheduler/exp/inc3.exp +++ b/cts/scheduler/exp/inc3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/inc4.exp b/cts/scheduler/exp/inc4.exp index 7b1d12127fb..b4509cdcaa2 100644 --- a/cts/scheduler/exp/inc4.exp +++ b/cts/scheduler/exp/inc4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/inc5.exp b/cts/scheduler/exp/inc5.exp index fca0f56104c..c6d2bf67d9f 100644 --- a/cts/scheduler/exp/inc5.exp +++ b/cts/scheduler/exp/inc5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/inc6.exp b/cts/scheduler/exp/inc6.exp index 8c99205ee0e..e7dbe1f995b 100644 --- a/cts/scheduler/exp/inc6.exp +++ b/cts/scheduler/exp/inc6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/inc7.exp b/cts/scheduler/exp/inc7.exp index 2e346974712..164ac65a54e 100644 --- a/cts/scheduler/exp/inc7.exp +++ b/cts/scheduler/exp/inc7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/inc8.exp b/cts/scheduler/exp/inc8.exp index 2617aaa258f..4b22ede9317 100644 --- a/cts/scheduler/exp/inc8.exp +++ b/cts/scheduler/exp/inc8.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/inc9.exp b/cts/scheduler/exp/inc9.exp index 4023adf1238..4b47caa4b5b 100644 --- a/cts/scheduler/exp/inc9.exp +++ b/cts/scheduler/exp/inc9.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/interleave-0.exp b/cts/scheduler/exp/interleave-0.exp index 444d8ea3d2e..22516027422 100644 --- a/cts/scheduler/exp/interleave-0.exp +++ b/cts/scheduler/exp/interleave-0.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/interleave-1.exp b/cts/scheduler/exp/interleave-1.exp index 444d8ea3d2e..22516027422 100644 --- a/cts/scheduler/exp/interleave-1.exp +++ b/cts/scheduler/exp/interleave-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/interleave-2.exp b/cts/scheduler/exp/interleave-2.exp index 444d8ea3d2e..22516027422 100644 --- a/cts/scheduler/exp/interleave-2.exp +++ b/cts/scheduler/exp/interleave-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/interleave-3.exp b/cts/scheduler/exp/interleave-3.exp index 444d8ea3d2e..22516027422 100644 --- a/cts/scheduler/exp/interleave-3.exp +++ b/cts/scheduler/exp/interleave-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/interleave-pseudo-stop.exp b/cts/scheduler/exp/interleave-pseudo-stop.exp index 9463e551555..bf985cf24ff 100644 --- a/cts/scheduler/exp/interleave-pseudo-stop.exp +++ b/cts/scheduler/exp/interleave-pseudo-stop.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/interleave-restart.exp b/cts/scheduler/exp/interleave-restart.exp index bd4b95c3d41..af1ad33b0d7 100644 --- a/cts/scheduler/exp/interleave-restart.exp +++ b/cts/scheduler/exp/interleave-restart.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/interleave-stop.exp b/cts/scheduler/exp/interleave-stop.exp index be08f8a384a..95182a7c135 100644 --- a/cts/scheduler/exp/interleave-stop.exp +++ b/cts/scheduler/exp/interleave-stop.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/intervals.exp b/cts/scheduler/exp/intervals.exp index e7fe8e6e8f3..926de472a42 100644 --- a/cts/scheduler/exp/intervals.exp +++ b/cts/scheduler/exp/intervals.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/leftover-pending-monitor.exp b/cts/scheduler/exp/leftover-pending-monitor.exp index 52619adeaf9..65737ada299 100644 --- a/cts/scheduler/exp/leftover-pending-monitor.exp +++ b/cts/scheduler/exp/leftover-pending-monitor.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/load-stopped-loop-2.exp b/cts/scheduler/exp/load-stopped-loop-2.exp index 9b64b90a974..ca518ee39ed 100644 --- a/cts/scheduler/exp/load-stopped-loop-2.exp +++ b/cts/scheduler/exp/load-stopped-loop-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/load-stopped-loop.exp b/cts/scheduler/exp/load-stopped-loop.exp index 7da86790ae3..b0427a66d18 100644 --- a/cts/scheduler/exp/load-stopped-loop.exp +++ b/cts/scheduler/exp/load-stopped-loop.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/location-date-rules-1.exp b/cts/scheduler/exp/location-date-rules-1.exp index a9cafbdf585..e1428e6321b 100644 --- a/cts/scheduler/exp/location-date-rules-1.exp +++ b/cts/scheduler/exp/location-date-rules-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/location-date-rules-2.exp b/cts/scheduler/exp/location-date-rules-2.exp index 67e89566f92..4064d08b596 100644 --- a/cts/scheduler/exp/location-date-rules-2.exp +++ b/cts/scheduler/exp/location-date-rules-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/location-sets-templates.exp b/cts/scheduler/exp/location-sets-templates.exp index 4a3b39a3040..6882b25e90a 100644 --- a/cts/scheduler/exp/location-sets-templates.exp +++ b/cts/scheduler/exp/location-sets-templates.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/managed-0.exp b/cts/scheduler/exp/managed-0.exp index d73a7aa657e..861d67206c4 100644 --- a/cts/scheduler/exp/managed-0.exp +++ b/cts/scheduler/exp/managed-0.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/managed-1.exp b/cts/scheduler/exp/managed-1.exp index d73a7aa657e..861d67206c4 100644 --- a/cts/scheduler/exp/managed-1.exp +++ b/cts/scheduler/exp/managed-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/managed-2.exp b/cts/scheduler/exp/managed-2.exp index a418b7dd935..4b056f1586f 100644 --- a/cts/scheduler/exp/managed-2.exp +++ b/cts/scheduler/exp/managed-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-1.exp b/cts/scheduler/exp/migrate-1.exp index 049337d85e9..e199d856912 100644 --- a/cts/scheduler/exp/migrate-1.exp +++ b/cts/scheduler/exp/migrate-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-2.exp b/cts/scheduler/exp/migrate-2.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/migrate-2.exp +++ b/cts/scheduler/exp/migrate-2.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/migrate-3.exp b/cts/scheduler/exp/migrate-3.exp index fffcaf50bd5..60319640781 100644 --- a/cts/scheduler/exp/migrate-3.exp +++ b/cts/scheduler/exp/migrate-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-4.exp b/cts/scheduler/exp/migrate-4.exp index d420d8238da..16231f8ba61 100644 --- a/cts/scheduler/exp/migrate-4.exp +++ b/cts/scheduler/exp/migrate-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-5.exp b/cts/scheduler/exp/migrate-5.exp index 313ed17a94b..2cb4fe0e64e 100644 --- a/cts/scheduler/exp/migrate-5.exp +++ b/cts/scheduler/exp/migrate-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-begin.exp b/cts/scheduler/exp/migrate-begin.exp index e4e2dc2e67a..3937c66d65f 100644 --- a/cts/scheduler/exp/migrate-begin.exp +++ b/cts/scheduler/exp/migrate-begin.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-both-vms.exp b/cts/scheduler/exp/migrate-both-vms.exp index b9e98961a24..fff13dbea27 100644 --- a/cts/scheduler/exp/migrate-both-vms.exp +++ b/cts/scheduler/exp/migrate-both-vms.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-fail-2.exp b/cts/scheduler/exp/migrate-fail-2.exp index 0ed542dfae8..e412f5fd212 100644 --- a/cts/scheduler/exp/migrate-fail-2.exp +++ b/cts/scheduler/exp/migrate-fail-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-fail-3.exp b/cts/scheduler/exp/migrate-fail-3.exp index f4298470a06..d0f1ea9b7fa 100644 --- a/cts/scheduler/exp/migrate-fail-3.exp +++ b/cts/scheduler/exp/migrate-fail-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-fail-4.exp b/cts/scheduler/exp/migrate-fail-4.exp index 5759f6bf6d8..45a0298a37d 100644 --- a/cts/scheduler/exp/migrate-fail-4.exp +++ b/cts/scheduler/exp/migrate-fail-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-fail-5.exp b/cts/scheduler/exp/migrate-fail-5.exp index 1a821c22fc1..0c10e5beeb2 100644 --- a/cts/scheduler/exp/migrate-fail-5.exp +++ b/cts/scheduler/exp/migrate-fail-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-fail-6.exp b/cts/scheduler/exp/migrate-fail-6.exp index 856927d3c7e..fb422979f13 100644 --- a/cts/scheduler/exp/migrate-fail-6.exp +++ b/cts/scheduler/exp/migrate-fail-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-fail-7.exp b/cts/scheduler/exp/migrate-fail-7.exp index 9ab8a5418da..562abb14df9 100644 --- a/cts/scheduler/exp/migrate-fail-7.exp +++ b/cts/scheduler/exp/migrate-fail-7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-fail-8.exp b/cts/scheduler/exp/migrate-fail-8.exp index d55759694a5..c0365b277f6 100644 --- a/cts/scheduler/exp/migrate-fail-8.exp +++ b/cts/scheduler/exp/migrate-fail-8.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-fail-9.exp b/cts/scheduler/exp/migrate-fail-9.exp index 1a821c22fc1..0c10e5beeb2 100644 --- a/cts/scheduler/exp/migrate-fail-9.exp +++ b/cts/scheduler/exp/migrate-fail-9.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-fencing.exp b/cts/scheduler/exp/migrate-fencing.exp index 4d4ac5303ce..f79dea69c0c 100644 --- a/cts/scheduler/exp/migrate-fencing.exp +++ b/cts/scheduler/exp/migrate-fencing.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-partial-1.exp b/cts/scheduler/exp/migrate-partial-1.exp index e069ffa2379..adf5876419b 100644 --- a/cts/scheduler/exp/migrate-partial-1.exp +++ b/cts/scheduler/exp/migrate-partial-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-partial-2.exp b/cts/scheduler/exp/migrate-partial-2.exp index c6a84127acc..3ab44439819 100644 --- a/cts/scheduler/exp/migrate-partial-2.exp +++ b/cts/scheduler/exp/migrate-partial-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-partial-3.exp b/cts/scheduler/exp/migrate-partial-3.exp index 5ac51a2e2af..d29215675db 100644 --- a/cts/scheduler/exp/migrate-partial-3.exp +++ b/cts/scheduler/exp/migrate-partial-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-partial-4.exp b/cts/scheduler/exp/migrate-partial-4.exp index fdf7baf240e..2ad1160a97e 100644 --- a/cts/scheduler/exp/migrate-partial-4.exp +++ b/cts/scheduler/exp/migrate-partial-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-shutdown.exp b/cts/scheduler/exp/migrate-shutdown.exp index fce0b38808d..6a7071fed88 100644 --- a/cts/scheduler/exp/migrate-shutdown.exp +++ b/cts/scheduler/exp/migrate-shutdown.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-start-complex.exp b/cts/scheduler/exp/migrate-start-complex.exp index 34df5e23f73..0af97f4c75e 100644 --- a/cts/scheduler/exp/migrate-start-complex.exp +++ b/cts/scheduler/exp/migrate-start-complex.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-start.exp b/cts/scheduler/exp/migrate-start.exp index 465f9877099..6fe80438c38 100644 --- a/cts/scheduler/exp/migrate-start.exp +++ b/cts/scheduler/exp/migrate-start.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-stop-complex.exp b/cts/scheduler/exp/migrate-stop-complex.exp index a70cd344161..8b2b7b4f881 100644 --- a/cts/scheduler/exp/migrate-stop-complex.exp +++ b/cts/scheduler/exp/migrate-stop-complex.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-stop-start-complex.exp b/cts/scheduler/exp/migrate-stop-start-complex.exp index 7abe04b328d..04a67d836b4 100644 --- a/cts/scheduler/exp/migrate-stop-start-complex.exp +++ b/cts/scheduler/exp/migrate-stop-start-complex.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-stop.exp b/cts/scheduler/exp/migrate-stop.exp index 313ed17a94b..2cb4fe0e64e 100644 --- a/cts/scheduler/exp/migrate-stop.exp +++ b/cts/scheduler/exp/migrate-stop.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-stop_start.exp b/cts/scheduler/exp/migrate-stop_start.exp index de786dc7118..daf2c65c10d 100644 --- a/cts/scheduler/exp/migrate-stop_start.exp +++ b/cts/scheduler/exp/migrate-stop_start.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migrate-success.exp b/cts/scheduler/exp/migrate-success.exp index 2063ffb6aa9..8789d21dbea 100644 --- a/cts/scheduler/exp/migrate-success.exp +++ b/cts/scheduler/exp/migrate-success.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migration-behind-migrating-remote.exp b/cts/scheduler/exp/migration-behind-migrating-remote.exp index b289520ee00..c6060fc9b41 100644 --- a/cts/scheduler/exp/migration-behind-migrating-remote.exp +++ b/cts/scheduler/exp/migration-behind-migrating-remote.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migration-intermediary-cleaned.exp b/cts/scheduler/exp/migration-intermediary-cleaned.exp index 8b9bb399458..135d86036e3 100644 --- a/cts/scheduler/exp/migration-intermediary-cleaned.exp +++ b/cts/scheduler/exp/migration-intermediary-cleaned.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/migration-ping-pong.exp b/cts/scheduler/exp/migration-ping-pong.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/migration-ping-pong.exp +++ b/cts/scheduler/exp/migration-ping-pong.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/minimal.exp b/cts/scheduler/exp/minimal.exp index 02ed72e5717..a35e3a0a4d7 100644 --- a/cts/scheduler/exp/minimal.exp +++ b/cts/scheduler/exp/minimal.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/mon-rsc-1.exp b/cts/scheduler/exp/mon-rsc-1.exp index 251ab6cc628..7a8e23f1350 100644 --- a/cts/scheduler/exp/mon-rsc-1.exp +++ b/cts/scheduler/exp/mon-rsc-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/mon-rsc-2.exp b/cts/scheduler/exp/mon-rsc-2.exp index cdb325e3be5..2413b5297c1 100644 --- a/cts/scheduler/exp/mon-rsc-2.exp +++ b/cts/scheduler/exp/mon-rsc-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/mon-rsc-3.exp b/cts/scheduler/exp/mon-rsc-3.exp index 2a44cee5ce4..54fb859ae8e 100644 --- a/cts/scheduler/exp/mon-rsc-3.exp +++ b/cts/scheduler/exp/mon-rsc-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/mon-rsc-4.exp b/cts/scheduler/exp/mon-rsc-4.exp index ee5c5859b39..f32c8899e3d 100644 --- a/cts/scheduler/exp/mon-rsc-4.exp +++ b/cts/scheduler/exp/mon-rsc-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/monitor-onfail-restart.exp b/cts/scheduler/exp/monitor-onfail-restart.exp index 4586dd293a2..1619bd77106 100644 --- a/cts/scheduler/exp/monitor-onfail-restart.exp +++ b/cts/scheduler/exp/monitor-onfail-restart.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/monitor-onfail-stop.exp b/cts/scheduler/exp/monitor-onfail-stop.exp index 63750ec8cfc..3179f6f5fcf 100644 --- a/cts/scheduler/exp/monitor-onfail-stop.exp +++ b/cts/scheduler/exp/monitor-onfail-stop.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/monitor-recovery.exp b/cts/scheduler/exp/monitor-recovery.exp index 8af2528db96..530f0cd7672 100644 --- a/cts/scheduler/exp/monitor-recovery.exp +++ b/cts/scheduler/exp/monitor-recovery.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/multi1.exp b/cts/scheduler/exp/multi1.exp index 20163f11466..1b3f450f9ea 100644 --- a/cts/scheduler/exp/multi1.exp +++ b/cts/scheduler/exp/multi1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/multiple-active-block-group.exp b/cts/scheduler/exp/multiple-active-block-group.exp index ab0b4014c37..9627be18b91 100644 --- a/cts/scheduler/exp/multiple-active-block-group.exp +++ b/cts/scheduler/exp/multiple-active-block-group.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/multiple-monitor-one-failed.exp b/cts/scheduler/exp/multiple-monitor-one-failed.exp index b8c14abb872..bad242d0f67 100644 --- a/cts/scheduler/exp/multiple-monitor-one-failed.exp +++ b/cts/scheduler/exp/multiple-monitor-one-failed.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/multiply-active-stonith.exp b/cts/scheduler/exp/multiply-active-stonith.exp index 093e8b646c3..a875b11753b 100644 --- a/cts/scheduler/exp/multiply-active-stonith.exp +++ b/cts/scheduler/exp/multiply-active-stonith.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/nested-remote-recovery.exp b/cts/scheduler/exp/nested-remote-recovery.exp index 78dca95d86a..c29af3d34a9 100644 --- a/cts/scheduler/exp/nested-remote-recovery.exp +++ b/cts/scheduler/exp/nested-remote-recovery.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/no-promote-on-unrunnable-guest.exp b/cts/scheduler/exp/no-promote-on-unrunnable-guest.exp index 5eeb3d49979..4cd34e0f236 100644 --- a/cts/scheduler/exp/no-promote-on-unrunnable-guest.exp +++ b/cts/scheduler/exp/no-promote-on-unrunnable-guest.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/no_quorum_demote.exp b/cts/scheduler/exp/no_quorum_demote.exp index 47fd0bbe102..b25acc3d0c0 100644 --- a/cts/scheduler/exp/no_quorum_demote.exp +++ b/cts/scheduler/exp/no_quorum_demote.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/node-maintenance-1.exp b/cts/scheduler/exp/node-maintenance-1.exp index 8e8ff5d8e8d..fc031eb12a8 100644 --- a/cts/scheduler/exp/node-maintenance-1.exp +++ b/cts/scheduler/exp/node-maintenance-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/node-maintenance-2.exp b/cts/scheduler/exp/node-maintenance-2.exp index 543fea49f3e..57538fd7166 100644 --- a/cts/scheduler/exp/node-maintenance-2.exp +++ b/cts/scheduler/exp/node-maintenance-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/node-pending-timeout.exp b/cts/scheduler/exp/node-pending-timeout.exp index e94812f031f..e7460981701 100644 --- a/cts/scheduler/exp/node-pending-timeout.exp +++ b/cts/scheduler/exp/node-pending-timeout.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/not-installed-agent.exp b/cts/scheduler/exp/not-installed-agent.exp index bce79cbdc79..7e517927692 100644 --- a/cts/scheduler/exp/not-installed-agent.exp +++ b/cts/scheduler/exp/not-installed-agent.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/not-installed-tools.exp b/cts/scheduler/exp/not-installed-tools.exp index 5438b9499cb..95ca6d9d003 100644 --- a/cts/scheduler/exp/not-installed-tools.exp +++ b/cts/scheduler/exp/not-installed-tools.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/not-reschedule-unneeded-monitor.exp b/cts/scheduler/exp/not-reschedule-unneeded-monitor.exp index 01f58352115..4b015a630eb 100644 --- a/cts/scheduler/exp/not-reschedule-unneeded-monitor.exp +++ b/cts/scheduler/exp/not-reschedule-unneeded-monitor.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/notifs-for-unrunnable.exp b/cts/scheduler/exp/notifs-for-unrunnable.exp index 221b99afc83..6aa57fedc71 100644 --- a/cts/scheduler/exp/notifs-for-unrunnable.exp +++ b/cts/scheduler/exp/notifs-for-unrunnable.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/notify-0.exp b/cts/scheduler/exp/notify-0.exp index fb29069db97..e9effa0f2ca 100644 --- a/cts/scheduler/exp/notify-0.exp +++ b/cts/scheduler/exp/notify-0.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/notify-1.exp b/cts/scheduler/exp/notify-1.exp index fa353665717..f3760f6fed9 100644 --- a/cts/scheduler/exp/notify-1.exp +++ b/cts/scheduler/exp/notify-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/notify-2.exp b/cts/scheduler/exp/notify-2.exp index fa353665717..f3760f6fed9 100644 --- a/cts/scheduler/exp/notify-2.exp +++ b/cts/scheduler/exp/notify-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/notify-3.exp b/cts/scheduler/exp/notify-3.exp index fa396f40db1..ada9ce5e45b 100644 --- a/cts/scheduler/exp/notify-3.exp +++ b/cts/scheduler/exp/notify-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/notify-behind-stopping-remote.exp b/cts/scheduler/exp/notify-behind-stopping-remote.exp index 7bcbe27f0e7..4537d41ca8f 100644 --- a/cts/scheduler/exp/notify-behind-stopping-remote.exp +++ b/cts/scheduler/exp/notify-behind-stopping-remote.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/novell-239079.exp b/cts/scheduler/exp/novell-239079.exp index df897a10fe9..c0509b6af8c 100644 --- a/cts/scheduler/exp/novell-239079.exp +++ b/cts/scheduler/exp/novell-239079.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/novell-239082.exp b/cts/scheduler/exp/novell-239082.exp index 5006320f170..927cc5ad4bb 100644 --- a/cts/scheduler/exp/novell-239082.exp +++ b/cts/scheduler/exp/novell-239082.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/novell-239087.exp b/cts/scheduler/exp/novell-239087.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/novell-239087.exp +++ b/cts/scheduler/exp/novell-239087.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/novell-251689.exp b/cts/scheduler/exp/novell-251689.exp index 4cc31adc8ef..7477c880e07 100644 --- a/cts/scheduler/exp/novell-251689.exp +++ b/cts/scheduler/exp/novell-251689.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/novell-252693-2.exp b/cts/scheduler/exp/novell-252693-2.exp index 54dd77c6660..35a71baf7fd 100644 --- a/cts/scheduler/exp/novell-252693-2.exp +++ b/cts/scheduler/exp/novell-252693-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/novell-252693-3.exp b/cts/scheduler/exp/novell-252693-3.exp index da756ccb1f1..4258d3b4608 100644 --- a/cts/scheduler/exp/novell-252693-3.exp +++ b/cts/scheduler/exp/novell-252693-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/novell-252693.exp b/cts/scheduler/exp/novell-252693.exp index aa0e9fa1a7a..57a0a8c4186 100644 --- a/cts/scheduler/exp/novell-252693.exp +++ b/cts/scheduler/exp/novell-252693.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/nvpair-date-rules-1.exp b/cts/scheduler/exp/nvpair-date-rules-1.exp index d61a0849be4..ac596d7c193 100644 --- a/cts/scheduler/exp/nvpair-date-rules-1.exp +++ b/cts/scheduler/exp/nvpair-date-rules-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/nvpair-id-ref.exp b/cts/scheduler/exp/nvpair-id-ref.exp index f1804d05129..27286c6ce65 100644 --- a/cts/scheduler/exp/nvpair-id-ref.exp +++ b/cts/scheduler/exp/nvpair-id-ref.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/obsolete-lrm-resource.exp b/cts/scheduler/exp/obsolete-lrm-resource.exp index e4eeed016e1..55c01246ad7 100644 --- a/cts/scheduler/exp/obsolete-lrm-resource.exp +++ b/cts/scheduler/exp/obsolete-lrm-resource.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ocf_degraded-remap-ocf_ok.exp b/cts/scheduler/exp/ocf_degraded-remap-ocf_ok.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ocf_degraded-remap-ocf_ok.exp +++ b/cts/scheduler/exp/ocf_degraded-remap-ocf_ok.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ocf_degraded_promoted-remap-ocf_ok.exp b/cts/scheduler/exp/ocf_degraded_promoted-remap-ocf_ok.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ocf_degraded_promoted-remap-ocf_ok.exp +++ b/cts/scheduler/exp/ocf_degraded_promoted-remap-ocf_ok.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/on-fail-ignore.exp b/cts/scheduler/exp/on-fail-ignore.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/on-fail-ignore.exp +++ b/cts/scheduler/exp/on-fail-ignore.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/on_fail_demote1.exp b/cts/scheduler/exp/on_fail_demote1.exp index ebe1dd59ec5..61eccd504ef 100644 --- a/cts/scheduler/exp/on_fail_demote1.exp +++ b/cts/scheduler/exp/on_fail_demote1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/on_fail_demote2.exp b/cts/scheduler/exp/on_fail_demote2.exp index 17c23e39c71..f7d16773fb3 100644 --- a/cts/scheduler/exp/on_fail_demote2.exp +++ b/cts/scheduler/exp/on_fail_demote2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/on_fail_demote3.exp b/cts/scheduler/exp/on_fail_demote3.exp index 1c46677d3b7..e9f46f00ca9 100644 --- a/cts/scheduler/exp/on_fail_demote3.exp +++ b/cts/scheduler/exp/on_fail_demote3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/on_fail_demote4.exp b/cts/scheduler/exp/on_fail_demote4.exp index bf1d130ea67..fbdd0f35922 100644 --- a/cts/scheduler/exp/on_fail_demote4.exp +++ b/cts/scheduler/exp/on_fail_demote4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/one-or-more-0.exp b/cts/scheduler/exp/one-or-more-0.exp index 724db86cebd..5f0c44abd90 100644 --- a/cts/scheduler/exp/one-or-more-0.exp +++ b/cts/scheduler/exp/one-or-more-0.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/one-or-more-1.exp b/cts/scheduler/exp/one-or-more-1.exp index 5de19e50ff8..b464e42d068 100644 --- a/cts/scheduler/exp/one-or-more-1.exp +++ b/cts/scheduler/exp/one-or-more-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/one-or-more-2.exp b/cts/scheduler/exp/one-or-more-2.exp index 6d189c449a8..7fc4bf03c38 100644 --- a/cts/scheduler/exp/one-or-more-2.exp +++ b/cts/scheduler/exp/one-or-more-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/one-or-more-3.exp b/cts/scheduler/exp/one-or-more-3.exp index 810df09ca87..041cb9461b5 100644 --- a/cts/scheduler/exp/one-or-more-3.exp +++ b/cts/scheduler/exp/one-or-more-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/one-or-more-4.exp b/cts/scheduler/exp/one-or-more-4.exp index 3577e80daac..92a17785d1c 100644 --- a/cts/scheduler/exp/one-or-more-4.exp +++ b/cts/scheduler/exp/one-or-more-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/one-or-more-5.exp b/cts/scheduler/exp/one-or-more-5.exp index 6b9c180c346..3c467a0b331 100644 --- a/cts/scheduler/exp/one-or-more-5.exp +++ b/cts/scheduler/exp/one-or-more-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/one-or-more-6.exp b/cts/scheduler/exp/one-or-more-6.exp index bc76cf67f35..7ff12b09bab 100644 --- a/cts/scheduler/exp/one-or-more-6.exp +++ b/cts/scheduler/exp/one-or-more-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/one-or-more-7.exp b/cts/scheduler/exp/one-or-more-7.exp index daaa82966bc..24dae63d41a 100644 --- a/cts/scheduler/exp/one-or-more-7.exp +++ b/cts/scheduler/exp/one-or-more-7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/one-or-more-unrunnable-instances.exp b/cts/scheduler/exp/one-or-more-unrunnable-instances.exp index 73f9c187420..d153f631c5a 100644 --- a/cts/scheduler/exp/one-or-more-unrunnable-instances.exp +++ b/cts/scheduler/exp/one-or-more-unrunnable-instances.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/op-defaults-2.exp b/cts/scheduler/exp/op-defaults-2.exp index 4324fde0975..e447f6c4e8d 100644 --- a/cts/scheduler/exp/op-defaults-2.exp +++ b/cts/scheduler/exp/op-defaults-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/op-defaults-3.exp b/cts/scheduler/exp/op-defaults-3.exp index 6d567dcd776..9f9043167a5 100644 --- a/cts/scheduler/exp/op-defaults-3.exp +++ b/cts/scheduler/exp/op-defaults-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/op-defaults.exp b/cts/scheduler/exp/op-defaults.exp index b81eacb0757..e2f4eab7b5c 100644 --- a/cts/scheduler/exp/op-defaults.exp +++ b/cts/scheduler/exp/op-defaults.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order-clone.exp b/cts/scheduler/exp/order-clone.exp index 7168e8eeed2..30cd8fc9839 100644 --- a/cts/scheduler/exp/order-clone.exp +++ b/cts/scheduler/exp/order-clone.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order-expired-failure.exp b/cts/scheduler/exp/order-expired-failure.exp index 4a504936b2f..5b1b059770a 100644 --- a/cts/scheduler/exp/order-expired-failure.exp +++ b/cts/scheduler/exp/order-expired-failure.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order-first-probes.exp b/cts/scheduler/exp/order-first-probes.exp index 3ab8801b88b..d33828d55d5 100644 --- a/cts/scheduler/exp/order-first-probes.exp +++ b/cts/scheduler/exp/order-first-probes.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order-mandatory.exp b/cts/scheduler/exp/order-mandatory.exp index ed428fbabfe..c6bf0cfbba2 100644 --- a/cts/scheduler/exp/order-mandatory.exp +++ b/cts/scheduler/exp/order-mandatory.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order-optional-keyword.exp b/cts/scheduler/exp/order-optional-keyword.exp index 2e9af5adacc..c5e0766e522 100644 --- a/cts/scheduler/exp/order-optional-keyword.exp +++ b/cts/scheduler/exp/order-optional-keyword.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order-optional.exp b/cts/scheduler/exp/order-optional.exp index 2e9af5adacc..c5e0766e522 100644 --- a/cts/scheduler/exp/order-optional.exp +++ b/cts/scheduler/exp/order-optional.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order-required.exp b/cts/scheduler/exp/order-required.exp index ed428fbabfe..c6bf0cfbba2 100644 --- a/cts/scheduler/exp/order-required.exp +++ b/cts/scheduler/exp/order-required.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order-serialize-set.exp b/cts/scheduler/exp/order-serialize-set.exp index a4e679cb05e..ffc0e5b49fe 100644 --- a/cts/scheduler/exp/order-serialize-set.exp +++ b/cts/scheduler/exp/order-serialize-set.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order-serialize.exp b/cts/scheduler/exp/order-serialize.exp index 86184c1719a..5d23b71da39 100644 --- a/cts/scheduler/exp/order-serialize.exp +++ b/cts/scheduler/exp/order-serialize.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order-sets.exp b/cts/scheduler/exp/order-sets.exp index 424facf666b..6eb1bfb1b03 100644 --- a/cts/scheduler/exp/order-sets.exp +++ b/cts/scheduler/exp/order-sets.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order-wrong-kind.exp b/cts/scheduler/exp/order-wrong-kind.exp index b5f857de4d5..0f8999202ac 100644 --- a/cts/scheduler/exp/order-wrong-kind.exp +++ b/cts/scheduler/exp/order-wrong-kind.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order1.exp b/cts/scheduler/exp/order1.exp index 2f988e5dcbb..b1cfd3d6458 100644 --- a/cts/scheduler/exp/order1.exp +++ b/cts/scheduler/exp/order1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order2.exp b/cts/scheduler/exp/order2.exp index 8a3b8a887e1..7ea61a9e275 100644 --- a/cts/scheduler/exp/order2.exp +++ b/cts/scheduler/exp/order2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order3.exp b/cts/scheduler/exp/order3.exp index 056530bba9a..76edf29c09d 100644 --- a/cts/scheduler/exp/order3.exp +++ b/cts/scheduler/exp/order3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order4.exp b/cts/scheduler/exp/order4.exp index 2f988e5dcbb..b1cfd3d6458 100644 --- a/cts/scheduler/exp/order4.exp +++ b/cts/scheduler/exp/order4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order5.exp b/cts/scheduler/exp/order5.exp index ec4dc3e1a5a..cb437729ede 100644 --- a/cts/scheduler/exp/order5.exp +++ b/cts/scheduler/exp/order5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order6.exp b/cts/scheduler/exp/order6.exp index 7395010a60a..23979ec5d49 100644 --- a/cts/scheduler/exp/order6.exp +++ b/cts/scheduler/exp/order6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order7.exp b/cts/scheduler/exp/order7.exp index c9d2154a39d..fc561dd205b 100644 --- a/cts/scheduler/exp/order7.exp +++ b/cts/scheduler/exp/order7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order_constraint_stops_promoted.exp b/cts/scheduler/exp/order_constraint_stops_promoted.exp index 05b0c2fc0f9..aabe0472bea 100644 --- a/cts/scheduler/exp/order_constraint_stops_promoted.exp +++ b/cts/scheduler/exp/order_constraint_stops_promoted.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/order_constraint_stops_unpromoted.exp b/cts/scheduler/exp/order_constraint_stops_unpromoted.exp index 3e63ffdac82..61e149818bb 100644 --- a/cts/scheduler/exp/order_constraint_stops_unpromoted.exp +++ b/cts/scheduler/exp/order_constraint_stops_unpromoted.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ordered-set-basic-startup.exp b/cts/scheduler/exp/ordered-set-basic-startup.exp index 80bc7b69a37..27c99c25f26 100644 --- a/cts/scheduler/exp/ordered-set-basic-startup.exp +++ b/cts/scheduler/exp/ordered-set-basic-startup.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ordered-set-natural.exp b/cts/scheduler/exp/ordered-set-natural.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ordered-set-natural.exp +++ b/cts/scheduler/exp/ordered-set-natural.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/origin.exp b/cts/scheduler/exp/origin.exp index d774a2eaddd..176b270ab5c 100644 --- a/cts/scheduler/exp/origin.exp +++ b/cts/scheduler/exp/origin.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/orphan-0.exp b/cts/scheduler/exp/orphan-0.exp index 8f3731b2d43..3e5572c8adb 100644 --- a/cts/scheduler/exp/orphan-0.exp +++ b/cts/scheduler/exp/orphan-0.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/orphan-1.exp b/cts/scheduler/exp/orphan-1.exp index 3a87f638fba..e53d3a9689c 100644 --- a/cts/scheduler/exp/orphan-1.exp +++ b/cts/scheduler/exp/orphan-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/orphan-2.exp b/cts/scheduler/exp/orphan-2.exp index eb6eb0096e7..68dc80fbc11 100644 --- a/cts/scheduler/exp/orphan-2.exp +++ b/cts/scheduler/exp/orphan-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/params-0.exp b/cts/scheduler/exp/params-0.exp index 9abe3cc470c..7701f465511 100644 --- a/cts/scheduler/exp/params-0.exp +++ b/cts/scheduler/exp/params-0.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/params-1.exp b/cts/scheduler/exp/params-1.exp index 9e9f2342aa1..b5bc27f2af0 100644 --- a/cts/scheduler/exp/params-1.exp +++ b/cts/scheduler/exp/params-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/params-2.exp b/cts/scheduler/exp/params-2.exp index 3833b74acea..785ae04b2a6 100644 --- a/cts/scheduler/exp/params-2.exp +++ b/cts/scheduler/exp/params-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/params-3.exp b/cts/scheduler/exp/params-3.exp index 5cccdec2c82..f930a9dba0d 100644 --- a/cts/scheduler/exp/params-3.exp +++ b/cts/scheduler/exp/params-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/params-4.exp b/cts/scheduler/exp/params-4.exp index 2880e65266d..048ccda9feb 100644 --- a/cts/scheduler/exp/params-4.exp +++ b/cts/scheduler/exp/params-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/params-5.exp b/cts/scheduler/exp/params-5.exp index 9e9f2342aa1..b5bc27f2af0 100644 --- a/cts/scheduler/exp/params-5.exp +++ b/cts/scheduler/exp/params-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/params-6.exp b/cts/scheduler/exp/params-6.exp index 88447d10a79..d8a0c90ef82 100644 --- a/cts/scheduler/exp/params-6.exp +++ b/cts/scheduler/exp/params-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/partial-live-migration-multiple-active.exp b/cts/scheduler/exp/partial-live-migration-multiple-active.exp index 6b512f2d463..dabd3e08c67 100644 --- a/cts/scheduler/exp/partial-live-migration-multiple-active.exp +++ b/cts/scheduler/exp/partial-live-migration-multiple-active.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/partial-unmanaged-group.exp b/cts/scheduler/exp/partial-unmanaged-group.exp index 62c849dcdfc..0ba5fddba7f 100644 --- a/cts/scheduler/exp/partial-unmanaged-group.exp +++ b/cts/scheduler/exp/partial-unmanaged-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/pending-node-no-uname.exp b/cts/scheduler/exp/pending-node-no-uname.exp index 2c45756b511..b193baa558c 100644 --- a/cts/scheduler/exp/pending-node-no-uname.exp +++ b/cts/scheduler/exp/pending-node-no-uname.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/per-node-attrs.exp b/cts/scheduler/exp/per-node-attrs.exp index 9095ed894cb..db7f11ade93 100644 --- a/cts/scheduler/exp/per-node-attrs.exp +++ b/cts/scheduler/exp/per-node-attrs.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/per-op-failcount.exp b/cts/scheduler/exp/per-op-failcount.exp index 2a4eec5204f..ad634368738 100644 --- a/cts/scheduler/exp/per-op-failcount.exp +++ b/cts/scheduler/exp/per-op-failcount.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/placement-capacity.exp b/cts/scheduler/exp/placement-capacity.exp index a308bd0ead3..85229c6877e 100644 --- a/cts/scheduler/exp/placement-capacity.exp +++ b/cts/scheduler/exp/placement-capacity.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/placement-location.exp b/cts/scheduler/exp/placement-location.exp index a308bd0ead3..85229c6877e 100644 --- a/cts/scheduler/exp/placement-location.exp +++ b/cts/scheduler/exp/placement-location.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/placement-priority.exp b/cts/scheduler/exp/placement-priority.exp index 1ee5b622426..67c3b0b0152 100644 --- a/cts/scheduler/exp/placement-priority.exp +++ b/cts/scheduler/exp/placement-priority.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/placement-stickiness.exp b/cts/scheduler/exp/placement-stickiness.exp index a308bd0ead3..85229c6877e 100644 --- a/cts/scheduler/exp/placement-stickiness.exp +++ b/cts/scheduler/exp/placement-stickiness.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/primitive-with-group-with-clone.exp b/cts/scheduler/exp/primitive-with-group-with-clone.exp index 1a2db5b5350..ac0d5ee9e31 100644 --- a/cts/scheduler/exp/primitive-with-group-with-clone.exp +++ b/cts/scheduler/exp/primitive-with-group-with-clone.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/primitive-with-group-with-promoted.exp b/cts/scheduler/exp/primitive-with-group-with-promoted.exp index ac7655b6ffe..5f132fe9d80 100644 --- a/cts/scheduler/exp/primitive-with-group-with-promoted.exp +++ b/cts/scheduler/exp/primitive-with-group-with-promoted.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/primitive-with-unrunnable-group.exp b/cts/scheduler/exp/primitive-with-unrunnable-group.exp index 2e4f0433b7d..1f592760d9c 100644 --- a/cts/scheduler/exp/primitive-with-unrunnable-group.exp +++ b/cts/scheduler/exp/primitive-with-unrunnable-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/priority-fencing-delay.exp b/cts/scheduler/exp/priority-fencing-delay.exp index c6315a1280a..828e359871a 100644 --- a/cts/scheduler/exp/priority-fencing-delay.exp +++ b/cts/scheduler/exp/priority-fencing-delay.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/probe-0.exp b/cts/scheduler/exp/probe-0.exp index d0ae0961802..42bc521028b 100644 --- a/cts/scheduler/exp/probe-0.exp +++ b/cts/scheduler/exp/probe-0.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/probe-1.exp b/cts/scheduler/exp/probe-1.exp index 3c045364d53..a53f879a001 100644 --- a/cts/scheduler/exp/probe-1.exp +++ b/cts/scheduler/exp/probe-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/probe-2.exp b/cts/scheduler/exp/probe-2.exp index 6dce2f4f516..d060034b0de 100644 --- a/cts/scheduler/exp/probe-2.exp +++ b/cts/scheduler/exp/probe-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/probe-3.exp b/cts/scheduler/exp/probe-3.exp index 915363575f9..122415b7ce5 100644 --- a/cts/scheduler/exp/probe-3.exp +++ b/cts/scheduler/exp/probe-3.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/probe-4.exp b/cts/scheduler/exp/probe-4.exp index 915363575f9..122415b7ce5 100644 --- a/cts/scheduler/exp/probe-4.exp +++ b/cts/scheduler/exp/probe-4.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/probe-pending-node.exp b/cts/scheduler/exp/probe-pending-node.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/probe-pending-node.exp +++ b/cts/scheduler/exp/probe-pending-node.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/probe-target-of-failed-migrate_to-1.exp b/cts/scheduler/exp/probe-target-of-failed-migrate_to-1.exp index 4c01d683d3e..60185f2fc72 100644 --- a/cts/scheduler/exp/probe-target-of-failed-migrate_to-1.exp +++ b/cts/scheduler/exp/probe-target-of-failed-migrate_to-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/probe-target-of-failed-migrate_to-2.exp b/cts/scheduler/exp/probe-target-of-failed-migrate_to-2.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/probe-target-of-failed-migrate_to-2.exp +++ b/cts/scheduler/exp/probe-target-of-failed-migrate_to-2.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/probe-timeout.exp b/cts/scheduler/exp/probe-timeout.exp index de5c526466b..63a664eec87 100644 --- a/cts/scheduler/exp/probe-timeout.exp +++ b/cts/scheduler/exp/probe-timeout.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-0.exp b/cts/scheduler/exp/promoted-0.exp index 946bb4f661a..4c8bf805771 100644 --- a/cts/scheduler/exp/promoted-0.exp +++ b/cts/scheduler/exp/promoted-0.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-1.exp b/cts/scheduler/exp/promoted-1.exp index 37a4a1a649a..b71965bb136 100644 --- a/cts/scheduler/exp/promoted-1.exp +++ b/cts/scheduler/exp/promoted-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-10.exp b/cts/scheduler/exp/promoted-10.exp index acea7949c95..87be2f62c24 100644 --- a/cts/scheduler/exp/promoted-10.exp +++ b/cts/scheduler/exp/promoted-10.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-11.exp b/cts/scheduler/exp/promoted-11.exp index 2861d1bf5c2..4a2e89630be 100644 --- a/cts/scheduler/exp/promoted-11.exp +++ b/cts/scheduler/exp/promoted-11.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-12.exp b/cts/scheduler/exp/promoted-12.exp index 66c1727df0f..019ab86d065 100644 --- a/cts/scheduler/exp/promoted-12.exp +++ b/cts/scheduler/exp/promoted-12.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-13.exp b/cts/scheduler/exp/promoted-13.exp index a071fca3197..a4c3956b31b 100644 --- a/cts/scheduler/exp/promoted-13.exp +++ b/cts/scheduler/exp/promoted-13.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-2.exp b/cts/scheduler/exp/promoted-2.exp index e57587fea65..31ce6deb054 100644 --- a/cts/scheduler/exp/promoted-2.exp +++ b/cts/scheduler/exp/promoted-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-3.exp b/cts/scheduler/exp/promoted-3.exp index 37a4a1a649a..b71965bb136 100644 --- a/cts/scheduler/exp/promoted-3.exp +++ b/cts/scheduler/exp/promoted-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-4.exp b/cts/scheduler/exp/promoted-4.exp index d8ce3114f1e..c457492d4d0 100644 --- a/cts/scheduler/exp/promoted-4.exp +++ b/cts/scheduler/exp/promoted-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-5.exp b/cts/scheduler/exp/promoted-5.exp index 5c631e6afab..7bf9288688b 100644 --- a/cts/scheduler/exp/promoted-5.exp +++ b/cts/scheduler/exp/promoted-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-6.exp b/cts/scheduler/exp/promoted-6.exp index 886e42723e7..e4e71904370 100644 --- a/cts/scheduler/exp/promoted-6.exp +++ b/cts/scheduler/exp/promoted-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-7.exp b/cts/scheduler/exp/promoted-7.exp index 37254434fb0..f9724adbf82 100644 --- a/cts/scheduler/exp/promoted-7.exp +++ b/cts/scheduler/exp/promoted-7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-8.exp b/cts/scheduler/exp/promoted-8.exp index bb411dc4d1a..eefd8506db3 100644 --- a/cts/scheduler/exp/promoted-8.exp +++ b/cts/scheduler/exp/promoted-8.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-9.exp b/cts/scheduler/exp/promoted-9.exp index 345af8d2f4b..901bf7119d4 100644 --- a/cts/scheduler/exp/promoted-9.exp +++ b/cts/scheduler/exp/promoted-9.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-allow-start.exp b/cts/scheduler/exp/promoted-allow-start.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/promoted-allow-start.exp +++ b/cts/scheduler/exp/promoted-allow-start.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/promoted-asymmetrical-order.exp b/cts/scheduler/exp/promoted-asymmetrical-order.exp index 6ec284c24b1..4ec75c7299f 100644 --- a/cts/scheduler/exp/promoted-asymmetrical-order.exp +++ b/cts/scheduler/exp/promoted-asymmetrical-order.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-colocation.exp b/cts/scheduler/exp/promoted-colocation.exp index 5af59ef79e1..faf8f3d02ec 100644 --- a/cts/scheduler/exp/promoted-colocation.exp +++ b/cts/scheduler/exp/promoted-colocation.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-demote-2.exp b/cts/scheduler/exp/promoted-demote-2.exp index 7e5943a3ecb..d21a5ff69f1 100644 --- a/cts/scheduler/exp/promoted-demote-2.exp +++ b/cts/scheduler/exp/promoted-demote-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-demote-block.exp b/cts/scheduler/exp/promoted-demote-block.exp index 24d03013019..794f4c56ca7 100644 --- a/cts/scheduler/exp/promoted-demote-block.exp +++ b/cts/scheduler/exp/promoted-demote-block.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-demote.exp b/cts/scheduler/exp/promoted-demote.exp index 177eb394b68..2df2140f4c7 100644 --- a/cts/scheduler/exp/promoted-demote.exp +++ b/cts/scheduler/exp/promoted-demote.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-depend.exp b/cts/scheduler/exp/promoted-depend.exp index 3c0d5892041..89d30b37d2d 100644 --- a/cts/scheduler/exp/promoted-depend.exp +++ b/cts/scheduler/exp/promoted-depend.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-dependent-ban.exp b/cts/scheduler/exp/promoted-dependent-ban.exp index 228f17ea787..559d933c1fb 100644 --- a/cts/scheduler/exp/promoted-dependent-ban.exp +++ b/cts/scheduler/exp/promoted-dependent-ban.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-failed-demote-2.exp b/cts/scheduler/exp/promoted-failed-demote-2.exp index 81ed8df0be4..1565a998367 100644 --- a/cts/scheduler/exp/promoted-failed-demote-2.exp +++ b/cts/scheduler/exp/promoted-failed-demote-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-failed-demote.exp b/cts/scheduler/exp/promoted-failed-demote.exp index 69e6b39ab42..2451c202eff 100644 --- a/cts/scheduler/exp/promoted-failed-demote.exp +++ b/cts/scheduler/exp/promoted-failed-demote.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-group.exp b/cts/scheduler/exp/promoted-group.exp index ef7e0937d0f..171f0991464 100644 --- a/cts/scheduler/exp/promoted-group.exp +++ b/cts/scheduler/exp/promoted-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-move.exp b/cts/scheduler/exp/promoted-move.exp index 8abcd1cad68..4ae4d4d2667 100644 --- a/cts/scheduler/exp/promoted-move.exp +++ b/cts/scheduler/exp/promoted-move.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-notify.exp b/cts/scheduler/exp/promoted-notify.exp index 1ddc78d830a..dad5db5e4fc 100644 --- a/cts/scheduler/exp/promoted-notify.exp +++ b/cts/scheduler/exp/promoted-notify.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-ordering.exp b/cts/scheduler/exp/promoted-ordering.exp index 430fbe64af2..3835a47b573 100644 --- a/cts/scheduler/exp/promoted-ordering.exp +++ b/cts/scheduler/exp/promoted-ordering.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-partially-demoted-group.exp b/cts/scheduler/exp/promoted-partially-demoted-group.exp index 4cf89e1a971..cd87291430d 100644 --- a/cts/scheduler/exp/promoted-partially-demoted-group.exp +++ b/cts/scheduler/exp/promoted-partially-demoted-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-probed-score.exp b/cts/scheduler/exp/promoted-probed-score.exp index 0952700b1f6..5f1d617388b 100644 --- a/cts/scheduler/exp/promoted-probed-score.exp +++ b/cts/scheduler/exp/promoted-probed-score.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-promotion-constraint.exp b/cts/scheduler/exp/promoted-promotion-constraint.exp index 88ed2fcc312..3c61f6e292a 100644 --- a/cts/scheduler/exp/promoted-promotion-constraint.exp +++ b/cts/scheduler/exp/promoted-promotion-constraint.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-pseudo.exp b/cts/scheduler/exp/promoted-pseudo.exp index 839ea0892e4..a712ac362d4 100644 --- a/cts/scheduler/exp/promoted-pseudo.exp +++ b/cts/scheduler/exp/promoted-pseudo.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-reattach.exp b/cts/scheduler/exp/promoted-reattach.exp index 263f6071bff..fa3be62737b 100644 --- a/cts/scheduler/exp/promoted-reattach.exp +++ b/cts/scheduler/exp/promoted-reattach.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-role.exp b/cts/scheduler/exp/promoted-role.exp index 09ace88dc03..fb09a318691 100644 --- a/cts/scheduler/exp/promoted-role.exp +++ b/cts/scheduler/exp/promoted-role.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-score-startup.exp b/cts/scheduler/exp/promoted-score-startup.exp index 5ad369d137a..671067041b3 100644 --- a/cts/scheduler/exp/promoted-score-startup.exp +++ b/cts/scheduler/exp/promoted-score-startup.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-stop.exp b/cts/scheduler/exp/promoted-stop.exp index 3bef5e6eac9..d9bc24b8f17 100644 --- a/cts/scheduler/exp/promoted-stop.exp +++ b/cts/scheduler/exp/promoted-stop.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-unmanaged-monitor.exp b/cts/scheduler/exp/promoted-unmanaged-monitor.exp index bd53d1fb29b..0e07531c39f 100644 --- a/cts/scheduler/exp/promoted-unmanaged-monitor.exp +++ b/cts/scheduler/exp/promoted-unmanaged-monitor.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted-with-blocked.exp b/cts/scheduler/exp/promoted-with-blocked.exp index 540963bcd70..2b2fc6e26f7 100644 --- a/cts/scheduler/exp/promoted-with-blocked.exp +++ b/cts/scheduler/exp/promoted-with-blocked.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/promoted_monitor_restart.exp b/cts/scheduler/exp/promoted_monitor_restart.exp index fff4400f900..fc9d306aa62 100644 --- a/cts/scheduler/exp/promoted_monitor_restart.exp +++ b/cts/scheduler/exp/promoted_monitor_restart.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/quorum-1.exp b/cts/scheduler/exp/quorum-1.exp index 9390e9e3f96..02f25dfecef 100644 --- a/cts/scheduler/exp/quorum-1.exp +++ b/cts/scheduler/exp/quorum-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/quorum-2.exp b/cts/scheduler/exp/quorum-2.exp index 2542dbdb20c..fafac9ad545 100644 --- a/cts/scheduler/exp/quorum-2.exp +++ b/cts/scheduler/exp/quorum-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/quorum-3.exp b/cts/scheduler/exp/quorum-3.exp index 3d098e9751e..5cc79740750 100644 --- a/cts/scheduler/exp/quorum-3.exp +++ b/cts/scheduler/exp/quorum-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/quorum-4.exp b/cts/scheduler/exp/quorum-4.exp index ed273bc5c2f..b6a634b91c4 100644 --- a/cts/scheduler/exp/quorum-4.exp +++ b/cts/scheduler/exp/quorum-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/quorum-5.exp b/cts/scheduler/exp/quorum-5.exp index 8372eda2024..67a6978f3cd 100644 --- a/cts/scheduler/exp/quorum-5.exp +++ b/cts/scheduler/exp/quorum-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/quorum-6.exp b/cts/scheduler/exp/quorum-6.exp index 263e33c3bb0..621065a89d4 100644 --- a/cts/scheduler/exp/quorum-6.exp +++ b/cts/scheduler/exp/quorum-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rebalance-unique-clones.exp b/cts/scheduler/exp/rebalance-unique-clones.exp index a5d8ee63648..f3ebe6fec7a 100644 --- a/cts/scheduler/exp/rebalance-unique-clones.exp +++ b/cts/scheduler/exp/rebalance-unique-clones.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-1.exp b/cts/scheduler/exp/rec-node-1.exp index 5803a0486ac..b899fe9bb4d 100644 --- a/cts/scheduler/exp/rec-node-1.exp +++ b/cts/scheduler/exp/rec-node-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-10.exp b/cts/scheduler/exp/rec-node-10.exp index 7dd8a26e4e9..e1cbcd35af1 100644 --- a/cts/scheduler/exp/rec-node-10.exp +++ b/cts/scheduler/exp/rec-node-10.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-11.exp b/cts/scheduler/exp/rec-node-11.exp index d48cf294139..8ae83e982a4 100644 --- a/cts/scheduler/exp/rec-node-11.exp +++ b/cts/scheduler/exp/rec-node-11.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-12.exp b/cts/scheduler/exp/rec-node-12.exp index 404b2759e5c..fd3c7a09235 100644 --- a/cts/scheduler/exp/rec-node-12.exp +++ b/cts/scheduler/exp/rec-node-12.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-13.exp b/cts/scheduler/exp/rec-node-13.exp index cfcca4f589f..5b5d2aa3291 100644 --- a/cts/scheduler/exp/rec-node-13.exp +++ b/cts/scheduler/exp/rec-node-13.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-14.exp b/cts/scheduler/exp/rec-node-14.exp index dafcc51c538..c3f87339ca2 100644 --- a/cts/scheduler/exp/rec-node-14.exp +++ b/cts/scheduler/exp/rec-node-14.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-15.exp b/cts/scheduler/exp/rec-node-15.exp index c3ee5b750be..2477e3ff5b3 100644 --- a/cts/scheduler/exp/rec-node-15.exp +++ b/cts/scheduler/exp/rec-node-15.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-2.exp b/cts/scheduler/exp/rec-node-2.exp index 1e7d49ae9ab..3e622031dab 100644 --- a/cts/scheduler/exp/rec-node-2.exp +++ b/cts/scheduler/exp/rec-node-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-3.exp b/cts/scheduler/exp/rec-node-3.exp index 5803a0486ac..b899fe9bb4d 100644 --- a/cts/scheduler/exp/rec-node-3.exp +++ b/cts/scheduler/exp/rec-node-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-4.exp b/cts/scheduler/exp/rec-node-4.exp index 2186040d8d4..1044ef25dca 100644 --- a/cts/scheduler/exp/rec-node-4.exp +++ b/cts/scheduler/exp/rec-node-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-5.exp b/cts/scheduler/exp/rec-node-5.exp index 96bb9922a76..aee9ca38e18 100644 --- a/cts/scheduler/exp/rec-node-5.exp +++ b/cts/scheduler/exp/rec-node-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-6.exp b/cts/scheduler/exp/rec-node-6.exp index 2186040d8d4..1044ef25dca 100644 --- a/cts/scheduler/exp/rec-node-6.exp +++ b/cts/scheduler/exp/rec-node-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-7.exp b/cts/scheduler/exp/rec-node-7.exp index 2186040d8d4..1044ef25dca 100644 --- a/cts/scheduler/exp/rec-node-7.exp +++ b/cts/scheduler/exp/rec-node-7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-8.exp b/cts/scheduler/exp/rec-node-8.exp index 3dfc34359e5..707748d6538 100644 --- a/cts/scheduler/exp/rec-node-8.exp +++ b/cts/scheduler/exp/rec-node-8.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-node-9.exp b/cts/scheduler/exp/rec-node-9.exp index ad6ec28e8b2..c0695c65850 100644 --- a/cts/scheduler/exp/rec-node-9.exp +++ b/cts/scheduler/exp/rec-node-9.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-rsc-0.exp b/cts/scheduler/exp/rec-rsc-0.exp index 3d4fa121c3c..24fbe4e1bfa 100644 --- a/cts/scheduler/exp/rec-rsc-0.exp +++ b/cts/scheduler/exp/rec-rsc-0.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-rsc-1.exp b/cts/scheduler/exp/rec-rsc-1.exp index c132ad0fabe..582456eeb87 100644 --- a/cts/scheduler/exp/rec-rsc-1.exp +++ b/cts/scheduler/exp/rec-rsc-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-rsc-2.exp b/cts/scheduler/exp/rec-rsc-2.exp index 170f1e25aef..b6373496103 100644 --- a/cts/scheduler/exp/rec-rsc-2.exp +++ b/cts/scheduler/exp/rec-rsc-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-rsc-3.exp b/cts/scheduler/exp/rec-rsc-3.exp index 0aa20fea0cf..7b8739687be 100644 --- a/cts/scheduler/exp/rec-rsc-3.exp +++ b/cts/scheduler/exp/rec-rsc-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-rsc-4.exp b/cts/scheduler/exp/rec-rsc-4.exp index d08e890aa49..3aedd6688b3 100644 --- a/cts/scheduler/exp/rec-rsc-4.exp +++ b/cts/scheduler/exp/rec-rsc-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-rsc-5.exp b/cts/scheduler/exp/rec-rsc-5.exp index 0e8e6b4b777..e6ab4d0c125 100644 --- a/cts/scheduler/exp/rec-rsc-5.exp +++ b/cts/scheduler/exp/rec-rsc-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-rsc-6.exp b/cts/scheduler/exp/rec-rsc-6.exp index 20163f11466..1b3f450f9ea 100644 --- a/cts/scheduler/exp/rec-rsc-6.exp +++ b/cts/scheduler/exp/rec-rsc-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-rsc-7.exp b/cts/scheduler/exp/rec-rsc-7.exp index 3d4fa121c3c..24fbe4e1bfa 100644 --- a/cts/scheduler/exp/rec-rsc-7.exp +++ b/cts/scheduler/exp/rec-rsc-7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rec-rsc-8.exp b/cts/scheduler/exp/rec-rsc-8.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/rec-rsc-8.exp +++ b/cts/scheduler/exp/rec-rsc-8.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/rec-rsc-9.exp b/cts/scheduler/exp/rec-rsc-9.exp index dece3fea5e5..b9533b3b0a2 100644 --- a/cts/scheduler/exp/rec-rsc-9.exp +++ b/cts/scheduler/exp/rec-rsc-9.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/reload-becomes-restart.exp b/cts/scheduler/exp/reload-becomes-restart.exp index 224b8d2bccd..97e276d7aae 100644 --- a/cts/scheduler/exp/reload-becomes-restart.exp +++ b/cts/scheduler/exp/reload-becomes-restart.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-connection-shutdown.exp b/cts/scheduler/exp/remote-connection-shutdown.exp index f3c3424faa2..2e04bc73afa 100644 --- a/cts/scheduler/exp/remote-connection-shutdown.exp +++ b/cts/scheduler/exp/remote-connection-shutdown.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-connection-unrecoverable.exp b/cts/scheduler/exp/remote-connection-unrecoverable.exp index d57c1066278..41357742b0e 100644 --- a/cts/scheduler/exp/remote-connection-unrecoverable.exp +++ b/cts/scheduler/exp/remote-connection-unrecoverable.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-disable.exp b/cts/scheduler/exp/remote-disable.exp index 60900021d36..1dcf9116684 100644 --- a/cts/scheduler/exp/remote-disable.exp +++ b/cts/scheduler/exp/remote-disable.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-fence-before-reconnect.exp b/cts/scheduler/exp/remote-fence-before-reconnect.exp index f506f85435c..26ed3d0791c 100644 --- a/cts/scheduler/exp/remote-fence-before-reconnect.exp +++ b/cts/scheduler/exp/remote-fence-before-reconnect.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-fence-unclean-3.exp b/cts/scheduler/exp/remote-fence-unclean-3.exp index a51cea91d4d..66ed145dc50 100644 --- a/cts/scheduler/exp/remote-fence-unclean-3.exp +++ b/cts/scheduler/exp/remote-fence-unclean-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-fence-unclean.exp b/cts/scheduler/exp/remote-fence-unclean.exp index 35bd59005ab..9645ed4e1d9 100644 --- a/cts/scheduler/exp/remote-fence-unclean.exp +++ b/cts/scheduler/exp/remote-fence-unclean.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-fence-unclean2.exp b/cts/scheduler/exp/remote-fence-unclean2.exp index 2f55ad8dcd8..f052956a2ba 100644 --- a/cts/scheduler/exp/remote-fence-unclean2.exp +++ b/cts/scheduler/exp/remote-fence-unclean2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-move.exp b/cts/scheduler/exp/remote-move.exp index c48eba8bfff..87a3d4fa86d 100644 --- a/cts/scheduler/exp/remote-move.exp +++ b/cts/scheduler/exp/remote-move.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-orphaned.exp b/cts/scheduler/exp/remote-orphaned.exp index a19d2ec5b4f..384fc37b460 100644 --- a/cts/scheduler/exp/remote-orphaned.exp +++ b/cts/scheduler/exp/remote-orphaned.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-orphaned2.exp b/cts/scheduler/exp/remote-orphaned2.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/remote-orphaned2.exp +++ b/cts/scheduler/exp/remote-orphaned2.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/remote-partial-migrate.exp b/cts/scheduler/exp/remote-partial-migrate.exp index b0120ec429d..6778964b043 100644 --- a/cts/scheduler/exp/remote-partial-migrate.exp +++ b/cts/scheduler/exp/remote-partial-migrate.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-partial-migrate2.exp b/cts/scheduler/exp/remote-partial-migrate2.exp index 473b5c3fc67..deed9e0cd88 100644 --- a/cts/scheduler/exp/remote-partial-migrate2.exp +++ b/cts/scheduler/exp/remote-partial-migrate2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-probe-disable.exp b/cts/scheduler/exp/remote-probe-disable.exp index a45b1bf7d83..bc00fd40c91 100644 --- a/cts/scheduler/exp/remote-probe-disable.exp +++ b/cts/scheduler/exp/remote-probe-disable.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-reconnect-delay.exp b/cts/scheduler/exp/remote-reconnect-delay.exp index 6f9a2856121..d42d970a47d 100644 --- a/cts/scheduler/exp/remote-reconnect-delay.exp +++ b/cts/scheduler/exp/remote-reconnect-delay.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-recover-all.exp b/cts/scheduler/exp/remote-recover-all.exp index 50477196d59..3a0745f77ee 100644 --- a/cts/scheduler/exp/remote-recover-all.exp +++ b/cts/scheduler/exp/remote-recover-all.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-recover-connection.exp b/cts/scheduler/exp/remote-recover-connection.exp index 9685627c1ee..e208355b927 100644 --- a/cts/scheduler/exp/remote-recover-connection.exp +++ b/cts/scheduler/exp/remote-recover-connection.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-recover-fail.exp b/cts/scheduler/exp/remote-recover-fail.exp index d23141922b6..3a1d39c8ae9 100644 --- a/cts/scheduler/exp/remote-recover-fail.exp +++ b/cts/scheduler/exp/remote-recover-fail.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-recover-no-resources.exp b/cts/scheduler/exp/remote-recover-no-resources.exp index af8c941c906..49339cc04a9 100644 --- a/cts/scheduler/exp/remote-recover-no-resources.exp +++ b/cts/scheduler/exp/remote-recover-no-resources.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-recover-unknown.exp b/cts/scheduler/exp/remote-recover-unknown.exp index f08b349c65d..dc9d134a49a 100644 --- a/cts/scheduler/exp/remote-recover-unknown.exp +++ b/cts/scheduler/exp/remote-recover-unknown.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-recover.exp b/cts/scheduler/exp/remote-recover.exp index 918db8d4fe2..248c1f89127 100644 --- a/cts/scheduler/exp/remote-recover.exp +++ b/cts/scheduler/exp/remote-recover.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-recovery.exp b/cts/scheduler/exp/remote-recovery.exp index 9685627c1ee..e208355b927 100644 --- a/cts/scheduler/exp/remote-recovery.exp +++ b/cts/scheduler/exp/remote-recovery.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-stale-node-entry.exp b/cts/scheduler/exp/remote-stale-node-entry.exp index a48ef709c7b..ffcc42d1dc6 100644 --- a/cts/scheduler/exp/remote-stale-node-entry.exp +++ b/cts/scheduler/exp/remote-stale-node-entry.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-start-fail.exp b/cts/scheduler/exp/remote-start-fail.exp index a71c9085f4f..096facadb03 100644 --- a/cts/scheduler/exp/remote-start-fail.exp +++ b/cts/scheduler/exp/remote-start-fail.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-startup-probes.exp b/cts/scheduler/exp/remote-startup-probes.exp index 8ad95e975af..4bd09ebcce5 100644 --- a/cts/scheduler/exp/remote-startup-probes.exp +++ b/cts/scheduler/exp/remote-startup-probes.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-startup.exp b/cts/scheduler/exp/remote-startup.exp index 636154eb2a8..9ef465e91e4 100644 --- a/cts/scheduler/exp/remote-startup.exp +++ b/cts/scheduler/exp/remote-startup.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/remote-unclean2.exp b/cts/scheduler/exp/remote-unclean2.exp index 11e6fe11ece..a3f9819c308 100644 --- a/cts/scheduler/exp/remote-unclean2.exp +++ b/cts/scheduler/exp/remote-unclean2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/reprobe-target_rc.exp b/cts/scheduler/exp/reprobe-target_rc.exp index 8fc082d1110..bf55a77544a 100644 --- a/cts/scheduler/exp/reprobe-target_rc.exp +++ b/cts/scheduler/exp/reprobe-target_rc.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/resource-discovery.exp b/cts/scheduler/exp/resource-discovery.exp index f62c257711f..23e383ec5ac 100644 --- a/cts/scheduler/exp/resource-discovery.exp +++ b/cts/scheduler/exp/resource-discovery.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/restart-with-extra-op-params.exp b/cts/scheduler/exp/restart-with-extra-op-params.exp index 6d119b66ec2..6e4e5a11a1d 100644 --- a/cts/scheduler/exp/restart-with-extra-op-params.exp +++ b/cts/scheduler/exp/restart-with-extra-op-params.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/route-remote-notify.exp b/cts/scheduler/exp/route-remote-notify.exp index 57e228b376d..1a0aa7b5067 100644 --- a/cts/scheduler/exp/route-remote-notify.exp +++ b/cts/scheduler/exp/route-remote-notify.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc-defaults-2.exp b/cts/scheduler/exp/rsc-defaults-2.exp index e9e1b5f4473..b0ab2e81577 100644 --- a/cts/scheduler/exp/rsc-defaults-2.exp +++ b/cts/scheduler/exp/rsc-defaults-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc-defaults.exp b/cts/scheduler/exp/rsc-defaults.exp index 11cb2182094..a6e719b20fd 100644 --- a/cts/scheduler/exp/rsc-defaults.exp +++ b/cts/scheduler/exp/rsc-defaults.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc-discovery-per-node.exp b/cts/scheduler/exp/rsc-discovery-per-node.exp index 967f0a4eba3..dd37cb1ebf9 100644 --- a/cts/scheduler/exp/rsc-discovery-per-node.exp +++ b/cts/scheduler/exp/rsc-discovery-per-node.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc-maintenance.exp b/cts/scheduler/exp/rsc-maintenance.exp index ede1171adb4..bbda7b1d545 100644 --- a/cts/scheduler/exp/rsc-maintenance.exp +++ b/cts/scheduler/exp/rsc-maintenance.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc-sets-clone-1.exp b/cts/scheduler/exp/rsc-sets-clone-1.exp index bdca03ae1ab..c0305908a79 100644 --- a/cts/scheduler/exp/rsc-sets-clone-1.exp +++ b/cts/scheduler/exp/rsc-sets-clone-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc-sets-clone.exp b/cts/scheduler/exp/rsc-sets-clone.exp index d1ff52f3000..0aefb4a8e4c 100644 --- a/cts/scheduler/exp/rsc-sets-clone.exp +++ b/cts/scheduler/exp/rsc-sets-clone.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc-sets-promoted.exp b/cts/scheduler/exp/rsc-sets-promoted.exp index 7ed1232b943..fef2fcfbd35 100644 --- a/cts/scheduler/exp/rsc-sets-promoted.exp +++ b/cts/scheduler/exp/rsc-sets-promoted.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc-sets-seq-false.exp b/cts/scheduler/exp/rsc-sets-seq-false.exp index b3f22c06da4..245c934f052 100644 --- a/cts/scheduler/exp/rsc-sets-seq-false.exp +++ b/cts/scheduler/exp/rsc-sets-seq-false.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc-sets-seq-true.exp b/cts/scheduler/exp/rsc-sets-seq-true.exp index 5d2f3716609..04d62183f0f 100644 --- a/cts/scheduler/exp/rsc-sets-seq-true.exp +++ b/cts/scheduler/exp/rsc-sets-seq-true.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc_dep1.exp b/cts/scheduler/exp/rsc_dep1.exp index bb301d15106..41cb1b77e5d 100644 --- a/cts/scheduler/exp/rsc_dep1.exp +++ b/cts/scheduler/exp/rsc_dep1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc_dep10.exp b/cts/scheduler/exp/rsc_dep10.exp index d0c8ee34d23..e444b048ad5 100644 --- a/cts/scheduler/exp/rsc_dep10.exp +++ b/cts/scheduler/exp/rsc_dep10.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc_dep2.exp b/cts/scheduler/exp/rsc_dep2.exp index 9bd49159900..3baf7c66710 100644 --- a/cts/scheduler/exp/rsc_dep2.exp +++ b/cts/scheduler/exp/rsc_dep2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc_dep3.exp b/cts/scheduler/exp/rsc_dep3.exp index d3b80140f32..d71d6b094d6 100644 --- a/cts/scheduler/exp/rsc_dep3.exp +++ b/cts/scheduler/exp/rsc_dep3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc_dep4.exp b/cts/scheduler/exp/rsc_dep4.exp index 1e7bec68abf..0458c055da7 100644 --- a/cts/scheduler/exp/rsc_dep4.exp +++ b/cts/scheduler/exp/rsc_dep4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc_dep5.exp b/cts/scheduler/exp/rsc_dep5.exp index 0847f94fe61..66daa641073 100644 --- a/cts/scheduler/exp/rsc_dep5.exp +++ b/cts/scheduler/exp/rsc_dep5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc_dep7.exp b/cts/scheduler/exp/rsc_dep7.exp index b18a9016f02..f0bcadf9f3e 100644 --- a/cts/scheduler/exp/rsc_dep7.exp +++ b/cts/scheduler/exp/rsc_dep7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rsc_dep8.exp b/cts/scheduler/exp/rsc_dep8.exp index 9bd49159900..3baf7c66710 100644 --- a/cts/scheduler/exp/rsc_dep8.exp +++ b/cts/scheduler/exp/rsc_dep8.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rule-dbl-as-auto-number-match.exp b/cts/scheduler/exp/rule-dbl-as-auto-number-match.exp index 002df23ce61..c15a8515e80 100644 --- a/cts/scheduler/exp/rule-dbl-as-auto-number-match.exp +++ b/cts/scheduler/exp/rule-dbl-as-auto-number-match.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rule-dbl-as-auto-number-no-match.exp b/cts/scheduler/exp/rule-dbl-as-auto-number-no-match.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/rule-dbl-as-auto-number-no-match.exp +++ b/cts/scheduler/exp/rule-dbl-as-auto-number-no-match.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/rule-dbl-as-integer-match.exp b/cts/scheduler/exp/rule-dbl-as-integer-match.exp index 002df23ce61..c15a8515e80 100644 --- a/cts/scheduler/exp/rule-dbl-as-integer-match.exp +++ b/cts/scheduler/exp/rule-dbl-as-integer-match.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rule-dbl-as-integer-no-match.exp b/cts/scheduler/exp/rule-dbl-as-integer-no-match.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/rule-dbl-as-integer-no-match.exp +++ b/cts/scheduler/exp/rule-dbl-as-integer-no-match.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/rule-dbl-as-number-match.exp b/cts/scheduler/exp/rule-dbl-as-number-match.exp index 002df23ce61..c15a8515e80 100644 --- a/cts/scheduler/exp/rule-dbl-as-number-match.exp +++ b/cts/scheduler/exp/rule-dbl-as-number-match.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rule-dbl-as-number-no-match.exp b/cts/scheduler/exp/rule-dbl-as-number-no-match.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/rule-dbl-as-number-no-match.exp +++ b/cts/scheduler/exp/rule-dbl-as-number-no-match.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/rule-dbl-parse-fail-default-str-match.exp b/cts/scheduler/exp/rule-dbl-parse-fail-default-str-match.exp index 002df23ce61..c15a8515e80 100644 --- a/cts/scheduler/exp/rule-dbl-parse-fail-default-str-match.exp +++ b/cts/scheduler/exp/rule-dbl-parse-fail-default-str-match.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rule-dbl-parse-fail-default-str-no-match.exp b/cts/scheduler/exp/rule-dbl-parse-fail-default-str-no-match.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/rule-dbl-parse-fail-default-str-no-match.exp +++ b/cts/scheduler/exp/rule-dbl-parse-fail-default-str-no-match.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/rule-int-as-auto-integer-match.exp b/cts/scheduler/exp/rule-int-as-auto-integer-match.exp index 002df23ce61..c15a8515e80 100644 --- a/cts/scheduler/exp/rule-int-as-auto-integer-match.exp +++ b/cts/scheduler/exp/rule-int-as-auto-integer-match.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rule-int-as-auto-integer-no-match.exp b/cts/scheduler/exp/rule-int-as-auto-integer-no-match.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/rule-int-as-auto-integer-no-match.exp +++ b/cts/scheduler/exp/rule-int-as-auto-integer-no-match.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/rule-int-as-integer-match.exp b/cts/scheduler/exp/rule-int-as-integer-match.exp index 002df23ce61..c15a8515e80 100644 --- a/cts/scheduler/exp/rule-int-as-integer-match.exp +++ b/cts/scheduler/exp/rule-int-as-integer-match.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rule-int-as-integer-no-match.exp b/cts/scheduler/exp/rule-int-as-integer-no-match.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/rule-int-as-integer-no-match.exp +++ b/cts/scheduler/exp/rule-int-as-integer-no-match.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/rule-int-as-number-match.exp b/cts/scheduler/exp/rule-int-as-number-match.exp index 002df23ce61..c15a8515e80 100644 --- a/cts/scheduler/exp/rule-int-as-number-match.exp +++ b/cts/scheduler/exp/rule-int-as-number-match.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rule-int-as-number-no-match.exp b/cts/scheduler/exp/rule-int-as-number-no-match.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/rule-int-as-number-no-match.exp +++ b/cts/scheduler/exp/rule-int-as-number-no-match.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/rule-int-parse-fail-default-str-match.exp b/cts/scheduler/exp/rule-int-parse-fail-default-str-match.exp index 002df23ce61..c15a8515e80 100644 --- a/cts/scheduler/exp/rule-int-parse-fail-default-str-match.exp +++ b/cts/scheduler/exp/rule-int-parse-fail-default-str-match.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/rule-int-parse-fail-default-str-no-match.exp b/cts/scheduler/exp/rule-int-parse-fail-default-str-no-match.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/rule-int-parse-fail-default-str-no-match.exp +++ b/cts/scheduler/exp/rule-int-parse-fail-default-str-no-match.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/shutdown-lock-expiration.exp b/cts/scheduler/exp/shutdown-lock-expiration.exp index 9941333b90a..a8aa51bee2f 100644 --- a/cts/scheduler/exp/shutdown-lock-expiration.exp +++ b/cts/scheduler/exp/shutdown-lock-expiration.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/shutdown-lock.exp b/cts/scheduler/exp/shutdown-lock.exp index e8bf9d869db..6ce795403cd 100644 --- a/cts/scheduler/exp/shutdown-lock.exp +++ b/cts/scheduler/exp/shutdown-lock.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/shutdown-maintenance-node.exp b/cts/scheduler/exp/shutdown-maintenance-node.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/shutdown-maintenance-node.exp +++ b/cts/scheduler/exp/shutdown-maintenance-node.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/simple1.exp b/cts/scheduler/exp/simple1.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/simple1.exp +++ b/cts/scheduler/exp/simple1.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/simple11.exp b/cts/scheduler/exp/simple11.exp index bf9506ee85a..2163247c498 100644 --- a/cts/scheduler/exp/simple11.exp +++ b/cts/scheduler/exp/simple11.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/simple12.exp b/cts/scheduler/exp/simple12.exp index e7c87d7a3f3..890dac12db6 100644 --- a/cts/scheduler/exp/simple12.exp +++ b/cts/scheduler/exp/simple12.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/simple2.exp b/cts/scheduler/exp/simple2.exp index 367ce6eba23..4050f8ac2f1 100644 --- a/cts/scheduler/exp/simple2.exp +++ b/cts/scheduler/exp/simple2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/simple3.exp b/cts/scheduler/exp/simple3.exp index e89ec609ef8..42990b00dbe 100644 --- a/cts/scheduler/exp/simple3.exp +++ b/cts/scheduler/exp/simple3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/simple4.exp b/cts/scheduler/exp/simple4.exp index e01f4295905..f0e8a634101 100644 --- a/cts/scheduler/exp/simple4.exp +++ b/cts/scheduler/exp/simple4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/simple6.exp b/cts/scheduler/exp/simple6.exp index bcb68f80d09..bf802d5f91a 100644 --- a/cts/scheduler/exp/simple6.exp +++ b/cts/scheduler/exp/simple6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/simple7.exp b/cts/scheduler/exp/simple7.exp index c11c46162a8..186fab91abb 100644 --- a/cts/scheduler/exp/simple7.exp +++ b/cts/scheduler/exp/simple7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/simple8.exp b/cts/scheduler/exp/simple8.exp index 1728f133c7b..842de2e0012 100644 --- a/cts/scheduler/exp/simple8.exp +++ b/cts/scheduler/exp/simple8.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/site-specific-params.exp b/cts/scheduler/exp/site-specific-params.exp index 6644ecb2a2a..47ab1b0b2c9 100644 --- a/cts/scheduler/exp/site-specific-params.exp +++ b/cts/scheduler/exp/site-specific-params.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/standby.exp b/cts/scheduler/exp/standby.exp index 56cda3e472d..736c858546e 100644 --- a/cts/scheduler/exp/standby.exp +++ b/cts/scheduler/exp/standby.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/start-then-stop-with-unfence.exp b/cts/scheduler/exp/start-then-stop-with-unfence.exp index 69cfb63de71..c659279bb93 100644 --- a/cts/scheduler/exp/start-then-stop-with-unfence.exp +++ b/cts/scheduler/exp/start-then-stop-with-unfence.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stonith-0.exp b/cts/scheduler/exp/stonith-0.exp index 5dcce21d211..9463b906cb5 100644 --- a/cts/scheduler/exp/stonith-0.exp +++ b/cts/scheduler/exp/stonith-0.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stonith-1.exp b/cts/scheduler/exp/stonith-1.exp index dea6d0329bc..5460a4cd253 100644 --- a/cts/scheduler/exp/stonith-1.exp +++ b/cts/scheduler/exp/stonith-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stonith-2.exp b/cts/scheduler/exp/stonith-2.exp index 0c15f8344e6..2bf7888e1c5 100644 --- a/cts/scheduler/exp/stonith-2.exp +++ b/cts/scheduler/exp/stonith-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stonith-3.exp b/cts/scheduler/exp/stonith-3.exp index 09e13147f0a..8f15cb3f51a 100644 --- a/cts/scheduler/exp/stonith-3.exp +++ b/cts/scheduler/exp/stonith-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stonith-4.exp b/cts/scheduler/exp/stonith-4.exp index 4c9cc869444..7b0045023b8 100644 --- a/cts/scheduler/exp/stonith-4.exp +++ b/cts/scheduler/exp/stonith-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stop-all-resources.exp b/cts/scheduler/exp/stop-all-resources.exp index 478a28b302e..4288b21602d 100644 --- a/cts/scheduler/exp/stop-all-resources.exp +++ b/cts/scheduler/exp/stop-all-resources.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stop-failure-no-fencing.exp b/cts/scheduler/exp/stop-failure-no-fencing.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/stop-failure-no-fencing.exp +++ b/cts/scheduler/exp/stop-failure-no-fencing.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/stop-failure-no-quorum.exp b/cts/scheduler/exp/stop-failure-no-quorum.exp index 8f6d252e05d..8134a880886 100644 --- a/cts/scheduler/exp/stop-failure-no-quorum.exp +++ b/cts/scheduler/exp/stop-failure-no-quorum.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stop-failure-with-fencing.exp b/cts/scheduler/exp/stop-failure-with-fencing.exp index 6d0e6af3990..1247e78774c 100644 --- a/cts/scheduler/exp/stop-failure-with-fencing.exp +++ b/cts/scheduler/exp/stop-failure-with-fencing.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stop-unexpected-2.exp b/cts/scheduler/exp/stop-unexpected-2.exp index 258053c0898..bf1863feff6 100644 --- a/cts/scheduler/exp/stop-unexpected-2.exp +++ b/cts/scheduler/exp/stop-unexpected-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stop-unexpected.exp b/cts/scheduler/exp/stop-unexpected.exp index 1f94532f718..f74401f804f 100644 --- a/cts/scheduler/exp/stop-unexpected.exp +++ b/cts/scheduler/exp/stop-unexpected.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-00.exp b/cts/scheduler/exp/stopped-monitor-00.exp index 31c5d85e8a6..707cf6685c3 100644 --- a/cts/scheduler/exp/stopped-monitor-00.exp +++ b/cts/scheduler/exp/stopped-monitor-00.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-01.exp b/cts/scheduler/exp/stopped-monitor-01.exp index 13a3911943b..6897bd8f819 100644 --- a/cts/scheduler/exp/stopped-monitor-01.exp +++ b/cts/scheduler/exp/stopped-monitor-01.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-02.exp b/cts/scheduler/exp/stopped-monitor-02.exp index 6acbcc7d069..91b8d90c613 100644 --- a/cts/scheduler/exp/stopped-monitor-02.exp +++ b/cts/scheduler/exp/stopped-monitor-02.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-03.exp b/cts/scheduler/exp/stopped-monitor-03.exp index a192301e43c..2a9310a56a1 100644 --- a/cts/scheduler/exp/stopped-monitor-03.exp +++ b/cts/scheduler/exp/stopped-monitor-03.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-04.exp b/cts/scheduler/exp/stopped-monitor-04.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/stopped-monitor-04.exp +++ b/cts/scheduler/exp/stopped-monitor-04.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-05.exp b/cts/scheduler/exp/stopped-monitor-05.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/stopped-monitor-05.exp +++ b/cts/scheduler/exp/stopped-monitor-05.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-06.exp b/cts/scheduler/exp/stopped-monitor-06.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/stopped-monitor-06.exp +++ b/cts/scheduler/exp/stopped-monitor-06.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-07.exp b/cts/scheduler/exp/stopped-monitor-07.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/stopped-monitor-07.exp +++ b/cts/scheduler/exp/stopped-monitor-07.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-08.exp b/cts/scheduler/exp/stopped-monitor-08.exp index f885bafbe32..ba2372fb0a5 100644 --- a/cts/scheduler/exp/stopped-monitor-08.exp +++ b/cts/scheduler/exp/stopped-monitor-08.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-09.exp b/cts/scheduler/exp/stopped-monitor-09.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/stopped-monitor-09.exp +++ b/cts/scheduler/exp/stopped-monitor-09.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-10.exp b/cts/scheduler/exp/stopped-monitor-10.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/stopped-monitor-10.exp +++ b/cts/scheduler/exp/stopped-monitor-10.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-11.exp b/cts/scheduler/exp/stopped-monitor-11.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/stopped-monitor-11.exp +++ b/cts/scheduler/exp/stopped-monitor-11.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-12.exp b/cts/scheduler/exp/stopped-monitor-12.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/stopped-monitor-12.exp +++ b/cts/scheduler/exp/stopped-monitor-12.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-20.exp b/cts/scheduler/exp/stopped-monitor-20.exp index 3776be844f2..585c1482be3 100644 --- a/cts/scheduler/exp/stopped-monitor-20.exp +++ b/cts/scheduler/exp/stopped-monitor-20.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-21.exp b/cts/scheduler/exp/stopped-monitor-21.exp index 5ba941b8c95..03d5c373078 100644 --- a/cts/scheduler/exp/stopped-monitor-21.exp +++ b/cts/scheduler/exp/stopped-monitor-21.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-22.exp b/cts/scheduler/exp/stopped-monitor-22.exp index ffb767e4bee..3b65e823b2d 100644 --- a/cts/scheduler/exp/stopped-monitor-22.exp +++ b/cts/scheduler/exp/stopped-monitor-22.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-23.exp b/cts/scheduler/exp/stopped-monitor-23.exp index 96d376e0d7a..a94f879f798 100644 --- a/cts/scheduler/exp/stopped-monitor-23.exp +++ b/cts/scheduler/exp/stopped-monitor-23.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-24.exp b/cts/scheduler/exp/stopped-monitor-24.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/stopped-monitor-24.exp +++ b/cts/scheduler/exp/stopped-monitor-24.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-25.exp b/cts/scheduler/exp/stopped-monitor-25.exp index 059e808bf24..2c5a143ee94 100644 --- a/cts/scheduler/exp/stopped-monitor-25.exp +++ b/cts/scheduler/exp/stopped-monitor-25.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-26.exp b/cts/scheduler/exp/stopped-monitor-26.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/stopped-monitor-26.exp +++ b/cts/scheduler/exp/stopped-monitor-26.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-27.exp b/cts/scheduler/exp/stopped-monitor-27.exp index 059e808bf24..2c5a143ee94 100644 --- a/cts/scheduler/exp/stopped-monitor-27.exp +++ b/cts/scheduler/exp/stopped-monitor-27.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-30.exp b/cts/scheduler/exp/stopped-monitor-30.exp index 039b60de615..2f2c6c69bbd 100644 --- a/cts/scheduler/exp/stopped-monitor-30.exp +++ b/cts/scheduler/exp/stopped-monitor-30.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/stopped-monitor-31.exp b/cts/scheduler/exp/stopped-monitor-31.exp index 3500eda6aeb..3fac4a1e52b 100644 --- a/cts/scheduler/exp/stopped-monitor-31.exp +++ b/cts/scheduler/exp/stopped-monitor-31.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/suicide-needed-inquorate.exp b/cts/scheduler/exp/suicide-needed-inquorate.exp index bd0b69cc160..51858b7b535 100644 --- a/cts/scheduler/exp/suicide-needed-inquorate.exp +++ b/cts/scheduler/exp/suicide-needed-inquorate.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/suicide-not-needed-initial-quorum.exp b/cts/scheduler/exp/suicide-not-needed-initial-quorum.exp index 4a9dc66f8c3..fd7a6647c72 100644 --- a/cts/scheduler/exp/suicide-not-needed-initial-quorum.exp +++ b/cts/scheduler/exp/suicide-not-needed-initial-quorum.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/suicide-not-needed-never-quorate.exp b/cts/scheduler/exp/suicide-not-needed-never-quorate.exp index 0af7e3ee762..b717b1bff72 100644 --- a/cts/scheduler/exp/suicide-not-needed-never-quorate.exp +++ b/cts/scheduler/exp/suicide-not-needed-never-quorate.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/suicide-not-needed-quorate.exp b/cts/scheduler/exp/suicide-not-needed-quorate.exp index 4a9dc66f8c3..fd7a6647c72 100644 --- a/cts/scheduler/exp/suicide-not-needed-quorate.exp +++ b/cts/scheduler/exp/suicide-not-needed-quorate.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealth1.exp b/cts/scheduler/exp/systemhealth1.exp index 8d16fed2354..1c1abffcfb5 100644 --- a/cts/scheduler/exp/systemhealth1.exp +++ b/cts/scheduler/exp/systemhealth1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealth2.exp b/cts/scheduler/exp/systemhealth2.exp index a4109219c9d..c7f5981a193 100644 --- a/cts/scheduler/exp/systemhealth2.exp +++ b/cts/scheduler/exp/systemhealth2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealth3.exp b/cts/scheduler/exp/systemhealth3.exp index a4109219c9d..c7f5981a193 100644 --- a/cts/scheduler/exp/systemhealth3.exp +++ b/cts/scheduler/exp/systemhealth3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealthm1.exp b/cts/scheduler/exp/systemhealthm1.exp index 8d16fed2354..1c1abffcfb5 100644 --- a/cts/scheduler/exp/systemhealthm1.exp +++ b/cts/scheduler/exp/systemhealthm1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealthm2.exp b/cts/scheduler/exp/systemhealthm2.exp index a4109219c9d..c7f5981a193 100644 --- a/cts/scheduler/exp/systemhealthm2.exp +++ b/cts/scheduler/exp/systemhealthm2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealthm3.exp b/cts/scheduler/exp/systemhealthm3.exp index c17102b4642..f38d2b50358 100644 --- a/cts/scheduler/exp/systemhealthm3.exp +++ b/cts/scheduler/exp/systemhealthm3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealthn1.exp b/cts/scheduler/exp/systemhealthn1.exp index 8d16fed2354..1c1abffcfb5 100644 --- a/cts/scheduler/exp/systemhealthn1.exp +++ b/cts/scheduler/exp/systemhealthn1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealthn2.exp b/cts/scheduler/exp/systemhealthn2.exp index a4109219c9d..c7f5981a193 100644 --- a/cts/scheduler/exp/systemhealthn2.exp +++ b/cts/scheduler/exp/systemhealthn2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealthn3.exp b/cts/scheduler/exp/systemhealthn3.exp index a4109219c9d..c7f5981a193 100644 --- a/cts/scheduler/exp/systemhealthn3.exp +++ b/cts/scheduler/exp/systemhealthn3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealtho1.exp b/cts/scheduler/exp/systemhealtho1.exp index 8d16fed2354..1c1abffcfb5 100644 --- a/cts/scheduler/exp/systemhealtho1.exp +++ b/cts/scheduler/exp/systemhealtho1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealtho2.exp b/cts/scheduler/exp/systemhealtho2.exp index c17102b4642..f38d2b50358 100644 --- a/cts/scheduler/exp/systemhealtho2.exp +++ b/cts/scheduler/exp/systemhealtho2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealtho3.exp b/cts/scheduler/exp/systemhealtho3.exp index c17102b4642..f38d2b50358 100644 --- a/cts/scheduler/exp/systemhealtho3.exp +++ b/cts/scheduler/exp/systemhealtho3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealthp1.exp b/cts/scheduler/exp/systemhealthp1.exp index 8d16fed2354..1c1abffcfb5 100644 --- a/cts/scheduler/exp/systemhealthp1.exp +++ b/cts/scheduler/exp/systemhealthp1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealthp2.exp b/cts/scheduler/exp/systemhealthp2.exp index 5f652ab1d82..51d9650b166 100644 --- a/cts/scheduler/exp/systemhealthp2.exp +++ b/cts/scheduler/exp/systemhealthp2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/systemhealthp3.exp b/cts/scheduler/exp/systemhealthp3.exp index c17102b4642..f38d2b50358 100644 --- a/cts/scheduler/exp/systemhealthp3.exp +++ b/cts/scheduler/exp/systemhealthp3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/tags-coloc-order-1.exp b/cts/scheduler/exp/tags-coloc-order-1.exp index cf4599e94bd..80c834e4fc2 100644 --- a/cts/scheduler/exp/tags-coloc-order-1.exp +++ b/cts/scheduler/exp/tags-coloc-order-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/tags-coloc-order-2.exp b/cts/scheduler/exp/tags-coloc-order-2.exp index a2149bbbceb..fd7b4312fc4 100644 --- a/cts/scheduler/exp/tags-coloc-order-2.exp +++ b/cts/scheduler/exp/tags-coloc-order-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/tags-location.exp b/cts/scheduler/exp/tags-location.exp index 4a3b39a3040..6882b25e90a 100644 --- a/cts/scheduler/exp/tags-location.exp +++ b/cts/scheduler/exp/tags-location.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/tags-ticket.exp b/cts/scheduler/exp/tags-ticket.exp index 8aad924b955..3749150dc87 100644 --- a/cts/scheduler/exp/tags-ticket.exp +++ b/cts/scheduler/exp/tags-ticket.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/target-0.exp b/cts/scheduler/exp/target-0.exp index 9abe3cc470c..7701f465511 100644 --- a/cts/scheduler/exp/target-0.exp +++ b/cts/scheduler/exp/target-0.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/target-1.exp b/cts/scheduler/exp/target-1.exp index 980f68c3d49..6fb78ed3edb 100644 --- a/cts/scheduler/exp/target-1.exp +++ b/cts/scheduler/exp/target-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/target-2.exp b/cts/scheduler/exp/target-2.exp index 4ce8fba27ed..f0ba4a7d55f 100644 --- a/cts/scheduler/exp/target-2.exp +++ b/cts/scheduler/exp/target-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-1.exp b/cts/scheduler/exp/template-1.exp index 732094c6361..38d18bc8ba6 100644 --- a/cts/scheduler/exp/template-1.exp +++ b/cts/scheduler/exp/template-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-2.exp b/cts/scheduler/exp/template-2.exp index 698038f8a74..b11b704305b 100644 --- a/cts/scheduler/exp/template-2.exp +++ b/cts/scheduler/exp/template-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-3.exp b/cts/scheduler/exp/template-3.exp index 9c65b5d0f20..37436006f3b 100644 --- a/cts/scheduler/exp/template-3.exp +++ b/cts/scheduler/exp/template-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-clone-group.exp b/cts/scheduler/exp/template-clone-group.exp index dfb63d06ead..be5a596843f 100644 --- a/cts/scheduler/exp/template-clone-group.exp +++ b/cts/scheduler/exp/template-clone-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-clone-primitive.exp b/cts/scheduler/exp/template-clone-primitive.exp index 7cd26d52992..58a3b9661c9 100644 --- a/cts/scheduler/exp/template-clone-primitive.exp +++ b/cts/scheduler/exp/template-clone-primitive.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-coloc-1.exp b/cts/scheduler/exp/template-coloc-1.exp index e659fb929e3..5a55d0f0813 100644 --- a/cts/scheduler/exp/template-coloc-1.exp +++ b/cts/scheduler/exp/template-coloc-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-coloc-2.exp b/cts/scheduler/exp/template-coloc-2.exp index e659fb929e3..5a55d0f0813 100644 --- a/cts/scheduler/exp/template-coloc-2.exp +++ b/cts/scheduler/exp/template-coloc-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-coloc-3.exp b/cts/scheduler/exp/template-coloc-3.exp index 555a1bb0d42..1cd2b0953e1 100644 --- a/cts/scheduler/exp/template-coloc-3.exp +++ b/cts/scheduler/exp/template-coloc-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-order-1.exp b/cts/scheduler/exp/template-order-1.exp index 992c8f1c56e..23e74d29b7c 100644 --- a/cts/scheduler/exp/template-order-1.exp +++ b/cts/scheduler/exp/template-order-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-order-2.exp b/cts/scheduler/exp/template-order-2.exp index ab929724cce..d8b6c048360 100644 --- a/cts/scheduler/exp/template-order-2.exp +++ b/cts/scheduler/exp/template-order-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-order-3.exp b/cts/scheduler/exp/template-order-3.exp index e3f4621b3d5..419dee0eeaa 100644 --- a/cts/scheduler/exp/template-order-3.exp +++ b/cts/scheduler/exp/template-order-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-rsc-sets-1.exp b/cts/scheduler/exp/template-rsc-sets-1.exp index 24c086babe9..1d76f3bd7ba 100644 --- a/cts/scheduler/exp/template-rsc-sets-1.exp +++ b/cts/scheduler/exp/template-rsc-sets-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-rsc-sets-2.exp b/cts/scheduler/exp/template-rsc-sets-2.exp index d7fdd5c6115..3c93e4a9306 100644 --- a/cts/scheduler/exp/template-rsc-sets-2.exp +++ b/cts/scheduler/exp/template-rsc-sets-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-rsc-sets-3.exp b/cts/scheduler/exp/template-rsc-sets-3.exp index 24c086babe9..1d76f3bd7ba 100644 --- a/cts/scheduler/exp/template-rsc-sets-3.exp +++ b/cts/scheduler/exp/template-rsc-sets-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-rsc-sets-4.exp b/cts/scheduler/exp/template-rsc-sets-4.exp index 3015823adf9..66014f34587 100644 --- a/cts/scheduler/exp/template-rsc-sets-4.exp +++ b/cts/scheduler/exp/template-rsc-sets-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/template-ticket.exp b/cts/scheduler/exp/template-ticket.exp index 3015823adf9..66014f34587 100644 --- a/cts/scheduler/exp/template-ticket.exp +++ b/cts/scheduler/exp/template-ticket.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-1.exp b/cts/scheduler/exp/ticket-clone-1.exp index 24b93046698..e74a2d020bf 100644 --- a/cts/scheduler/exp/ticket-clone-1.exp +++ b/cts/scheduler/exp/ticket-clone-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-10.exp b/cts/scheduler/exp/ticket-clone-10.exp index 24b93046698..e74a2d020bf 100644 --- a/cts/scheduler/exp/ticket-clone-10.exp +++ b/cts/scheduler/exp/ticket-clone-10.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-11.exp b/cts/scheduler/exp/ticket-clone-11.exp index 4f3a5f60d7c..e68bf3a12b9 100644 --- a/cts/scheduler/exp/ticket-clone-11.exp +++ b/cts/scheduler/exp/ticket-clone-11.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-12.exp b/cts/scheduler/exp/ticket-clone-12.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-clone-12.exp +++ b/cts/scheduler/exp/ticket-clone-12.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-13.exp b/cts/scheduler/exp/ticket-clone-13.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-clone-13.exp +++ b/cts/scheduler/exp/ticket-clone-13.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-14.exp b/cts/scheduler/exp/ticket-clone-14.exp index 05413c9e82d..19c58738a3f 100644 --- a/cts/scheduler/exp/ticket-clone-14.exp +++ b/cts/scheduler/exp/ticket-clone-14.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-15.exp b/cts/scheduler/exp/ticket-clone-15.exp index 05413c9e82d..19c58738a3f 100644 --- a/cts/scheduler/exp/ticket-clone-15.exp +++ b/cts/scheduler/exp/ticket-clone-15.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-16.exp b/cts/scheduler/exp/ticket-clone-16.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-clone-16.exp +++ b/cts/scheduler/exp/ticket-clone-16.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-17.exp b/cts/scheduler/exp/ticket-clone-17.exp index 05413c9e82d..19c58738a3f 100644 --- a/cts/scheduler/exp/ticket-clone-17.exp +++ b/cts/scheduler/exp/ticket-clone-17.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-18.exp b/cts/scheduler/exp/ticket-clone-18.exp index 05413c9e82d..19c58738a3f 100644 --- a/cts/scheduler/exp/ticket-clone-18.exp +++ b/cts/scheduler/exp/ticket-clone-18.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-19.exp b/cts/scheduler/exp/ticket-clone-19.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-clone-19.exp +++ b/cts/scheduler/exp/ticket-clone-19.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-2.exp b/cts/scheduler/exp/ticket-clone-2.exp index 4f3a5f60d7c..e68bf3a12b9 100644 --- a/cts/scheduler/exp/ticket-clone-2.exp +++ b/cts/scheduler/exp/ticket-clone-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-20.exp b/cts/scheduler/exp/ticket-clone-20.exp index 05413c9e82d..19c58738a3f 100644 --- a/cts/scheduler/exp/ticket-clone-20.exp +++ b/cts/scheduler/exp/ticket-clone-20.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-21.exp b/cts/scheduler/exp/ticket-clone-21.exp index 8d7003b5580..a78245bd04f 100644 --- a/cts/scheduler/exp/ticket-clone-21.exp +++ b/cts/scheduler/exp/ticket-clone-21.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-22.exp b/cts/scheduler/exp/ticket-clone-22.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-clone-22.exp +++ b/cts/scheduler/exp/ticket-clone-22.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-23.exp b/cts/scheduler/exp/ticket-clone-23.exp index 05413c9e82d..19c58738a3f 100644 --- a/cts/scheduler/exp/ticket-clone-23.exp +++ b/cts/scheduler/exp/ticket-clone-23.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-24.exp b/cts/scheduler/exp/ticket-clone-24.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-clone-24.exp +++ b/cts/scheduler/exp/ticket-clone-24.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-3.exp b/cts/scheduler/exp/ticket-clone-3.exp index 05413c9e82d..19c58738a3f 100644 --- a/cts/scheduler/exp/ticket-clone-3.exp +++ b/cts/scheduler/exp/ticket-clone-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-4.exp b/cts/scheduler/exp/ticket-clone-4.exp index 24b93046698..e74a2d020bf 100644 --- a/cts/scheduler/exp/ticket-clone-4.exp +++ b/cts/scheduler/exp/ticket-clone-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-5.exp b/cts/scheduler/exp/ticket-clone-5.exp index 4f3a5f60d7c..e68bf3a12b9 100644 --- a/cts/scheduler/exp/ticket-clone-5.exp +++ b/cts/scheduler/exp/ticket-clone-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-6.exp b/cts/scheduler/exp/ticket-clone-6.exp index 05413c9e82d..19c58738a3f 100644 --- a/cts/scheduler/exp/ticket-clone-6.exp +++ b/cts/scheduler/exp/ticket-clone-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-7.exp b/cts/scheduler/exp/ticket-clone-7.exp index 24b93046698..e74a2d020bf 100644 --- a/cts/scheduler/exp/ticket-clone-7.exp +++ b/cts/scheduler/exp/ticket-clone-7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-8.exp b/cts/scheduler/exp/ticket-clone-8.exp index 4f3a5f60d7c..e68bf3a12b9 100644 --- a/cts/scheduler/exp/ticket-clone-8.exp +++ b/cts/scheduler/exp/ticket-clone-8.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-clone-9.exp b/cts/scheduler/exp/ticket-clone-9.exp index 8d7003b5580..a78245bd04f 100644 --- a/cts/scheduler/exp/ticket-clone-9.exp +++ b/cts/scheduler/exp/ticket-clone-9.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-1.exp b/cts/scheduler/exp/ticket-group-1.exp index de9e84b9ffb..afe70152332 100644 --- a/cts/scheduler/exp/ticket-group-1.exp +++ b/cts/scheduler/exp/ticket-group-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-10.exp b/cts/scheduler/exp/ticket-group-10.exp index de9e84b9ffb..afe70152332 100644 --- a/cts/scheduler/exp/ticket-group-10.exp +++ b/cts/scheduler/exp/ticket-group-10.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-11.exp b/cts/scheduler/exp/ticket-group-11.exp index 5a7f812470c..d958ce5b435 100644 --- a/cts/scheduler/exp/ticket-group-11.exp +++ b/cts/scheduler/exp/ticket-group-11.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-12.exp b/cts/scheduler/exp/ticket-group-12.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-group-12.exp +++ b/cts/scheduler/exp/ticket-group-12.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-group-13.exp b/cts/scheduler/exp/ticket-group-13.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-group-13.exp +++ b/cts/scheduler/exp/ticket-group-13.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-group-14.exp b/cts/scheduler/exp/ticket-group-14.exp index bbd4a0d3410..c04bb2db75c 100644 --- a/cts/scheduler/exp/ticket-group-14.exp +++ b/cts/scheduler/exp/ticket-group-14.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-15.exp b/cts/scheduler/exp/ticket-group-15.exp index bbd4a0d3410..c04bb2db75c 100644 --- a/cts/scheduler/exp/ticket-group-15.exp +++ b/cts/scheduler/exp/ticket-group-15.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-16.exp b/cts/scheduler/exp/ticket-group-16.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-group-16.exp +++ b/cts/scheduler/exp/ticket-group-16.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-group-17.exp b/cts/scheduler/exp/ticket-group-17.exp index bbd4a0d3410..c04bb2db75c 100644 --- a/cts/scheduler/exp/ticket-group-17.exp +++ b/cts/scheduler/exp/ticket-group-17.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-18.exp b/cts/scheduler/exp/ticket-group-18.exp index bbd4a0d3410..c04bb2db75c 100644 --- a/cts/scheduler/exp/ticket-group-18.exp +++ b/cts/scheduler/exp/ticket-group-18.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-19.exp b/cts/scheduler/exp/ticket-group-19.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-group-19.exp +++ b/cts/scheduler/exp/ticket-group-19.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-group-2.exp b/cts/scheduler/exp/ticket-group-2.exp index 5a7f812470c..d958ce5b435 100644 --- a/cts/scheduler/exp/ticket-group-2.exp +++ b/cts/scheduler/exp/ticket-group-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-20.exp b/cts/scheduler/exp/ticket-group-20.exp index bbd4a0d3410..c04bb2db75c 100644 --- a/cts/scheduler/exp/ticket-group-20.exp +++ b/cts/scheduler/exp/ticket-group-20.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-21.exp b/cts/scheduler/exp/ticket-group-21.exp index 9597b5e94ae..60dc50ec40f 100644 --- a/cts/scheduler/exp/ticket-group-21.exp +++ b/cts/scheduler/exp/ticket-group-21.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-22.exp b/cts/scheduler/exp/ticket-group-22.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-group-22.exp +++ b/cts/scheduler/exp/ticket-group-22.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-group-23.exp b/cts/scheduler/exp/ticket-group-23.exp index bbd4a0d3410..c04bb2db75c 100644 --- a/cts/scheduler/exp/ticket-group-23.exp +++ b/cts/scheduler/exp/ticket-group-23.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-24.exp b/cts/scheduler/exp/ticket-group-24.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-group-24.exp +++ b/cts/scheduler/exp/ticket-group-24.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-group-3.exp b/cts/scheduler/exp/ticket-group-3.exp index bbd4a0d3410..c04bb2db75c 100644 --- a/cts/scheduler/exp/ticket-group-3.exp +++ b/cts/scheduler/exp/ticket-group-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-4.exp b/cts/scheduler/exp/ticket-group-4.exp index de9e84b9ffb..afe70152332 100644 --- a/cts/scheduler/exp/ticket-group-4.exp +++ b/cts/scheduler/exp/ticket-group-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-5.exp b/cts/scheduler/exp/ticket-group-5.exp index 5a7f812470c..d958ce5b435 100644 --- a/cts/scheduler/exp/ticket-group-5.exp +++ b/cts/scheduler/exp/ticket-group-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-6.exp b/cts/scheduler/exp/ticket-group-6.exp index bbd4a0d3410..c04bb2db75c 100644 --- a/cts/scheduler/exp/ticket-group-6.exp +++ b/cts/scheduler/exp/ticket-group-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-7.exp b/cts/scheduler/exp/ticket-group-7.exp index de9e84b9ffb..afe70152332 100644 --- a/cts/scheduler/exp/ticket-group-7.exp +++ b/cts/scheduler/exp/ticket-group-7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-8.exp b/cts/scheduler/exp/ticket-group-8.exp index 5a7f812470c..d958ce5b435 100644 --- a/cts/scheduler/exp/ticket-group-8.exp +++ b/cts/scheduler/exp/ticket-group-8.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-group-9.exp b/cts/scheduler/exp/ticket-group-9.exp index 9597b5e94ae..60dc50ec40f 100644 --- a/cts/scheduler/exp/ticket-group-9.exp +++ b/cts/scheduler/exp/ticket-group-9.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-1.exp b/cts/scheduler/exp/ticket-primitive-1.exp index 3abd19369a6..ca7cd57be3f 100644 --- a/cts/scheduler/exp/ticket-primitive-1.exp +++ b/cts/scheduler/exp/ticket-primitive-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-10.exp b/cts/scheduler/exp/ticket-primitive-10.exp index 3abd19369a6..ca7cd57be3f 100644 --- a/cts/scheduler/exp/ticket-primitive-10.exp +++ b/cts/scheduler/exp/ticket-primitive-10.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-11.exp b/cts/scheduler/exp/ticket-primitive-11.exp index 20cff93f518..aa770611527 100644 --- a/cts/scheduler/exp/ticket-primitive-11.exp +++ b/cts/scheduler/exp/ticket-primitive-11.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-12.exp b/cts/scheduler/exp/ticket-primitive-12.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-primitive-12.exp +++ b/cts/scheduler/exp/ticket-primitive-12.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-13.exp b/cts/scheduler/exp/ticket-primitive-13.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-primitive-13.exp +++ b/cts/scheduler/exp/ticket-primitive-13.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-14.exp b/cts/scheduler/exp/ticket-primitive-14.exp index 525f8eb6d62..21009b95a90 100644 --- a/cts/scheduler/exp/ticket-primitive-14.exp +++ b/cts/scheduler/exp/ticket-primitive-14.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-15.exp b/cts/scheduler/exp/ticket-primitive-15.exp index 525f8eb6d62..21009b95a90 100644 --- a/cts/scheduler/exp/ticket-primitive-15.exp +++ b/cts/scheduler/exp/ticket-primitive-15.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-16.exp b/cts/scheduler/exp/ticket-primitive-16.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-primitive-16.exp +++ b/cts/scheduler/exp/ticket-primitive-16.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-17.exp b/cts/scheduler/exp/ticket-primitive-17.exp index 525f8eb6d62..21009b95a90 100644 --- a/cts/scheduler/exp/ticket-primitive-17.exp +++ b/cts/scheduler/exp/ticket-primitive-17.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-18.exp b/cts/scheduler/exp/ticket-primitive-18.exp index 525f8eb6d62..21009b95a90 100644 --- a/cts/scheduler/exp/ticket-primitive-18.exp +++ b/cts/scheduler/exp/ticket-primitive-18.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-19.exp b/cts/scheduler/exp/ticket-primitive-19.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-primitive-19.exp +++ b/cts/scheduler/exp/ticket-primitive-19.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-2.exp b/cts/scheduler/exp/ticket-primitive-2.exp index 20cff93f518..aa770611527 100644 --- a/cts/scheduler/exp/ticket-primitive-2.exp +++ b/cts/scheduler/exp/ticket-primitive-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-20.exp b/cts/scheduler/exp/ticket-primitive-20.exp index 525f8eb6d62..21009b95a90 100644 --- a/cts/scheduler/exp/ticket-primitive-20.exp +++ b/cts/scheduler/exp/ticket-primitive-20.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-21.exp b/cts/scheduler/exp/ticket-primitive-21.exp index 14b86321a6b..b523e4b7c50 100644 --- a/cts/scheduler/exp/ticket-primitive-21.exp +++ b/cts/scheduler/exp/ticket-primitive-21.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-22.exp b/cts/scheduler/exp/ticket-primitive-22.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-primitive-22.exp +++ b/cts/scheduler/exp/ticket-primitive-22.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-23.exp b/cts/scheduler/exp/ticket-primitive-23.exp index 525f8eb6d62..21009b95a90 100644 --- a/cts/scheduler/exp/ticket-primitive-23.exp +++ b/cts/scheduler/exp/ticket-primitive-23.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-24.exp b/cts/scheduler/exp/ticket-primitive-24.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-primitive-24.exp +++ b/cts/scheduler/exp/ticket-primitive-24.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-3.exp b/cts/scheduler/exp/ticket-primitive-3.exp index 525f8eb6d62..21009b95a90 100644 --- a/cts/scheduler/exp/ticket-primitive-3.exp +++ b/cts/scheduler/exp/ticket-primitive-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-4.exp b/cts/scheduler/exp/ticket-primitive-4.exp index 3abd19369a6..ca7cd57be3f 100644 --- a/cts/scheduler/exp/ticket-primitive-4.exp +++ b/cts/scheduler/exp/ticket-primitive-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-5.exp b/cts/scheduler/exp/ticket-primitive-5.exp index 20cff93f518..aa770611527 100644 --- a/cts/scheduler/exp/ticket-primitive-5.exp +++ b/cts/scheduler/exp/ticket-primitive-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-6.exp b/cts/scheduler/exp/ticket-primitive-6.exp index 525f8eb6d62..21009b95a90 100644 --- a/cts/scheduler/exp/ticket-primitive-6.exp +++ b/cts/scheduler/exp/ticket-primitive-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-7.exp b/cts/scheduler/exp/ticket-primitive-7.exp index 3abd19369a6..ca7cd57be3f 100644 --- a/cts/scheduler/exp/ticket-primitive-7.exp +++ b/cts/scheduler/exp/ticket-primitive-7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-8.exp b/cts/scheduler/exp/ticket-primitive-8.exp index 20cff93f518..aa770611527 100644 --- a/cts/scheduler/exp/ticket-primitive-8.exp +++ b/cts/scheduler/exp/ticket-primitive-8.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-primitive-9.exp b/cts/scheduler/exp/ticket-primitive-9.exp index 14b86321a6b..b523e4b7c50 100644 --- a/cts/scheduler/exp/ticket-primitive-9.exp +++ b/cts/scheduler/exp/ticket-primitive-9.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-1.exp b/cts/scheduler/exp/ticket-promoted-1.exp index d6d8a3605e3..7690786e642 100644 --- a/cts/scheduler/exp/ticket-promoted-1.exp +++ b/cts/scheduler/exp/ticket-promoted-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-10.exp b/cts/scheduler/exp/ticket-promoted-10.exp index 46ce1904acf..5831f42acd2 100644 --- a/cts/scheduler/exp/ticket-promoted-10.exp +++ b/cts/scheduler/exp/ticket-promoted-10.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-11.exp b/cts/scheduler/exp/ticket-promoted-11.exp index 516fe7a5633..28c656b2fbb 100644 --- a/cts/scheduler/exp/ticket-promoted-11.exp +++ b/cts/scheduler/exp/ticket-promoted-11.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-12.exp b/cts/scheduler/exp/ticket-promoted-12.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-promoted-12.exp +++ b/cts/scheduler/exp/ticket-promoted-12.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-13.exp b/cts/scheduler/exp/ticket-promoted-13.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-promoted-13.exp +++ b/cts/scheduler/exp/ticket-promoted-13.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-14.exp b/cts/scheduler/exp/ticket-promoted-14.exp index 3adfeb1b8fa..0cf7d31d148 100644 --- a/cts/scheduler/exp/ticket-promoted-14.exp +++ b/cts/scheduler/exp/ticket-promoted-14.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-15.exp b/cts/scheduler/exp/ticket-promoted-15.exp index 3adfeb1b8fa..0cf7d31d148 100644 --- a/cts/scheduler/exp/ticket-promoted-15.exp +++ b/cts/scheduler/exp/ticket-promoted-15.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-16.exp b/cts/scheduler/exp/ticket-promoted-16.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-promoted-16.exp +++ b/cts/scheduler/exp/ticket-promoted-16.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-17.exp b/cts/scheduler/exp/ticket-promoted-17.exp index 0992ebca90b..cbdf478ad32 100644 --- a/cts/scheduler/exp/ticket-promoted-17.exp +++ b/cts/scheduler/exp/ticket-promoted-17.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-18.exp b/cts/scheduler/exp/ticket-promoted-18.exp index 0992ebca90b..cbdf478ad32 100644 --- a/cts/scheduler/exp/ticket-promoted-18.exp +++ b/cts/scheduler/exp/ticket-promoted-18.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-19.exp b/cts/scheduler/exp/ticket-promoted-19.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-promoted-19.exp +++ b/cts/scheduler/exp/ticket-promoted-19.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-2.exp b/cts/scheduler/exp/ticket-promoted-2.exp index 7f1a8d3c5a4..95246397ab0 100644 --- a/cts/scheduler/exp/ticket-promoted-2.exp +++ b/cts/scheduler/exp/ticket-promoted-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-20.exp b/cts/scheduler/exp/ticket-promoted-20.exp index 0992ebca90b..cbdf478ad32 100644 --- a/cts/scheduler/exp/ticket-promoted-20.exp +++ b/cts/scheduler/exp/ticket-promoted-20.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-21.exp b/cts/scheduler/exp/ticket-promoted-21.exp index 47ed9ef4993..943faeea51e 100644 --- a/cts/scheduler/exp/ticket-promoted-21.exp +++ b/cts/scheduler/exp/ticket-promoted-21.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-22.exp b/cts/scheduler/exp/ticket-promoted-22.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-promoted-22.exp +++ b/cts/scheduler/exp/ticket-promoted-22.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-23.exp b/cts/scheduler/exp/ticket-promoted-23.exp index 0992ebca90b..cbdf478ad32 100644 --- a/cts/scheduler/exp/ticket-promoted-23.exp +++ b/cts/scheduler/exp/ticket-promoted-23.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-24.exp b/cts/scheduler/exp/ticket-promoted-24.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-promoted-24.exp +++ b/cts/scheduler/exp/ticket-promoted-24.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-3.exp b/cts/scheduler/exp/ticket-promoted-3.exp index 3adfeb1b8fa..0cf7d31d148 100644 --- a/cts/scheduler/exp/ticket-promoted-3.exp +++ b/cts/scheduler/exp/ticket-promoted-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-4.exp b/cts/scheduler/exp/ticket-promoted-4.exp index 46ce1904acf..5831f42acd2 100644 --- a/cts/scheduler/exp/ticket-promoted-4.exp +++ b/cts/scheduler/exp/ticket-promoted-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-5.exp b/cts/scheduler/exp/ticket-promoted-5.exp index 516fe7a5633..28c656b2fbb 100644 --- a/cts/scheduler/exp/ticket-promoted-5.exp +++ b/cts/scheduler/exp/ticket-promoted-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-6.exp b/cts/scheduler/exp/ticket-promoted-6.exp index 0992ebca90b..cbdf478ad32 100644 --- a/cts/scheduler/exp/ticket-promoted-6.exp +++ b/cts/scheduler/exp/ticket-promoted-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-7.exp b/cts/scheduler/exp/ticket-promoted-7.exp index 46ce1904acf..5831f42acd2 100644 --- a/cts/scheduler/exp/ticket-promoted-7.exp +++ b/cts/scheduler/exp/ticket-promoted-7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-8.exp b/cts/scheduler/exp/ticket-promoted-8.exp index 516fe7a5633..28c656b2fbb 100644 --- a/cts/scheduler/exp/ticket-promoted-8.exp +++ b/cts/scheduler/exp/ticket-promoted-8.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-promoted-9.exp b/cts/scheduler/exp/ticket-promoted-9.exp index 47ed9ef4993..943faeea51e 100644 --- a/cts/scheduler/exp/ticket-promoted-9.exp +++ b/cts/scheduler/exp/ticket-promoted-9.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-1.exp b/cts/scheduler/exp/ticket-rsc-sets-1.exp index 07d173465d6..ff8d1777cf5 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-1.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-10.exp b/cts/scheduler/exp/ticket-rsc-sets-10.exp index 1a9c30f505f..f8ba6090c11 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-10.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-10.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-11.exp b/cts/scheduler/exp/ticket-rsc-sets-11.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-11.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-11.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-12.exp b/cts/scheduler/exp/ticket-rsc-sets-12.exp index d7c4a3f0819..806f468e71f 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-12.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-12.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-13.exp b/cts/scheduler/exp/ticket-rsc-sets-13.exp index 1a9c30f505f..f8ba6090c11 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-13.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-13.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-14.exp b/cts/scheduler/exp/ticket-rsc-sets-14.exp index 1a9c30f505f..f8ba6090c11 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-14.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-14.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-2.exp b/cts/scheduler/exp/ticket-rsc-sets-2.exp index 277515408a7..8d9c7c73198 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-2.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-3.exp b/cts/scheduler/exp/ticket-rsc-sets-3.exp index 1a9c30f505f..f8ba6090c11 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-3.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-4.exp b/cts/scheduler/exp/ticket-rsc-sets-4.exp index 07d173465d6..ff8d1777cf5 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-4.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-5.exp b/cts/scheduler/exp/ticket-rsc-sets-5.exp index 6c4140db28c..c2b4cfa14cb 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-5.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-5.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-6.exp b/cts/scheduler/exp/ticket-rsc-sets-6.exp index 493c514af68..7a0dec5658d 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-6.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-6.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-7.exp b/cts/scheduler/exp/ticket-rsc-sets-7.exp index 1a9c30f505f..f8ba6090c11 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-7.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-7.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-8.exp b/cts/scheduler/exp/ticket-rsc-sets-8.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-8.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-8.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/ticket-rsc-sets-9.exp b/cts/scheduler/exp/ticket-rsc-sets-9.exp index 1a9c30f505f..f8ba6090c11 100644 --- a/cts/scheduler/exp/ticket-rsc-sets-9.exp +++ b/cts/scheduler/exp/ticket-rsc-sets-9.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/timeout-by-node.exp b/cts/scheduler/exp/timeout-by-node.exp index 19d1afcca77..c93744e04d9 100644 --- a/cts/scheduler/exp/timeout-by-node.exp +++ b/cts/scheduler/exp/timeout-by-node.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/unfence-definition.exp b/cts/scheduler/exp/unfence-definition.exp index 308f638b773..a531cca82c5 100644 --- a/cts/scheduler/exp/unfence-definition.exp +++ b/cts/scheduler/exp/unfence-definition.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/unfence-device.exp b/cts/scheduler/exp/unfence-device.exp index 452351d986e..3839818a71d 100644 --- a/cts/scheduler/exp/unfence-device.exp +++ b/cts/scheduler/exp/unfence-device.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/unfence-parameters.exp b/cts/scheduler/exp/unfence-parameters.exp index 0b76e26eb70..055af8625a0 100644 --- a/cts/scheduler/exp/unfence-parameters.exp +++ b/cts/scheduler/exp/unfence-parameters.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/unfence-startup.exp b/cts/scheduler/exp/unfence-startup.exp index f2d38e80caf..cfdad5273b4 100644 --- a/cts/scheduler/exp/unfence-startup.exp +++ b/cts/scheduler/exp/unfence-startup.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/unmanaged-block-restart.exp b/cts/scheduler/exp/unmanaged-block-restart.exp index c23188803c4..fc1740c2d12 100644 --- a/cts/scheduler/exp/unmanaged-block-restart.exp +++ b/cts/scheduler/exp/unmanaged-block-restart.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/unmanaged-promoted.exp b/cts/scheduler/exp/unmanaged-promoted.exp index eada1f642ec..4d3d886578e 100644 --- a/cts/scheduler/exp/unmanaged-promoted.exp +++ b/cts/scheduler/exp/unmanaged-promoted.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/unmanaged-stop-1.exp b/cts/scheduler/exp/unmanaged-stop-1.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/unmanaged-stop-1.exp +++ b/cts/scheduler/exp/unmanaged-stop-1.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/unmanaged-stop-2.exp b/cts/scheduler/exp/unmanaged-stop-2.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/unmanaged-stop-2.exp +++ b/cts/scheduler/exp/unmanaged-stop-2.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/unmanaged-stop-3.exp b/cts/scheduler/exp/unmanaged-stop-3.exp index 9b43d75dd1b..2e33003361a 100644 --- a/cts/scheduler/exp/unmanaged-stop-3.exp +++ b/cts/scheduler/exp/unmanaged-stop-3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/unmanaged-stop-4.exp b/cts/scheduler/exp/unmanaged-stop-4.exp index 9b43d75dd1b..2e33003361a 100644 --- a/cts/scheduler/exp/unmanaged-stop-4.exp +++ b/cts/scheduler/exp/unmanaged-stop-4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/unrunnable-1.exp b/cts/scheduler/exp/unrunnable-1.exp index 8a3a7d7f3df..c71f41a50f4 100644 --- a/cts/scheduler/exp/unrunnable-1.exp +++ b/cts/scheduler/exp/unrunnable-1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/unrunnable-2.exp b/cts/scheduler/exp/unrunnable-2.exp index 56e315ff015..3303b35e423 100644 --- a/cts/scheduler/exp/unrunnable-2.exp +++ b/cts/scheduler/exp/unrunnable-2.exp @@ -1 +1 @@ - + diff --git a/cts/scheduler/exp/use-after-free-merge.exp b/cts/scheduler/exp/use-after-free-merge.exp index 33d478bccda..9efd55474d2 100644 --- a/cts/scheduler/exp/use-after-free-merge.exp +++ b/cts/scheduler/exp/use-after-free-merge.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/utilization-check-allowed-nodes.exp b/cts/scheduler/exp/utilization-check-allowed-nodes.exp index 66b7b388c34..f80074fa855 100644 --- a/cts/scheduler/exp/utilization-check-allowed-nodes.exp +++ b/cts/scheduler/exp/utilization-check-allowed-nodes.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/utilization-complex.exp b/cts/scheduler/exp/utilization-complex.exp index e7a0a07990b..d3277b1bbbc 100644 --- a/cts/scheduler/exp/utilization-complex.exp +++ b/cts/scheduler/exp/utilization-complex.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/utilization-order1.exp b/cts/scheduler/exp/utilization-order1.exp index 2d9998ced07..1cc02d7eb13 100644 --- a/cts/scheduler/exp/utilization-order1.exp +++ b/cts/scheduler/exp/utilization-order1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/utilization-order2.exp b/cts/scheduler/exp/utilization-order2.exp index bd87940e412..c74c7d22eb5 100644 --- a/cts/scheduler/exp/utilization-order2.exp +++ b/cts/scheduler/exp/utilization-order2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/utilization-order3.exp b/cts/scheduler/exp/utilization-order3.exp index 67a9f21addb..74c6f35bc46 100644 --- a/cts/scheduler/exp/utilization-order3.exp +++ b/cts/scheduler/exp/utilization-order3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/utilization-order4.exp b/cts/scheduler/exp/utilization-order4.exp index 996eb1bb906..3ec52121923 100644 --- a/cts/scheduler/exp/utilization-order4.exp +++ b/cts/scheduler/exp/utilization-order4.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/utilization-shuffle.exp b/cts/scheduler/exp/utilization-shuffle.exp index 82653e2f8d8..91b1090ae0f 100644 --- a/cts/scheduler/exp/utilization-shuffle.exp +++ b/cts/scheduler/exp/utilization-shuffle.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/utilization.exp b/cts/scheduler/exp/utilization.exp index a37125735e8..5eec2bf8005 100644 --- a/cts/scheduler/exp/utilization.exp +++ b/cts/scheduler/exp/utilization.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/value-source.exp b/cts/scheduler/exp/value-source.exp index 4bf469fda8e..f20602ef29a 100644 --- a/cts/scheduler/exp/value-source.exp +++ b/cts/scheduler/exp/value-source.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-asymmetric.exp b/cts/scheduler/exp/whitebox-asymmetric.exp index 6db621da3a2..e58cdc0910d 100644 --- a/cts/scheduler/exp/whitebox-asymmetric.exp +++ b/cts/scheduler/exp/whitebox-asymmetric.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-fail1.exp b/cts/scheduler/exp/whitebox-fail1.exp index e5db07b0e94..04db2b68196 100644 --- a/cts/scheduler/exp/whitebox-fail1.exp +++ b/cts/scheduler/exp/whitebox-fail1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-fail2.exp b/cts/scheduler/exp/whitebox-fail2.exp index e5db07b0e94..04db2b68196 100644 --- a/cts/scheduler/exp/whitebox-fail2.exp +++ b/cts/scheduler/exp/whitebox-fail2.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-fail3.exp b/cts/scheduler/exp/whitebox-fail3.exp index 41d815bf3a5..947e0019851 100644 --- a/cts/scheduler/exp/whitebox-fail3.exp +++ b/cts/scheduler/exp/whitebox-fail3.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-imply-stop-on-fence.exp b/cts/scheduler/exp/whitebox-imply-stop-on-fence.exp index 3b2476852ca..a1a200ecd83 100644 --- a/cts/scheduler/exp/whitebox-imply-stop-on-fence.exp +++ b/cts/scheduler/exp/whitebox-imply-stop-on-fence.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-migrate1.exp b/cts/scheduler/exp/whitebox-migrate1.exp index 48c255024e2..49ca28414b0 100644 --- a/cts/scheduler/exp/whitebox-migrate1.exp +++ b/cts/scheduler/exp/whitebox-migrate1.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-move.exp b/cts/scheduler/exp/whitebox-move.exp index 3f072539a7f..7b0281b173b 100644 --- a/cts/scheduler/exp/whitebox-move.exp +++ b/cts/scheduler/exp/whitebox-move.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-ms-ordering-move.exp b/cts/scheduler/exp/whitebox-ms-ordering-move.exp index 482af3df4c5..ab7ab4f95ff 100644 --- a/cts/scheduler/exp/whitebox-ms-ordering-move.exp +++ b/cts/scheduler/exp/whitebox-ms-ordering-move.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-ms-ordering.exp b/cts/scheduler/exp/whitebox-ms-ordering.exp index f88c4eb1c47..56079567e7e 100644 --- a/cts/scheduler/exp/whitebox-ms-ordering.exp +++ b/cts/scheduler/exp/whitebox-ms-ordering.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-nested-group.exp b/cts/scheduler/exp/whitebox-nested-group.exp index eb38f6b03c7..52d71a2e6b2 100644 --- a/cts/scheduler/exp/whitebox-nested-group.exp +++ b/cts/scheduler/exp/whitebox-nested-group.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-orphan-ms.exp b/cts/scheduler/exp/whitebox-orphan-ms.exp index 8690d7b45fd..898320bf0f8 100644 --- a/cts/scheduler/exp/whitebox-orphan-ms.exp +++ b/cts/scheduler/exp/whitebox-orphan-ms.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-orphaned.exp b/cts/scheduler/exp/whitebox-orphaned.exp index ee7132a4765..a8c700f8c79 100644 --- a/cts/scheduler/exp/whitebox-orphaned.exp +++ b/cts/scheduler/exp/whitebox-orphaned.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-start.exp b/cts/scheduler/exp/whitebox-start.exp index 95250d61969..83990648c78 100644 --- a/cts/scheduler/exp/whitebox-start.exp +++ b/cts/scheduler/exp/whitebox-start.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-stop.exp b/cts/scheduler/exp/whitebox-stop.exp index f4cd3950f89..b9848318472 100644 --- a/cts/scheduler/exp/whitebox-stop.exp +++ b/cts/scheduler/exp/whitebox-stop.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/whitebox-unexpectedly-running.exp b/cts/scheduler/exp/whitebox-unexpectedly-running.exp index f6a961c7bd8..7f810f8e126 100644 --- a/cts/scheduler/exp/whitebox-unexpectedly-running.exp +++ b/cts/scheduler/exp/whitebox-unexpectedly-running.exp @@ -1,4 +1,4 @@ - + diff --git a/cts/scheduler/exp/year-2038.exp b/cts/scheduler/exp/year-2038.exp index 7fe49b27392..5b1ce5b9478 100644 --- a/cts/scheduler/exp/year-2038.exp +++ b/cts/scheduler/exp/year-2038.exp @@ -1,4 +1,4 @@ - + From 84e931b7e2f0dd9930f7074e0de441aba86b5dc1 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 30 Jul 2024 17:06:07 -0500 Subject: [PATCH 084/364] Refactor: libpacemaker: de-inline pcmk__colocation_has_influence() It's nontrivial --- lib/pacemaker/libpacemaker_private.h | 48 ++------------------------- lib/pacemaker/pcmk_sched_colocation.c | 46 +++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 45 deletions(-) diff --git a/lib/pacemaker/libpacemaker_private.h b/lib/pacemaker/libpacemaker_private.h index 3f8870b304b..dec254b477d 100644 --- a/lib/pacemaker/libpacemaker_private.h +++ b/lib/pacemaker/libpacemaker_private.h @@ -595,51 +595,9 @@ void pcmk__new_colocation(const char *id, const char *node_attr, int score, G_GNUC_INTERNAL void pcmk__block_colocation_dependents(pcmk_action_t *action); -/*! - * \internal - * \brief Check whether colocation's dependent preferences should be considered - * - * \param[in] colocation Colocation constraint - * \param[in] rsc Primary instance (normally this will be - * colocation->primary, which NULL will be treated as, - * but for clones or bundles with multiple instances - * this can be a particular instance) - * - * \return true if colocation influence should be effective, otherwise false - */ -static inline bool -pcmk__colocation_has_influence(const pcmk__colocation_t *colocation, - const pcmk_resource_t *rsc) -{ - if (rsc == NULL) { - rsc = colocation->primary; - } - - /* A bundle replica colocates its remote connection with its container, - * using a finite score so that the container can run on Pacemaker Remote - * nodes. - * - * Moving a connection is lightweight and does not interrupt the service, - * while moving a container is heavyweight and does interrupt the service, - * so don't move a clean, active container based solely on the preferences - * of its connection. - * - * This also avoids problematic scenarios where two containers want to - * perpetually swap places. - */ - if (pcmk_is_set(colocation->dependent->flags, - pcmk_rsc_remote_nesting_allowed) - && !pcmk_is_set(rsc->flags, pcmk_rsc_failed) - && pcmk__list_of_1(rsc->running_on)) { - return false; - } - - /* The dependent in a colocation influences the primary's location - * if the PCMK_XA_INFLUENCE option is true or the primary is not yet active. - */ - return pcmk_is_set(colocation->flags, pcmk__coloc_influence) - || (rsc->running_on == NULL); -} +G_GNUC_INTERNAL +bool pcmk__colocation_has_influence(const pcmk__colocation_t *colocation, + const pcmk_resource_t *rsc); // Ordering constraints (pcmk_sched_ordering.c) diff --git a/lib/pacemaker/pcmk_sched_colocation.c b/lib/pacemaker/pcmk_sched_colocation.c index 43edebc03cc..ccaf1cc10f1 100644 --- a/lib/pacemaker/pcmk_sched_colocation.c +++ b/lib/pacemaker/pcmk_sched_colocation.c @@ -1024,6 +1024,52 @@ pcmk__unpack_colocation(xmlNode *xml_obj, pcmk_scheduler_t *scheduler) } } +/*! + * \internal + * \brief Check whether colocation's dependent preferences should be considered + * + * \param[in] colocation Colocation constraint + * \param[in] rsc Primary instance (normally this will be + * colocation->primary, which NULL will be treated as, + * but for clones or bundles with multiple instances + * this can be a particular instance) + * + * \return true if colocation influence should be effective, otherwise false + */ +bool +pcmk__colocation_has_influence(const pcmk__colocation_t *colocation, + const pcmk_resource_t *rsc) +{ + if (rsc == NULL) { + rsc = colocation->primary; + } + + /* A bundle replica colocates its remote connection with its container, + * using a finite score so that the container can run on Pacemaker Remote + * nodes. + * + * Moving a connection is lightweight and does not interrupt the service, + * while moving a container is heavyweight and does interrupt the service, + * so don't move a clean, active container based solely on the preferences + * of its connection. + * + * This also avoids problematic scenarios where two containers want to + * perpetually swap places. + */ + if (pcmk_is_set(colocation->dependent->flags, + pcmk_rsc_remote_nesting_allowed) + && !pcmk_is_set(rsc->flags, pcmk_rsc_failed) + && pcmk__list_of_1(rsc->running_on)) { + return false; + } + + /* The dependent in a colocation influences the primary's location + * if the PCMK_XA_INFLUENCE option is true or the primary is not yet active. + */ + return pcmk_is_set(colocation->flags, pcmk__coloc_influence) + || (rsc->running_on == NULL); +} + /*! * \internal * \brief Make actions of a given type unrunnable for a given resource From 1246f8d355d8e53956b6d2dc1e134b04756f5396 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 30 Jul 2024 17:07:14 -0500 Subject: [PATCH 085/364] Log: various: ensure there are spaces around CRM_XS --- daemons/fenced/fenced_remote.c | 4 ++-- lib/cluster/membership.c | 2 +- lib/common/mainloop.c | 2 +- lib/fencing/st_rhcs.c | 4 ++-- lib/pacemaker/pcmk_sched_resource.c | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/daemons/fenced/fenced_remote.c b/daemons/fenced/fenced_remote.c index 0146cd1ddff..653c2e697bf 100644 --- a/daemons/fenced/fenced_remote.c +++ b/daemons/fenced/fenced_remote.c @@ -1896,8 +1896,8 @@ request_peer_fencing(remote_fencing_op_t *op, peer_device_info_t *peer) op->total_timeout = TIMEOUT_MULTIPLY_FACTOR * get_op_total_timeout(op, peer); op->op_timer_total = g_timeout_add(1000 * op->total_timeout, remote_op_timeout, op); report_timeout_period(op, op->total_timeout); - crm_info("Total timeout set to %ds for peer's fencing targeting %s for %s" - CRM_XS "id=%.8s", + crm_info("Total timeout set to %ds for peer's fencing targeting %s for %s " + CRM_XS " id=%.8s", op->total_timeout, op->target, op->client_name, op->id); } diff --git a/lib/cluster/membership.c b/lib/cluster/membership.c index 7eedc2ef38a..b248853cd2c 100644 --- a/lib/cluster/membership.c +++ b/lib/cluster/membership.c @@ -1203,7 +1203,7 @@ update_peer_state_iter(const char *source, crm_node_t *node, const char *state, gboolean is_member; CRM_CHECK(node != NULL, - crm_err("Could not set state for unknown host to %s" + crm_err("Could not set state for unknown host to %s " CRM_XS " source=%s", state, source); return NULL); diff --git a/lib/common/mainloop.c b/lib/common/mainloop.c index 76261342dd2..d44d691e5c6 100644 --- a/lib/common/mainloop.c +++ b/lib/common/mainloop.c @@ -758,7 +758,7 @@ mainloop_gio_callback(GIOChannel *gio, GIOCondition condition, gpointer data) } if (client->ipc && !crm_ipc_connected(client->ipc)) { - crm_err("Connection to %s closed " CRM_XS "client=%p condition=%d", + crm_err("Connection to %s closed " CRM_XS " client=%p condition=%d", client->name, client, condition); rc = G_SOURCE_REMOVE; diff --git a/lib/fencing/st_rhcs.c b/lib/fencing/st_rhcs.c index d104fe804f5..ebf3399bf6c 100644 --- a/lib/fencing/st_rhcs.c +++ b/lib/fencing/st_rhcs.c @@ -60,8 +60,8 @@ stonith__list_rhcs_agents(stonith_key_value_t **devices) #else if (dirfd == -1) { if (i == 0) { - crm_notice("Problem with listing %s directory" - CRM_XS "errno=%d", RH_STONITH_PREFIX, errno); + crm_notice("Problem with listing %s directory " + CRM_XS " errno=%d", RH_STONITH_PREFIX, errno); } free(namelist[i]); continue; diff --git a/lib/pacemaker/pcmk_sched_resource.c b/lib/pacemaker/pcmk_sched_resource.c index 0791994f8f3..4bbfa9501b6 100644 --- a/lib/pacemaker/pcmk_sched_resource.c +++ b/lib/pacemaker/pcmk_sched_resource.c @@ -601,7 +601,7 @@ pcmk__threshold_reached(pcmk_resource_t *rsc, const pcmk_node_t *node, if (remaining_tries <= 0) { pcmk__sched_warn("%s cannot run on %s due to reaching migration " - "threshold (clean up resource to allow again)" + "threshold (clean up resource to allow again) " CRM_XS " failures=%d " PCMK_META_MIGRATION_THRESHOLD "=%d", rsc_to_ban->id, pcmk__node_name(node), fail_count, From 3546faab589640b7cc87b1557ae30391b8bd74c3 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 30 Jul 2024 17:18:18 -0500 Subject: [PATCH 086/364] Refactor: scheduler,tools: check resource flag to determine fence device ... rather than string-comparing the resource class --- daemons/fenced/fenced_scheduler.c | 4 +--- lib/pacemaker/pcmk_sched_primitive.c | 5 +---- lib/pacemaker/pcmk_sched_probes.c | 4 +--- tools/crm_resource_print.c | 2 +- 4 files changed, 4 insertions(+), 11 deletions(-) diff --git a/daemons/fenced/fenced_scheduler.c b/daemons/fenced/fenced_scheduler.c index 69e16fab3af..07a3b064961 100644 --- a/daemons/fenced/fenced_scheduler.c +++ b/daemons/fenced/fenced_scheduler.c @@ -115,7 +115,6 @@ register_if_fencing_device(gpointer data, gpointer user_data) pcmk_node_t *node = NULL; const char *name = NULL; const char *value = NULL; - const char *rclass = NULL; const char *agent = NULL; const char *rsc_provides = NULL; stonith_key_value_t *params = NULL; @@ -131,8 +130,7 @@ register_if_fencing_device(gpointer data, gpointer user_data) return; } - rclass = crm_element_value(rsc->xml, PCMK_XA_CLASS); - if (!pcmk__str_eq(rclass, PCMK_RESOURCE_CLASS_STONITH, pcmk__str_casei)) { + if (!pcmk_is_set(rsc->flags, pcmk_rsc_fence_device)) { return; // Not a fencing device } diff --git a/lib/pacemaker/pcmk_sched_primitive.c b/lib/pacemaker/pcmk_sched_primitive.c index 40c4b3ab6ea..dfb3ccea714 100644 --- a/lib/pacemaker/pcmk_sched_primitive.c +++ b/lib/pacemaker/pcmk_sched_primitive.c @@ -1614,14 +1614,11 @@ ban_if_not_locked(gpointer data, gpointer user_data) void pcmk__primitive_shutdown_lock(pcmk_resource_t *rsc) { - const char *class = NULL; CRM_ASSERT(pcmk__is_primitive(rsc)); - class = crm_element_value(rsc->xml, PCMK_XA_CLASS); - // Fence devices and remote connections can't be locked - if (pcmk__str_eq(class, PCMK_RESOURCE_CLASS_STONITH, pcmk__str_null_matches) + if (pcmk_is_set(rsc->flags, pcmk_rsc_fence_device) || rsc->is_remote_node) { return; } diff --git a/lib/pacemaker/pcmk_sched_probes.c b/lib/pacemaker/pcmk_sched_probes.c index 6335ab083b4..b8ff50a6dd0 100644 --- a/lib/pacemaker/pcmk_sched_probes.c +++ b/lib/pacemaker/pcmk_sched_probes.c @@ -170,9 +170,7 @@ pcmk__probe_rsc_on_node(pcmk_resource_t *rsc, pcmk_node_t *node) } if (pcmk__is_pacemaker_remote_node(node)) { - const char *class = crm_element_value(rsc->xml, PCMK_XA_CLASS); - - if (pcmk__str_eq(class, PCMK_RESOURCE_CLASS_STONITH, pcmk__str_none)) { + if (pcmk_is_set(rsc->flags, pcmk_rsc_fence_device)) { reason = "Pacemaker Remote nodes cannot run stonith agents"; goto no_probe; diff --git a/tools/crm_resource_print.c b/tools/crm_resource_print.c index 811bab038c4..8678dd7ed18 100644 --- a/tools/crm_resource_print.c +++ b/tools/crm_resource_print.c @@ -72,7 +72,7 @@ cli_resource_print_cts(pcmk_resource_t *rsc, pcmk__output_t *out) const char *rclass = crm_element_value(rsc->xml, PCMK_XA_CLASS); pcmk_node_t *node = pcmk__current_node(rsc); - if (pcmk__str_eq(rclass, PCMK_RESOURCE_CLASS_STONITH, pcmk__str_casei)) { + if (pcmk_is_set(rsc->flags, pcmk_rsc_fence_device)) { needs_quorum = FALSE; } else { // @TODO check requires in resource meta-data and rsc_defaults From 78e350275174883f64ca36ffd0523735a3ece2b2 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 30 Jul 2024 17:27:14 -0500 Subject: [PATCH 087/364] Log: pacemaker-based: client name can be NULL --- daemons/based/based_callbacks.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/daemons/based/based_callbacks.c b/daemons/based/based_callbacks.c index 8925d007c4a..1390423c328 100644 --- a/daemons/based/based_callbacks.c +++ b/daemons/based/based_callbacks.c @@ -1083,10 +1083,12 @@ cib_process_request(xmlNode *request, gboolean privileged, if (cib_client == NULL) { crm_trace("Processing peer %s operation from %s/%s on %s intended for %s (reply=%s)", - op, client_name, call_id, originator, target, reply_to); + op, pcmk__s(client_name, "client"), call_id, originator, + target, reply_to); } else { crm_xml_add(request, PCMK__XA_SRC, OUR_NODENAME); - crm_trace("Processing local %s operation from %s/%s intended for %s", op, client_name, call_id, target); + crm_trace("Processing local %s operation from %s/%s intended for %s", + op, pcmk__s(client_name, "client"), call_id, target); } rc = cib__get_operation(op, &operation); @@ -1194,7 +1196,8 @@ cib_process_request(xmlNode *request, gboolean privileged, do_crm_log(level, "Completed %s operation for section %s: %s (rc=%d, origin=%s/%s/%s, version=%s.%s.%s)", op, section ? section : "'all'", pcmk_strerror(rc), rc, - originator ? originator : "local", client_name, call_id, + originator ? originator : "local", + pcmk__s(client_name, "client"), call_id, pcmk__s(admin_epoch_s, "0"), pcmk__s(epoch_s, "0"), pcmk__s(num_updates_s, "0")); @@ -1215,7 +1218,8 @@ cib_process_request(xmlNode *request, gboolean privileged, if (is_update && !cib_legacy_mode()) { crm_trace("Completed pre-sync update from %s/%s/%s%s", - originator ? originator : "local", client_name, call_id, + originator ? originator : "local", + pcmk__s(client_name, "client"), call_id, local_notify?" with local notification":""); } else if (!needs_reply || stand_alone) { From 300dbeb2d6e3a9be7b73e627c751373b82b95ee0 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 30 Jul 2024 17:32:21 -0500 Subject: [PATCH 088/364] Refactor: libcib: drop op_common() It's more obscure than helpful --- lib/cib/cib_client.c | 32 +++++++------------------------- lib/cib/cib_utils.c | 18 ++++++++++++------ 2 files changed, 19 insertions(+), 31 deletions(-) diff --git a/lib/cib/cib_client.c b/lib/cib/cib_client.c index c98042915e8..40ede8e713a 100644 --- a/lib/cib/cib_client.c +++ b/lib/cib/cib_client.c @@ -26,14 +26,6 @@ static GHashTable *cib_op_callback_table = NULL; -#define op_common(cib) do { \ - if(cib == NULL) { \ - return -EINVAL; \ - } else if(cib->delegate_fn == NULL) { \ - return -EPROTONOSUPPORT; \ - } \ - } while(0) - static int cib_client_set_op_callback(cib_t *cib, void (*callback) (const xmlNode * msg, int call_id, @@ -250,7 +242,6 @@ cib_client_register_callback(cib_t *cib, int call_id, int timeout, static int cib_client_noop(cib_t * cib, int call_options) { - op_common(cib); return cib_internal_op(cib, PCMK__CIB_REQUEST_NOOP, NULL, NULL, NULL, NULL, call_options, cib->user); } @@ -258,7 +249,6 @@ cib_client_noop(cib_t * cib, int call_options) static int cib_client_ping(cib_t * cib, xmlNode ** output_data, int call_options) { - op_common(cib); return cib_internal_op(cib, CRM_OP_PING, NULL, NULL, NULL, output_data, call_options, cib->user); } @@ -273,7 +263,6 @@ static int cib_client_query_from(cib_t * cib, const char *host, const char *section, xmlNode ** output_data, int call_options) { - op_common(cib); return cib_internal_op(cib, PCMK__CIB_REQUEST_QUERY, host, section, NULL, output_data, call_options, cib->user); } @@ -281,7 +270,6 @@ cib_client_query_from(cib_t * cib, const char *host, const char *section, static int is_primary(cib_t *cib) { - op_common(cib); return cib_internal_op(cib, PCMK__CIB_REQUEST_IS_PRIMARY, NULL, NULL, NULL, NULL, cib_scope_local|cib_sync_call, cib->user); } @@ -289,7 +277,6 @@ is_primary(cib_t *cib) static int set_secondary(cib_t *cib, int call_options) { - op_common(cib); return cib_internal_op(cib, PCMK__CIB_REQUEST_SECONDARY, NULL, NULL, NULL, NULL, call_options, cib->user); } @@ -303,7 +290,6 @@ set_all_secondary(cib_t * cib, int call_options) static int set_primary(cib_t *cib, int call_options) { - op_common(cib); crm_trace("Adding cib_scope_local to options"); return cib_internal_op(cib, PCMK__CIB_REQUEST_PRIMARY, NULL, NULL, NULL, NULL, call_options|cib_scope_local, cib->user); @@ -312,7 +298,6 @@ set_primary(cib_t *cib, int call_options) static int cib_client_bump_epoch(cib_t * cib, int call_options) { - op_common(cib); return cib_internal_op(cib, PCMK__CIB_REQUEST_BUMP, NULL, NULL, NULL, NULL, call_options, cib->user); } @@ -320,7 +305,6 @@ cib_client_bump_epoch(cib_t * cib, int call_options) static int cib_client_upgrade(cib_t * cib, int call_options) { - op_common(cib); return cib_internal_op(cib, PCMK__CIB_REQUEST_UPGRADE, NULL, NULL, NULL, NULL, call_options, cib->user); } @@ -334,7 +318,6 @@ cib_client_sync(cib_t * cib, const char *section, int call_options) static int cib_client_sync_from(cib_t * cib, const char *host, const char *section, int call_options) { - op_common(cib); return cib_internal_op(cib, PCMK__CIB_REQUEST_SYNC_TO_ALL, host, section, NULL, NULL, call_options, cib->user); } @@ -342,7 +325,6 @@ cib_client_sync_from(cib_t * cib, const char *host, const char *section, int cal static int cib_client_create(cib_t * cib, const char *section, xmlNode * data, int call_options) { - op_common(cib); return cib_internal_op(cib, PCMK__CIB_REQUEST_CREATE, NULL, section, data, NULL, call_options, cib->user); } @@ -350,7 +332,6 @@ cib_client_create(cib_t * cib, const char *section, xmlNode * data, int call_opt static int cib_client_modify(cib_t * cib, const char *section, xmlNode * data, int call_options) { - op_common(cib); return cib_internal_op(cib, PCMK__CIB_REQUEST_MODIFY, NULL, section, data, NULL, call_options, cib->user); } @@ -358,7 +339,6 @@ cib_client_modify(cib_t * cib, const char *section, xmlNode * data, int call_opt static int cib_client_replace(cib_t * cib, const char *section, xmlNode * data, int call_options) { - op_common(cib); return cib_internal_op(cib, PCMK__CIB_REQUEST_REPLACE, NULL, section, data, NULL, call_options, cib->user); } @@ -366,7 +346,6 @@ cib_client_replace(cib_t * cib, const char *section, xmlNode * data, int call_op static int cib_client_delete(cib_t * cib, const char *section, xmlNode * data, int call_options) { - op_common(cib); return cib_internal_op(cib, PCMK__CIB_REQUEST_DELETE, NULL, section, data, NULL, call_options, cib->user); } @@ -374,7 +353,6 @@ cib_client_delete(cib_t * cib, const char *section, xmlNode * data, int call_opt static int cib_client_delete_absolute(cib_t * cib, const char *section, xmlNode * data, int call_options) { - op_common(cib); return cib_internal_op(cib, PCMK__CIB_REQUEST_ABS_DELETE, NULL, section, data, NULL, call_options, cib->user); } @@ -382,7 +360,6 @@ cib_client_delete_absolute(cib_t * cib, const char *section, xmlNode * data, int static int cib_client_erase(cib_t * cib, xmlNode ** output_data, int call_options) { - op_common(cib); return cib_internal_op(cib, PCMK__CIB_REQUEST_ERASE, NULL, NULL, NULL, output_data, call_options, cib->user); } @@ -392,7 +369,9 @@ cib_client_init_transaction(cib_t *cib) { int rc = pcmk_rc_ok; - op_common(cib); + if (cib == NULL) { + return -EINVAL; + } if (cib->transaction != NULL) { // A client can have at most one transaction at a time @@ -419,7 +398,10 @@ cib_client_end_transaction(cib_t *cib, bool commit, int call_options) const char *client_id = NULL; int rc = pcmk_ok; - op_common(cib); + if (cib == NULL) { + return -EINVAL; + } + cib->cmds->client_id(cib, NULL, &client_id); client_id = pcmk__s(client_id, "(unidentified)"); diff --git a/lib/cib/cib_utils.c b/lib/cib/cib_utils.c index 34652dc97a4..f868f11397d 100644 --- a/lib/cib/cib_utils.c +++ b/lib/cib/cib_utils.c @@ -884,15 +884,21 @@ cib_internal_op(cib_t * cib, const char *op, const char *host, const char *section, xmlNode * data, xmlNode ** output_data, int call_options, const char *user_name) { - int (*delegate) (cib_t * cib, const char *op, const char *host, - const char *section, xmlNode * data, - xmlNode ** output_data, int call_options, const char *user_name) = - cib->delegate_fn; + int (*delegate)(cib_t *cib, const char *op, const char *host, + const char *section, xmlNode *data, xmlNode **output_data, + int call_options, const char *user_name) = NULL; - if(user_name == NULL) { - user_name = getenv("CIB_user"); + if (cib == NULL) { + return -EINVAL; } + delegate = cib->delegate_fn; + if (delegate == NULL) { + return -EPROTONOSUPPORT; + } + if (user_name == NULL) { + user_name = getenv("CIB_user"); + } return delegate(cib, op, host, section, data, output_data, call_options, user_name); } From a9d1b50ff73acd6b51652601cb67389e2c7764ac Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 12 Aug 2024 14:28:54 -0500 Subject: [PATCH 089/364] Doc: Pacemaker Administration: correct syntax --- doc/sphinx/Pacemaker_Administration/agents.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sphinx/Pacemaker_Administration/agents.rst b/doc/sphinx/Pacemaker_Administration/agents.rst index 34bea60f85e..f6df901cdf7 100644 --- a/doc/sphinx/Pacemaker_Administration/agents.rst +++ b/doc/sphinx/Pacemaker_Administration/agents.rst @@ -652,7 +652,7 @@ listed in the table below. ``PCMK_logfacility`` if set to a value other than ``none`` or ``/dev/null``. * - .. _PCMK_LOGFILE: - .. _HA_LOGFILE:: + .. _HA_LOGFILE: .. index:: single: PCMK_LOGFILE: From 3050f56d9de3a32af1c461177d9ffd75050a2ca5 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 12 Aug 2024 15:27:46 -0500 Subject: [PATCH 090/364] Doc: tools: fix crm_rule man page section division --- tools/crm_rule.8.inc | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tools/crm_rule.8.inc b/tools/crm_rule.8.inc index 2b6ac896171..103bebacf79 100644 --- a/tools/crm_rule.8.inc +++ b/tools/crm_rule.8.inc @@ -1,8 +1,5 @@ [synopsis] -crm_rule mode [options] +crm_rule [options] -/state of rules/ +/from the Pacemaker configuration/ .SH OPTIONS - -/multiple times/ -.SH NOTICE From 1a884af7b1a402fc6fc08ad0cb17104622956fd2 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 12 Aug 2024 16:01:15 -0500 Subject: [PATCH 091/364] Doc: man: find man pages more carefully Previously it could find inconveniently named files in the autotools cache --- doc/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/Makefile.am b/doc/Makefile.am index a40ddfe6287..88e18b86273 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -103,7 +103,8 @@ global-clean: .PHONY: manhtml manhtml: $(MAKE) $(AM_MAKEFLAGS) -C .. all - find .. -name "[a-z]*.[78]" -exec $(MAKE) $(AM_MAKEFLAGS) \{\}.html \; + find ../agents ../daemons ../tools -name "[a-z]*.[78]" \ + -exec $(MAKE) $(AM_MAKEFLAGS) \{\}.html \; .PHONY: manhtml-upload manhtml-upload: manhtml From c3521319992bd60c07f918022f4acb8845fdb4dc Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 12 Aug 2024 16:08:54 -0500 Subject: [PATCH 092/364] Doc: uploads: don't preserve file modification times They're not important, and fail if the user doing the uploads is different from the owner of an existing file --- doc/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/Makefile.am b/doc/Makefile.am index 88e18b86273..f90d288c547 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -41,9 +41,9 @@ EXTRA_DIST = $(DEPRECATED_ORIGINAL) # toplevel rsync destination for www targets (without trailing slash) RSYNC_DEST ?= root@www.clusterlabs.org:/var/www/html -# recursive, preserve symlinks/permissions/times, verbose, compress, +# recursive, preserve symlinks, preserve permissions, verbose, compress, # don't cross filesystems, sparse, show progress -RSYNC_OPTS = -rlptvzxS --progress +RSYNC_OPTS = -rlpvzxS --progress if IS_ASCIIDOC ASCIIDOC_HTML_ARGS = --unsafe --backend=xhtml11 From 51a347058d20c8a8b752cdcebed86d5f9aa3e8b5 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 12 Aug 2024 16:10:16 -0500 Subject: [PATCH 093/364] Doc: uploads: change default upload host ClusterLabs changed where its websites are hosted. The name does not exist in DNS, so the uploading user has to have an entry for it in their ~/.ssh/config. --- doc/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Makefile.am b/doc/Makefile.am index f90d288c547..448d03b867f 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -39,7 +39,7 @@ SUBDIRS = sphinx EXTRA_DIST = $(DEPRECATED_ORIGINAL) # toplevel rsync destination for www targets (without trailing slash) -RSYNC_DEST ?= root@www.clusterlabs.org:/var/www/html +RSYNC_DEST ?= sites.clusterlabs.org:/var/www/html # recursive, preserve symlinks, preserve permissions, verbose, compress, # don't cross filesystems, sparse, show progress From 09472cc59808090d7cea3c24d5ff20a2c7a5e0e6 Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Tue, 13 Aug 2024 10:58:23 -0400 Subject: [PATCH 094/364] Low: schemas: Add additional node types to the crmadmin schema. I think these always should have been present as options in the schema. Without them, crmadmin output does not validate. --- xml/api/crmadmin-2.25.rng | 2 ++ xml/api/crmadmin-2.4.rng | 2 ++ 2 files changed, 4 insertions(+) diff --git a/xml/api/crmadmin-2.25.rng b/xml/api/crmadmin-2.25.rng index 973f6d4935d..1400a2ceb71 100644 --- a/xml/api/crmadmin-2.25.rng +++ b/xml/api/crmadmin-2.25.rng @@ -51,6 +51,8 @@ member remote ping + cluster + guest diff --git a/xml/api/crmadmin-2.4.rng b/xml/api/crmadmin-2.4.rng index 34c9ca4307a..3866d97dc59 100644 --- a/xml/api/crmadmin-2.4.rng +++ b/xml/api/crmadmin-2.4.rng @@ -58,6 +58,8 @@ member remote ping + cluster + guest From c36adbe6ec961d87b32cb90fe417e4d4911d41d9 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 20 Aug 2024 15:20:53 -0500 Subject: [PATCH 095/364] Low: tools: handle orphans when outputting node history in crm_mon --- lib/pengine/pe_output.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/pengine/pe_output.c b/lib/pengine/pe_output.c index 7792983e0ae..f4c74243924 100644 --- a/lib/pengine/pe_output.c +++ b/lib/pengine/pe_output.c @@ -2449,8 +2449,17 @@ node_history_list(pcmk__output_t *out, va_list args) { rsc_entry != NULL; rsc_entry = pcmk__xe_next_same(rsc_entry)) { const char *rsc_id = crm_element_value(rsc_entry, PCMK_XA_ID); - pcmk_resource_t *rsc = pe_find_resource(scheduler->resources, rsc_id); - const pcmk_resource_t *parent = pe__const_top_resource(rsc, false); + pcmk_resource_t *rsc = NULL; + const pcmk_resource_t *parent = NULL; + + if (rsc_id == NULL) { + continue; // Malformed entry + } + + rsc = pe_find_resource(scheduler->resources, rsc_id); + if (rsc == NULL) { + continue; // Resource was removed from configuration + } /* We can't use is_filtered here to filter group resources. For is_filtered, * we have to decide whether to check the parent or not. If we check the @@ -2460,6 +2469,7 @@ node_history_list(pcmk__output_t *out, va_list args) { * * For other resource types, is_filtered is okay. */ + parent = pe__const_top_resource(rsc, false); if (pcmk__is_group(parent)) { if (!pcmk__str_in_list(rsc_printable_id(rsc), only_rsc, pcmk__str_star_matches) From 0f3b5d28cf74ca5eddae767eeba65aa8c53f5070 Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Wed, 7 Aug 2024 14:22:39 -0400 Subject: [PATCH 096/364] Refactor: libcrmcommon: Add pcmk__tls_client_try_handshake. This is the guts of pcmk__tls_client_handshake, broken out into a separate function that doesn't loop which can be reused elsewhere. pcmk__tls_client_handshake can then be reimplemented in terms of this new function. --- include/crm/common/remote_internal.h | 13 ++++++ lib/common/remote.c | 59 +++++++++++++++++----------- 2 files changed, 50 insertions(+), 22 deletions(-) diff --git a/include/crm/common/remote_internal.h b/include/crm/common/remote_internal.h index a6a0a0a1521..0ce4208cd15 100644 --- a/include/crm/common/remote_internal.h +++ b/include/crm/common/remote_internal.h @@ -84,6 +84,19 @@ gnutls_session_t *pcmk__new_tls_session(int csock, unsigned int conn_type, int pcmk__init_tls_dh(gnutls_dh_params_t *dh_params); int pcmk__read_handshake_data(const pcmk__client_t *client); +/*! + * \internal + * \brief Make a single attempt to perform the client TLS handshake + * + * \param[in,out] remote Newly established remote connection + * \param[out] gnutls_rc If this is non-NULL, it will be set to the GnuTLS + * rc (for logging) if this function returns EPROTO, + * otherwise GNUTLS_E_SUCCESS + * + * \return Standard Pacemaker return code + */ +int pcmk__tls_client_try_handshake(pcmk__remote_t *remote, int *gnutls_rc); + /*! * \internal * \brief Perform client TLS handshake after establishing TCP socket diff --git a/lib/common/remote.c b/lib/common/remote.c index 0974ccfb1d1..b28b782fa13 100644 --- a/lib/common/remote.c +++ b/lib/common/remote.c @@ -129,36 +129,51 @@ localized_remote_header(pcmk__remote_t *remote) #ifdef HAVE_GNUTLS_GNUTLS_H int -pcmk__tls_client_handshake(pcmk__remote_t *remote, int timeout_sec, - int *gnutls_rc) +pcmk__tls_client_try_handshake(pcmk__remote_t *remote, int *gnutls_rc) { - const time_t time_limit = time(NULL) + timeout_sec; + int rc = pcmk_rc_ok; if (gnutls_rc != NULL) { *gnutls_rc = GNUTLS_E_SUCCESS; } + + rc = gnutls_handshake(*remote->tls_session); + + switch (rc) { + case GNUTLS_E_SUCCESS: + rc = pcmk_rc_ok; + break; + + case GNUTLS_E_INTERRUPTED: + case GNUTLS_E_AGAIN: + rc = EAGAIN; + break; + + default: + if (gnutls_rc != NULL) { + *gnutls_rc = rc; + } + + rc = EPROTO; + break; + } + + return rc; +} + +int pcmk__tls_client_handshake(pcmk__remote_t *remote, int timeout_sec, + int *gnutls_rc) +{ + const time_t time_limit = time(NULL) + timeout_sec; + do { - int rc = gnutls_handshake(*remote->tls_session); - - switch (rc) { - case GNUTLS_E_SUCCESS: - return pcmk_rc_ok; - - case GNUTLS_E_INTERRUPTED: - case GNUTLS_E_AGAIN: - rc = pcmk__remote_ready(remote, 1000); - if ((rc != pcmk_rc_ok) && (rc != ETIME)) { // Fatal error - return rc; - } - break; - - default: - if (gnutls_rc != NULL) { - *gnutls_rc = rc; - } - return EPROTO; + int rc = pcmk__tls_client_try_handshake(remote, gnutls_rc); + + if (rc != EAGAIN) { + return rc; } } while (time(NULL) < time_limit); + return ETIME; } From 15894cd13edd0612e6213d3aaca2de07e06cc851 Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Thu, 8 Aug 2024 13:26:40 -0400 Subject: [PATCH 097/364] Refactor: lrmd: Move TLS connection success/failure into functions. --- lib/lrmd/lrmd_client.c | 44 ++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/lib/lrmd/lrmd_client.c b/lib/lrmd/lrmd_client.c index 74292fb8fe8..ee0daae9b44 100644 --- a/lib/lrmd/lrmd_client.c +++ b/lib/lrmd/lrmd_client.c @@ -67,8 +67,11 @@ gnutls_psk_client_credentials_t psk_cred_s; static void lrmd_tls_disconnect(lrmd_t * lrmd); static int global_remote_msg_id = 0; static void lrmd_tls_connection_destroy(gpointer userdata); +static int add_tls_to_mainloop(lrmd_t *lrmd, bool do_handshake); #endif +static void report_async_connection_result(lrmd_t * lrmd, int rc); + typedef struct lrmd_private_s { uint64_t type; char *token; @@ -1386,6 +1389,32 @@ lrmd_gnutls_global_init(void) } gnutls_init = 1; } + +static void +tls_handshake_failed(lrmd_t *lrmd, int tls_rc, int rc) +{ + lrmd_private_t *native = lrmd->lrmd_private; + + crm_warn("Disconnecting after TLS handshake with " + "Pacemaker Remote server %s:%d failed: %s", + native->server, native->port, + (rc == EPROTO)? gnutls_strerror(tls_rc) : pcmk_rc_str(rc)); + gnutls_deinit(*native->remote->tls_session); + gnutls_free(native->remote->tls_session); + native->remote->tls_session = NULL; + lrmd_tls_connection_destroy(lrmd); +} + +static void +tls_handshake_succeeded(lrmd_t *lrmd) +{ + lrmd_private_t *native = lrmd->lrmd_private; + + crm_info("TLS connection to Pacemaker Remote server %s:%d succeeded", + native->server, native->port); + add_tls_to_mainloop(lrmd, true); + report_async_connection_result(lrmd, pcmk_rc2legacy(pcmk_rc_ok)); +} #endif static void @@ -1420,15 +1449,9 @@ tls_client_handshake(lrmd_t *lrmd) &tls_rc); if (rc != pcmk_rc_ok) { - crm_warn("Disconnecting after TLS handshake with " - "Pacemaker Remote server %s:%d failed: %s", - native->server, native->port, - (rc == EPROTO)? gnutls_strerror(tls_rc) : pcmk_rc_str(rc)); - gnutls_deinit(*native->remote->tls_session); - gnutls_free(native->remote->tls_session); - native->remote->tls_session = NULL; - lrmd_tls_connection_destroy(lrmd); + tls_handshake_failed(lrmd, tls_rc, rc); } + return rc; } @@ -1526,10 +1549,7 @@ lrmd_tcp_connect_cb(void *userdata, int rc, int sock) return; } - crm_info("TLS connection to Pacemaker Remote server %s:%d succeeded", - native->server, native->port); - rc = add_tls_to_mainloop(lrmd, true); - report_async_connection_result(lrmd, pcmk_rc2legacy(rc)); + tls_handshake_succeeded(lrmd); } static int From 5d97a82227e19f7f567ab3a16264dc0162cd0cf7 Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Wed, 14 Aug 2024 10:01:51 -0400 Subject: [PATCH 098/364] Low: lrmd: Report connection failures in tls_handshake_failed. This means we can also get rid of a couple calls to report_async_connection_result that are no longer necessary because this patch would cause duplicate calls. --- lib/lrmd/lrmd_client.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/lrmd/lrmd_client.c b/lib/lrmd/lrmd_client.c index ee0daae9b44..cbba4f6b143 100644 --- a/lib/lrmd/lrmd_client.c +++ b/lib/lrmd/lrmd_client.c @@ -1399,6 +1399,8 @@ tls_handshake_failed(lrmd_t *lrmd, int tls_rc, int rc) "Pacemaker Remote server %s:%d failed: %s", native->server, native->port, (rc == EPROTO)? gnutls_strerror(tls_rc) : pcmk_rc_str(rc)); + report_async_connection_result(lrmd, pcmk_rc2legacy(rc)); + gnutls_deinit(*native->remote->tls_session); gnutls_free(native->remote->tls_session); native->remote->tls_session = NULL; @@ -1545,7 +1547,6 @@ lrmd_tcp_connect_cb(void *userdata, int rc, int sock) } if (tls_client_handshake(lrmd) != pcmk_rc_ok) { - report_async_connection_result(lrmd, -EKEYREJECTED); return; } @@ -1676,10 +1677,6 @@ lrmd_api_connect_async(lrmd_t * lrmd, const char *name, int timeout) #ifdef HAVE_GNUTLS_GNUTLS_H case pcmk__client_tls: rc = lrmd_tls_connect_async(lrmd, timeout); - if (rc) { - /* connection failed, report rc now */ - report_async_connection_result(lrmd, rc); - } break; #endif default: From d9c9b3af781be0ba2bc40c177d60fc3cc7ec1459 Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Thu, 8 Aug 2024 13:29:35 -0400 Subject: [PATCH 099/364] Feature: lrmd: Perform the TLS handshake asynchronously. It can take some time for the gnutls handshake to complete, during which time the cluster is stuck waiting. Instead, immediately attempt the handshake. If that fails, then start a mainloop source that will repeatedly attempt the handshake and report results when it finishes. Fixes T824 --- lib/lrmd/lrmd_client.c | 81 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 74 insertions(+), 7 deletions(-) diff --git a/lib/lrmd/lrmd_client.c b/lib/lrmd/lrmd_client.c index cbba4f6b143..dac316fbb77 100644 --- a/lib/lrmd/lrmd_client.c +++ b/lib/lrmd/lrmd_client.c @@ -100,6 +100,7 @@ typedef struct lrmd_private_s { int expected_late_replies; GList *pending_notify; crm_trigger_t *process_notify; + crm_trigger_t *handshake_trigger; #endif lrmd_event_callback callback; @@ -626,6 +627,10 @@ lrmd_tls_connection_destroy(gpointer userdata) g_list_free_full(native->pending_notify, lrmd_free_xml); native->pending_notify = NULL; } + if (native->handshake_trigger != NULL) { + mainloop_destroy_trigger(native->handshake_trigger); + native->handshake_trigger = NULL; + } free(native->remote->buffer); free(native->remote->start_state); @@ -1499,12 +1504,55 @@ add_tls_to_mainloop(lrmd_t *lrmd, bool do_handshake) return rc; } +struct handshake_data_s { + lrmd_t *lrmd; + time_t start_time; + int timeout_sec; +}; + +static gboolean +try_handshake_cb(gpointer user_data) +{ + struct handshake_data_s *hs = user_data; + lrmd_t *lrmd = hs->lrmd; + lrmd_private_t *native = lrmd->lrmd_private; + pcmk__remote_t *remote = native->remote; + + int rc = pcmk_rc_ok; + int tls_rc = GNUTLS_E_SUCCESS; + + if (time(NULL) >= hs->start_time + hs->timeout_sec) { + rc = ETIME; + + tls_handshake_failed(lrmd, GNUTLS_E_TIMEDOUT, rc); + free(hs); + return 0; + } + + rc = pcmk__tls_client_try_handshake(remote, &tls_rc); + + if (rc == pcmk_rc_ok) { + tls_handshake_succeeded(lrmd); + free(hs); + return 0; + } else if (rc == EAGAIN) { + mainloop_set_trigger(native->handshake_trigger); + return 1; + } else { + rc = EKEYREJECTED; + tls_handshake_failed(lrmd, tls_rc, rc); + free(hs); + return 0; + } +} + static void lrmd_tcp_connect_cb(void *userdata, int rc, int sock) { lrmd_t *lrmd = userdata; lrmd_private_t *native = lrmd->lrmd_private; gnutls_datum_t psk_key = { NULL, 0 }; + int tls_rc = GNUTLS_E_SUCCESS; native->async_timer = 0; @@ -1517,9 +1565,7 @@ lrmd_tcp_connect_cb(void *userdata, int rc, int sock) return; } - /* The TCP connection was successful, so establish the TLS connection. - * @TODO make this async to avoid blocking code in client - */ + /* The TCP connection was successful, so establish the TLS connection. */ native->sock = sock; @@ -1546,11 +1592,32 @@ lrmd_tcp_connect_cb(void *userdata, int rc, int sock) return; } - if (tls_client_handshake(lrmd) != pcmk_rc_ok) { - return; - } + /* If the TLS handshake immediately succeeds or fails, we can handle that + * now without having to deal with mainloops and retries. Otherwise, add a + * trigger to keep trying until we get a result (or it times out). + */ + rc = pcmk__tls_client_try_handshake(native->remote, &tls_rc); + if (rc == EAGAIN) { + struct handshake_data_s *hs = NULL; - tls_handshake_succeeded(lrmd); + if (native->handshake_trigger != NULL) { + return; + } + + hs = pcmk__assert_alloc(1, sizeof(struct handshake_data_s)); + hs->lrmd = lrmd; + hs->start_time = time(NULL); + hs->timeout_sec = TLS_HANDSHAKE_TIMEOUT; + + native->handshake_trigger = mainloop_add_trigger(G_PRIORITY_LOW, try_handshake_cb, hs); + mainloop_set_trigger(native->handshake_trigger); + + } else if (rc == pcmk_rc_ok) { + tls_handshake_succeeded(lrmd); + + } else { + tls_handshake_failed(lrmd, tls_rc, rc); + } } static int From 6603f45628595c6156e61c8aa8952f50ca500598 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Mon, 26 Aug 2024 10:38:08 -0500 Subject: [PATCH 100/364] Doc: sysconfig: improve PCMK_panic_action description ... especially to document the new value "off" --- etc/sysconfig/pacemaker.in | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/etc/sysconfig/pacemaker.in b/etc/sysconfig/pacemaker.in index c74fae708e7..f9b591a0d54 100644 --- a/etc/sysconfig/pacemaker.in +++ b/etc/sysconfig/pacemaker.in @@ -179,13 +179,19 @@ # PCMK_panic_action # -# Pacemaker will panic the local host under certain conditions. By default, -# this means rebooting the host. This variable can change that behavior: if -# "crash", trigger a kernel crash (useful if you want a kernel dump to -# investigate); if "sync-reboot" or "sync-crash", synchronize filesystems -# before rebooting the host or triggering a kernel crash. The sync values are -# more likely to preserve log messages, but with the risk that the host may be -# left active if the synchronization hangs. +# Pacemaker panics the local node under certain conditions (for example, losing +# quorum when no-quorum-policy is "suicide", or being notified of the local +# node's own fencing when fence-reaction is "panic"). This variable determines +# the panic behavior. Allowed values: +# +# reboot Immediately reboot the host (not a clean reboot) +# off Immediately kill power to the host (not a clean shutdown) +# crash Trigger a kernel crash if possible, otherwise like reboot +# sync-reboot, sync-off, sync-crash +# "sync-" can be put in front of any of the above values to synchronize +# filesystems before panicking (making log messages more likely to be +# preserved, but with the risk that the host may be left active if the +# synchronization hangs) # # Default: PCMK_panic_action="reboot" From 562745575a4d8dc00c239e674714856c51cac6ef Mon Sep 17 00:00:00 2001 From: Reid Wahl Date: Wed, 28 Aug 2024 19:12:20 -0700 Subject: [PATCH 101/364] Fix: libcrmcommon: Detect newly created alerts section This fixes a regression introduced by 20ad1a9. If the CIB does not already contain an alerts element, creating a new alert requires creating the alerts element. This is included in the patchset as a create operation. (Adding a new alert to an existing alerts element is a modify operation.) Prior to this commit, we were checking whether cib_op="create". We should be checking whether operation="create". As a result, if a new alert was created in a CIB that did not previously contain an alerts element, the controller would not detect the change and would not process the new alert. Fixes T865 Fixes RHEL-55458 Signed-off-by: Reid Wahl --- lib/cib/cib_utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cib/cib_utils.c b/lib/cib/cib_utils.c index f868f11397d..d4b8120fbc1 100644 --- a/lib/cib/cib_utils.c +++ b/lib/cib/cib_utils.c @@ -160,7 +160,7 @@ element_in_patchset_v2(const xmlNode *patchset, const char *element) NULL, NULL); change != NULL; change = pcmk__xe_next_same(change)) { - const char *op = crm_element_value(change, PCMK__XA_CIB_OP); + const char *op = crm_element_value(change, PCMK_XA_OPERATION); const char *diff_xpath = crm_element_value(change, PCMK_XA_PATH); if (pcmk__str_eq(diff_xpath, element_regex, pcmk__str_regex)) { From c714a2460cee17d296f9246f98b3465bc95a6dba Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 13 Aug 2024 11:56:44 -0500 Subject: [PATCH 102/364] API: libcrmcommon: add pcmk_cib_node_shutdown() This is intended for sbd's use, to replace its own shutdown_attr_in_cib() --- include/crm/common/nodes.h | 4 ++ lib/common/nodes.c | 30 ++++++++ lib/common/tests/nodes/Makefile.am | 5 +- .../tests/nodes/pcmk_cib_node_shutdown_test.c | 70 +++++++++++++++++++ 4 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 lib/common/tests/nodes/pcmk_cib_node_shutdown_test.c diff --git a/include/crm/common/nodes.h b/include/crm/common/nodes.h index 5f6f25ff0c2..64c574ad3cd 100644 --- a/include/crm/common/nodes.h +++ b/include/crm/common/nodes.h @@ -12,6 +12,7 @@ #include // bool #include // gboolean, GList, GHashTable +#include // xmlNode #include // pcmk_resource_t, pcmk_scheduler_t @@ -180,6 +181,9 @@ bool pcmk_node_is_in_maintenance(const pcmk_node_t *node); bool pcmk_foreach_active_resource(pcmk_node_t *node, bool (*fn)(pcmk_resource_t *, void *), void *user_data); + +const char *pcmk_cib_node_shutdown(xmlNode *cib, const char *node); + /*! * \internal * \brief Return a string suitable for logging as a node name diff --git a/lib/common/nodes.c b/lib/common/nodes.c index 4edeafbc422..5228ea26185 100644 --- a/lib/common/nodes.c +++ b/lib/common/nodes.c @@ -161,3 +161,33 @@ pcmk__find_node_in_list(const GList *nodes, const char *node_name) } return NULL; } + +#define XP_SHUTDOWN "//" PCMK__XE_NODE_STATE "[@" PCMK_XA_UNAME "='%s']/" \ + PCMK__XE_TRANSIENT_ATTRIBUTES "/" PCMK_XE_INSTANCE_ATTRIBUTES "/" \ + PCMK_XE_NVPAIR "[@" PCMK_XA_NAME "='" PCMK__NODE_ATTR_SHUTDOWN "']" + +/*! + * \brief Get value of a node's shutdown attribute from CIB, if present + * + * \param[in] cib CIB to check + * \param[in] node Name of node to check + * + * \return Value of shutdown attribute for \p node in \p cib if any, + * otherwise NULL + * \note The return value is a pointer into \p cib and so is valid only for the + * lifetime of that object. + */ +const char * +pcmk_cib_node_shutdown(xmlNode *cib, const char *node) +{ + if ((cib != NULL) && (node != NULL)) { + char *xpath = crm_strdup_printf(XP_SHUTDOWN, node); + xmlNode *match = get_xpath_object(xpath, cib, LOG_TRACE); + + free(xpath); + if (match != NULL) { + return crm_element_value(match, PCMK_XA_VALUE); + } + } + return NULL; +} diff --git a/lib/common/tests/nodes/Makefile.am b/lib/common/tests/nodes/Makefile.am index f52c615e4da..6c4964e1d06 100644 --- a/lib/common/tests/nodes/Makefile.am +++ b/lib/common/tests/nodes/Makefile.am @@ -12,12 +12,13 @@ include $(top_srcdir)/mk/unittest.mk # Add "_test" to the end of all test program names to simplify .gitignore. check_PROGRAMS = pcmk__find_node_in_list_test \ + pcmk__xe_add_node_test \ + pcmk_cib_node_shutdown_test \ pcmk_foreach_active_resource_test \ pcmk_node_is_clean_test \ pcmk_node_is_in_maintenance_test \ pcmk_node_is_online_test \ pcmk_node_is_pending_test \ - pcmk_node_is_shutting_down_test \ - pcmk__xe_add_node_test + pcmk_node_is_shutting_down_test TESTS = $(check_PROGRAMS) diff --git a/lib/common/tests/nodes/pcmk_cib_node_shutdown_test.c b/lib/common/tests/nodes/pcmk_cib_node_shutdown_test.c new file mode 100644 index 00000000000..a64a7283e8e --- /dev/null +++ b/lib/common/tests/nodes/pcmk_cib_node_shutdown_test.c @@ -0,0 +1,70 @@ +/* + * Copyright 2024 the Pacemaker project contributors + * + * The version control history for this file may have further details. + * + * This source code is licensed under the GNU General Public License version 2 + * or later (GPLv2+) WITHOUT ANY WARRANTY. + */ + +#include + +#include // NULL +#include // xmlNode + +#include +#include + +// Minimum CIB structure needed for function's XPath search +#define CIB_XML \ + "<" PCMK_XE_CIB ">" \ + "<" PCMK_XE_STATUS ">" \ + "<" PCMK__XE_NODE_STATE " " PCMK_XA_UNAME "='node1'>" \ + "<" PCMK__XE_TRANSIENT_ATTRIBUTES ">" \ + "<" PCMK_XE_INSTANCE_ATTRIBUTES ">" \ + "<" PCMK_XE_NVPAIR " " \ + PCMK_XA_NAME "='" PCMK__NODE_ATTR_SHUTDOWN "' " \ + PCMK_XA_VALUE "='999'/>" \ + "" \ + "" \ + "" \ + "" \ + "" + +static void +null_args(void **state) +{ + xmlNode *xml = pcmk__xml_parse(CIB_XML); + + assert_non_null(xml); + assert_null(pcmk_cib_node_shutdown(NULL, NULL)); + assert_null(pcmk_cib_node_shutdown(xml, NULL)); + assert_null(pcmk_cib_node_shutdown(NULL, "node1")); + free_xml(xml); +} + +static void +shutdown_absent(void **state) +{ + xmlNode *xml = pcmk__xml_parse(CIB_XML); + + assert_non_null(xml); + assert_null(pcmk_cib_node_shutdown(xml, "node")); + assert_null(pcmk_cib_node_shutdown(xml, "node10")); + free_xml(xml); +} + +static void +shutdown_present(void **state) +{ + xmlNode *xml = pcmk__xml_parse(CIB_XML); + + assert_non_null(xml); + assert_string_equal(pcmk_cib_node_shutdown(xml, "node1"), "999"); + free_xml(xml); +} + +PCMK__UNIT_TEST(NULL, NULL, + cmocka_unit_test(null_args), + cmocka_unit_test(shutdown_absent), + cmocka_unit_test(shutdown_present)) From 8bc1ac39e171294b9bbf223d3caba192809d34fd Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Thu, 29 Aug 2024 09:40:48 -0500 Subject: [PATCH 103/364] Doc: Pacemaker Explained: correct clone-node-max description --- doc/sphinx/Pacemaker_Explained/collective.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/sphinx/Pacemaker_Explained/collective.rst b/doc/sphinx/Pacemaker_Explained/collective.rst index dc6832c061b..bccabe8bf4e 100644 --- a/doc/sphinx/Pacemaker_Explained/collective.rst +++ b/doc/sphinx/Pacemaker_Explained/collective.rst @@ -348,8 +348,8 @@ _____________ | | | single: option; promoted-node-max (clone) | | | | single: promoted-node-max; clone option | | | | | - | | | If ``promotable`` is **true** and ``globally-unique`` | - | | | is **false**, the number of clone instances can be | + | | | If ``promotable`` and ``globally-unique`` are | + | | | **true**, the number of clone instances can be | | | | promoted at one time on a single node | +-------------------+-----------------+-------------------------------------------------------+ From f0c513adf5b89b20b15ef2ea22f4f6c8d9b6e767 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 27 Aug 2024 16:41:33 -0500 Subject: [PATCH 104/364] Refactor: fencer: rename variables for terminology change Ref T279 --- daemons/fenced/fenced_commands.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/daemons/fenced/fenced_commands.c b/daemons/fenced/fenced_commands.c index dc8ace77b7c..63110fbc832 100644 --- a/daemons/fenced/fenced_commands.c +++ b/daemons/fenced/fenced_commands.c @@ -52,7 +52,7 @@ struct device_search_s { /* number of device replies received so far */ int replies_received; /* whether the target is eligible to perform requested action (or off) */ - bool allow_suicide; + bool allow_self; /* private data to pass to search callback function */ void *user_data; @@ -2057,13 +2057,13 @@ search_devices_record_result(struct device_search_s *search, const char *device, * \param[in] device Fence device to check * \param[in] action Fence action to check * \param[in] target Hostname of fence target - * \param[in] allow_suicide Whether self-fencing is allowed for this operation + * \param[in] allow_self Whether self-fencing is allowed for this operation * * \return TRUE if local host is allowed to execute action, FALSE otherwise */ static gboolean localhost_is_eligible(const stonith_device_t *device, const char *action, - const char *target, gboolean allow_suicide) + const char *target, gboolean allow_self) { gboolean localhost_is_target = pcmk__str_eq(target, stonith_our_uname, pcmk__str_casei); @@ -2079,7 +2079,7 @@ localhost_is_eligible(const stonith_device_t *device, const char *action, return FALSE; } - } else if (localhost_is_target && !allow_suicide) { + } else if (localhost_is_target && !allow_self) { crm_trace("'%s' operation does not support self-fencing", action); return FALSE; } @@ -2158,7 +2158,7 @@ can_fence_host_with_device(stonith_device_t *dev, goto search_report_results; } else if (!localhost_is_eligible_with_remap(dev, action, target, - search->allow_suicide)) { + search->allow_self)) { check_type = "This node is not allowed to execute action"; goto search_report_results; } @@ -2250,8 +2250,10 @@ search_devices(gpointer key, gpointer value, gpointer user_data) #define DEFAULT_QUERY_TIMEOUT 20 static void -get_capable_devices(const char *host, const char *action, int timeout, bool suicide, void *user_data, - void (*callback) (GList * devices, void *user_data), uint32_t support_action_only) +get_capable_devices(const char *host, const char *action, int timeout, + bool allow_self, void *user_data, + void (*callback) (GList * devices, void *user_data), + uint32_t support_action_only) { struct device_search_s *search; guint ndevices = g_hash_table_size(device_list); @@ -2266,7 +2268,7 @@ get_capable_devices(const char *host, const char *action, int timeout, bool suic search->host = pcmk__str_copy(host); search->action = pcmk__str_copy(action); search->per_device_timeout = timeout; - search->allow_suicide = suicide; + search->allow_self = allow_self; search->callback = callback; search->user_data = user_data; search->support_action_only = support_action_only; @@ -2360,13 +2362,13 @@ add_action_specific_attributes(xmlNode *xml, const char *action, * \param[in] action Fence action * \param[in] device Fence device * \param[in] target Fence target - * \param[in] allow_suicide Whether self-fencing is allowed + * \param[in] allow_self Whether self-fencing is allowed */ static void add_disallowed(xmlNode *xml, const char *action, const stonith_device_t *device, - const char *target, gboolean allow_suicide) + const char *target, gboolean allow_self) { - if (!localhost_is_eligible(device, action, target, allow_suicide)) { + if (!localhost_is_eligible(device, action, target, allow_self)) { crm_trace("Action '%s' using %s is disallowed for local host", action, device->id); pcmk__xe_set_bool_attr(xml, PCMK__XA_ST_ACTION_DISALLOWED, true); @@ -2381,18 +2383,18 @@ add_disallowed(xmlNode *xml, const char *action, const stonith_device_t *device, * \param[in] action Fence action * \param[in] device Fence device * \param[in] target Fence target - * \param[in] allow_suicide Whether self-fencing is allowed + * \param[in] allow_self Whether self-fencing is allowed */ static void add_action_reply(xmlNode *xml, const char *action, const stonith_device_t *device, const char *target, - gboolean allow_suicide) + gboolean allow_self) { xmlNode *child = pcmk__xe_create(xml, PCMK__XE_ST_DEVICE_ACTION); crm_xml_add(child, PCMK_XA_ID, action); add_action_specific_attributes(child, action, device, target); - add_disallowed(child, action, device, target, allow_suicide); + add_disallowed(child, action, device, target, allow_self); } /*! From 25034bbe3413e440afe59476c21e2fd1de001c1d Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 27 Aug 2024 16:43:39 -0500 Subject: [PATCH 105/364] Log: fencer: update terminology in trace message ... and comments Ref T279 --- daemons/fenced/fenced_remote.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/daemons/fenced/fenced_remote.c b/daemons/fenced/fenced_remote.c index 653c2e697bf..7d54e3b2be0 100644 --- a/daemons/fenced/fenced_remote.c +++ b/daemons/fenced/fenced_remote.c @@ -1034,7 +1034,7 @@ merge_duplicates(remote_fencing_op_t *op) continue; } if (pcmk__str_eq(other->target, other->originator, pcmk__str_casei)) { - crm_trace("%.8s not duplicate of %.8s: suicide for %s", + crm_trace("%.8s not duplicate of %.8s: self-fencing for %s", op->id, other->id, other->target); continue; } @@ -1983,10 +1983,10 @@ request_peer_fencing(remote_fencing_op_t *op, peer_device_info_t *peer) come back in between - Delicate might be the case where we have watchdog-fencing enabled for a node but the watchdog-fencing-device isn't - explicitly chosen for suicide. Local pe-execution in sbd - may detect the node as unclean and lead to timely suicide. - Otherwise the selection of PCMK_OPT_STONITH_WATCHDOG_TIMEOUT - at least is questionable. + explicitly chosen for self-fencing. Local scheduler execution + in sbd might detect the node as unclean and lead to timely + self-fencing. Otherwise the selection of + PCMK_OPT_STONITH_WATCHDOG_TIMEOUT at least is questionable. */ /* coming here we're not waiting for watchdog timeout - From c8f14882f1079f54c62f831e3b54f31ecd311568 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 27 Aug 2024 17:11:23 -0500 Subject: [PATCH 106/364] Doc: libstonithd: document enum stonith_call_options values --- include/crm/stonith-ng.h | 61 +++++++++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/include/crm/stonith-ng.h b/include/crm/stonith-ng.h index 4774d9a0f5a..b897cb70f32 100644 --- a/include/crm/stonith-ng.h +++ b/include/crm/stonith-ng.h @@ -39,27 +39,48 @@ enum stonith_state { stonith_disconnected, }; +//! Flags that can be set in call options for API requests enum stonith_call_options { - st_opt_none = 0x00000000, - st_opt_verbose = 0x00000001, - st_opt_allow_suicide = 0x00000002, - - st_opt_manual_ack = 0x00000008, - st_opt_discard_reply = 0x00000010, -/* st_opt_all_replies = 0x00000020, */ - st_opt_topology = 0x00000040, - st_opt_scope_local = 0x00000100, - st_opt_cs_nodeid = 0x00000200, - st_opt_sync_call = 0x00001000, - /*! Allow the timeout period for a callback to be adjusted - * based on the time the server reports the operation will take. */ - st_opt_timeout_updates = 0x00002000, - /*! Only report back if operation is a success in callback */ - st_opt_report_only_success = 0x00004000, - /* used where ever apropriate - e.g. cleanup of history */ - st_opt_cleanup = 0x000080000, - /* used where ever apropriate - e.g. send out a history query to all nodes */ - st_opt_broadcast = 0x000100000, + //! No options + st_opt_none = 0, + + //! Unused + st_opt_verbose = (1 << 0), + + //! The fencing target is allowed to execute the request + st_opt_allow_suicide = (1 << 1), + + // Used internally to indicate that request is manual fence confirmation + //! \internal Do not use + st_opt_manual_ack = (1 << 3), + + //! Do not return any reply from server + st_opt_discard_reply = (1 << 4), + + // Used internally to indicate that request requires a fencing topology + //! \internal Do not use + st_opt_topology = (1 << 6), + + //! Unused + st_opt_scope_local = (1 << 8), + + //! Interpret target as node cluster layer ID instead of name + st_opt_cs_nodeid = (1 << 9), + + //! Wait for request to be completed before returning + st_opt_sync_call = (1 << 12), + + //! Request that server send an update with optimal callback timeout + st_opt_timeout_updates = (1 << 13), + + //! Invoke callback only if request succeeded + st_opt_report_only_success = (1 << 14), + + //! For a fence history request, request that the history be cleared + st_opt_cleanup = (1 << 19), + + //! For a fence history request, broadcast the request to all nodes + st_opt_broadcast = (1 << 20), }; /*! Order matters here, do not change values */ From 2b976c3687ada7786fc0a9378a6c83561d199f47 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 27 Aug 2024 17:13:25 -0500 Subject: [PATCH 107/364] API: libstonithd: deprecate enum stonith_call_options value st_opt_verbose --- include/crm/stonith-ng.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/crm/stonith-ng.h b/include/crm/stonith-ng.h index b897cb70f32..431793b9514 100644 --- a/include/crm/stonith-ng.h +++ b/include/crm/stonith-ng.h @@ -44,8 +44,10 @@ enum stonith_call_options { //! No options st_opt_none = 0, - //! Unused +#if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1) + //! \deprecated Unused st_opt_verbose = (1 << 0), +#endif //! The fencing target is allowed to execute the request st_opt_allow_suicide = (1 << 1), From c787c14e09426728027f1b94eaf37675d84bef4c Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 27 Aug 2024 17:14:14 -0500 Subject: [PATCH 108/364] API: libstonithd: deprecate enum stonith_call_options value st_opt_scope_local --- include/crm/stonith-ng.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/crm/stonith-ng.h b/include/crm/stonith-ng.h index 431793b9514..2668e16288d 100644 --- a/include/crm/stonith-ng.h +++ b/include/crm/stonith-ng.h @@ -63,8 +63,10 @@ enum stonith_call_options { //! \internal Do not use st_opt_topology = (1 << 6), - //! Unused +#if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1) + //! \deprecated Unused st_opt_scope_local = (1 << 8), +#endif //! Interpret target as node cluster layer ID instead of name st_opt_cs_nodeid = (1 << 9), From 40f18bb56b717c2c697df0b5dea8d8d7289d39e1 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 27 Aug 2024 17:15:34 -0500 Subject: [PATCH 109/364] API: libstonithd: add enum stonith_call_options value st_opt_allow_self_fencing ... and use it everywhere internally instead of st_opt_allow_suicide Ref T279 --- daemons/controld/controld_fencing.c | 2 +- daemons/fenced/fenced_commands.c | 9 ++++++--- include/crm/stonith-ng.h | 5 ++++- lib/fencing/st_client.c | 2 +- lib/pacemaker/pcmk_fence.c | 4 ++-- tools/stonith_admin.c | 2 +- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/daemons/controld/controld_fencing.c b/daemons/controld/controld_fencing.c index dcffc8ec66b..698b285f08b 100644 --- a/daemons/controld/controld_fencing.c +++ b/daemons/controld/controld_fencing.c @@ -940,7 +940,7 @@ fence_with_delay(const char *target, const char *type, int delay) / 1000); if (crmd_join_phase_count(crm_join_confirmed) == 1) { - stonith__set_call_options(options, target, st_opt_allow_suicide); + stonith__set_call_options(options, target, st_opt_allow_self_fencing); } return stonith_api->cmds->fence_with_delay(stonith_api, options, target, type, timeout_sec, 0, delay); diff --git a/daemons/fenced/fenced_commands.c b/daemons/fenced/fenced_commands.c index 63110fbc832..47ab6287438 100644 --- a/daemons/fenced/fenced_commands.c +++ b/daemons/fenced/fenced_commands.c @@ -2497,9 +2497,11 @@ stonith_query_capable_device_cb(GList * devices, void *user_data) * versions will ignore "off" and "on", so they are not a problem. */ add_disallowed(dev, action, device, query->target, - pcmk_is_set(query->call_options, st_opt_allow_suicide)); + pcmk_is_set(query->call_options, + st_opt_allow_self_fencing)); add_action_reply(dev, PCMK_ACTION_OFF, device, query->target, - pcmk_is_set(query->call_options, st_opt_allow_suicide)); + pcmk_is_set(query->call_options, + st_opt_allow_self_fencing)); add_action_reply(dev, PCMK_ACTION_ON, device, query->target, FALSE); } @@ -3272,7 +3274,8 @@ handle_query_request(pcmk__request_t *request) crm_element_value_int(request->xml, PCMK__XA_ST_TIMEOUT, &timeout); get_capable_devices(target, action, timeout, - pcmk_is_set(query->call_options, st_opt_allow_suicide), + pcmk_is_set(query->call_options, + st_opt_allow_self_fencing), query, stonith_query_capable_device_cb, st_device_supports_none); return NULL; } diff --git a/include/crm/stonith-ng.h b/include/crm/stonith-ng.h index 2668e16288d..79481ac594c 100644 --- a/include/crm/stonith-ng.h +++ b/include/crm/stonith-ng.h @@ -50,7 +50,10 @@ enum stonith_call_options { #endif //! The fencing target is allowed to execute the request - st_opt_allow_suicide = (1 << 1), + st_opt_allow_self_fencing = (1 << 1), + + //! The fencing target is allowed to execute the request + st_opt_allow_suicide = st_opt_allow_self_fencing, // Used internally to indicate that request is manual fence confirmation //! \internal Do not use diff --git a/lib/fencing/st_client.c b/lib/fencing/st_client.c index 17f4766944e..0a0e075db64 100644 --- a/lib/fencing/st_client.c +++ b/lib/fencing/st_client.c @@ -1995,7 +1995,7 @@ stonith_api_kick(uint32_t nodeid, const char *uname, int timeout, bool off) int opts = 0; stonith__set_call_options(opts, name, - st_opt_sync_call|st_opt_allow_suicide); + st_opt_sync_call|st_opt_allow_self_fencing); if ((uname == NULL) && (nodeid > 0)) { stonith__set_call_options(opts, name, st_opt_cs_nodeid); } diff --git a/lib/pacemaker/pcmk_fence.c b/lib/pacemaker/pcmk_fence.c index eea78162bd4..f8aa67d4e83 100644 --- a/lib/pacemaker/pcmk_fence.c +++ b/lib/pacemaker/pcmk_fence.c @@ -20,7 +20,7 @@ #include #include -static const int st_opts = st_opt_sync_call | st_opt_allow_suicide; +static const int st_opts = st_opt_sync_call|st_opt_allow_self_fencing; static GMainLoop *mainloop = NULL; @@ -160,7 +160,7 @@ async_fence_helper(gpointer user_data) notify_callback); call_id = st->cmds->fence_with_delay(st, - st_opt_allow_suicide, + st_opt_allow_self_fencing, async_fence_data.target, async_fence_data.action, async_fence_data.timeout/1000, diff --git a/tools/stonith_admin.c b/tools/stonith_admin.c index 2268e0d4a5c..b8a35d22956 100644 --- a/tools/stonith_admin.c +++ b/tools/stonith_admin.c @@ -234,7 +234,7 @@ static pcmk__supported_format_t formats[] = { { NULL, NULL, NULL } }; -static const int st_opts = st_opt_sync_call | st_opt_allow_suicide; +static const int st_opts = st_opt_sync_call|st_opt_allow_self_fencing; static char *name = NULL; From 754f52e254cc18253b342411e2530a6a5d56e69f Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 27 Aug 2024 17:22:56 -0500 Subject: [PATCH 110/364] API: libstonithd: deprecate enum stonith_call_options value st_opt_allow_suicide Ref T279 --- include/crm/stonith-ng.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/crm/stonith-ng.h b/include/crm/stonith-ng.h index 79481ac594c..8ce9f9d6724 100644 --- a/include/crm/stonith-ng.h +++ b/include/crm/stonith-ng.h @@ -52,8 +52,10 @@ enum stonith_call_options { //! The fencing target is allowed to execute the request st_opt_allow_self_fencing = (1 << 1), - //! The fencing target is allowed to execute the request +#if !defined(PCMK_ALLOW_DEPRECATED) || (PCMK_ALLOW_DEPRECATED == 1) + //! \deprecated Use st_opt_allow_self_fencing instead st_opt_allow_suicide = st_opt_allow_self_fencing, +#endif // Used internally to indicate that request is manual fence confirmation //! \internal Do not use From c5ac680859fb9d4bbf1e9c034f7fa87274d23161 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 27 Aug 2024 17:26:59 -0500 Subject: [PATCH 111/364] Refactor: controller: rename panic-on-quorum-loss flag --- daemons/controld/controld_control.c | 2 +- daemons/controld/controld_globals.h | 2 +- daemons/controld/controld_membership.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/daemons/controld/controld_control.c b/daemons/controld/controld_control.c index 368659b08f0..a6c7103fdd5 100644 --- a/daemons/controld/controld_control.c +++ b/daemons/controld/controld_control.c @@ -577,7 +577,7 @@ config_query_callback(xmlNode * msg, int call_id, int rc, xmlNode * output, void value = g_hash_table_lookup(config_hash, PCMK_OPT_NO_QUORUM_POLICY); if (pcmk__str_eq(value, PCMK_VALUE_FENCE_LEGACY, pcmk__str_casei) && (pcmk__locate_sbd() != 0)) { - controld_set_global_flags(controld_no_quorum_suicide); + controld_set_global_flags(controld_no_quorum_panic); } value = g_hash_table_lookup(config_hash, PCMK_OPT_SHUTDOWN_LOCK); diff --git a/daemons/controld/controld_globals.h b/daemons/controld/controld_globals.h index 2ff8a57656c..62171e23a7c 100644 --- a/daemons/controld/controld_globals.h +++ b/daemons/controld/controld_globals.h @@ -118,7 +118,7 @@ enum controld_flags { controld_has_quorum = (1 << 3), //! Panic the local node if it loses quorum - controld_no_quorum_suicide = (1 << 4), + controld_no_quorum_panic = (1 << 4), //! Lock resources to the local node when it shuts down cleanly controld_shutdown_lock_enabled = (1 << 5), diff --git a/daemons/controld/controld_membership.c b/daemons/controld/controld_membership.c index 1079d6aa810..0d182d6d082 100644 --- a/daemons/controld/controld_membership.c +++ b/daemons/controld/controld_membership.c @@ -417,7 +417,7 @@ crm_update_quorum(gboolean quorum, gboolean force_update) } else if (pcmk_all_flags_set(controld_globals.flags, controld_ever_had_quorum - |controld_no_quorum_suicide)) { + |controld_no_quorum_panic)) { pcmk__panic(__func__); } From 0e996b9d28d1606ce52d741f13f247bf6ee693b9 Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Tue, 27 Aug 2024 17:40:21 -0500 Subject: [PATCH 112/364] Feature: CIB: allow no-quorum-policy "fence" and deprecate "suicide" Fixes T279 --- cts/cli/regression.daemons.exp | 3 ++- cts/cli/regression.tools.exp | 6 ++++-- daemons/controld/controld_control.c | 3 ++- doc/sphinx/Pacemaker_Explained/cluster-options.rst | 4 +++- lib/common/options.c | 6 ++++-- lib/pengine/unpack.c | 3 ++- 6 files changed, 17 insertions(+), 8 deletions(-) diff --git a/cts/cli/regression.daemons.exp b/cts/cli/regression.daemons.exp index d530c4ac98c..74eedee957b 100644 --- a/cts/cli/regression.daemons.exp +++ b/cts/cli/regression.daemons.exp @@ -446,7 +446,7 @@ - What to do when the cluster does not have quorum Allowed values: stop, freeze, ignore, demote, suicide + What to do when the cluster does not have quorum Allowed values: stop, freeze, ignore, demote, fence, suicide What to do when the cluster does not have quorum @@ -456,6 +456,7 @@ diff --git a/cts/cli/regression.tools.exp b/cts/cli/regression.tools.exp index b1bfc3c451e..8c946fa6649 100644 --- a/cts/cli/regression.tools.exp +++ b/cts/cli/regression.tools.exp @@ -67,7 +67,7 @@ Also known as properties, these are options that affect behavior across the enti * Possible values: "stop" (default), "panic" * no-quorum-policy: What to do when the cluster does not have quorum - * Possible values: "stop" (default), "freeze", "ignore", "demote", "suicide" + * Possible values: "stop" (default), "freeze", "ignore", "demote", "fence", "suicide" * shutdown-lock: Whether to lock resources to a cleanly shut down node * When true, resources active on a node when it is cleanly shut down are kept "locked" to that node (not allowed to run elsewhere) until they start again on that node after it rejoins (or for at most shutdown-lock-limit, if set). Stonith resources and Pacemaker Remote connections are never locked. Clone and bundle instances and the promoted role of promotable clones are currently never locked, though support could be added in a future release. @@ -261,6 +261,7 @@ Also known as properties, these are options that affect behavior across the enti