Send Linux-ha-cvs mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://lists.community.tummy.com/mailman/listinfo/linux-ha-cvs
or, via email, send a message with subject or body 'help' to
[EMAIL PROTECTED]
You can reach the person managing the list at
[EMAIL PROTECTED]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Linux-ha-cvs digest..."
Today's Topics:
1. Linux-HA CVS: crm by andrew from
([email protected])
----------------------------------------------------------------------
Message: 1
Date: Thu, 9 Mar 2006 14:36:39 -0700 (MST)
From: [email protected]
Subject: [Linux-ha-cvs] Linux-HA CVS: crm by andrew from
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>
linux-ha CVS committal
Author : andrew
Host :
Project : linux-ha
Module : crm
Dir : linux-ha/crm/pengine
Modified Files:
complex.c native.c pengine.c pengine.h unpack.c
Log Message:
Implement support for "failure stickiness"
- how much we prefer not to stay running on a node after a resource has
failed on it
Break up the monolythic unpack_lrm_rsc_state function into more manageable
pieces
Continue processing orphan resources to see if they're active
Update some test output
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/crm/pengine/complex.c,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -3 -r1.72 -r1.73
--- complex.c 27 Jan 2006 11:15:49 -0000 1.72
+++ complex.c 9 Mar 2006 21:36:38 -0000 1.73
@@ -1,4 +1,4 @@
-/* $Id: complex.c,v 1.72 2006/01/27 11:15:49 andrew Exp $ */
+/* $Id: complex.c,v 1.73 2006/03/09 21:36:38 andrew Exp $ */
/*
* Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
*
@@ -185,13 +185,14 @@
XML_RSC_ATTR_STOPFAIL,
XML_RSC_ATTR_RESTART,
"resource_stickiness",
+ "resource_failure_stickiness",
"multiple_active",
"start_prereq",
"is_managed",
"globally_unique",
"notify"
- };
-
+ };
+
crm_log_xml_debug_3(xml_obj, "Processing resource input...");
if(id == NULL) {
@@ -261,6 +262,7 @@
(*rsc)->recovery_type = recovery_stop_start;
(*rsc)->stickiness = data_set->default_resource_stickiness;
+ (*rsc)->fail_stickiness = data_set->default_resource_fail_stickiness;
value = g_hash_table_lookup((*rsc)->parameters, XML_CIB_ATTR_PRIORITY);
(*rsc)->priority = crm_parse_int(value, "0");
@@ -326,7 +328,16 @@
crm_debug_2("\tPlacement: optimal%s",
value == NULL?" (default)":"");
}
-
+
+ value = g_hash_table_lookup(
+ (*rsc)->parameters, "resource_failure_stickiness");
+ if(value != NULL) {
+ (*rsc)->fail_stickiness = char2score(value);
+ }
+ crm_debug_2("\tNode score per failure: %d%s",
+ (*rsc)->fail_stickiness, value == NULL?" (default)":"");
+
+
crm_debug_2("\tNotification of start/stop actions: %s",
(*rsc)->notify?"required":"not required");
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/crm/pengine/native.c,v
retrieving revision 1.112
retrieving revision 1.113
diff -u -3 -r1.112 -r1.113
--- native.c 17 Feb 2006 13:22:19 -0000 1.112
+++ native.c 9 Mar 2006 21:36:38 -0000 1.113
@@ -1,4 +1,4 @@
-/* $Id: native.c,v 1.112 2006/02/17 13:22:19 andrew Exp $ */
+/* $Id: native.c,v 1.113 2006/03/09 21:36:38 andrew Exp $ */
/*
* Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
*
@@ -119,6 +119,10 @@
"not_managed_default", rsc, INFINITY, node, data_set);
return;
+ } else if(rsc->failed) {
+ crm_info("Skipping resource stickiness for failed resource %s",
+ rsc->id);
+
} else if(rsc->stickiness > 0 || rsc->stickiness < 0) {
rsc2node_new("stickiness", rsc, rsc->stickiness, node,data_set);
crm_debug("Resource %s: preferring current location (%s/%s)",
@@ -145,6 +149,7 @@
} else if(rsc->recovery_type == recovery_block) {
rsc->is_managed = FALSE;
}
+
} else {
crm_debug_2("Resource %s is active on: %s",
rsc->id, node->details->uname);
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/crm/pengine/pengine.c,v
retrieving revision 1.104
retrieving revision 1.105
diff -u -3 -r1.104 -r1.105
--- pengine.c 8 Mar 2006 15:49:39 -0000 1.104
+++ pengine.c 9 Mar 2006 21:36:38 -0000 1.105
@@ -1,4 +1,4 @@
-/* $Id: pengine.c,v 1.104 2006/03/08 15:49:39 andrew Exp $ */
+/* $Id: pengine.c,v 1.105 2006/03/09 21:36:38 andrew Exp $ */
/*
* Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
*
@@ -353,4 +353,6 @@
data_set->action_id = 1;
data_set->color_id = 0;
+ data_set->default_resource_stickiness = 0;
+ data_set->default_resource_fail_stickiness = 0;
}
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/crm/pengine/pengine.h,v
retrieving revision 1.106
retrieving revision 1.107
diff -u -3 -r1.106 -r1.107
--- pengine.h 8 Mar 2006 15:49:39 -0000 1.106
+++ pengine.h 9 Mar 2006 21:36:38 -0000 1.107
@@ -1,4 +1,4 @@
-/* $Id: pengine.h,v 1.106 2006/03/08 15:49:39 andrew Exp $ */
+/* $Id: pengine.h,v 1.107 2006/03/09 21:36:38 andrew Exp $ */
/*
* Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
*
@@ -102,6 +102,7 @@
gboolean short_rsc_names;
int default_resource_stickiness;
+ int default_resource_fail_stickiness;
no_quorum_policy_t no_quorum_policy;
GHashTable *config_hash;
@@ -287,6 +288,7 @@
int priority;
int stickiness;
+ int fail_stickiness;
int effective_priority;
gboolean notify;
@@ -296,7 +298,7 @@
gboolean runnable;
gboolean provisional;
gboolean globally_unique;
-
+
gboolean failed;
gboolean start_pending;
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/crm/pengine/unpack.c,v
retrieving revision 1.160
retrieving revision 1.161
diff -u -3 -r1.160 -r1.161
--- unpack.c 8 Mar 2006 15:49:40 -0000 1.160
+++ unpack.c 9 Mar 2006 21:36:38 -0000 1.161
@@ -1,4 +1,4 @@
-/* $Id: unpack.c,v 1.160 2006/03/08 15:49:40 andrew Exp $ */
+/* $Id: unpack.c,v 1.161 2006/03/09 21:36:38 andrew Exp $ */
/*
* Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
*
@@ -46,7 +46,7 @@
gboolean unpack_rsc_location(crm_data_t *xml_obj, pe_working_set_t *data_set);
-gboolean unpack_lrm_rsc_state(
+gboolean unpack_lrm_resources(
node_t *node, crm_data_t * lrm_state, pe_working_set_t *data_set);
gboolean add_node_attrs(
@@ -102,6 +102,7 @@
#if CRM_DEPRECATED_SINCE_2_0_1
param_value(config_hash, config, "transition_idle_timeout");
param_value(config_hash, config, "default_resource_stickiness");
+ param_value(config_hash, config, "default_resource_failure_stickiness");
param_value(config_hash, config, "stonith_enabled");
param_value(config_hash, config, "symmetric_cluster");
param_value(config_hash, config, "no_quorum_policy");
@@ -131,6 +132,11 @@
data_set->default_resource_stickiness = char2score(value);
crm_info("Default stickiness: %d",
data_set->default_resource_stickiness);
+
+ get_cluster_pref("default_resource_failure_stickiness");
+ data_set->default_resource_fail_stickiness = char2score(value);
+ crm_info("Default failure stickiness: %d",
+ data_set->default_resource_fail_stickiness);
get_cluster_pref("stonith_enabled");
if(value != NULL) {
@@ -424,10 +430,6 @@
return TRUE;
}
-
-
-
-
/* remove nodes that are down, stopping */
/* create +ve rsc_to_node constraints between resources and the nodes they are
running on */
/* anything else? */
@@ -483,9 +485,8 @@
* make sure rsc start events happen after the stonith
*/
crm_debug_3("Processing lrm resource entries");
- unpack_lrm_rsc_state(this_node, lrm_rsc, data_set);
+ unpack_lrm_resources(this_node, lrm_rsc, data_set);
}
-
);
return TRUE;
@@ -713,23 +714,101 @@
extern gboolean DeleteRsc(resource_t *rsc, node_t *node, pe_working_set_t
*data_set);
-gboolean
-unpack_lrm_rsc_state(node_t *node, crm_data_t * lrm_rsc_list, pe_working_set_t
*data_set)
+static resource_t *
+unpack_find_resource(
+ pe_working_set_t *data_set, node_t *node, const char *rsc_id)
{
- gboolean delete_resource = FALSE;
- enum rsc_role_e saved_role = RSC_ROLE_UNKNOWN;
- const char *rsc_id = NULL;
- const char *node_id = node->details->uname;
- const char *rsc_state = NULL;
-
- int max_call_id = -1;
+ resource_t *rsc = NULL;
+ gboolean is_duped_clone = FALSE;
+ char *alt_rsc_id = crm_strdup(rsc_id);
+
+ while(rsc == NULL) {
+ crm_debug_3("looking for: %s", alt_rsc_id);
+ rsc = pe_find_resource(data_set->resources, alt_rsc_id);
+ /* no match */
+ if(rsc == NULL) {
+ crm_debug_3("not found");
+ break;
+
+ /* not running anywhere else */
+ } else if(rsc->running_on == NULL) {
+ crm_debug_3("not active yet");
+ break;
+
+ /* always unique */
+ } else if(rsc->globally_unique) {
+ crm_debug_3("unique");
+ break;
+
+ /* running somewhere already but we dont care
+ * find another clone instead
+ */
+ } else {
+ crm_debug_2("find another one");
+ rsc = NULL;
+ is_duped_clone = TRUE;
+ increment_clone(alt_rsc_id);
+ }
+ }
+ crm_free(alt_rsc_id);
+ if(is_duped_clone && rsc != NULL) {
+ crm_info("Internally renamed %s on %s to %s",
+ rsc_id, node->details->uname, rsc->id);
+ rsc->name = rsc_id;
+ }
+ return rsc;
+}
+static resource_t *
+process_orphan_resource(crm_data_t *rsc_entry, node_t *node, pe_working_set_t
*data_set)
+{
+ resource_t *rsc = NULL;
gboolean is_duped_clone = FALSE;
- resource_t *rsc = NULL;
- GListPtr op_list = NULL;
- GListPtr sorted_op_list = NULL;
- char *alt_rsc_id = NULL;
- enum action_fail_response on_fail = FALSE;
+ const char *rsc_id = crm_element_value(rsc_entry, XML_ATTR_ID);
+ crm_data_t *xml_rsc = create_xml_node(NULL, XML_CIB_TAG_RESOURCE);
+
+ crm_log_xml_info(rsc_entry, "Orphan resource");
+
+ pe_config_warn("Nothing known about resource %s running on %s",
+ rsc_id, node->details->uname);
+
+ if(pe_find_resource(data_set->resources, rsc_id) != NULL) {
+ is_duped_clone = TRUE;
+ }
+
+ copy_in_properties(xml_rsc, rsc_entry);
+
+ common_unpack(xml_rsc, &rsc, NULL, data_set);
+ rsc->orphan = TRUE;
+
+ data_set->resources = g_list_append(data_set->resources, rsc);
+
+ if(data_set->stop_rsc_orphans == FALSE && is_duped_clone == FALSE) {
+ rsc->is_managed = FALSE;
+
+ } else {
+ crm_info("Making sure orphan %s is stopped", rsc_id);
+
+ print_resource(LOG_DEBUG_3, "Added orphan", rsc, FALSE);
+
+ CRM_DEV_ASSERT(rsc != NULL);
+ slist_iter(
+ any_node, node_t, data_set->nodes, lpc,
+ rsc2node_new(
+ "__orphan_dont_run__", rsc,
+ -INFINITY, any_node, data_set);
+ );
+ }
+ return rsc;
+}
+
+static gboolean
+check_rsc_parameters(resource_t *rsc, node_t *node, crm_data_t *rsc_entry,
+ pe_working_set_t *data_set)
+{
+ int attr_lpc = 0;
+ gboolean force_restart = FALSE;
+ gboolean delete_resource = FALSE;
const char *value = NULL;
const char *old_value = NULL;
@@ -738,221 +817,195 @@
XML_AGENT_ATTR_CLASS,
XML_AGENT_ATTR_PROVIDER
};
-
- CRM_DEV_ASSERT(node != NULL);
- if(crm_assert_failed) {
- return FALSE;
- }
-
- xml_child_iter_filter(
- lrm_rsc_list, rsc_entry, XML_LRM_TAG_RESOURCE,
-
- delete_resource = FALSE;
- rsc_id = crm_element_value(rsc_entry, XML_ATTR_ID);
- rsc_state = crm_element_value(rsc_entry, XML_LRM_ATTR_RSCSTATE);
-
- rsc = NULL;
- is_duped_clone = FALSE;
- alt_rsc_id = crm_strdup(rsc_id);
-
- while(rsc == NULL) {
- crm_debug_3("looking for: %s", alt_rsc_id);
- rsc = pe_find_resource(data_set->resources, alt_rsc_id);
- /* no match */
- if(rsc == NULL) {
- crm_debug_3("not found");
- break;
-
- /* not running anywhere else */
- } else if(rsc->running_on == NULL) {
- crm_debug_3("not active yet");
- break;
-
- /* always unique */
- } else if(rsc->globally_unique) {
- crm_debug_3("unique");
- break;
- /* running somewhere already but we dont care
- * find another clone instead
- */
- } else {
- crm_debug_2("find another one");
- rsc = NULL;
- is_duped_clone = TRUE;
- increment_clone(alt_rsc_id);
- }
- }
- crm_free(alt_rsc_id);
- if(is_duped_clone && rsc != NULL) {
- crm_info("Internally renamed %s on %s to %s",
- rsc_id, node->details->uname, rsc->id);
- rsc->name = rsc_id;
+ for(; attr_lpc < DIMOF(attr_list); attr_lpc++) {
+ value = crm_element_value(rsc->xml, attr_list[attr_lpc]);
+ old_value = crm_element_value(rsc_entry, attr_list[attr_lpc]);
+ if(safe_str_eq(value, old_value)) {
+ continue;
}
- crm_debug_3("[%s] Processing %s on %s (%s)",
- crm_element_name(rsc_entry),
- rsc_id, node_id, rsc_state);
+ force_restart = TRUE;
+ crm_notice("Forcing restart of %s on %s, %s changed: %s -> %s",
+ rsc->id, node->details->uname, attr_list[attr_lpc],
+ crm_str(old_value), crm_str(value));
+ }
+ if(force_restart) {
+ /* make sure the restart happens */
+ stop_action(rsc, node, FALSE);
+ rsc->start_pending = TRUE;
+ delete_resource = TRUE;
+ }
+ return delete_resource;
+}
- if(rsc == NULL) {
- crm_data_t *xml_rsc = create_xml_node(
- NULL, XML_CIB_TAG_RESOURCE);
+static void
+process_rsc_state(resource_t *rsc, node_t *node,
+ enum action_fail_response on_fail,
+ pe_working_set_t *data_set)
+{
+ crm_debug_2("Resource %s is %s on %s",
+ rsc->id, role2text(rsc->role),
+ node->details->uname);
- crm_log_xml_info(rsc_entry, "Orphan resource");
+ rsc->known_on = g_list_append(rsc->known_on, node);
- pe_config_warn("Nothing known about resource"
- " %s running on %s", rsc_id, node_id);
-
- copy_in_properties(xml_rsc, rsc_entry);
-
- common_unpack(xml_rsc, &rsc, NULL, data_set);
- rsc->orphan = TRUE;
-
- data_set->resources = g_list_append(
- data_set->resources, rsc);
-
- if(data_set->stop_rsc_orphans == FALSE
- && is_duped_clone == FALSE) {
- rsc->is_managed = FALSE;
+ if(rsc->role != RSC_ROLE_STOPPED) {
+ if(on_fail != action_fail_ignore) {
+ rsc->failed = TRUE;
+ crm_debug_2("Force stop");
+ }
- } else {
- crm_info("Making sure orphan %s is stopped",
- rsc_id);
+ crm_debug_2("Adding %s to %s",
+ rsc->id, node->details->uname);
+ native_add_running(rsc, node, data_set);
- print_resource(LOG_DEBUG_3, "Added orphan",
- rsc, FALSE);
+ if(on_fail == action_fail_ignore) {
+ /* nothing to do */
+ } else if(node->details->unclean) {
+ stop_action(rsc, node, FALSE);
+
+ } else if(on_fail == action_fail_fence) {
+ /* treat it as if it is still running
+ * but also mark the node as unclean
+ */
+ node->details->unclean = TRUE;
+ stop_action(rsc, node, FALSE);
- CRM_DEV_ASSERT(rsc != NULL);
- slist_iter(
- any_node, node_t, data_set->nodes, lpc,
- rsc2node_new(
- "__orphan_dont_run__", rsc,
- -INFINITY, any_node, data_set);
- );
- }
-
- } else {
- int attr_lpc = 0;
- gboolean force_restart = FALSE;
- for(; attr_lpc < DIMOF(attr_list); attr_lpc++) {
- value = crm_element_value(
- rsc->xml, attr_list[attr_lpc]);
- old_value = crm_element_value(
- rsc_entry, attr_list[attr_lpc]);
- if(safe_str_eq(value, old_value)) {
- continue;
- }
+ } else if(on_fail == action_fail_block) {
+ /* is_managed == FALSE will prevent any
+ * actions being sent for the resource
+ */
+ rsc->is_managed = FALSE;
- force_restart = TRUE;
- crm_notice("Forcing restart of %s on %s,"
- " %s changed: %s -> %s",
- rsc->id, node->details->uname,
- attr_list[attr_lpc],
- crm_str(old_value), crm_str(value));
- }
- if(force_restart) {
- /* make sure the restart happens */
- stop_action(rsc, node, FALSE);
- rsc->start_pending = TRUE;
- delete_resource = TRUE;
- }
- }
-
- max_call_id = -1;
+ } else if(on_fail == action_fail_migrate) {
+ stop_action(rsc, node, FALSE);
- op_list = NULL;
- sorted_op_list = NULL;
-
- xml_child_iter_filter(
- rsc_entry, rsc_op, XML_LRM_TAG_RSC_OP,
- op_list = g_list_append(op_list, rsc_op);
+ /* make sure it comes up somewhere else
+ * or not at all
+ */
+ rsc2node_new("__action_migration_auto__",
+ rsc, -INFINITY, node, data_set);
+
+ } else {
+ stop_action(rsc, node, FALSE);
+ }
+
+ } else {
+ char *key = stop_key(rsc);
+ GListPtr possible_matches = find_actions(rsc->actions, key,
node);
+ slist_iter(stop, action_t, possible_matches, lpc,
+ stop->optional = TRUE;
);
+ crm_free(key);
+
+/* if(rsc->failed == FALSE && node->details->online) { */
+/* delete_resource = TRUE; */
+/* } */
+ }
+}
- if(op_list == NULL) {
- continue;
- }
+static void
+unpack_lrm_rsc_state(node_t *node, crm_data_t * rsc_entry, pe_working_set_t
*data_set)
+{
+ int fail_count = 0;
+ char *fail_attr = NULL;
+ const char *fail_val = NULL;
+ gboolean delete_resource = FALSE;
+
+ const char *rsc_id = crm_element_value(rsc_entry, XML_ATTR_ID);
+ const char *rsc_state = crm_element_value(rsc_entry,
XML_LRM_ATTR_RSCSTATE);
+
+ int max_call_id = -1;
+ GListPtr op_list = NULL;
+ GListPtr sorted_op_list = NULL;
+
+ enum action_fail_response on_fail = FALSE;
+ enum rsc_role_e saved_role = RSC_ROLE_UNKNOWN;
+
+ resource_t *rsc = unpack_find_resource(data_set, node, rsc_id);
+
+ crm_debug_3("[%s] Processing %s on %s (%s)",
+ crm_element_name(rsc_entry),
+ rsc_id, node->details->uname, rsc_state);
+
+ if(rsc == NULL) {
+ rsc = process_orphan_resource(rsc_entry, node, data_set);
+ }
+ CRM_ASSERT(rsc != NULL);
+
+ delete_resource = check_rsc_parameters(rsc, node, rsc_entry, data_set);
+
+ /* process failure stickiness */
+ fail_count = 0;
+ fail_attr = crm_concat(rsc->id, "fail-count", '-');
+ fail_val = g_hash_table_lookup(node->details->attrs, fail_attr);
+ if(fail_val != NULL) {
+ crm_debug("%s: %s", fail_attr, fail_val);
+ fail_count = crm_parse_int(fail_val, "0");
+ }
+ crm_free(fail_attr);
+ if(fail_count > 0) {
+ rsc2node_new("fail_stickiness", rsc,
+ fail_count * rsc->fail_stickiness,
+ node, data_set);
+ crm_debug("Setting failure stickiness for %s on %s: %d",
+ rsc->id, node->details->uname,
+ fail_count * rsc->fail_stickiness);
+ }
+
+ /* process operations */
+ max_call_id = -1;
+
+ op_list = NULL;
+ sorted_op_list = NULL;
+ xml_child_iter_filter(
+ rsc_entry, rsc_op, XML_LRM_TAG_RSC_OP,
+ op_list = g_list_append(op_list, rsc_op);
+ );
+
+ if(op_list != NULL) {
saved_role = rsc->role;
on_fail = action_fail_ignore;
rsc->role = RSC_ROLE_STOPPED;
sorted_op_list = g_list_sort(op_list, sort_op_by_callid);
-
+
slist_iter(
rsc_op, crm_data_t, sorted_op_list, lpc,
-
+
unpack_rsc_op(rsc, node, rsc_op,
&max_call_id, &on_fail, data_set);
);
-
+
/* no need to free the contents */
g_list_free(sorted_op_list);
+
+ process_rsc_state(rsc, node, on_fail, data_set);
+ }
+
+ if(delete_resource) {
+ DeleteRsc(rsc, node, data_set);
+ }
+
+ if(saved_role > rsc->role) {
+ rsc->role = saved_role;
+ }
+}
- crm_debug_2("Resource %s is %s on %s",
- rsc->id, role2text(rsc->role),
- node->details->uname);
-
- rsc->known_on = g_list_append(rsc->known_on, node);
- if(rsc->role != RSC_ROLE_STOPPED) {
- crm_debug_2("Adding %s to %s",
- rsc->id, node->details->uname);
- native_add_running(rsc, node, data_set);
-
- if(on_fail != action_fail_ignore) {
- rsc->failed = TRUE;
- crm_debug_2("Force stop");
- }
-
- if(on_fail == action_fail_ignore) {
- /* nothing to do */
- } else if(node->details->unclean) {
- stop_action(rsc, node, FALSE);
-
- } else if(on_fail == action_fail_fence) {
- /* treat it as if it is still running
- * but also mark the node as unclean
- */
- node->details->unclean = TRUE;
- stop_action(rsc, node, FALSE);
-
- } else if(on_fail == action_fail_block) {
- /* is_managed == FALSE will prevent any
- * actions being sent for the resource
- */
- rsc->is_managed = FALSE;
-
- } else if(on_fail == action_fail_migrate) {
- stop_action(rsc, node, FALSE);
-
- /* make sure it comes up somewhere else
- * or not at all
- */
- rsc2node_new("__action_migration_auto__",
- rsc, -INFINITY, node, data_set);
-
- } else {
- stop_action(rsc, node, FALSE);
- }
-
- } else {
- char *key = stop_key(rsc);
- GListPtr possible_matches = find_actions(rsc->actions,
key, node);
- slist_iter(stop, action_t, possible_matches, lpc,
- stop->optional = TRUE;
- );
- crm_free(key);
-
-/* if(rsc->failed == FALSE && node->details->online) { */
-/* delete_resource = TRUE; */
-/* } */
- }
+gboolean
+unpack_lrm_resources(node_t *node, crm_data_t * lrm_rsc_list, pe_working_set_t
*data_set)
+{
+ CRM_DEV_ASSERT(node != NULL);
+ if(crm_assert_failed) {
+ return FALSE;
+ }
- if(delete_resource) {
- DeleteRsc(rsc, node, data_set);
- }
-
- if(saved_role > rsc->role) {
- rsc->role = saved_role;
- }
+ crm_debug_3("Unpacking resources on %s", node->details->uname);
+
+ xml_child_iter_filter(
+ lrm_rsc_list, rsc_entry, XML_LRM_TAG_RESOURCE,
+ unpack_lrm_rsc_state(node, rsc_entry, data_set);
);
return TRUE;
------------------------------
_______________________________________________
Linux-ha-cvs mailing list
[email protected]
http://lists.community.tummy.com/mailman/listinfo/linux-ha-cvs
End of Linux-ha-cvs Digest, Vol 28, Issue 15
********************************************