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",