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])
   2. Linux-HA CVS: lib by andrew from 
      ([email protected])


----------------------------------------------------------------------

Message: 1
Date: Thu, 22 Jun 2006 03:10:24 -0600 (MDT)
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/admin


Modified Files:
        crm_resource.c 


Log Message:
-l will print the raw resource hierarchy

===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/crm/admin/crm_resource.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -3 -r1.40 -r1.41
--- crm_resource.c      19 Jun 2006 13:45:48 -0000      1.40
+++ crm_resource.c      22 Jun 2006 09:10:23 -0000      1.41
@@ -1,4 +1,4 @@
-/* $Id: crm_resource.c,v 1.40 2006/06/19 13:45:48 andrew Exp $ */
+/* $Id: crm_resource.c,v 1.41 2006/06/22 09:10:23 andrew Exp $ */
 
 /* 
  * Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
@@ -69,7 +69,7 @@
 IPC_Channel *crmd_channel = NULL;
 char *xml_file = NULL;
 
-#define OPTARGS        "V?LRQxDCPp:WMUr:H:v:t:p:g:d:i:s:G:S:fX:"
+#define OPTARGS        "V?LRQxDCPp:WMUr:H:v:t:p:g:d:i:s:G:S:fX:l"
 
 static int
 do_find_resource(const char *rsc, pe_working_set_t *data_set)
@@ -98,19 +98,38 @@
                fprintf(stderr, "resource %s is NOT running\n", rsc);
        }
        
-       the_rsc->fns->print(the_rsc, NULL, pe_print_printf, stdout);
-       
        return 0;
 }
 
+static void
+print_raw_rsc(resource_t *rsc, int level) 
+{
+       int lpc = 0;
+       GListPtr children = NULL;
+       for(; lpc < level; lpc++) {
+               printf("  ");
+       }
+       printf(" * %s\n", rsc->id);
+       children = rsc->fns->children(rsc);
+       slist_iter(child, resource_t, children, lpc,
+                  print_raw_rsc(child, level+1);
+               );
+}
+
+
 static int
-do_find_resource_list(pe_working_set_t *data_set)
+do_find_resource_list(pe_working_set_t *data_set, gboolean raw)
 {
        int found = 0;
        
        slist_iter(
                rsc, resource_t, data_set->resources, lpc,
-               if(rsc->orphan && rsc->fns->active(rsc, TRUE) == FALSE) {
+               if(raw) {
+                       found++;
+                       print_raw_rsc(rsc, 0);
+                       continue;
+                       
+               } else if(rsc->orphan && rsc->fns->active(rsc, TRUE) == FALSE) {
                        continue;
                }
                rsc->fns->print(
@@ -559,6 +578,7 @@
                {"help",       0, 0, '?'},
                {"quiet",      0, 0, 'Q'},
                {"list",       0, 0, 'L'},
+               {"list-raw",   0, 0, 'l'},
                {"refresh",    0, 0, 'R'},
                {"reprobe",    0, 0, 'P'},
                {"query-xml",  0, 0, 'x'},
@@ -620,26 +640,15 @@
                                break;
 
                        case 'L':
-                               rsc_cmd = flag;
-                               break;
-                               
+                       case 'l':
                        case 'R':
-                               rsc_cmd = flag;
-                               break;
-                               
                        case 'x':
-                               rsc_cmd = flag;
-                               break;
-                               
                        case 'D':
-                               rsc_cmd = flag;
-                               break;
-                               
                        case 'C':
-                               rsc_cmd = flag;
-                               break;
-                               
                        case 'P':
+                       case 'W':
+                       case 'M':
+                       case 'U':
                                rsc_cmd = flag;
                                break;
                                
@@ -673,16 +682,6 @@
                                rsc_cmd = flag;
                                break;
                                
-                       case 'W':
-                               rsc_cmd = flag;
-                               break;
-                               
-                       case 'M':
-                               rsc_cmd = flag;
-                               break;                          
-                       case 'U':
-                               rsc_cmd = flag;
-                               break;                          
                        case 'f':
                                do_force = TRUE;
                                break;
@@ -746,7 +745,7 @@
        if(rsc_cmd == 'L' || rsc_cmd == 'W' || rsc_cmd == 'D' || rsc_cmd == 'x'
           || rsc_cmd == 'M' || rsc_cmd == 'U' || rsc_cmd == 'C' 
           || rsc_cmd == 'p' || rsc_cmd == 'd' || rsc_cmd == 'g'
-          || rsc_cmd == 'G' || rsc_cmd == 'S') {
+          || rsc_cmd == 'G' || rsc_cmd == 'S' || rsc_cmd == 'l') {
                
                resource_t *rsc = NULL;
                if(xml_file != NULL) {
@@ -798,7 +797,11 @@
 
        if(rsc_cmd == 'L') {
                rc = cib_ok;
-               do_find_resource_list(&data_set);
+               do_find_resource_list(&data_set, FALSE);
+               
+       } else if(rsc_cmd == 'l') {
+               rc = cib_ok;
+               do_find_resource_list(&data_set, TRUE);
                
        } else if(rsc_cmd == 'C') {
                resource_t *rsc = pe_find_resource(data_set.resources, rsc_id);




------------------------------

Message: 2
Date: Thu, 22 Jun 2006 03:11:50 -0600 (MDT)
From: [email protected]
Subject: [Linux-ha-cvs] Linux-HA CVS: lib by andrew from 
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>

linux-ha CVS committal

Author  : andrew
Host    : 
Project : linux-ha
Module  : lib

Dir     : linux-ha/lib/crm/pengine


Modified Files:
        unpack.c 


Log Message:
More reliably reset the clone_name when the resource wasn't active
 - prevents some "interesting" results fomr crm_resource -W

===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lib/crm/pengine/unpack.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- unpack.c    21 Jun 2006 15:56:49 -0000      1.9
+++ unpack.c    22 Jun 2006 09:11:50 -0000      1.10
@@ -1,4 +1,4 @@
-/* $Id: unpack.c,v 1.9 2006/06/21 15:56:49 andrew Exp $ */
+/* $Id: unpack.c,v 1.10 2006/06/22 09:11:50 andrew Exp $ */
 /* 
  * Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
  * 
@@ -671,10 +671,6 @@
                        crm_info("Internally renamed %s on %s to %s",
                                 rsc_id, node->details->uname, rsc->id);
                        rsc->clone_name = crm_strdup(rsc_id);
-
-               } else {
-                       crm_debug_2("Resetting clone_name %s for %s because of 
%s",
-                                rsc->clone_name, rsc->id, rsc_id);
                }
        }
        
@@ -759,6 +755,12 @@
                        stop_action(rsc, node, FALSE);
                }
                        
+       } else if(rsc->clone_name) {
+               crm_debug_2("Resetting clone_name %s for %s (stopped)",
+                           rsc->clone_name, rsc->id);
+               crm_free(rsc->clone_name);
+               rsc->clone_name = NULL;
+
        } else {
                char *key = stop_key(rsc);
                GListPtr possible_matches = find_actions(rsc->actions, key, 
node);
@@ -769,30 +771,102 @@
        }
 }
 
+/* create active recurring operations as optional */ 
+static void
+process_recurring(node_t *node, resource_t *rsc,
+                 int start_index, int stop_index,
+                 GListPtr sorted_op_list, pe_working_set_t *data_set)
+{
+       const char *task = NULL;
+       const char *status = NULL;
+       
+       crm_debug_2("%s: Start index %d, stop index = %d",
+                   rsc->id, start_index, stop_index);
+       slist_iter(rsc_op, crm_data_t, sorted_op_list, lpc,
+                  int interval = 0;
+                  char *key = NULL;
+                  const char *id = ID(rsc_op);
+                  const char *interval_s = NULL;
+                  if(node->details->online == FALSE) {
+                          crm_debug_4("Skipping %s/%s: node is offline",
+                                      rsc->id, node->details->uname);
+                          break;
+                          
+                  } else if(start_index < stop_index) {
+                          crm_debug_4("Skipping %s/%s: not active",
+                                      rsc->id, node->details->uname);
+                          break;
+                          
+                  } else if(lpc <= start_index) {
+                          crm_debug_4("Skipping %s/%s: old",
+                                      id, node->details->uname);
+                          continue;
+                  }
+                  
+                  interval_s = get_interval(rsc_op);
+                  interval = crm_parse_int(interval_s, "0");
+                  if(interval == 0) {
+                          crm_debug_4("Skipping %s/%s: non-recurring",
+                                      id, node->details->uname);
+                          continue;
+                  }
+                  
+                  status = crm_element_value(rsc_op, XML_LRM_ATTR_OPSTATUS);
+                  if(safe_str_eq(status, "-1")) {
+                          crm_debug_4("Skipping %s/%s: status",
+                                      id, node->details->uname);
+                          continue;
+                  }
+                  task = crm_element_value(rsc_op, XML_LRM_ATTR_TASK);
+                  /* create the action */
+                  key = generate_op_key(rsc->id, task, interval);
+                  crm_debug_3("Creating %s/%s", key, node->details->uname);
+                  custom_action(rsc, key, task, node, TRUE, TRUE, data_set);
+               );
+}
 
 static void
 unpack_lrm_rsc_state(
        node_t *node, crm_data_t * rsc_entry, pe_working_set_t *data_set)
