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
********************************************

Reply via email to