Page MenuHomeClusterLabs Projects

No OneTemporary

This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/include/crm/crm.h b/include/crm/crm.h
index 41279b02b8..37bc5ce8d9 100644
--- a/include/crm/crm.h
+++ b/include/crm/crm.h
@@ -1,200 +1,201 @@
/*
* Copyright (C) 2004 Andrew Beekhof <andrew@beekhof.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef CRM__H
# define CRM__H
/**
* \file
* \brief A dumping ground
* \ingroup core
*/
# include <crm_config.h>
# include <stdlib.h>
# include <glib.h>
# include <stdbool.h>
# undef MIN
# undef MAX
# include <string.h>
# include <libxml/tree.h>
# define CRM_FEATURE_SET "3.0.9"
# define EOS '\0'
# define DIMOF(a) ((int) (sizeof(a)/sizeof(a[0])) )
# ifndef MAX_NAME
# define MAX_NAME 256
# endif
# ifndef __GNUC__
# define __builtin_expect(expr, result) (expr)
# endif
/* Some handy macros used by the Linux kernel */
# define __likely(expr) __builtin_expect(expr, 1)
# define __unlikely(expr) __builtin_expect(expr, 0)
# define CRM_META "CRM_meta"
extern char *crm_system_name;
/* *INDENT-OFF* */
/* Clean these up at some point, some probably should be runtime options */
# define SOCKET_LEN 1024
# define APPNAME_LEN 256
# define MAX_IPC_FAIL 5
# define MAX_IPC_DELAY 120
# define DAEMON_RESPAWN_STOP 100
# define MSG_LOG 1
# define DOT_FSA_ACTIONS 1
# define DOT_ALL_FSA_INPUTS 1
/* #define FSA_TRACE 1 */
# define INFINITY_S "INFINITY"
# define MINUS_INFINITY_S "-INFINITY"
# define INFINITY 1000000
/* Sub-systems */
# define CRM_SYSTEM_DC "dc"
# define CRM_SYSTEM_DCIB "dcib"
/* The master CIB */
# define CRM_SYSTEM_CIB "cib"
# define CRM_SYSTEM_CRMD "crmd"
# define CRM_SYSTEM_LRMD "lrmd"
# define CRM_SYSTEM_PENGINE "pengine"
# define CRM_SYSTEM_TENGINE "tengine"
# define CRM_SYSTEM_STONITHD "stonithd"
# define CRM_SYSTEM_MCP "pacemakerd"
/* Valid operations */
# define CRM_OP_NOOP "noop"
# define CRM_OP_JOIN_ANNOUNCE "join_announce"
# define CRM_OP_JOIN_OFFER "join_offer"
# define CRM_OP_JOIN_REQUEST "join_request"
# define CRM_OP_JOIN_ACKNAK "join_ack_nack"
# define CRM_OP_JOIN_CONFIRM "join_confirm"
# define CRM_OP_DIE "die_no_respawn"
# define CRM_OP_RETRIVE_CIB "retrieve_cib"
# define CRM_OP_PING "ping"
# define CRM_OP_THROTTLE "throttle"
# define CRM_OP_VOTE "vote"
# define CRM_OP_NOVOTE "no-vote"
# define CRM_OP_HELLO "hello"
# define CRM_OP_HBEAT "dc_beat"
# define CRM_OP_PECALC "pe_calc"
# define CRM_OP_ABORT "abort"
# define CRM_OP_QUIT "quit"
# define CRM_OP_LOCAL_SHUTDOWN "start_shutdown"
# define CRM_OP_SHUTDOWN_REQ "req_shutdown"
# define CRM_OP_SHUTDOWN "do_shutdown"
# define CRM_OP_FENCE "stonith"
# define CRM_OP_EVENTCC "event_cc"
# define CRM_OP_TEABORT "te_abort"
# define CRM_OP_TEABORTED "te_abort_confirmed" /* we asked */
# define CRM_OP_TE_HALT "te_halt"
# define CRM_OP_TECOMPLETE "te_complete"
# define CRM_OP_TETIMEOUT "te_timeout"
# define CRM_OP_TRANSITION "transition"
# define CRM_OP_REGISTER "register"
# define CRM_OP_IPC_FWD "ipc_fwd"
# define CRM_OP_DEBUG_UP "debug_inc"
# define CRM_OP_DEBUG_DOWN "debug_dec"
# define CRM_OP_INVOKE_LRM "lrm_invoke"
# define CRM_OP_LRM_REFRESH "lrm_refresh" /* Deprecated */
# define CRM_OP_LRM_QUERY "lrm_query"
# define CRM_OP_LRM_DELETE "lrm_delete"
# define CRM_OP_LRM_FAIL "lrm_fail"
# define CRM_OP_PROBED "probe_complete"
# define CRM_OP_NODES_PROBED "probe_nodes_complete"
# define CRM_OP_REPROBE "probe_again"
# define CRM_OP_CLEAR_FAILCOUNT "clear_failcount"
# define CRM_OP_RELAXED_SET "one-or-more"
+# define CRM_OP_RELAXED_CLONE "clone-one-or-more"
# define CRM_OP_RM_NODE_CACHE "rm_node_cache"
# define CRMD_JOINSTATE_DOWN "down"
# define CRMD_JOINSTATE_PENDING "pending"
# define CRMD_JOINSTATE_MEMBER "member"
# define CRMD_JOINSTATE_NACK "banned"
# define CRMD_ACTION_DELETE "delete"
# define CRMD_ACTION_CANCEL "cancel"
# define CRMD_ACTION_MIGRATE "migrate_to"
# define CRMD_ACTION_MIGRATED "migrate_from"
# define CRMD_ACTION_START "start"
# define CRMD_ACTION_STARTED "running"
# define CRMD_ACTION_STOP "stop"
# define CRMD_ACTION_STOPPED "stopped"
# define CRMD_ACTION_PROMOTE "promote"
# define CRMD_ACTION_PROMOTED "promoted"
# define CRMD_ACTION_DEMOTE "demote"
# define CRMD_ACTION_DEMOTED "demoted"
# define CRMD_ACTION_NOTIFY "notify"
# define CRMD_ACTION_NOTIFIED "notified"
# define CRMD_ACTION_STATUS "monitor"
/* short names */
# define RSC_DELETE CRMD_ACTION_DELETE
# define RSC_CANCEL CRMD_ACTION_CANCEL
# define RSC_MIGRATE CRMD_ACTION_MIGRATE
# define RSC_MIGRATED CRMD_ACTION_MIGRATED
# define RSC_START CRMD_ACTION_START
# define RSC_STARTED CRMD_ACTION_STARTED
# define RSC_STOP CRMD_ACTION_STOP
# define RSC_STOPPED CRMD_ACTION_STOPPED
# define RSC_PROMOTE CRMD_ACTION_PROMOTE
# define RSC_PROMOTED CRMD_ACTION_PROMOTED
# define RSC_DEMOTE CRMD_ACTION_DEMOTE
# define RSC_DEMOTED CRMD_ACTION_DEMOTED
# define RSC_NOTIFY CRMD_ACTION_NOTIFY
# define RSC_NOTIFIED CRMD_ACTION_NOTIFIED
# define RSC_STATUS CRMD_ACTION_STATUS
/* *INDENT-ON* */
typedef GList *GListPtr;
# include <crm/common/logging.h>
# include <crm/common/util.h>
# include <crm/error.h>
# define crm_str_hash g_str_hash_traditional
guint crm_strcase_hash(gconstpointer v);
guint g_str_hash_traditional(gconstpointer v);
#endif
diff --git a/pengine/constraints.c b/pengine/constraints.c
index a2ce9c4d7c..7054a8e47e 100644
--- a/pengine/constraints.c
+++ b/pengine/constraints.c
@@ -1,2757 +1,2790 @@
/*
* Copyright (C) 2004 Andrew Beekhof <andrew@beekhof.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <crm_internal.h>
#include <sys/param.h>
#include <sys/types.h>
#include <regex.h>
#include <crm/crm.h>
#include <crm/cib.h>
#include <crm/msg_xml.h>
#include <crm/common/xml.h>
#include <glib.h>
#include <crm/pengine/status.h>
#include <pengine.h>
#include <allocate.h>
#include <utils.h>
#include <crm/pengine/rules.h>
enum pe_order_kind {
pe_order_kind_optional,
pe_order_kind_mandatory,
pe_order_kind_serialize,
};
#define EXPAND_CONSTRAINT_IDREF(__set, __rsc, __name) do { \
__rsc = pe_find_constraint_resource(data_set->resources, __name); \
if(__rsc == NULL) { \
crm_config_err("%s: No resource found for %s", __set, __name); \
return FALSE; \
} \
} while(0)
enum pe_ordering get_flags(const char *id, enum pe_order_kind kind,
const char *action_first, const char *action_then, gboolean invert);
enum pe_ordering get_asymmetrical_flags(enum pe_order_kind kind);
static rsc_to_node_t *generate_location_rule(resource_t * rsc, xmlNode * rule_xml,
const char *discovery, pe_working_set_t * data_set);
gboolean
unpack_constraints(xmlNode * xml_constraints, pe_working_set_t * data_set)
{
xmlNode *xml_obj = NULL;
xmlNode *lifetime = NULL;
for (xml_obj = __xml_first_child(xml_constraints); xml_obj != NULL;
xml_obj = __xml_next(xml_obj)) {
const char *id = crm_element_value(xml_obj, XML_ATTR_ID);
if (id == NULL) {
crm_config_err("Constraint <%s...> must have an id", crm_element_name(xml_obj));
continue;
}
crm_trace("Processing constraint %s %s", crm_element_name(xml_obj), id);
lifetime = first_named_child(xml_obj, "lifetime");
if (lifetime) {
crm_config_warn("Support for the lifetime tag, used by %s, is deprecated."
" The rules it contains should instead be direct decendants of the constraint object",
id);
}
if (test_ruleset(lifetime, NULL, data_set->now) == FALSE) {
crm_info("Constraint %s %s is not active", crm_element_name(xml_obj), id);
} else if (safe_str_eq(XML_CONS_TAG_RSC_ORDER, crm_element_name(xml_obj))) {
unpack_rsc_order(xml_obj, data_set);
} else if (safe_str_eq(XML_CONS_TAG_RSC_DEPEND, crm_element_name(xml_obj))) {
unpack_rsc_colocation(xml_obj, data_set);
} else if (safe_str_eq(XML_CONS_TAG_RSC_LOCATION, crm_element_name(xml_obj))) {
unpack_location(xml_obj, data_set);
} else if (safe_str_eq(XML_CONS_TAG_RSC_TICKET, crm_element_name(xml_obj))) {
unpack_rsc_ticket(xml_obj, data_set);
} else {
pe_err("Unsupported constraint type: %s", crm_element_name(xml_obj));
}
}
return TRUE;
}
static const char *
invert_action(const char *action)
{
if (safe_str_eq(action, RSC_START)) {
return RSC_STOP;
} else if (safe_str_eq(action, RSC_STOP)) {
return RSC_START;
} else if (safe_str_eq(action, RSC_PROMOTE)) {
return RSC_DEMOTE;
} else if (safe_str_eq(action, RSC_DEMOTE)) {
return RSC_PROMOTE;
} else if (safe_str_eq(action, RSC_PROMOTED)) {
return RSC_DEMOTED;
} else if (safe_str_eq(action, RSC_DEMOTED)) {
return RSC_PROMOTED;
} else if (safe_str_eq(action, RSC_STARTED)) {
return RSC_STOPPED;
} else if (safe_str_eq(action, RSC_STOPPED)) {
return RSC_STARTED;
}
crm_config_warn("Unknown action: %s", action);
return NULL;
}
static enum pe_order_kind
get_ordering_type(xmlNode * xml_obj)
{
enum pe_order_kind kind_e = pe_order_kind_mandatory;
const char *kind = crm_element_value(xml_obj, XML_ORDER_ATTR_KIND);
if (kind == NULL) {
const char *score = crm_element_value(xml_obj, XML_RULE_ATTR_SCORE);
kind_e = pe_order_kind_mandatory;
if (score) {
int score_i = char2score(score);
if (score_i == 0) {
kind_e = pe_order_kind_optional;
}
/* } else if(rsc_then->variant == pe_native && rsc_first->variant > pe_group) { */
/* kind_e = pe_order_kind_optional; */
}
} else if (safe_str_eq(kind, "Mandatory")) {
kind_e = pe_order_kind_mandatory;
} else if (safe_str_eq(kind, "Optional")) {
kind_e = pe_order_kind_optional;
} else if (safe_str_eq(kind, "Serialize")) {
kind_e = pe_order_kind_serialize;
} else {
const char *id = crm_element_value(xml_obj, XML_ATTR_ID);
crm_config_err("Constraint %s: Unknown type '%s'", id, kind);
}
return kind_e;
}
static resource_t *
pe_find_constraint_resource(GListPtr rsc_list, const char *id)
{
GListPtr rIter = NULL;
for (rIter = rsc_list; id && rIter; rIter = rIter->next) {
resource_t *parent = rIter->data;
resource_t *match =
parent->fns->find_rsc(parent, id, NULL, pe_find_renamed | pe_find_current);
if (match != NULL) {
if(safe_str_neq(match->id, id)) {
/* We found an instance of a clone instead */
match = uber_parent(match);
crm_debug("Found %s for %s", match->id, id);
}
return match;
}
}
crm_trace("No match for %s", id);
return NULL;
}
static gboolean
pe_find_constraint_tag(pe_working_set_t * data_set, const char * id, tag_t ** tag)
{
gboolean rc = FALSE;
*tag = NULL;
rc = g_hash_table_lookup_extended(data_set->template_rsc_sets, id,
NULL, (gpointer*) tag);
if (rc == FALSE) {
rc = g_hash_table_lookup_extended(data_set->tags, id,
NULL, (gpointer*) tag);
if (rc == FALSE) {
crm_config_warn("No template/tag named '%s'", id);
return FALSE;
} else if (*tag == NULL) {
crm_config_warn("No resource is tagged with '%s'", id);
return FALSE;
}
} else if (*tag == NULL) {
crm_config_warn("No resource is derived from template '%s'", id);
return FALSE;
}
return rc;
}
static gboolean
valid_resource_or_tag(pe_working_set_t * data_set, const char * id,
resource_t ** rsc, tag_t ** tag)
{
gboolean rc = FALSE;
if (rsc) {
*rsc = NULL;
*rsc = pe_find_constraint_resource(data_set->resources, id);
if (*rsc) {
return TRUE;
}
}
if (tag) {
*tag = NULL;
rc = pe_find_constraint_tag(data_set, id, tag);
}
return rc;
}
static gboolean
unpack_simple_rsc_order(xmlNode * xml_obj, pe_working_set_t * data_set)
{
int order_id = 0;
resource_t *rsc_then = NULL;
resource_t *rsc_first = NULL;
gboolean invert_bool = TRUE;
+ gboolean require_all = TRUE;
enum pe_order_kind kind = pe_order_kind_mandatory;
enum pe_ordering cons_weight = pe_order_optional;
const char *id_first = NULL;
const char *id_then = NULL;
const char *action_then = NULL;
const char *action_first = NULL;
const char *instance_then = NULL;
const char *instance_first = NULL;
+ const char *require_all_s = NULL;
const char *id = crm_element_value(xml_obj, XML_ATTR_ID);
const char *invert = crm_element_value(xml_obj, XML_CONS_ATTR_SYMMETRICAL);
crm_str_to_boolean(invert, &invert_bool);
if (xml_obj == NULL) {
crm_config_err("No constraint object to process.");
return FALSE;
} else if (id == NULL) {
crm_config_err("%s constraint must have an id", crm_element_name(xml_obj));
return FALSE;
}
id_then = crm_element_value(xml_obj, XML_ORDER_ATTR_THEN);
id_first = crm_element_value(xml_obj, XML_ORDER_ATTR_FIRST);
action_then = crm_element_value(xml_obj, XML_ORDER_ATTR_THEN_ACTION);
action_first = crm_element_value(xml_obj, XML_ORDER_ATTR_FIRST_ACTION);
instance_then = crm_element_value(xml_obj, XML_ORDER_ATTR_THEN_INSTANCE);
instance_first = crm_element_value(xml_obj, XML_ORDER_ATTR_FIRST_INSTANCE);
if (action_first == NULL) {
action_first = RSC_START;
}
if (action_then == NULL) {
action_then = action_first;
}
if (id_then == NULL || id_first == NULL) {
crm_config_err("Constraint %s needs two sides lh: %s rh: %s",
id, crm_str(id_then), crm_str(id_first));
return FALSE;
}
rsc_then = pe_find_constraint_resource(data_set->resources, id_then);
rsc_first = pe_find_constraint_resource(data_set->resources, id_first);
if (rsc_then == NULL) {
crm_config_err("Constraint %s: no resource found for name '%s'", id, id_then);
return FALSE;
} else if (rsc_first == NULL) {
crm_config_err("Constraint %s: no resource found for name '%s'", id, id_first);
return FALSE;
} else if (instance_then && rsc_then->variant < pe_clone) {
crm_config_err("Invalid constraint '%s':"
" Resource '%s' is not a clone but instance %s was requested",
id, id_then, instance_then);
return FALSE;
} else if (instance_first && rsc_first->variant < pe_clone) {
crm_config_err("Invalid constraint '%s':"
" Resource '%s' is not a clone but instance %s was requested",
id, id_first, instance_first);
return FALSE;
}
if (instance_then) {
rsc_then = find_clone_instance(rsc_then, instance_then, data_set);
if (rsc_then == NULL) {
crm_config_warn("Invalid constraint '%s': No instance '%s' of '%s'", id, instance_then,
id_then);
return FALSE;
}
}
if (instance_first) {
rsc_first = find_clone_instance(rsc_first, instance_first, data_set);
if (rsc_first == NULL) {
crm_config_warn("Invalid constraint '%s': No instance '%s' of '%s'", id, instance_first,
id_first);
return FALSE;
}
}
+ require_all_s = crm_element_value(xml_obj, "require-all");
+ if (require_all_s
+ && crm_is_true(require_all_s) == FALSE
+ && rsc_first->variant >= pe_clone) {
+
+ require_all = FALSE;
+ }
+
cons_weight = pe_order_optional;
kind = get_ordering_type(xml_obj);
if (kind == pe_order_kind_optional && rsc_then->restart_type == pe_restart_restart) {
crm_trace("Upgrade : recovery - implies right");
cons_weight |= pe_order_implies_then;
}
if (invert_bool == FALSE) {
cons_weight |= get_asymmetrical_flags(kind);
} else {
cons_weight |= get_flags(id, kind, action_first, action_then, FALSE);
}
- order_id = new_rsc_order(rsc_first, action_first, rsc_then, action_then, cons_weight, data_set);
+
+ if (require_all == FALSE) {
+ GListPtr rIter = NULL;
+ char *task = crm_concat(CRM_OP_RELAXED_CLONE, id, ':');
+ action_t *unordered_action = get_pseudo_op(task, data_set);
+ free(task);
+
+ update_action_flags(unordered_action, pe_action_requires_any);
+
+ for (rIter = rsc_first->children; id && rIter; rIter = rIter->next) {
+ resource_t *child = rIter->data;
+
+ custom_action_order(child, generate_op_key(child->id, action_first, 0), NULL,
+ NULL, NULL, unordered_action,
+ pe_order_one_or_more | pe_order_implies_then_printed, data_set);
+ }
+
+ order_id = custom_action_order(NULL, NULL, unordered_action,
+ rsc_then, generate_op_key(rsc_then->id, action_then, 0), NULL,
+ cons_weight | pe_order_runnable_left, data_set);
+ } else {
+ order_id = new_rsc_order(rsc_first, action_first, rsc_then, action_then, cons_weight, data_set);
+ }
pe_rsc_trace(rsc_first, "order-%d (%s): %s_%s before %s_%s flags=0x%.6x",
order_id, id, rsc_first->id, action_first, rsc_then->id, action_then, cons_weight);
if (invert_bool == FALSE) {
return TRUE;
} else if (invert && kind == pe_order_kind_serialize) {
crm_config_warn("Cannot invert serialized constraint set %s", id);
return TRUE;
} else if (kind == pe_order_kind_serialize) {
return TRUE;
}
action_then = invert_action(action_then);
action_first = invert_action(action_first);
if (action_then == NULL || action_first == NULL) {
crm_config_err("Cannot invert rsc_order constraint %s."
" Please specify the inverse manually.", id);
return TRUE;
}
cons_weight = pe_order_optional;
if (kind == pe_order_kind_optional && rsc_then->restart_type == pe_restart_restart) {
crm_trace("Upgrade : recovery - implies left");
cons_weight |= pe_order_implies_first;
}
cons_weight |= get_flags(id, kind, action_first, action_then, TRUE);
+
order_id = new_rsc_order(rsc_then, action_then, rsc_first, action_first, cons_weight, data_set);
pe_rsc_trace(rsc_then, "order-%d (%s): %s_%s before %s_%s flags=0x%.6x",
order_id, id, rsc_then->id, action_then, rsc_first->id, action_first, cons_weight);
return TRUE;
}
static gboolean
expand_tags_in_sets(xmlNode * xml_obj, xmlNode ** expanded_xml, pe_working_set_t * data_set)
{
xmlNode *new_xml = NULL;
xmlNode *set = NULL;
gboolean any_refs = FALSE;
const char *cons_id = NULL;
*expanded_xml = NULL;
if (xml_obj == NULL) {
crm_config_err("No constraint object to process.");
return FALSE;
}
new_xml = copy_xml(xml_obj);
cons_id = ID(new_xml);
for (set = __xml_first_child(new_xml); set != NULL; set = __xml_next(set)) {
xmlNode *xml_rsc = NULL;
GListPtr tag_refs = NULL;
GListPtr gIter = NULL;
if (safe_str_neq((const char *)set->name, XML_CONS_TAG_RSC_SET)) {
continue;
}
for (xml_rsc = __xml_first_child(set); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
resource_t *rsc = NULL;
tag_t *tag = NULL;
const char *id = ID(xml_rsc);
if (safe_str_neq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF)) {
continue;
}
if (valid_resource_or_tag(data_set, id, &rsc, &tag) == FALSE) {
crm_config_err("Constraint '%s': Invalid reference to '%s'", cons_id, id);
free_xml(new_xml);
return FALSE;
} else if (rsc) {
continue;
} else if (tag) {
/* The resource_ref under the resource_set references a template/tag */
xmlNode *last_ref = xml_rsc;
/* A sample:
Original XML:
<resource_set id="tag1-colocation-0" sequential="true">
<resource_ref id="rsc1"/>
<resource_ref id="tag1"/>
<resource_ref id="rsc4"/>
</resource_set>
Now we are appending rsc2 and rsc3 which are tagged with tag1 right after it:
<resource_set id="tag1-colocation-0" sequential="true">
<resource_ref id="rsc1"/>
<resource_ref id="tag1"/>
<resource_ref id="rsc2"/>
<resource_ref id="rsc3"/>
<resource_ref id="rsc4"/>
</resource_set>
*/
for (gIter = tag->refs; gIter != NULL; gIter = gIter->next) {
const char *obj_ref = (const char *) gIter->data;
xmlNode *new_rsc_ref = NULL;
new_rsc_ref = xmlNewDocRawNode(getDocPtr(set), NULL,
(const xmlChar *)XML_TAG_RESOURCE_REF, NULL);
crm_xml_add(new_rsc_ref, XML_ATTR_ID, obj_ref);
xmlAddNextSibling(last_ref, new_rsc_ref);
last_ref = new_rsc_ref;
}
any_refs = TRUE;
/* Do not directly free '<resource_ref id="tag1"/>'.
That would break the further __xml_next(xml_rsc)) and cause "Invalid read" seen by valgrind.
So just record it into a hash table for freeing it later.
*/
tag_refs = g_list_append(tag_refs, xml_rsc);
}
}
/* Now free '<resource_ref id="tag1"/>', and finally get:
<resource_set id="tag1-colocation-0" sequential="true">
<resource_ref id="rsc1"/>
<resource_ref id="rsc2"/>
<resource_ref id="rsc3"/>
<resource_ref id="rsc4"/>
</resource_set>
*/
for (gIter = tag_refs; gIter != NULL; gIter = gIter->next) {
xmlNode *tag_ref = gIter->data;
free_xml(tag_ref);
}
g_list_free(tag_refs);
}
if (any_refs) {
*expanded_xml = new_xml;
} else {
free_xml(new_xml);
}
return TRUE;
}
static gboolean
tag_to_set(xmlNode * xml_obj, xmlNode ** rsc_set, const char * attr,
gboolean convert_rsc, pe_working_set_t * data_set)
{
const char *cons_id = NULL;
const char *id = NULL;
resource_t *rsc = NULL;
tag_t *tag = NULL;
*rsc_set = NULL;
if (xml_obj == NULL) {
crm_config_err("No constraint object to process.");
return FALSE;
}
if (attr == NULL) {
crm_config_err("No attribute name to process.");
return FALSE;
}
cons_id = crm_element_value(xml_obj, XML_ATTR_ID);
if (cons_id == NULL) {
crm_config_err("%s constraint must have an id", crm_element_name(xml_obj));
return FALSE;
}
id = crm_element_value(xml_obj, attr);
if (id == NULL) {
return TRUE;
}
if (valid_resource_or_tag(data_set, id, &rsc, &tag) == FALSE) {
crm_config_err("Constraint '%s': Invalid reference to '%s'", cons_id, id);
return FALSE;
} else if (tag) {
GListPtr gIter = NULL;
/* A template/tag is referenced by the "attr" attribute (first, then, rsc or with-rsc).
Add the template/tag's corresponding "resource_set" which contains the resources derived
from it or tagged with it under the constraint. */
*rsc_set = create_xml_node(xml_obj, XML_CONS_TAG_RSC_SET);
crm_xml_add(*rsc_set, XML_ATTR_ID, id);
for (gIter = tag->refs; gIter != NULL; gIter = gIter->next) {
const char *obj_ref = (const char *) gIter->data;
xmlNode *rsc_ref = NULL;
rsc_ref = create_xml_node(*rsc_set, XML_TAG_RESOURCE_REF);
crm_xml_add(rsc_ref, XML_ATTR_ID, obj_ref);
}
/* Set sequential="false" for the resource_set */
crm_xml_add(*rsc_set, "sequential", XML_BOOLEAN_FALSE);
} else if (rsc && convert_rsc) {
/* Even a regular resource is referenced by "attr", convert it into a resource_set.
Because the other side of the constraint could be a template/tag reference. */
xmlNode *rsc_ref = NULL;
*rsc_set = create_xml_node(xml_obj, XML_CONS_TAG_RSC_SET);
crm_xml_add(*rsc_set, XML_ATTR_ID, id);
rsc_ref = create_xml_node(*rsc_set, XML_TAG_RESOURCE_REF);
crm_xml_add(rsc_ref, XML_ATTR_ID, id);
} else {
return TRUE;
}
/* Remove the "attr" attribute referencing the template/tag */
if (*rsc_set) {
xml_remove_prop(xml_obj, attr);
}
return TRUE;
}
gboolean unpack_rsc_location(xmlNode * xml_obj, resource_t * rsc_lh, const char * role,
const char * score, pe_working_set_t * data_set);
static gboolean
unpack_simple_location(xmlNode * xml_obj, pe_working_set_t * data_set)
{
const char *id = crm_element_value(xml_obj, XML_ATTR_ID);
const char *value = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE);
if(value) {
resource_t *rsc_lh = pe_find_constraint_resource(data_set->resources, value);
return unpack_rsc_location(xml_obj, rsc_lh, NULL, NULL, data_set);
}
value = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE"-pattern");
if(value) {
regex_t *r_patt = calloc(1, sizeof(regex_t));
bool invert = FALSE;
GListPtr rIter = NULL;
if(value[0] == '!') {
value++;
invert = TRUE;
}
if (regcomp(r_patt, value, REG_EXTENDED)) {
crm_config_err("Bad regex '%s' for constraint '%s'\n", value, id);
regfree(r_patt);
free(r_patt);
return FALSE;
}
for (rIter = data_set->resources; rIter; rIter = rIter->next) {
resource_t *r = rIter->data;
int status = regexec(r_patt, r->id, 0, NULL, 0);
if(invert == FALSE && status == 0) {
crm_debug("'%s' matched '%s' for %s", r->id, value, id);
unpack_rsc_location(xml_obj, r, NULL, NULL, data_set);
} if(invert && status != 0) {
crm_debug("'%s' is an inverted match of '%s' for %s", r->id, value, id);
unpack_rsc_location(xml_obj, r, NULL, NULL, data_set);
} else {
crm_trace("'%s' does not match '%s' for %s", r->id, value, id);
}
}
regfree(r_patt);
free(r_patt);
}
return FALSE;
}
gboolean
unpack_rsc_location(xmlNode * xml_obj, resource_t * rsc_lh, const char * role,
const char * score, pe_working_set_t * data_set)
{
gboolean empty = TRUE;
rsc_to_node_t *location = NULL;
const char *id_lh = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE);
const char *id = crm_element_value(xml_obj, XML_ATTR_ID);
const char *node = crm_element_value(xml_obj, XML_CIB_TAG_NODE);
const char *discovery = crm_element_value(xml_obj, XML_LOCATION_ATTR_DISCOVERY);
if (rsc_lh == NULL) {
/* only a warn as BSC adds the constraint then the resource */
crm_config_warn("No resource (con=%s, rsc=%s)", id, id_lh);
return FALSE;
}
if (score == NULL) {
score = crm_element_value(xml_obj, XML_RULE_ATTR_SCORE);
}
if (node != NULL && score != NULL) {
int score_i = char2score(score);
node_t *match = pe_find_node(data_set->nodes, node);
if (!match) {
return FALSE;
}
location = rsc2node_new(id, rsc_lh, score_i, discovery, match, data_set);
} else {
xmlNode *rule_xml = NULL;
for (rule_xml = __xml_first_child(xml_obj); rule_xml != NULL;
rule_xml = __xml_next(rule_xml)) {
if (crm_str_eq((const char *)rule_xml->name, XML_TAG_RULE, TRUE)) {
empty = FALSE;
crm_trace("Unpacking %s/%s", id, ID(rule_xml));
generate_location_rule(rsc_lh, rule_xml, discovery, data_set);
}
}
if (empty) {
crm_config_err("Invalid location constraint %s:"
" rsc_location must contain at least one rule", ID(xml_obj));
}
}
if (role == NULL) {
role = crm_element_value(xml_obj, XML_RULE_ATTR_ROLE);
}
if (location && role) {
if (text2role(role) == RSC_ROLE_UNKNOWN) {
pe_err("Invalid constraint %s: Bad role %s", id, role);
return FALSE;
} else {
enum rsc_role_e r = text2role(role);
switch(r) {
case RSC_ROLE_UNKNOWN:
case RSC_ROLE_STARTED:
case RSC_ROLE_SLAVE:
/* Applies to all */
location->role_filter = RSC_ROLE_UNKNOWN;
break;
default:
location->role_filter = r;
break;
}
}
}
return TRUE;
}
static gboolean
unpack_location_tags(xmlNode * xml_obj, xmlNode ** expanded_xml, pe_working_set_t * data_set)
{
const char *id = NULL;
const char *id_lh = NULL;
const char *state_lh = NULL;
resource_t *rsc_lh = NULL;
tag_t *tag_lh = NULL;
xmlNode *new_xml = NULL;
xmlNode *rsc_set_lh = NULL;
gboolean any_sets = FALSE;
*expanded_xml = NULL;
if (xml_obj == NULL) {
crm_config_err("No constraint object to process.");
return FALSE;
}
id = crm_element_value(xml_obj, XML_ATTR_ID);
if (id == NULL) {
crm_config_err("%s constraint must have an id", crm_element_name(xml_obj));
return FALSE;
}
/* Attempt to expand any template/tag references in possible resource sets. */
expand_tags_in_sets(xml_obj, &new_xml, data_set);
if (new_xml) {
/* There are resource sets referencing templates. Return with the expanded XML. */
crm_log_xml_trace(new_xml, "Expanded rsc_location...");
*expanded_xml = new_xml;
return TRUE;
}
id_lh = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE);
if (id_lh == NULL) {
return TRUE;
}
if (valid_resource_or_tag(data_set, id_lh, &rsc_lh, &tag_lh) == FALSE) {
crm_config_err("Constraint '%s': Invalid reference to '%s'", id, id_lh);
return FALSE;
} else if (rsc_lh) {
/* No template is referenced. */
return TRUE;
}
state_lh = crm_element_value(xml_obj, XML_RULE_ATTR_ROLE);
new_xml = copy_xml(xml_obj);
/* Convert the template/tag reference in "rsc" into a resource_set under the rsc_location constraint. */
if (tag_to_set(new_xml, &rsc_set_lh, XML_COLOC_ATTR_SOURCE, FALSE, data_set) == FALSE) {
free_xml(new_xml);
return FALSE;
}
if (rsc_set_lh) {
if (state_lh) {
/* A "rsc-role" is specified.
Move it into the converted resource_set as a "role"" attribute. */
crm_xml_add(rsc_set_lh, "role", state_lh);
xml_remove_prop(new_xml, XML_RULE_ATTR_ROLE);
}
any_sets = TRUE;
}
if (any_sets) {
crm_log_xml_trace(new_xml, "Expanded rsc_location...");
*expanded_xml = new_xml;
} else {
free_xml(new_xml);
}
return TRUE;
}
static gboolean
unpack_location_set(xmlNode * location, xmlNode * set, pe_working_set_t * data_set)
{
xmlNode *xml_rsc = NULL;
resource_t *resource = NULL;
const char *set_id = ID(set);
const char *role = crm_element_value(set, "role");
const char *local_score = crm_element_value(set, XML_RULE_ATTR_SCORE);
if (set == NULL) {
crm_config_err("No resource_set object to process.");
return FALSE;
}
if (set_id == NULL) {
crm_config_err("resource_set must have an id");
return FALSE;
}
for (xml_rsc = __xml_first_child(set); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(set_id, resource, ID(xml_rsc));
unpack_rsc_location(location, resource, role, local_score, data_set);
}
}
return TRUE;
}
gboolean
unpack_location(xmlNode * xml_obj, pe_working_set_t * data_set)
{
xmlNode *set = NULL;
gboolean any_sets = FALSE;
xmlNode *orig_xml = NULL;
xmlNode *expanded_xml = NULL;
const char *id = crm_element_value(xml_obj, XML_ATTR_ID);
gboolean rc = TRUE;
if (xml_obj == NULL) {
crm_config_err("No rsc_location constraint object to process.");
return FALSE;
}
if (id == NULL) {
crm_config_err("%s constraint must have an id", crm_element_name(xml_obj));
return FALSE;
}
rc = unpack_location_tags(xml_obj, &expanded_xml, data_set);
if (expanded_xml) {
orig_xml = xml_obj;
xml_obj = expanded_xml;
} else if (rc == FALSE) {
return FALSE;
}
for (set = __xml_first_child(xml_obj); set != NULL; set = __xml_next(set)) {
if (crm_str_eq((const char *)set->name, XML_CONS_TAG_RSC_SET, TRUE)) {
any_sets = TRUE;
set = expand_idref(set, data_set->input);
if (unpack_location_set(xml_obj, set, data_set) == FALSE) {
return FALSE;
}
}
}
if (expanded_xml) {
free_xml(expanded_xml);
xml_obj = orig_xml;
}
if (any_sets == FALSE) {
return unpack_simple_location(xml_obj, data_set);
}
return TRUE;
}
static int
get_node_score(const char *rule, const char *score, gboolean raw, node_t * node)
{
int score_f = 0;
if (score == NULL) {
pe_err("Rule %s: no score specified. Assuming 0.", rule);
} else if (raw) {
score_f = char2score(score);
} else {
const char *attr_score = g_hash_table_lookup(node->details->attrs, score);
if (attr_score == NULL) {
crm_debug("Rule %s: node %s did not have a value for %s",
rule, node->details->uname, score);
score_f = -INFINITY;
} else {
crm_debug("Rule %s: node %s had value %s for %s",
rule, node->details->uname, attr_score, score);
score_f = char2score(attr_score);
}
}
return score_f;
}
static rsc_to_node_t *
generate_location_rule(resource_t * rsc, xmlNode * rule_xml, const char *discovery, pe_working_set_t * data_set)
{
const char *rule_id = NULL;
const char *score = NULL;
const char *boolean = NULL;
const char *role = NULL;
GListPtr gIter = NULL;
GListPtr match_L = NULL;
gboolean do_and = TRUE;
gboolean accept = TRUE;
gboolean raw_score = TRUE;
rsc_to_node_t *location_rule = NULL;
rule_xml = expand_idref(rule_xml, data_set->input);
rule_id = crm_element_value(rule_xml, XML_ATTR_ID);
boolean = crm_element_value(rule_xml, XML_RULE_ATTR_BOOLEAN_OP);
role = crm_element_value(rule_xml, XML_RULE_ATTR_ROLE);
crm_trace("Processing rule: %s", rule_id);
if (role != NULL && text2role(role) == RSC_ROLE_UNKNOWN) {
pe_err("Bad role specified for %s: %s", rule_id, role);
return NULL;
}
score = crm_element_value(rule_xml, XML_RULE_ATTR_SCORE);
if (score == NULL) {
score = crm_element_value(rule_xml, XML_RULE_ATTR_SCORE_ATTRIBUTE);
if (score == NULL) {
score = crm_element_value(rule_xml, XML_RULE_ATTR_SCORE_MANGLED);
}
if (score != NULL) {
raw_score = FALSE;
}
}
if (safe_str_eq(boolean, "or")) {
do_and = FALSE;
}
location_rule = rsc2node_new(rule_id, rsc, 0, discovery, NULL, data_set);
if (location_rule == NULL) {
return NULL;
}
if (role != NULL) {
crm_trace("Setting role filter: %s", role);
location_rule->role_filter = text2role(role);
if (location_rule->role_filter == RSC_ROLE_SLAVE) {
/* Any master/slave cannot be promoted without being a slave first
* Ergo, any constraint for the slave role applies to every role
*/
location_rule->role_filter = RSC_ROLE_UNKNOWN;
}
}
if (do_and) {
GListPtr gIter = NULL;
match_L = node_list_dup(data_set->nodes, TRUE, FALSE);
for (gIter = match_L; gIter != NULL; gIter = gIter->next) {
node_t *node = (node_t *) gIter->data;
node->weight = get_node_score(rule_id, score, raw_score, node);
}
}
for (gIter = data_set->nodes; gIter != NULL; gIter = gIter->next) {
int score_f = 0;
node_t *node = (node_t *) gIter->data;
accept = test_rule(rule_xml, node->details->attrs, RSC_ROLE_UNKNOWN, data_set->now);
crm_trace("Rule %s %s on %s", ID(rule_xml), accept ? "passed" : "failed",
node->details->uname);
score_f = get_node_score(rule_id, score, raw_score, node);
/* if(accept && score_f == -INFINITY) { */
/* accept = FALSE; */
/* } */
if (accept) {
node_t *local = pe_find_node_id(match_L, node->details->id);
if (local == NULL && do_and) {
continue;
} else if (local == NULL) {
local = node_copy(node);
match_L = g_list_append(match_L, local);
}
if (do_and == FALSE) {
local->weight = merge_weights(local->weight, score_f);
}
crm_trace("node %s now has weight %d", node->details->uname, local->weight);
} else if (do_and && !accept) {
/* remove it */
node_t *delete = pe_find_node_id(match_L, node->details->id);
if (delete != NULL) {
match_L = g_list_remove(match_L, delete);
crm_trace("node %s did not match", node->details->uname);
}
free(delete);
}
}
location_rule->node_list_rh = match_L;
if (location_rule->node_list_rh == NULL) {
crm_trace("No matching nodes for rule %s", rule_id);
return NULL;
}
crm_trace("%s: %d nodes matched", rule_id, g_list_length(location_rule->node_list_rh));
return location_rule;
}
static gint
sort_cons_priority_lh(gconstpointer a, gconstpointer b)
{
const rsc_colocation_t *rsc_constraint1 = (const rsc_colocation_t *)a;
const rsc_colocation_t *rsc_constraint2 = (const rsc_colocation_t *)b;
if (a == NULL) {
return 1;
}
if (b == NULL) {
return -1;
}
CRM_ASSERT(rsc_constraint1->rsc_lh != NULL);
CRM_ASSERT(rsc_constraint1->rsc_rh != NULL);
if (rsc_constraint1->rsc_lh->priority > rsc_constraint2->rsc_lh->priority) {
return -1;
}
if (rsc_constraint1->rsc_lh->priority < rsc_constraint2->rsc_lh->priority) {
return 1;
}
/* Process clones before primitives and groups */
if (rsc_constraint1->rsc_lh->variant > rsc_constraint2->rsc_lh->variant) {
return -1;
} else if (rsc_constraint1->rsc_lh->variant < rsc_constraint2->rsc_lh->variant) {
return 1;
}
return strcmp(rsc_constraint1->rsc_lh->id, rsc_constraint2->rsc_lh->id);
}
static gint
sort_cons_priority_rh(gconstpointer a, gconstpointer b)
{
const rsc_colocation_t *rsc_constraint1 = (const rsc_colocation_t *)a;
const rsc_colocation_t *rsc_constraint2 = (const rsc_colocation_t *)b;
if (a == NULL) {
return 1;
}
if (b == NULL) {
return -1;
}
CRM_ASSERT(rsc_constraint1->rsc_lh != NULL);
CRM_ASSERT(rsc_constraint1->rsc_rh != NULL);
if (rsc_constraint1->rsc_rh->priority > rsc_constraint2->rsc_rh->priority) {
return -1;
}
if (rsc_constraint1->rsc_rh->priority < rsc_constraint2->rsc_rh->priority) {
return 1;
}
/* Process clones before primitives and groups */
if (rsc_constraint1->rsc_rh->variant > rsc_constraint2->rsc_rh->variant) {
return -1;
} else if (rsc_constraint1->rsc_rh->variant < rsc_constraint2->rsc_rh->variant) {
return 1;
}
return strcmp(rsc_constraint1->rsc_rh->id, rsc_constraint2->rsc_rh->id);
}
gboolean
rsc_colocation_new(const char *id, const char *node_attr, int score,
resource_t * rsc_lh, resource_t * rsc_rh,
const char *state_lh, const char *state_rh, pe_working_set_t * data_set)
{
rsc_colocation_t *new_con = NULL;
if (rsc_lh == NULL) {
crm_config_err("No resource found for LHS %s", id);
return FALSE;
} else if (rsc_rh == NULL) {
crm_config_err("No resource found for RHS of %s", id);
return FALSE;
}
new_con = calloc(1, sizeof(rsc_colocation_t));
if (new_con == NULL) {
return FALSE;
}
if (state_lh == NULL || safe_str_eq(state_lh, RSC_ROLE_STARTED_S)) {
state_lh = RSC_ROLE_UNKNOWN_S;
}
if (state_rh == NULL || safe_str_eq(state_rh, RSC_ROLE_STARTED_S)) {
state_rh = RSC_ROLE_UNKNOWN_S;
}
new_con->id = id;
new_con->rsc_lh = rsc_lh;
new_con->rsc_rh = rsc_rh;
new_con->score = score;
new_con->role_lh = text2role(state_lh);
new_con->role_rh = text2role(state_rh);
new_con->node_attribute = node_attr;
if (node_attr == NULL) {
node_attr = "#" XML_ATTR_UNAME;
}
pe_rsc_trace(rsc_lh, "%s ==> %s (%s %d)", rsc_lh->id, rsc_rh->id, node_attr, score);
rsc_lh->rsc_cons = g_list_insert_sorted(rsc_lh->rsc_cons, new_con, sort_cons_priority_rh);
rsc_rh->rsc_cons_lhs =
g_list_insert_sorted(rsc_rh->rsc_cons_lhs, new_con, sort_cons_priority_lh);
data_set->colocation_constraints = g_list_append(data_set->colocation_constraints, new_con);
if (score <= -INFINITY) {
new_rsc_order(rsc_lh, CRMD_ACTION_STOP, rsc_rh, CRMD_ACTION_START,
pe_order_anti_colocation, data_set);
new_rsc_order(rsc_rh, CRMD_ACTION_STOP, rsc_lh, CRMD_ACTION_START,
pe_order_anti_colocation, data_set);
}
return TRUE;
}
/* LHS before RHS */
int
new_rsc_order(resource_t * lh_rsc, const char *lh_task,
resource_t * rh_rsc, const char *rh_task,
enum pe_ordering type, pe_working_set_t * data_set)
{
char *lh_key = NULL;
char *rh_key = NULL;
CRM_CHECK(lh_rsc != NULL, return -1);
CRM_CHECK(lh_task != NULL, return -1);
CRM_CHECK(rh_rsc != NULL, return -1);
CRM_CHECK(rh_task != NULL, return -1);
/* We no longer need to test if these reference stonith resources
* now that stonithd has access to them even when they're not "running"
*
if (validate_order_resources(lh_rsc, lh_task, rh_rsc, rh_task)) {
return -1;
}
*/
lh_key = generate_op_key(lh_rsc->id, lh_task, 0);
rh_key = generate_op_key(rh_rsc->id, rh_task, 0);
return custom_action_order(lh_rsc, lh_key, NULL, rh_rsc, rh_key, NULL, type, data_set);
}
static char *
task_from_action_or_key(action_t *action, const char *key)
{
char *res = NULL;
char *rsc_id = NULL;
char *op_type = NULL;
int interval = 0;
if (action) {
res = strdup(action->task);
} else if (key) {
int rc = 0;
rc = parse_op_key(key, &rsc_id, &op_type, &interval);
if (rc == TRUE) {
res = op_type;
op_type = NULL;
}
free(rsc_id);
free(op_type);
}
return res;
}
/* when order constraints are made between two resources start and stop actions
* those constraints have to be mirrored against the corresponding
* migration actions to ensure start/stop ordering is preserved during
* a migration */
static void
handle_migration_ordering(order_constraint_t *order, pe_working_set_t *data_set)
{
char *lh_task = NULL;
char *rh_task = NULL;
gboolean rh_migratable;
gboolean lh_migratable;
if (order->lh_rsc == NULL || order->rh_rsc == NULL) {
return;
} else if (order->lh_rsc == order->rh_rsc) {
return;
/* don't mess with those constraints built between parent
* resources and the children */
} else if (is_parent(order->lh_rsc, order->rh_rsc)) {
return;
} else if (is_parent(order->rh_rsc, order->lh_rsc)) {
return;
}
lh_migratable = is_set(order->lh_rsc->flags, pe_rsc_allow_migrate);
rh_migratable = is_set(order->rh_rsc->flags, pe_rsc_allow_migrate);
/* one of them has to be migratable for
* the migrate ordering logic to be applied */
if (lh_migratable == FALSE && rh_migratable == FALSE) {
return;
}
/* at this point we have two resources which allow migrations that have an
* order dependency set between them. If those order dependencies involve
* start/stop actions, we need to mirror the corresponding migrate actions
* so order will be preserved. */
lh_task = task_from_action_or_key(order->lh_action, order->lh_action_task);
rh_task = task_from_action_or_key(order->rh_action, order->rh_action_task);
if (lh_task == NULL || rh_task == NULL) {
goto cleanup_order;
}
if (safe_str_eq(lh_task, RSC_START) && safe_str_eq(rh_task, RSC_START)) {
int flags = pe_order_optional;
if (lh_migratable && rh_migratable) {
/* A start then B start
* A migrate_from then B migrate_to */
custom_action_order(order->lh_rsc, generate_op_key(order->lh_rsc->id, RSC_MIGRATED, 0), NULL,
order->rh_rsc, generate_op_key(order->rh_rsc->id, RSC_MIGRATE, 0), NULL,
flags, data_set);
}
if (rh_migratable) {
if (lh_migratable) {
flags |= pe_order_apply_first_non_migratable;
}
/* A start then B start
* A start then B migrate_to... only if A start is not a part of a migration*/
custom_action_order(order->lh_rsc, generate_op_key(order->lh_rsc->id, RSC_START, 0), NULL,
order->rh_rsc, generate_op_key(order->rh_rsc->id, RSC_MIGRATE, 0), NULL,
flags, data_set);
}
} else if (rh_migratable == TRUE && safe_str_eq(lh_task, RSC_STOP) && safe_str_eq(rh_task, RSC_STOP)) {
int flags = pe_order_optional;
if (lh_migratable) {
flags |= pe_order_apply_first_non_migratable;
}
/* rh side is at the bottom of the stack during a stop. If we have a constraint
* stop B then stop A, if B is migrating via stop/start, and A is migrating using migration actions,
* we need to enforce that A's migrate_to action occurs after B's stop action. */
custom_action_order(order->lh_rsc, generate_op_key(order->lh_rsc->id, RSC_STOP, 0), NULL,
order->rh_rsc, generate_op_key(order->rh_rsc->id, RSC_MIGRATE, 0), NULL,
flags, data_set);
/* We need to build the stop constraint against migrate_from as well
* to account for partial migrations. */
if (order->rh_rsc->partial_migration_target) {
custom_action_order(order->lh_rsc, generate_op_key(order->lh_rsc->id, RSC_STOP, 0), NULL,
order->rh_rsc, generate_op_key(order->rh_rsc->id, RSC_MIGRATED, 0), NULL,
flags, data_set);
}
}
cleanup_order:
free(lh_task);
free(rh_task);
}
/* LHS before RHS */
int
custom_action_order(resource_t * lh_rsc, char *lh_action_task, action_t * lh_action,
resource_t * rh_rsc, char *rh_action_task, action_t * rh_action,
enum pe_ordering type, pe_working_set_t * data_set)
{
order_constraint_t *order = NULL;
if (lh_rsc == NULL && lh_action) {
lh_rsc = lh_action->rsc;
}
if (rh_rsc == NULL && rh_action) {
rh_rsc = rh_action->rsc;
}
if ((lh_action == NULL && lh_rsc == NULL)
|| (rh_action == NULL && rh_rsc == NULL)) {
crm_config_err("Invalid inputs %p.%p %p.%p", lh_rsc, lh_action, rh_rsc, rh_action);
free(lh_action_task);
free(rh_action_task);
return -1;
}
order = calloc(1, sizeof(order_constraint_t));
order->id = data_set->order_id++;
order->type = type;
order->lh_rsc = lh_rsc;
order->rh_rsc = rh_rsc;
order->lh_action = lh_action;
order->rh_action = rh_action;
order->lh_action_task = lh_action_task;
order->rh_action_task = rh_action_task;
if (order->lh_action_task == NULL && lh_action) {
order->lh_action_task = strdup(lh_action->uuid);
}
if (order->rh_action_task == NULL && rh_action) {
order->rh_action_task = strdup(rh_action->uuid);
}
if (order->lh_rsc == NULL && lh_action) {
order->lh_rsc = lh_action->rsc;
}
if (order->rh_rsc == NULL && rh_action) {
order->rh_rsc = rh_action->rsc;
}
data_set->ordering_constraints = g_list_prepend(data_set->ordering_constraints, order);
handle_migration_ordering(order, data_set);
return order->id;
}
enum pe_ordering
get_asymmetrical_flags(enum pe_order_kind kind)
{
enum pe_ordering flags = pe_order_optional;
if (kind == pe_order_kind_mandatory) {
flags |= pe_order_asymmetrical;
} else if (kind == pe_order_kind_serialize) {
flags |= pe_order_serialize_only;
}
return flags;
}
enum pe_ordering
get_flags(const char *id, enum pe_order_kind kind,
const char *action_first, const char *action_then, gboolean invert)
{
enum pe_ordering flags = pe_order_optional;
if (invert && kind == pe_order_kind_mandatory) {
crm_trace("Upgrade %s: implies left", id);
flags |= pe_order_implies_first;
} else if (kind == pe_order_kind_mandatory) {
crm_trace("Upgrade %s: implies right", id);
flags |= pe_order_implies_then;
if (safe_str_eq(action_first, RSC_START)
|| safe_str_eq(action_first, RSC_PROMOTE)) {
crm_trace("Upgrade %s: runnable", id);
flags |= pe_order_runnable_left;
}
} else if (kind == pe_order_kind_serialize) {
flags |= pe_order_serialize_only;
}
return flags;
}
static gboolean
unpack_order_set(xmlNode * set, enum pe_order_kind kind, resource_t ** rsc,
action_t ** begin, action_t ** end, action_t ** inv_begin, action_t ** inv_end,
const char *symmetrical, pe_working_set_t * data_set)
{
xmlNode *xml_rsc = NULL;
GListPtr set_iter = NULL;
GListPtr resources = NULL;
resource_t *last = NULL;
resource_t *resource = NULL;
int local_kind = kind;
gboolean sequential = FALSE;
enum pe_ordering flags = pe_order_optional;
char *key = NULL;
const char *id = ID(set);
const char *action = crm_element_value(set, "action");
const char *sequential_s = crm_element_value(set, "sequential");
const char *kind_s = crm_element_value(set, XML_ORDER_ATTR_KIND);
/*
char *pseudo_id = NULL;
char *end_id = NULL;
char *begin_id = NULL;
*/
if (action == NULL) {
action = RSC_START;
}
if (kind_s) {
local_kind = get_ordering_type(set);
}
if (sequential_s == NULL) {
sequential_s = "1";
}
sequential = crm_is_true(sequential_s);
if (crm_is_true(symmetrical)) {
flags = get_flags(id, local_kind, action, action, FALSE);
} else {
flags = get_asymmetrical_flags(local_kind);
}
for (xml_rsc = __xml_first_child(set); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(id, resource, ID(xml_rsc));
resources = g_list_append(resources, resource);
}
}
if (g_list_length(resources) == 1) {
crm_trace("Single set: %s", id);
*rsc = resource;
*end = NULL;
*begin = NULL;
*inv_end = NULL;
*inv_begin = NULL;
goto done;
}
/*
pseudo_id = crm_concat(id, action, '-');
end_id = crm_concat(pseudo_id, "end", '-');
begin_id = crm_concat(pseudo_id, "begin", '-');
*/
*rsc = NULL;
/*
*end = get_pseudo_op(end_id, data_set);
*begin = get_pseudo_op(begin_id, data_set);
free(pseudo_id);
free(begin_id);
free(end_id);
*/
set_iter = resources;
while (set_iter != NULL) {
resource = (resource_t *) set_iter->data;
set_iter = set_iter->next;
key = generate_op_key(resource->id, action, 0);
/*
custom_action_order(NULL, NULL, *begin, resource, strdup(key), NULL,
flags|pe_order_implies_first_printed, data_set);
custom_action_order(resource, strdup(key), NULL, NULL, NULL, *end,
flags|pe_order_implies_then_printed, data_set);
*/
if (local_kind == pe_order_kind_serialize) {
/* Serialize before everything that comes after */
GListPtr gIter = NULL;
for (gIter = set_iter; gIter != NULL; gIter = gIter->next) {
resource_t *then_rsc = (resource_t *) gIter->data;
char *then_key = generate_op_key(then_rsc->id, action, 0);
custom_action_order(resource, strdup(key), NULL, then_rsc, then_key, NULL,
flags, data_set);
}
} else if (sequential) {
if (last != NULL) {
new_rsc_order(last, action, resource, action, flags, data_set);
}
last = resource;
}
free(key);
}
if (crm_is_true(symmetrical) == FALSE) {
goto done;
} else if (symmetrical && local_kind == pe_order_kind_serialize) {
crm_config_warn("Cannot invert serialized constraint set %s", id);
goto done;
} else if (local_kind == pe_order_kind_serialize) {
goto done;
}
last = NULL;
action = invert_action(action);
/*
pseudo_id = crm_concat(id, action, '-');
end_id = crm_concat(pseudo_id, "end", '-');
begin_id = crm_concat(pseudo_id, "begin", '-');
*inv_end = get_pseudo_op(end_id, data_set);
*inv_begin = get_pseudo_op(begin_id, data_set);
free(pseudo_id);
free(begin_id);
free(end_id);
*/
flags = get_flags(id, local_kind, action, action, TRUE);
set_iter = resources;
while (set_iter != NULL) {
resource = (resource_t *) set_iter->data;
set_iter = set_iter->next;
/*
key = generate_op_key(resource->id, action, 0);
custom_action_order(NULL, NULL, *inv_begin, resource, strdup(key), NULL,
flags|pe_order_implies_first_printed, data_set);
custom_action_order(resource, key, NULL, NULL, NULL, *inv_end,
flags|pe_order_implies_then_printed, data_set);
*/
if (sequential) {
if (last != NULL) {
new_rsc_order(resource, action, last, action, flags, data_set);
}
last = resource;
}
}
done:
g_list_free(resources);
return TRUE;
}
static gboolean
order_rsc_sets(const char *id, xmlNode * set1, xmlNode * set2, enum pe_order_kind kind,
pe_working_set_t * data_set, gboolean invert, gboolean symmetrical)
{
xmlNode *xml_rsc = NULL;
resource_t *rsc_1 = NULL;
resource_t *rsc_2 = NULL;
const char *action_1 = crm_element_value(set1, "action");
const char *action_2 = crm_element_value(set2, "action");
const char *sequential_1 = crm_element_value(set1, "sequential");
const char *sequential_2 = crm_element_value(set2, "sequential");
const char *require_all_s = crm_element_value(set1, "require-all");
gboolean require_all = require_all_s ? crm_is_true(require_all_s) : TRUE;
enum pe_ordering flags = pe_order_none;
if (action_1 == NULL) {
action_1 = RSC_START;
};
if (action_2 == NULL) {
action_2 = RSC_START;
};
if (invert) {
action_1 = invert_action(action_1);
action_2 = invert_action(action_2);
}
if(safe_str_eq(RSC_STOP, action_1) || safe_str_eq(RSC_DEMOTE, action_1)) {
/* Assuming: A -> ( B || C) -> D
* The one-or-more logic only applies during the start/promote phase
* During shutdown neither B nor can shutdown until D is down, so simply turn require_all back on.
*/
require_all = TRUE;
}
if (symmetrical == FALSE) {
flags = get_asymmetrical_flags(kind);
} else {
flags = get_flags(id, kind, action_2, action_1, invert);
}
/* If we have an un-ordered set1, whether it is sequential or not is irrelevant in regards to set2. */
if (!require_all) {
char *task = crm_concat(CRM_OP_RELAXED_SET, ID(set1), ':');
action_t *unordered_action = get_pseudo_op(task, data_set);
free(task);
update_action_flags(unordered_action, pe_action_requires_any);
for (xml_rsc = __xml_first_child(set1); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
xmlNode *xml_rsc_2 = NULL;
if (!crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
continue;
}
EXPAND_CONSTRAINT_IDREF(id, rsc_1, ID(xml_rsc));
/* Add an ordering constraint between every element in set1 and the pseudo action.
* If any action in set1 is runnable the pseudo action will be runnable. */
custom_action_order(rsc_1, generate_op_key(rsc_1->id, action_1, 0), NULL,
NULL, NULL, unordered_action,
pe_order_one_or_more | pe_order_implies_then_printed, data_set);
for (xml_rsc_2 = __xml_first_child(set2); xml_rsc_2 != NULL;
xml_rsc_2 = __xml_next(xml_rsc_2)) {
if (!crm_str_eq((const char *)xml_rsc_2->name, XML_TAG_RESOURCE_REF, TRUE)) {
continue;
}
EXPAND_CONSTRAINT_IDREF(id, rsc_2, ID(xml_rsc_2));
/* Add an ordering constraint between the pseudo action and every element in set2.
* If the pseudo action is runnable, every action in set2 will be runnable */
custom_action_order(NULL, NULL, unordered_action,
rsc_2, generate_op_key(rsc_2->id, action_2, 0), NULL,
flags | pe_order_runnable_left, data_set);
}
}
return TRUE;
}
if (crm_is_true(sequential_1)) {
if (invert == FALSE) {
/* get the last one */
const char *rid = NULL;
for (xml_rsc = __xml_first_child(set1); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
rid = ID(xml_rsc);
}
}
EXPAND_CONSTRAINT_IDREF(id, rsc_1, rid);
} else {
/* get the first one */
for (xml_rsc = __xml_first_child(set1); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(id, rsc_1, ID(xml_rsc));
break;
}
}
}
}
if (crm_is_true(sequential_2)) {
if (invert == FALSE) {
/* get the first one */
for (xml_rsc = __xml_first_child(set2); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(id, rsc_2, ID(xml_rsc));
break;
}
}
} else {
/* get the last one */
const char *rid = NULL;
for (xml_rsc = __xml_first_child(set2); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
rid = ID(xml_rsc);
}
}
EXPAND_CONSTRAINT_IDREF(id, rsc_2, rid);
}
}
if (rsc_1 != NULL && rsc_2 != NULL) {
new_rsc_order(rsc_1, action_1, rsc_2, action_2, flags, data_set);
} else if (rsc_1 != NULL) {
for (xml_rsc = __xml_first_child(set2); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(id, rsc_2, ID(xml_rsc));
new_rsc_order(rsc_1, action_1, rsc_2, action_2, flags, data_set);
}
}
} else if (rsc_2 != NULL) {
xmlNode *xml_rsc = NULL;
for (xml_rsc = __xml_first_child(set1); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(id, rsc_1, ID(xml_rsc));
new_rsc_order(rsc_1, action_1, rsc_2, action_2, flags, data_set);
}
}
} else {
for (xml_rsc = __xml_first_child(set1); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
xmlNode *xml_rsc_2 = NULL;
EXPAND_CONSTRAINT_IDREF(id, rsc_1, ID(xml_rsc));
for (xml_rsc_2 = __xml_first_child(set2); xml_rsc_2 != NULL;
xml_rsc_2 = __xml_next(xml_rsc_2)) {
if (crm_str_eq((const char *)xml_rsc_2->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(id, rsc_2, ID(xml_rsc_2));
new_rsc_order(rsc_1, action_1, rsc_2, action_2, flags, data_set);
}
}
}
}
}
return TRUE;
}
static gboolean
unpack_order_tags(xmlNode * xml_obj, xmlNode ** expanded_xml, pe_working_set_t * data_set)
{
const char *id = NULL;
const char *id_first = NULL;
const char *id_then = NULL;
const char *action_first = NULL;
const char *action_then = NULL;
resource_t *rsc_first = NULL;
resource_t *rsc_then = NULL;
tag_t *tag_first = NULL;
tag_t *tag_then = NULL;
xmlNode *new_xml = NULL;
xmlNode *rsc_set_first = NULL;
xmlNode *rsc_set_then = NULL;
gboolean any_sets = FALSE;
*expanded_xml = NULL;
if (xml_obj == NULL) {
crm_config_err("No constraint object to process.");
return FALSE;
}
id = crm_element_value(xml_obj, XML_ATTR_ID);
if (id == NULL) {
crm_config_err("%s constraint must have an id", crm_element_name(xml_obj));
return FALSE;
}
/* Attempt to expand any template/tag references in possible resource sets. */
expand_tags_in_sets(xml_obj, &new_xml, data_set);
if (new_xml) {
/* There are resource sets referencing templates/tags. Return with the expanded XML. */
crm_log_xml_trace(new_xml, "Expanded rsc_order...");
*expanded_xml = new_xml;
return TRUE;
}
id_first = crm_element_value(xml_obj, XML_ORDER_ATTR_FIRST);
id_then = crm_element_value(xml_obj, XML_ORDER_ATTR_THEN);
if (id_first == NULL || id_then == NULL) {
return TRUE;
}
if (valid_resource_or_tag(data_set, id_first, &rsc_first, &tag_first) == FALSE) {
crm_config_err("Constraint '%s': Invalid reference to '%s'", id, id_first);
return FALSE;
}
if (valid_resource_or_tag(data_set, id_then, &rsc_then, &tag_then) == FALSE) {
crm_config_err("Constraint '%s': Invalid reference to '%s'", id, id_then);
return FALSE;
}
if (rsc_first && rsc_then) {
/* Neither side references any template/tag. */
return TRUE;
}
action_first = crm_element_value(xml_obj, XML_ORDER_ATTR_FIRST_ACTION);
action_then = crm_element_value(xml_obj, XML_ORDER_ATTR_THEN_ACTION);
new_xml = copy_xml(xml_obj);
/* Convert the template/tag reference in "first" into a resource_set under the order constraint. */
if (tag_to_set(new_xml, &rsc_set_first, XML_ORDER_ATTR_FIRST, TRUE, data_set) == FALSE) {
free_xml(new_xml);
return FALSE;
}
if (rsc_set_first) {
if (action_first) {
/* A "first-action" is specified.
Move it into the converted resource_set as an "action" attribute. */
crm_xml_add(rsc_set_first, "action", action_first);
xml_remove_prop(new_xml, XML_ORDER_ATTR_FIRST_ACTION);
}
any_sets = TRUE;
}
/* Convert the template/tag reference in "then" into a resource_set under the order constraint. */
if (tag_to_set(new_xml, &rsc_set_then, XML_ORDER_ATTR_THEN, TRUE, data_set) == FALSE) {
free_xml(new_xml);
return FALSE;
}
if (rsc_set_then) {
if (action_then) {
/* A "then-action" is specified.
Move it into the converted resource_set as an "action" attribute. */
crm_xml_add(rsc_set_then, "action", action_then);
xml_remove_prop(new_xml, XML_ORDER_ATTR_THEN_ACTION);
}
any_sets = TRUE;
}
if (any_sets) {
crm_log_xml_trace(new_xml, "Expanded rsc_order...");
*expanded_xml = new_xml;
} else {
free_xml(new_xml);
}
return TRUE;
}
gboolean
unpack_rsc_order(xmlNode * xml_obj, pe_working_set_t * data_set)
{
gboolean any_sets = FALSE;
resource_t *rsc = NULL;
/*
resource_t *last_rsc = NULL;
*/
action_t *set_end = NULL;
action_t *set_begin = NULL;
action_t *set_inv_end = NULL;
action_t *set_inv_begin = NULL;
xmlNode *set = NULL;
xmlNode *last = NULL;
xmlNode *orig_xml = NULL;
xmlNode *expanded_xml = NULL;
/*
action_t *last_end = NULL;
action_t *last_begin = NULL;
action_t *last_inv_end = NULL;
action_t *last_inv_begin = NULL;
*/
const char *id = crm_element_value(xml_obj, XML_ATTR_ID);
const char *invert = crm_element_value(xml_obj, XML_CONS_ATTR_SYMMETRICAL);
enum pe_order_kind kind = get_ordering_type(xml_obj);
gboolean invert_bool = TRUE;
gboolean rc = TRUE;
if (invert == NULL) {
invert = "true";
}
invert_bool = crm_is_true(invert);
rc = unpack_order_tags(xml_obj, &expanded_xml, data_set);
if (expanded_xml) {
orig_xml = xml_obj;
xml_obj = expanded_xml;
} else if (rc == FALSE) {
return FALSE;
}
for (set = __xml_first_child(xml_obj); set != NULL; set = __xml_next(set)) {
if (crm_str_eq((const char *)set->name, XML_CONS_TAG_RSC_SET, TRUE)) {
any_sets = TRUE;
set = expand_idref(set, data_set->input);
if (unpack_order_set(set, kind, &rsc, &set_begin, &set_end,
&set_inv_begin, &set_inv_end, invert, data_set) == FALSE) {
return FALSE;
/* Expand orders in order_rsc_sets() instead of via pseudo actions. */
/*
} else if(last) {
const char *set_action = crm_element_value(set, "action");
const char *last_action = crm_element_value(last, "action");
enum pe_ordering flags = get_flags(id, kind, last_action, set_action, FALSE);
if(!set_action) { set_action = RSC_START; }
if(!last_action) { last_action = RSC_START; }
if(rsc == NULL && last_rsc == NULL) {
order_actions(last_end, set_begin, flags);
} else {
custom_action_order(
last_rsc, null_or_opkey(last_rsc, last_action), last_end,
rsc, null_or_opkey(rsc, set_action), set_begin,
flags, data_set);
}
if(crm_is_true(invert)) {
set_action = invert_action(set_action);
last_action = invert_action(last_action);
flags = get_flags(id, kind, last_action, set_action, TRUE);
if(rsc == NULL && last_rsc == NULL) {
order_actions(last_inv_begin, set_inv_end, flags);
} else {
custom_action_order(
last_rsc, null_or_opkey(last_rsc, last_action), last_inv_begin,
rsc, null_or_opkey(rsc, set_action), set_inv_end,
flags, data_set);
}
}
*/
} else if ( /* never called -- Now call it for supporting clones in resource sets */
last) {
if (order_rsc_sets(id, last, set, kind, data_set, FALSE, invert_bool) == FALSE) {
return FALSE;
}
if (invert_bool
&& order_rsc_sets(id, set, last, kind, data_set, TRUE, invert_bool) == FALSE) {
return FALSE;
}
}
last = set;
/*
last_rsc = rsc;
last_end = set_end;
last_begin = set_begin;
last_inv_end = set_inv_end;
last_inv_begin = set_inv_begin;
*/
}
}
if (expanded_xml) {
free_xml(expanded_xml);
xml_obj = orig_xml;
}
if (any_sets == FALSE) {
return unpack_simple_rsc_order(xml_obj, data_set);
}
return TRUE;
}
static gboolean
unpack_colocation_set(xmlNode * set, int score, pe_working_set_t * data_set)
{
xmlNode *xml_rsc = NULL;
resource_t *with = NULL;
resource_t *resource = NULL;
const char *set_id = ID(set);
const char *role = crm_element_value(set, "role");
const char *sequential = crm_element_value(set, "sequential");
const char *ordering = crm_element_value(set, "ordering");
int local_score = score;
const char *score_s = crm_element_value(set, XML_RULE_ATTR_SCORE);
if (score_s) {
local_score = char2score(score_s);
}
if(ordering == NULL) {
ordering = "group";
}
if (sequential != NULL && crm_is_true(sequential) == FALSE) {
return TRUE;
} else if (local_score >= 0 && safe_str_eq(ordering, "group")) {
for (xml_rsc = __xml_first_child(set); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(set_id, resource, ID(xml_rsc));
if (with != NULL) {
pe_rsc_trace(resource, "Colocating %s with %s", resource->id, with->id);
rsc_colocation_new(set_id, NULL, local_score, resource, with, role, role,
data_set);
}
with = resource;
}
}
} else if (local_score >= 0) {
resource_t *last = NULL;
for (xml_rsc = __xml_first_child(set); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(set_id, resource, ID(xml_rsc));
if (last != NULL) {
pe_rsc_trace(resource, "Colocating %s with %s", last->id, resource->id);
rsc_colocation_new(set_id, NULL, local_score, last, resource, role, role,
data_set);
}
last = resource;
}
}
} else {
/* Anti-colocating with every prior resource is
* the only way to ensure the intuitive result
* (ie. that no-one in the set can run with anyone
* else in the set)
*/
for (xml_rsc = __xml_first_child(set); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
xmlNode *xml_rsc_with = NULL;
EXPAND_CONSTRAINT_IDREF(set_id, resource, ID(xml_rsc));
for (xml_rsc_with = __xml_first_child(set); xml_rsc_with != NULL;
xml_rsc_with = __xml_next(xml_rsc_with)) {
if (crm_str_eq((const char *)xml_rsc_with->name, XML_TAG_RESOURCE_REF, TRUE)) {
if (safe_str_eq(resource->id, ID(xml_rsc_with))) {
break;
} else if (resource == NULL) {
crm_config_err("%s: No resource found for %s", set_id,
ID(xml_rsc_with));
return FALSE;
}
EXPAND_CONSTRAINT_IDREF(set_id, with, ID(xml_rsc_with));
pe_rsc_trace(resource, "Anti-Colocating %s with %s", resource->id,
with->id);
rsc_colocation_new(set_id, NULL, local_score, resource, with, role, role,
data_set);
}
}
}
}
}
return TRUE;
}
static gboolean
colocate_rsc_sets(const char *id, xmlNode * set1, xmlNode * set2, int score,
pe_working_set_t * data_set)
{
xmlNode *xml_rsc = NULL;
resource_t *rsc_1 = NULL;
resource_t *rsc_2 = NULL;
const char *role_1 = crm_element_value(set1, "role");
const char *role_2 = crm_element_value(set2, "role");
const char *sequential_1 = crm_element_value(set1, "sequential");
const char *sequential_2 = crm_element_value(set2, "sequential");
if (sequential_1 == NULL || crm_is_true(sequential_1)) {
/* get the first one */
for (xml_rsc = __xml_first_child(set1); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(id, rsc_1, ID(xml_rsc));
break;
}
}
}
if (sequential_2 == NULL || crm_is_true(sequential_2)) {
/* get the last one */
const char *rid = NULL;
for (xml_rsc = __xml_first_child(set2); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
rid = ID(xml_rsc);
}
}
EXPAND_CONSTRAINT_IDREF(id, rsc_2, rid);
}
if (rsc_1 != NULL && rsc_2 != NULL) {
rsc_colocation_new(id, NULL, score, rsc_1, rsc_2, role_1, role_2, data_set);
} else if (rsc_1 != NULL) {
for (xml_rsc = __xml_first_child(set2); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(id, rsc_2, ID(xml_rsc));
rsc_colocation_new(id, NULL, score, rsc_1, rsc_2, role_1, role_2, data_set);
}
}
} else if (rsc_2 != NULL) {
for (xml_rsc = __xml_first_child(set1); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(id, rsc_1, ID(xml_rsc));
rsc_colocation_new(id, NULL, score, rsc_1, rsc_2, role_1, role_2, data_set);
}
}
} else {
for (xml_rsc = __xml_first_child(set1); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
xmlNode *xml_rsc_2 = NULL;
EXPAND_CONSTRAINT_IDREF(id, rsc_1, ID(xml_rsc));
for (xml_rsc_2 = __xml_first_child(set2); xml_rsc_2 != NULL;
xml_rsc_2 = __xml_next(xml_rsc_2)) {
if (crm_str_eq((const char *)xml_rsc_2->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(id, rsc_2, ID(xml_rsc_2));
rsc_colocation_new(id, NULL, score, rsc_1, rsc_2, role_1, role_2, data_set);
}
}
}
}
}
return TRUE;
}
static gboolean
unpack_simple_colocation(xmlNode * xml_obj, pe_working_set_t * data_set)
{
int score_i = 0;
const char *id = crm_element_value(xml_obj, XML_ATTR_ID);
const char *score = crm_element_value(xml_obj, XML_RULE_ATTR_SCORE);
const char *id_lh = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE);
const char *id_rh = crm_element_value(xml_obj, XML_COLOC_ATTR_TARGET);
const char *state_lh = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE_ROLE);
const char *state_rh = crm_element_value(xml_obj, XML_COLOC_ATTR_TARGET_ROLE);
const char *instance_lh = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE_INSTANCE);
const char *instance_rh = crm_element_value(xml_obj, XML_COLOC_ATTR_TARGET_INSTANCE);
const char *attr = crm_element_value(xml_obj, XML_COLOC_ATTR_NODE_ATTR);
const char *symmetrical = crm_element_value(xml_obj, XML_CONS_ATTR_SYMMETRICAL);
resource_t *rsc_lh = pe_find_constraint_resource(data_set->resources, id_lh);
resource_t *rsc_rh = pe_find_constraint_resource(data_set->resources, id_rh);
if (rsc_lh == NULL) {
crm_config_err("Invalid constraint '%s': No resource named '%s'", id, id_lh);
return FALSE;
} else if (rsc_rh == NULL) {
crm_config_err("Invalid constraint '%s': No resource named '%s'", id, id_rh);
return FALSE;
} else if (instance_lh && rsc_lh->variant < pe_clone) {
crm_config_err
("Invalid constraint '%s': Resource '%s' is not a clone but instance %s was requested",
id, id_lh, instance_lh);
return FALSE;
} else if (instance_rh && rsc_rh->variant < pe_clone) {
crm_config_err
("Invalid constraint '%s': Resource '%s' is not a clone but instance %s was requested",
id, id_rh, instance_rh);
return FALSE;
}
if (instance_lh) {
rsc_lh = find_clone_instance(rsc_lh, instance_lh, data_set);
if (rsc_lh == NULL) {
crm_config_warn("Invalid constraint '%s': No instance '%s' of '%s'", id, instance_lh,
id_lh);
return FALSE;
}
}
if (instance_rh) {
rsc_rh = find_clone_instance(rsc_rh, instance_rh, data_set);
if (rsc_rh == NULL) {
crm_config_warn("Invalid constraint '%s': No instance '%s' of '%s'", id, instance_rh,
id_rh);
return FALSE;
}
}
if (crm_is_true(symmetrical)) {
crm_config_warn("The %s colocation constraint attribute has been removed."
" It didn't do what you think it did anyway.", XML_CONS_ATTR_SYMMETRICAL);
}
if (score) {
score_i = char2score(score);
}
rsc_colocation_new(id, attr, score_i, rsc_lh, rsc_rh, state_lh, state_rh, data_set);
return TRUE;
}
static gboolean
unpack_colocation_tags(xmlNode * xml_obj, xmlNode ** expanded_xml, pe_working_set_t * data_set)
{
const char *id = NULL;
const char *id_lh = NULL;
const char *id_rh = NULL;
const char *state_lh = NULL;
const char *state_rh = NULL;
resource_t *rsc_lh = NULL;
resource_t *rsc_rh = NULL;
tag_t *tag_lh = NULL;
tag_t *tag_rh = NULL;
xmlNode *new_xml = NULL;
xmlNode *rsc_set_lh = NULL;
xmlNode *rsc_set_rh = NULL;
gboolean any_sets = FALSE;
*expanded_xml = NULL;
if (xml_obj == NULL) {
crm_config_err("No constraint object to process.");
return FALSE;
}
id = crm_element_value(xml_obj, XML_ATTR_ID);
if (id == NULL) {
crm_config_err("%s constraint must have an id", crm_element_name(xml_obj));
return FALSE;
}
/* Attempt to expand any template/tag references in possible resource sets. */
expand_tags_in_sets(xml_obj, &new_xml, data_set);
if (new_xml) {
/* There are resource sets referencing templates/tags. Return with the expanded XML. */
crm_log_xml_trace(new_xml, "Expanded rsc_colocation...");
*expanded_xml = new_xml;
return TRUE;
}
id_lh = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE);
id_rh = crm_element_value(xml_obj, XML_COLOC_ATTR_TARGET);
if (id_lh == NULL || id_rh == NULL) {
return TRUE;
}
if (valid_resource_or_tag(data_set, id_lh, &rsc_lh, &tag_lh) == FALSE) {
crm_config_err("Constraint '%s': Invalid reference to '%s'", id, id_lh);
return FALSE;
}
if (valid_resource_or_tag(data_set, id_rh, &rsc_rh, &tag_rh) == FALSE) {
crm_config_err("Constraint '%s': Invalid reference to '%s'", id, id_rh);
return FALSE;
}
if (rsc_lh && rsc_rh) {
/* Neither side references any template/tag. */
return TRUE;
}
if (tag_lh && tag_rh) {
/* A colocation constraint between two templates/tags makes no sense. */
crm_config_err("Either LHS or RHS of %s should be a normal resource instead of a template/tag",
id);
return FALSE;
}
state_lh = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE_ROLE);
state_rh = crm_element_value(xml_obj, XML_COLOC_ATTR_TARGET_ROLE);
new_xml = copy_xml(xml_obj);
/* Convert the template/tag reference in "rsc" into a resource_set under the colocation constraint. */
if (tag_to_set(new_xml, &rsc_set_lh, XML_COLOC_ATTR_SOURCE, TRUE, data_set) == FALSE) {
free_xml(new_xml);
return FALSE;
}
if (rsc_set_lh) {
if (state_lh) {
/* A "rsc-role" is specified.
Move it into the converted resource_set as a "role"" attribute. */
crm_xml_add(rsc_set_lh, "role", state_lh);
xml_remove_prop(new_xml, XML_COLOC_ATTR_SOURCE_ROLE);
}
any_sets = TRUE;
}
/* Convert the template/tag reference in "with-rsc" into a resource_set under the colocation constraint. */
if (tag_to_set(new_xml, &rsc_set_rh, XML_COLOC_ATTR_TARGET, TRUE, data_set) == FALSE) {
free_xml(new_xml);
return FALSE;
}
if (rsc_set_rh) {
if (state_rh) {
/* A "with-rsc-role" is specified.
Move it into the converted resource_set as a "role"" attribute. */
crm_xml_add(rsc_set_rh, "role", state_rh);
xml_remove_prop(new_xml, XML_COLOC_ATTR_TARGET_ROLE);
}
any_sets = TRUE;
}
if (any_sets) {
crm_log_xml_trace(new_xml, "Expanded rsc_colocation...");
*expanded_xml = new_xml;
} else {
free_xml(new_xml);
}
return TRUE;
}
gboolean
unpack_rsc_colocation(xmlNode * xml_obj, pe_working_set_t * data_set)
{
int score_i = 0;
xmlNode *set = NULL;
xmlNode *last = NULL;
gboolean any_sets = FALSE;
xmlNode *orig_xml = NULL;
xmlNode *expanded_xml = NULL;
const char *id = crm_element_value(xml_obj, XML_ATTR_ID);
const char *score = crm_element_value(xml_obj, XML_RULE_ATTR_SCORE);
gboolean rc = TRUE;
if (score) {
score_i = char2score(score);
}
rc = unpack_colocation_tags(xml_obj, &expanded_xml, data_set);
if (expanded_xml) {
orig_xml = xml_obj;
xml_obj = expanded_xml;
} else if (rc == FALSE) {
return FALSE;
}
for (set = __xml_first_child(xml_obj); set != NULL; set = __xml_next(set)) {
if (crm_str_eq((const char *)set->name, XML_CONS_TAG_RSC_SET, TRUE)) {
any_sets = TRUE;
set = expand_idref(set, data_set->input);
if (unpack_colocation_set(set, score_i, data_set) == FALSE) {
return FALSE;
} else if (last && colocate_rsc_sets(id, last, set, score_i, data_set) == FALSE) {
return FALSE;
}
last = set;
}
}
if (expanded_xml) {
free_xml(expanded_xml);
xml_obj = orig_xml;
}
if (any_sets == FALSE) {
return unpack_simple_colocation(xml_obj, data_set);
}
return TRUE;
}
gboolean
rsc_ticket_new(const char *id, resource_t * rsc_lh, ticket_t * ticket,
const char *state_lh, const char *loss_policy, pe_working_set_t * data_set)
{
rsc_ticket_t *new_rsc_ticket = NULL;
if (rsc_lh == NULL) {
crm_config_err("No resource found for LHS %s", id);
return FALSE;
}
new_rsc_ticket = calloc(1, sizeof(rsc_ticket_t));
if (new_rsc_ticket == NULL) {
return FALSE;
}
if (state_lh == NULL || safe_str_eq(state_lh, RSC_ROLE_STARTED_S)) {
state_lh = RSC_ROLE_UNKNOWN_S;
}
new_rsc_ticket->id = id;
new_rsc_ticket->ticket = ticket;
new_rsc_ticket->rsc_lh = rsc_lh;
new_rsc_ticket->role_lh = text2role(state_lh);
if (safe_str_eq(loss_policy, "fence")) {
crm_debug("On loss of ticket '%s': Fence the nodes running %s (%s)",
new_rsc_ticket->ticket->id, new_rsc_ticket->rsc_lh->id,
role2text(new_rsc_ticket->role_lh));
new_rsc_ticket->loss_policy = loss_ticket_fence;
} else if (safe_str_eq(loss_policy, "freeze")) {
crm_debug("On loss of ticket '%s': Freeze %s (%s)",
new_rsc_ticket->ticket->id, new_rsc_ticket->rsc_lh->id,
role2text(new_rsc_ticket->role_lh));
new_rsc_ticket->loss_policy = loss_ticket_freeze;
} else if (safe_str_eq(loss_policy, "demote")) {
crm_debug("On loss of ticket '%s': Demote %s (%s)",
new_rsc_ticket->ticket->id, new_rsc_ticket->rsc_lh->id,
role2text(new_rsc_ticket->role_lh));
new_rsc_ticket->loss_policy = loss_ticket_demote;
} else if (safe_str_eq(loss_policy, "stop")) {
crm_debug("On loss of ticket '%s': Stop %s (%s)",
new_rsc_ticket->ticket->id, new_rsc_ticket->rsc_lh->id,
role2text(new_rsc_ticket->role_lh));
new_rsc_ticket->loss_policy = loss_ticket_stop;
} else {
if (new_rsc_ticket->role_lh == RSC_ROLE_MASTER) {
crm_debug("On loss of ticket '%s': Default to demote %s (%s)",
new_rsc_ticket->ticket->id, new_rsc_ticket->rsc_lh->id,
role2text(new_rsc_ticket->role_lh));
new_rsc_ticket->loss_policy = loss_ticket_demote;
} else {
crm_debug("On loss of ticket '%s': Default to stop %s (%s)",
new_rsc_ticket->ticket->id, new_rsc_ticket->rsc_lh->id,
role2text(new_rsc_ticket->role_lh));
new_rsc_ticket->loss_policy = loss_ticket_stop;
}
}
pe_rsc_trace(rsc_lh, "%s (%s) ==> %s", rsc_lh->id, role2text(new_rsc_ticket->role_lh),
ticket->id);
rsc_lh->rsc_tickets = g_list_append(rsc_lh->rsc_tickets, new_rsc_ticket);
data_set->ticket_constraints = g_list_append(data_set->ticket_constraints, new_rsc_ticket);
if (new_rsc_ticket->ticket->granted == FALSE || new_rsc_ticket->ticket->standby) {
rsc_ticket_constraint(rsc_lh, new_rsc_ticket, data_set);
}
return TRUE;
}
static gboolean
unpack_rsc_ticket_set(xmlNode * set, ticket_t * ticket, const char *loss_policy,
pe_working_set_t * data_set)
{
xmlNode *xml_rsc = NULL;
resource_t *resource = NULL;
const char *set_id = ID(set);
const char *role = crm_element_value(set, "role");
if (set == NULL) {
crm_config_err("No resource_set object to process.");
return FALSE;
}
if (set_id == NULL) {
crm_config_err("resource_set must have an id");
return FALSE;
}
if (ticket == NULL) {
crm_config_err("No dependented ticket specified for '%s'", set_id);
return FALSE;
}
for (xml_rsc = __xml_first_child(set); xml_rsc != NULL; xml_rsc = __xml_next(xml_rsc)) {
if (crm_str_eq((const char *)xml_rsc->name, XML_TAG_RESOURCE_REF, TRUE)) {
EXPAND_CONSTRAINT_IDREF(set_id, resource, ID(xml_rsc));
pe_rsc_trace(resource, "Resource '%s' depends on ticket '%s'", resource->id,
ticket->id);
rsc_ticket_new(set_id, resource, ticket, role, loss_policy, data_set);
}
}
return TRUE;
}
static gboolean
unpack_simple_rsc_ticket(xmlNode * xml_obj, pe_working_set_t * data_set)
{
const char *id = crm_element_value(xml_obj, XML_ATTR_ID);
const char *ticket_str = crm_element_value(xml_obj, XML_TICKET_ATTR_TICKET);
const char *loss_policy = crm_element_value(xml_obj, XML_TICKET_ATTR_LOSS_POLICY);
ticket_t *ticket = NULL;
const char *id_lh = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE);
const char *state_lh = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE_ROLE);
const char *instance_lh = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE_INSTANCE);
resource_t *rsc_lh = NULL;
if (xml_obj == NULL) {
crm_config_err("No rsc_ticket constraint object to process.");
return FALSE;
}
if (id == NULL) {
crm_config_err("%s constraint must have an id", crm_element_name(xml_obj));
return FALSE;
}
if (ticket_str == NULL) {
crm_config_err("Invalid constraint '%s': No ticket specified", id);
return FALSE;
} else {
ticket = g_hash_table_lookup(data_set->tickets, ticket_str);
}
if (ticket == NULL) {
crm_config_err("Invalid constraint '%s': No ticket named '%s'", id, ticket_str);
return FALSE;
}
if (id_lh == NULL) {
crm_config_err("Invalid constraint '%s': No resource specified", id);
return FALSE;
} else {
rsc_lh = pe_find_constraint_resource(data_set->resources, id_lh);
}
if (rsc_lh == NULL) {
crm_config_err("Invalid constraint '%s': No resource named '%s'", id, id_lh);
return FALSE;
} else if (instance_lh && rsc_lh->variant < pe_clone) {
crm_config_err
("Invalid constraint '%s': Resource '%s' is not a clone but instance %s was requested",
id, id_lh, instance_lh);
return FALSE;
}
if (instance_lh) {
rsc_lh = find_clone_instance(rsc_lh, instance_lh, data_set);
if (rsc_lh == NULL) {
crm_config_warn("Invalid constraint '%s': No instance '%s' of '%s'", id, instance_lh,
id_lh);
return FALSE;
}
}
rsc_ticket_new(id, rsc_lh, ticket, state_lh, loss_policy, data_set);
return TRUE;
}
static gboolean
unpack_rsc_ticket_tags(xmlNode * xml_obj, xmlNode ** expanded_xml, pe_working_set_t * data_set)
{
const char *id = NULL;
const char *id_lh = NULL;
const char *state_lh = NULL;
resource_t *rsc_lh = NULL;
tag_t *tag_lh = NULL;
xmlNode *new_xml = NULL;
xmlNode *rsc_set_lh = NULL;
gboolean any_sets = FALSE;
*expanded_xml = NULL;
if (xml_obj == NULL) {
crm_config_err("No constraint object to process.");
return FALSE;
}
id = crm_element_value(xml_obj, XML_ATTR_ID);
if (id == NULL) {
crm_config_err("%s constraint must have an id", crm_element_name(xml_obj));
return FALSE;
}
/* Attempt to expand any template/tag references in possible resource sets. */
expand_tags_in_sets(xml_obj, &new_xml, data_set);
if (new_xml) {
/* There are resource sets referencing templates/tags. Return with the expanded XML. */
crm_log_xml_trace(new_xml, "Expanded rsc_ticket...");
*expanded_xml = new_xml;
return TRUE;
}
id_lh = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE);
if (id_lh == NULL) {
return TRUE;
}
if (valid_resource_or_tag(data_set, id_lh, &rsc_lh, &tag_lh) == FALSE) {
crm_config_err("Constraint '%s': Invalid reference to '%s'", id, id_lh);
return FALSE;
} else if (rsc_lh) {
/* No template/tag is referenced. */
return TRUE;
}
state_lh = crm_element_value(xml_obj, XML_COLOC_ATTR_SOURCE_ROLE);
new_xml = copy_xml(xml_obj);
/* Convert the template/tag reference in "rsc" into a resource_set under the rsc_ticket constraint. */
if (tag_to_set(new_xml, &rsc_set_lh, XML_COLOC_ATTR_SOURCE, FALSE, data_set) == FALSE) {
free_xml(new_xml);
return FALSE;
}
if (rsc_set_lh) {
if (state_lh) {
/* A "rsc-role" is specified.
Move it into the converted resource_set as a "role"" attribute. */
crm_xml_add(rsc_set_lh, "role", state_lh);
xml_remove_prop(new_xml, XML_COLOC_ATTR_SOURCE_ROLE);
}
any_sets = TRUE;
}
if (any_sets) {
crm_log_xml_trace(new_xml, "Expanded rsc_ticket...");
*expanded_xml = new_xml;
} else {
free_xml(new_xml);
}
return TRUE;
}
gboolean
unpack_rsc_ticket(xmlNode * xml_obj, pe_working_set_t * data_set)
{
xmlNode *set = NULL;
gboolean any_sets = FALSE;
const char *id = crm_element_value(xml_obj, XML_ATTR_ID);
const char *ticket_str = crm_element_value(xml_obj, XML_TICKET_ATTR_TICKET);
const char *loss_policy = crm_element_value(xml_obj, XML_TICKET_ATTR_LOSS_POLICY);
ticket_t *ticket = NULL;
xmlNode *orig_xml = NULL;
xmlNode *expanded_xml = NULL;
gboolean rc = TRUE;
if (xml_obj == NULL) {
crm_config_err("No rsc_ticket constraint object to process.");
return FALSE;
}
if (id == NULL) {
crm_config_err("%s constraint must have an id", crm_element_name(xml_obj));
return FALSE;
}
if (data_set->tickets == NULL) {
data_set->tickets =
g_hash_table_new_full(crm_str_hash, g_str_equal, g_hash_destroy_str, destroy_ticket);
}
if (ticket_str == NULL) {
crm_config_err("Invalid constraint '%s': No ticket specified", id);
return FALSE;
} else {
ticket = g_hash_table_lookup(data_set->tickets, ticket_str);
}
if (ticket == NULL) {
ticket = ticket_new(ticket_str, data_set);
if (ticket == NULL) {
return FALSE;
}
}
rc = unpack_rsc_ticket_tags(xml_obj, &expanded_xml, data_set);
if (expanded_xml) {
orig_xml = xml_obj;
xml_obj = expanded_xml;
} else if (rc == FALSE) {
return FALSE;
}
for (set = __xml_first_child(xml_obj); set != NULL; set = __xml_next(set)) {
if (crm_str_eq((const char *)set->name, XML_CONS_TAG_RSC_SET, TRUE)) {
any_sets = TRUE;
set = expand_idref(set, data_set->input);
if (unpack_rsc_ticket_set(set, ticket, loss_policy, data_set) == FALSE) {
return FALSE;
}
}
}
if (expanded_xml) {
free_xml(expanded_xml);
xml_obj = orig_xml;
}
if (any_sets == FALSE) {
return unpack_simple_rsc_ticket(xml_obj, data_set);
}
return TRUE;
}
gboolean
is_active(rsc_to_node_t * cons)
{
return TRUE;
}
diff --git a/pengine/regression.sh b/pengine/regression.sh
index 3a244d7416..c2bc7fb8e4 100755
--- a/pengine/regression.sh
+++ b/pengine/regression.sh
@@ -1,783 +1,793 @@
#!/bin/bash
# Copyright (C) 2004 Andrew Beekhof <andrew@beekhof.net>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This software is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
core=`dirname $0`
. $core/regression.core.sh || exit 1
create_mode="true"
info Generating test outputs for these tests...
# do_test file description
info Done.
echo ""
info Performing the following tests from $io_dir
create_mode="false"
echo ""
do_test simple1 "Offline "
do_test simple2 "Start "
do_test simple3 "Start 2 "
do_test simple4 "Start Failed"
do_test simple6 "Stop Start "
do_test simple7 "Shutdown "
#do_test simple8 "Stonith "
#do_test simple9 "Lower version"
#do_test simple10 "Higher version"
do_test simple11 "Priority (ne)"
do_test simple12 "Priority (eq)"
do_test simple8 "Stickiness"
echo ""
do_test group1 "Group "
do_test group2 "Group + Native "
do_test group3 "Group + Group "
do_test group4 "Group + Native (nothing)"
do_test group5 "Group + Native (move) "
do_test group6 "Group + Group (move) "
do_test group7 "Group colocation"
do_test group13 "Group colocation (cant run)"
do_test group8 "Group anti-colocation"
do_test group9 "Group recovery"
do_test group10 "Group partial recovery"
do_test group11 "Group target_role"
do_test group14 "Group stop (graph terminated)"
do_test group15 "-ve group colocation"
do_test bug-1573 "Partial stop of a group with two children"
do_test bug-1718 "Mandatory group ordering - Stop group_FUN"
do_test bug-lf-2613 "Move group on failure"
do_test bug-lf-2619 "Move group on clone failure"
do_test group-fail "Ensure stop order is preserved for partially active groups"
do_test group-unmanaged "No need to restart r115 because r114 is unmanaged"
do_test group-unmanaged-stopped "Make sure r115 is stopped when r114 fails"
do_test group-dependants "Account for the location preferences of things colocated with a group"
echo ""
do_test rsc_dep1 "Must not "
do_test rsc_dep3 "Must "
do_test rsc_dep5 "Must not 3 "
do_test rsc_dep7 "Must 3 "
do_test rsc_dep10 "Must (but cant)"
do_test rsc_dep2 "Must (running) "
do_test rsc_dep8 "Must (running : alt) "
do_test rsc_dep4 "Must (running + move)"
do_test asymmetric "Asymmetric - require explicit location constraints"
echo ""
do_test orphan-0 "Orphan ignore"
do_test orphan-1 "Orphan stop"
do_test orphan-2 "Orphan stop, remove failcount"
echo ""
do_test params-0 "Params: No change"
do_test params-1 "Params: Changed"
do_test params-2 "Params: Resource definition"
do_test params-4 "Params: Reload"
do_test params-5 "Params: Restart based on probe digest"
do_test novell-251689 "Resource definition change + target_role=stopped"
do_test bug-lf-2106 "Restart all anonymous clone instances after config change"
do_test params-6 "Params: Detect reload in previously migrated resource"
do_test nvpair-id-ref "Support id-ref in nvpair with optional name"
echo ""
do_test target-0 "Target Role : baseline"
do_test target-1 "Target Role : master"
do_test target-2 "Target Role : invalid"
echo ""
do_test base-score "Set a node's default score for all nodes"
echo ""
do_test date-1 "Dates" -t "2005-020"
do_test date-2 "Date Spec - Pass" -t "2005-020T12:30"
do_test date-3 "Date Spec - Fail" -t "2005-020T11:30"
do_test origin "Timing of recurring operations" -t "2014-05-07 00:28:00"
do_test probe-0 "Probe (anon clone)"
do_test probe-1 "Pending Probe"
do_test probe-2 "Correctly re-probe cloned groups"
do_test probe-3 "Probe (pending node)"
do_test probe-4 "Probe (pending node + stopped resource)" --rc 4
do_test standby "Standby"
do_test comments "Comments"
echo ""
do_test one-or-more-0 "Everything starts"
do_test one-or-more-1 "Nothing starts because of A"
do_test one-or-more-2 "D can start because of C"
do_test one-or-more-3 "D cannot start because of B and C"
do_test one-or-more-4 "D cannot start because of target-role"
do_test one-or-more-5 "Start A and F even though C and D are stopped"
do_test one-or-more-6 "Leave A running even though B is stopped"
do_test one-or-more-7 "Leave A running even though C is stopped"
do_test bug-5140-require-all-false "Allow basegrp:0 to stop"
+do_test clone-require-all-1 "clone B starts node 3 and 4"
+do_test clone-require-all-2 "clone B remains stopped everywhere"
+do_test clone-require-all-3 "clone B stops everywhere because A stops everywhere"
+do_test clone-require-all-4 "clone B remains on node 3 and 4 with only one instance of A remaining."
+do_test clone-require-all-5 "clone B starts on node 1 3 and 4"
+do_test clone-require-all-6 "clone B remains active after shutting down instances of A"
+do_test clone-require-all-7 "clone A and B both start at the same time. all instances of A start before B."
+do_test clone-require-all-no-interleave-1 "C starts everywhere after A and B"
+do_test clone-require-all-no-interleave-2 "C starts on nodes 1, 2, and 4 with only one active instance of B"
+do_test clone-require-all-no-interleave-3 "C remains active when instance of B is stopped on one node and started on another."
echo ""
do_test order1 "Order start 1 "
do_test order2 "Order start 2 "
do_test order3 "Order stop "
do_test order4 "Order (multiple) "
do_test order5 "Order (move) "
do_test order6 "Order (move w/ restart) "
do_test order7 "Order (manditory) "
do_test order-optional "Order (score=0) "
do_test order-required "Order (score=INFINITY) "
do_test bug-lf-2171 "Prevent group start when clone is stopped"
do_test order-clone "Clone ordering should be able to prevent startup of dependant clones"
do_test order-sets "Ordering for resource sets"
do_test order-serialize "Serialize resources without inhibiting migration"
do_test order-serialize-set "Serialize a set of resources without inhibiting migration"
do_test clone-order-primitive "Order clone start after a primitive"
do_test clone-order-16instances "Verify ordering of 16 cloned resources"
do_test order-optional-keyword "Order (optional keyword)"
do_test order-mandatory "Order (mandatory keyword)"
do_test bug-lf-2493 "Don't imply colocation requirements when applying ordering constraints with clones"
do_test ordered-set-basic-startup "Constraint set with default order settings."
do_test ordered-set-natural "Allow natural set ordering"
do_test order-wrong-kind "Order (error)"
echo ""
do_test coloc-loop "Colocation - loop"
do_test coloc-many-one "Colocation - many-to-one"
do_test coloc-list "Colocation - many-to-one with list"
do_test coloc-group "Colocation - groups"
do_test coloc-slave-anti "Anti-colocation with slave shouldn't prevent master colocation"
do_test coloc-attr "Colocation based on node attributes"
do_test coloc-negative-group "Negative colocation with a group"
do_test coloc-intra-set "Intra-set colocation"
do_test bug-lf-2435 "Colocation sets with a negative score"
do_test coloc-clone-stays-active "Ensure clones don't get stopped/demoted because a dependant must stop"
do_test coloc_fp_logic "Verify floating point calculations in colocation are working"
do_test colo_master_w_native "cl#5070 - Verify promotion order is affected when colocating master to native rsc."
do_test colo_slave_w_native "cl#5070 - Verify promotion order is affected when colocating slave to native rsc."
do_test anti-colocation-order "cl#5187 - Prevent resources in an anti-colocation from even temporarily running on a same node"
echo ""
do_test rsc-sets-seq-true "Resource Sets - sequential=false"
do_test rsc-sets-seq-false "Resource Sets - sequential=true"
do_test rsc-sets-clone "Resource Sets - Clone"
do_test rsc-sets-master "Resource Sets - Master"
do_test rsc-sets-clone-1 "Resource Sets - Clone (lf#2404)"
#echo ""
#do_test agent1 "version: lt (empty)"
#do_test agent2 "version: eq "
#do_test agent3 "version: gt "
echo ""
do_test attrs1 "string: eq (and) "
do_test attrs2 "string: lt / gt (and)"
do_test attrs3 "string: ne (or) "
do_test attrs4 "string: exists "
do_test attrs5 "string: not_exists "
do_test attrs6 "is_dc: true "
do_test attrs7 "is_dc: false "
do_test attrs8 "score_attribute "
do_test per-node-attrs "Per node resource parameters"
echo ""
do_test mon-rsc-1 "Schedule Monitor - start"
do_test mon-rsc-2 "Schedule Monitor - move "
do_test mon-rsc-3 "Schedule Monitor - pending start "
do_test mon-rsc-4 "Schedule Monitor - move/pending start"
echo ""
do_test rec-rsc-0 "Resource Recover - no start "
do_test rec-rsc-1 "Resource Recover - start "
do_test rec-rsc-2 "Resource Recover - monitor "
do_test rec-rsc-3 "Resource Recover - stop - ignore"
do_test rec-rsc-4 "Resource Recover - stop - block "
do_test rec-rsc-5 "Resource Recover - stop - fence "
do_test rec-rsc-6 "Resource Recover - multiple - restart"
do_test rec-rsc-7 "Resource Recover - multiple - stop "
do_test rec-rsc-8 "Resource Recover - multiple - block "
do_test rec-rsc-9 "Resource Recover - group/group"
do_test monitor-recovery "on-fail=block + resource recovery detected by recurring monitor"
do_test stop-failure-no-quorum "Stop failure without quorum"
do_test stop-failure-no-fencing "Stop failure without fencing available"
do_test stop-failure-with-fencing "Stop failure with fencing available"
echo ""
do_test quorum-1 "No quorum - ignore"
do_test quorum-2 "No quorum - freeze"
do_test quorum-3 "No quorum - stop "
do_test quorum-4 "No quorum - start anyway"
do_test quorum-5 "No quorum - start anyway (group)"
do_test quorum-6 "No quorum - start anyway (clone)"
do_test bug-cl-5212 "No promotion with no-quorum-policy=freeze"
echo ""
do_test rec-node-1 "Node Recover - Startup - no fence"
do_test rec-node-2 "Node Recover - Startup - fence "
do_test rec-node-3 "Node Recover - HA down - no fence"
do_test rec-node-4 "Node Recover - HA down - fence "
do_test rec-node-5 "Node Recover - CRM down - no fence"
do_test rec-node-6 "Node Recover - CRM down - fence "
do_test rec-node-7 "Node Recover - no quorum - ignore "
do_test rec-node-8 "Node Recover - no quorum - freeze "
do_test rec-node-9 "Node Recover - no quorum - stop "
do_test rec-node-10 "Node Recover - no quorum - stop w/fence"
do_test rec-node-11 "Node Recover - CRM down w/ group - fence "
do_test rec-node-12 "Node Recover - nothing active - fence "
do_test rec-node-13 "Node Recover - failed resource + shutdown - fence "
do_test rec-node-15 "Node Recover - unknown lrm section"
do_test rec-node-14 "Serialize all stonith's"
echo ""
do_test multi1 "Multiple Active (stop/start)"
echo ""
do_test migrate-begin "Normal migration"
do_test migrate-success "Completed migration"
do_test migrate-partial-1 "Completed migration, missing stop on source"
do_test migrate-partial-2 "Successful migrate_to only"
do_test migrate-partial-3 "Successful migrate_to only, target down"
do_test migrate-partial-4 "Migrate from the correct host after migrate_to+migrate_from"
do_test bug-5186-partial-migrate "Handle partial migration when src node loses membership"
do_test migrate-fail-2 "Failed migrate_from"
do_test migrate-fail-3 "Failed migrate_from + stop on source"
do_test migrate-fail-4 "Failed migrate_from + stop on target - ideally we wouldn't need to re-stop on target"
do_test migrate-fail-5 "Failed migrate_from + stop on source and target"
do_test migrate-fail-6 "Failed migrate_to"
do_test migrate-fail-7 "Failed migrate_to + stop on source"
do_test migrate-fail-8 "Failed migrate_to + stop on target - ideally we wouldn't need to re-stop on target"
do_test migrate-fail-9 "Failed migrate_to + stop on source and target"
do_test migrate-stop "Migration in a stopping stack"
do_test migrate-start "Migration in a starting stack"
do_test migrate-stop_start "Migration in a restarting stack"
do_test migrate-stop-complex "Migration in a complex stopping stack"
do_test migrate-start-complex "Migration in a complex starting stack"
do_test migrate-stop-start-complex "Migration in a complex moving stack"
do_test migrate-shutdown "Order the post-migration 'stop' before node shutdown"
do_test migrate-1 "Migrate (migrate)"
do_test migrate-2 "Migrate (stable)"
do_test migrate-3 "Migrate (failed migrate_to)"
do_test migrate-4 "Migrate (failed migrate_from)"
do_test novell-252693 "Migration in a stopping stack"
do_test novell-252693-2 "Migration in a starting stack"
do_test novell-252693-3 "Non-Migration in a starting and stopping stack"
do_test bug-1820 "Migration in a group"
do_test bug-1820-1 "Non-migration in a group"
do_test migrate-5 "Primitive migration with a clone"
do_test migrate-fencing "Migration after Fencing"
do_test migrate-both-vms "Migrate two VMs that have no colocation"
do_test 1-a-then-bm-move-b "Advanced migrate logic. A then B. migrate B."
do_test 2-am-then-b-move-a "Advanced migrate logic, A then B, migrate A without stopping B"
do_test 3-am-then-bm-both-migrate "Advanced migrate logic. A then B. migrate both"
do_test 4-am-then-bm-b-not-migratable "Advanced migrate logic, A then B, B not migratable"
do_test 5-am-then-bm-a-not-migratable "Advanced migrate logic. A then B. move both, a not migratable"
do_test 6-migrate-group "Advanced migrate logic, migrate a group"
do_test 7-migrate-group-one-unmigratable "Advanced migrate logic, migrate group mixed with allow-migrate true/false"
do_test 8-am-then-bm-a-migrating-b-stopping "Advanced migrate logic, A then B, A migrating, B stopping"
do_test 9-am-then-bm-b-migrating-a-stopping "Advanced migrate logic, A then B, B migrate, A stopping"
do_test 10-a-then-bm-b-move-a-clone "Advanced migrate logic, A clone then B, migrate B while stopping A"
do_test 11-a-then-bm-b-move-a-clone-starting "Advanced migrate logic, A clone then B, B moving while A is start/stopping"
#echo ""
#do_test complex1 "Complex "
do_test bug-lf-2422 "Dependancy on partially active group - stop ocfs:*"
echo ""
do_test clone-anon-probe-1 "Probe the correct (anonymous) clone instance for each node"
do_test clone-anon-probe-2 "Avoid needless re-probing of anonymous clones"
do_test clone-anon-failcount "Merge failcounts for anonymous clones"
do_test inc0 "Incarnation start"
do_test inc1 "Incarnation start order"
do_test inc2 "Incarnation silent restart, stop, move"
do_test inc3 "Inter-incarnation ordering, silent restart, stop, move"
do_test inc4 "Inter-incarnation ordering, silent restart, stop, move (ordered)"
do_test inc5 "Inter-incarnation ordering, silent restart, stop, move (restart 1)"
do_test inc6 "Inter-incarnation ordering, silent restart, stop, move (restart 2)"
do_test inc7 "Clone colocation"
do_test inc8 "Clone anti-colocation"
do_test inc9 "Non-unique clone"
do_test inc10 "Non-unique clone (stop)"
do_test inc11 "Primitive colocation with clones"
do_test inc12 "Clone shutdown"
do_test cloned-group "Make sure only the correct number of cloned groups are started"
do_test cloned-group-stop "Ensure stopping qpidd also stops glance and cinder"
do_test clone-no-shuffle "Dont prioritize allocation of instances that must be moved"
do_test clone-max-zero "Orphan processing with clone-max=0"
do_test clone-anon-dup "Bug LF#2087 - Correctly parse the state of anonymous clones that are active more than once per node"
do_test bug-lf-2160 "Dont shuffle clones due to colocation"
do_test bug-lf-2213 "clone-node-max enforcement for cloned groups"
do_test bug-lf-2153 "Clone ordering constraints"
do_test bug-lf-2361 "Ensure clones observe mandatory ordering constraints if the LHS is unrunnable"
do_test bug-lf-2317 "Avoid needless restart of primitive depending on a clone"
do_test clone-colocate-instance-1 "Colocation with a specific clone instance (negative example)"
do_test clone-colocate-instance-2 "Colocation with a specific clone instance"
do_test clone-order-instance "Ordering with specific clone instances"
do_test bug-lf-2453 "Enforce mandatory clone ordering without colocation"
do_test bug-lf-2508 "Correctly reconstruct the status of anonymous cloned groups"
do_test bug-lf-2544 "Balanced clone placement"
do_test bug-lf-2445 "Redistribute clones with node-max > 1 and stickiness = 0"
do_test bug-lf-2574 "Avoid clone shuffle"
do_test bug-lf-2581 "Avoid group restart due to unrelated clone (re)start"
do_test bug-cl-5168 "Don't shuffle clones"
do_test bug-cl-5170 "Prevent clone from starting with on-fail=block"
do_test clone-fail-block-colocation "Move colocated group when failed clone has on-fail=block"
do_test clone-interleave-1 "Clone-3 cannot start on pcmk-1 due to interleaved ordering (no colocation)"
do_test clone-interleave-2 "Clone-3 must stop on pcmk-1 due to interleaved ordering (no colocation)"
do_test clone-interleave-3 "Clone-3 must be recovered on pcmk-1 due to interleaved ordering (no colocation)"
echo ""
do_test unfence-startup "Clean unfencing"
do_test unfence-definition "Unfencing when the agent changes"
do_test unfence-parameters "Unfencing when the agent parameters changes"
echo ""
do_test master-0 "Stopped -> Slave"
do_test master-1 "Stopped -> Promote"
do_test master-2 "Stopped -> Promote : notify"
do_test master-3 "Stopped -> Promote : master location"
do_test master-4 "Started -> Promote : master location"
do_test master-5 "Promoted -> Promoted"
do_test master-6 "Promoted -> Promoted (2)"
do_test master-7 "Promoted -> Fenced"
do_test master-8 "Promoted -> Fenced -> Moved"
do_test master-9 "Stopped + Promotable + No quorum"
do_test master-10 "Stopped -> Promotable : notify with monitor"
do_test master-11 "Stopped -> Promote : colocation"
do_test novell-239082 "Demote/Promote ordering"
do_test novell-239087 "Stable master placement"
do_test master-12 "Promotion based solely on rsc_location constraints"
do_test master-13 "Include preferences of colocated resources when placing master"
do_test master-demote "Ordering when actions depends on demoting a slave resource"
do_test master-ordering "Prevent resources from starting that need a master"
do_test bug-1765 "Master-Master Colocation (dont stop the slaves)"
do_test master-group "Promotion of cloned groups"
do_test bug-lf-1852 "Don't shuffle master/slave instances unnecessarily"
do_test master-failed-demote "Dont retry failed demote actions"
do_test master-failed-demote-2 "Dont retry failed demote actions (notify=false)"
do_test master-depend "Ensure resources that depend on the master don't get allocated until the master does"
do_test master-reattach "Re-attach to a running master"
do_test master-allow-start "Don't include master score if it would prevent allocation"
do_test master-colocation "Allow master instances placemaker to be influenced by colocation constraints"
do_test master-pseudo "Make sure promote/demote pseudo actions are created correctly"
do_test master-role "Prevent target-role from promoting more than master-max instances"
do_test bug-lf-2358 "Master-Master anti-colocation"
do_test master-promotion-constraint "Mandatory master colocation constraints"
do_test unmanaged-master "Ensure role is preserved for unmanaged resources"
do_test master-unmanaged-monitor "Start the correct monitor operation for unmanaged masters"
do_test master-demote-2 "Demote does not clear past failure"
do_test master-move "Move master based on failure of colocated group"
do_test master-probed-score "Observe the promotion score of probed resources"
do_test colocation_constraint_stops_master "cl#5054 - Ensure master is demoted when stopped by colocation constraint"
do_test colocation_constraint_stops_slave "cl#5054 - Ensure slave is not demoted when stopped by colocation constraint"
do_test order_constraint_stops_master "cl#5054 - Ensure master is demoted when stopped by order constraint"
do_test order_constraint_stops_slave "cl#5054 - Ensure slave is not demoted when stopped by order constraint"
do_test master_monitor_restart "cl#5072 - Ensure master monitor operation will start after promotion."
do_test bug-rh-880249 "Handle replacement of an m/s resource with a primitive"
do_test bug-5143-ms-shuffle "Prevent master shuffling due to promotion score"
do_test master-demote-block "Block promotion if demote fails with on-fail=block"
do_test master-dependant-ban "Don't stop instances from being active because a dependant is banned from that host"
do_test master-stop "Stop instances due to location constraint with role=Started"
do_test master-partially-demoted-group "Allow partially demoted group to finish demoting"
do_test bug-cl-5213 "Ensure role colocation with -INFINITY is enforced"
do_test bug-cl-5219 "Allow unrelated resources with a common colocation target to remain promoted"
do_test master-asymmetrical-order "Fix the behaviors of multi-state resources with asymmetrical ordering"
echo ""
do_test history-1 "Correctly parse stateful-1 resource state"
echo ""
do_test managed-0 "Managed (reference)"
do_test managed-1 "Not managed - down "
do_test managed-2 "Not managed - up "
do_test bug-5028 "Shutdown should block if anything depends on an unmanaged resource"
do_test bug-5028-detach "Ensure detach still works"
do_test bug-5028-bottom "Ensure shutdown still blocks if the blocked resource is at the bottom of the stack"
do_test unmanaged-stop-1 "cl#5155 - Block the stop of resources if any depending resource is unmanaged "
do_test unmanaged-stop-2 "cl#5155 - Block the stop of resources if the first resource in a mandatory stop order is unmanaged "
do_test unmanaged-stop-3 "cl#5155 - Block the stop of resources if any depending resource in a group is unmanaged "
do_test unmanaged-stop-4 "cl#5155 - Block the stop of resources if any depending resource in the middle of a group is unmanaged "
do_test unmanaged-block-restart "Block restart of resources if any dependent resource in a group is unmanaged"
echo ""
do_test interleave-0 "Interleave (reference)"
do_test interleave-1 "coloc - not interleaved"
do_test interleave-2 "coloc - interleaved "
do_test interleave-3 "coloc - interleaved (2)"
do_test interleave-pseudo-stop "Interleaved clone during stonith"
do_test interleave-stop "Interleaved clone during stop"
do_test interleave-restart "Interleaved clone during dependancy restart"
echo ""
do_test notify-0 "Notify reference"
do_test notify-1 "Notify simple"
do_test notify-2 "Notify simple, confirm"
do_test notify-3 "Notify move, confirm"
do_test novell-239079 "Notification priority"
#do_test notify-2 "Notify - 764"
echo ""
do_test 594 "OSDL #594 - Unrunnable actions scheduled in transition"
do_test 662 "OSDL #662 - Two resources start on one node when incarnation_node_max = 1"
do_test 696 "OSDL #696 - CRM starts stonith RA without monitor"
do_test 726 "OSDL #726 - Attempting to schedule rsc_posic041_monitor_5000 _after_ a stop"
do_test 735 "OSDL #735 - Correctly detect that rsc_hadev1 is stopped on hadev3"
do_test 764 "OSDL #764 - Missing monitor op for DoFencing:child_DoFencing:1"
do_test 797 "OSDL #797 - Assert triggered: task_id_i > max_call_id"
do_test 829 "OSDL #829"
do_test 994 "OSDL #994 - Stopping the last resource in a resource group causes the entire group to be restarted"
do_test 994-2 "OSDL #994 - with a dependant resource"
do_test 1360 "OSDL #1360 - Clone stickiness"
do_test 1484 "OSDL #1484 - on_fail=stop"
do_test 1494 "OSDL #1494 - Clone stability"
do_test unrunnable-1 "Unrunnable"
do_test stonith-0 "Stonith loop - 1"
do_test stonith-1 "Stonith loop - 2"
do_test stonith-2 "Stonith loop - 3"
do_test stonith-3 "Stonith startup"
do_test stonith-4 "Stonith node state" --rc 4
do_test bug-1572-1 "Recovery of groups depending on master/slave"
do_test bug-1572-2 "Recovery of groups depending on master/slave when the master is never re-promoted"
do_test bug-1685 "Depends-on-master ordering"
do_test bug-1822 "Dont promote partially active groups"
do_test bug-pm-11 "New resource added to a m/s group"
do_test bug-pm-12 "Recover only the failed portion of a cloned group"
do_test bug-n-387749 "Don't shuffle clone instances"
do_test bug-n-385265 "Don't ignore the failure stickiness of group children - resource_idvscommon should stay stopped"
do_test bug-n-385265-2 "Ensure groups are migrated instead of remaining partially active on the current node"
do_test bug-lf-1920 "Correctly handle probes that find active resources"
do_test bnc-515172 "Location constraint with multiple expressions"
do_test colocate-primitive-with-clone "Optional colocation with a clone"
do_test use-after-free-merge "Use-after-free in native_merge_weights"
do_test bug-lf-2551 "STONITH ordering for stop"
do_test bug-lf-2606 "Stonith implies demote"
do_test bug-lf-2474 "Ensure resource op timeout takes precedence over op_defaults"
do_test bug-suse-707150 "Prevent vm-01 from starting due to colocation/ordering"
do_test bug-5014-A-start-B-start "Verify when A starts B starts using symmetrical=false"
do_test bug-5014-A-stop-B-started "Verify when A stops B does not stop if it has already started using symmetric=false"
do_test bug-5014-A-stopped-B-stopped "Verify when A is stopped and B has not started, B does not start before A using symmetric=false"
do_test bug-5014-CthenAthenB-C-stopped "Verify when C then A is symmetrical=true, A then B is symmetric=false, and C is stopped that nothing starts."
do_test bug-5014-CLONE-A-start-B-start "Verify when A starts B starts using clone resources with symmetric=false"
do_test bug-5014-CLONE-A-stop-B-started "Verify when A stops B does not stop if it has already started using clone resources with symmetric=false."
do_test bug-5014-GROUP-A-start-B-start "Verify when A starts B starts when using group resources with symmetric=false."
do_test bug-5014-GROUP-A-stopped-B-started "Verify when A stops B does not stop if it has already started using group resources with symmetric=false."
do_test bug-5014-GROUP-A-stopped-B-stopped "Verify when A is stopped and B has not started, B does not start before A using group resources with symmetric=false."
do_test bug-5014-ordered-set-symmetrical-false "Verify ordered sets work with symmetrical=false"
do_test bug-5014-ordered-set-symmetrical-true "Verify ordered sets work with symmetrical=true"
do_test bug-5007-masterslave_colocation "Verify use of colocation scores other than INFINITY and -INFINITY work on multi-state resources."
do_test bug-5038 "Prevent restart of anonymous clones when clone-max decreases"
do_test bug-5025-1 "Automatically clean up failcount after resource config change with reload"
do_test bug-5025-2 "Make sure clear failcount action isn't set when config does not change."
do_test bug-5025-3 "Automatically clean up failcount after resource config change with restart"
do_test bug-5025-4 "Clear failcount when last failure is a start op and rsc attributes changed."
do_test failcount "Ensure failcounts are correctly expired"
do_test failcount-block "Ensure failcounts are not expired when on-fail=block is present"
do_test monitor-onfail-restart "bug-5058 - Monitor failure with on-fail set to restart"
do_test monitor-onfail-stop "bug-5058 - Monitor failure wiht on-fail set to stop"
do_test bug-5059 "No need to restart p_stateful1:*"
do_test bug-5069-op-enabled "Test on-fail=ignore with failure when monitor is enabled."
do_test bug-5069-op-disabled "Test on-fail-ignore with failure when monitor is disabled."
do_test obsolete-lrm-resource "cl#5115 - Do not use obsolete lrm_resource sections"
do_test expire-non-blocked-failure "Ignore failure-timeout only if the failed operation has on-fail=block"
do_test ignore_stonith_rsc_order1 "cl#5056- Ignore order constraint between stonith and non-stonith rsc."
do_test ignore_stonith_rsc_order2 "cl#5056- Ignore order constraint with group rsc containing mixed stonith and non-stonith."
do_test ignore_stonith_rsc_order3 "cl#5056- Ignore order constraint, stonith clone and mixed group"
do_test ignore_stonith_rsc_order4 "cl#5056- Ignore order constraint, stonith clone and clone with nested mixed group"
do_test honor_stonith_rsc_order1 "cl#5056- Honor order constraint, stonith clone and pure stonith group(single rsc)."
do_test honor_stonith_rsc_order2 "cl#5056- Honor order constraint, stonith clone and pure stonith group(multiple rsc)"
do_test honor_stonith_rsc_order3 "cl#5056- Honor order constraint, stonith clones with nested pure stonith group."
do_test honor_stonith_rsc_order4 "cl#5056- Honor order constraint, between two native stonith rscs."
do_test probe-timeout "cl#5099 - Default probe timeout"
echo ""
do_test systemhealth1 "System Health () #1"
do_test systemhealth2 "System Health () #2"
do_test systemhealth3 "System Health () #3"
do_test systemhealthn1 "System Health (None) #1"
do_test systemhealthn2 "System Health (None) #2"
do_test systemhealthn3 "System Health (None) #3"
do_test systemhealthm1 "System Health (Migrate On Red) #1"
do_test systemhealthm2 "System Health (Migrate On Red) #2"
do_test systemhealthm3 "System Health (Migrate On Red) #3"
do_test systemhealtho1 "System Health (Only Green) #1"
do_test systemhealtho2 "System Health (Only Green) #2"
do_test systemhealtho3 "System Health (Only Green) #3"
do_test systemhealthp1 "System Health (Progessive) #1"
do_test systemhealthp2 "System Health (Progessive) #2"
do_test systemhealthp3 "System Health (Progessive) #3"
echo ""
do_test utilization "Placement Strategy - utilization"
do_test minimal "Placement Strategy - minimal"
do_test balanced "Placement Strategy - balanced"
echo ""
do_test placement-stickiness "Optimized Placement Strategy - stickiness"
do_test placement-priority "Optimized Placement Strategy - priority"
do_test placement-location "Optimized Placement Strategy - location"
do_test placement-capacity "Optimized Placement Strategy - capacity"
echo ""
do_test utilization-order1 "Utilization Order - Simple"
do_test utilization-order2 "Utilization Order - Complex"
do_test utilization-order3 "Utilization Order - Migrate"
do_test utilization-order4 "Utilization Order - Live Mirgration (bnc#695440)"
do_test utilization-shuffle "Don't displace prmExPostgreSQLDB2 on act2, Start prmExPostgreSQLDB1 on act3"
do_test load-stopped-loop "Avoid transition loop due to load_stopped (cl#5044)"
echo ""
do_test reprobe-target_rc "Ensure correct target_rc for reprobe of inactive resources"
do_test node-maintenance-1 "cl#5128 - Node maintenance"
do_test node-maintenance-2 "cl#5128 - Node maintenance (coming out of maintenance mode)"
do_test rsc-maintenance "Per-resource maintenance"
echo ""
do_test not-installed-agent "The resource agent is missing"
do_test not-installed-tools "Something the resource agent needs is missing"
echo ""
do_test stopped-monitor-00 "Stopped Monitor - initial start"
do_test stopped-monitor-01 "Stopped Monitor - failed started"
do_test stopped-monitor-02 "Stopped Monitor - started multi-up"
do_test stopped-monitor-03 "Stopped Monitor - stop started"
do_test stopped-monitor-04 "Stopped Monitor - failed stop"
do_test stopped-monitor-05 "Stopped Monitor - start unmanaged"
do_test stopped-monitor-06 "Stopped Monitor - unmanaged multi-up"
do_test stopped-monitor-07 "Stopped Monitor - start unmanaged multi-up"
do_test stopped-monitor-08 "Stopped Monitor - migrate"
do_test stopped-monitor-09 "Stopped Monitor - unmanage started"
do_test stopped-monitor-10 "Stopped Monitor - unmanaged started multi-up"
do_test stopped-monitor-11 "Stopped Monitor - stop unmanaged started"
do_test stopped-monitor-12 "Stopped Monitor - unmanaged started multi-up (targer-role="Stopped")"
do_test stopped-monitor-20 "Stopped Monitor - initial stop"
do_test stopped-monitor-21 "Stopped Monitor - stopped single-up"
do_test stopped-monitor-22 "Stopped Monitor - stopped multi-up"
do_test stopped-monitor-23 "Stopped Monitor - start stopped"
do_test stopped-monitor-24 "Stopped Monitor - unmanage stopped"
do_test stopped-monitor-25 "Stopped Monitor - unmanaged stopped multi-up"
do_test stopped-monitor-26 "Stopped Monitor - start unmanaged stopped"
do_test stopped-monitor-27 "Stopped Monitor - unmanaged stopped multi-up (target-role="Started")"
do_test stopped-monitor-30 "Stopped Monitor - new node started"
do_test stopped-monitor-31 "Stopped Monitor - new node stopped"
echo""
do_test ticket-primitive-1 "Ticket - Primitive (loss-policy=stop, initial)"
do_test ticket-primitive-2 "Ticket - Primitive (loss-policy=stop, granted)"
do_test ticket-primitive-3 "Ticket - Primitive (loss-policy-stop, revoked)"
do_test ticket-primitive-4 "Ticket - Primitive (loss-policy=demote, initial)"
do_test ticket-primitive-5 "Ticket - Primitive (loss-policy=demote, granted)"
do_test ticket-primitive-6 "Ticket - Primitive (loss-policy=demote, revoked)"
do_test ticket-primitive-7 "Ticket - Primitive (loss-policy=fence, initial)"
do_test ticket-primitive-8 "Ticket - Primitive (loss-policy=fence, granted)"
do_test ticket-primitive-9 "Ticket - Primitive (loss-policy=fence, revoked)"
do_test ticket-primitive-10 "Ticket - Primitive (loss-policy=freeze, initial)"
do_test ticket-primitive-11 "Ticket - Primitive (loss-policy=freeze, granted)"
do_test ticket-primitive-12 "Ticket - Primitive (loss-policy=freeze, revoked)"
do_test ticket-primitive-13 "Ticket - Primitive (loss-policy=stop, standby, granted)"
do_test ticket-primitive-14 "Ticket - Primitive (loss-policy=stop, granted, standby)"
do_test ticket-primitive-15 "Ticket - Primitive (loss-policy=stop, standby, revoked)"
do_test ticket-primitive-16 "Ticket - Primitive (loss-policy=demote, standby, granted)"
do_test ticket-primitive-17 "Ticket - Primitive (loss-policy=demote, granted, standby)"
do_test ticket-primitive-18 "Ticket - Primitive (loss-policy=demote, standby, revoked)"
do_test ticket-primitive-19 "Ticket - Primitive (loss-policy=fence, standby, granted)"
do_test ticket-primitive-20 "Ticket - Primitive (loss-policy=fence, granted, standby)"
do_test ticket-primitive-21 "Ticket - Primitive (loss-policy=fence, standby, revoked)"
do_test ticket-primitive-22 "Ticket - Primitive (loss-policy=freeze, standby, granted)"
do_test ticket-primitive-23 "Ticket - Primitive (loss-policy=freeze, granted, standby)"
do_test ticket-primitive-24 "Ticket - Primitive (loss-policy=freeze, standby, revoked)"
echo""
do_test ticket-group-1 "Ticket - Group (loss-policy=stop, initial)"
do_test ticket-group-2 "Ticket - Group (loss-policy=stop, granted)"
do_test ticket-group-3 "Ticket - Group (loss-policy-stop, revoked)"
do_test ticket-group-4 "Ticket - Group (loss-policy=demote, initial)"
do_test ticket-group-5 "Ticket - Group (loss-policy=demote, granted)"
do_test ticket-group-6 "Ticket - Group (loss-policy=demote, revoked)"
do_test ticket-group-7 "Ticket - Group (loss-policy=fence, initial)"
do_test ticket-group-8 "Ticket - Group (loss-policy=fence, granted)"
do_test ticket-group-9 "Ticket - Group (loss-policy=fence, revoked)"
do_test ticket-group-10 "Ticket - Group (loss-policy=freeze, initial)"
do_test ticket-group-11 "Ticket - Group (loss-policy=freeze, granted)"
do_test ticket-group-12 "Ticket - Group (loss-policy=freeze, revoked)"
do_test ticket-group-13 "Ticket - Group (loss-policy=stop, standby, granted)"
do_test ticket-group-14 "Ticket - Group (loss-policy=stop, granted, standby)"
do_test ticket-group-15 "Ticket - Group (loss-policy=stop, standby, revoked)"
do_test ticket-group-16 "Ticket - Group (loss-policy=demote, standby, granted)"
do_test ticket-group-17 "Ticket - Group (loss-policy=demote, granted, standby)"
do_test ticket-group-18 "Ticket - Group (loss-policy=demote, standby, revoked)"
do_test ticket-group-19 "Ticket - Group (loss-policy=fence, standby, granted)"
do_test ticket-group-20 "Ticket - Group (loss-policy=fence, granted, standby)"
do_test ticket-group-21 "Ticket - Group (loss-policy=fence, standby, revoked)"
do_test ticket-group-22 "Ticket - Group (loss-policy=freeze, standby, granted)"
do_test ticket-group-23 "Ticket - Group (loss-policy=freeze, granted, standby)"
do_test ticket-group-24 "Ticket - Group (loss-policy=freeze, standby, revoked)"
echo""
do_test ticket-clone-1 "Ticket - Clone (loss-policy=stop, initial)"
do_test ticket-clone-2 "Ticket - Clone (loss-policy=stop, granted)"
do_test ticket-clone-3 "Ticket - Clone (loss-policy-stop, revoked)"
do_test ticket-clone-4 "Ticket - Clone (loss-policy=demote, initial)"
do_test ticket-clone-5 "Ticket - Clone (loss-policy=demote, granted)"
do_test ticket-clone-6 "Ticket - Clone (loss-policy=demote, revoked)"
do_test ticket-clone-7 "Ticket - Clone (loss-policy=fence, initial)"
do_test ticket-clone-8 "Ticket - Clone (loss-policy=fence, granted)"
do_test ticket-clone-9 "Ticket - Clone (loss-policy=fence, revoked)"
do_test ticket-clone-10 "Ticket - Clone (loss-policy=freeze, initial)"
do_test ticket-clone-11 "Ticket - Clone (loss-policy=freeze, granted)"
do_test ticket-clone-12 "Ticket - Clone (loss-policy=freeze, revoked)"
do_test ticket-clone-13 "Ticket - Clone (loss-policy=stop, standby, granted)"
do_test ticket-clone-14 "Ticket - Clone (loss-policy=stop, granted, standby)"
do_test ticket-clone-15 "Ticket - Clone (loss-policy=stop, standby, revoked)"
do_test ticket-clone-16 "Ticket - Clone (loss-policy=demote, standby, granted)"
do_test ticket-clone-17 "Ticket - Clone (loss-policy=demote, granted, standby)"
do_test ticket-clone-18 "Ticket - Clone (loss-policy=demote, standby, revoked)"
do_test ticket-clone-19 "Ticket - Clone (loss-policy=fence, standby, granted)"
do_test ticket-clone-20 "Ticket - Clone (loss-policy=fence, granted, standby)"
do_test ticket-clone-21 "Ticket - Clone (loss-policy=fence, standby, revoked)"
do_test ticket-clone-22 "Ticket - Clone (loss-policy=freeze, standby, granted)"
do_test ticket-clone-23 "Ticket - Clone (loss-policy=freeze, granted, standby)"
do_test ticket-clone-24 "Ticket - Clone (loss-policy=freeze, standby, revoked)"
echo""
do_test ticket-master-1 "Ticket - Master (loss-policy=stop, initial)"
do_test ticket-master-2 "Ticket - Master (loss-policy=stop, granted)"
do_test ticket-master-3 "Ticket - Master (loss-policy-stop, revoked)"
do_test ticket-master-4 "Ticket - Master (loss-policy=demote, initial)"
do_test ticket-master-5 "Ticket - Master (loss-policy=demote, granted)"
do_test ticket-master-6 "Ticket - Master (loss-policy=demote, revoked)"
do_test ticket-master-7 "Ticket - Master (loss-policy=fence, initial)"
do_test ticket-master-8 "Ticket - Master (loss-policy=fence, granted)"
do_test ticket-master-9 "Ticket - Master (loss-policy=fence, revoked)"
do_test ticket-master-10 "Ticket - Master (loss-policy=freeze, initial)"
do_test ticket-master-11 "Ticket - Master (loss-policy=freeze, granted)"
do_test ticket-master-12 "Ticket - Master (loss-policy=freeze, revoked)"
do_test ticket-master-13 "Ticket - Master (loss-policy=stop, standby, granted)"
do_test ticket-master-14 "Ticket - Master (loss-policy=stop, granted, standby)"
do_test ticket-master-15 "Ticket - Master (loss-policy=stop, standby, revoked)"
do_test ticket-master-16 "Ticket - Master (loss-policy=demote, standby, granted)"
do_test ticket-master-17 "Ticket - Master (loss-policy=demote, granted, standby)"
do_test ticket-master-18 "Ticket - Master (loss-policy=demote, standby, revoked)"
do_test ticket-master-19 "Ticket - Master (loss-policy=fence, standby, granted)"
do_test ticket-master-20 "Ticket - Master (loss-policy=fence, granted, standby)"
do_test ticket-master-21 "Ticket - Master (loss-policy=fence, standby, revoked)"
do_test ticket-master-22 "Ticket - Master (loss-policy=freeze, standby, granted)"
do_test ticket-master-23 "Ticket - Master (loss-policy=freeze, granted, standby)"
do_test ticket-master-24 "Ticket - Master (loss-policy=freeze, standby, revoked)"
echo ""
do_test ticket-rsc-sets-1 "Ticket - Resource sets (1 ticket, initial)"
do_test ticket-rsc-sets-2 "Ticket - Resource sets (1 ticket, granted)"
do_test ticket-rsc-sets-3 "Ticket - Resource sets (1 ticket, revoked)"
do_test ticket-rsc-sets-4 "Ticket - Resource sets (2 tickets, initial)"
do_test ticket-rsc-sets-5 "Ticket - Resource sets (2 tickets, granted)"
do_test ticket-rsc-sets-6 "Ticket - Resource sets (2 tickets, granted)"
do_test ticket-rsc-sets-7 "Ticket - Resource sets (2 tickets, revoked)"
do_test ticket-rsc-sets-8 "Ticket - Resource sets (1 ticket, standby, granted)"
do_test ticket-rsc-sets-9 "Ticket - Resource sets (1 ticket, granted, standby)"
do_test ticket-rsc-sets-10 "Ticket - Resource sets (1 ticket, standby, revoked)"
do_test ticket-rsc-sets-11 "Ticket - Resource sets (2 tickets, standby, granted)"
do_test ticket-rsc-sets-12 "Ticket - Resource sets (2 tickets, standby, granted)"
do_test ticket-rsc-sets-13 "Ticket - Resource sets (2 tickets, granted, standby)"
do_test ticket-rsc-sets-14 "Ticket - Resource sets (2 tickets, standby, revoked)"
do_test cluster-specific-params "Cluster-specific instance attributes based on rules"
do_test site-specific-params "Site-specific instance attributes based on rules"
echo ""
do_test template-1 "Template - 1"
do_test template-2 "Template - 2"
do_test template-3 "Template - 3 (merge operations)"
do_test template-coloc-1 "Template - Colocation 1"
do_test template-coloc-2 "Template - Colocation 2"
do_test template-coloc-3 "Template - Colocation 3"
do_test template-order-1 "Template - Order 1"
do_test template-order-2 "Template - Order 2"
do_test template-order-3 "Template - Order 3"
do_test template-ticket "Template - Ticket"
do_test template-rsc-sets-1 "Template - Resource Sets 1"
do_test template-rsc-sets-2 "Template - Resource Sets 2"
do_test template-rsc-sets-3 "Template - Resource Sets 3"
do_test template-rsc-sets-4 "Template - Resource Sets 4"
do_test template-clone-primitive "Cloned primitive from template"
do_test template-clone-group "Cloned group from template"
do_test location-sets-templates "Resource sets and templates - Location"
do_test tags-coloc-order-1 "Tags - Colocation and Order (Simple)"
do_test tags-coloc-order-2 "Tags - Colocation and Order (Resource Sets with Templates)"
do_test tags-location "Tags - Location"
do_test tags-ticket "Tags - Ticket"
echo ""
do_test container-1 "Container - initial"
do_test container-2 "Container - monitor failed"
do_test container-3 "Container - stop failed"
do_test container-4 "Container - reached migration-threshold"
do_test container-group-1 "Container in group - initial"
do_test container-group-2 "Container in group - monitor failed"
do_test container-group-3 "Container in group - stop failed"
do_test container-group-4 "Container in group - reached migration-threshold"
do_test container-is-remote-node "Place resource within container when container is remote-node"
do_test bug-rh-1097457 "Kill user defined container/contents ordering"
echo ""
do_test whitebox-fail1 "Fail whitebox container rsc."
do_test whitebox-fail2 "Fail whitebox container rsc lrmd connection."
do_test whitebox-fail3 "Failed containers should not run nested on remote nodes."
do_test whitebox-start "Start whitebox container with resources assigned to it"
do_test whitebox-stop "Stop whitebox container with resources assigned to it"
do_test whitebox-move "Move whitebox container with resources assigned to it"
do_test whitebox-asymmetric "Verify connection rsc opts-in based on container resource"
do_test whitebox-ms-ordering "Verify promote/demote can not occur before connection is established"
do_test whitebox-orphaned "Properly shutdown orphaned whitebox container"
do_test whitebox-orphan-ms "Properly tear down orphan ms resources on remote-nodes"
do_test whitebox-unexpectedly-running "Recover container nodes the cluster did not start."
do_test whitebox-migrate1 "Migrate both container and connection resource"
echo ""
do_test remote-startup-probes "Baremetal remote-node startup probes"
do_test remote-startup "Startup a newly discovered remote-nodes with no status."
do_test remote-fence-unclean "Fence unclean baremetal remote-node"
do_test remote-fence-unclean2 "Fence baremetal remote-node after cluster node fails and connection can not be recovered"
do_test remote-move "Move remote-node connection resource"
do_test remote-disable "Disable a baremetal remote-node"
do_test remote-orphaned "Properly shutdown orphaned connection resource"
do_test remote-recover "Recover connection resource after cluster-node fails."
do_test remote-stale-node-entry "Make sure we properly handle leftover remote-node entries in the node section"
do_test remote-partial-migrate "Make sure partial migrations are handled before ops on the remote node."
do_test remote-partial-migrate2 "Make sure partial migration target is prefered for remote connection."
do_test remote-recover-fail "Make sure start failure causes fencing if rsc are active on remote."
do_test remote-start-fail "Make sure a start failure does not result in fencing if no active resources are on remote."
do_test remote-unclean2 "Make monitor failure always results in fencing, even if no rsc are active on remote."
echo ""
do_test resource-discovery "Exercises resource-discovery location constraint option."
do_test rsc-discovery-per-node "Disable resource discovery per node"
echo ""
test_results
diff --git a/pengine/test10/clone-require-all-1.dot b/pengine/test10/clone-require-all-1.dot
new file mode 100644
index 0000000000..9856969d7f
--- /dev/null
+++ b/pengine/test10/clone-require-all-1.dot
@@ -0,0 +1,15 @@
+ digraph "g" {
+"B-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"B-clone_start_0" -> "B-clone_running_0" [ style = bold]
+"B-clone_start_0" -> "B:1_start_0 rhel7-auto4" [ style = bold]
+"B-clone_start_0" -> "B_start_0 rhel7-auto3" [ style = bold]
+"B-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"B:1_monitor_10000 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"B:1_start_0 rhel7-auto4" -> "B-clone_running_0" [ style = bold]
+"B:1_start_0 rhel7-auto4" -> "B:1_monitor_10000 rhel7-auto4" [ style = bold]
+"B:1_start_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"B_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"B_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = bold]
+"B_start_0 rhel7-auto3" -> "B_monitor_10000 rhel7-auto3" [ style = bold]
+"B_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+}
diff --git a/pengine/test10/clone-require-all-1.exp b/pengine/test10/clone-require-all-1.exp
new file mode 100644
index 0000000000..c2d1abde74
--- /dev/null
+++ b/pengine/test10/clone-require-all-1.exp
@@ -0,0 +1,80 @@
+<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY" transition_id="0">
+ <synapse id="0">
+ <action_set>
+ <rsc_op id="22" operation="monitor" operation_key="B_monitor_10000" internal_operation_key="B:0_monitor_10000" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="21" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="1">
+ <action_set>
+ <rsc_op id="21" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="25" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="2">
+ <action_set>
+ <rsc_op id="24" operation="monitor" operation_key="B:1_monitor_10000" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="B" long-id="B:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="23" operation="start" operation_key="B:1_start_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="3">
+ <action_set>
+ <rsc_op id="23" operation="start" operation_key="B:1_start_0" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="B" long-id="B:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="25" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="4" priority="1000000">
+ <action_set>
+ <pseudo_event id="26" operation="running" operation_key="B-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="21" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="23" operation="start" operation_key="B:1_start_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="25" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="5">
+ <action_set>
+ <pseudo_event id="25" operation="start" operation_key="B-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs/>
+ </synapse>
+</transition_graph>
diff --git a/pengine/test10/clone-require-all-1.scores b/pengine/test10/clone-require-all-1.scores
new file mode 100644
index 0000000000..fe3ce21e89
--- /dev/null
+++ b/pengine/test10/clone-require-all-1.scores
@@ -0,0 +1,77 @@
+Allocation scores:
+clone_color: A-clone allocation score on rhel7-auto1: 0
+clone_color: A-clone allocation score on rhel7-auto2: 0
+clone_color: A-clone allocation score on rhel7-auto3: -INFINITY
+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto1: 1
+clone_color: A:0 allocation score on rhel7-auto2: 0
+clone_color: A:0 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto1: 0
+clone_color: A:1 allocation score on rhel7-auto2: 1
+clone_color: A:1 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto1: 0
+clone_color: A:2 allocation score on rhel7-auto2: 0
+clone_color: A:2 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto1: 0
+clone_color: A:3 allocation score on rhel7-auto2: 0
+clone_color: A:3 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto1: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto3: 0
+clone_color: B-clone allocation score on rhel7-auto4: 0
+clone_color: B:0 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:0 allocation score on rhel7-auto3: 0
+clone_color: B:0 allocation score on rhel7-auto4: 0
+clone_color: B:1 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:1 allocation score on rhel7-auto3: 0
+clone_color: B:1 allocation score on rhel7-auto4: 0
+clone_color: B:2 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:2 allocation score on rhel7-auto3: 0
+clone_color: B:2 allocation score on rhel7-auto4: 0
+clone_color: B:3 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:3 allocation score on rhel7-auto3: 0
+clone_color: B:3 allocation score on rhel7-auto4: 0
+native_color: A:0 allocation score on rhel7-auto1: 1
+native_color: A:0 allocation score on rhel7-auto2: -INFINITY
+native_color: A:0 allocation score on rhel7-auto3: -INFINITY
+native_color: A:0 allocation score on rhel7-auto4: -INFINITY
+native_color: A:1 allocation score on rhel7-auto1: 0
+native_color: A:1 allocation score on rhel7-auto2: 1
+native_color: A:1 allocation score on rhel7-auto3: -INFINITY
+native_color: A:1 allocation score on rhel7-auto4: -INFINITY
+native_color: A:2 allocation score on rhel7-auto1: -INFINITY
+native_color: A:2 allocation score on rhel7-auto2: -INFINITY
+native_color: A:2 allocation score on rhel7-auto3: -INFINITY
+native_color: A:2 allocation score on rhel7-auto4: -INFINITY
+native_color: A:3 allocation score on rhel7-auto1: -INFINITY
+native_color: A:3 allocation score on rhel7-auto2: -INFINITY
+native_color: A:3 allocation score on rhel7-auto3: -INFINITY
+native_color: A:3 allocation score on rhel7-auto4: -INFINITY
+native_color: B:0 allocation score on rhel7-auto1: -INFINITY
+native_color: B:0 allocation score on rhel7-auto2: -INFINITY
+native_color: B:0 allocation score on rhel7-auto3: 0
+native_color: B:0 allocation score on rhel7-auto4: 0
+native_color: B:1 allocation score on rhel7-auto1: -INFINITY
+native_color: B:1 allocation score on rhel7-auto2: -INFINITY
+native_color: B:1 allocation score on rhel7-auto3: -INFINITY
+native_color: B:1 allocation score on rhel7-auto4: 0
+native_color: B:2 allocation score on rhel7-auto1: -INFINITY
+native_color: B:2 allocation score on rhel7-auto2: -INFINITY
+native_color: B:2 allocation score on rhel7-auto3: -INFINITY
+native_color: B:2 allocation score on rhel7-auto4: -INFINITY
+native_color: B:3 allocation score on rhel7-auto1: -INFINITY
+native_color: B:3 allocation score on rhel7-auto2: -INFINITY
+native_color: B:3 allocation score on rhel7-auto3: -INFINITY
+native_color: B:3 allocation score on rhel7-auto4: -INFINITY
+native_color: shooter allocation score on rhel7-auto1: 0
+native_color: shooter allocation score on rhel7-auto2: 0
+native_color: shooter allocation score on rhel7-auto3: 0
+native_color: shooter allocation score on rhel7-auto4: 0
diff --git a/pengine/test10/clone-require-all-1.summary b/pengine/test10/clone-require-all-1.summary
new file mode 100644
index 0000000000..2cbb97dce3
--- /dev/null
+++ b/pengine/test10/clone-require-all-1.summary
@@ -0,0 +1,34 @@
+
+Current cluster status:
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto1 rhel7-auto2 ]
+ Stopped: [ rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+Transition Summary:
+ * Start B:0 (rhel7-auto3)
+ * Start B:1 (rhel7-auto4)
+
+Executing cluster transition:
+ * Pseudo action: B-clone_start_0
+ * Resource action: B start on rhel7-auto3
+ * Resource action: B start on rhel7-auto4
+ * Pseudo action: B-clone_running_0
+ * Resource action: B monitor=10000 on rhel7-auto3
+ * Resource action: B monitor=10000 on rhel7-auto4
+
+Revised cluster status:
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto1 rhel7-auto2 ]
+ Stopped: [ rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Started: [ rhel7-auto3 rhel7-auto4 ]
+ Stopped: [ rhel7-auto1 rhel7-auto2 ]
+
diff --git a/pengine/test10/clone-require-all-1.xml b/pengine/test10/clone-require-all-1.xml
new file mode 100644
index 0000000000..724fac1e28
--- /dev/null
+++ b/pengine/test10/clone-require-all-1.xml
@@ -0,0 +1,152 @@
+<cib crm_feature_set="3.0.9" validate-with="pacemaker-2.3" epoch="17" num_updates="2" admin_epoch="0" cib-last-written="Mon Jan 5 17:40:52 2015" have-quorum="1" dc-uuid="2">
+ <configuration>
+ <crm_config>
+ <cluster_property_set id="cib-bootstrap-options">
+ <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
+ <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.12-a14efad"/>
+ <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
+ <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="phd"/>
+ </cluster_property_set>
+ </crm_config>
+ <nodes>
+ <node id="1" uname="rhel7-auto1"/>
+ <node id="2" uname="rhel7-auto2"/>
+ <node id="3" uname="rhel7-auto3"/>
+ <node id="4" uname="rhel7-auto4"/>
+ </nodes>
+ <resources>
+ <primitive class="stonith" id="shooter" type="fence_xvm">
+ <instance_attributes id="shooter-instance_attributes"/>
+ <operations>
+ <op id="shooter-monitor-interval-60s" interval="60s" name="monitor"/>
+ </operations>
+ </primitive>
+ <clone id="A-clone">
+ <primitive class="ocf" id="A" provider="heartbeat" type="Dummy">
+ <instance_attributes id="A-instance_attributes"/>
+ <operations>
+ <op id="A-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="A-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="A-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="A-clone-meta">
+ <nvpair id="A-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ <clone id="B-clone">
+ <primitive class="ocf" id="B" provider="heartbeat" type="Dummy">
+ <instance_attributes id="B-instance_attributes"/>
+ <operations>
+ <op id="B-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="B-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="B-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="B-clone-meta">
+ <nvpair id="B-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ </resources>
+ <constraints>
+ <rsc_location id="location-A-clone-rhel7-auto3--INFINITY" node="rhel7-auto3" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-A-clone-rhel7-auto4--INFINITY" node="rhel7-auto4" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-B-clone-rhel7-auto1--INFINITY" node="rhel7-auto1" rsc="B-clone" score="-INFINITY"/>
+ <rsc_location id="location-B-clone-rhel7-auto2--INFINITY" node="rhel7-auto2" rsc="B-clone" score="-INFINITY"/>
+ <rsc_order require-all="false" first="A-clone" first-action="start" id="order-A-clone-B-clone-mandatory" then="B-clone" then-action="start"/>
+ </constraints>
+ </configuration>
+ <status>
+ <node_state id="1" uname="rhel7-auto1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="1">
+ <instance_attributes id="status-1">
+ <nvpair id="status-1-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-1-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="1">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="6" rc-code="0" op-status="0" interval="0" last-run="1420497434" last-rc-change="1420497434" exec-time="84" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ <lrm_rsc_op id="shooter_monitor_60000" operation_key="shooter_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="7" rc-code="0" op-status="0" interval="60000" last-rc-change="1420497434" exec-time="62" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="17:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;17:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="12" rc-code="0" op-status="0" interval="0" last-run="1420497496" last-rc-change="1420497496" exec-time="21" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="18:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;18:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="13" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497496" exec-time="19" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="24:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;24:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497555" last-rc-change="1420497555" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="34:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;34:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497505" exec-time="24" queue-time="1" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="2" uname="rhel7-auto2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="2">
+ <instance_attributes id="status-2">
+ <nvpair id="status-2-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-2-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="2">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="14:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;14:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="10" rc-code="0" op-status="0" interval="0" last-run="1420497495" last-rc-change="1420497495" exec-time="23" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="15:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;15:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="11" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497495" exec-time="20" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497555" last-rc-change="1420497555" exec-time="27" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="21" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="3" uname="rhel7-auto3" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="3">
+ <instance_attributes id="status-3">
+ <nvpair id="status-3-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-3-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="3">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="22:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;22:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497546" last-rc-change="1420497546" exec-time="32" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="22:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;22:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497653" last-rc-change="1420497653" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="30:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;30:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="22" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="4" uname="rhel7-auto4" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="4">
+ <instance_attributes id="status-4">
+ <nvpair id="status-4-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-4-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="4">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497431" last-rc-change="1420497431" exec-time="987" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="23:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;23:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497545" last-rc-change="1420497545" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="24:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;24:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497652" last-rc-change="1420497652" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="32:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;32:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="28" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ </status>
+</cib>
diff --git a/pengine/test10/clone-require-all-2.dot b/pengine/test10/clone-require-all-2.dot
new file mode 100644
index 0000000000..4f830cec41
--- /dev/null
+++ b/pengine/test10/clone-require-all-2.dot
@@ -0,0 +1,42 @@
+ digraph "g" {
+"A-clone_running_0" [ style=dashed color="red" fontcolor="orange"]
+"A-clone_start_0" -> "A-clone_running_0" [ style = dashed]
+"A-clone_start_0" -> "A_start_0 <none>" [ style = dashed]
+"A-clone_start_0" [ style=dashed color="red" fontcolor="orange"]
+"A-clone_stop_0" -> "A-clone_stopped_0" [ style = bold]
+"A-clone_stop_0" -> "A_stop_0 rhel7-auto1" [ style = bold]
+"A-clone_stop_0" -> "A_stop_0 rhel7-auto2" [ style = bold]
+"A-clone_stop_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_stopped_0" -> "A-clone_start_0" [ style = dashed]
+"A-clone_stopped_0" [ style=bold color="green" fontcolor="orange"]
+"A_start_0 <none>" -> "A-clone_running_0" [ style = dashed]
+"A_start_0 <none>" [ style=dashed color="red" fontcolor="black"]
+"A_stop_0 rhel7-auto1" -> "A-clone_stopped_0" [ style = bold]
+"A_stop_0 rhel7-auto1" -> "A_start_0 <none>" [ style = dashed]
+"A_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold]
+"A_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"A_stop_0 rhel7-auto2" -> "A-clone_stopped_0" [ style = bold]
+"A_stop_0 rhel7-auto2" -> "A_start_0 <none>" [ style = dashed]
+"A_stop_0 rhel7-auto2" -> "all_stopped" [ style = bold]
+"A_stop_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"]
+"B-clone_running_0" [ style=dashed color="red" fontcolor="orange"]
+"B-clone_start_0" -> "B-clone_running_0" [ style = dashed]
+"B-clone_start_0" -> "B:1_start_0 rhel7-auto3" [ style = dashed]
+"B-clone_start_0" -> "B_start_0 rhel7-auto4" [ style = dashed]
+"B-clone_start_0" [ style=dashed color="red" fontcolor="orange"]
+"B:1_monitor_10000 rhel7-auto3" [ style=dashed color="red" fontcolor="black"]
+"B:1_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = dashed]
+"B:1_start_0 rhel7-auto3" -> "B:1_monitor_10000 rhel7-auto3" [ style = dashed]
+"B:1_start_0 rhel7-auto3" [ style=dashed color="red" fontcolor="black"]
+"B_monitor_10000 rhel7-auto4" [ style=dashed color="red" fontcolor="black"]
+"B_start_0 rhel7-auto4" -> "B-clone_running_0" [ style = dashed]
+"B_start_0 rhel7-auto4" -> "B_monitor_10000 rhel7-auto4" [ style = dashed]
+"B_start_0 rhel7-auto4" [ style=dashed color="red" fontcolor="black"]
+"all_stopped" [ style=bold color="green" fontcolor="orange"]
+"shooter_monitor_60000 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"shooter_start_0 rhel7-auto3" -> "shooter_monitor_60000 rhel7-auto3" [ style = bold]
+"shooter_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"shooter_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold]
+"shooter_stop_0 rhel7-auto1" -> "shooter_start_0 rhel7-auto3" [ style = bold]
+"shooter_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+}
diff --git a/pengine/test10/clone-require-all-2.exp b/pengine/test10/clone-require-all-2.exp
new file mode 100644
index 0000000000..a5ad63feb5
--- /dev/null
+++ b/pengine/test10/clone-require-all-2.exp
@@ -0,0 +1,107 @@
+<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY" transition_id="0">
+ <synapse id="0">
+ <action_set>
+ <rsc_op id="13" operation="monitor" operation_key="shooter_monitor_60000" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="shooter" class="stonith" type="fence_xvm"/>
+ <attributes CRM_meta_interval="60000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="12" operation="start" operation_key="shooter_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="1">
+ <action_set>
+ <rsc_op id="12" operation="start" operation_key="shooter_start_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="shooter" class="stonith" type="fence_xvm"/>
+ <attributes CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="11" operation="stop" operation_key="shooter_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="2">
+ <action_set>
+ <rsc_op id="11" operation="stop" operation_key="shooter_stop_0" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="shooter" class="stonith" type="fence_xvm"/>
+ <attributes CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="3">
+ <action_set>
+ <rsc_op id="14" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="stop" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="18" operation="stop" operation_key="A-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="4">
+ <action_set>
+ <rsc_op id="15" operation="stop" operation_key="A_stop_0" internal_operation_key="A:1_stop_0" on_node="rhel7-auto2" on_node_uuid="2">
+ <primitive id="A" long-id="A:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="stop" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="18" operation="stop" operation_key="A-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="5" priority="1000000">
+ <action_set>
+ <pseudo_event id="19" operation="stopped" operation_key="A-clone_stopped_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="14" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="15" operation="stop" operation_key="A_stop_0" internal_operation_key="A:1_stop_0" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="18" operation="stop" operation_key="A-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="6">
+ <action_set>
+ <pseudo_event id="18" operation="stop" operation_key="A-clone_stop_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="7">
+ <action_set>
+ <pseudo_event id="5" operation="all_stopped" operation_key="all_stopped">
+ <attributes />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="11" operation="stop" operation_key="shooter_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="14" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="15" operation="stop" operation_key="A_stop_0" internal_operation_key="A:1_stop_0" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ </inputs>
+ </synapse>
+</transition_graph>
diff --git a/pengine/test10/clone-require-all-2.scores b/pengine/test10/clone-require-all-2.scores
new file mode 100644
index 0000000000..cdbf611ff5
--- /dev/null
+++ b/pengine/test10/clone-require-all-2.scores
@@ -0,0 +1,77 @@
+Allocation scores:
+clone_color: A-clone allocation score on rhel7-auto1: 0
+clone_color: A-clone allocation score on rhel7-auto2: 0
+clone_color: A-clone allocation score on rhel7-auto3: -INFINITY
+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto1: 1
+clone_color: A:0 allocation score on rhel7-auto2: 0
+clone_color: A:0 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto1: 0
+clone_color: A:1 allocation score on rhel7-auto2: 1
+clone_color: A:1 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto1: 0
+clone_color: A:2 allocation score on rhel7-auto2: 0
+clone_color: A:2 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto1: 0
+clone_color: A:3 allocation score on rhel7-auto2: 0
+clone_color: A:3 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto1: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto3: 0
+clone_color: B-clone allocation score on rhel7-auto4: 0
+clone_color: B:0 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:0 allocation score on rhel7-auto3: 0
+clone_color: B:0 allocation score on rhel7-auto4: 0
+clone_color: B:1 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:1 allocation score on rhel7-auto3: 0
+clone_color: B:1 allocation score on rhel7-auto4: 0
+clone_color: B:2 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:2 allocation score on rhel7-auto3: 0
+clone_color: B:2 allocation score on rhel7-auto4: 0
+clone_color: B:3 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:3 allocation score on rhel7-auto3: 0
+clone_color: B:3 allocation score on rhel7-auto4: 0
+native_color: A:0 allocation score on rhel7-auto1: -INFINITY
+native_color: A:0 allocation score on rhel7-auto2: -INFINITY
+native_color: A:0 allocation score on rhel7-auto3: -INFINITY
+native_color: A:0 allocation score on rhel7-auto4: -INFINITY
+native_color: A:1 allocation score on rhel7-auto1: -INFINITY
+native_color: A:1 allocation score on rhel7-auto2: -INFINITY
+native_color: A:1 allocation score on rhel7-auto3: -INFINITY
+native_color: A:1 allocation score on rhel7-auto4: -INFINITY
+native_color: A:2 allocation score on rhel7-auto1: -INFINITY
+native_color: A:2 allocation score on rhel7-auto2: -INFINITY
+native_color: A:2 allocation score on rhel7-auto3: -INFINITY
+native_color: A:2 allocation score on rhel7-auto4: -INFINITY
+native_color: A:3 allocation score on rhel7-auto1: -INFINITY
+native_color: A:3 allocation score on rhel7-auto2: -INFINITY
+native_color: A:3 allocation score on rhel7-auto3: -INFINITY
+native_color: A:3 allocation score on rhel7-auto4: -INFINITY
+native_color: B:0 allocation score on rhel7-auto1: -INFINITY
+native_color: B:0 allocation score on rhel7-auto2: -INFINITY
+native_color: B:0 allocation score on rhel7-auto3: 0
+native_color: B:0 allocation score on rhel7-auto4: 0
+native_color: B:1 allocation score on rhel7-auto1: -INFINITY
+native_color: B:1 allocation score on rhel7-auto2: -INFINITY
+native_color: B:1 allocation score on rhel7-auto3: 0
+native_color: B:1 allocation score on rhel7-auto4: -INFINITY
+native_color: B:2 allocation score on rhel7-auto1: -INFINITY
+native_color: B:2 allocation score on rhel7-auto2: -INFINITY
+native_color: B:2 allocation score on rhel7-auto3: -INFINITY
+native_color: B:2 allocation score on rhel7-auto4: -INFINITY
+native_color: B:3 allocation score on rhel7-auto1: -INFINITY
+native_color: B:3 allocation score on rhel7-auto2: -INFINITY
+native_color: B:3 allocation score on rhel7-auto3: -INFINITY
+native_color: B:3 allocation score on rhel7-auto4: -INFINITY
+native_color: shooter allocation score on rhel7-auto1: 0
+native_color: shooter allocation score on rhel7-auto2: 0
+native_color: shooter allocation score on rhel7-auto3: 0
+native_color: shooter allocation score on rhel7-auto4: 0
diff --git a/pengine/test10/clone-require-all-2.summary b/pengine/test10/clone-require-all-2.summary
new file mode 100644
index 0000000000..d4b2519247
--- /dev/null
+++ b/pengine/test10/clone-require-all-2.summary
@@ -0,0 +1,41 @@
+
+Current cluster status:
+Node rhel7-auto1 (1): standby
+Node rhel7-auto2 (2): standby
+Online: [ rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto1 rhel7-auto2 ]
+ Stopped: [ rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+Transition Summary:
+ * Move shooter (Started rhel7-auto1 -> rhel7-auto3)
+ * Stop A:0 (rhel7-auto1)
+ * Stop A:1 (rhel7-auto2)
+ * Start B:0 (rhel7-auto4 - blocked)
+ * Start B:1 (rhel7-auto3 - blocked)
+
+Executing cluster transition:
+ * Resource action: shooter stop on rhel7-auto1
+ * Pseudo action: A-clone_stop_0
+ * Resource action: shooter start on rhel7-auto3
+ * Resource action: A stop on rhel7-auto1
+ * Resource action: A stop on rhel7-auto2
+ * Pseudo action: A-clone_stopped_0
+ * Pseudo action: all_stopped
+ * Resource action: shooter monitor=60000 on rhel7-auto3
+
+Revised cluster status:
+Node rhel7-auto1 (1): standby
+Node rhel7-auto2 (2): standby
+Online: [ rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto3
+ Clone Set: A-clone [A]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
diff --git a/pengine/test10/clone-require-all-2.xml b/pengine/test10/clone-require-all-2.xml
new file mode 100644
index 0000000000..1fd9576626
--- /dev/null
+++ b/pengine/test10/clone-require-all-2.xml
@@ -0,0 +1,160 @@
+<cib crm_feature_set="3.0.9" validate-with="pacemaker-2.3" epoch="19" num_updates="0" admin_epoch="0" cib-last-written="Mon Jan 5 17:40:52 2015" have-quorum="1" dc-uuid="2">
+ <configuration>
+ <crm_config>
+ <cluster_property_set id="cib-bootstrap-options">
+ <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
+ <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.12-a14efad"/>
+ <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
+ <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="phd"/>
+ </cluster_property_set>
+ </crm_config>
+ <nodes>
+ <node id="1" uname="rhel7-auto1">
+ <instance_attributes id="nodes-1">
+ <nvpair id="nodes-1-standby" name="standby" value="on"/>
+ </instance_attributes>
+ </node>
+ <node id="2" uname="rhel7-auto2">
+ <instance_attributes id="nodes-2">
+ <nvpair id="nodes-2-standby" name="standby" value="on"/>
+ </instance_attributes>
+ </node>
+ <node id="3" uname="rhel7-auto3"/>
+ <node id="4" uname="rhel7-auto4"/>
+ </nodes>
+ <resources>
+ <primitive class="stonith" id="shooter" type="fence_xvm">
+ <instance_attributes id="shooter-instance_attributes"/>
+ <operations>
+ <op id="shooter-monitor-interval-60s" interval="60s" name="monitor"/>
+ </operations>
+ </primitive>
+ <clone id="A-clone">
+ <primitive class="ocf" id="A" provider="heartbeat" type="Dummy">
+ <instance_attributes id="A-instance_attributes"/>
+ <operations>
+ <op id="A-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="A-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="A-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="A-clone-meta">
+ <nvpair id="A-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ <clone id="B-clone">
+ <primitive class="ocf" id="B" provider="heartbeat" type="Dummy">
+ <instance_attributes id="B-instance_attributes"/>
+ <operations>
+ <op id="B-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="B-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="B-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="B-clone-meta">
+ <nvpair id="B-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ </resources>
+ <constraints>
+ <rsc_location id="location-A-clone-rhel7-auto3--INFINITY" node="rhel7-auto3" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-A-clone-rhel7-auto4--INFINITY" node="rhel7-auto4" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-B-clone-rhel7-auto1--INFINITY" node="rhel7-auto1" rsc="B-clone" score="-INFINITY"/>
+ <rsc_location id="location-B-clone-rhel7-auto2--INFINITY" node="rhel7-auto2" rsc="B-clone" score="-INFINITY"/>
+ <rsc_order require-all="false" first="A-clone" first-action="start" id="order-A-clone-B-clone-mandatory" then="B-clone" then-action="start"/>
+ </constraints>
+ </configuration>
+ <status>
+ <node_state id="1" uname="rhel7-auto1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="1">
+ <instance_attributes id="status-1">
+ <nvpair id="status-1-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-1-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="1">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="6" rc-code="0" op-status="0" interval="0" last-run="1420497434" last-rc-change="1420497434" exec-time="84" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ <lrm_rsc_op id="shooter_monitor_60000" operation_key="shooter_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="7" rc-code="0" op-status="0" interval="60000" last-rc-change="1420497434" exec-time="62" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="17:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;17:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="12" rc-code="0" op-status="0" interval="0" last-run="1420497496" last-rc-change="1420497496" exec-time="21" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="18:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;18:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="13" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497496" exec-time="19" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="24:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;24:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497555" last-rc-change="1420497555" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="34:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;34:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497505" exec-time="24" queue-time="1" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="2" uname="rhel7-auto2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="2">
+ <instance_attributes id="status-2">
+ <nvpair id="status-2-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-2-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="2">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="14:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;14:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="10" rc-code="0" op-status="0" interval="0" last-run="1420497495" last-rc-change="1420497495" exec-time="23" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="15:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;15:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="11" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497495" exec-time="20" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497555" last-rc-change="1420497555" exec-time="27" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="21" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="3" uname="rhel7-auto3" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="3">
+ <instance_attributes id="status-3">
+ <nvpair id="status-3-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-3-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="3">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="22:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;22:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497546" last-rc-change="1420497546" exec-time="32" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="22:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;22:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497653" last-rc-change="1420497653" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="30:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;30:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="22" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="4" uname="rhel7-auto4" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="4">
+ <instance_attributes id="status-4">
+ <nvpair id="status-4-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-4-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="4">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497431" last-rc-change="1420497431" exec-time="987" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="23:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;23:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497545" last-rc-change="1420497545" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="24:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;24:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497652" last-rc-change="1420497652" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="32:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;32:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="28" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ </status>
+</cib>
diff --git a/pengine/test10/clone-require-all-3.dot b/pengine/test10/clone-require-all-3.dot
new file mode 100644
index 0000000000..d93693d439
--- /dev/null
+++ b/pengine/test10/clone-require-all-3.dot
@@ -0,0 +1,57 @@
+ digraph "g" {
+"A-clone_running_0" [ style=dashed color="red" fontcolor="orange"]
+"A-clone_start_0" -> "A-clone_running_0" [ style = dashed]
+"A-clone_start_0" -> "A_start_0 <none>" [ style = dashed]
+"A-clone_start_0" [ style=dashed color="red" fontcolor="orange"]
+"A-clone_stop_0" -> "A-clone_stopped_0" [ style = bold]
+"A-clone_stop_0" -> "A_stop_0 rhel7-auto1" [ style = bold]
+"A-clone_stop_0" -> "A_stop_0 rhel7-auto2" [ style = bold]
+"A-clone_stop_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_stopped_0" -> "A-clone_start_0" [ style = dashed]
+"A-clone_stopped_0" [ style=bold color="green" fontcolor="orange"]
+"A_start_0 <none>" -> "A-clone_running_0" [ style = dashed]
+"A_start_0 <none>" [ style=dashed color="red" fontcolor="black"]
+"A_stop_0 rhel7-auto1" -> "A-clone_stopped_0" [ style = bold]
+"A_stop_0 rhel7-auto1" -> "A_start_0 <none>" [ style = dashed]
+"A_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold]
+"A_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"A_stop_0 rhel7-auto2" -> "A-clone_stopped_0" [ style = bold]
+"A_stop_0 rhel7-auto2" -> "A_start_0 <none>" [ style = dashed]
+"A_stop_0 rhel7-auto2" -> "all_stopped" [ style = bold]
+"A_stop_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"]
+"B-clone_running_0" [ style=dashed color="red" fontcolor="orange"]
+"B-clone_start_0" -> "B-clone_running_0" [ style = dashed]
+"B-clone_start_0" -> "B_start_0 rhel7-auto3" [ style = dashed]
+"B-clone_start_0" -> "B_start_0 rhel7-auto4" [ style = dashed]
+"B-clone_start_0" [ style=dashed color="red" fontcolor="orange"]
+"B-clone_stop_0" -> "B-clone_stopped_0" [ style = bold]
+"B-clone_stop_0" -> "B_stop_0 rhel7-auto3" [ style = bold]
+"B-clone_stop_0" -> "B_stop_0 rhel7-auto4" [ style = bold]
+"B-clone_stop_0" [ style=bold color="green" fontcolor="orange"]
+"B-clone_stopped_0" -> "A-clone_stop_0" [ style = bold]
+"B-clone_stopped_0" -> "B-clone_start_0" [ style = dashed]
+"B-clone_stopped_0" [ style=bold color="green" fontcolor="orange"]
+"B_monitor_10000 rhel7-auto3" [ style=dashed color="red" fontcolor="black"]
+"B_monitor_10000 rhel7-auto4" [ style=dashed color="red" fontcolor="black"]
+"B_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = dashed]
+"B_start_0 rhel7-auto3" -> "B_monitor_10000 rhel7-auto3" [ style = dashed]
+"B_start_0 rhel7-auto3" [ style=dashed color="red" fontcolor="black"]
+"B_start_0 rhel7-auto4" -> "B-clone_running_0" [ style = dashed]
+"B_start_0 rhel7-auto4" -> "B_monitor_10000 rhel7-auto4" [ style = dashed]
+"B_start_0 rhel7-auto4" [ style=dashed color="red" fontcolor="black"]
+"B_stop_0 rhel7-auto3" -> "B-clone_stopped_0" [ style = bold]
+"B_stop_0 rhel7-auto3" -> "B_start_0 rhel7-auto3" [ style = dashed]
+"B_stop_0 rhel7-auto3" -> "all_stopped" [ style = bold]
+"B_stop_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"B_stop_0 rhel7-auto4" -> "B-clone_stopped_0" [ style = bold]
+"B_stop_0 rhel7-auto4" -> "B_start_0 rhel7-auto4" [ style = dashed]
+"B_stop_0 rhel7-auto4" -> "all_stopped" [ style = bold]
+"B_stop_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"all_stopped" [ style=bold color="green" fontcolor="orange"]
+"shooter_monitor_60000 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"shooter_start_0 rhel7-auto3" -> "shooter_monitor_60000 rhel7-auto3" [ style = bold]
+"shooter_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"shooter_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold]
+"shooter_stop_0 rhel7-auto1" -> "shooter_start_0 rhel7-auto3" [ style = bold]
+"shooter_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+}
diff --git a/pengine/test10/clone-require-all-3.exp b/pengine/test10/clone-require-all-3.exp
new file mode 100644
index 0000000000..02eea7adb2
--- /dev/null
+++ b/pengine/test10/clone-require-all-3.exp
@@ -0,0 +1,169 @@
+<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY" transition_id="0">
+ <synapse id="0">
+ <action_set>
+ <rsc_op id="15" operation="monitor" operation_key="shooter_monitor_60000" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="shooter" class="stonith" type="fence_xvm"/>
+ <attributes CRM_meta_interval="60000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="14" operation="start" operation_key="shooter_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="1">
+ <action_set>
+ <rsc_op id="14" operation="start" operation_key="shooter_start_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="shooter" class="stonith" type="fence_xvm"/>
+ <attributes CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="13" operation="stop" operation_key="shooter_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="2">
+ <action_set>
+ <rsc_op id="13" operation="stop" operation_key="shooter_stop_0" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="shooter" class="stonith" type="fence_xvm"/>
+ <attributes CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="3">
+ <action_set>
+ <rsc_op id="16" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="stop" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="20" operation="stop" operation_key="A-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="4">
+ <action_set>
+ <rsc_op id="17" operation="stop" operation_key="A_stop_0" internal_operation_key="A:1_stop_0" on_node="rhel7-auto2" on_node_uuid="2">
+ <primitive id="A" long-id="A:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="stop" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="20" operation="stop" operation_key="A-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="5" priority="1000000">
+ <action_set>
+ <pseudo_event id="21" operation="stopped" operation_key="A-clone_stopped_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="16" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="17" operation="stop" operation_key="A_stop_0" internal_operation_key="A:1_stop_0" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="20" operation="stop" operation_key="A-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="6">
+ <action_set>
+ <pseudo_event id="20" operation="stop" operation_key="A-clone_stop_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="29" operation="stopped" operation_key="B-clone_stopped_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="7">
+ <action_set>
+ <rsc_op id="22" operation="stop" operation_key="B_stop_0" internal_operation_key="B:0_stop_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="stop" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="28" operation="stop" operation_key="B-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="8">
+ <action_set>
+ <rsc_op id="24" operation="stop" operation_key="B_stop_0" internal_operation_key="B:1_stop_0" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="B" long-id="B:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="stop" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="28" operation="stop" operation_key="B-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="9" priority="1000000">
+ <action_set>
+ <pseudo_event id="29" operation="stopped" operation_key="B-clone_stopped_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="22" operation="stop" operation_key="B_stop_0" internal_operation_key="B:0_stop_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="24" operation="stop" operation_key="B_stop_0" internal_operation_key="B:1_stop_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="28" operation="stop" operation_key="B-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="10">
+ <action_set>
+ <pseudo_event id="28" operation="stop" operation_key="B-clone_stop_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="11">
+ <action_set>
+ <pseudo_event id="7" operation="all_stopped" operation_key="all_stopped">
+ <attributes />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="13" operation="stop" operation_key="shooter_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="16" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="17" operation="stop" operation_key="A_stop_0" internal_operation_key="A:1_stop_0" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="22" operation="stop" operation_key="B_stop_0" internal_operation_key="B:0_stop_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="24" operation="stop" operation_key="B_stop_0" internal_operation_key="B:1_stop_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ </inputs>
+ </synapse>
+</transition_graph>
diff --git a/pengine/test10/clone-require-all-3.scores b/pengine/test10/clone-require-all-3.scores
new file mode 100644
index 0000000000..814a972883
--- /dev/null
+++ b/pengine/test10/clone-require-all-3.scores
@@ -0,0 +1,77 @@
+Allocation scores:
+clone_color: A-clone allocation score on rhel7-auto1: 0
+clone_color: A-clone allocation score on rhel7-auto2: 0
+clone_color: A-clone allocation score on rhel7-auto3: -INFINITY
+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto1: 1
+clone_color: A:0 allocation score on rhel7-auto2: 0
+clone_color: A:0 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto1: 0
+clone_color: A:1 allocation score on rhel7-auto2: 1
+clone_color: A:1 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto1: 0
+clone_color: A:2 allocation score on rhel7-auto2: 0
+clone_color: A:2 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto1: 0
+clone_color: A:3 allocation score on rhel7-auto2: 0
+clone_color: A:3 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto1: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto3: 0
+clone_color: B-clone allocation score on rhel7-auto4: 0
+clone_color: B:0 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:0 allocation score on rhel7-auto3: 1
+clone_color: B:0 allocation score on rhel7-auto4: 0
+clone_color: B:1 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:1 allocation score on rhel7-auto3: 0
+clone_color: B:1 allocation score on rhel7-auto4: 1
+clone_color: B:2 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:2 allocation score on rhel7-auto3: 0
+clone_color: B:2 allocation score on rhel7-auto4: 0
+clone_color: B:3 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:3 allocation score on rhel7-auto3: 0
+clone_color: B:3 allocation score on rhel7-auto4: 0
+native_color: A:0 allocation score on rhel7-auto1: -INFINITY
+native_color: A:0 allocation score on rhel7-auto2: -INFINITY
+native_color: A:0 allocation score on rhel7-auto3: -INFINITY
+native_color: A:0 allocation score on rhel7-auto4: -INFINITY
+native_color: A:1 allocation score on rhel7-auto1: -INFINITY
+native_color: A:1 allocation score on rhel7-auto2: -INFINITY
+native_color: A:1 allocation score on rhel7-auto3: -INFINITY
+native_color: A:1 allocation score on rhel7-auto4: -INFINITY
+native_color: A:2 allocation score on rhel7-auto1: -INFINITY
+native_color: A:2 allocation score on rhel7-auto2: -INFINITY
+native_color: A:2 allocation score on rhel7-auto3: -INFINITY
+native_color: A:2 allocation score on rhel7-auto4: -INFINITY
+native_color: A:3 allocation score on rhel7-auto1: -INFINITY
+native_color: A:3 allocation score on rhel7-auto2: -INFINITY
+native_color: A:3 allocation score on rhel7-auto3: -INFINITY
+native_color: A:3 allocation score on rhel7-auto4: -INFINITY
+native_color: B:0 allocation score on rhel7-auto1: -INFINITY
+native_color: B:0 allocation score on rhel7-auto2: -INFINITY
+native_color: B:0 allocation score on rhel7-auto3: 1
+native_color: B:0 allocation score on rhel7-auto4: -INFINITY
+native_color: B:1 allocation score on rhel7-auto1: -INFINITY
+native_color: B:1 allocation score on rhel7-auto2: -INFINITY
+native_color: B:1 allocation score on rhel7-auto3: 0
+native_color: B:1 allocation score on rhel7-auto4: 1
+native_color: B:2 allocation score on rhel7-auto1: -INFINITY
+native_color: B:2 allocation score on rhel7-auto2: -INFINITY
+native_color: B:2 allocation score on rhel7-auto3: -INFINITY
+native_color: B:2 allocation score on rhel7-auto4: -INFINITY
+native_color: B:3 allocation score on rhel7-auto1: -INFINITY
+native_color: B:3 allocation score on rhel7-auto2: -INFINITY
+native_color: B:3 allocation score on rhel7-auto3: -INFINITY
+native_color: B:3 allocation score on rhel7-auto4: -INFINITY
+native_color: shooter allocation score on rhel7-auto1: 0
+native_color: shooter allocation score on rhel7-auto2: 0
+native_color: shooter allocation score on rhel7-auto3: 0
+native_color: shooter allocation score on rhel7-auto4: 0
diff --git a/pengine/test10/clone-require-all-3.summary b/pengine/test10/clone-require-all-3.summary
new file mode 100644
index 0000000000..68191b168a
--- /dev/null
+++ b/pengine/test10/clone-require-all-3.summary
@@ -0,0 +1,46 @@
+
+Current cluster status:
+Node rhel7-auto1 (1): standby
+Node rhel7-auto2 (2): standby
+Online: [ rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto1 rhel7-auto2 ]
+ Stopped: [ rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Started: [ rhel7-auto3 rhel7-auto4 ]
+ Stopped: [ rhel7-auto1 rhel7-auto2 ]
+
+Transition Summary:
+ * Move shooter (Started rhel7-auto1 -> rhel7-auto3)
+ * Stop A:0 (rhel7-auto1)
+ * Stop A:1 (rhel7-auto2)
+ * Stop B:0 (Started rhel7-auto3)
+ * Stop B:1 (Started rhel7-auto4)
+
+Executing cluster transition:
+ * Resource action: shooter stop on rhel7-auto1
+ * Pseudo action: B-clone_stop_0
+ * Resource action: shooter start on rhel7-auto3
+ * Resource action: B stop on rhel7-auto3
+ * Resource action: B stop on rhel7-auto4
+ * Pseudo action: B-clone_stopped_0
+ * Resource action: shooter monitor=60000 on rhel7-auto3
+ * Pseudo action: A-clone_stop_0
+ * Resource action: A stop on rhel7-auto1
+ * Resource action: A stop on rhel7-auto2
+ * Pseudo action: A-clone_stopped_0
+ * Pseudo action: all_stopped
+
+Revised cluster status:
+Node rhel7-auto1 (1): standby
+Node rhel7-auto2 (2): standby
+Online: [ rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto3
+ Clone Set: A-clone [A]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
diff --git a/pengine/test10/clone-require-all-3.xml b/pengine/test10/clone-require-all-3.xml
new file mode 100644
index 0000000000..b04f0e2602
--- /dev/null
+++ b/pengine/test10/clone-require-all-3.xml
@@ -0,0 +1,160 @@
+<cib crm_feature_set="3.0.9" validate-with="pacemaker-2.3" epoch="17" num_updates="6" admin_epoch="0" cib-last-written="Mon Jan 5 17:40:52 2015" have-quorum="1" dc-uuid="2">
+ <configuration>
+ <crm_config>
+ <cluster_property_set id="cib-bootstrap-options">
+ <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
+ <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.12-a14efad"/>
+ <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
+ <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="phd"/>
+ </cluster_property_set>
+ </crm_config>
+ <nodes>
+ <node id="1" uname="rhel7-auto1">
+ <instance_attributes id="nodes-1">
+ <nvpair id="nodes-1-standby" name="standby" value="on"/>
+ </instance_attributes>
+ </node>
+ <node id="2" uname="rhel7-auto2">
+ <instance_attributes id="nodes-2">
+ <nvpair id="nodes-2-standby" name="standby" value="on"/>
+ </instance_attributes>
+ </node>
+ <node id="3" uname="rhel7-auto3"/>
+ <node id="4" uname="rhel7-auto4"/>
+ </nodes>
+ <resources>
+ <primitive class="stonith" id="shooter" type="fence_xvm">
+ <instance_attributes id="shooter-instance_attributes"/>
+ <operations>
+ <op id="shooter-monitor-interval-60s" interval="60s" name="monitor"/>
+ </operations>
+ </primitive>
+ <clone id="A-clone">
+ <primitive class="ocf" id="A" provider="heartbeat" type="Dummy">
+ <instance_attributes id="A-instance_attributes"/>
+ <operations>
+ <op id="A-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="A-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="A-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="A-clone-meta">
+ <nvpair id="A-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ <clone id="B-clone">
+ <primitive class="ocf" id="B" provider="heartbeat" type="Dummy">
+ <instance_attributes id="B-instance_attributes"/>
+ <operations>
+ <op id="B-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="B-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="B-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="B-clone-meta">
+ <nvpair id="B-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ </resources>
+ <constraints>
+ <rsc_location id="location-A-clone-rhel7-auto3--INFINITY" node="rhel7-auto3" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-A-clone-rhel7-auto4--INFINITY" node="rhel7-auto4" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-B-clone-rhel7-auto1--INFINITY" node="rhel7-auto1" rsc="B-clone" score="-INFINITY"/>
+ <rsc_location id="location-B-clone-rhel7-auto2--INFINITY" node="rhel7-auto2" rsc="B-clone" score="-INFINITY"/>
+ <rsc_order require-all="false" first="A-clone" first-action="start" id="order-A-clone-B-clone-mandatory" then="B-clone" then-action="start"/>
+ </constraints>
+ </configuration>
+ <status>
+ <node_state id="1" uname="rhel7-auto1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="1">
+ <instance_attributes id="status-1">
+ <nvpair id="status-1-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-1-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="1">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="6" rc-code="0" op-status="0" interval="0" last-run="1420497434" last-rc-change="1420497434" exec-time="84" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ <lrm_rsc_op id="shooter_monitor_60000" operation_key="shooter_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="7" rc-code="0" op-status="0" interval="60000" last-rc-change="1420497434" exec-time="62" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="17:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;17:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="12" rc-code="0" op-status="0" interval="0" last-run="1420497496" last-rc-change="1420497496" exec-time="21" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="18:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;18:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="13" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497496" exec-time="19" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="24:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;24:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497555" last-rc-change="1420497555" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="34:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;34:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497505" exec-time="24" queue-time="1" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="2" uname="rhel7-auto2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="2">
+ <instance_attributes id="status-2">
+ <nvpair id="status-2-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-2-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="2">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="14:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;14:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="10" rc-code="0" op-status="0" interval="0" last-run="1420497495" last-rc-change="1420497495" exec-time="23" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="15:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;15:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="11" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497495" exec-time="20" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497555" last-rc-change="1420497555" exec-time="27" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="21" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="3" uname="rhel7-auto3" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="3">
+ <instance_attributes id="status-3">
+ <nvpair id="status-3-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-3-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="3">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="22:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;22:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497546" last-rc-change="1420497546" exec-time="32" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_start_0" operation="start" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="22" rc-code="0" op-status="0" interval="0" last-run="1420572996" last-rc-change="1420572996" exec-time="0" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420572996" exec-time="0" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="4" uname="rhel7-auto4" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="4">
+ <instance_attributes id="status-4">
+ <nvpair id="status-4-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-4-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="4">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497431" last-rc-change="1420497431" exec-time="987" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="23:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;23:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497545" last-rc-change="1420497545" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_start_0" operation="start" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="22" rc-code="0" op-status="0" interval="0" last-run="1420572996" last-rc-change="1420572996" exec-time="0" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420572996" exec-time="0" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ </status>
+</cib>
diff --git a/pengine/test10/clone-require-all-4.dot b/pengine/test10/clone-require-all-4.dot
new file mode 100644
index 0000000000..4b9521fa00
--- /dev/null
+++ b/pengine/test10/clone-require-all-4.dot
@@ -0,0 +1,24 @@
+ digraph "g" {
+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_start_0" -> "A-clone_running_0" [ style = bold]
+"A-clone_start_0" -> "A_start_0 <none>" [ style = dashed]
+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_stop_0" -> "A-clone_stopped_0" [ style = bold]
+"A-clone_stop_0" -> "A_stop_0 rhel7-auto1" [ style = bold]
+"A-clone_stop_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_stopped_0" -> "A-clone_start_0" [ style = bold]
+"A-clone_stopped_0" [ style=bold color="green" fontcolor="orange"]
+"A_start_0 <none>" -> "A-clone_running_0" [ style = dashed]
+"A_start_0 <none>" [ style=dashed color="red" fontcolor="black"]
+"A_stop_0 rhel7-auto1" -> "A-clone_stopped_0" [ style = bold]
+"A_stop_0 rhel7-auto1" -> "A_start_0 <none>" [ style = dashed]
+"A_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold]
+"A_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"all_stopped" [ style=bold color="green" fontcolor="orange"]
+"shooter_monitor_60000 rhel7-auto2" [ style=bold color="green" fontcolor="black"]
+"shooter_start_0 rhel7-auto2" -> "shooter_monitor_60000 rhel7-auto2" [ style = bold]
+"shooter_start_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"]
+"shooter_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold]
+"shooter_stop_0 rhel7-auto1" -> "shooter_start_0 rhel7-auto2" [ style = bold]
+"shooter_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+}
diff --git a/pengine/test10/clone-require-all-4.exp b/pengine/test10/clone-require-all-4.exp
new file mode 100644
index 0000000000..53c152975b
--- /dev/null
+++ b/pengine/test10/clone-require-all-4.exp
@@ -0,0 +1,112 @@
+<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY" transition_id="0">
+ <synapse id="0">
+ <action_set>
+ <rsc_op id="15" operation="monitor" operation_key="shooter_monitor_60000" on_node="rhel7-auto2" on_node_uuid="2">
+ <primitive id="shooter" class="stonith" type="fence_xvm"/>
+ <attributes CRM_meta_interval="60000" CRM_meta_name="monitor" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="14" operation="start" operation_key="shooter_start_0" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="1">
+ <action_set>
+ <rsc_op id="14" operation="start" operation_key="shooter_start_0" on_node="rhel7-auto2" on_node_uuid="2">
+ <primitive id="shooter" class="stonith" type="fence_xvm"/>
+ <attributes CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="13" operation="stop" operation_key="shooter_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="2">
+ <action_set>
+ <rsc_op id="13" operation="stop" operation_key="shooter_stop_0" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="shooter" class="stonith" type="fence_xvm"/>
+ <attributes CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="3">
+ <action_set>
+ <rsc_op id="16" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="stop" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="21" operation="stop" operation_key="A-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="4" priority="1000000">
+ <action_set>
+ <pseudo_event id="22" operation="stopped" operation_key="A-clone_stopped_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="16" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="21" operation="stop" operation_key="A-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="5">
+ <action_set>
+ <pseudo_event id="21" operation="stop" operation_key="A-clone_stop_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="6" priority="1000000">
+ <action_set>
+ <pseudo_event id="20" operation="running" operation_key="A-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="19" operation="start" operation_key="A-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="7">
+ <action_set>
+ <pseudo_event id="19" operation="start" operation_key="A-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="22" operation="stopped" operation_key="A-clone_stopped_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="8">
+ <action_set>
+ <pseudo_event id="7" operation="all_stopped" operation_key="all_stopped">
+ <attributes />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="13" operation="stop" operation_key="shooter_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="16" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ </inputs>
+ </synapse>
+</transition_graph>
diff --git a/pengine/test10/clone-require-all-4.scores b/pengine/test10/clone-require-all-4.scores
new file mode 100644
index 0000000000..c602a1d74b
--- /dev/null
+++ b/pengine/test10/clone-require-all-4.scores
@@ -0,0 +1,77 @@
+Allocation scores:
+clone_color: A-clone allocation score on rhel7-auto1: 0
+clone_color: A-clone allocation score on rhel7-auto2: 0
+clone_color: A-clone allocation score on rhel7-auto3: -INFINITY
+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto1: 1
+clone_color: A:0 allocation score on rhel7-auto2: 0
+clone_color: A:0 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto1: 0
+clone_color: A:1 allocation score on rhel7-auto2: 1
+clone_color: A:1 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto1: 0
+clone_color: A:2 allocation score on rhel7-auto2: 0
+clone_color: A:2 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto1: 0
+clone_color: A:3 allocation score on rhel7-auto2: 0
+clone_color: A:3 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto1: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto3: 0
+clone_color: B-clone allocation score on rhel7-auto4: 0
+clone_color: B:0 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:0 allocation score on rhel7-auto3: 1
+clone_color: B:0 allocation score on rhel7-auto4: 0
+clone_color: B:1 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:1 allocation score on rhel7-auto3: 0
+clone_color: B:1 allocation score on rhel7-auto4: 1
+clone_color: B:2 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:2 allocation score on rhel7-auto3: 0
+clone_color: B:2 allocation score on rhel7-auto4: 0
+clone_color: B:3 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:3 allocation score on rhel7-auto3: 0
+clone_color: B:3 allocation score on rhel7-auto4: 0
+native_color: A:0 allocation score on rhel7-auto1: -INFINITY
+native_color: A:0 allocation score on rhel7-auto2: -INFINITY
+native_color: A:0 allocation score on rhel7-auto3: -INFINITY
+native_color: A:0 allocation score on rhel7-auto4: -INFINITY
+native_color: A:1 allocation score on rhel7-auto1: -INFINITY
+native_color: A:1 allocation score on rhel7-auto2: 1
+native_color: A:1 allocation score on rhel7-auto3: -INFINITY
+native_color: A:1 allocation score on rhel7-auto4: -INFINITY
+native_color: A:2 allocation score on rhel7-auto1: -INFINITY
+native_color: A:2 allocation score on rhel7-auto2: -INFINITY
+native_color: A:2 allocation score on rhel7-auto3: -INFINITY
+native_color: A:2 allocation score on rhel7-auto4: -INFINITY
+native_color: A:3 allocation score on rhel7-auto1: -INFINITY
+native_color: A:3 allocation score on rhel7-auto2: -INFINITY
+native_color: A:3 allocation score on rhel7-auto3: -INFINITY
+native_color: A:3 allocation score on rhel7-auto4: -INFINITY
+native_color: B:0 allocation score on rhel7-auto1: -INFINITY
+native_color: B:0 allocation score on rhel7-auto2: -INFINITY
+native_color: B:0 allocation score on rhel7-auto3: 1
+native_color: B:0 allocation score on rhel7-auto4: 0
+native_color: B:1 allocation score on rhel7-auto1: -INFINITY
+native_color: B:1 allocation score on rhel7-auto2: -INFINITY
+native_color: B:1 allocation score on rhel7-auto3: -INFINITY
+native_color: B:1 allocation score on rhel7-auto4: 1
+native_color: B:2 allocation score on rhel7-auto1: -INFINITY
+native_color: B:2 allocation score on rhel7-auto2: -INFINITY
+native_color: B:2 allocation score on rhel7-auto3: -INFINITY
+native_color: B:2 allocation score on rhel7-auto4: -INFINITY
+native_color: B:3 allocation score on rhel7-auto1: -INFINITY
+native_color: B:3 allocation score on rhel7-auto2: -INFINITY
+native_color: B:3 allocation score on rhel7-auto3: -INFINITY
+native_color: B:3 allocation score on rhel7-auto4: -INFINITY
+native_color: shooter allocation score on rhel7-auto1: 0
+native_color: shooter allocation score on rhel7-auto2: 0
+native_color: shooter allocation score on rhel7-auto3: 0
+native_color: shooter allocation score on rhel7-auto4: 0
diff --git a/pengine/test10/clone-require-all-4.summary b/pengine/test10/clone-require-all-4.summary
new file mode 100644
index 0000000000..49ae3bd87e
--- /dev/null
+++ b/pengine/test10/clone-require-all-4.summary
@@ -0,0 +1,40 @@
+
+Current cluster status:
+Node rhel7-auto1 (1): standby
+Online: [ rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto1 rhel7-auto2 ]
+ Stopped: [ rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Started: [ rhel7-auto3 rhel7-auto4 ]
+ Stopped: [ rhel7-auto1 rhel7-auto2 ]
+
+Transition Summary:
+ * Move shooter (Started rhel7-auto1 -> rhel7-auto2)
+ * Stop A:0 (rhel7-auto1)
+
+Executing cluster transition:
+ * Resource action: shooter stop on rhel7-auto1
+ * Pseudo action: A-clone_stop_0
+ * Resource action: shooter start on rhel7-auto2
+ * Resource action: A stop on rhel7-auto1
+ * Pseudo action: A-clone_stopped_0
+ * Pseudo action: A-clone_start_0
+ * Pseudo action: all_stopped
+ * Resource action: shooter monitor=60000 on rhel7-auto2
+ * Pseudo action: A-clone_running_0
+
+Revised cluster status:
+Node rhel7-auto1 (1): standby
+Online: [ rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto2
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto2 ]
+ Stopped: [ rhel7-auto1 rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Started: [ rhel7-auto3 rhel7-auto4 ]
+ Stopped: [ rhel7-auto1 rhel7-auto2 ]
+
diff --git a/pengine/test10/clone-require-all-4.xml b/pengine/test10/clone-require-all-4.xml
new file mode 100644
index 0000000000..8bfd27fa34
--- /dev/null
+++ b/pengine/test10/clone-require-all-4.xml
@@ -0,0 +1,156 @@
+<cib crm_feature_set="3.0.9" validate-with="pacemaker-2.3" epoch="17" num_updates="6" admin_epoch="0" cib-last-written="Mon Jan 5 17:40:52 2015" have-quorum="1" dc-uuid="2">
+ <configuration>
+ <crm_config>
+ <cluster_property_set id="cib-bootstrap-options">
+ <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
+ <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.12-a14efad"/>
+ <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
+ <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="phd"/>
+ </cluster_property_set>
+ </crm_config>
+ <nodes>
+ <node id="1" uname="rhel7-auto1">
+ <instance_attributes id="nodes-1">
+ <nvpair id="nodes-1-standby" name="standby" value="on"/>
+ </instance_attributes>
+ </node>
+ <node id="2" uname="rhel7-auto2"/>
+ <node id="3" uname="rhel7-auto3"/>
+ <node id="4" uname="rhel7-auto4"/>
+ </nodes>
+ <resources>
+ <primitive class="stonith" id="shooter" type="fence_xvm">
+ <instance_attributes id="shooter-instance_attributes"/>
+ <operations>
+ <op id="shooter-monitor-interval-60s" interval="60s" name="monitor"/>
+ </operations>
+ </primitive>
+ <clone id="A-clone">
+ <primitive class="ocf" id="A" provider="heartbeat" type="Dummy">
+ <instance_attributes id="A-instance_attributes"/>
+ <operations>
+ <op id="A-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="A-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="A-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="A-clone-meta">
+ <nvpair id="A-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ <clone id="B-clone">
+ <primitive class="ocf" id="B" provider="heartbeat" type="Dummy">
+ <instance_attributes id="B-instance_attributes"/>
+ <operations>
+ <op id="B-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="B-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="B-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="B-clone-meta">
+ <nvpair id="B-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ </resources>
+ <constraints>
+ <rsc_location id="location-A-clone-rhel7-auto3--INFINITY" node="rhel7-auto3" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-A-clone-rhel7-auto4--INFINITY" node="rhel7-auto4" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-B-clone-rhel7-auto1--INFINITY" node="rhel7-auto1" rsc="B-clone" score="-INFINITY"/>
+ <rsc_location id="location-B-clone-rhel7-auto2--INFINITY" node="rhel7-auto2" rsc="B-clone" score="-INFINITY"/>
+ <rsc_order require-all="false" first="A-clone" first-action="start" id="order-A-clone-B-clone-mandatory" then="B-clone" then-action="start"/>
+ </constraints>
+ </configuration>
+ <status>
+ <node_state id="1" uname="rhel7-auto1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="1">
+ <instance_attributes id="status-1">
+ <nvpair id="status-1-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-1-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="1">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="6" rc-code="0" op-status="0" interval="0" last-run="1420497434" last-rc-change="1420497434" exec-time="84" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ <lrm_rsc_op id="shooter_monitor_60000" operation_key="shooter_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="7" rc-code="0" op-status="0" interval="60000" last-rc-change="1420497434" exec-time="62" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="17:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;17:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="12" rc-code="0" op-status="0" interval="0" last-run="1420497496" last-rc-change="1420497496" exec-time="21" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="18:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;18:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="13" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497496" exec-time="19" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="24:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;24:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497555" last-rc-change="1420497555" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="34:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;34:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497505" exec-time="24" queue-time="1" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="2" uname="rhel7-auto2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="2">
+ <instance_attributes id="status-2">
+ <nvpair id="status-2-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-2-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="2">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="14:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;14:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="10" rc-code="0" op-status="0" interval="0" last-run="1420497495" last-rc-change="1420497495" exec-time="23" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="15:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;15:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="11" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497495" exec-time="20" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497555" last-rc-change="1420497555" exec-time="27" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="21" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="3" uname="rhel7-auto3" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="3">
+ <instance_attributes id="status-3">
+ <nvpair id="status-3-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-3-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="3">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="22:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;22:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497546" last-rc-change="1420497546" exec-time="32" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_start_0" operation="start" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="22" rc-code="0" op-status="0" interval="0" last-run="1420572996" last-rc-change="1420572996" exec-time="0" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420572996" exec-time="0" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="4" uname="rhel7-auto4" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="4">
+ <instance_attributes id="status-4">
+ <nvpair id="status-4-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-4-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="4">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497431" last-rc-change="1420497431" exec-time="987" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="23:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;23:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497545" last-rc-change="1420497545" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_start_0" operation="start" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="22" rc-code="0" op-status="0" interval="0" last-run="1420572996" last-rc-change="1420572996" exec-time="0" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420572996" exec-time="0" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ </status>
+</cib>
diff --git a/pengine/test10/clone-require-all-5.dot b/pengine/test10/clone-require-all-5.dot
new file mode 100644
index 0000000000..ce5a59373d
--- /dev/null
+++ b/pengine/test10/clone-require-all-5.dot
@@ -0,0 +1,31 @@
+ digraph "g" {
+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_start_0" -> "A-clone_running_0" [ style = bold]
+"A-clone_start_0" -> "A_start_0 rhel7-auto3" [ style = bold]
+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"A_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"A_start_0 rhel7-auto3" -> "A-clone_running_0" [ style = bold]
+"A_start_0 rhel7-auto3" -> "A_monitor_10000 rhel7-auto3" [ style = bold]
+"A_start_0 rhel7-auto3" -> "clone-one-or-more:order-A-clone-B-clone-mandatory" [ style = bold]
+"A_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"B-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"B-clone_start_0" -> "B-clone_running_0" [ style = bold]
+"B-clone_start_0" -> "B:1_start_0 rhel7-auto3" [ style = bold]
+"B-clone_start_0" -> "B:2_start_0 rhel7-auto1" [ style = bold]
+"B-clone_start_0" -> "B_start_0 rhel7-auto4" [ style = bold]
+"B-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"B:1_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"B:1_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = bold]
+"B:1_start_0 rhel7-auto3" -> "B:1_monitor_10000 rhel7-auto3" [ style = bold]
+"B:1_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"B:2_monitor_10000 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"B:2_start_0 rhel7-auto1" -> "B-clone_running_0" [ style = bold]
+"B:2_start_0 rhel7-auto1" -> "B:2_monitor_10000 rhel7-auto1" [ style = bold]
+"B:2_start_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"B_monitor_10000 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"B_start_0 rhel7-auto4" -> "B-clone_running_0" [ style = bold]
+"B_start_0 rhel7-auto4" -> "B_monitor_10000 rhel7-auto4" [ style = bold]
+"B_start_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"clone-one-or-more:order-A-clone-B-clone-mandatory" -> "B-clone_start_0" [ style = bold]
+"clone-one-or-more:order-A-clone-B-clone-mandatory" [ style=bold color="green" fontcolor="orange"]
+}
diff --git a/pengine/test10/clone-require-all-5.exp b/pengine/test10/clone-require-all-5.exp
new file mode 100644
index 0000000000..abb4d2516e
--- /dev/null
+++ b/pengine/test10/clone-require-all-5.exp
@@ -0,0 +1,174 @@
+<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY" transition_id="0">
+ <synapse id="0">
+ <action_set>
+ <rsc_op id="18" operation="monitor" operation_key="A_monitor_10000" internal_operation_key="A:2_monitor_10000" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="A" long-id="A:2" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="2" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="A_start_0" internal_operation_key="A:2_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="1">
+ <action_set>
+ <rsc_op id="17" operation="start" operation_key="A_start_0" internal_operation_key="A:2_start_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="A" long-id="A:2" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="2" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="19" operation="start" operation_key="A-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="2" priority="1000000">
+ <action_set>
+ <pseudo_event id="20" operation="running" operation_key="A-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="A_start_0" internal_operation_key="A:2_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="19" operation="start" operation_key="A-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="3">
+ <action_set>
+ <pseudo_event id="19" operation="start" operation_key="A-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="4">
+ <action_set>
+ <rsc_op id="24" operation="monitor" operation_key="B_monitor_10000" internal_operation_key="B:0_monitor_10000" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="23" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="5">
+ <action_set>
+ <rsc_op id="23" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="29" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="6">
+ <action_set>
+ <rsc_op id="26" operation="monitor" operation_key="B:1_monitor_10000" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="B" long-id="B:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="25" operation="start" operation_key="B:1_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="7">
+ <action_set>
+ <rsc_op id="25" operation="start" operation_key="B:1_start_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="B" long-id="B:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="29" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="8">
+ <action_set>
+ <rsc_op id="28" operation="monitor" operation_key="B:2_monitor_10000" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="B" long-id="B:2" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="2" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="27" operation="start" operation_key="B:2_start_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="9">
+ <action_set>
+ <rsc_op id="27" operation="start" operation_key="B:2_start_0" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="B" long-id="B:2" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="2" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="29" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="10" priority="1000000">
+ <action_set>
+ <pseudo_event id="30" operation="running" operation_key="B-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="23" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="25" operation="start" operation_key="B:1_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="27" operation="start" operation_key="B:2_start_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="29" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="11">
+ <action_set>
+ <pseudo_event id="29" operation="start" operation_key="B-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="4" operation="clone-one-or-more:order-A-clone-B-clone-mandatory" operation_key="clone-one-or-more:order-A-clone-B-clone-mandatory"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="12">
+ <action_set>
+ <pseudo_event id="4" operation="clone-one-or-more:order-A-clone-B-clone-mandatory" operation_key="clone-one-or-more:order-A-clone-B-clone-mandatory">
+ <attributes />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="A_start_0" internal_operation_key="A:2_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+</transition_graph>
diff --git a/pengine/test10/clone-require-all-5.scores b/pengine/test10/clone-require-all-5.scores
new file mode 100644
index 0000000000..cca67398e1
--- /dev/null
+++ b/pengine/test10/clone-require-all-5.scores
@@ -0,0 +1,77 @@
+Allocation scores:
+clone_color: A-clone allocation score on rhel7-auto1: 0
+clone_color: A-clone allocation score on rhel7-auto2: 0
+clone_color: A-clone allocation score on rhel7-auto3: 0
+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto1: 1
+clone_color: A:0 allocation score on rhel7-auto2: 0
+clone_color: A:0 allocation score on rhel7-auto3: 0
+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto1: 0
+clone_color: A:1 allocation score on rhel7-auto2: 1
+clone_color: A:1 allocation score on rhel7-auto3: 0
+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto1: 0
+clone_color: A:2 allocation score on rhel7-auto2: 0
+clone_color: A:2 allocation score on rhel7-auto3: 0
+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto1: 0
+clone_color: A:3 allocation score on rhel7-auto2: 0
+clone_color: A:3 allocation score on rhel7-auto3: 0
+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto1: 0
+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto3: 0
+clone_color: B-clone allocation score on rhel7-auto4: 0
+clone_color: B:0 allocation score on rhel7-auto1: 0
+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:0 allocation score on rhel7-auto3: 0
+clone_color: B:0 allocation score on rhel7-auto4: 0
+clone_color: B:1 allocation score on rhel7-auto1: 0
+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:1 allocation score on rhel7-auto3: 0
+clone_color: B:1 allocation score on rhel7-auto4: 0
+clone_color: B:2 allocation score on rhel7-auto1: 0
+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:2 allocation score on rhel7-auto3: 0
+clone_color: B:2 allocation score on rhel7-auto4: 0
+clone_color: B:3 allocation score on rhel7-auto1: 0
+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:3 allocation score on rhel7-auto3: 0
+clone_color: B:3 allocation score on rhel7-auto4: 0
+native_color: A:0 allocation score on rhel7-auto1: 1
+native_color: A:0 allocation score on rhel7-auto2: -INFINITY
+native_color: A:0 allocation score on rhel7-auto3: 0
+native_color: A:0 allocation score on rhel7-auto4: -INFINITY
+native_color: A:1 allocation score on rhel7-auto1: 0
+native_color: A:1 allocation score on rhel7-auto2: 1
+native_color: A:1 allocation score on rhel7-auto3: 0
+native_color: A:1 allocation score on rhel7-auto4: -INFINITY
+native_color: A:2 allocation score on rhel7-auto1: -INFINITY
+native_color: A:2 allocation score on rhel7-auto2: -INFINITY
+native_color: A:2 allocation score on rhel7-auto3: 0
+native_color: A:2 allocation score on rhel7-auto4: -INFINITY
+native_color: A:3 allocation score on rhel7-auto1: -INFINITY
+native_color: A:3 allocation score on rhel7-auto2: -INFINITY
+native_color: A:3 allocation score on rhel7-auto3: -INFINITY
+native_color: A:3 allocation score on rhel7-auto4: -INFINITY
+native_color: B:0 allocation score on rhel7-auto1: 0
+native_color: B:0 allocation score on rhel7-auto2: -INFINITY
+native_color: B:0 allocation score on rhel7-auto3: 0
+native_color: B:0 allocation score on rhel7-auto4: 0
+native_color: B:1 allocation score on rhel7-auto1: 0
+native_color: B:1 allocation score on rhel7-auto2: -INFINITY
+native_color: B:1 allocation score on rhel7-auto3: 0
+native_color: B:1 allocation score on rhel7-auto4: -INFINITY
+native_color: B:2 allocation score on rhel7-auto1: 0
+native_color: B:2 allocation score on rhel7-auto2: -INFINITY
+native_color: B:2 allocation score on rhel7-auto3: -INFINITY
+native_color: B:2 allocation score on rhel7-auto4: -INFINITY
+native_color: B:3 allocation score on rhel7-auto1: -INFINITY
+native_color: B:3 allocation score on rhel7-auto2: -INFINITY
+native_color: B:3 allocation score on rhel7-auto3: -INFINITY
+native_color: B:3 allocation score on rhel7-auto4: -INFINITY
+native_color: shooter allocation score on rhel7-auto1: 0
+native_color: shooter allocation score on rhel7-auto2: 0
+native_color: shooter allocation score on rhel7-auto3: 0
+native_color: shooter allocation score on rhel7-auto4: 0
diff --git a/pengine/test10/clone-require-all-5.summary b/pengine/test10/clone-require-all-5.summary
new file mode 100644
index 0000000000..2820093bbe
--- /dev/null
+++ b/pengine/test10/clone-require-all-5.summary
@@ -0,0 +1,43 @@
+
+Current cluster status:
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto1 rhel7-auto2 ]
+ Stopped: [ rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+Transition Summary:
+ * Start A:2 (rhel7-auto3)
+ * Start B:0 (rhel7-auto4)
+ * Start B:1 (rhel7-auto3)
+ * Start B:2 (rhel7-auto1)
+
+Executing cluster transition:
+ * Pseudo action: A-clone_start_0
+ * Resource action: A start on rhel7-auto3
+ * Pseudo action: A-clone_running_0
+ * Pseudo action: clone-one-or-more:order-A-clone-B-clone-mandatory
+ * Resource action: A monitor=10000 on rhel7-auto3
+ * Pseudo action: B-clone_start_0
+ * Resource action: B start on rhel7-auto4
+ * Resource action: B start on rhel7-auto3
+ * Resource action: B start on rhel7-auto1
+ * Pseudo action: B-clone_running_0
+ * Resource action: B monitor=10000 on rhel7-auto4
+ * Resource action: B monitor=10000 on rhel7-auto3
+ * Resource action: B monitor=10000 on rhel7-auto1
+
+Revised cluster status:
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ]
+ Stopped: [ rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Started: [ rhel7-auto1 rhel7-auto3 rhel7-auto4 ]
+ Stopped: [ rhel7-auto2 ]
+
diff --git a/pengine/test10/clone-require-all-5.xml b/pengine/test10/clone-require-all-5.xml
new file mode 100644
index 0000000000..1079dae0cb
--- /dev/null
+++ b/pengine/test10/clone-require-all-5.xml
@@ -0,0 +1,150 @@
+<cib crm_feature_set="3.0.9" validate-with="pacemaker-2.3" epoch="17" num_updates="2" admin_epoch="0" cib-last-written="Mon Jan 5 17:40:52 2015" have-quorum="1" dc-uuid="2">
+ <configuration>
+ <crm_config>
+ <cluster_property_set id="cib-bootstrap-options">
+ <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
+ <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.12-a14efad"/>
+ <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
+ <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="phd"/>
+ </cluster_property_set>
+ </crm_config>
+ <nodes>
+ <node id="1" uname="rhel7-auto1"/>
+ <node id="2" uname="rhel7-auto2"/>
+ <node id="3" uname="rhel7-auto3"/>
+ <node id="4" uname="rhel7-auto4"/>
+ </nodes>
+ <resources>
+ <primitive class="stonith" id="shooter" type="fence_xvm">
+ <instance_attributes id="shooter-instance_attributes"/>
+ <operations>
+ <op id="shooter-monitor-interval-60s" interval="60s" name="monitor"/>
+ </operations>
+ </primitive>
+ <clone id="A-clone">
+ <primitive class="ocf" id="A" provider="heartbeat" type="Dummy">
+ <instance_attributes id="A-instance_attributes"/>
+ <operations>
+ <op id="A-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="A-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="A-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="A-clone-meta">
+ <nvpair id="A-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ <clone id="B-clone">
+ <primitive class="ocf" id="B" provider="heartbeat" type="Dummy">
+ <instance_attributes id="B-instance_attributes"/>
+ <operations>
+ <op id="B-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="B-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="B-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="B-clone-meta">
+ <nvpair id="B-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ </resources>
+ <constraints>
+ <rsc_location id="location-A-clone-rhel7-auto4--INFINITY" node="rhel7-auto4" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-B-clone-rhel7-auto2--INFINITY" node="rhel7-auto2" rsc="B-clone" score="-INFINITY"/>
+ <rsc_order require-all="false" first="A-clone" first-action="start" id="order-A-clone-B-clone-mandatory" then="B-clone" then-action="start"/>
+ </constraints>
+ </configuration>
+ <status>
+ <node_state id="1" uname="rhel7-auto1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="1">
+ <instance_attributes id="status-1">
+ <nvpair id="status-1-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-1-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="1">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="6" rc-code="0" op-status="0" interval="0" last-run="1420497434" last-rc-change="1420497434" exec-time="84" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ <lrm_rsc_op id="shooter_monitor_60000" operation_key="shooter_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="7" rc-code="0" op-status="0" interval="60000" last-rc-change="1420497434" exec-time="62" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="17:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;17:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="12" rc-code="0" op-status="0" interval="0" last-run="1420497496" last-rc-change="1420497496" exec-time="21" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="18:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;18:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="13" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497496" exec-time="19" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="24:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;24:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497555" last-rc-change="1420497555" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="34:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;34:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497505" exec-time="24" queue-time="1" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="2" uname="rhel7-auto2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="2">
+ <instance_attributes id="status-2">
+ <nvpair id="status-2-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-2-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="2">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="14:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;14:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="10" rc-code="0" op-status="0" interval="0" last-run="1420497495" last-rc-change="1420497495" exec-time="23" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="15:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;15:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="11" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497495" exec-time="20" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497555" last-rc-change="1420497555" exec-time="27" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="21" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="3" uname="rhel7-auto3" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="3">
+ <instance_attributes id="status-3">
+ <nvpair id="status-3-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-3-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="3">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="22:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;22:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497546" last-rc-change="1420497546" exec-time="32" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="22:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;22:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497653" last-rc-change="1420497653" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="30:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;30:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="22" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="4" uname="rhel7-auto4" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="4">
+ <instance_attributes id="status-4">
+ <nvpair id="status-4-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-4-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="4">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497431" last-rc-change="1420497431" exec-time="987" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="23:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;23:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497545" last-rc-change="1420497545" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="24:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;24:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497652" last-rc-change="1420497652" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="32:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;32:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="28" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ </status>
+</cib>
diff --git a/pengine/test10/clone-require-all-6.dot b/pengine/test10/clone-require-all-6.dot
new file mode 100644
index 0000000000..3ee5c89ec1
--- /dev/null
+++ b/pengine/test10/clone-require-all-6.dot
@@ -0,0 +1,23 @@
+ digraph "g" {
+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_start_0" -> "A-clone_running_0" [ style = bold]
+"A-clone_start_0" -> "A_start_0 <none>" [ style = dashed]
+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_stop_0" -> "A-clone_stopped_0" [ style = bold]
+"A-clone_stop_0" -> "A_stop_0 rhel7-auto1" [ style = bold]
+"A-clone_stop_0" -> "A_stop_0 rhel7-auto3" [ style = bold]
+"A-clone_stop_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_stopped_0" -> "A-clone_start_0" [ style = bold]
+"A-clone_stopped_0" [ style=bold color="green" fontcolor="orange"]
+"A_start_0 <none>" -> "A-clone_running_0" [ style = dashed]
+"A_start_0 <none>" [ style=dashed color="red" fontcolor="black"]
+"A_stop_0 rhel7-auto1" -> "A-clone_stopped_0" [ style = bold]
+"A_stop_0 rhel7-auto1" -> "A_start_0 <none>" [ style = dashed]
+"A_stop_0 rhel7-auto1" -> "all_stopped" [ style = bold]
+"A_stop_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"A_stop_0 rhel7-auto3" -> "A-clone_stopped_0" [ style = bold]
+"A_stop_0 rhel7-auto3" -> "A_start_0 <none>" [ style = dashed]
+"A_stop_0 rhel7-auto3" -> "all_stopped" [ style = bold]
+"A_stop_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"all_stopped" [ style=bold color="green" fontcolor="orange"]
+}
diff --git a/pengine/test10/clone-require-all-6.exp b/pengine/test10/clone-require-all-6.exp
new file mode 100644
index 0000000000..8cc4c5785a
--- /dev/null
+++ b/pengine/test10/clone-require-all-6.exp
@@ -0,0 +1,93 @@
+<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY" transition_id="0">
+ <synapse id="0">
+ <action_set>
+ <rsc_op id="17" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="stop" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="23" operation="stop" operation_key="A-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="1">
+ <action_set>
+ <rsc_op id="20" operation="stop" operation_key="A_stop_0" internal_operation_key="A:2_stop_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="A" long-id="A:2" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="2" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="stop" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="23" operation="stop" operation_key="A-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="2" priority="1000000">
+ <action_set>
+ <pseudo_event id="24" operation="stopped" operation_key="A-clone_stopped_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="20" operation="stop" operation_key="A_stop_0" internal_operation_key="A:2_stop_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="23" operation="stop" operation_key="A-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="3">
+ <action_set>
+ <pseudo_event id="23" operation="stop" operation_key="A-clone_stop_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="4" priority="1000000">
+ <action_set>
+ <pseudo_event id="22" operation="running" operation_key="A-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="21" operation="start" operation_key="A-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="5">
+ <action_set>
+ <pseudo_event id="21" operation="start" operation_key="A-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="24" operation="stopped" operation_key="A-clone_stopped_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="6">
+ <action_set>
+ <pseudo_event id="9" operation="all_stopped" operation_key="all_stopped">
+ <attributes />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="20" operation="stop" operation_key="A_stop_0" internal_operation_key="A:2_stop_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+</transition_graph>
diff --git a/pengine/test10/clone-require-all-6.scores b/pengine/test10/clone-require-all-6.scores
new file mode 100644
index 0000000000..4e8ee5a504
--- /dev/null
+++ b/pengine/test10/clone-require-all-6.scores
@@ -0,0 +1,77 @@
+Allocation scores:
+clone_color: A-clone allocation score on rhel7-auto1: -INFINITY
+clone_color: A-clone allocation score on rhel7-auto2: 0
+clone_color: A-clone allocation score on rhel7-auto3: -INFINITY
+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto2: 0
+clone_color: A:0 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto2: 1
+clone_color: A:1 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto2: 0
+clone_color: A:2 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto2: 0
+clone_color: A:3 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto1: 0
+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto3: 0
+clone_color: B-clone allocation score on rhel7-auto4: 0
+clone_color: B:0 allocation score on rhel7-auto1: 1
+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:0 allocation score on rhel7-auto3: 0
+clone_color: B:0 allocation score on rhel7-auto4: 0
+clone_color: B:1 allocation score on rhel7-auto1: 0
+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:1 allocation score on rhel7-auto3: 1
+clone_color: B:1 allocation score on rhel7-auto4: 0
+clone_color: B:2 allocation score on rhel7-auto1: 0
+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:2 allocation score on rhel7-auto3: 0
+clone_color: B:2 allocation score on rhel7-auto4: 1
+clone_color: B:3 allocation score on rhel7-auto1: 0
+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:3 allocation score on rhel7-auto3: 0
+clone_color: B:3 allocation score on rhel7-auto4: 0
+native_color: A:0 allocation score on rhel7-auto1: -INFINITY
+native_color: A:0 allocation score on rhel7-auto2: -INFINITY
+native_color: A:0 allocation score on rhel7-auto3: -INFINITY
+native_color: A:0 allocation score on rhel7-auto4: -INFINITY
+native_color: A:1 allocation score on rhel7-auto1: -INFINITY
+native_color: A:1 allocation score on rhel7-auto2: 1
+native_color: A:1 allocation score on rhel7-auto3: -INFINITY
+native_color: A:1 allocation score on rhel7-auto4: -INFINITY
+native_color: A:2 allocation score on rhel7-auto1: -INFINITY
+native_color: A:2 allocation score on rhel7-auto2: -INFINITY
+native_color: A:2 allocation score on rhel7-auto3: -INFINITY
+native_color: A:2 allocation score on rhel7-auto4: -INFINITY
+native_color: A:3 allocation score on rhel7-auto1: -INFINITY
+native_color: A:3 allocation score on rhel7-auto2: -INFINITY
+native_color: A:3 allocation score on rhel7-auto3: -INFINITY
+native_color: A:3 allocation score on rhel7-auto4: -INFINITY
+native_color: B:0 allocation score on rhel7-auto1: 1
+native_color: B:0 allocation score on rhel7-auto2: -INFINITY
+native_color: B:0 allocation score on rhel7-auto3: -INFINITY
+native_color: B:0 allocation score on rhel7-auto4: -INFINITY
+native_color: B:1 allocation score on rhel7-auto1: 0
+native_color: B:1 allocation score on rhel7-auto2: -INFINITY
+native_color: B:1 allocation score on rhel7-auto3: 1
+native_color: B:1 allocation score on rhel7-auto4: 0
+native_color: B:2 allocation score on rhel7-auto1: 0
+native_color: B:2 allocation score on rhel7-auto2: -INFINITY
+native_color: B:2 allocation score on rhel7-auto3: -INFINITY
+native_color: B:2 allocation score on rhel7-auto4: 1
+native_color: B:3 allocation score on rhel7-auto1: -INFINITY
+native_color: B:3 allocation score on rhel7-auto2: -INFINITY
+native_color: B:3 allocation score on rhel7-auto3: -INFINITY
+native_color: B:3 allocation score on rhel7-auto4: -INFINITY
+native_color: shooter allocation score on rhel7-auto1: 0
+native_color: shooter allocation score on rhel7-auto2: 0
+native_color: shooter allocation score on rhel7-auto3: 0
+native_color: shooter allocation score on rhel7-auto4: 0
diff --git a/pengine/test10/clone-require-all-6.summary b/pengine/test10/clone-require-all-6.summary
new file mode 100644
index 0000000000..6561ea3020
--- /dev/null
+++ b/pengine/test10/clone-require-all-6.summary
@@ -0,0 +1,36 @@
+
+Current cluster status:
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ]
+ Stopped: [ rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Started: [ rhel7-auto1 rhel7-auto3 rhel7-auto4 ]
+ Stopped: [ rhel7-auto2 ]
+
+Transition Summary:
+ * Stop A:0 (rhel7-auto1)
+ * Stop A:2 (rhel7-auto3)
+
+Executing cluster transition:
+ * Pseudo action: A-clone_stop_0
+ * Resource action: A stop on rhel7-auto1
+ * Resource action: A stop on rhel7-auto3
+ * Pseudo action: A-clone_stopped_0
+ * Pseudo action: A-clone_start_0
+ * Pseudo action: all_stopped
+ * Pseudo action: A-clone_running_0
+
+Revised cluster status:
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto2 ]
+ Stopped: [ rhel7-auto1 rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Started: [ rhel7-auto1 rhel7-auto3 rhel7-auto4 ]
+ Stopped: [ rhel7-auto2 ]
+
diff --git a/pengine/test10/clone-require-all-6.xml b/pengine/test10/clone-require-all-6.xml
new file mode 100644
index 0000000000..5222b337c8
--- /dev/null
+++ b/pengine/test10/clone-require-all-6.xml
@@ -0,0 +1,153 @@
+<cib crm_feature_set="3.0.9" validate-with="pacemaker-2.3" epoch="17" num_updates="10" admin_epoch="0" cib-last-written="Mon Jan 5 17:40:52 2015" have-quorum="1" dc-uuid="2">
+ <configuration>
+ <crm_config>
+ <cluster_property_set id="cib-bootstrap-options">
+ <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
+ <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.12-a14efad"/>
+ <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
+ <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="phd"/>
+ </cluster_property_set>
+ </crm_config>
+ <nodes>
+ <node id="1" uname="rhel7-auto1"/>
+ <node id="2" uname="rhel7-auto2"/>
+ <node id="3" uname="rhel7-auto3"/>
+ <node id="4" uname="rhel7-auto4"/>
+ </nodes>
+ <resources>
+ <primitive class="stonith" id="shooter" type="fence_xvm">
+ <instance_attributes id="shooter-instance_attributes"/>
+ <operations>
+ <op id="shooter-monitor-interval-60s" interval="60s" name="monitor"/>
+ </operations>
+ </primitive>
+ <clone id="A-clone">
+ <primitive class="ocf" id="A" provider="heartbeat" type="Dummy">
+ <instance_attributes id="A-instance_attributes"/>
+ <operations>
+ <op id="A-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="A-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="A-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="A-clone-meta">
+ <nvpair id="A-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ <clone id="B-clone">
+ <primitive class="ocf" id="B" provider="heartbeat" type="Dummy">
+ <instance_attributes id="B-instance_attributes"/>
+ <operations>
+ <op id="B-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="B-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="B-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="B-clone-meta">
+ <nvpair id="B-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ </resources>
+ <constraints>
+ <rsc_location id="location-A-clone-rhel7-auto4--INFINITY" node="rhel7-auto4" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-A-clone-rhel7-auto3--INFINITY" node="rhel7-auto3" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-A-clone-rhel7-auto1--INFINITY" node="rhel7-auto1" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-B-clone-rhel7-auto2--INFINITY" node="rhel7-auto2" rsc="B-clone" score="-INFINITY"/>
+ <rsc_order require-all="false" first="A-clone" first-action="start" id="order-A-clone-B-clone-mandatory" then="B-clone" then-action="start"/>
+ </constraints>
+ </configuration>
+ <status>
+ <node_state id="1" uname="rhel7-auto1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="1">
+ <instance_attributes id="status-1">
+ <nvpair id="status-1-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-1-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="1">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="6" rc-code="0" op-status="0" interval="0" last-run="1420497434" last-rc-change="1420497434" exec-time="84" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ <lrm_rsc_op id="shooter_monitor_60000" operation_key="shooter_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="7" rc-code="0" op-status="0" interval="60000" last-rc-change="1420497434" exec-time="62" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="17:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;17:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="12" rc-code="0" op-status="0" interval="0" last-run="1420497496" last-rc-change="1420497496" exec-time="21" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="18:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;18:6:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="13" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497496" exec-time="19" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_start_0" operation="start" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="22" rc-code="0" op-status="0" interval="0" last-run="1420580294" last-rc-change="1420580294" exec-time="0" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420580294" exec-time="0" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="2" uname="rhel7-auto2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="2">
+ <instance_attributes id="status-2">
+ <nvpair id="status-2-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-2-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="2">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="14:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;14:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="10" rc-code="0" op-status="0" interval="0" last-run="1420497495" last-rc-change="1420497495" exec-time="23" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="15:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;15:5:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="11" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497495" exec-time="20" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497555" last-rc-change="1420497555" exec-time="27" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="21" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="3" uname="rhel7-auto3" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="3">
+ <instance_attributes id="status-3">
+ <nvpair id="status-3-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-3-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="3">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="20:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;20:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="20" rc-code="0" op-status="0" interval="0" last-run="1420580294" last-rc-change="1420580294" exec-time="0" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="21:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;21:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="21" rc-code="0" op-status="0" interval="10000" last-rc-change="1420580294" exec-time="0" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_start_0" operation="start" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="22" rc-code="0" op-status="0" interval="0" last-run="1420580294" last-rc-change="1420580294" exec-time="0" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420580294" exec-time="0" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="4" uname="rhel7-auto4" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="4">
+ <instance_attributes id="status-4">
+ <nvpair id="status-4-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-4-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="4">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497431" last-rc-change="1420497431" exec-time="987" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="23:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;23:9:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497545" last-rc-change="1420497545" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_start_0" operation="start" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;22:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="22" rc-code="0" op-status="0" interval="0" last-run="1420580294" last-rc-change="1420580294" exec-time="0" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;23:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420580294" exec-time="0" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ </status>
+</cib>
diff --git a/pengine/test10/clone-require-all-7.dot b/pengine/test10/clone-require-all-7.dot
new file mode 100644
index 0000000000..baa87a29f2
--- /dev/null
+++ b/pengine/test10/clone-require-all-7.dot
@@ -0,0 +1,51 @@
+ digraph "g" {
+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_start_0" -> "A-clone_running_0" [ style = bold]
+"A-clone_start_0" -> "A:0_start_0 rhel7-auto2" [ style = bold]
+"A-clone_start_0" -> "A:1_start_0 rhel7-auto1" [ style = bold]
+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"A:0_monitor_0 rhel7-auto2" -> "probe_complete rhel7-auto2" [ style = bold]
+"A:0_monitor_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"]
+"A:0_monitor_0 rhel7-auto3" -> "probe_complete rhel7-auto3" [ style = bold]
+"A:0_monitor_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"A:0_monitor_0 rhel7-auto4" -> "probe_complete rhel7-auto4" [ style = bold]
+"A:0_monitor_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"A:0_monitor_10000 rhel7-auto2" [ style=bold color="green" fontcolor="black"]
+"A:0_start_0 rhel7-auto2" -> "A-clone_running_0" [ style = bold]
+"A:0_start_0 rhel7-auto2" -> "A:0_monitor_10000 rhel7-auto2" [ style = bold]
+"A:0_start_0 rhel7-auto2" -> "clone-one-or-more:order-A-clone-B-clone-mandatory" [ style = bold]
+"A:0_start_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"]
+"A:1_monitor_0 rhel7-auto1" -> "probe_complete rhel7-auto1" [ style = bold]
+"A:1_monitor_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"A:1_monitor_10000 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"A:1_start_0 rhel7-auto1" -> "A-clone_running_0" [ style = bold]
+"A:1_start_0 rhel7-auto1" -> "A:1_monitor_10000 rhel7-auto1" [ style = bold]
+"A:1_start_0 rhel7-auto1" -> "clone-one-or-more:order-A-clone-B-clone-mandatory" [ style = bold]
+"A:1_start_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"B-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"B-clone_start_0" -> "B-clone_running_0" [ style = bold]
+"B-clone_start_0" -> "B:1_start_0 rhel7-auto4" [ style = bold]
+"B-clone_start_0" -> "B_start_0 rhel7-auto3" [ style = bold]
+"B-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"B:1_monitor_10000 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"B:1_start_0 rhel7-auto4" -> "B-clone_running_0" [ style = bold]
+"B:1_start_0 rhel7-auto4" -> "B:1_monitor_10000 rhel7-auto4" [ style = bold]
+"B:1_start_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"B_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"B_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = bold]
+"B_start_0 rhel7-auto3" -> "B_monitor_10000 rhel7-auto3" [ style = bold]
+"B_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"clone-one-or-more:order-A-clone-B-clone-mandatory" -> "B-clone_start_0" [ style = bold]
+"clone-one-or-more:order-A-clone-B-clone-mandatory" [ style=bold color="green" fontcolor="orange"]
+"probe_complete rhel7-auto1" -> "probe_complete" [ style = bold]
+"probe_complete rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"probe_complete rhel7-auto2" -> "probe_complete" [ style = bold]
+"probe_complete rhel7-auto2" [ style=bold color="green" fontcolor="black"]
+"probe_complete rhel7-auto3" -> "probe_complete" [ style = bold]
+"probe_complete rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"probe_complete rhel7-auto4" -> "probe_complete" [ style = bold]
+"probe_complete rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"probe_complete" -> "A:0_start_0 rhel7-auto2" [ style = bold]
+"probe_complete" -> "A:1_start_0 rhel7-auto1" [ style = bold]
+"probe_complete" [ style=bold color="green" fontcolor="orange"]
+}
diff --git a/pengine/test10/clone-require-all-7.exp b/pengine/test10/clone-require-all-7.exp
new file mode 100644
index 0000000000..d37a82f943
--- /dev/null
+++ b/pengine/test10/clone-require-all-7.exp
@@ -0,0 +1,288 @@
+<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY" transition_id="0">
+ <synapse id="0">
+ <action_set>
+ <rsc_op id="16" operation="monitor" operation_key="A:0_monitor_10000" on_node="rhel7-auto2" on_node_uuid="2">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="15" operation="start" operation_key="A:0_start_0" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="1">
+ <action_set>
+ <rsc_op id="15" operation="start" operation_key="A:0_start_0" on_node="rhel7-auto2" on_node_uuid="2">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="4" operation="probe_complete" operation_key="probe_complete"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="19" operation="start" operation_key="A-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="2">
+ <action_set>
+ <rsc_op id="12" operation="monitor" operation_key="A:0_monitor_0" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_op_target_rc="7" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="3">
+ <action_set>
+ <rsc_op id="10" operation="monitor" operation_key="A:0_monitor_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_op_target_rc="7" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="4">
+ <action_set>
+ <rsc_op id="8" operation="monitor" operation_key="A:0_monitor_0" on_node="rhel7-auto2" on_node_uuid="2">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_op_target_rc="7" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="5">
+ <action_set>
+ <rsc_op id="18" operation="monitor" operation_key="A:1_monitor_10000" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="A" long-id="A:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="A:1_start_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="6">
+ <action_set>
+ <rsc_op id="17" operation="start" operation_key="A:1_start_0" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="A" long-id="A:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="4" operation="probe_complete" operation_key="probe_complete"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="19" operation="start" operation_key="A-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="7">
+ <action_set>
+ <rsc_op id="6" operation="monitor" operation_key="A:1_monitor_0" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="A" long-id="A:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_op_target_rc="7" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="8" priority="1000000">
+ <action_set>
+ <pseudo_event id="20" operation="running" operation_key="A-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="15" operation="start" operation_key="A:0_start_0" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="A:1_start_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="19" operation="start" operation_key="A-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="9">
+ <action_set>
+ <pseudo_event id="19" operation="start" operation_key="A-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="10">
+ <action_set>
+ <rsc_op id="24" operation="monitor" operation_key="B_monitor_10000" internal_operation_key="B:0_monitor_10000" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="23" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="11">
+ <action_set>
+ <rsc_op id="23" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="27" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="12">
+ <action_set>
+ <rsc_op id="26" operation="monitor" operation_key="B:1_monitor_10000" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="B" long-id="B:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="25" operation="start" operation_key="B:1_start_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="13">
+ <action_set>
+ <rsc_op id="25" operation="start" operation_key="B:1_start_0" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="B" long-id="B:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="27" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="14" priority="1000000">
+ <action_set>
+ <pseudo_event id="28" operation="running" operation_key="B-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="23" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="25" operation="start" operation_key="B:1_start_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="27" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="15">
+ <action_set>
+ <pseudo_event id="27" operation="start" operation_key="B-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="2" operation="clone-one-or-more:order-A-clone-B-clone-mandatory" operation_key="clone-one-or-more:order-A-clone-B-clone-mandatory"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="16" priority="1000000">
+ <action_set>
+ <rsc_op id="11" operation="probe_complete" operation_key="probe_complete-rhel7-auto4" on_node="rhel7-auto4" on_node_uuid="4">
+ <attributes CRM_meta_op_no_wait="true" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="12" operation="monitor" operation_key="A:0_monitor_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="17" priority="1000000">
+ <action_set>
+ <rsc_op id="9" operation="probe_complete" operation_key="probe_complete-rhel7-auto3" on_node="rhel7-auto3" on_node_uuid="3">
+ <attributes CRM_meta_op_no_wait="true" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="10" operation="monitor" operation_key="A:0_monitor_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="18" priority="1000000">
+ <action_set>
+ <rsc_op id="7" operation="probe_complete" operation_key="probe_complete-rhel7-auto2" on_node="rhel7-auto2" on_node_uuid="2">
+ <attributes CRM_meta_op_no_wait="true" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="8" operation="monitor" operation_key="A:0_monitor_0" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="19" priority="1000000">
+ <action_set>
+ <rsc_op id="5" operation="probe_complete" operation_key="probe_complete-rhel7-auto1" on_node="rhel7-auto1" on_node_uuid="1">
+ <attributes CRM_meta_op_no_wait="true" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="6" operation="monitor" operation_key="A:1_monitor_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="20">
+ <action_set>
+ <pseudo_event id="4" operation="probe_complete" operation_key="probe_complete">
+ <attributes />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="5" operation="probe_complete" operation_key="probe_complete-rhel7-auto1" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="7" operation="probe_complete" operation_key="probe_complete-rhel7-auto2" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="9" operation="probe_complete" operation_key="probe_complete-rhel7-auto3" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="11" operation="probe_complete" operation_key="probe_complete-rhel7-auto4" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="21">
+ <action_set>
+ <pseudo_event id="2" operation="clone-one-or-more:order-A-clone-B-clone-mandatory" operation_key="clone-one-or-more:order-A-clone-B-clone-mandatory">
+ <attributes />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="15" operation="start" operation_key="A:0_start_0" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="A:1_start_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ </inputs>
+ </synapse>
+</transition_graph>
diff --git a/pengine/test10/clone-require-all-7.scores b/pengine/test10/clone-require-all-7.scores
new file mode 100644
index 0000000000..8c61fd10fa
--- /dev/null
+++ b/pengine/test10/clone-require-all-7.scores
@@ -0,0 +1,77 @@
+Allocation scores:
+clone_color: A-clone allocation score on rhel7-auto1: 0
+clone_color: A-clone allocation score on rhel7-auto2: 0
+clone_color: A-clone allocation score on rhel7-auto3: -INFINITY
+clone_color: A-clone allocation score on rhel7-auto4: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto1: 0
+clone_color: A:0 allocation score on rhel7-auto2: 0
+clone_color: A:0 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto1: 0
+clone_color: A:1 allocation score on rhel7-auto2: 0
+clone_color: A:1 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto1: 0
+clone_color: A:2 allocation score on rhel7-auto2: 0
+clone_color: A:2 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto4: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto1: 0
+clone_color: A:3 allocation score on rhel7-auto2: 0
+clone_color: A:3 allocation score on rhel7-auto3: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto4: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto1: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto2: -INFINITY
+clone_color: B-clone allocation score on rhel7-auto3: 0
+clone_color: B-clone allocation score on rhel7-auto4: 0
+clone_color: B:0 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:0 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:0 allocation score on rhel7-auto3: 0
+clone_color: B:0 allocation score on rhel7-auto4: 0
+clone_color: B:1 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:1 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:1 allocation score on rhel7-auto3: 0
+clone_color: B:1 allocation score on rhel7-auto4: 0
+clone_color: B:2 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:2 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:2 allocation score on rhel7-auto3: 0
+clone_color: B:2 allocation score on rhel7-auto4: 0
+clone_color: B:3 allocation score on rhel7-auto1: -INFINITY
+clone_color: B:3 allocation score on rhel7-auto2: -INFINITY
+clone_color: B:3 allocation score on rhel7-auto3: 0
+clone_color: B:3 allocation score on rhel7-auto4: 0
+native_color: A:0 allocation score on rhel7-auto1: 0
+native_color: A:0 allocation score on rhel7-auto2: 0
+native_color: A:0 allocation score on rhel7-auto3: -INFINITY
+native_color: A:0 allocation score on rhel7-auto4: -INFINITY
+native_color: A:1 allocation score on rhel7-auto1: 0
+native_color: A:1 allocation score on rhel7-auto2: -INFINITY
+native_color: A:1 allocation score on rhel7-auto3: -INFINITY
+native_color: A:1 allocation score on rhel7-auto4: -INFINITY
+native_color: A:2 allocation score on rhel7-auto1: -INFINITY
+native_color: A:2 allocation score on rhel7-auto2: -INFINITY
+native_color: A:2 allocation score on rhel7-auto3: -INFINITY
+native_color: A:2 allocation score on rhel7-auto4: -INFINITY
+native_color: A:3 allocation score on rhel7-auto1: -INFINITY
+native_color: A:3 allocation score on rhel7-auto2: -INFINITY
+native_color: A:3 allocation score on rhel7-auto3: -INFINITY
+native_color: A:3 allocation score on rhel7-auto4: -INFINITY
+native_color: B:0 allocation score on rhel7-auto1: -INFINITY
+native_color: B:0 allocation score on rhel7-auto2: -INFINITY
+native_color: B:0 allocation score on rhel7-auto3: 0
+native_color: B:0 allocation score on rhel7-auto4: 0
+native_color: B:1 allocation score on rhel7-auto1: -INFINITY
+native_color: B:1 allocation score on rhel7-auto2: -INFINITY
+native_color: B:1 allocation score on rhel7-auto3: -INFINITY
+native_color: B:1 allocation score on rhel7-auto4: 0
+native_color: B:2 allocation score on rhel7-auto1: -INFINITY
+native_color: B:2 allocation score on rhel7-auto2: -INFINITY
+native_color: B:2 allocation score on rhel7-auto3: -INFINITY
+native_color: B:2 allocation score on rhel7-auto4: -INFINITY
+native_color: B:3 allocation score on rhel7-auto1: -INFINITY
+native_color: B:3 allocation score on rhel7-auto2: -INFINITY
+native_color: B:3 allocation score on rhel7-auto3: -INFINITY
+native_color: B:3 allocation score on rhel7-auto4: -INFINITY
+native_color: shooter allocation score on rhel7-auto1: 0
+native_color: shooter allocation score on rhel7-auto2: 0
+native_color: shooter allocation score on rhel7-auto3: 0
+native_color: shooter allocation score on rhel7-auto4: 0
diff --git a/pengine/test10/clone-require-all-7.summary b/pengine/test10/clone-require-all-7.summary
new file mode 100644
index 0000000000..411f738e5d
--- /dev/null
+++ b/pengine/test10/clone-require-all-7.summary
@@ -0,0 +1,47 @@
+
+Current cluster status:
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+Transition Summary:
+ * Start A:0 (rhel7-auto2)
+ * Start A:1 (rhel7-auto1)
+ * Start B:0 (rhel7-auto3)
+ * Start B:1 (rhel7-auto4)
+
+Executing cluster transition:
+ * Resource action: A:0 monitor on rhel7-auto4
+ * Resource action: A:0 monitor on rhel7-auto3
+ * Resource action: A:0 monitor on rhel7-auto2
+ * Resource action: A:1 monitor on rhel7-auto1
+ * Pseudo action: A-clone_start_0
+ * Pseudo action: probe_complete
+ * Resource action: A:0 start on rhel7-auto2
+ * Resource action: A:1 start on rhel7-auto1
+ * Pseudo action: A-clone_running_0
+ * Pseudo action: clone-one-or-more:order-A-clone-B-clone-mandatory
+ * Resource action: A:0 monitor=10000 on rhel7-auto2
+ * Resource action: A:1 monitor=10000 on rhel7-auto1
+ * Pseudo action: B-clone_start_0
+ * Resource action: B start on rhel7-auto3
+ * Resource action: B start on rhel7-auto4
+ * Pseudo action: B-clone_running_0
+ * Resource action: B monitor=10000 on rhel7-auto3
+ * Resource action: B monitor=10000 on rhel7-auto4
+
+Revised cluster status:
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto1 rhel7-auto2 ]
+ Stopped: [ rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Started: [ rhel7-auto3 rhel7-auto4 ]
+ Stopped: [ rhel7-auto1 rhel7-auto2 ]
+
diff --git a/pengine/test10/clone-require-all-7.xml b/pengine/test10/clone-require-all-7.xml
new file mode 100644
index 0000000000..6aea47b643
--- /dev/null
+++ b/pengine/test10/clone-require-all-7.xml
@@ -0,0 +1,138 @@
+<cib crm_feature_set="3.0.9" validate-with="pacemaker-2.3" epoch="17" num_updates="2" admin_epoch="0" cib-last-written="Mon Jan 5 17:40:52 2015" have-quorum="1" dc-uuid="2">
+ <configuration>
+ <crm_config>
+ <cluster_property_set id="cib-bootstrap-options">
+ <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
+ <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.12-a14efad"/>
+ <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
+ <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="phd"/>
+ </cluster_property_set>
+ </crm_config>
+ <nodes>
+ <node id="1" uname="rhel7-auto1"/>
+ <node id="2" uname="rhel7-auto2"/>
+ <node id="3" uname="rhel7-auto3"/>
+ <node id="4" uname="rhel7-auto4"/>
+ </nodes>
+ <resources>
+ <primitive class="stonith" id="shooter" type="fence_xvm">
+ <instance_attributes id="shooter-instance_attributes"/>
+ <operations>
+ <op id="shooter-monitor-interval-60s" interval="60s" name="monitor"/>
+ </operations>
+ </primitive>
+ <clone id="A-clone">
+ <primitive class="ocf" id="A" provider="heartbeat" type="Dummy">
+ <instance_attributes id="A-instance_attributes"/>
+ <operations>
+ <op id="A-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="A-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="A-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="A-clone-meta">
+ <nvpair id="A-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ <clone id="B-clone">
+ <primitive class="ocf" id="B" provider="heartbeat" type="Dummy">
+ <instance_attributes id="B-instance_attributes"/>
+ <operations>
+ <op id="B-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="B-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="B-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="B-clone-meta">
+ <nvpair id="B-clone-meta_attributes-interleave" name="interleave" value="true"/>
+ </meta_attributes>
+ </clone>
+ </resources>
+ <constraints>
+ <rsc_location id="location-A-clone-rhel7-auto3--INFINITY" node="rhel7-auto3" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-A-clone-rhel7-auto4--INFINITY" node="rhel7-auto4" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-B-clone-rhel7-auto1--INFINITY" node="rhel7-auto1" rsc="B-clone" score="-INFINITY"/>
+ <rsc_location id="location-B-clone-rhel7-auto2--INFINITY" node="rhel7-auto2" rsc="B-clone" score="-INFINITY"/>
+ <rsc_order require-all="false" first="A-clone" first-action="start" id="order-A-clone-B-clone-mandatory" then="B-clone" then-action="start"/>
+ </constraints>
+ </configuration>
+ <status>
+ <node_state id="1" uname="rhel7-auto1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="1">
+ <instance_attributes id="status-1">
+ <nvpair id="status-1-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-1-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="1">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;11:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="6" rc-code="0" op-status="0" interval="0" last-run="1420497434" last-rc-change="1420497434" exec-time="84" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ <lrm_rsc_op id="shooter_monitor_60000" operation_key="shooter_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;12:4:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="7" rc-code="0" op-status="0" interval="60000" last-rc-change="1420497434" exec-time="62" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="24:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;24:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497555" last-rc-change="1420497555" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="34:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;34:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497505" exec-time="24" queue-time="1" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="2" uname="rhel7-auto2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="2">
+ <instance_attributes id="status-2">
+ <nvpair id="status-2-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-2-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="2">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;6:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;25:10:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="19" rc-code="0" op-status="0" interval="0" last-run="1420497555" last-rc-change="1420497555" exec-time="27" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;31:7:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="21" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="3" uname="rhel7-auto3" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="3">
+ <instance_attributes id="status-3">
+ <nvpair id="status-3-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-3-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="3">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;8:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497432" last-rc-change="1420497432" exec-time="991" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="22:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;22:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497653" last-rc-change="1420497653" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="30:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;30:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="22" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="4" uname="rhel7-auto4" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="4">
+ <instance_attributes id="status-4">
+ <nvpair id="status-4-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-4-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="4">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:7;10:4:7:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420497431" last-rc-change="1420497431" exec-time="987" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="24:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;24:13:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="21" rc-code="0" op-status="0" interval="0" last-run="1420497652" last-rc-change="1420497652" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="32:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" transition-magic="0:0;32:8:0:cae8134b-6333-43f4-a950-53bfe72762c8" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420497504" exec-time="28" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ </status>
+</cib>
diff --git a/pengine/test10/clone-require-all-no-interleave-1.dot b/pengine/test10/clone-require-all-no-interleave-1.dot
new file mode 100644
index 0000000000..d03703b627
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-1.dot
@@ -0,0 +1,40 @@
+ digraph "g" {
+"A-clone_running_0" -> "B-clone_start_0" [ style = bold]
+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_start_0" -> "A-clone_running_0" [ style = bold]
+"A-clone_start_0" -> "A_start_0 rhel7-auto3" [ style = bold]
+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"A_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"A_start_0 rhel7-auto3" -> "A-clone_running_0" [ style = bold]
+"A_start_0 rhel7-auto3" -> "A_monitor_10000 rhel7-auto3" [ style = bold]
+"A_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"B-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"B-clone_start_0" -> "B-clone_running_0" [ style = bold]
+"B-clone_start_0" -> "B_start_0 rhel7-auto3" [ style = bold]
+"B-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"B_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"B_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = bold]
+"B_start_0 rhel7-auto3" -> "B_monitor_10000 rhel7-auto3" [ style = bold]
+"B_start_0 rhel7-auto3" -> "clone-one-or-more:order-B-clone-C-clone-mandatory" [ style = bold]
+"B_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"C-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"C-clone_start_0" -> "C-clone_running_0" [ style = bold]
+"C-clone_start_0" -> "C:1_start_0 rhel7-auto1" [ style = bold]
+"C-clone_start_0" -> "C:2_start_0 rhel7-auto3" [ style = bold]
+"C-clone_start_0" -> "C_start_0 rhel7-auto2" [ style = bold]
+"C-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"C:1_monitor_10000 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"C:1_start_0 rhel7-auto1" -> "C-clone_running_0" [ style = bold]
+"C:1_start_0 rhel7-auto1" -> "C:1_monitor_10000 rhel7-auto1" [ style = bold]
+"C:1_start_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"C:2_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"C:2_start_0 rhel7-auto3" -> "C-clone_running_0" [ style = bold]
+"C:2_start_0 rhel7-auto3" -> "C:2_monitor_10000 rhel7-auto3" [ style = bold]
+"C:2_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"C_monitor_10000 rhel7-auto2" [ style=bold color="green" fontcolor="black"]
+"C_start_0 rhel7-auto2" -> "C-clone_running_0" [ style = bold]
+"C_start_0 rhel7-auto2" -> "C_monitor_10000 rhel7-auto2" [ style = bold]
+"C_start_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"]
+"clone-one-or-more:order-B-clone-C-clone-mandatory" -> "C-clone_start_0" [ style = bold]
+"clone-one-or-more:order-B-clone-C-clone-mandatory" [ style=bold color="green" fontcolor="orange"]
+}
diff --git a/pengine/test10/clone-require-all-no-interleave-1.exp b/pengine/test10/clone-require-all-no-interleave-1.exp
new file mode 100644
index 0000000000..7048f513ec
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-1.exp
@@ -0,0 +1,227 @@
+<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY" transition_id="0">
+ <synapse id="0">
+ <action_set>
+ <rsc_op id="12" operation="monitor" operation_key="A_monitor_10000" internal_operation_key="A:0_monitor_10000" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="11" operation="start" operation_key="A_start_0" internal_operation_key="A:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="1">
+ <action_set>
+ <rsc_op id="11" operation="start" operation_key="A_start_0" internal_operation_key="A:0_start_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="13" operation="start" operation_key="A-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="2" priority="1000000">
+ <action_set>
+ <pseudo_event id="14" operation="running" operation_key="A-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="11" operation="start" operation_key="A_start_0" internal_operation_key="A:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="13" operation="start" operation_key="A-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="3">
+ <action_set>
+ <pseudo_event id="13" operation="start" operation_key="A-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="4">
+ <action_set>
+ <rsc_op id="18" operation="monitor" operation_key="B_monitor_10000" internal_operation_key="B:0_monitor_10000" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="5">
+ <action_set>
+ <rsc_op id="17" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="19" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="6" priority="1000000">
+ <action_set>
+ <pseudo_event id="20" operation="running" operation_key="B-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="19" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="7">
+ <action_set>
+ <pseudo_event id="19" operation="start" operation_key="B-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="14" operation="running" operation_key="A-clone_running_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="8">
+ <action_set>
+ <rsc_op id="24" operation="monitor" operation_key="C_monitor_10000" internal_operation_key="C:0_monitor_10000" on_node="rhel7-auto2" on_node_uuid="2">
+ <primitive id="C" long-id="C:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="23" operation="start" operation_key="C_start_0" internal_operation_key="C:0_start_0" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="9">
+ <action_set>
+ <rsc_op id="23" operation="start" operation_key="C_start_0" internal_operation_key="C:0_start_0" on_node="rhel7-auto2" on_node_uuid="2">
+ <primitive id="C" long-id="C:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="29" operation="start" operation_key="C-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="10">
+ <action_set>
+ <rsc_op id="26" operation="monitor" operation_key="C:1_monitor_10000" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="C" long-id="C:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="25" operation="start" operation_key="C:1_start_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="11">
+ <action_set>
+ <rsc_op id="25" operation="start" operation_key="C:1_start_0" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="C" long-id="C:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="29" operation="start" operation_key="C-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="12">
+ <action_set>
+ <rsc_op id="28" operation="monitor" operation_key="C:2_monitor_10000" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="C" long-id="C:2" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="2" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="27" operation="start" operation_key="C:2_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="13">
+ <action_set>
+ <rsc_op id="27" operation="start" operation_key="C:2_start_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="C" long-id="C:2" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="2" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="29" operation="start" operation_key="C-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="14" priority="1000000">
+ <action_set>
+ <pseudo_event id="30" operation="running" operation_key="C-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="23" operation="start" operation_key="C_start_0" internal_operation_key="C:0_start_0" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="25" operation="start" operation_key="C:1_start_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="27" operation="start" operation_key="C:2_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="29" operation="start" operation_key="C-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="15">
+ <action_set>
+ <pseudo_event id="29" operation="start" operation_key="C-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="2" operation="clone-one-or-more:order-B-clone-C-clone-mandatory" operation_key="clone-one-or-more:order-B-clone-C-clone-mandatory"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="16">
+ <action_set>
+ <pseudo_event id="2" operation="clone-one-or-more:order-B-clone-C-clone-mandatory" operation_key="clone-one-or-more:order-B-clone-C-clone-mandatory">
+ <attributes />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+</transition_graph>
diff --git a/pengine/test10/clone-require-all-no-interleave-1.scores b/pengine/test10/clone-require-all-no-interleave-1.scores
new file mode 100644
index 0000000000..f6d3232ea0
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-1.scores
@@ -0,0 +1,113 @@
+Allocation scores:
+clone_color: A-clone allocation score on rhel7-auto1: -INFINITY
+clone_color: A-clone allocation score on rhel7-auto2: -INFINITY
+clone_color: A-clone allocation score on rhel7-auto3: 0
+clone_color: A-clone allocation score on rhel7-auto4: 0
+clone_color: A:0 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto2: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto3: 0
+clone_color: A:0 allocation score on rhel7-auto4: 0
+clone_color: A:1 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto2: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto3: 0
+clone_color: A:1 allocation score on rhel7-auto4: 0
+clone_color: A:2 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto2: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto3: 0
+clone_color: A:2 allocation score on rhel7-auto4: 0
+clone_color: A:3 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto2: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto3: 0
+clone_color: A:3 allocation score on rhel7-auto4: 0
+clone_color: B-clone allocation score on rhel7-auto1: 0
+clone_color: B-clone allocation score on rhel7-auto2: 0
+clone_color: B-clone allocation score on rhel7-auto3: 0
+clone_color: B-clone allocation score on rhel7-auto4: 0
+clone_color: B:0 allocation score on rhel7-auto1: 0
+clone_color: B:0 allocation score on rhel7-auto2: 0
+clone_color: B:0 allocation score on rhel7-auto3: 0
+clone_color: B:0 allocation score on rhel7-auto4: 0
+clone_color: B:1 allocation score on rhel7-auto1: 0
+clone_color: B:1 allocation score on rhel7-auto2: 0
+clone_color: B:1 allocation score on rhel7-auto3: 0
+clone_color: B:1 allocation score on rhel7-auto4: 0
+clone_color: B:2 allocation score on rhel7-auto1: 0
+clone_color: B:2 allocation score on rhel7-auto2: 0
+clone_color: B:2 allocation score on rhel7-auto3: 0
+clone_color: B:2 allocation score on rhel7-auto4: 0
+clone_color: B:3 allocation score on rhel7-auto1: 0
+clone_color: B:3 allocation score on rhel7-auto2: 0
+clone_color: B:3 allocation score on rhel7-auto3: 0
+clone_color: B:3 allocation score on rhel7-auto4: 0
+clone_color: C-clone allocation score on rhel7-auto1: 0
+clone_color: C-clone allocation score on rhel7-auto2: 0
+clone_color: C-clone allocation score on rhel7-auto3: 0
+clone_color: C-clone allocation score on rhel7-auto4: 0
+clone_color: C:0 allocation score on rhel7-auto1: 0
+clone_color: C:0 allocation score on rhel7-auto2: 0
+clone_color: C:0 allocation score on rhel7-auto3: 0
+clone_color: C:0 allocation score on rhel7-auto4: 0
+clone_color: C:1 allocation score on rhel7-auto1: 0
+clone_color: C:1 allocation score on rhel7-auto2: 0
+clone_color: C:1 allocation score on rhel7-auto3: 0
+clone_color: C:1 allocation score on rhel7-auto4: 0
+clone_color: C:2 allocation score on rhel7-auto1: 0
+clone_color: C:2 allocation score on rhel7-auto2: 0
+clone_color: C:2 allocation score on rhel7-auto3: 0
+clone_color: C:2 allocation score on rhel7-auto4: 0
+clone_color: C:3 allocation score on rhel7-auto1: 0
+clone_color: C:3 allocation score on rhel7-auto2: 0
+clone_color: C:3 allocation score on rhel7-auto3: 0
+clone_color: C:3 allocation score on rhel7-auto4: 0
+native_color: A:0 allocation score on rhel7-auto1: -INFINITY
+native_color: A:0 allocation score on rhel7-auto2: -INFINITY
+native_color: A:0 allocation score on rhel7-auto3: 0
+native_color: A:0 allocation score on rhel7-auto4: -INFINITY
+native_color: A:1 allocation score on rhel7-auto1: -INFINITY
+native_color: A:1 allocation score on rhel7-auto2: -INFINITY
+native_color: A:1 allocation score on rhel7-auto3: -INFINITY
+native_color: A:1 allocation score on rhel7-auto4: -INFINITY
+native_color: A:2 allocation score on rhel7-auto1: -INFINITY
+native_color: A:2 allocation score on rhel7-auto2: -INFINITY
+native_color: A:2 allocation score on rhel7-auto3: -INFINITY
+native_color: A:2 allocation score on rhel7-auto4: -INFINITY
+native_color: A:3 allocation score on rhel7-auto1: -INFINITY
+native_color: A:3 allocation score on rhel7-auto2: -INFINITY
+native_color: A:3 allocation score on rhel7-auto3: -INFINITY
+native_color: A:3 allocation score on rhel7-auto4: -INFINITY
+native_color: B:0 allocation score on rhel7-auto1: -INFINITY
+native_color: B:0 allocation score on rhel7-auto2: -INFINITY
+native_color: B:0 allocation score on rhel7-auto3: 0
+native_color: B:0 allocation score on rhel7-auto4: -INFINITY
+native_color: B:1 allocation score on rhel7-auto1: -INFINITY
+native_color: B:1 allocation score on rhel7-auto2: -INFINITY
+native_color: B:1 allocation score on rhel7-auto3: -INFINITY
+native_color: B:1 allocation score on rhel7-auto4: -INFINITY
+native_color: B:2 allocation score on rhel7-auto1: -INFINITY
+native_color: B:2 allocation score on rhel7-auto2: -INFINITY
+native_color: B:2 allocation score on rhel7-auto3: -INFINITY
+native_color: B:2 allocation score on rhel7-auto4: -INFINITY
+native_color: B:3 allocation score on rhel7-auto1: -INFINITY
+native_color: B:3 allocation score on rhel7-auto2: -INFINITY
+native_color: B:3 allocation score on rhel7-auto3: -INFINITY
+native_color: B:3 allocation score on rhel7-auto4: -INFINITY
+native_color: C:0 allocation score on rhel7-auto1: 0
+native_color: C:0 allocation score on rhel7-auto2: 0
+native_color: C:0 allocation score on rhel7-auto3: 0
+native_color: C:0 allocation score on rhel7-auto4: -INFINITY
+native_color: C:1 allocation score on rhel7-auto1: 0
+native_color: C:1 allocation score on rhel7-auto2: -INFINITY
+native_color: C:1 allocation score on rhel7-auto3: 0
+native_color: C:1 allocation score on rhel7-auto4: -INFINITY
+native_color: C:2 allocation score on rhel7-auto1: -INFINITY
+native_color: C:2 allocation score on rhel7-auto2: -INFINITY
+native_color: C:2 allocation score on rhel7-auto3: 0
+native_color: C:2 allocation score on rhel7-auto4: -INFINITY
+native_color: C:3 allocation score on rhel7-auto1: -INFINITY
+native_color: C:3 allocation score on rhel7-auto2: -INFINITY
+native_color: C:3 allocation score on rhel7-auto3: -INFINITY
+native_color: C:3 allocation score on rhel7-auto4: -INFINITY
+native_color: shooter allocation score on rhel7-auto1: 0
+native_color: shooter allocation score on rhel7-auto2: 0
+native_color: shooter allocation score on rhel7-auto3: 0
+native_color: shooter allocation score on rhel7-auto4: 0
diff --git a/pengine/test10/clone-require-all-no-interleave-1.summary b/pengine/test10/clone-require-all-no-interleave-1.summary
new file mode 100644
index 0000000000..dd4bc99405
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-1.summary
@@ -0,0 +1,54 @@
+
+Current cluster status:
+Node rhel7-auto4 (4): standby
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+ Clone Set: C-clone [C]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+Transition Summary:
+ * Start A:0 (rhel7-auto3)
+ * Start B:0 (rhel7-auto3)
+ * Start C:0 (rhel7-auto2)
+ * Start C:1 (rhel7-auto1)
+ * Start C:2 (rhel7-auto3)
+
+Executing cluster transition:
+ * Pseudo action: A-clone_start_0
+ * Resource action: A start on rhel7-auto3
+ * Pseudo action: A-clone_running_0
+ * Pseudo action: B-clone_start_0
+ * Resource action: A monitor=10000 on rhel7-auto3
+ * Resource action: B start on rhel7-auto3
+ * Pseudo action: B-clone_running_0
+ * Pseudo action: clone-one-or-more:order-B-clone-C-clone-mandatory
+ * Resource action: B monitor=10000 on rhel7-auto3
+ * Pseudo action: C-clone_start_0
+ * Resource action: C start on rhel7-auto2
+ * Resource action: C start on rhel7-auto1
+ * Resource action: C start on rhel7-auto3
+ * Pseudo action: C-clone_running_0
+ * Resource action: C monitor=10000 on rhel7-auto2
+ * Resource action: C monitor=10000 on rhel7-auto1
+ * Resource action: C monitor=10000 on rhel7-auto3
+
+Revised cluster status:
+Node rhel7-auto4 (4): standby
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto3 ]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Started: [ rhel7-auto3 ]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ]
+ Clone Set: C-clone [C]
+ Started: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ]
+ Stopped: [ rhel7-auto4 ]
+
diff --git a/pengine/test10/clone-require-all-no-interleave-1.xml b/pengine/test10/clone-require-all-no-interleave-1.xml
new file mode 100644
index 0000000000..4630f96013
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-1.xml
@@ -0,0 +1,177 @@
+<cib crm_feature_set="3.0.9" validate-with="pacemaker-2.3" epoch="19" num_updates="6" admin_epoch="0" cib-last-written="Wed Jan 7 20:24:31 2015" have-quorum="1" dc-uuid="1">
+ <configuration>
+ <crm_config>
+ <cluster_property_set id="cib-bootstrap-options">
+ <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
+ <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.12-eea796a"/>
+ <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
+ <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="phd"/>
+ </cluster_property_set>
+ </crm_config>
+ <nodes>
+ <node id="1" uname="rhel7-auto1"/>
+ <node id="2" uname="rhel7-auto2"/>
+ <node id="3" uname="rhel7-auto3"/>
+ <node id="4" uname="rhel7-auto4">
+ <instance_attributes id="nodes-4">
+ <nvpair id="nodes-4-standby" name="standby" value="on"/>
+ </instance_attributes>
+ </node>
+ </nodes>
+ <resources>
+ <primitive class="stonith" id="shooter" type="fence_xvm">
+ <instance_attributes id="shooter-instance_attributes"/>
+ <operations>
+ <op id="shooter-monitor-interval-60s" interval="60s" name="monitor"/>
+ </operations>
+ </primitive>
+ <clone id="A-clone">
+ <primitive class="ocf" id="A" provider="heartbeat" type="Dummy">
+ <instance_attributes id="A-instance_attributes"/>
+ <operations>
+ <op id="A-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="A-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="A-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="A-clone-meta"/>
+ </clone>
+ <clone id="B-clone">
+ <primitive class="ocf" id="B" provider="heartbeat" type="Dummy">
+ <instance_attributes id="B-instance_attributes"/>
+ <operations>
+ <op id="B-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="B-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="B-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="B-clone-meta"/>
+ </clone>
+ <clone id="C-clone">
+ <primitive class="ocf" id="C" provider="heartbeat" type="Dummy">
+ <instance_attributes id="C-instance_attributes"/>
+ <operations>
+ <op id="C-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="C-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="C-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="C-clone-meta"/>
+ </clone>
+ </resources>
+ <constraints>
+ <rsc_order first="A-clone" first-action="start" id="order-A-clone-B-clone-mandatory" then="B-clone" then-action="start"/>
+ <rsc_colocation id="colocation-B-clone-A-clone-INFINITY" rsc="B-clone" score="INFINITY" with-rsc="A-clone"/>
+ <rsc_order first="B-clone" first-action="start" id="order-B-clone-C-clone-mandatory" require-all="false" then="C-clone" then-action="start"/>
+ <rsc_location id="location-A-clone-rhel7-auto1--INFINITY" node="rhel7-auto1" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-A-clone-rhel7-auto2--INFINITY" node="rhel7-auto2" rsc="A-clone" score="-INFINITY"/>
+ </constraints>
+ </configuration>
+ <status>
+ <node_state id="4" uname="rhel7-auto4" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="4">
+ <instance_attributes id="status-4">
+ <nvpair id="status-4-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-4-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="4">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="10:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:7;10:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420679798" last-rc-change="1420679798" exec-time="1071" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="17:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;17:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="29" rc-code="0" op-status="0" interval="0" last-run="1420680270" last-rc-change="1420680270" exec-time="21" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="16:5:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;16:5:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="11" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680105" exec-time="21" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="22:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;22:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="27" rc-code="0" op-status="0" interval="0" last-run="1420680270" last-rc-change="1420680270" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="32:7:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;32:7:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680111" exec-time="23" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="C" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="C_last_0" operation_key="C_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="27:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;27:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="25" rc-code="0" op-status="0" interval="0" last-run="1420680270" last-rc-change="1420680270" exec-time="21" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="C_monitor_10000" operation_key="C_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="48:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;48:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680120" exec-time="22" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="3" uname="rhel7-auto3" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="3">
+ <instance_attributes id="status-3">
+ <nvpair id="status-3-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-3-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="3">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="8:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:7;8:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420679799" last-rc-change="1420679799" exec-time="1070" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="21:15:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;21:15:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="27" rc-code="0" op-status="0" interval="0" last-run="1420680244" last-rc-change="1420680244" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="14:5:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;14:5:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="11" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680105" exec-time="21" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="28:15:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;28:15:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="25" rc-code="0" op-status="0" interval="0" last-run="1420680244" last-rc-change="1420680244" exec-time="23" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="30:7:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;30:7:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680112" exec-time="23" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="C" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="C_last_0" operation_key="C_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="28:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;28:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="29" rc-code="0" op-status="0" interval="0" last-run="1420680271" last-rc-change="1420680271" exec-time="21" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="C_monitor_10000" operation_key="C_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="46:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;46:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680121" exec-time="8" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="1" uname="rhel7-auto1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="1">
+ <instance_attributes id="status-1">
+ <nvpair id="status-1-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-1-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="1">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="11:3:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;11:3:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="6" rc-code="0" op-status="0" interval="0" last-run="1420679801" last-rc-change="1420679801" exec-time="88" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ <lrm_rsc_op id="shooter_monitor_60000" operation_key="shooter_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="12:3:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;12:3:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="7" rc-code="0" op-status="0" interval="60000" last-rc-change="1420679801" exec-time="64" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="27:13:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;27:13:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="29" rc-code="0" op-status="0" interval="0" last-run="1420680232" last-rc-change="1420680232" exec-time="33" queue-time="1" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="38:13:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;38:13:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="27" rc-code="0" op-status="0" interval="0" last-run="1420680232" last-rc-change="1420680232" exec-time="23" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="C" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="C_last_0" operation_key="C_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="30:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;30:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="31" rc-code="0" op-status="0" interval="0" last-run="1420680271" last-rc-change="1420680271" exec-time="24" queue-time="1" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="C_monitor_10000" operation_key="C_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="50:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;50:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="25" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680121" exec-time="23" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="2" uname="rhel7-auto2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="2">
+ <instance_attributes id="status-2">
+ <nvpair id="status-2-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-2-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="2">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="6:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:7;6:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420679798" last-rc-change="1420679798" exec-time="1070" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="25:14:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;25:14:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="27" rc-code="0" op-status="0" interval="0" last-run="1420680238" last-rc-change="1420680238" exec-time="9" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="34:14:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;34:14:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="25" rc-code="0" op-status="0" interval="0" last-run="1420680238" last-rc-change="1420680238" exec-time="37" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="C" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="C_last_0" operation_key="C_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="32:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;32:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="29" rc-code="0" op-status="0" interval="0" last-run="1420680270" last-rc-change="1420680270" exec-time="31" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="C_monitor_10000" operation_key="C_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="47:8:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;47:8:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680120" exec-time="19" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ </status>
+</cib>
diff --git a/pengine/test10/clone-require-all-no-interleave-2.dot b/pengine/test10/clone-require-all-no-interleave-2.dot
new file mode 100644
index 0000000000..1d7f8be497
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-2.dot
@@ -0,0 +1,40 @@
+ digraph "g" {
+"A-clone_running_0" -> "B-clone_start_0" [ style = bold]
+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_start_0" -> "A-clone_running_0" [ style = bold]
+"A-clone_start_0" -> "A_start_0 rhel7-auto4" [ style = bold]
+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"A_monitor_10000 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"A_start_0 rhel7-auto4" -> "A-clone_running_0" [ style = bold]
+"A_start_0 rhel7-auto4" -> "A_monitor_10000 rhel7-auto4" [ style = bold]
+"A_start_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"B-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"B-clone_start_0" -> "B-clone_running_0" [ style = bold]
+"B-clone_start_0" -> "B_start_0 rhel7-auto4" [ style = bold]
+"B-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"B_monitor_10000 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"B_start_0 rhel7-auto4" -> "B-clone_running_0" [ style = bold]
+"B_start_0 rhel7-auto4" -> "B_monitor_10000 rhel7-auto4" [ style = bold]
+"B_start_0 rhel7-auto4" -> "clone-one-or-more:order-B-clone-C-clone-mandatory" [ style = bold]
+"B_start_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"C-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"C-clone_start_0" -> "C-clone_running_0" [ style = bold]
+"C-clone_start_0" -> "C:1_start_0 rhel7-auto1" [ style = bold]
+"C-clone_start_0" -> "C:2_start_0 rhel7-auto4" [ style = bold]
+"C-clone_start_0" -> "C_start_0 rhel7-auto2" [ style = bold]
+"C-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"C:1_monitor_10000 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"C:1_start_0 rhel7-auto1" -> "C-clone_running_0" [ style = bold]
+"C:1_start_0 rhel7-auto1" -> "C:1_monitor_10000 rhel7-auto1" [ style = bold]
+"C:1_start_0 rhel7-auto1" [ style=bold color="green" fontcolor="black"]
+"C:2_monitor_10000 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"C:2_start_0 rhel7-auto4" -> "C-clone_running_0" [ style = bold]
+"C:2_start_0 rhel7-auto4" -> "C:2_monitor_10000 rhel7-auto4" [ style = bold]
+"C:2_start_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"C_monitor_10000 rhel7-auto2" [ style=bold color="green" fontcolor="black"]
+"C_start_0 rhel7-auto2" -> "C-clone_running_0" [ style = bold]
+"C_start_0 rhel7-auto2" -> "C_monitor_10000 rhel7-auto2" [ style = bold]
+"C_start_0 rhel7-auto2" [ style=bold color="green" fontcolor="black"]
+"clone-one-or-more:order-B-clone-C-clone-mandatory" -> "C-clone_start_0" [ style = bold]
+"clone-one-or-more:order-B-clone-C-clone-mandatory" [ style=bold color="green" fontcolor="orange"]
+}
diff --git a/pengine/test10/clone-require-all-no-interleave-2.exp b/pengine/test10/clone-require-all-no-interleave-2.exp
new file mode 100644
index 0000000000..35a2df6bb1
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-2.exp
@@ -0,0 +1,227 @@
+<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY" transition_id="0">
+ <synapse id="0">
+ <action_set>
+ <rsc_op id="12" operation="monitor" operation_key="A_monitor_10000" internal_operation_key="A:0_monitor_10000" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="11" operation="start" operation_key="A_start_0" internal_operation_key="A:0_start_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="1">
+ <action_set>
+ <rsc_op id="11" operation="start" operation_key="A_start_0" internal_operation_key="A:0_start_0" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="13" operation="start" operation_key="A-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="2" priority="1000000">
+ <action_set>
+ <pseudo_event id="14" operation="running" operation_key="A-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="11" operation="start" operation_key="A_start_0" internal_operation_key="A:0_start_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="13" operation="start" operation_key="A-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="3">
+ <action_set>
+ <pseudo_event id="13" operation="start" operation_key="A-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="4">
+ <action_set>
+ <rsc_op id="18" operation="monitor" operation_key="B_monitor_10000" internal_operation_key="B:0_monitor_10000" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="5">
+ <action_set>
+ <rsc_op id="17" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="19" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="6" priority="1000000">
+ <action_set>
+ <pseudo_event id="20" operation="running" operation_key="B-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="19" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="7">
+ <action_set>
+ <pseudo_event id="19" operation="start" operation_key="B-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="14" operation="running" operation_key="A-clone_running_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="8">
+ <action_set>
+ <rsc_op id="24" operation="monitor" operation_key="C_monitor_10000" internal_operation_key="C:0_monitor_10000" on_node="rhel7-auto2" on_node_uuid="2">
+ <primitive id="C" long-id="C:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="23" operation="start" operation_key="C_start_0" internal_operation_key="C:0_start_0" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="9">
+ <action_set>
+ <rsc_op id="23" operation="start" operation_key="C_start_0" internal_operation_key="C:0_start_0" on_node="rhel7-auto2" on_node_uuid="2">
+ <primitive id="C" long-id="C:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="29" operation="start" operation_key="C-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="10">
+ <action_set>
+ <rsc_op id="26" operation="monitor" operation_key="C:1_monitor_10000" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="C" long-id="C:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="25" operation="start" operation_key="C:1_start_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="11">
+ <action_set>
+ <rsc_op id="25" operation="start" operation_key="C:1_start_0" on_node="rhel7-auto1" on_node_uuid="1">
+ <primitive id="C" long-id="C:1" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="1" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="29" operation="start" operation_key="C-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="12">
+ <action_set>
+ <rsc_op id="28" operation="monitor" operation_key="C:2_monitor_10000" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="C" long-id="C:2" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="2" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="27" operation="start" operation_key="C:2_start_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="13">
+ <action_set>
+ <rsc_op id="27" operation="start" operation_key="C:2_start_0" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="C" long-id="C:2" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="2" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="29" operation="start" operation_key="C-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="14" priority="1000000">
+ <action_set>
+ <pseudo_event id="30" operation="running" operation_key="C-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="23" operation="start" operation_key="C_start_0" internal_operation_key="C:0_start_0" on_node="rhel7-auto2" on_node_uuid="2"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="25" operation="start" operation_key="C:1_start_0" on_node="rhel7-auto1" on_node_uuid="1"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="27" operation="start" operation_key="C:2_start_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="29" operation="start" operation_key="C-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="15">
+ <action_set>
+ <pseudo_event id="29" operation="start" operation_key="C-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="2" operation="clone-one-or-more:order-B-clone-C-clone-mandatory" operation_key="clone-one-or-more:order-B-clone-C-clone-mandatory"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="16">
+ <action_set>
+ <pseudo_event id="2" operation="clone-one-or-more:order-B-clone-C-clone-mandatory" operation_key="clone-one-or-more:order-B-clone-C-clone-mandatory">
+ <attributes />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ </inputs>
+ </synapse>
+</transition_graph>
diff --git a/pengine/test10/clone-require-all-no-interleave-2.scores b/pengine/test10/clone-require-all-no-interleave-2.scores
new file mode 100644
index 0000000000..50e054e88c
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-2.scores
@@ -0,0 +1,113 @@
+Allocation scores:
+clone_color: A-clone allocation score on rhel7-auto1: -INFINITY
+clone_color: A-clone allocation score on rhel7-auto2: -INFINITY
+clone_color: A-clone allocation score on rhel7-auto3: 0
+clone_color: A-clone allocation score on rhel7-auto4: 0
+clone_color: A:0 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto2: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto3: 0
+clone_color: A:0 allocation score on rhel7-auto4: 0
+clone_color: A:1 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto2: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto3: 0
+clone_color: A:1 allocation score on rhel7-auto4: 0
+clone_color: A:2 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto2: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto3: 0
+clone_color: A:2 allocation score on rhel7-auto4: 0
+clone_color: A:3 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto2: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto3: 0
+clone_color: A:3 allocation score on rhel7-auto4: 0
+clone_color: B-clone allocation score on rhel7-auto1: 0
+clone_color: B-clone allocation score on rhel7-auto2: 0
+clone_color: B-clone allocation score on rhel7-auto3: 0
+clone_color: B-clone allocation score on rhel7-auto4: 0
+clone_color: B:0 allocation score on rhel7-auto1: 0
+clone_color: B:0 allocation score on rhel7-auto2: 0
+clone_color: B:0 allocation score on rhel7-auto3: 0
+clone_color: B:0 allocation score on rhel7-auto4: 0
+clone_color: B:1 allocation score on rhel7-auto1: 0
+clone_color: B:1 allocation score on rhel7-auto2: 0
+clone_color: B:1 allocation score on rhel7-auto3: 0
+clone_color: B:1 allocation score on rhel7-auto4: 0
+clone_color: B:2 allocation score on rhel7-auto1: 0
+clone_color: B:2 allocation score on rhel7-auto2: 0
+clone_color: B:2 allocation score on rhel7-auto3: 0
+clone_color: B:2 allocation score on rhel7-auto4: 0
+clone_color: B:3 allocation score on rhel7-auto1: 0
+clone_color: B:3 allocation score on rhel7-auto2: 0
+clone_color: B:3 allocation score on rhel7-auto3: 0
+clone_color: B:3 allocation score on rhel7-auto4: 0
+clone_color: C-clone allocation score on rhel7-auto1: 0
+clone_color: C-clone allocation score on rhel7-auto2: 0
+clone_color: C-clone allocation score on rhel7-auto3: 0
+clone_color: C-clone allocation score on rhel7-auto4: 0
+clone_color: C:0 allocation score on rhel7-auto1: 0
+clone_color: C:0 allocation score on rhel7-auto2: 0
+clone_color: C:0 allocation score on rhel7-auto3: 0
+clone_color: C:0 allocation score on rhel7-auto4: 0
+clone_color: C:1 allocation score on rhel7-auto1: 0
+clone_color: C:1 allocation score on rhel7-auto2: 0
+clone_color: C:1 allocation score on rhel7-auto3: 0
+clone_color: C:1 allocation score on rhel7-auto4: 0
+clone_color: C:2 allocation score on rhel7-auto1: 0
+clone_color: C:2 allocation score on rhel7-auto2: 0
+clone_color: C:2 allocation score on rhel7-auto3: 0
+clone_color: C:2 allocation score on rhel7-auto4: 0
+clone_color: C:3 allocation score on rhel7-auto1: 0
+clone_color: C:3 allocation score on rhel7-auto2: 0
+clone_color: C:3 allocation score on rhel7-auto3: 0
+clone_color: C:3 allocation score on rhel7-auto4: 0
+native_color: A:0 allocation score on rhel7-auto1: -INFINITY
+native_color: A:0 allocation score on rhel7-auto2: -INFINITY
+native_color: A:0 allocation score on rhel7-auto3: -INFINITY
+native_color: A:0 allocation score on rhel7-auto4: 0
+native_color: A:1 allocation score on rhel7-auto1: -INFINITY
+native_color: A:1 allocation score on rhel7-auto2: -INFINITY
+native_color: A:1 allocation score on rhel7-auto3: -INFINITY
+native_color: A:1 allocation score on rhel7-auto4: -INFINITY
+native_color: A:2 allocation score on rhel7-auto1: -INFINITY
+native_color: A:2 allocation score on rhel7-auto2: -INFINITY
+native_color: A:2 allocation score on rhel7-auto3: -INFINITY
+native_color: A:2 allocation score on rhel7-auto4: -INFINITY
+native_color: A:3 allocation score on rhel7-auto1: -INFINITY
+native_color: A:3 allocation score on rhel7-auto2: -INFINITY
+native_color: A:3 allocation score on rhel7-auto3: -INFINITY
+native_color: A:3 allocation score on rhel7-auto4: -INFINITY
+native_color: B:0 allocation score on rhel7-auto1: -INFINITY
+native_color: B:0 allocation score on rhel7-auto2: -INFINITY
+native_color: B:0 allocation score on rhel7-auto3: -INFINITY
+native_color: B:0 allocation score on rhel7-auto4: 0
+native_color: B:1 allocation score on rhel7-auto1: -INFINITY
+native_color: B:1 allocation score on rhel7-auto2: -INFINITY
+native_color: B:1 allocation score on rhel7-auto3: -INFINITY
+native_color: B:1 allocation score on rhel7-auto4: -INFINITY
+native_color: B:2 allocation score on rhel7-auto1: -INFINITY
+native_color: B:2 allocation score on rhel7-auto2: -INFINITY
+native_color: B:2 allocation score on rhel7-auto3: -INFINITY
+native_color: B:2 allocation score on rhel7-auto4: -INFINITY
+native_color: B:3 allocation score on rhel7-auto1: -INFINITY
+native_color: B:3 allocation score on rhel7-auto2: -INFINITY
+native_color: B:3 allocation score on rhel7-auto3: -INFINITY
+native_color: B:3 allocation score on rhel7-auto4: -INFINITY
+native_color: C:0 allocation score on rhel7-auto1: 0
+native_color: C:0 allocation score on rhel7-auto2: 0
+native_color: C:0 allocation score on rhel7-auto3: -INFINITY
+native_color: C:0 allocation score on rhel7-auto4: 0
+native_color: C:1 allocation score on rhel7-auto1: 0
+native_color: C:1 allocation score on rhel7-auto2: -INFINITY
+native_color: C:1 allocation score on rhel7-auto3: -INFINITY
+native_color: C:1 allocation score on rhel7-auto4: 0
+native_color: C:2 allocation score on rhel7-auto1: -INFINITY
+native_color: C:2 allocation score on rhel7-auto2: -INFINITY
+native_color: C:2 allocation score on rhel7-auto3: -INFINITY
+native_color: C:2 allocation score on rhel7-auto4: 0
+native_color: C:3 allocation score on rhel7-auto1: -INFINITY
+native_color: C:3 allocation score on rhel7-auto2: -INFINITY
+native_color: C:3 allocation score on rhel7-auto3: -INFINITY
+native_color: C:3 allocation score on rhel7-auto4: -INFINITY
+native_color: shooter allocation score on rhel7-auto1: 0
+native_color: shooter allocation score on rhel7-auto2: 0
+native_color: shooter allocation score on rhel7-auto3: 0
+native_color: shooter allocation score on rhel7-auto4: 0
diff --git a/pengine/test10/clone-require-all-no-interleave-2.summary b/pengine/test10/clone-require-all-no-interleave-2.summary
new file mode 100644
index 0000000000..f16be9b3ef
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-2.summary
@@ -0,0 +1,54 @@
+
+Current cluster status:
+Node rhel7-auto3 (3): standby
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+ Clone Set: C-clone [C]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 rhel7-auto4 ]
+
+Transition Summary:
+ * Start A:0 (rhel7-auto4)
+ * Start B:0 (rhel7-auto4)
+ * Start C:0 (rhel7-auto2)
+ * Start C:1 (rhel7-auto1)
+ * Start C:2 (rhel7-auto4)
+
+Executing cluster transition:
+ * Pseudo action: A-clone_start_0
+ * Resource action: A start on rhel7-auto4
+ * Pseudo action: A-clone_running_0
+ * Pseudo action: B-clone_start_0
+ * Resource action: A monitor=10000 on rhel7-auto4
+ * Resource action: B start on rhel7-auto4
+ * Pseudo action: B-clone_running_0
+ * Pseudo action: clone-one-or-more:order-B-clone-C-clone-mandatory
+ * Resource action: B monitor=10000 on rhel7-auto4
+ * Pseudo action: C-clone_start_0
+ * Resource action: C start on rhel7-auto2
+ * Resource action: C start on rhel7-auto1
+ * Resource action: C start on rhel7-auto4
+ * Pseudo action: C-clone_running_0
+ * Resource action: C monitor=10000 on rhel7-auto2
+ * Resource action: C monitor=10000 on rhel7-auto1
+ * Resource action: C monitor=10000 on rhel7-auto4
+
+Revised cluster status:
+Node rhel7-auto3 (3): standby
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto4 ]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ]
+ Clone Set: B-clone [B]
+ Started: [ rhel7-auto4 ]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ]
+ Clone Set: C-clone [C]
+ Started: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ]
+ Stopped: [ rhel7-auto3 ]
+
diff --git a/pengine/test10/clone-require-all-no-interleave-2.xml b/pengine/test10/clone-require-all-no-interleave-2.xml
new file mode 100644
index 0000000000..214a7c72ff
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-2.xml
@@ -0,0 +1,179 @@
+<cib crm_feature_set="3.0.9" validate-with="pacemaker-2.3" epoch="23" num_updates="0" admin_epoch="0" cib-last-written="Wed Jan 7 20:24:31 2015" have-quorum="1" dc-uuid="1">
+ <configuration>
+ <crm_config>
+ <cluster_property_set id="cib-bootstrap-options">
+ <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
+ <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.12-eea796a"/>
+ <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
+ <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="phd"/>
+ </cluster_property_set>
+ </crm_config>
+ <nodes>
+ <node id="1" uname="rhel7-auto1"/>
+ <node id="2" uname="rhel7-auto2"/>
+ <node id="3" uname="rhel7-auto3">
+ <instance_attributes id="nodes-3">
+ <nvpair id="nodes-3-standby" name="standby" value="on"/>
+ </instance_attributes>
+ </node>
+ <node id="4" uname="rhel7-auto4">
+ <instance_attributes id="nodes-4"/>
+ </node>
+ </nodes>
+ <resources>
+ <primitive class="stonith" id="shooter" type="fence_xvm">
+ <instance_attributes id="shooter-instance_attributes"/>
+ <operations>
+ <op id="shooter-monitor-interval-60s" interval="60s" name="monitor"/>
+ </operations>
+ </primitive>
+ <clone id="A-clone">
+ <primitive class="ocf" id="A" provider="heartbeat" type="Dummy">
+ <instance_attributes id="A-instance_attributes"/>
+ <operations>
+ <op id="A-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="A-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="A-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="A-clone-meta"/>
+ </clone>
+ <clone id="B-clone">
+ <primitive class="ocf" id="B" provider="heartbeat" type="Dummy">
+ <instance_attributes id="B-instance_attributes"/>
+ <operations>
+ <op id="B-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="B-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="B-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="B-clone-meta"/>
+ </clone>
+ <clone id="C-clone">
+ <primitive class="ocf" id="C" provider="heartbeat" type="Dummy">
+ <instance_attributes id="C-instance_attributes"/>
+ <operations>
+ <op id="C-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="C-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="C-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="C-clone-meta"/>
+ </clone>
+ </resources>
+ <constraints>
+ <rsc_order first="A-clone" first-action="start" id="order-A-clone-B-clone-mandatory" then="B-clone" then-action="start"/>
+ <rsc_colocation id="colocation-B-clone-A-clone-INFINITY" rsc="B-clone" score="INFINITY" with-rsc="A-clone"/>
+ <rsc_order first="B-clone" first-action="start" id="order-B-clone-C-clone-mandatory" require-all="false" then="C-clone" then-action="start"/>
+ <rsc_location id="location-A-clone-rhel7-auto1--INFINITY" node="rhel7-auto1" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-A-clone-rhel7-auto2--INFINITY" node="rhel7-auto2" rsc="A-clone" score="-INFINITY"/>
+ </constraints>
+ </configuration>
+ <status>
+ <node_state id="4" uname="rhel7-auto4" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="4">
+ <instance_attributes id="status-4">
+ <nvpair id="status-4-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-4-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="4">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="10:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:7;10:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420679798" last-rc-change="1420679798" exec-time="1071" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="17:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;17:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="29" rc-code="0" op-status="0" interval="0" last-run="1420680270" last-rc-change="1420680270" exec-time="21" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="16:5:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;16:5:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="11" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680105" exec-time="21" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="22:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;22:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="27" rc-code="0" op-status="0" interval="0" last-run="1420680270" last-rc-change="1420680270" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="32:7:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;32:7:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680111" exec-time="23" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="C" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="C_last_0" operation_key="C_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="27:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;27:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="25" rc-code="0" op-status="0" interval="0" last-run="1420680270" last-rc-change="1420680270" exec-time="21" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="C_monitor_10000" operation_key="C_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="48:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;48:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680120" exec-time="22" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="3" uname="rhel7-auto3" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="3">
+ <instance_attributes id="status-3">
+ <nvpair id="status-3-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-3-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="3">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="8:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:7;8:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420679799" last-rc-change="1420679799" exec-time="1070" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="21:15:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;21:15:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="27" rc-code="0" op-status="0" interval="0" last-run="1420680244" last-rc-change="1420680244" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="14:5:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;14:5:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="11" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680105" exec-time="21" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="28:15:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;28:15:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="25" rc-code="0" op-status="0" interval="0" last-run="1420680244" last-rc-change="1420680244" exec-time="23" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="30:7:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;30:7:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680112" exec-time="23" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="C" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="C_last_0" operation_key="C_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="28:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;28:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="29" rc-code="0" op-status="0" interval="0" last-run="1420680271" last-rc-change="1420680271" exec-time="21" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="C_monitor_10000" operation_key="C_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="46:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;46:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680121" exec-time="8" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="1" uname="rhel7-auto1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="1">
+ <instance_attributes id="status-1">
+ <nvpair id="status-1-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-1-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="1">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="11:3:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;11:3:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="6" rc-code="0" op-status="0" interval="0" last-run="1420679801" last-rc-change="1420679801" exec-time="88" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ <lrm_rsc_op id="shooter_monitor_60000" operation_key="shooter_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="12:3:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;12:3:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="7" rc-code="0" op-status="0" interval="60000" last-rc-change="1420679801" exec-time="64" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="27:13:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;27:13:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="29" rc-code="0" op-status="0" interval="0" last-run="1420680232" last-rc-change="1420680232" exec-time="33" queue-time="1" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="38:13:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;38:13:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="27" rc-code="0" op-status="0" interval="0" last-run="1420680232" last-rc-change="1420680232" exec-time="23" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="C" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="C_last_0" operation_key="C_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="30:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;30:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="31" rc-code="0" op-status="0" interval="0" last-run="1420680271" last-rc-change="1420680271" exec-time="24" queue-time="1" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="C_monitor_10000" operation_key="C_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="50:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;50:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="25" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680121" exec-time="23" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="2" uname="rhel7-auto2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="2">
+ <instance_attributes id="status-2">
+ <nvpair id="status-2-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-2-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="2">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="6:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:7;6:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420679798" last-rc-change="1420679798" exec-time="1070" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="25:14:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;25:14:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="27" rc-code="0" op-status="0" interval="0" last-run="1420680238" last-rc-change="1420680238" exec-time="9" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="34:14:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;34:14:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="25" rc-code="0" op-status="0" interval="0" last-run="1420680238" last-rc-change="1420680238" exec-time="37" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="C" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="C_last_0" operation_key="C_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="32:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;32:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="29" rc-code="0" op-status="0" interval="0" last-run="1420680270" last-rc-change="1420680270" exec-time="31" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="C_monitor_10000" operation_key="C_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="47:8:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;47:8:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680120" exec-time="19" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ </status>
+</cib>
diff --git a/pengine/test10/clone-require-all-no-interleave-3.dot b/pengine/test10/clone-require-all-no-interleave-3.dot
new file mode 100644
index 0000000000..58f97a5d4e
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-3.dot
@@ -0,0 +1,60 @@
+ digraph "g" {
+"A-clone_running_0" -> "B-clone_start_0" [ style = bold]
+"A-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_start_0" -> "A-clone_running_0" [ style = bold]
+"A-clone_start_0" -> "A_start_0 rhel7-auto3" [ style = bold]
+"A-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_stop_0" -> "A-clone_stopped_0" [ style = bold]
+"A-clone_stop_0" -> "A_stop_0 rhel7-auto4" [ style = bold]
+"A-clone_stop_0" [ style=bold color="green" fontcolor="orange"]
+"A-clone_stopped_0" -> "A-clone_start_0" [ style = bold]
+"A-clone_stopped_0" [ style=bold color="green" fontcolor="orange"]
+"A_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"A_start_0 rhel7-auto3" -> "A-clone_running_0" [ style = bold]
+"A_start_0 rhel7-auto3" -> "A_monitor_10000 rhel7-auto3" [ style = bold]
+"A_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"A_stop_0 rhel7-auto4" -> "A-clone_stopped_0" [ style = bold]
+"A_stop_0 rhel7-auto4" -> "A_start_0 rhel7-auto3" [ style = bold]
+"A_stop_0 rhel7-auto4" -> "all_stopped" [ style = bold]
+"A_stop_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"B-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"B-clone_start_0" -> "B-clone_running_0" [ style = bold]
+"B-clone_start_0" -> "B_start_0 rhel7-auto3" [ style = bold]
+"B-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"B-clone_stop_0" -> "B-clone_stopped_0" [ style = bold]
+"B-clone_stop_0" -> "B_stop_0 rhel7-auto4" [ style = bold]
+"B-clone_stop_0" [ style=bold color="green" fontcolor="orange"]
+"B-clone_stopped_0" -> "A-clone_stop_0" [ style = bold]
+"B-clone_stopped_0" -> "B-clone_start_0" [ style = bold]
+"B-clone_stopped_0" [ style=bold color="green" fontcolor="orange"]
+"B_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"B_start_0 rhel7-auto3" -> "B-clone_running_0" [ style = bold]
+"B_start_0 rhel7-auto3" -> "B_monitor_10000 rhel7-auto3" [ style = bold]
+"B_start_0 rhel7-auto3" -> "clone-one-or-more:order-B-clone-C-clone-mandatory" [ style = bold]
+"B_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"B_stop_0 rhel7-auto4" -> "B-clone_stopped_0" [ style = bold]
+"B_stop_0 rhel7-auto4" -> "B_start_0 rhel7-auto3" [ style = bold]
+"B_stop_0 rhel7-auto4" -> "all_stopped" [ style = bold]
+"B_stop_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"C-clone_running_0" [ style=bold color="green" fontcolor="orange"]
+"C-clone_start_0" -> "C-clone_running_0" [ style = bold]
+"C-clone_start_0" -> "C_start_0 rhel7-auto3" [ style = bold]
+"C-clone_start_0" [ style=bold color="green" fontcolor="orange"]
+"C-clone_stop_0" -> "C-clone_stopped_0" [ style = bold]
+"C-clone_stop_0" -> "C_stop_0 rhel7-auto4" [ style = bold]
+"C-clone_stop_0" [ style=bold color="green" fontcolor="orange"]
+"C-clone_stopped_0" -> "B-clone_stop_0" [ style = bold]
+"C-clone_stopped_0" -> "C-clone_start_0" [ style = bold]
+"C-clone_stopped_0" [ style=bold color="green" fontcolor="orange"]
+"C_monitor_10000 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"C_start_0 rhel7-auto3" -> "C-clone_running_0" [ style = bold]
+"C_start_0 rhel7-auto3" -> "C_monitor_10000 rhel7-auto3" [ style = bold]
+"C_start_0 rhel7-auto3" [ style=bold color="green" fontcolor="black"]
+"C_stop_0 rhel7-auto4" -> "C-clone_stopped_0" [ style = bold]
+"C_stop_0 rhel7-auto4" -> "C_start_0 rhel7-auto3" [ style = bold]
+"C_stop_0 rhel7-auto4" -> "all_stopped" [ style = bold]
+"C_stop_0 rhel7-auto4" [ style=bold color="green" fontcolor="black"]
+"all_stopped" [ style=bold color="green" fontcolor="orange"]
+"clone-one-or-more:order-B-clone-C-clone-mandatory" -> "C-clone_start_0" [ style = bold]
+"clone-one-or-more:order-B-clone-C-clone-mandatory" [ style=bold color="green" fontcolor="orange"]
+}
diff --git a/pengine/test10/clone-require-all-no-interleave-3.exp b/pengine/test10/clone-require-all-no-interleave-3.exp
new file mode 100644
index 0000000000..8aba35e52e
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-3.exp
@@ -0,0 +1,322 @@
+<transition_graph cluster-delay="60s" stonith-timeout="60s" failed-stop-offset="INFINITY" failed-start-offset="INFINITY" transition_id="0">
+ <synapse id="0">
+ <action_set>
+ <rsc_op id="18" operation="monitor" operation_key="A_monitor_10000" internal_operation_key="A:0_monitor_10000" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="A_start_0" internal_operation_key="A:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="1">
+ <action_set>
+ <rsc_op id="17" operation="start" operation_key="A_start_0" internal_operation_key="A:0_start_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="16" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="19" operation="start" operation_key="A-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="2">
+ <action_set>
+ <rsc_op id="16" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="A" long-id="A:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="stop" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="21" operation="stop" operation_key="A-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="3" priority="1000000">
+ <action_set>
+ <pseudo_event id="22" operation="stopped" operation_key="A-clone_stopped_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="16" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="21" operation="stop" operation_key="A-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="4">
+ <action_set>
+ <pseudo_event id="21" operation="stop" operation_key="A-clone_stop_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="29" operation="stopped" operation_key="B-clone_stopped_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="5" priority="1000000">
+ <action_set>
+ <pseudo_event id="20" operation="running" operation_key="A-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="17" operation="start" operation_key="A_start_0" internal_operation_key="A:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="19" operation="start" operation_key="A-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="6">
+ <action_set>
+ <pseudo_event id="19" operation="start" operation_key="A-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="22" operation="stopped" operation_key="A-clone_stopped_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="7">
+ <action_set>
+ <rsc_op id="25" operation="monitor" operation_key="B_monitor_10000" internal_operation_key="B:0_monitor_10000" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="24" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="8">
+ <action_set>
+ <rsc_op id="24" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="23" operation="stop" operation_key="B_stop_0" internal_operation_key="B:0_stop_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="26" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="9">
+ <action_set>
+ <rsc_op id="23" operation="stop" operation_key="B_stop_0" internal_operation_key="B:0_stop_0" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="B" long-id="B:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="stop" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="28" operation="stop" operation_key="B-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="10" priority="1000000">
+ <action_set>
+ <pseudo_event id="29" operation="stopped" operation_key="B-clone_stopped_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="23" operation="stop" operation_key="B_stop_0" internal_operation_key="B:0_stop_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="28" operation="stop" operation_key="B-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="11">
+ <action_set>
+ <pseudo_event id="28" operation="stop" operation_key="B-clone_stop_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="40" operation="stopped" operation_key="C-clone_stopped_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="12" priority="1000000">
+ <action_set>
+ <pseudo_event id="27" operation="running" operation_key="B-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="24" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="26" operation="start" operation_key="B-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="13">
+ <action_set>
+ <pseudo_event id="26" operation="start" operation_key="B-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="20" operation="running" operation_key="A-clone_running_0"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="29" operation="stopped" operation_key="B-clone_stopped_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="14">
+ <action_set>
+ <rsc_op id="32" operation="monitor" operation_key="C_monitor_10000" internal_operation_key="C:0_monitor_10000" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="C" long-id="C:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_interval="10000" CRM_meta_name="monitor" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="31" operation="start" operation_key="C_start_0" internal_operation_key="C:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="15">
+ <action_set>
+ <rsc_op id="31" operation="start" operation_key="C_start_0" internal_operation_key="C:0_start_0" on_node="rhel7-auto3" on_node_uuid="3">
+ <primitive id="C" long-id="C:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="start" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="30" operation="stop" operation_key="C_stop_0" internal_operation_key="C:0_stop_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="37" operation="start" operation_key="C-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="16">
+ <action_set>
+ <rsc_op id="30" operation="stop" operation_key="C_stop_0" internal_operation_key="C:0_stop_0" on_node="rhel7-auto4" on_node_uuid="4">
+ <primitive id="C" long-id="C:0" class="ocf" provider="heartbeat" type="Dummy"/>
+ <attributes CRM_meta_clone="0" CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_name="stop" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </rsc_op>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="39" operation="stop" operation_key="C-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="17" priority="1000000">
+ <action_set>
+ <pseudo_event id="40" operation="stopped" operation_key="C-clone_stopped_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="30" operation="stop" operation_key="C_stop_0" internal_operation_key="C:0_stop_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="39" operation="stop" operation_key="C-clone_stop_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="18">
+ <action_set>
+ <pseudo_event id="39" operation="stop" operation_key="C-clone_stop_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs/>
+ </synapse>
+ <synapse id="19" priority="1000000">
+ <action_set>
+ <pseudo_event id="38" operation="running" operation_key="C-clone_running_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="31" operation="start" operation_key="C_start_0" internal_operation_key="C:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="37" operation="start" operation_key="C-clone_start_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="20">
+ <action_set>
+ <pseudo_event id="37" operation="start" operation_key="C-clone_start_0">
+ <attributes CRM_meta_clone_max="4" CRM_meta_clone_node_max="1" CRM_meta_globally_unique="false" CRM_meta_notify="false" CRM_meta_timeout="20000" />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <pseudo_event id="7" operation="clone-one-or-more:order-B-clone-C-clone-mandatory" operation_key="clone-one-or-more:order-B-clone-C-clone-mandatory"/>
+ </trigger>
+ <trigger>
+ <pseudo_event id="40" operation="stopped" operation_key="C-clone_stopped_0"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="21">
+ <action_set>
+ <pseudo_event id="8" operation="all_stopped" operation_key="all_stopped">
+ <attributes />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="16" operation="stop" operation_key="A_stop_0" internal_operation_key="A:0_stop_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="23" operation="stop" operation_key="B_stop_0" internal_operation_key="B:0_stop_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ <trigger>
+ <rsc_op id="30" operation="stop" operation_key="C_stop_0" internal_operation_key="C:0_stop_0" on_node="rhel7-auto4" on_node_uuid="4"/>
+ </trigger>
+ </inputs>
+ </synapse>
+ <synapse id="22">
+ <action_set>
+ <pseudo_event id="7" operation="clone-one-or-more:order-B-clone-C-clone-mandatory" operation_key="clone-one-or-more:order-B-clone-C-clone-mandatory">
+ <attributes />
+ </pseudo_event>
+ </action_set>
+ <inputs>
+ <trigger>
+ <rsc_op id="24" operation="start" operation_key="B_start_0" internal_operation_key="B:0_start_0" on_node="rhel7-auto3" on_node_uuid="3"/>
+ </trigger>
+ </inputs>
+ </synapse>
+</transition_graph>
diff --git a/pengine/test10/clone-require-all-no-interleave-3.scores b/pengine/test10/clone-require-all-no-interleave-3.scores
new file mode 100644
index 0000000000..70dd2d1754
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-3.scores
@@ -0,0 +1,113 @@
+Allocation scores:
+clone_color: A-clone allocation score on rhel7-auto1: -INFINITY
+clone_color: A-clone allocation score on rhel7-auto2: -INFINITY
+clone_color: A-clone allocation score on rhel7-auto3: 0
+clone_color: A-clone allocation score on rhel7-auto4: 0
+clone_color: A:0 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto2: -INFINITY
+clone_color: A:0 allocation score on rhel7-auto3: 0
+clone_color: A:0 allocation score on rhel7-auto4: 1
+clone_color: A:1 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto2: -INFINITY
+clone_color: A:1 allocation score on rhel7-auto3: 0
+clone_color: A:1 allocation score on rhel7-auto4: 0
+clone_color: A:2 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto2: -INFINITY
+clone_color: A:2 allocation score on rhel7-auto3: 0
+clone_color: A:2 allocation score on rhel7-auto4: 0
+clone_color: A:3 allocation score on rhel7-auto1: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto2: -INFINITY
+clone_color: A:3 allocation score on rhel7-auto3: 0
+clone_color: A:3 allocation score on rhel7-auto4: 0
+clone_color: B-clone allocation score on rhel7-auto1: 0
+clone_color: B-clone allocation score on rhel7-auto2: 0
+clone_color: B-clone allocation score on rhel7-auto3: 0
+clone_color: B-clone allocation score on rhel7-auto4: 0
+clone_color: B:0 allocation score on rhel7-auto1: 0
+clone_color: B:0 allocation score on rhel7-auto2: 0
+clone_color: B:0 allocation score on rhel7-auto3: 0
+clone_color: B:0 allocation score on rhel7-auto4: 1
+clone_color: B:1 allocation score on rhel7-auto1: 0
+clone_color: B:1 allocation score on rhel7-auto2: 0
+clone_color: B:1 allocation score on rhel7-auto3: 0
+clone_color: B:1 allocation score on rhel7-auto4: 0
+clone_color: B:2 allocation score on rhel7-auto1: 0
+clone_color: B:2 allocation score on rhel7-auto2: 0
+clone_color: B:2 allocation score on rhel7-auto3: 0
+clone_color: B:2 allocation score on rhel7-auto4: 0
+clone_color: B:3 allocation score on rhel7-auto1: 0
+clone_color: B:3 allocation score on rhel7-auto2: 0
+clone_color: B:3 allocation score on rhel7-auto3: 0
+clone_color: B:3 allocation score on rhel7-auto4: 0
+clone_color: C-clone allocation score on rhel7-auto1: 0
+clone_color: C-clone allocation score on rhel7-auto2: 0
+clone_color: C-clone allocation score on rhel7-auto3: 0
+clone_color: C-clone allocation score on rhel7-auto4: 0
+clone_color: C:0 allocation score on rhel7-auto1: 0
+clone_color: C:0 allocation score on rhel7-auto2: 0
+clone_color: C:0 allocation score on rhel7-auto3: 0
+clone_color: C:0 allocation score on rhel7-auto4: 1
+clone_color: C:1 allocation score on rhel7-auto1: 1
+clone_color: C:1 allocation score on rhel7-auto2: 0
+clone_color: C:1 allocation score on rhel7-auto3: 0
+clone_color: C:1 allocation score on rhel7-auto4: 0
+clone_color: C:2 allocation score on rhel7-auto1: 0
+clone_color: C:2 allocation score on rhel7-auto2: 1
+clone_color: C:2 allocation score on rhel7-auto3: 0
+clone_color: C:2 allocation score on rhel7-auto4: 0
+clone_color: C:3 allocation score on rhel7-auto1: 0
+clone_color: C:3 allocation score on rhel7-auto2: 0
+clone_color: C:3 allocation score on rhel7-auto3: 0
+clone_color: C:3 allocation score on rhel7-auto4: 0
+native_color: A:0 allocation score on rhel7-auto1: -INFINITY
+native_color: A:0 allocation score on rhel7-auto2: -INFINITY
+native_color: A:0 allocation score on rhel7-auto3: 0
+native_color: A:0 allocation score on rhel7-auto4: -INFINITY
+native_color: A:1 allocation score on rhel7-auto1: -INFINITY
+native_color: A:1 allocation score on rhel7-auto2: -INFINITY
+native_color: A:1 allocation score on rhel7-auto3: -INFINITY
+native_color: A:1 allocation score on rhel7-auto4: -INFINITY
+native_color: A:2 allocation score on rhel7-auto1: -INFINITY
+native_color: A:2 allocation score on rhel7-auto2: -INFINITY
+native_color: A:2 allocation score on rhel7-auto3: -INFINITY
+native_color: A:2 allocation score on rhel7-auto4: -INFINITY
+native_color: A:3 allocation score on rhel7-auto1: -INFINITY
+native_color: A:3 allocation score on rhel7-auto2: -INFINITY
+native_color: A:3 allocation score on rhel7-auto3: -INFINITY
+native_color: A:3 allocation score on rhel7-auto4: -INFINITY
+native_color: B:0 allocation score on rhel7-auto1: -INFINITY
+native_color: B:0 allocation score on rhel7-auto2: -INFINITY
+native_color: B:0 allocation score on rhel7-auto3: 0
+native_color: B:0 allocation score on rhel7-auto4: -INFINITY
+native_color: B:1 allocation score on rhel7-auto1: -INFINITY
+native_color: B:1 allocation score on rhel7-auto2: -INFINITY
+native_color: B:1 allocation score on rhel7-auto3: -INFINITY
+native_color: B:1 allocation score on rhel7-auto4: -INFINITY
+native_color: B:2 allocation score on rhel7-auto1: -INFINITY
+native_color: B:2 allocation score on rhel7-auto2: -INFINITY
+native_color: B:2 allocation score on rhel7-auto3: -INFINITY
+native_color: B:2 allocation score on rhel7-auto4: -INFINITY
+native_color: B:3 allocation score on rhel7-auto1: -INFINITY
+native_color: B:3 allocation score on rhel7-auto2: -INFINITY
+native_color: B:3 allocation score on rhel7-auto3: -INFINITY
+native_color: B:3 allocation score on rhel7-auto4: -INFINITY
+native_color: C:0 allocation score on rhel7-auto1: -INFINITY
+native_color: C:0 allocation score on rhel7-auto2: -INFINITY
+native_color: C:0 allocation score on rhel7-auto3: 0
+native_color: C:0 allocation score on rhel7-auto4: -INFINITY
+native_color: C:1 allocation score on rhel7-auto1: 1
+native_color: C:1 allocation score on rhel7-auto2: -INFINITY
+native_color: C:1 allocation score on rhel7-auto3: 0
+native_color: C:1 allocation score on rhel7-auto4: -INFINITY
+native_color: C:2 allocation score on rhel7-auto1: 0
+native_color: C:2 allocation score on rhel7-auto2: 1
+native_color: C:2 allocation score on rhel7-auto3: 0
+native_color: C:2 allocation score on rhel7-auto4: -INFINITY
+native_color: C:3 allocation score on rhel7-auto1: -INFINITY
+native_color: C:3 allocation score on rhel7-auto2: -INFINITY
+native_color: C:3 allocation score on rhel7-auto3: -INFINITY
+native_color: C:3 allocation score on rhel7-auto4: -INFINITY
+native_color: shooter allocation score on rhel7-auto1: 0
+native_color: shooter allocation score on rhel7-auto2: 0
+native_color: shooter allocation score on rhel7-auto3: 0
+native_color: shooter allocation score on rhel7-auto4: 0
diff --git a/pengine/test10/clone-require-all-no-interleave-3.summary b/pengine/test10/clone-require-all-no-interleave-3.summary
new file mode 100644
index 0000000000..43796446c4
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-3.summary
@@ -0,0 +1,61 @@
+
+Current cluster status:
+Node rhel7-auto4 (4): standby
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto4 ]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ]
+ Clone Set: B-clone [B]
+ Started: [ rhel7-auto4 ]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ]
+ Clone Set: C-clone [C]
+ Started: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ]
+ Stopped: [ rhel7-auto3 ]
+
+Transition Summary:
+ * Move A:0 (Started rhel7-auto4 -> rhel7-auto3)
+ * Move B:0 (Started rhel7-auto4 -> rhel7-auto3)
+ * Move C:0 (Started rhel7-auto4 -> rhel7-auto3)
+
+Executing cluster transition:
+ * Pseudo action: C-clone_stop_0
+ * Resource action: C stop on rhel7-auto4
+ * Pseudo action: C-clone_stopped_0
+ * Pseudo action: B-clone_stop_0
+ * Resource action: B stop on rhel7-auto4
+ * Pseudo action: B-clone_stopped_0
+ * Pseudo action: A-clone_stop_0
+ * Resource action: A stop on rhel7-auto4
+ * Pseudo action: A-clone_stopped_0
+ * Pseudo action: A-clone_start_0
+ * Pseudo action: all_stopped
+ * Resource action: A start on rhel7-auto3
+ * Pseudo action: A-clone_running_0
+ * Pseudo action: B-clone_start_0
+ * Resource action: A monitor=10000 on rhel7-auto3
+ * Resource action: B start on rhel7-auto3
+ * Pseudo action: B-clone_running_0
+ * Pseudo action: clone-one-or-more:order-B-clone-C-clone-mandatory
+ * Resource action: B monitor=10000 on rhel7-auto3
+ * Pseudo action: C-clone_start_0
+ * Resource action: C start on rhel7-auto3
+ * Pseudo action: C-clone_running_0
+ * Resource action: C monitor=10000 on rhel7-auto3
+
+Revised cluster status:
+Node rhel7-auto4 (4): standby
+Online: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ]
+
+ shooter (stonith:fence_xvm): Started rhel7-auto1
+ Clone Set: A-clone [A]
+ Started: [ rhel7-auto3 ]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ]
+ Clone Set: B-clone [B]
+ Started: [ rhel7-auto3 ]
+ Stopped: [ rhel7-auto1 rhel7-auto2 rhel7-auto4 ]
+ Clone Set: C-clone [C]
+ Started: [ rhel7-auto1 rhel7-auto2 rhel7-auto3 ]
+ Stopped: [ rhel7-auto4 ]
+
diff --git a/pengine/test10/clone-require-all-no-interleave-3.xml b/pengine/test10/clone-require-all-no-interleave-3.xml
new file mode 100644
index 0000000000..8a9bea8c7b
--- /dev/null
+++ b/pengine/test10/clone-require-all-no-interleave-3.xml
@@ -0,0 +1,179 @@
+<cib crm_feature_set="3.0.9" validate-with="pacemaker-2.3" epoch="25" num_updates="0" admin_epoch="0" cib-last-written="Wed Jan 7 20:24:31 2015" have-quorum="1" dc-uuid="1">
+ <configuration>
+ <crm_config>
+ <cluster_property_set id="cib-bootstrap-options">
+ <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
+ <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="1.1.12-eea796a"/>
+ <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
+ <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="phd"/>
+ </cluster_property_set>
+ </crm_config>
+ <nodes>
+ <node id="1" uname="rhel7-auto1"/>
+ <node id="2" uname="rhel7-auto2"/>
+ <node id="3" uname="rhel7-auto3">
+ <instance_attributes id="nodes-3"/>
+ </node>
+ <node id="4" uname="rhel7-auto4">
+ <instance_attributes id="nodes-4">
+ <nvpair id="nodes-4-standby" name="standby" value="on"/>
+ </instance_attributes>
+ </node>
+ </nodes>
+ <resources>
+ <primitive class="stonith" id="shooter" type="fence_xvm">
+ <instance_attributes id="shooter-instance_attributes"/>
+ <operations>
+ <op id="shooter-monitor-interval-60s" interval="60s" name="monitor"/>
+ </operations>
+ </primitive>
+ <clone id="A-clone">
+ <primitive class="ocf" id="A" provider="heartbeat" type="Dummy">
+ <instance_attributes id="A-instance_attributes"/>
+ <operations>
+ <op id="A-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="A-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="A-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="A-clone-meta"/>
+ </clone>
+ <clone id="B-clone">
+ <primitive class="ocf" id="B" provider="heartbeat" type="Dummy">
+ <instance_attributes id="B-instance_attributes"/>
+ <operations>
+ <op id="B-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="B-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="B-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="B-clone-meta"/>
+ </clone>
+ <clone id="C-clone">
+ <primitive class="ocf" id="C" provider="heartbeat" type="Dummy">
+ <instance_attributes id="C-instance_attributes"/>
+ <operations>
+ <op id="C-start-timeout-20" interval="0s" name="start" timeout="20"/>
+ <op id="C-stop-timeout-20" interval="0s" name="stop" timeout="20"/>
+ <op id="C-monitor-interval-10" interval="10" name="monitor" timeout="20"/>
+ </operations>
+ </primitive>
+ <meta_attributes id="C-clone-meta"/>
+ </clone>
+ </resources>
+ <constraints>
+ <rsc_order first="A-clone" first-action="start" id="order-A-clone-B-clone-mandatory" then="B-clone" then-action="start"/>
+ <rsc_colocation id="colocation-B-clone-A-clone-INFINITY" rsc="B-clone" score="INFINITY" with-rsc="A-clone"/>
+ <rsc_order first="B-clone" first-action="start" id="order-B-clone-C-clone-mandatory" require-all="false" then="C-clone" then-action="start"/>
+ <rsc_location id="location-A-clone-rhel7-auto1--INFINITY" node="rhel7-auto1" rsc="A-clone" score="-INFINITY"/>
+ <rsc_location id="location-A-clone-rhel7-auto2--INFINITY" node="rhel7-auto2" rsc="A-clone" score="-INFINITY"/>
+ </constraints>
+ </configuration>
+ <status>
+ <node_state id="4" uname="rhel7-auto4" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="4">
+ <instance_attributes id="status-4">
+ <nvpair id="status-4-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-4-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="4">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="10:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:7;10:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420679798" last-rc-change="1420679798" exec-time="1071" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_start_0" operation="start" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="30:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;30:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="30" rc-code="0" op-status="0" interval="0" last-run="1420680528" last-rc-change="1420680528" exec-time="0" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="31:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;31:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="31" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680528" exec-time="0" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_start_0" operation="start" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="28:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;28:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="28" rc-code="0" op-status="0" interval="0" last-run="1420680528" last-rc-change="1420680528" exec-time="0" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="29:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;29:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="29" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680528" exec-time="0" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ <lrm_resource id="C" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="C_last_0" operation_key="C_start_0" operation="start" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="26:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;26:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="26" rc-code="0" op-status="0" interval="0" last-run="1420680528" last-rc-change="1420680528" exec-time="0" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto4" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="C_monitor_10000" operation_key="C_monitor_10000" operation="monitor" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="27:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;27:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="27" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680528" exec-time="0" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto4"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="3" uname="rhel7-auto3" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="3">
+ <instance_attributes id="status-3">
+ <nvpair id="status-3-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-3-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="3">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="8:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:7;8:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420679799" last-rc-change="1420679799" exec-time="1070" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="21:15:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;21:15:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="27" rc-code="0" op-status="0" interval="0" last-run="1420680244" last-rc-change="1420680244" exec-time="22" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="A_monitor_10000" operation_key="A_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="14:5:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;14:5:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="11" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680105" exec-time="21" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="28:15:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;28:15:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="25" rc-code="0" op-status="0" interval="0" last-run="1420680244" last-rc-change="1420680244" exec-time="23" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="B_monitor_10000" operation_key="B_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="30:7:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;30:7:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="17" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680112" exec-time="23" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ <lrm_resource id="C" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="C_last_0" operation_key="C_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.0.9" transition-key="28:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;28:16:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="29" rc-code="0" op-status="0" interval="0" last-run="1420680271" last-rc-change="1420680271" exec-time="21" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto3" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="C_monitor_10000" operation_key="C_monitor_10000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="46:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;46:9:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="23" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680121" exec-time="8" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto3"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="1" uname="rhel7-auto1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="1">
+ <instance_attributes id="status-1">
+ <nvpair id="status-1-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-1-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="1">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="11:3:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;11:3:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="6" rc-code="0" op-status="0" interval="0" last-run="1420679801" last-rc-change="1420679801" exec-time="88" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ <lrm_rsc_op id="shooter_monitor_60000" operation_key="shooter_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="12:3:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;12:3:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="7" rc-code="0" op-status="0" interval="60000" last-rc-change="1420679801" exec-time="64" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="27:13:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;27:13:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="29" rc-code="0" op-status="0" interval="0" last-run="1420680232" last-rc-change="1420680232" exec-time="33" queue-time="1" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="38:13:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;38:13:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="27" rc-code="0" op-status="0" interval="0" last-run="1420680232" last-rc-change="1420680232" exec-time="23" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ <lrm_resource id="C" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="C_last_0" operation_key="C_start_0" operation="start" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="32:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;32:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="32" rc-code="0" op-status="0" interval="0" last-run="1420680528" last-rc-change="1420680528" exec-time="0" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto1" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="C_monitor_10000" operation_key="C_monitor_10000" operation="monitor" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="33:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;33:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="33" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680528" exec-time="0" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto1"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ <node_state id="2" uname="rhel7-auto2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
+ <transient_attributes id="2">
+ <instance_attributes id="status-2">
+ <nvpair id="status-2-shutdown" name="shutdown" value="0"/>
+ <nvpair id="status-2-probe_complete" name="probe_complete" value="true"/>
+ </instance_attributes>
+ </transient_attributes>
+ <lrm id="2">
+ <lrm_resources>
+ <lrm_resource id="shooter" type="fence_xvm" class="stonith">
+ <lrm_rsc_op id="shooter_last_0" operation_key="shooter_monitor_0" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="6:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:7;6:3:7:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="5" rc-code="7" op-status="0" interval="0" last-run="1420679798" last-rc-change="1420679798" exec-time="1070" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="A" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="A_last_0" operation_key="A_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="25:14:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;25:14:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="27" rc-code="0" op-status="0" interval="0" last-run="1420680238" last-rc-change="1420680238" exec-time="9" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="B" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="B_last_0" operation_key="B_stop_0" operation="stop" crm-debug-origin="build_active_RAs" crm_feature_set="3.0.9" transition-key="34:14:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" transition-magic="0:0;34:14:0:0abc4e71-eceb-4fae-bc05-3c9935bff1de" call-id="25" rc-code="0" op-status="0" interval="0" last-run="1420680238" last-rc-change="1420680238" exec-time="37" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ <lrm_resource id="C" type="Dummy" class="ocf" provider="heartbeat">
+ <lrm_rsc_op id="C_last_0" operation_key="C_start_0" operation="start" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="30:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;30:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="30" rc-code="0" op-status="0" interval="0" last-run="1420680528" last-rc-change="1420680528" exec-time="0" queue-time="0" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" on_node="rhel7-auto2" op-force-restart=" state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
+ <lrm_rsc_op id="C_monitor_10000" operation_key="C_monitor_10000" operation="monitor" crm-debug-origin="crm_simulate" crm_feature_set="3.0.9" transition-key="31:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" transition-magic="0:0;31:-1:0:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" call-id="31" rc-code="0" op-status="0" interval="10000" last-rc-change="1420680528" exec-time="0" queue-time="0" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" on_node="rhel7-auto2"/>
+ </lrm_resource>
+ </lrm_resources>
+ </lrm>
+ </node_state>
+ </status>
+</cib>
diff --git a/xml/constraints-next.rng b/xml/constraints-2.3.rng
similarity index 91%
copy from xml/constraints-next.rng
copy to xml/constraints-2.3.rng
index 0defe8fc54..d9a4701fb9 100644
--- a/xml/constraints-next.rng
+++ b/xml/constraints-2.3.rng
@@ -1,264 +1,252 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<ref name="element-constraints"/>
</start>
<define name="element-constraints">
<element name="constraints">
<zeroOrMore>
<choice>
<ref name="element-location"/>
<ref name="element-colocation"/>
<ref name="element-order"/>
<ref name="element-rsc_ticket"/>
</choice>
</zeroOrMore>
</element>
</define>
<define name="element-location">
<element name="rsc_location">
<attribute name="id"><data type="ID"/></attribute>
<choice>
<group>
- <choice>
- <attribute name="rsc"><data type="IDREF"/></attribute>
- <attribute name="rsc-pattern"><text/></attribute>
- </choice>
+ <attribute name="rsc"><data type="IDREF"/></attribute>
<optional>
<attribute name="role">
<ref name="attribute-roles"/>
</attribute>
</optional>
</group>
<oneOrMore>
<ref name="element-resource-set"/>
</oneOrMore>
</choice>
<choice>
<group>
<externalRef href="score.rng"/>
<attribute name="node"><text/></attribute>
</group>
<oneOrMore>
<externalRef href="rule.rng"/>
</oneOrMore>
</choice>
<optional>
<ref name="element-lifetime"/>
</optional>
<optional>
<attribute name="resource-discovery">
<ref name="attribute-discovery"/>
</attribute>
</optional>
</element>
</define>
<define name="element-resource-set">
<element name="resource_set">
<choice>
<attribute name="id-ref"><data type="IDREF"/></attribute>
<group>
<attribute name="id"><data type="ID"/></attribute>
<optional>
<attribute name="sequential"><data type="boolean"/></attribute>
</optional>
<optional>
<attribute name="require-all"><data type="boolean"/></attribute>
</optional>
<optional>
<attribute name="ordering">
<choice>
<value>group</value>
<value>listed</value>
</choice>
</attribute>
</optional>
<optional>
<attribute name="action">
<ref name="attribute-actions"/>
</attribute>
</optional>
<optional>
<attribute name="role">
<ref name="attribute-roles"/>
</attribute>
</optional>
<optional>
<externalRef href="score.rng"/>
</optional>
<oneOrMore>
<element name="resource_ref">
<attribute name="id"><data type="IDREF"/></attribute>
</element>
</oneOrMore>
</group>
</choice>
</element>
</define>
<define name="element-colocation">
<element name="rsc_colocation">
<attribute name="id"><data type="ID"/></attribute>
<optional>
<choice>
<externalRef href="score.rng"/>
<attribute name="score-attribute"><text/></attribute>
<attribute name="score-attribute-mangle"><text/></attribute>
</choice>
</optional>
<optional>
<ref name="element-lifetime"/>
</optional>
<choice>
<oneOrMore>
<ref name="element-resource-set"/>
</oneOrMore>
<group>
<attribute name="rsc"><data type="IDREF"/></attribute>
<attribute name="with-rsc"><data type="IDREF"/></attribute>
<optional>
<attribute name="node-attribute"><text/></attribute>
</optional>
<optional>
<attribute name="rsc-role">
<ref name="attribute-roles"/>
</attribute>
</optional>
<optional>
<attribute name="with-rsc-role">
<ref name="attribute-roles"/>
</attribute>
</optional>
- <optional>
- <attribute name="rsc-instance"><data type="integer"/></attribute>
- </optional>
- <optional>
- <attribute name="with-rsc-instance"><data type="integer"/></attribute>
- </optional>
</group>
</choice>
</element>
</define>
<define name="element-order">
<element name="rsc_order">
<attribute name="id"><data type="ID"/></attribute>
<optional>
<ref name="element-lifetime"/>
</optional>
<optional>
<attribute name="symmetrical"><data type="boolean"/></attribute>
</optional>
+ <optional>
+ <attribute name="require-all"><data type="boolean"/></attribute>
+ </optional>
<optional>
<choice>
<externalRef href="score.rng"/>
<attribute name="kind">
<ref name="order-types"/>
</attribute>
</choice>
</optional>
<choice>
<oneOrMore>
<ref name="element-resource-set"/>
</oneOrMore>
<group>
<attribute name="first"><data type="IDREF"/></attribute>
<attribute name="then"><data type="IDREF"/></attribute>
<optional>
<attribute name="first-action">
<ref name="attribute-actions"/>
</attribute>
</optional>
<optional>
<attribute name="then-action">
<ref name="attribute-actions"/>
</attribute>
</optional>
- <optional>
- <attribute name="first-instance"><data type="integer"/></attribute>
- </optional>
- <optional>
- <attribute name="then-instance"><data type="integer"/></attribute>
- </optional>
</group>
</choice>
</element>
</define>
<define name="element-rsc_ticket">
<element name="rsc_ticket">
<attribute name="id"><data type="ID"/></attribute>
<choice>
<oneOrMore>
<ref name="element-resource-set"/>
</oneOrMore>
<group>
<attribute name="rsc"><data type="IDREF"/></attribute>
<optional>
<attribute name="rsc-role">
<ref name="attribute-roles"/>
</attribute>
</optional>
</group>
</choice>
<attribute name="ticket"><text/></attribute>
<optional>
<attribute name="loss-policy">
<choice>
<value>stop</value>
<value>demote</value>
<value>fence</value>
<value>freeze</value>
</choice>
</attribute>
</optional>
</element>
</define>
<define name="attribute-discovery">
<choice>
<value>always</value>
<value>never</value>
<value>exclusive</value>
</choice>
</define>
<define name="attribute-actions">
<choice>
<value>start</value>
<value>promote</value>
<value>demote</value>
<value>stop</value>
</choice>
</define>
<define name="attribute-roles">
<choice>
<value>Stopped</value>
<value>Started</value>
<value>Master</value>
<value>Slave</value>
</choice>
</define>
<define name="order-types">
<choice>
<value>Optional</value>
<value>Mandatory</value>
<value>Serialize</value>
</choice>
</define>
<define name="element-lifetime">
<element name="lifetime">
<oneOrMore>
<externalRef href="rule.rng"/>
</oneOrMore>
</element>
</define>
</grammar>
diff --git a/xml/constraints-next.rng b/xml/constraints-next.rng
index 0defe8fc54..9d110031fa 100644
--- a/xml/constraints-next.rng
+++ b/xml/constraints-next.rng
@@ -1,264 +1,267 @@
<?xml version="1.0" encoding="UTF-8"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<ref name="element-constraints"/>
</start>
<define name="element-constraints">
<element name="constraints">
<zeroOrMore>
<choice>
<ref name="element-location"/>
<ref name="element-colocation"/>
<ref name="element-order"/>
<ref name="element-rsc_ticket"/>
</choice>
</zeroOrMore>
</element>
</define>
<define name="element-location">
<element name="rsc_location">
<attribute name="id"><data type="ID"/></attribute>
<choice>
<group>
<choice>
<attribute name="rsc"><data type="IDREF"/></attribute>
<attribute name="rsc-pattern"><text/></attribute>
</choice>
<optional>
<attribute name="role">
<ref name="attribute-roles"/>
</attribute>
</optional>
</group>
<oneOrMore>
<ref name="element-resource-set"/>
</oneOrMore>
</choice>
<choice>
<group>
<externalRef href="score.rng"/>
<attribute name="node"><text/></attribute>
</group>
<oneOrMore>
<externalRef href="rule.rng"/>
</oneOrMore>
</choice>
<optional>
<ref name="element-lifetime"/>
</optional>
<optional>
<attribute name="resource-discovery">
<ref name="attribute-discovery"/>
</attribute>
</optional>
</element>
</define>
<define name="element-resource-set">
<element name="resource_set">
<choice>
<attribute name="id-ref"><data type="IDREF"/></attribute>
<group>
<attribute name="id"><data type="ID"/></attribute>
<optional>
<attribute name="sequential"><data type="boolean"/></attribute>
</optional>
<optional>
<attribute name="require-all"><data type="boolean"/></attribute>
</optional>
<optional>
<attribute name="ordering">
<choice>
<value>group</value>
<value>listed</value>
</choice>
</attribute>
</optional>
<optional>
<attribute name="action">
<ref name="attribute-actions"/>
</attribute>
</optional>
<optional>
<attribute name="role">
<ref name="attribute-roles"/>
</attribute>
</optional>
<optional>
<externalRef href="score.rng"/>
</optional>
<oneOrMore>
<element name="resource_ref">
<attribute name="id"><data type="IDREF"/></attribute>
</element>
</oneOrMore>
</group>
</choice>
</element>
</define>
<define name="element-colocation">
<element name="rsc_colocation">
<attribute name="id"><data type="ID"/></attribute>
<optional>
<choice>
<externalRef href="score.rng"/>
<attribute name="score-attribute"><text/></attribute>
<attribute name="score-attribute-mangle"><text/></attribute>
</choice>
</optional>
<optional>
<ref name="element-lifetime"/>
</optional>
<choice>
<oneOrMore>
<ref name="element-resource-set"/>
</oneOrMore>
<group>
<attribute name="rsc"><data type="IDREF"/></attribute>
<attribute name="with-rsc"><data type="IDREF"/></attribute>
<optional>
<attribute name="node-attribute"><text/></attribute>
</optional>
<optional>
<attribute name="rsc-role">
<ref name="attribute-roles"/>
</attribute>
</optional>
<optional>
<attribute name="with-rsc-role">
<ref name="attribute-roles"/>
</attribute>
</optional>
<optional>
<attribute name="rsc-instance"><data type="integer"/></attribute>
</optional>
<optional>
<attribute name="with-rsc-instance"><data type="integer"/></attribute>
</optional>
</group>
</choice>
</element>
</define>
<define name="element-order">
<element name="rsc_order">
<attribute name="id"><data type="ID"/></attribute>
<optional>
<ref name="element-lifetime"/>
</optional>
<optional>
<attribute name="symmetrical"><data type="boolean"/></attribute>
</optional>
+ <optional>
+ <attribute name="require-all"><data type="boolean"/></attribute>
+ </optional>
<optional>
<choice>
<externalRef href="score.rng"/>
<attribute name="kind">
<ref name="order-types"/>
</attribute>
</choice>
</optional>
<choice>
<oneOrMore>
<ref name="element-resource-set"/>
</oneOrMore>
<group>
<attribute name="first"><data type="IDREF"/></attribute>
<attribute name="then"><data type="IDREF"/></attribute>
<optional>
<attribute name="first-action">
<ref name="attribute-actions"/>
</attribute>
</optional>
<optional>
<attribute name="then-action">
<ref name="attribute-actions"/>
</attribute>
</optional>
<optional>
<attribute name="first-instance"><data type="integer"/></attribute>
</optional>
<optional>
<attribute name="then-instance"><data type="integer"/></attribute>
</optional>
</group>
</choice>
</element>
</define>
<define name="element-rsc_ticket">
<element name="rsc_ticket">
<attribute name="id"><data type="ID"/></attribute>
<choice>
<oneOrMore>
<ref name="element-resource-set"/>
</oneOrMore>
<group>
<attribute name="rsc"><data type="IDREF"/></attribute>
<optional>
<attribute name="rsc-role">
<ref name="attribute-roles"/>
</attribute>
</optional>
</group>
</choice>
<attribute name="ticket"><text/></attribute>
<optional>
<attribute name="loss-policy">
<choice>
<value>stop</value>
<value>demote</value>
<value>fence</value>
<value>freeze</value>
</choice>
</attribute>
</optional>
</element>
</define>
<define name="attribute-discovery">
<choice>
<value>always</value>
<value>never</value>
<value>exclusive</value>
</choice>
</define>
<define name="attribute-actions">
<choice>
<value>start</value>
<value>promote</value>
<value>demote</value>
<value>stop</value>
</choice>
</define>
<define name="attribute-roles">
<choice>
<value>Stopped</value>
<value>Started</value>
<value>Master</value>
<value>Slave</value>
</choice>
</define>
<define name="order-types">
<choice>
<value>Optional</value>
<value>Mandatory</value>
<value>Serialize</value>
</choice>
</define>
<define name="element-lifetime">
<element name="lifetime">
<oneOrMore>
<externalRef href="rule.rng"/>
</oneOrMore>
</element>
</define>
</grammar>

File Metadata

Mime Type
text/x-diff
Expires
Wed, Jun 25, 3:03 AM (20 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1951942
Default Alt Text
(511 KB)

Event Timeline