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