diff --git a/lib/pengine/native.c b/lib/pengine/native.c index 9b2f5ffa6b..110c2103a4 100644 --- a/lib/pengine/native.c +++ b/lib/pengine/native.c @@ -1,588 +1,596 @@ /* * Copyright (C) 2004 Andrew Beekhof * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include #include #include #define VARIANT_NATIVE 1 #include "./variant.h" void native_add_running(resource_t * rsc, node_t * node, pe_working_set_t * data_set) { GListPtr gIter = rsc->running_on; CRM_CHECK(node != NULL, return); - for (; gIter != NULL; gIter = gIter->next) { node_t *a_node = (node_t *) gIter->data; CRM_CHECK(a_node != NULL, return); if (safe_str_eq(a_node->details->id, node->details->id)) { return; } } - pe_rsc_trace(rsc, "Adding %s to %s", rsc->id, node->details->uname); + pe_rsc_trace(rsc, "Adding %s to %s %s", rsc->id, node->details->uname, + is_set(rsc->flags, pe_rsc_managed)?"":"(unmanaged)"); rsc->running_on = g_list_append(rsc->running_on, node); if (rsc->variant == pe_native) { node->details->running_rsc = g_list_append(node->details->running_rsc, rsc); } if (is_not_set(rsc->flags, pe_rsc_managed)) { + resource_t *p = rsc->parent; + pe_rsc_info(rsc, "resource %s isnt managed", rsc->id); resource_location(rsc, node, INFINITY, "not_managed_default", data_set); + + while(p && node->details->online) { + /* add without the additional location constraint */ + p->running_on = g_list_append(p->running_on, node); + p = p->parent; + } return; } if (rsc->variant == pe_native && g_list_length(rsc->running_on) > 1) { switch (rsc->recovery_type) { case recovery_stop_only: { GHashTableIter gIter; node_t *local_node = NULL; /* make sure it doesnt come up again */ g_hash_table_destroy(rsc->allowed_nodes); rsc->allowed_nodes = node_hash_from_list(data_set->nodes); g_hash_table_iter_init(&gIter, rsc->allowed_nodes); while (g_hash_table_iter_next(&gIter, NULL, (void **)&local_node)) { local_node->weight = -INFINITY; } } break; case recovery_stop_start: break; case recovery_block: clear_bit(rsc->flags, pe_rsc_managed); set_bit(rsc->flags, pe_rsc_block); break; } crm_debug("%s is active on %d nodes including %s: %s", rsc->id, g_list_length(rsc->running_on), node->details->uname, recovery2text(rsc->recovery_type)); } else { pe_rsc_trace(rsc, "Resource %s is active on: %s", rsc->id, node->details->uname); } if (rsc->parent != NULL) { native_add_running(rsc->parent, node, data_set); } } extern void force_non_unique_clone(resource_t * rsc, const char *rid, pe_working_set_t * data_set); gboolean native_unpack(resource_t * rsc, pe_working_set_t * data_set) { resource_t *parent = uber_parent(rsc); native_variant_data_t *native_data = NULL; const char *class = crm_element_value(rsc->xml, XML_AGENT_ATTR_CLASS); pe_rsc_trace(rsc, "Processing resource %s...", rsc->id); native_data = calloc(1, sizeof(native_variant_data_t)); rsc->variant_opaque = native_data; if (is_set(rsc->flags, pe_rsc_unique) && rsc->parent) { if (safe_str_eq(class, "lsb")) { resource_t *top = uber_parent(rsc); force_non_unique_clone(top, rsc->id, data_set); } } if (safe_str_eq(class, "ocf") == FALSE) { const char *stateful = g_hash_table_lookup(parent->meta, "stateful"); if (safe_str_eq(stateful, XML_BOOLEAN_TRUE)) { pe_err ("Resource %s is of type %s and therefore cannot be used as a master/slave resource", rsc->id, class); return FALSE; } } return TRUE; } resource_t * native_find_rsc(resource_t * rsc, const char *id, node_t * on_node, int flags) { gboolean match = FALSE; resource_t *result = NULL; GListPtr gIter = rsc->children; CRM_ASSERT(id != NULL); if (flags & pe_find_clone) { const char *rid = ID(rsc->xml); if (rsc->parent == NULL) { match = FALSE; } else if (safe_str_eq(rsc->id, id)) { match = TRUE; } else if (safe_str_eq(rid, id)) { match = TRUE; } } else { if (strcmp(rsc->id, id) == 0) { match = TRUE; } else if (is_set(flags, pe_find_renamed) && rsc->clone_name && strcmp(rsc->clone_name, id) == 0) { match = TRUE; } } if (match && on_node) { pe_rsc_trace(rsc, "Now checking %s is on %s", rsc->id, on_node->details->uname); if (is_set(flags, pe_find_current) && rsc->running_on) { GListPtr gIter = rsc->running_on; for (; gIter != NULL; gIter = gIter->next) { node_t *loc = (node_t *) gIter->data; if (loc->details == on_node->details) { return rsc; } } } else if (is_set(flags, pe_find_inactive) && rsc->running_on == NULL) { return rsc; } else if (is_not_set(flags, pe_find_current) && rsc->allocated_to && rsc->allocated_to->details == on_node->details) { return rsc; } } else if (match) { return rsc; } for (; gIter != NULL; gIter = gIter->next) { resource_t *child = (resource_t *) gIter->data; result = rsc->fns->find_rsc(child, id, on_node, flags); if (result) { return result; } } return NULL; } char * native_parameter(resource_t * rsc, node_t * node, gboolean create, const char *name, pe_working_set_t * data_set) { char *value_copy = NULL; const char *value = NULL; GHashTable *hash = rsc->parameters; GHashTable *local_hash = NULL; CRM_CHECK(rsc != NULL, return NULL); CRM_CHECK(name != NULL && strlen(name) != 0, return NULL); pe_rsc_trace(rsc, "Looking up %s in %s", name, rsc->id); if (create || g_hash_table_size(rsc->parameters) == 0) { if (node != NULL) { pe_rsc_trace(rsc, "Creating hash with node %s", node->details->uname); } else { pe_rsc_trace(rsc, "Creating default hash"); } local_hash = g_hash_table_new_full(crm_str_hash, g_str_equal, g_hash_destroy_str, g_hash_destroy_str); get_rsc_attributes(local_hash, rsc, node, data_set); hash = local_hash; } value = g_hash_table_lookup(hash, name); if (value == NULL) { /* try meta attributes instead */ value = g_hash_table_lookup(rsc->meta, name); } if (value != NULL) { value_copy = strdup(value); } if (local_hash != NULL) { g_hash_table_destroy(local_hash); } return value_copy; } gboolean native_active(resource_t * rsc, gboolean all) { GListPtr gIter = rsc->running_on; for (; gIter != NULL; gIter = gIter->next) { node_t *a_node = (node_t *) gIter->data; if (a_node->details->unclean) { crm_debug("Resource %s: node %s is unclean", rsc->id, a_node->details->uname); return TRUE; } else if (a_node->details->online == FALSE) { crm_debug("Resource %s: node %s is offline", rsc->id, a_node->details->uname); } else { crm_debug("Resource %s active on %s", rsc->id, a_node->details->uname); return TRUE; } } return FALSE; } struct print_data_s { long options; void *print_data; }; static void native_print_attr(gpointer key, gpointer value, gpointer user_data) { long options = ((struct print_data_s *)user_data)->options; void *print_data = ((struct print_data_s *)user_data)->print_data; status_print("Option: %s = %s\n", (char *)key, (char *)value); } static void native_print_xml(resource_t * rsc, const char *pre_text, long options, void *print_data) { const char *class = crm_element_value(rsc->xml, XML_AGENT_ATTR_CLASS); const char *prov = crm_element_value(rsc->xml, XML_AGENT_ATTR_PROVIDER); /* resource information. */ status_print("%sxml, XML_ATTR_TYPE)); status_print("role=\"%s\" ", role2text(rsc->role)); 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"); status_print("failed=\"%s\" ", is_set(rsc->flags, pe_rsc_failed) ? "true" : "false"); status_print("failure_ignored=\"%s\" ", 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_dev) { status_print("provisional=\"%s\" ", is_set(rsc->flags, pe_rsc_provisional) ? "true" : "false"); status_print("runnable=\"%s\" ", is_set(rsc->flags, pe_rsc_runnable) ? "true" : "false"); status_print("priority=\"%f\" ", (double)rsc->priority); status_print("variant=\"%s\" ", crm_element_name(rsc->xml)); } /* print out the nodes this resource is running on */ if (options & pe_print_rsconly) { status_print("/>\n"); /* do nothing */ } else if (g_list_length(rsc->running_on) > 0) { GListPtr gIter = rsc->running_on; status_print(">\n"); for (; gIter != NULL; gIter = gIter->next) { node_t *node = (node_t *) gIter->data; status_print("%s \n", pre_text, node->details->uname, node->details->id, node->details->online ? "false" : "true"); } status_print("%s\n", pre_text); } else { status_print("/>\n"); } } void native_print(resource_t * rsc, const char *pre_text, long options, void *print_data) { node_t *node = NULL; 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]; CRM_ASSERT(rsc->variant == pe_native); CRM_ASSERT(kind != NULL); if (rsc->meta) { const char *is_internal = g_hash_table_lookup(rsc->meta, XML_RSC_ATTR_INTERNAL_RSC); if (crm_is_true(is_internal)) { crm_trace("skipping print of internal resource %s", rsc->id); return; } } if (pre_text == NULL && (options & pe_print_printf)) { pre_text = " "; } if (options & pe_print_xml) { native_print_xml(rsc, pre_text, options, print_data); return; } if (rsc->running_on != NULL) { node = rsc->running_on->data; } if ((options & pe_print_rsconly) || g_list_length(rsc->running_on) > 1) { node = NULL; } if (options & pe_print_html) { if (is_not_set(rsc->flags, pe_rsc_managed)) { status_print(""); } else if (is_set(rsc->flags, pe_rsc_failed)) { status_print(""); } else if (rsc->variant == pe_native && g_list_length(rsc->running_on) == 0) { status_print(""); } else if (g_list_length(rsc->running_on) > 1) { status_print(""); } else if (is_set(rsc->flags, pe_rsc_failure_ignored)) { status_print(""); } else { status_print(""); } } if(pre_text) { offset += snprintf(buffer + offset, LINE_MAX - offset, "%s", pre_text); } offset += snprintf(buffer + offset, LINE_MAX - offset, "%s", rsc_printable_id(rsc)); offset += snprintf(buffer + offset, LINE_MAX - offset, "\t(%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):\t", kind); if(is_set(rsc->flags, pe_rsc_orphan)) { offset += snprintf(buffer + offset, LINE_MAX - offset, " ORPHANED "); } offset += snprintf(buffer + offset, LINE_MAX - offset, "%s ", role2text(rsc->role)); if(node) { offset += snprintf(buffer + offset, LINE_MAX - offset, "%s ", node->details->uname); } if(is_not_set(rsc->flags, pe_rsc_managed)) { offset += snprintf(buffer + offset, LINE_MAX - offset, "(unmanaged) "); } if(is_set(rsc->flags, pe_rsc_failed)) { offset += snprintf(buffer + offset, LINE_MAX - offset, "FAILED "); } if(is_set(rsc->flags, pe_rsc_failure_ignored)) { offset += snprintf(buffer + offset, LINE_MAX - offset, "(failure ignored)"); } if ((options & pe_print_rsconly) || g_list_length(rsc->running_on) > 1) { const char *desc = crm_element_value(rsc->xml, XML_ATTR_DESC); if(desc) { offset += snprintf(buffer + offset, LINE_MAX - offset, "%s", desc); } } status_print("%s", buffer); #if CURSES_ENABLED if ((options & pe_print_rsconly) || g_list_length(rsc->running_on) > 1) { /* Done */ } else if (options & pe_print_ncurses) { /* coverity[negative_returns] False positive */ move(-1, 0); } #endif if (options & pe_print_html) { status_print(" "); } if ((options & pe_print_rsconly)) { } else if (g_list_length(rsc->running_on) > 1) { GListPtr gIter = rsc->running_on; int counter = 0; if (options & pe_print_html) { status_print("
    \n"); } else if ((options & pe_print_printf) || (options & pe_print_ncurses)) { status_print("["); } for (; gIter != NULL; gIter = gIter->next) { node_t *node = (node_t *) gIter->data; counter++; if (options & pe_print_html) { status_print("
  • \n%s", node->details->uname); } else if ((options & pe_print_printf) || (options & pe_print_ncurses)) { status_print(" %s", node->details->uname); } else if ((options & pe_print_log)) { status_print("\t%d : %s", counter, node->details->uname); } else { status_print("%s", node->details->uname); } if (options & pe_print_html) { status_print("
  • \n"); } } if (options & pe_print_html) { status_print("
\n"); } else if ((options & pe_print_printf) || (options & pe_print_ncurses)) { status_print(" ]"); } } if (options & pe_print_html) { status_print("
\n"); } else if (options & pe_print_suppres_nl) { /* nothing */ } else if ((options & pe_print_printf) || (options & pe_print_ncurses)) { status_print("\n"); } if (options & pe_print_details) { struct print_data_s pdata; pdata.options = options; pdata.print_data = print_data; g_hash_table_foreach(rsc->parameters, native_print_attr, &pdata); } if (options & pe_print_dev) { GHashTableIter iter; node_t *node = NULL; status_print("%s\t(%s%svariant=%s, priority=%f)", pre_text, is_set(rsc->flags, pe_rsc_provisional) ? "provisional, " : "", is_set(rsc->flags, pe_rsc_runnable) ? "" : "non-startable, ", crm_element_name(rsc->xml), (double)rsc->priority); status_print("%s\tAllowed Nodes", pre_text); g_hash_table_iter_init(&iter, rsc->allowed_nodes); while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) { status_print("%s\t * %s %d", pre_text, node->details->uname, node->weight); } } if (options & pe_print_max_details) { GHashTableIter iter; node_t *node = NULL; status_print("%s\t=== Allowed Nodes\n", pre_text); g_hash_table_iter_init(&iter, rsc->allowed_nodes); while (g_hash_table_iter_next(&iter, NULL, (void **)&node)) { print_node("\t", node, FALSE); } } } void native_free(resource_t * rsc) { pe_rsc_trace(rsc, "Freeing resource action list (not the data)"); common_free(rsc); } enum rsc_role_e native_resource_state(const resource_t * rsc, gboolean current) { enum rsc_role_e role = rsc->next_role; if (current) { role = rsc->role; } pe_rsc_trace(rsc, "%s state: %s", rsc->id, role2text(role)); return role; } node_t * native_location(resource_t * rsc, GListPtr * list, gboolean current) { node_t *one = NULL; GListPtr result = NULL; if (rsc->children) { GListPtr gIter = rsc->children; for (; gIter != NULL; gIter = gIter->next) { resource_t *child = (resource_t *) gIter->data; child->fns->location(child, &result, current); } } else if (current && rsc->running_on) { result = g_list_copy(rsc->running_on); } else if (current == FALSE && rsc->allocated_to) { result = g_list_append(NULL, rsc->allocated_to); } if (result && g_list_length(result) == 1) { one = g_list_nth_data(result, 0); } if (list) { GListPtr gIter = result; for (; gIter != NULL; gIter = gIter->next) { node_t *node = (node_t *) gIter->data; if (*list == NULL || pe_find_node_id(*list, node->details->id) == NULL) { *list = g_list_append(*list, node); } } } g_list_free(result); return one; } diff --git a/pengine/test10/bug-5028-bottom.dot b/pengine/test10/bug-5028-bottom.dot index 93eef665f1..e25e097279 100644 --- a/pengine/test10/bug-5028-bottom.dot +++ b/pengine/test10/bug-5028-bottom.dot @@ -1,18 +1,12 @@ digraph "g" { "all_stopped" [ style=bold color="green" fontcolor="orange"] "do_shutdown bl460g6a" [ style=dashed color="red" fontcolor="black"] -"dummy-g_running_0" [ style=dashed color="red" fontcolor="orange"] -"dummy-g_start_0" -> "dummy-g_running_0" [ style = dashed] -"dummy-g_start_0" [ style=bold color="green" fontcolor="orange"] "dummy-g_stop_0" -> "dummy-g_stopped_0" [ style = dashed] "dummy-g_stop_0" -> "dummy02_stop_0 bl460g6a" [ style = bold] "dummy-g_stop_0" [ style=bold color="green" fontcolor="orange"] -"dummy-g_stopped_0" -> "dummy-g_start_0" [ style = dashed] "dummy-g_stopped_0" [ style=dashed color="red" fontcolor="orange"] -"dummy02_start_0 " -> "dummy-g_running_0" [ style = dashed] -"dummy02_start_0 " [ style=dashed color="red" fontcolor="black"] "dummy02_stop_0 bl460g6a" -> "all_stopped" [ style = bold] "dummy02_stop_0 bl460g6a" -> "do_shutdown bl460g6a" [ style = dashed] "dummy02_stop_0 bl460g6a" -> "dummy-g_stopped_0" [ style = dashed] "dummy02_stop_0 bl460g6a" [ style=bold color="green" fontcolor="black"] } diff --git a/pengine/test10/bug-5028-bottom.exp b/pengine/test10/bug-5028-bottom.exp index 1264da7434..900c02472b 100644 --- a/pengine/test10/bug-5028-bottom.exp +++ b/pengine/test10/bug-5028-bottom.exp @@ -1,44 +1,36 @@ - + - - - - - - - - - + - + - + - + diff --git a/pengine/test10/bug-5028-bottom.summary b/pengine/test10/bug-5028-bottom.summary index 6e3d895276..479fb1840f 100644 --- a/pengine/test10/bug-5028-bottom.summary +++ b/pengine/test10/bug-5028-bottom.summary @@ -1,24 +1,23 @@ Current cluster status: Online: [ bl460g6a bl460g6b ] Resource Group: dummy-g dummy01 (ocf::heartbeat:Dummy): Started bl460g6a (unmanaged) FAILED dummy02 (ocf::heartbeat:Dummy-stop-NG): Started bl460g6a Transition Summary: * Stop dummy02 (bl460g6a) Executing cluster transition: * Pseudo action: dummy-g_stop_0 - * Pseudo action: dummy-g_start_0 * Resource action: dummy02 stop on bl460g6a * Pseudo action: all_stopped Revised cluster status: Online: [ bl460g6a bl460g6b ] Resource Group: dummy-g dummy01 (ocf::heartbeat:Dummy): Started bl460g6a (unmanaged) FAILED dummy02 (ocf::heartbeat:Dummy-stop-NG): Stopped diff --git a/pengine/test10/bug-5028-detach.exp b/pengine/test10/bug-5028-detach.exp index b91b31de88..1c3374b1e9 100644 --- a/pengine/test10/bug-5028-detach.exp +++ b/pengine/test10/bug-5028-detach.exp @@ -1,11 +1,11 @@ - + diff --git a/pengine/test10/bug-5028.exp b/pengine/test10/bug-5028.exp index d7b91d14ab..249c66697e 100644 --- a/pengine/test10/bug-5028.exp +++ b/pengine/test10/bug-5028.exp @@ -1,19 +1,19 @@ - + - + diff --git a/pengine/test10/failcount-block.xml b/pengine/test10/failcount-block.xml index 28c5a02603..0f4e624bd7 100644 --- a/pengine/test10/failcount-block.xml +++ b/pengine/test10/failcount-block.xml @@ -1,109 +1,109 @@ - + - + - + - + diff --git a/pengine/test10/master-reattach.summary b/pengine/test10/master-reattach.summary index 1c0a7e0a3b..2e7f492aba 100644 --- a/pengine/test10/master-reattach.summary +++ b/pengine/test10/master-reattach.summary @@ -1,34 +1,32 @@ Current cluster status: Online: [ dktest1 dktest2 ] Master/Slave Set: ms-drbd1 [drbd1] (unmanaged) drbd1 (ocf::heartbeat:drbd): Master dktest1 (unmanaged) drbd1 (ocf::heartbeat:drbd): Slave dktest2 (unmanaged) - Stopped: [ dktest1 dktest2 ] Resource Group: apache apache-vip (ocf::heartbeat:IPaddr2): Started dktest1 (unmanaged) mount (ocf::heartbeat:Filesystem): Started dktest1 (unmanaged) webserver (ocf::heartbeat:apache): Started dktest1 (unmanaged) Transition Summary: Executing cluster transition: * Resource action: drbd1:0 monitor=10000 on dktest1 * Resource action: drbd1:0 monitor=11000 on dktest2 * Resource action: apache-vip monitor=60000 on dktest1 * Resource action: mount monitor=10000 on dktest1 * Resource action: webserver monitor=30000 on dktest1 Revised cluster status: Online: [ dktest1 dktest2 ] Master/Slave Set: ms-drbd1 [drbd1] (unmanaged) drbd1 (ocf::heartbeat:drbd): Master dktest1 (unmanaged) drbd1 (ocf::heartbeat:drbd): Slave dktest2 (unmanaged) - Stopped: [ dktest1 dktest2 ] Resource Group: apache apache-vip (ocf::heartbeat:IPaddr2): Started dktest1 (unmanaged) mount (ocf::heartbeat:Filesystem): Started dktest1 (unmanaged) webserver (ocf::heartbeat:apache): Started dktest1 (unmanaged) diff --git a/pengine/test10/master-unmanaged-monitor.summary b/pengine/test10/master-unmanaged-monitor.summary index 4ee74d2d2f..369dcde766 100644 --- a/pengine/test10/master-unmanaged-monitor.summary +++ b/pengine/test10/master-unmanaged-monitor.summary @@ -1,70 +1,68 @@ Current cluster status: Online: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] Clone Set: Fencing [FencingChild] (unmanaged) Stopped: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] Resource Group: group-1 r192.168.122.112 (ocf::heartbeat:IPaddr): Started pcmk-3 (unmanaged) r192.168.122.113 (ocf::heartbeat:IPaddr): Started pcmk-3 (unmanaged) r192.168.122.114 (ocf::heartbeat:IPaddr): Started pcmk-3 (unmanaged) rsc_pcmk-1 (ocf::heartbeat:IPaddr): Started pcmk-1 (unmanaged) rsc_pcmk-2 (ocf::heartbeat:IPaddr): Started pcmk-2 (unmanaged) rsc_pcmk-3 (ocf::heartbeat:IPaddr): Started pcmk-3 (unmanaged) rsc_pcmk-4 (ocf::heartbeat:IPaddr): Started pcmk-4 (unmanaged) lsb-dummy (lsb:/usr/share/pacemaker/tests/cts/LSBDummy): Started pcmk-3 (unmanaged) migrator (ocf::pacemaker:Dummy): Started pcmk-4 (unmanaged) Clone Set: Connectivity [ping-1] (unmanaged) ping-1 (ocf::pacemaker:ping): Started pcmk-2 (unmanaged) ping-1 (ocf::pacemaker:ping): Started pcmk-3 (unmanaged) ping-1 (ocf::pacemaker:ping): Started pcmk-4 (unmanaged) ping-1 (ocf::pacemaker:ping): Started pcmk-1 (unmanaged) - Stopped: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] Master/Slave Set: master-1 [stateful-1] (unmanaged) stateful-1 (ocf::pacemaker:Stateful): Slave pcmk-2 (unmanaged) stateful-1 (ocf::pacemaker:Stateful): Master pcmk-3 (unmanaged) stateful-1 (ocf::pacemaker:Stateful): Slave pcmk-4 (unmanaged) - Stopped: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] + Stopped: [ pcmk-1 ] Transition Summary: Executing cluster transition: * Resource action: lsb-dummy monitor=5000 on pcmk-3 * Resource action: migrator monitor=10000 on pcmk-4 * Resource action: ping-1:0 monitor=60000 on pcmk-2 * Resource action: ping-1:0 monitor=60000 on pcmk-3 * Resource action: ping-1:0 monitor=60000 on pcmk-4 * Resource action: ping-1:0 monitor=60000 on pcmk-1 * Resource action: stateful-1:0 monitor=15000 on pcmk-2 * Resource action: stateful-1:0 monitor on pcmk-1 * Resource action: stateful-1:0 monitor=16000 on pcmk-3 * Resource action: stateful-1:0 monitor=15000 on pcmk-4 * Pseudo action: probe_complete Revised cluster status: Online: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] Clone Set: Fencing [FencingChild] (unmanaged) Stopped: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] Resource Group: group-1 r192.168.122.112 (ocf::heartbeat:IPaddr): Started pcmk-3 (unmanaged) r192.168.122.113 (ocf::heartbeat:IPaddr): Started pcmk-3 (unmanaged) r192.168.122.114 (ocf::heartbeat:IPaddr): Started pcmk-3 (unmanaged) rsc_pcmk-1 (ocf::heartbeat:IPaddr): Started pcmk-1 (unmanaged) rsc_pcmk-2 (ocf::heartbeat:IPaddr): Started pcmk-2 (unmanaged) rsc_pcmk-3 (ocf::heartbeat:IPaddr): Started pcmk-3 (unmanaged) rsc_pcmk-4 (ocf::heartbeat:IPaddr): Started pcmk-4 (unmanaged) lsb-dummy (lsb:/usr/share/pacemaker/tests/cts/LSBDummy): Started pcmk-3 (unmanaged) migrator (ocf::pacemaker:Dummy): Started pcmk-4 (unmanaged) Clone Set: Connectivity [ping-1] (unmanaged) ping-1 (ocf::pacemaker:ping): Started pcmk-2 (unmanaged) ping-1 (ocf::pacemaker:ping): Started pcmk-3 (unmanaged) ping-1 (ocf::pacemaker:ping): Started pcmk-4 (unmanaged) ping-1 (ocf::pacemaker:ping): Started pcmk-1 (unmanaged) - Stopped: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] Master/Slave Set: master-1 [stateful-1] (unmanaged) stateful-1 (ocf::pacemaker:Stateful): Slave pcmk-2 (unmanaged) stateful-1 (ocf::pacemaker:Stateful): Master pcmk-3 (unmanaged) stateful-1 (ocf::pacemaker:Stateful): Slave pcmk-4 (unmanaged) - Stopped: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] + Stopped: [ pcmk-1 ] diff --git a/pengine/test10/order7.exp b/pengine/test10/order7.exp index f8594a9cfe..cc7cf86cba 100644 --- a/pengine/test10/order7.exp +++ b/pengine/test10/order7.exp @@ -1,111 +1,111 @@ - + diff --git a/pengine/test10/unmanaged-master.summary b/pengine/test10/unmanaged-master.summary index 86efd8aff7..066f139fa8 100644 --- a/pengine/test10/unmanaged-master.summary +++ b/pengine/test10/unmanaged-master.summary @@ -1,61 +1,61 @@ Current cluster status: Online: [ pcmk-1 pcmk-2 ] OFFLINE: [ pcmk-3 pcmk-4 ] Clone Set: Fencing [FencingChild] (unmanaged) FencingChild (stonith:fence_xvm): Started pcmk-2 (unmanaged) FencingChild (stonith:fence_xvm): Started pcmk-1 (unmanaged) - Stopped: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] + Stopped: [ pcmk-3 pcmk-4 ] Resource Group: group-1 r192.168.122.126 (ocf::heartbeat:IPaddr): Started pcmk-2 (unmanaged) r192.168.122.127 (ocf::heartbeat:IPaddr): Started pcmk-2 (unmanaged) r192.168.122.128 (ocf::heartbeat:IPaddr): Started pcmk-2 (unmanaged) rsc_pcmk-1 (ocf::heartbeat:IPaddr): Started pcmk-1 (unmanaged) rsc_pcmk-2 (ocf::heartbeat:IPaddr): Started pcmk-2 (unmanaged) rsc_pcmk-3 (ocf::heartbeat:IPaddr): Started pcmk-3 (unmanaged) rsc_pcmk-4 (ocf::heartbeat:IPaddr): Started pcmk-4 (unmanaged) lsb-dummy (lsb:/usr/share/pacemaker/tests/cts/LSBDummy): Started pcmk-2 (unmanaged) migrator (ocf::pacemaker:Dummy): Started pcmk-4 (unmanaged) Clone Set: Connectivity [ping-1] (unmanaged) ping-1 (ocf::pacemaker:ping): Started pcmk-2 (unmanaged) ping-1 (ocf::pacemaker:ping): Started pcmk-1 (unmanaged) - Stopped: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] + Stopped: [ pcmk-3 pcmk-4 ] Master/Slave Set: master-1 [stateful-1] (unmanaged) stateful-1 (ocf::pacemaker:Stateful): Master pcmk-2 (unmanaged) stateful-1 (ocf::pacemaker:Stateful): Started pcmk-1 (unmanaged) - Stopped: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] + Stopped: [ pcmk-3 pcmk-4 ] Transition Summary: Executing cluster transition: * Cluster action: do_shutdown on pcmk-2 * Cluster action: do_shutdown on pcmk-1 Revised cluster status: Online: [ pcmk-1 pcmk-2 ] OFFLINE: [ pcmk-3 pcmk-4 ] Clone Set: Fencing [FencingChild] (unmanaged) FencingChild (stonith:fence_xvm): Started pcmk-2 (unmanaged) FencingChild (stonith:fence_xvm): Started pcmk-1 (unmanaged) - Stopped: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] + Stopped: [ pcmk-3 pcmk-4 ] Resource Group: group-1 r192.168.122.126 (ocf::heartbeat:IPaddr): Started pcmk-2 (unmanaged) r192.168.122.127 (ocf::heartbeat:IPaddr): Started pcmk-2 (unmanaged) r192.168.122.128 (ocf::heartbeat:IPaddr): Started pcmk-2 (unmanaged) rsc_pcmk-1 (ocf::heartbeat:IPaddr): Started pcmk-1 (unmanaged) rsc_pcmk-2 (ocf::heartbeat:IPaddr): Started pcmk-2 (unmanaged) rsc_pcmk-3 (ocf::heartbeat:IPaddr): Started pcmk-3 (unmanaged) rsc_pcmk-4 (ocf::heartbeat:IPaddr): Started pcmk-4 (unmanaged) lsb-dummy (lsb:/usr/share/pacemaker/tests/cts/LSBDummy): Started pcmk-2 (unmanaged) migrator (ocf::pacemaker:Dummy): Started pcmk-4 (unmanaged) Clone Set: Connectivity [ping-1] (unmanaged) ping-1 (ocf::pacemaker:ping): Started pcmk-2 (unmanaged) ping-1 (ocf::pacemaker:ping): Started pcmk-1 (unmanaged) - Stopped: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] + Stopped: [ pcmk-3 pcmk-4 ] Master/Slave Set: master-1 [stateful-1] (unmanaged) stateful-1 (ocf::pacemaker:Stateful): Master pcmk-2 (unmanaged) stateful-1 (ocf::pacemaker:Stateful): Started pcmk-1 (unmanaged) - Stopped: [ pcmk-1 pcmk-2 pcmk-3 pcmk-4 ] + Stopped: [ pcmk-3 pcmk-4 ]