Print this page
7246 SMF stops dependents in the wrong order
7267 SMF is fast and loose with optional dependencies

*** 19,28 **** --- 19,30 ---- * CDDL HEADER END */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. + * + * Copyright 2016 RackTop Systems. */ /* * transition.c - Graph State Machine
*** 135,144 **** --- 137,153 ---- log_framework(LOG_DEBUG, "Propagating maintenance (stop) of " "%s.\n", v->gv_name); graph_transition_propagate(v, PROPAGATE_STOP, rerr); + + /* + * The maintenance transition may satisfy optional_all/restart + * dependencies and should be propagated to determine + * whether new dependents are satisfiable. + */ + graph_transition_propagate(v, PROPAGATE_SAT, rerr); } else { log_framework(LOG_DEBUG, "Propagating maintenance of %s.\n", v->gv_name); graph_transition_propagate(v, PROPAGATE_SAT, rerr);
*** 265,274 **** --- 274,289 ---- log_framework(LOG_DEBUG, "Propagating stop of %s.\n", v->gv_name); graph_transition_propagate(v, PROPAGATE_STOP, rerr); + /* + * The disable transition may satisfy optional_all/restart + * dependencies and should be propagated to determine + * whether new dependents are satisfiable. + */ + graph_transition_propagate(v, PROPAGATE_SAT, rerr); } else { log_framework(LOG_DEBUG, "Propagating disable of %s.\n", v->gv_name); graph_transition_propagate(v, PROPAGATE_SAT, rerr);
*** 324,335 **** /* * If the vertex has the GV_TOOFFLINE flag set then that's * because the instance was transitioning from offline to * online and the reverse disable algorithm doesn't offline * those instances because it was already appearing offline. ! * So do it now. */ offline_vertex(v); } if (gt_running(old_state) == 0) { log_framework(LOG_DEBUG, "Propagating start of %s.\n", --- 339,351 ---- /* * If the vertex has the GV_TOOFFLINE flag set then that's * because the instance was transitioning from offline to * online and the reverse disable algorithm doesn't offline * those instances because it was already appearing offline. ! * Try to do it now. */ + if (insubtree_dependents_down(v)) offline_vertex(v); } if (gt_running(old_state) == 0) { log_framework(LOG_DEBUG, "Propagating start of %s.\n",