Commit c0daa706 authored by Lennart Poettering's avatar Lennart Poettering
Browse files

job: also trigger on-failure dependencies when jobs faile due to dependencies, timeout

parent a6a9a78d
......@@ -549,6 +549,13 @@ int job_finish_and_invalidate(Job *j, JobResult result) {
}
}
/* Trigger OnFailure dependencies that are not generated by
* the unit itself. We don't tread JOB_CANCELED as failure in
* this context. And JOB_FAILURE is already handled by the
* unit itself. */
if (result == JOB_TIMEOUT || result == JOB_DEPENDENCY)
unit_trigger_on_failure(u);
/* Try to start the next jobs that can be started */
SET_FOREACH(other, u->meta.dependencies[UNIT_AFTER], i)
if (other->meta.job)
......
......@@ -1071,6 +1071,16 @@ static void retroactively_stop_dependencies(Unit *u) {
unit_check_unneeded(other);
}
void unit_trigger_on_failure(Unit *u) {
Unit *other;
Iterator i;
assert(u);
SET_FOREACH(other, u->meta.dependencies[UNIT_ON_FAILURE], i)
manager_add_job(u->meta.manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL);
}
void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_success) {
dual_timestamp ts;
bool unexpected;
......@@ -1183,13 +1193,8 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su
}
if (ns != os && ns == UNIT_FAILED) {
Iterator i;
Unit *other;
SET_FOREACH(other, u->meta.dependencies[UNIT_ON_FAILURE], i)
manager_add_job(u->meta.manager, JOB_START, other, JOB_REPLACE, true, NULL, NULL);
log_notice("Unit %s entered failed state.", u->meta.id);
unit_trigger_on_failure(u);
}
/* Some names are special */
......
......@@ -511,6 +511,8 @@ int unit_following_set(Unit *u, Set **s);
UnitType unit_name_to_type(const char *n);
bool unit_name_is_valid(const char *n, bool template_ok);
void unit_trigger_on_failure(Unit *u);
const char *unit_load_state_to_string(UnitLoadState i);
UnitLoadState unit_load_state_from_string(const char *s);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment