| 499 | #define max(a, b) a<b?b:a |
| 500 | |
| 501 | static void |
| 502 | apply_master_prefs(resource_t * rsc) |
| 503 | { |
| 504 | int score, new_score; |
| 505 | GListPtr gIter = rsc->children; |
| 506 | clone_variant_data_t *clone_data = NULL; |
| 507 | |
| 508 | get_clone_variant_data(clone_data, rsc); |
| 509 | |
| 510 | if (clone_data->applied_master_prefs) { |
| 511 | /* Make sure we only do this once */ |
| 512 | return; |
| 513 | } |
| 514 | |
| 515 | clone_data->applied_master_prefs = TRUE; |
| 516 | |
| 517 | for (; gIter != NULL; gIter = gIter->next) { |
| 518 | GHashTableIter iter; |
| 519 | node_t *node = NULL; |
| 520 | resource_t *child_rsc = (resource_t *) gIter->data; |
| 521 | |
| 522 | g_hash_table_iter_init(&iter, child_rsc->allowed_nodes); |
| 523 | while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) { |
| 524 | if (can_run_resources(node) == FALSE) { |
| 525 | /* This node will never be promoted to master, |
| 526 | * so don't apply the master score as that may |
| 527 | * lead to clone shuffling |
| 528 | */ |
| 529 | continue; |
| 530 | } |
| 531 | |
| 532 | score = master_score(child_rsc, node, 0); |
| 533 | if (score > 0) { |
| 534 | new_score = merge_weights(node->weight, score); |
| 535 | if (new_score != node->weight) { |
| 536 | pe_rsc_trace(rsc, "\t%s: Updating preference for %s (%d->%d)", |
| 537 | child_rsc->id, node->details->uname, node->weight, new_score); |
| 538 | node->weight = new_score; |
| 539 | } |
| 540 | } |
| 541 | |
| 542 | new_score = max(child_rsc->priority, score); |
| 543 | if (new_score != child_rsc->priority) { |
| 544 | pe_rsc_trace(rsc, "\t%s: Updating priority (%d->%d)", |
| 545 | child_rsc->id, child_rsc->priority, new_score); |
| 546 | child_rsc->priority = new_score; |
| 547 | } |
| 548 | } |
| 549 | } |
| 550 | } |
| 551 | |
| 552 | static void |
| 553 | set_role_slave(resource_t * rsc, gboolean current) |
no test coverage detected