diff --git a/_service b/_service
index beaebd9..a730e3c 100644
--- a/_service
+++ b/_service
@@ -8,10 +8,10 @@
To update to a new release, change "revision" to the desired
git commit hash and bump "version" if necessary
- 1.1.10
+ 1.1.11
-->
- 1.1.10+git%cd.%h
- 6290953f2b035a92a8f093973b94c5cf38b79cd9
+ 1.1.11+git%cd.%h
+ 0b7d85a159cc92e00ebded65c9a33edce7ba1c22
diff --git a/pacemaker-1.1.10+git20140207.6290953.tar.bz2 b/pacemaker-1.1.10+git20140207.6290953.tar.bz2
deleted file mode 100644
index 1d73776..0000000
--- a/pacemaker-1.1.10+git20140207.6290953.tar.bz2
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ee508a203e095214c139a1a3a6e5024eb5e7f6a73a4616592c159a0fde416085
-size 9321667
diff --git a/pacemaker-1.1.11+git20140221.0b7d85a.tar.bz2 b/pacemaker-1.1.11+git20140221.0b7d85a.tar.bz2
new file mode 100644
index 0000000..32fd94f
--- /dev/null
+++ b/pacemaker-1.1.11+git20140221.0b7d85a.tar.bz2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4209bd9bd0deed4aa6a9254ab2606e18cb9b9b4f31394c96811139a33f977268
+size 9254287
diff --git a/pacemaker-crm_mon-brief.patch b/pacemaker-crm_mon-brief.patch
deleted file mode 100644
index f3a09a9..0000000
--- a/pacemaker-crm_mon-brief.patch
+++ /dev/null
@@ -1,374 +0,0 @@
-commit 9584fca04fc5b7a72dba09cc44fcfbe917325737
-Author: Gao,Yan
-Date: Fri Jan 24 16:11:36 2014 +0800
-
- Feature: crm_mon: Display brief output if "-b/--brief" is supplied or 'b' is toggled
-
- It's very helpful if there are many same types of resources.
-
- If -b/--brief is supplied, the output is like:
-
- 6 (ocf::pacemaker:Dummy): Active node1
-
- If -r/--inactive is also supplied:
-
- 6/10 (ocf::pacemaker:Dummy): Active node1
- 0/5 (ocf::heartbeat:Dummy): Active
-
- Output for a group is like:
- Resource Group: group1
- 18/20 (ocf::pacemaker:Dummy): Active node1
- 12/15 (ocf::heartbeat:Dummy): Active node1
-
- If -n/--group-by-node is also supplied, the output of the node is like:
-
- Node node1: online
- 24 (ocf::pacemaker:Dummy): Active
- 12 (ocf::heartbeat:Dummy): Active
-
-diff --git a/include/crm/pengine/common.h b/include/crm/pengine/common.h
-index c1901ef..ddca95d 100644
---- a/include/crm/pengine/common.h
-+++ b/include/crm/pengine/common.h
-@@ -98,6 +98,7 @@ enum pe_print_options {
- pe_print_suppres_nl = 0x0200,
- pe_print_xml = 0x0400,
- pe_print_pending = 0x0800,
-+ pe_print_brief = 0x1000,
- };
- /* *INDENT-ON* */
-
-diff --git a/include/crm/pengine/internal.h b/include/crm/pengine/internal.h
-index 46e63c4..072c0a9 100644
---- a/include/crm/pengine/internal.h
-+++ b/include/crm/pengine/internal.h
-@@ -265,4 +265,7 @@ gboolean is_baremetal_remote_node(node_t *node);
- gboolean is_container_remote_node(node_t *node);
- gboolean is_remote_node(node_t *node);
- resource_t * rsc_contains_remote_node(pe_working_set_t * data_set, resource_t *rsc);
-+
-+void print_rscs_brief(GListPtr rsc_list, const char * pre_text, long options,
-+ void * print_data, gboolean print_all);
- #endif
-diff --git a/lib/pengine/group.c b/lib/pengine/group.c
-index 885486e..831376c 100644
---- a/lib/pengine/group.c
-+++ b/lib/pengine/group.c
-@@ -168,15 +168,20 @@ group_print(resource_t * rsc, const char *pre_text, long options, void *print_da
- status_print("\n");
- }
-
-- for (; gIter != NULL; gIter = gIter->next) {
-- resource_t *child_rsc = (resource_t *) gIter->data;
-+ if (options & pe_print_brief) {
-+ print_rscs_brief(rsc->children, child_text, options, print_data, TRUE);
-
-- if (options & pe_print_html) {
-- status_print("\n");
-- }
-- child_rsc->fns->print(child_rsc, child_text, options, print_data);
-- if (options & pe_print_html) {
-- status_print("\n");
-+ } else {
-+ for (; gIter != NULL; gIter = gIter->next) {
-+ resource_t *child_rsc = (resource_t *) gIter->data;
-+
-+ if (options & pe_print_html) {
-+ status_print("\n");
-+ }
-+ child_rsc->fns->print(child_rsc, child_text, options, print_data);
-+ if (options & pe_print_html) {
-+ status_print("\n");
-+ }
- }
- }
-
-diff --git a/lib/pengine/native.c b/lib/pengine/native.c
-index be95ba1..b223ab3 100644
---- a/lib/pengine/native.c
-+++ b/lib/pengine/native.c
-@@ -687,3 +687,160 @@ native_location(resource_t * rsc, GListPtr * list, gboolean current)
- g_list_free(result);
- return one;
- }
-+
-+static void
-+get_rscs_brief(GListPtr rsc_list, GHashTable * rsc_table, GHashTable * active_table)
-+{
-+ GListPtr gIter = rsc_list;
-+
-+ for (; gIter != NULL; gIter = gIter->next) {
-+ resource_t *rsc = (resource_t *) gIter->data;
-+
-+ const char *class = crm_element_value(rsc->xml, XML_AGENT_ATTR_CLASS);
-+ const char *kind = crm_element_value(rsc->xml, XML_ATTR_TYPE);
-+
-+ int offset = 0;
-+ char buffer[LINE_MAX];
-+
-+ int *rsc_counter = NULL;
-+ int *active_counter = NULL;
-+
-+ if (rsc->variant != pe_native) {
-+ continue;
-+ }
-+
-+ offset += snprintf(buffer + offset, LINE_MAX - offset, "%s", class);
-+ if (safe_str_eq(class, "ocf")) {
-+ const char *prov = crm_element_value(rsc->xml, XML_AGENT_ATTR_PROVIDER);
-+ offset += snprintf(buffer + offset, LINE_MAX - offset, "::%s", prov);
-+ }
-+ offset += snprintf(buffer + offset, LINE_MAX - offset, ":%s", kind);
-+
-+ if (rsc_table) {
-+ rsc_counter = g_hash_table_lookup(rsc_table, buffer);
-+ if (rsc_counter == NULL) {
-+ rsc_counter = calloc(1, sizeof(int));
-+ *rsc_counter = 0;
-+ g_hash_table_insert(rsc_table, strdup(buffer), rsc_counter);
-+ }
-+ (*rsc_counter)++;
-+ }
-+
-+ if (active_table) {
-+ GListPtr gIter2 = rsc->running_on;
-+
-+ for (; gIter2 != NULL; gIter2 = gIter2->next) {
-+ node_t *node = (node_t *) gIter2->data;
-+ GHashTable *node_table = NULL;
-+
-+ if (node->details->unclean == FALSE && node->details->online == FALSE) {
-+ continue;
-+ }
-+
-+ node_table = g_hash_table_lookup(active_table, node->details->uname);
-+ if (node_table == NULL) {
-+ node_table = g_hash_table_new_full(crm_str_hash, g_str_equal, free, free);
-+ g_hash_table_insert(active_table, strdup(node->details->uname), node_table);
-+ }
-+
-+ active_counter = g_hash_table_lookup(node_table, buffer);
-+ if (active_counter == NULL) {
-+ active_counter = calloc(1, sizeof(int));
-+ *active_counter = 0;
-+ g_hash_table_insert(node_table, strdup(buffer), active_counter);
-+ }
-+ (*active_counter)++;
-+ }
-+ }
-+ }
-+}
-+
-+static void
-+destroy_node_table(gpointer data)
-+{
-+ GHashTable *node_table = data;
-+
-+ if (node_table) {
-+ g_hash_table_destroy(node_table);
-+ }
-+}
-+
-+void
-+print_rscs_brief(GListPtr rsc_list, const char *pre_text, long options,
-+ void *print_data, gboolean print_all)
-+{
-+ GHashTable *rsc_table = g_hash_table_new_full(crm_str_hash, g_str_equal, free, free);
-+ GHashTable *active_table = g_hash_table_new_full(crm_str_hash, g_str_equal,
-+ free, destroy_node_table);
-+ GHashTableIter hash_iter;
-+ char *type = NULL;
-+ int *rsc_counter = NULL;
-+
-+ get_rscs_brief(rsc_list, rsc_table, active_table);
-+
-+ g_hash_table_iter_init(&hash_iter, rsc_table);
-+ while (g_hash_table_iter_next(&hash_iter, (gpointer *)&type, (gpointer *)&rsc_counter)) {
-+ GHashTableIter hash_iter2;
-+ char *node_name = NULL;
-+ GHashTable *node_table = NULL;
-+ int active_counter_all = 0;
-+
-+ g_hash_table_iter_init(&hash_iter2, active_table);
-+ while (g_hash_table_iter_next(&hash_iter2, (gpointer *)&node_name, (gpointer *)&node_table)) {
-+ int *active_counter = g_hash_table_lookup(node_table, type);
-+
-+ if (active_counter == NULL || *active_counter == 0) {
-+ continue;
-+
-+ } else {
-+ active_counter_all += *active_counter;
-+ }
-+
-+ if (options & pe_print_rsconly) {
-+ node_name = NULL;
-+ }
-+
-+ if (options & pe_print_html) {
-+ status_print("\n");
-+ }
-+
-+ if (print_all) {
-+ status_print("%s%d/%d\t(%s):\tActive %s\n", pre_text ? pre_text : "",
-+ active_counter ? *active_counter : 0,
-+ rsc_counter ? *rsc_counter : 0, type,
-+ active_counter && (*active_counter > 0) && node_name ? node_name : "");
-+ } else {
-+ status_print("%s%d\t(%s):\tActive %s\n", pre_text ? pre_text : "",
-+ active_counter ? *active_counter : 0, type,
-+ active_counter && (*active_counter > 0) && node_name ? node_name : "");
-+ }
-+
-+ if (options & pe_print_html) {
-+ status_print("\n");
-+ }
-+ }
-+
-+ if (print_all && active_counter_all == 0) {
-+ if (options & pe_print_html) {
-+ status_print("\n");
-+ }
-+
-+ status_print("%s%d/%d\t(%s):\tActive\n", pre_text ? pre_text : "",
-+ active_counter_all,
-+ rsc_counter ? *rsc_counter : 0, type);
-+
-+ if (options & pe_print_html) {
-+ status_print("\n");
-+ }
-+ }
-+ }
-+
-+ if (rsc_table) {
-+ g_hash_table_destroy(rsc_table);
-+ rsc_table = NULL;
-+ }
-+ if (active_table) {
-+ g_hash_table_destroy(active_table);
-+ active_table = NULL;
-+ }
-+}
-diff --git a/tools/crm_mon.c b/tools/crm_mon.c
-index 746094f..a69a4fe 100644
---- a/tools/crm_mon.c
-+++ b/tools/crm_mon.c
-@@ -97,6 +97,7 @@ gboolean print_tickets = FALSE;
- gboolean watch_fencing = FALSE;
- gboolean hide_headers = FALSE;
- gboolean print_pending = FALSE;
-+gboolean print_brief = FALSE;
-
- /* FIXME allow, detect, and correctly interpret glob pattern or regex? */
- const char *print_neg_location_prefix;
-@@ -342,6 +343,7 @@ static struct crm_option long_options[] = {
- {"show-node-attributes", 0, 0, 'A', "Display node attributes" },
- {"hide-headers", 0, 0, 'D', "\tHide all headers" },
- {"pending", 0, 0, 'j', "\t\tDisplay pending state if 'record-pending' is enabled" },
-+ {"brief", 0, 0, 'b', "\t\tBrief output" },
-
- {"-spacer-", 1, 0, '-', "\nAdditional Options:"},
- {"interval", 1, 0, 'i', "\tUpdate frequency in seconds" },
-@@ -454,6 +456,9 @@ detect_user_input(GIOChannel *channel, GIOCondition condition, gpointer unused)
- case 'j':
- print_pending = ! print_pending;
- break;
-+ case 'b':
-+ print_brief = ! print_brief;
-+ break;
- case '?':
- config_mode = TRUE;
- break;
-@@ -478,6 +483,7 @@ detect_user_input(GIOChannel *channel, GIOCondition condition, gpointer unused)
- print_as("%c L: \t%s\n", print_neg_location_prefix ? '*': ' ', get_option_desc('L'));
- print_as("%c D: \t%s\n", hide_headers ? '*': ' ', get_option_desc('D'));
- print_as("%c j: \t%s\n", print_pending ? '*': ' ', get_option_desc('j'));
-+ print_as("%c b: \t%s\n", print_brief ? '*': ' ', get_option_desc('b'));
- print_as("\n");
- print_as("Toggle fields via field letter, type any other key to return");
- }
-@@ -562,6 +568,9 @@ main(int argc, char **argv)
- case 'D':
- hide_headers = TRUE;
- break;
-+ case 'b':
-+ print_brief = TRUE;
-+ break;
- case 'c':
- print_tickets = TRUE;
- break;
-@@ -1326,7 +1335,11 @@ print_status(pe_working_set_t * data_set)
- print_as("Node %s (%s): %s\n", node_name, node->details->id, node_mode);
- }
-
-- if (group_by_node) {
-+ if (print_brief && group_by_node) {
-+ print_rscs_brief(node->details->running_rsc, "\t", print_opts | pe_print_rsconly,
-+ stdout, FALSE);
-+
-+ } else if (group_by_node) {
- GListPtr gIter2 = NULL;
-
- for (gIter2 = node->details->running_rsc; gIter2 != NULL; gIter2 = gIter2->next) {
-@@ -1368,12 +1381,24 @@ print_status(pe_working_set_t * data_set)
-
- if (group_by_node == FALSE || inactive_resources) {
- print_as("\n");
-+
-+ if (print_brief && group_by_node == FALSE) {
-+ print_opts |= pe_print_brief;
-+ print_rscs_brief(data_set->resources, NULL, print_opts, stdout,
-+ inactive_resources);
-+ }
-+
- for (gIter = data_set->resources; gIter != NULL; gIter = gIter->next) {
- resource_t *rsc = (resource_t *) gIter->data;
-
- gboolean is_active = rsc->fns->active(rsc, TRUE);
- gboolean partially_active = rsc->fns->active(rsc, FALSE);
-
-+ if (print_brief && group_by_node == FALSE
-+ && rsc->variant == pe_native) {
-+ continue;
-+ }
-+
- if (is_set(rsc->flags, pe_rsc_orphan) && is_active == FALSE) {
- continue;
-
-@@ -1740,7 +1765,13 @@ print_html_status(pe_working_set_t * data_set, const char *filename, gboolean we
- fprintf(stream, "Node: %s (%s): %s", node->details->uname, node->details->id,
- "OFFLINE\n");
- }
-- if (group_by_node) {
-+ if (print_brief && group_by_node) {
-+ fprintf(stream, "\n");
-+ print_rscs_brief(node->details->running_rsc, NULL, print_opts | pe_print_rsconly,
-+ stream, FALSE);
-+ fprintf(stream, "
\n");
-+
-+ } else if (group_by_node) {
- GListPtr lpc2 = NULL;
-
- fprintf(stream, "\n");
-@@ -1765,11 +1796,22 @@ print_html_status(pe_working_set_t * data_set, const char *filename, gboolean we
- }
-
- if (group_by_node == FALSE || inactive_resources) {
-+ if (print_brief && group_by_node == FALSE) {
-+ print_opts |= pe_print_brief;
-+ print_rscs_brief(data_set->resources, NULL, print_opts, stream,
-+ inactive_resources);
-+ }
-+
- for (gIter = data_set->resources; gIter != NULL; gIter = gIter->next) {
- resource_t *rsc = (resource_t *) gIter->data;
- gboolean is_active = rsc->fns->active(rsc, TRUE);
- gboolean partially_active = rsc->fns->active(rsc, FALSE);
-
-+ if (print_brief && group_by_node == FALSE
-+ && rsc->variant == pe_native) {
-+ continue;
-+ }
-+
- if (is_set(rsc->flags, pe_rsc_orphan) && is_active == FALSE) {
- continue;
-
diff --git a/pacemaker-display-pending-ops.patch b/pacemaker-display-pending-ops.patch
deleted file mode 100644
index 930fb6c..0000000
--- a/pacemaker-display-pending-ops.patch
+++ /dev/null
@@ -1,503 +0,0 @@
-commit a33aadaf14f1e0cc2fb9d025801a2d86e3732275
-Author: Gao,Yan
-Date: Mon Jan 13 20:03:28 2014 +0800
-
- Feature: tools: Display pending state in crm_mon/crm_resource/crm_simulate if --pending/-j is supplied (cl#5178)
-
-diff --git a/include/crm/pengine/common.h b/include/crm/pengine/common.h
-index 2477e47..c1901ef 100644
---- a/include/crm/pengine/common.h
-+++ b/include/crm/pengine/common.h
-@@ -97,6 +97,7 @@ enum pe_print_options {
- pe_print_ops = 0x0100,
- pe_print_suppres_nl = 0x0200,
- pe_print_xml = 0x0400,
-+ pe_print_pending = 0x0800,
- };
- /* *INDENT-ON* */
-
-diff --git a/include/crm/pengine/status.h b/include/crm/pengine/status.h
-index 3f3de17..3a380cc 100644
---- a/include/crm/pengine/status.h
-+++ b/include/crm/pengine/status.h
-@@ -275,6 +275,8 @@ struct resource_s {
-
- resource_t *container;
- GListPtr fillers;
-+
-+ char *pending_task;
- };
-
- struct pe_action_s {
-diff --git a/lib/pengine/complex.c b/lib/pengine/complex.c
-index 2ada463..a592fc8 100644
---- a/lib/pengine/complex.c
-+++ b/lib/pengine/complex.c
-@@ -743,5 +743,6 @@ common_free(resource_t * rsc)
- free(rsc->clone_name);
- free(rsc->allocated_to);
- free(rsc->variant_opaque);
-+ free(rsc->pending_task);
- free(rsc);
- }
-diff --git a/lib/pengine/native.c b/lib/pengine/native.c
-index adfd5ba..be95ba1 100644
---- a/lib/pengine/native.c
-+++ b/lib/pengine/native.c
-@@ -291,12 +291,60 @@ native_print_attr(gpointer key, gpointer value, gpointer user_data)
- status_print("Option: %s = %s\n", (char *)key, (char *)value);
- }
-
-+static const char *
-+native_pending_state(resource_t * rsc)
-+{
-+ const char *pending_state = NULL;
-+
-+ if (safe_str_eq(rsc->pending_task, CRMD_ACTION_START)) {
-+ pending_state = "Starting";
-+
-+ } else if (safe_str_eq(rsc->pending_task, CRMD_ACTION_STOP)) {
-+ pending_state = "Stopping";
-+
-+ } else if (safe_str_eq(rsc->pending_task, CRMD_ACTION_MIGRATE)) {
-+ pending_state = "Migrating";
-+
-+ } else if (safe_str_eq(rsc->pending_task, CRMD_ACTION_MIGRATED)) {
-+ /* Work might be done in here. */
-+ pending_state = "Migrating";
-+
-+ } else if (safe_str_eq(rsc->pending_task, CRMD_ACTION_PROMOTE)) {
-+ pending_state = "Promoting";
-+
-+ } else if (safe_str_eq(rsc->pending_task, CRMD_ACTION_DEMOTE)) {
-+ pending_state = "Demoting";
-+ }
-+
-+ return pending_state;
-+}
-+
-+static const char *
-+native_pending_task(resource_t * rsc)
-+{
-+ const char *pending_task = NULL;
-+
-+ if (safe_str_eq(rsc->pending_task, CRMD_ACTION_NOTIFY)) {
-+ /* "Notifying" is not very useful to be shown. */
-+ pending_task = NULL;
-+
-+ } else if (safe_str_eq(rsc->pending_task, CRMD_ACTION_STATUS)) {
-+ pending_task = "Monitoring";
-+
-+ } else if (safe_str_eq(rsc->pending_task, "probe")) {
-+ pending_task = "Checking";
-+ }
-+
-+ return pending_task;
-+}
-+
- static void
- native_print_xml(resource_t * rsc, const char *pre_text, long options, void *print_data)
- {
- enum rsc_role_e role = rsc->role;
- const char *class = crm_element_value(rsc->xml, XML_AGENT_ATTR_CLASS);
- const char *prov = crm_element_value(rsc->xml, XML_AGENT_ATTR_PROVIDER);
-+ const char *rsc_state = NULL;
-
- if(role == RSC_ROLE_STARTED && uber_parent(rsc)->variant == pe_master) {
- role = RSC_ROLE_SLAVE;
-@@ -308,7 +356,14 @@ native_print_xml(resource_t * rsc, const char *pre_text, long options, void *pri
- status_print("resource_agent=\"%s%s%s:%s\" ",
- class,
- prov ? "::" : "", prov ? prov : "", crm_element_value(rsc->xml, XML_ATTR_TYPE));
-- status_print("role=\"%s\" ", role2text(role));
-+
-+ if (options & pe_print_pending) {
-+ rsc_state = native_pending_state(rsc);
-+ }
-+ if (rsc_state == NULL) {
-+ rsc_state = role2text(role);
-+ }
-+ status_print("role=\"%s\" ", rsc_state);
- status_print("active=\"%s\" ", rsc->fns->active(rsc, TRUE) ? "true" : "false");
- status_print("orphaned=\"%s\" ", is_set(rsc->flags, pe_rsc_orphan) ? "true" : "false");
- status_print("managed=\"%s\" ", is_set(rsc->flags, pe_rsc_managed) ? "true" : "false");
-@@ -317,6 +372,14 @@ native_print_xml(resource_t * rsc, const char *pre_text, long options, void *pri
- is_set(rsc->flags, pe_rsc_failure_ignored) ? "true" : "false");
- status_print("nodes_running_on=\"%d\" ", g_list_length(rsc->running_on));
-
-+ if (options & pe_print_pending) {
-+ const char *pending_task = native_pending_task(rsc);
-+
-+ if (pending_task) {
-+ status_print("pending=\"%s\" ", pending_task);
-+ }
-+ }
-+
- if (options & pe_print_dev) {
- status_print("provisional=\"%s\" ",
- is_set(rsc->flags, pe_rsc_provisional) ? "true" : "false");
-@@ -423,12 +486,29 @@ native_print(resource_t * rsc, const char *pre_text, long options, void *print_d
- } else if(is_set(rsc->flags, pe_rsc_failed)) {
- offset += snprintf(buffer + offset, LINE_MAX - offset, "FAILED ");
- } else {
-- offset += snprintf(buffer + offset, LINE_MAX - offset, "%s ", role2text(rsc->role));
-+ const char *rsc_state = NULL;
-+
-+ if (options & pe_print_pending) {
-+ rsc_state = native_pending_state(rsc);
-+ }
-+ if (rsc_state == NULL) {
-+ rsc_state = role2text(rsc->role);
-+ }
-+ offset += snprintf(buffer + offset, LINE_MAX - offset, "%s ", rsc_state);
- }
-
- if(node) {
- offset += snprintf(buffer + offset, LINE_MAX - offset, "%s ", node->details->uname);
- }
-+
-+ if (options & pe_print_pending) {
-+ const char *pending_task = native_pending_task(rsc);
-+
-+ if (pending_task) {
-+ offset += snprintf(buffer + offset, LINE_MAX - offset, "(%s) ", pending_task);
-+ }
-+ }
-+
- if(is_not_set(rsc->flags, pe_rsc_managed)) {
- offset += snprintf(buffer + offset, LINE_MAX - offset, "(unmanaged) ");
- }
-diff --git a/lib/pengine/unpack.c b/lib/pengine/unpack.c
-index aaa9a67..57960cc 100644
---- a/lib/pengine/unpack.c
-+++ b/lib/pengine/unpack.c
-@@ -2757,6 +2757,7 @@ unpack_rsc_op(resource_t * rsc, node_t * node, xmlNode * xml_op,
- int rc = 0;
- int status = PCMK_LRM_OP_PENDING-1;
- int target_rc = get_target_rc(xml_op);
-+ int interval = 0;
-
- gboolean expired = FALSE;
- resource_t *parent = rsc;
-@@ -2774,6 +2775,7 @@ unpack_rsc_op(resource_t * rsc, node_t * node, xmlNode * xml_op,
- crm_element_value_int(xml_op, XML_LRM_ATTR_RC, &rc);
- crm_element_value_int(xml_op, XML_LRM_ATTR_CALLID, &task_id);
- crm_element_value_int(xml_op, XML_LRM_ATTR_OPSTATUS, &status);
-+ crm_element_value_int(xml_op, XML_LRM_ATTR_INTERVAL, &interval);
-
- CRM_CHECK(task != NULL, return FALSE);
- CRM_CHECK(status <= PCMK_LRM_OP_NOT_INSTALLED, return FALSE);
-@@ -2807,7 +2809,6 @@ unpack_rsc_op(resource_t * rsc, node_t * node, xmlNode * xml_op,
- }
-
- if (expired && target_rc != rc) {
-- int interval = 0;
- const char *magic = crm_element_value(xml_op, XML_ATTR_TRANSITION_MAGIC);
-
- pe_rsc_debug(rsc, "Expired operation '%s' on %s returned '%s' (%d) instead of the expected value: '%s' (%d)",
-@@ -2815,7 +2816,6 @@ unpack_rsc_op(resource_t * rsc, node_t * node, xmlNode * xml_op,
- services_ocf_exitcode_str(rc), rc,
- services_ocf_exitcode_str(target_rc), target_rc);
-
-- crm_element_value_int(xml_op, XML_LRM_ATTR_INTERVAL, &interval);
- if(interval == 0) {
- crm_notice("Ignoring expired calculated failure %s (rc=%d, magic=%s) on %s",
- task_key, rc, magic, node->details->uname);
-@@ -2858,6 +2858,14 @@ unpack_rsc_op(resource_t * rsc, node_t * node, xmlNode * xml_op,
- stop_action(rsc, target, FALSE);
- }
- }
-+
-+ if (safe_str_eq(task, CRMD_ACTION_STATUS) && interval == 0) {
-+ /* Temporarily comment this out until cl#5184 is fixed */
-+ /*rsc->pending_task = strdup("probe");*/
-+
-+ } else {
-+ rsc->pending_task = strdup(task);
-+ }
- break;
-
- case PCMK_LRM_OP_DONE:
-diff --git a/tools/crm_mon.c b/tools/crm_mon.c
-index a9dd1b7..746094f 100644
---- a/tools/crm_mon.c
-+++ b/tools/crm_mon.c
-@@ -96,6 +96,7 @@ gboolean print_last_change = TRUE;
- gboolean print_tickets = FALSE;
- gboolean watch_fencing = FALSE;
- gboolean hide_headers = FALSE;
-+gboolean print_pending = FALSE;
-
- /* FIXME allow, detect, and correctly interpret glob pattern or regex? */
- const char *print_neg_location_prefix;
-@@ -340,6 +341,7 @@ static struct crm_option long_options[] = {
- {"neg-locations", 2, 0, 'L', "Display negative location constraints [optionally filtered by id prefix]"},
- {"show-node-attributes", 0, 0, 'A', "Display node attributes" },
- {"hide-headers", 0, 0, 'D', "\tHide all headers" },
-+ {"pending", 0, 0, 'j', "\t\tDisplay pending state if 'record-pending' is enabled" },
-
- {"-spacer-", 1, 0, '-', "\nAdditional Options:"},
- {"interval", 1, 0, 'i', "\tUpdate frequency in seconds" },
-@@ -449,6 +451,9 @@ detect_user_input(GIOChannel *channel, GIOCondition condition, gpointer unused)
- case 'D':
- hide_headers = ! hide_headers;
- break;
-+ case 'j':
-+ print_pending = ! print_pending;
-+ break;
- case '?':
- config_mode = TRUE;
- break;
-@@ -472,6 +477,7 @@ detect_user_input(GIOChannel *channel, GIOCondition condition, gpointer unused)
- print_as("%c A: \t%s\n", print_nodes_attr ? '*': ' ', get_option_desc('A'));
- print_as("%c L: \t%s\n", print_neg_location_prefix ? '*': ' ', get_option_desc('L'));
- print_as("%c D: \t%s\n", hide_headers ? '*': ' ', get_option_desc('D'));
-+ print_as("%c j: \t%s\n", print_pending ? '*': ' ', get_option_desc('j'));
- print_as("\n");
- print_as("Toggle fields via field letter, type any other key to return");
- }
-@@ -550,6 +556,9 @@ main(int argc, char **argv)
- case 'L':
- print_neg_location_prefix = optarg ?: "";
- break;
-+ case 'j':
-+ print_pending = TRUE;
-+ break;
- case 'D':
- hide_headers = TRUE;
- break;
-@@ -1159,6 +1168,10 @@ print_status(pe_working_set_t * data_set)
- print_opts = pe_print_printf;
- }
-
-+ if (print_pending) {
-+ print_opts |= pe_print_pending;
-+ }
-+
- updates++;
- dc = data_set->dc_node;
-
-@@ -1463,9 +1476,14 @@ print_xml_status(pe_working_set_t * data_set)
- xmlNode *stack = NULL;
- xmlNode *quorum_node = NULL;
- const char *quorum_votes = "unknown";
-+ int print_opts = pe_print_xml;
-
- dc = data_set->dc_node;
-
-+ if (print_pending) {
-+ print_opts |= pe_print_pending;
-+ }
-+
- fprintf(stream, "\n");
- fprintf(stream, "\n", VERSION);
-
-@@ -1567,7 +1585,7 @@ print_xml_status(pe_working_set_t * data_set)
- for (lpc2 = node->details->running_rsc; lpc2 != NULL; lpc2 = lpc2->next) {
- resource_t *rsc = (resource_t *) lpc2->data;
-
-- rsc->fns->print(rsc, " ", pe_print_xml | pe_print_rsconly, stream);
-+ rsc->fns->print(rsc, " ", print_opts | pe_print_rsconly, stream);
- }
- fprintf(stream, " \n");
- } else {
-@@ -1589,11 +1607,11 @@ print_xml_status(pe_working_set_t * data_set)
-
- } else if (group_by_node == FALSE) {
- if (partially_active || inactive_resources) {
-- rsc->fns->print(rsc, " ", pe_print_xml, stream);
-+ rsc->fns->print(rsc, " ", print_opts, stream);
- }
-
- } else if (is_active == FALSE && inactive_resources) {
-- rsc->fns->print(rsc, " ", pe_print_xml, stream);
-+ rsc->fns->print(rsc, " ", print_opts, stream);
- }
- }
- fprintf(stream, " \n");
-@@ -1614,6 +1632,11 @@ print_html_status(pe_working_set_t * data_set, const char *filename, gboolean we
- node_t *dc = NULL;
- static int updates = 0;
- char *filename_tmp = NULL;
-+ int print_opts = pe_print_html;
-+
-+ if (print_pending) {
-+ print_opts |= pe_print_pending;
-+ }
-
- if (web_cgi) {
- stream = stdout;
-@@ -1725,7 +1748,7 @@ print_html_status(pe_working_set_t * data_set, const char *filename, gboolean we
- resource_t *rsc = (resource_t *) lpc2->data;
-
- fprintf(stream, "- ");
-- rsc->fns->print(rsc, NULL, pe_print_html | pe_print_rsconly, stream);
-+ rsc->fns->print(rsc, NULL, print_opts | pe_print_rsconly, stream);
- fprintf(stream, "
\n");
- }
- fprintf(stream, "
\n");
-@@ -1752,11 +1775,11 @@ print_html_status(pe_working_set_t * data_set, const char *filename, gboolean we
-
- } else if (group_by_node == FALSE) {
- if (partially_active || inactive_resources) {
-- rsc->fns->print(rsc, NULL, pe_print_html, stream);
-+ rsc->fns->print(rsc, NULL, print_opts, stream);
- }
-
- } else if (is_active == FALSE && inactive_resources) {
-- rsc->fns->print(rsc, NULL, pe_print_html, stream);
-+ rsc->fns->print(rsc, NULL, print_opts, stream);
- }
- }
- }
-diff --git a/tools/crm_resource.c b/tools/crm_resource.c
-index bd576cc..b2cab67 100644
---- a/tools/crm_resource.c
-+++ b/tools/crm_resource.c
-@@ -64,6 +64,7 @@ char *xml_file = NULL;
- int cib_options = cib_sync_call;
- int crmd_replies_needed = 1; /* The welcome message */
- GMainLoop *mainloop = NULL;
-+gboolean print_pending = FALSE;
-
- extern void cleanup_alloc_calculations(pe_working_set_t * data_set);
-
-@@ -284,6 +285,11 @@ do_find_resource_list(pe_working_set_t * data_set, gboolean raw)
- int found = 0;
-
- GListPtr lpc = NULL;
-+ int opts = pe_print_printf | pe_print_rsconly;
-+
-+ if (print_pending) {
-+ opts |= pe_print_pending;
-+ }
-
- for (lpc = data_set->resources; lpc != NULL; lpc = lpc->next) {
- resource_t *rsc = (resource_t *) lpc->data;
-@@ -292,7 +298,7 @@ do_find_resource_list(pe_working_set_t * data_set, gboolean raw)
- && rsc->fns->active(rsc, TRUE) == FALSE) {
- continue;
- }
-- rsc->fns->print(rsc, NULL, pe_print_printf | pe_print_rsconly, stdout);
-+ rsc->fns->print(rsc, NULL, opts, stdout);
- found++;
- }
-
-@@ -323,11 +329,16 @@ dump_resource(const char *rsc, pe_working_set_t * data_set, gboolean expanded)
- {
- char *rsc_xml = NULL;
- resource_t *the_rsc = find_rsc_or_clone(rsc, data_set);
-+ int opts = pe_print_printf;
-
- if (the_rsc == NULL) {
- return -ENXIO;
- }
-- the_rsc->fns->print(the_rsc, NULL, pe_print_printf, stdout);
-+
-+ if (print_pending) {
-+ opts |= pe_print_pending;
-+ }
-+ the_rsc->fns->print(the_rsc, NULL, opts, stdout);
-
- if (expanded) {
- rsc_xml = dump_xml_formatted(the_rsc->xml);
-@@ -1088,6 +1099,10 @@ list_resource_operations(const char *rsc_id, const char *host_uname, gboolean ac
- GListPtr ops = find_operations(rsc_id, host_uname, active, data_set);
- GListPtr lpc = NULL;
-
-+ if (print_pending) {
-+ opts |= pe_print_pending;
-+ }
-+
- for (lpc = ops; lpc != NULL; lpc = lpc->next) {
- xmlNode *xml_op = (xmlNode *) lpc->data;
-
-@@ -1275,7 +1290,8 @@ static struct crm_option long_options[] = {
- {"list-raw", 0, 0, 'l', "\tList the IDs of all instantiated resources (no groups/clones/...)"},
- {"list-cts", 0, 0, 'c', NULL, 1},
- {"list-operations", 0, 0, 'O', "\tList active resource operations. Optionally filtered by resource (-r) and/or node (-N)"},
-- {"list-all-operations", 0, 0, 'o', "List all resource operations. Optionally filtered by resource (-r) and/or node (-N)\n"},
-+ {"list-all-operations", 0, 0, 'o', "List all resource operations. Optionally filtered by resource (-r) and/or node (-N)"},
-+ {"pending", 0, 0, 'j', "\t\tDisplay pending state if 'record-pending' is enabled\n"},
-
- {"list-standards", 0, 0, 0, "\tList supported standards"},
- {"list-ocf-providers", 0, 0, 0, "List all available OCF providers"},
-@@ -1598,6 +1614,9 @@ main(int argc, char **argv)
- case 'a':
- rsc_cmd = flag;
- break;
-+ case 'j':
-+ print_pending = TRUE;
-+ break;
- case 'p':
- case 'g':
- case 'd':
-diff --git a/tools/crm_simulate.c b/tools/crm_simulate.c
-index 61065c4..0956141 100644
---- a/tools/crm_simulate.c
-+++ b/tools/crm_simulate.c
-@@ -39,6 +39,7 @@ cib_t *global_cib = NULL;
- GListPtr op_fail = NULL;
- gboolean quiet = FALSE;
- gboolean bringing_nodes_online = FALSE;
-+gboolean print_pending = FALSE;
-
- #define new_node_template "//"XML_CIB_TAG_NODE"[@uname='%s']"
- #define node_template "//"XML_CIB_TAG_STATE"[@uname='%s']"
-@@ -528,7 +529,7 @@ exec_stonith_action(crm_graph_t * graph, crm_action_t * action)
- }
-
- static void
--print_cluster_status(pe_working_set_t * data_set)
-+print_cluster_status(pe_working_set_t * data_set, long options)
- {
- char *online_nodes = NULL;
- char *online_remote_nodes = NULL;
-@@ -649,7 +650,7 @@ print_cluster_status(pe_working_set_t * data_set)
- && rsc->role == RSC_ROLE_STOPPED) {
- continue;
- }
-- rsc->fns->print(rsc, NULL, pe_print_printf, stdout);
-+ rsc->fns->print(rsc, NULL, pe_print_printf | options, stdout);
- }
- fprintf(stdout, "\n");
- }
-@@ -701,7 +702,7 @@ run_simulation(pe_working_set_t * data_set)
- data_set->now = get_date();
-
- cluster_status(data_set);
-- print_cluster_status(data_set);
-+ print_cluster_status(data_set, 0);
- }
-
- if (graph_rc != transition_complete) {
-@@ -1201,6 +1202,7 @@ static struct crm_option long_options[] = {
- {"show-scores", 0, 0, 's', "Show allocation scores"},
- {"show-utilization", 0, 0, 'U', "Show utilization information"},
- {"profile", 1, 0, 'P', "Run all tests in the named directory to create profiling data"},
-+ {"pending", 0, 0, 'j', "\tDisplay pending state if 'record-pending' is enabled"},
-
- {"-spacer-", 0, 0, '-', "\nSynthetic Cluster Events:"},
- {"node-up", 1, 0, 'u', "\tBring a node online"},
-@@ -1447,6 +1449,9 @@ main(int argc, char **argv)
- process = TRUE;
- show_utilization = TRUE;
- break;
-+ case 'j':
-+ print_pending = TRUE;
-+ break;
- case 'S':
- process = TRUE;
- simulate = TRUE;
-@@ -1515,8 +1520,10 @@ main(int argc, char **argv)
- cluster_status(&data_set);
-
- if (quiet == FALSE) {
-+ int options = print_pending ? pe_print_pending : 0;
-+
- quiet_log("\nCurrent cluster status:\n");
-- print_cluster_status(&data_set);
-+ print_cluster_status(&data_set, options);
- }
-
- if (modified) {
diff --git a/pacemaker.changes b/pacemaker.changes
index 18a2547..1e36aae 100644
--- a/pacemaker.changes
+++ b/pacemaker.changes
@@ -1,3 +1,60 @@
+-------------------------------------------------------------------
+Fri Feb 21 07:05:40 UTC 2014 - ygao@suse.com
+
+- controld: Do not consider the dlm up until the address list is present
+- pengine: Support per-resource maintenance mode (bnc#863071)
+- pengine: cl#5187 - Prevent resources in an anti-colocation from even temporarily running on a same node (bnc#856135, bnc#862319)
+- controld: handling startup fencing within the controld agent, not the dlm
+- Upstream version cs: 0b7d85a159cc92e00ebded65c9a33edce7ba1c22
+
+-------------------------------------------------------------------
+Fri Feb 21 06:44:59 UTC 2014 - ygao@suse.com
+
+- cib: Erasing the cib is an admin action, bump the admin_epoch instead
+- mcp: Tell systemd not to respawn us if we exit with rc=100
+- crm_mon: Allow the file created by --as-html to be world readable
+- crmd: Do not overwrite existing node state when fencing completes
+- PE: Default sequential to TRUE for resource sets for consistency with colocation sets
+- Bug rhbz#1036631 - Stop members of cloned groups when dependancies are stopped
+- PE: Ensure stop actions are viable when reporting what will happen to a resource
+- xml: Consolidate patchset logging and apply functionality
+- cib: Validate that everyone still sees the same configuration once all updates have completed
+- cib: Validate clients are correctly applying v2-style diffs at most once a minute
+- xml: Allow both patch formats to include and validate an xml digest
+- election: If an error occurrs in crm_uptime(), compare as {0,0}
+- xml: Correctly compare the current feature set when determining which patch format to use
+- crmd: Support failcount processing with the new patch format
+- crmd: Handle patchset directives that change the configuration top-level
+- cib: Make patchset validation a run-time switch
+- cib: Implement zero-copy status update
+- cib: Enable the more efficient xml patchset format
+- crmd: Add support for parsing resource operations in the v2 patch format
+- xml: New function for calculating patchset version details
+- cib: Auto-detect which patchset format to use
+- xml: Allow the source of xml library errors to be traced
+- cib: Send all r/w operations via the cluster connection and have all nodes process them
+- xml: Use an optimized xpath search function for applying patch sets
+- xml: Use the new patch application code path
+- xml: Detect changes in global replace operations
+- xml: allow either patch format to be created and applied automatically
+- xml: Create a more robust diff format
+- xml: Track changes to xml trees as they happen
+- Upstream version cs: 0d3f74a5caa7e0f7d1f5ccc97e0d2d018ed8bdfc
+
+-------------------------------------------------------------------
+Thu Feb 20 12:56:39 UTC 2014 - ygao@suse.com
+
+- Update to version 1.1.11
+- Drop the patches that have been merged upstream:
+ * pacemaker-display-pending-ops.patch
+ * pacemaker-crm_mon-brief.patch
+
+- pengine: Prevent memory leak on handling pending state
+- crmd: Prevent message relay from attempting to create node entries for unknown nodes (bnc#862383)
+- attrd: Support "--refresh" command of attrd_updater
+- crmd: Prevent manual fencing confirmations from attempting to create node entries for unknown nodes (bnc#860169)
+- Upstream version cs: 3ca8c3bf87057339c9f2a55cd137db8c9c9922f0
+
-------------------------------------------------------------------
Sat Feb 8 14:00:23 UTC 2014 - ygao@suse.com
diff --git a/pacemaker.spec b/pacemaker.spec
index 97d4e7a..c8695a1 100644
--- a/pacemaker.spec
+++ b/pacemaker.spec
@@ -95,7 +95,7 @@ Name: pacemaker
Summary: Scalable High-Availability cluster resource manager
License: GPL-2.0+ and LGPL-2.1+
Group: Productivity/Clustering/HA
-Version: 1.1.10+git20140207.6290953
+Version: 1.1.11+git20140221.0b7d85a
Release: 0
#Release: %{pcmk_release}%{?dist}
Url: http://www.clusterlabs.org
@@ -112,8 +112,6 @@ Patch5: pacemaker-colocated-utilization.patch
Patch6: pacemaker-cibsecret-tool-temp-disabled.patch
Patch7: pacemaker-nagios-plugin-dir.patch
Patch8: bug-812269_pacemaker-fencing-device-register-messages.patch
-Patch9: pacemaker-display-pending-ops.patch
-Patch10: pacemaker-crm_mon-brief.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Provides: pacemaker-ticket-support = 2.0
Conflicts: heartbeat < 3.0
@@ -399,8 +397,6 @@ manager for Corosync, CMAN and/or Linux-HA.
%patch6 -p1
%patch7 -p1
%patch8 -p1
-%patch9 -p1
-%patch10 -p1
# Force the local time
#