-{
+{      
        int fail_count = 0;
+       int stop_index = -1;
+       int start_index = -1;
+       int max_call_id = -1;
+
        char *fail_attr = NULL;
+       const char *task = NULL;
+       const char *status = NULL;
        const char *value = NULL;
        const char *fail_val = NULL;
-
        const char *rsc_id  = crm_element_value(rsc_entry, XML_ATTR_ID);
 
-       int max_call_id = -1;
+       resource_t *rsc = NULL;
        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, 
rsc_entry);
-       
        crm_debug_3("[%s] Processing %s on %s",
                    crm_element_name(rsc_entry), rsc_id, node->details->uname);
-       
+
+       /* extract operations */
+       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) {
+               /* if there are no operations, there is nothing to do */
+               return;
+       }
+
+       /* find the resource */
+       rsc = unpack_find_resource(data_set, node, rsc_id, rsc_entry);
        if(rsc == NULL) {
                rsc = process_orphan_resource(rsc_entry, node, data_set);
        } 
@@ -818,99 +892,44 @@
        /* 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) {
-               int stop_index = -1;
-               int start_index = -1;
-               const char *task = NULL;
-               const char *status = 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,
-                       task = crm_element_value(rsc_op, XML_LRM_ATTR_TASK);
-                       status = crm_element_value(rsc_op, 
XML_LRM_ATTR_OPSTATUS);
-                       if(safe_str_eq(task, CRMD_ACTION_STOP)
-                          && safe_str_eq(status, "0")) {
-                               stop_index = lpc;
-
-                       } else if(safe_str_eq(task, CRMD_ACTION_START)) {
+       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,
+               task = crm_element_value(rsc_op, XML_LRM_ATTR_TASK);
+               status = crm_element_value(rsc_op, XML_LRM_ATTR_OPSTATUS);
+               if(safe_str_eq(task, CRMD_ACTION_STOP)
+                  && safe_str_eq(status, "0")) {
+                       stop_index = lpc;
+                       
+               } else if(safe_str_eq(task, CRMD_ACTION_START)) {
+                       start_index = lpc;
+                       
+               } else if(start_index <= stop_index
+                         && safe_str_eq(task, CRMD_ACTION_STATUS)) {
+                       const char *rc = crm_element_value(rsc_op, 
XML_LRM_ATTR_RC);
+                       if(safe_str_eq(rc, "0")
+                          || safe_str_eq(rc, "8")) {
                                start_index = lpc;
-
-                       } else if(start_index <= stop_index
-                                 && safe_str_eq(task, CRMD_ACTION_STATUS)) {
-                               const char *rc = crm_element_value(rsc_op, 
XML_LRM_ATTR_RC);
-                               if(safe_str_eq(rc, "0")
-                                  || safe_str_eq(rc, "8")) {
-                                       start_index = lpc;
-                               }
                        }
-                       
-                       unpack_rsc_op(rsc, node, rsc_op,
-                                     &max_call_id, &on_fail, data_set);
-                       );
-
-               crm_debug_2("%s: Start index %d, stop index = %d",
-                           rsc->id, start_index, stop_index);
-               slist_iter(rsc_op, crm_data_t, sorted_op_list, lpc,
-                          int interval = 0;
-                          char *key = NULL;
-                          const char *id = ID(rsc_op);
-                          const char *interval_s = NULL;
-                          if(node->details->online == FALSE) {
-                                  crm_debug_4("Skipping %s/%s: node is 
offline",
-                                              rsc->id, node->details->uname);
-                                  break;
-                                  
-                          } else if(start_index < stop_index) {
-                                  crm_debug_4("Skipping %s/%s: not active",
-                                              rsc->id, node->details->uname);
-                                  break;
-                                  
-                          } else if(lpc <= start_index) {
-                                  crm_debug_4("Skipping %s/%s: old",
-                                              id, node->details->uname);
-                                  continue;
-                          }
-                          
-                          interval_s = get_interval(rsc_op);
-                          interval = crm_parse_int(interval_s, "0");
-                          if(interval == 0) {
-                                  crm_debug_4("Skipping %s/%s: non-recurring",
-                                              id, node->details->uname);
-                                  continue;
-                          }
-
-                          status = crm_element_value(rsc_op, 
XML_LRM_ATTR_OPSTATUS);
-                          if(safe_str_eq(status, "-1")) {
-                                  crm_debug_4("Skipping %s/%s: status",
-                                              id, node->details->uname);
-                                  continue;
-                          }
-                          task = crm_element_value(rsc_op, XML_LRM_ATTR_TASK);
-                          /* create the action */
-                          key = generate_op_key(rsc->id, task, interval);
-                          crm_debug_3("Creating %s/%s", key, 
node->details->uname);
-                          custom_action(rsc, key, task, node,
-                                        TRUE, TRUE, data_set);
-                       );
-               
-               /* no need to free the contents */
-               g_list_free(sorted_op_list);
+               }
                
-               process_rsc_state(rsc, node, on_fail, data_set);
-       }
+               unpack_rsc_op(rsc, node, rsc_op,
+                             &max_call_id, &on_fail, data_set);
+               );
+
+       /* create active recurring operations as optional */ 
+       process_recurring(node, rsc, start_index, stop_index,
+                         sorted_op_list, data_set);
+       
+       /* no need to free the contents */
+       g_list_free(sorted_op_list);
        
+       process_rsc_state(rsc, node, on_fail, data_set);
+
        value = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_TARGET_ROLE);
        if(value != NULL && safe_str_neq("default", value)) {
                enum rsc_role_e req_role = text2role(value);




------------------------------

_______________________________________________
Linux-ha-cvs mailing list
[email protected]
http://lists.community.tummy.com/mailman/listinfo/linux-ha-cvs


End of Linux-ha-cvs Digest, Vol 31, Issue 79
********************************************

Reply via email to