pacemaker/pacemaker-ticket-standby.diff
Tim Serong 1589a3e7c3 - Add provides to identify support level for tickets (bnc#752241)
- Resolve coverity RESOURCE_LEAK, REVERSE_INULL and UNREACHABLE defects 

- Tools: crm_simulate - Support to grant/revoke/standby/activate
  tickets from the new ticket state section (bnc#752241)

- Tools: Add crm_ticket to be profiled by valgrind
- Tools: crm_ticket - Display the tickets that are referenced in
  rsc_ticket constraints but have never been granted yet (bnc#752241)
- Tools: crm_mon - Support to display tickets (bnc#752242)

- PE: Move the ticket state section to
  "/cib/status/tickets/ticket_state" (bnc#752241)
- PE: Support to make tickets standby for relinquishing tickets
  gracefully (bnc#752241)
- Tools: Implement a new crm_ticket (bnc#752241)
- Tools: Update CLI regression tests for the new crm_ticket
- Tools: Add CLI regression tests for ticket standby state
- PE: Update regression tests for the new ticket state section
- PE: Support to make tickets standby for relinquishing tickets
  gracefully (regression tests)

- Tools: crm_ticket - Granting/revoking tickets need user to confirm
  unless "--force" option is used (bnc#752269)

- Tools: Implement the support of granting/revoking tickets for
  crm_simulate (bnc#752241)

OBS-URL: https://build.opensuse.org/package/show/network:ha-clustering:Factory/pacemaker?expand=0&rev=34
2012-04-23 11:15:16 +00:00

97 lines
3.9 KiB
Diff

commit de850c422b50d82d09ce820d98d057fae3ea18c9
Author: Gao,Yan <ygao@suse.com>
Date: Fri Mar 23 12:01:13 2012 +0800
High: PE: Support to make tickets standby for relinquishing tickets gracefully
Index: pacemaker/pengine/clone.c
===================================================================
--- pacemaker.orig/pengine/clone.c
+++ pacemaker/pengine/clone.c
@@ -522,7 +522,7 @@ clone_color(resource_t * rsc, node_t * p
for (; gIter != NULL; gIter = gIter->next) {
rsc_ticket_t *rsc_ticket = (rsc_ticket_t *) gIter->data;
- if (rsc_ticket->ticket->granted == FALSE) {
+ if (rsc_ticket->ticket->granted == FALSE || rsc_ticket->ticket->standby) {
rsc_ticket_constraint(rsc, rsc_ticket, data_set);
}
}
Index: pacemaker/pengine/group.c
===================================================================
--- pacemaker.orig/pengine/group.c
+++ pacemaker/pengine/group.c
@@ -68,7 +68,7 @@ group_color(resource_t * rsc, node_t * p
for (; gIter != NULL; gIter = gIter->next) {
rsc_ticket_t *rsc_ticket = (rsc_ticket_t *) gIter->data;
- if (rsc_ticket->ticket->granted == FALSE) {
+ if (rsc_ticket->ticket->granted == FALSE || rsc_ticket->ticket->standby) {
rsc_ticket_constraint(rsc, rsc_ticket, data_set);
}
}
Index: pacemaker/pengine/master.c
===================================================================
--- pacemaker.orig/pengine/master.c
+++ pacemaker/pengine/master.c
@@ -353,7 +353,8 @@ master_promotion_order(resource_t * rsc,
for (; gIter != NULL; gIter = gIter->next) {
rsc_ticket_t *rsc_ticket = (rsc_ticket_t *) gIter->data;
- if (rsc_ticket->role_lh == RSC_ROLE_MASTER && rsc_ticket->ticket->granted == FALSE) {
+ if (rsc_ticket->role_lh == RSC_ROLE_MASTER
+ && (rsc_ticket->ticket->granted == FALSE || rsc_ticket->ticket->standby)) {
resource_location(rsc, NULL, -INFINITY, "__stateful_without_ticket__", data_set);
}
}
Index: pacemaker/pengine/native.c
===================================================================
--- pacemaker.orig/pengine/native.c
+++ pacemaker/pengine/native.c
@@ -494,7 +494,7 @@ native_color(resource_t * rsc, node_t *
for (gIter = rsc->rsc_tickets; gIter != NULL; gIter = gIter->next) {
rsc_ticket_t *rsc_ticket = (rsc_ticket_t *) gIter->data;
- if (rsc_ticket->ticket->granted == FALSE) {
+ if (rsc_ticket->ticket->granted == FALSE || rsc_ticket->ticket->standby) {
rsc_ticket_constraint(rsc, rsc_ticket, data_set);
}
}
@@ -1401,7 +1401,7 @@ rsc_ticket_constraint(resource_t * rsc_l
return;
}
- if (rsc_ticket->ticket->granted == TRUE) {
+ if (rsc_ticket->ticket->granted && rsc_ticket->ticket->standby == FALSE) {
return;
}
@@ -1421,7 +1421,7 @@ rsc_ticket_constraint(resource_t * rsc_l
crm_debug_2("%s: Processing ticket dependency on %s (%s, %s)",
rsc_lh->id, rsc_ticket->ticket->id, rsc_ticket->id, role2text(rsc_ticket->role_lh));
- if (g_list_length(rsc_lh->running_on) > 0) {
+ if (rsc_ticket->ticket->granted == FALSE && g_list_length(rsc_lh->running_on) > 0) {
GListPtr gIter = NULL;
switch (rsc_ticket->loss_policy) {
@@ -1461,11 +1461,17 @@ rsc_ticket_constraint(resource_t * rsc_l
break;
}
- } else {
+ } else if (rsc_ticket->ticket->granted == FALSE){
if (rsc_ticket->role_lh != RSC_ROLE_MASTER || rsc_ticket->loss_policy == loss_ticket_stop) {
resource_location(rsc_lh, NULL, -INFINITY, "__no_ticket__", data_set);
}
+
+ } else if (rsc_ticket->ticket->standby) {
+
+ if (rsc_ticket->role_lh != RSC_ROLE_MASTER || rsc_ticket->loss_policy == loss_ticket_stop) {
+ resource_location(rsc_lh, NULL, -INFINITY, "__ticket_standby__", data_set);
+ }
}
}