| 1474 | } |
| 1475 | |
| 1476 | void |
| 1477 | rsc_ticket_constraint(resource_t * rsc_lh, rsc_ticket_t * rsc_ticket, pe_working_set_t * data_set) |
| 1478 | { |
| 1479 | if (rsc_ticket == NULL) { |
| 1480 | pe_err("rsc_ticket was NULL"); |
| 1481 | return; |
| 1482 | } |
| 1483 | |
| 1484 | if (rsc_lh == NULL) { |
| 1485 | pe_err("rsc_lh was NULL for %s", rsc_ticket->id); |
| 1486 | return; |
| 1487 | } |
| 1488 | |
| 1489 | if (rsc_ticket->ticket->granted && rsc_ticket->ticket->standby == FALSE) { |
| 1490 | return; |
| 1491 | } |
| 1492 | |
| 1493 | if (rsc_lh->children) { |
| 1494 | GListPtr gIter = rsc_lh->children; |
| 1495 | |
| 1496 | pe_rsc_trace(rsc_lh, "Processing ticket dependencies from %s", rsc_lh->id); |
| 1497 | |
| 1498 | for (; gIter != NULL; gIter = gIter->next) { |
| 1499 | resource_t *child_rsc = (resource_t *) gIter->data; |
| 1500 | |
| 1501 | rsc_ticket_constraint(child_rsc, rsc_ticket, data_set); |
| 1502 | } |
| 1503 | return; |
| 1504 | } |
| 1505 | |
| 1506 | pe_rsc_trace(rsc_lh, "%s: Processing ticket dependency on %s (%s, %s)", |
| 1507 | rsc_lh->id, rsc_ticket->ticket->id, rsc_ticket->id, role2text(rsc_ticket->role_lh)); |
| 1508 | |
| 1509 | if (rsc_ticket->ticket->granted == FALSE && g_list_length(rsc_lh->running_on) > 0) { |
| 1510 | GListPtr gIter = NULL; |
| 1511 | |
| 1512 | switch (rsc_ticket->loss_policy) { |
| 1513 | case loss_ticket_stop: |
| 1514 | resource_location(rsc_lh, NULL, -INFINITY, "__loss_of_ticket__", data_set); |
| 1515 | break; |
| 1516 | |
| 1517 | case loss_ticket_demote: |
| 1518 | /*Promotion score will be set to -INFINITY in master_promotion_order() */ |
| 1519 | if (rsc_ticket->role_lh != RSC_ROLE_MASTER) { |
| 1520 | resource_location(rsc_lh, NULL, -INFINITY, "__loss_of_ticket__", data_set); |
| 1521 | } |
| 1522 | break; |
| 1523 | |
| 1524 | case loss_ticket_fence: |
| 1525 | if (filter_rsc_ticket(rsc_lh, rsc_ticket) == FALSE) { |
| 1526 | return; |
| 1527 | } |
| 1528 | |
| 1529 | resource_location(rsc_lh, NULL, -INFINITY, "__loss_of_ticket__", data_set); |
| 1530 | |
| 1531 | for (gIter = rsc_lh->running_on; gIter != NULL; gIter = gIter->next) { |
| 1532 | node_t *node = (node_t *) gIter->data; |
| 1533 |
no test coverage detected