mirror of
https://github.com/systemd/systemd.git
synced 2025-03-08 08:58:27 +03:00
Merge pull request #27723 from YHNdnzj/service-restart-cleanup
core: get rid of unused Service.will_auto_restart logic
This commit is contained in:
commit
1f74369c2e
@ -283,7 +283,7 @@ static void automount_set_state(Automount *a, AutomountState state) {
|
||||
if (state != old_state)
|
||||
log_unit_debug(UNIT(a), "Changed %s -> %s", automount_state_to_string(old_state), automount_state_to_string(state));
|
||||
|
||||
unit_notify(UNIT(a), state_translation_table[old_state], state_translation_table[state], 0);
|
||||
unit_notify(UNIT(a), state_translation_table[old_state], state_translation_table[state], /* reload_success = */ true);
|
||||
}
|
||||
|
||||
static int automount_coldplug(Unit *u) {
|
||||
|
@ -182,7 +182,7 @@ static void device_set_state(Device *d, DeviceState state) {
|
||||
if (state != old_state)
|
||||
log_unit_debug(UNIT(d), "Changed %s -> %s", device_state_to_string(old_state), device_state_to_string(state));
|
||||
|
||||
unit_notify(UNIT(d), state_translation_table[old_state], state_translation_table[state], 0);
|
||||
unit_notify(UNIT(d), state_translation_table[old_state], state_translation_table[state], /* reload_success = */ true);
|
||||
}
|
||||
|
||||
static void device_found_changed(Device *d, DeviceFound previous, DeviceFound now) {
|
||||
|
@ -761,8 +761,7 @@ static void mount_set_state(Mount *m, MountState state) {
|
||||
if (state != old_state)
|
||||
log_unit_debug(UNIT(m), "Changed %s -> %s", mount_state_to_string(old_state), mount_state_to_string(state));
|
||||
|
||||
unit_notify(UNIT(m), state_translation_table[old_state], state_translation_table[state],
|
||||
m->reload_result == MOUNT_SUCCESS ? 0 : UNIT_NOTIFY_RELOAD_FAILURE);
|
||||
unit_notify(UNIT(m), state_translation_table[old_state], state_translation_table[state], m->reload_result == MOUNT_SUCCESS);
|
||||
}
|
||||
|
||||
static int mount_coldplug(Unit *u) {
|
||||
|
@ -477,7 +477,7 @@ static void path_set_state(Path *p, PathState state) {
|
||||
if (state != old_state)
|
||||
log_unit_debug(UNIT(p), "Changed %s -> %s", path_state_to_string(old_state), path_state_to_string(state));
|
||||
|
||||
unit_notify(UNIT(p), state_translation_table[old_state], state_translation_table[state], 0);
|
||||
unit_notify(UNIT(p), state_translation_table[old_state], state_translation_table[state], /* reload_success = */ true);
|
||||
}
|
||||
|
||||
static void path_enter_waiting(Path *p, bool initial, bool from_trigger_notify);
|
||||
|
@ -127,7 +127,7 @@ static void scope_set_state(Scope *s, ScopeState state) {
|
||||
if (state != old_state)
|
||||
log_debug("%s changed %s -> %s", UNIT(s)->id, scope_state_to_string(old_state), scope_state_to_string(state));
|
||||
|
||||
unit_notify(UNIT(s), state_translation_table[old_state], state_translation_table[state], 0);
|
||||
unit_notify(UNIT(s), state_translation_table[old_state], state_translation_table[state], /* reload_success = */ true);
|
||||
}
|
||||
|
||||
static int scope_add_default_dependencies(Scope *s) {
|
||||
|
@ -1277,9 +1277,7 @@ static void service_set_state(Service *s, ServiceState state) {
|
||||
if (old_state != state)
|
||||
log_unit_debug(UNIT(s), "Changed %s -> %s", service_state_to_string(old_state), service_state_to_string(state));
|
||||
|
||||
unit_notify(UNIT(s), table[old_state], table[state],
|
||||
(s->reload_result == SERVICE_SUCCESS ? 0 : UNIT_NOTIFY_RELOAD_FAILURE) |
|
||||
(s->will_auto_restart ? UNIT_NOTIFY_WILL_AUTO_RESTART : 0));
|
||||
unit_notify(UNIT(s), table[old_state], table[state], s->reload_result == SERVICE_SUCCESS);
|
||||
}
|
||||
|
||||
static usec_t service_coldplug_timeout(Service *s) {
|
||||
@ -1946,8 +1944,6 @@ static bool service_will_restart(Unit *u) {
|
||||
|
||||
assert(s);
|
||||
|
||||
if (s->will_auto_restart)
|
||||
return true;
|
||||
if (IN_SET(s->state, SERVICE_DEAD_BEFORE_AUTO_RESTART, SERVICE_FAILED_BEFORE_AUTO_RESTART, SERVICE_AUTO_RESTART))
|
||||
return true;
|
||||
|
||||
@ -1993,19 +1989,14 @@ static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart)
|
||||
log_unit_debug(UNIT(s), "Service restart not allowed.");
|
||||
else {
|
||||
const char *reason;
|
||||
bool shall_restart;
|
||||
|
||||
shall_restart = service_shall_restart(s, &reason);
|
||||
allow_restart = service_shall_restart(s, &reason);
|
||||
log_unit_debug(UNIT(s), "Service will %srestart (%s)",
|
||||
shall_restart ? "" : "not ",
|
||||
allow_restart ? "" : "not ",
|
||||
reason);
|
||||
if (shall_restart)
|
||||
s->will_auto_restart = true;
|
||||
}
|
||||
|
||||
if (s->will_auto_restart) {
|
||||
s->will_auto_restart = false;
|
||||
|
||||
if (allow_restart) {
|
||||
/* We make two state changes here: one that maps to the high-level UNIT_INACTIVE/UNIT_FAILED
|
||||
* state (i.e. a state indicating deactivation), and then one that that maps to the
|
||||
* high-level UNIT_STARTING state (i.e. a state indicating activation). We do this so that
|
||||
|
@ -181,8 +181,6 @@ struct Service {
|
||||
bool main_pid_alien:1;
|
||||
bool bus_name_good:1;
|
||||
bool forbid_restart:1;
|
||||
/* Keep restart intention between UNIT_FAILED and UNIT_ACTIVATING */
|
||||
bool will_auto_restart:1;
|
||||
bool start_timeout_defined:1;
|
||||
bool exec_fd_hot:1;
|
||||
|
||||
|
@ -43,7 +43,7 @@ static void slice_set_state(Slice *t, SliceState state) {
|
||||
slice_state_to_string(old_state),
|
||||
slice_state_to_string(state));
|
||||
|
||||
unit_notify(UNIT(t), state_translation_table[old_state], state_translation_table[state], 0);
|
||||
unit_notify(UNIT(t), state_translation_table[old_state], state_translation_table[state], /* reload_success = */ true);
|
||||
}
|
||||
|
||||
static int slice_add_parent_slice(Slice *s) {
|
||||
|
@ -1844,7 +1844,7 @@ static void socket_set_state(Socket *s, SocketState state) {
|
||||
if (state != old_state)
|
||||
log_unit_debug(UNIT(s), "Changed %s -> %s", socket_state_to_string(old_state), socket_state_to_string(state));
|
||||
|
||||
unit_notify(UNIT(s), state_translation_table[old_state], state_translation_table[state], 0);
|
||||
unit_notify(UNIT(s), state_translation_table[old_state], state_translation_table[state], /* reload_success = */ true);
|
||||
}
|
||||
|
||||
static int socket_coldplug(Unit *u) {
|
||||
|
@ -554,7 +554,7 @@ static void swap_set_state(Swap *s, SwapState state) {
|
||||
if (state != old_state)
|
||||
log_unit_debug(UNIT(s), "Changed %s -> %s", swap_state_to_string(old_state), swap_state_to_string(state));
|
||||
|
||||
unit_notify(UNIT(s), state_translation_table[old_state], state_translation_table[state], 0);
|
||||
unit_notify(UNIT(s), state_translation_table[old_state], state_translation_table[state], /* reload_success = */ true);
|
||||
|
||||
/* If there other units for the same device node have a job
|
||||
queued it might be worth checking again if it is runnable
|
||||
|
@ -31,7 +31,7 @@ static void target_set_state(Target *t, TargetState state) {
|
||||
target_state_to_string(old_state),
|
||||
target_state_to_string(state));
|
||||
|
||||
unit_notify(UNIT(t), state_translation_table[old_state], state_translation_table[state], 0);
|
||||
unit_notify(UNIT(t), state_translation_table[old_state], state_translation_table[state], /* reload_success = */ true);
|
||||
}
|
||||
|
||||
static int target_add_default_dependencies(Target *t) {
|
||||
|
@ -298,7 +298,7 @@ static void timer_set_state(Timer *t, TimerState state) {
|
||||
if (state != old_state)
|
||||
log_unit_debug(UNIT(t), "Changed %s -> %s", timer_state_to_string(old_state), timer_state_to_string(state));
|
||||
|
||||
unit_notify(UNIT(t), state_translation_table[old_state], state_translation_table[state], 0);
|
||||
unit_notify(UNIT(t), state_translation_table[old_state], state_translation_table[state], /* reload_success = */ true);
|
||||
}
|
||||
|
||||
static void timer_enter_waiting(Timer *t, bool time_change);
|
||||
|
@ -2111,7 +2111,7 @@ int unit_reload(Unit *u) {
|
||||
|
||||
if (!UNIT_VTABLE(u)->reload) {
|
||||
/* Unit doesn't have a reload function, but we need to propagate the reload anyway */
|
||||
unit_notify(u, unit_active_state(u), unit_active_state(u), 0);
|
||||
unit_notify(u, unit_active_state(u), unit_active_state(u), /* reload_success = */ true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2622,7 +2622,7 @@ static void unit_emit_audit_stop(Unit *u, UnitActiveState state) {
|
||||
}
|
||||
}
|
||||
|
||||
static bool unit_process_job(Job *j, UnitActiveState ns, UnitNotifyFlags flags) {
|
||||
static bool unit_process_job(Job *j, UnitActiveState ns, bool reload_success) {
|
||||
bool unexpected = false;
|
||||
JobResult result;
|
||||
|
||||
@ -2664,7 +2664,7 @@ static bool unit_process_job(Job *j, UnitActiveState ns, UnitNotifyFlags flags)
|
||||
|
||||
if (j->state == JOB_RUNNING) {
|
||||
if (ns == UNIT_ACTIVE)
|
||||
job_finish_and_invalidate(j, (flags & UNIT_NOTIFY_RELOAD_FAILURE) ? JOB_FAILED : JOB_DONE, true, false);
|
||||
job_finish_and_invalidate(j, reload_success ? JOB_DONE : JOB_FAILED, true, false);
|
||||
else if (!IN_SET(ns, UNIT_ACTIVATING, UNIT_RELOADING)) {
|
||||
unexpected = true;
|
||||
|
||||
@ -2695,7 +2695,7 @@ static bool unit_process_job(Job *j, UnitActiveState ns, UnitNotifyFlags flags)
|
||||
return unexpected;
|
||||
}
|
||||
|
||||
void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, UnitNotifyFlags flags) {
|
||||
void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_success) {
|
||||
const char *reason;
|
||||
Manager *m;
|
||||
|
||||
@ -2760,7 +2760,7 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, UnitNotifyFlag
|
||||
|
||||
/* Let's propagate state changes to the job */
|
||||
if (u->job)
|
||||
unexpected = unit_process_job(u->job, ns, flags);
|
||||
unexpected = unit_process_job(u->job, ns, reload_success);
|
||||
else
|
||||
unexpected = true;
|
||||
|
||||
@ -2777,9 +2777,7 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, UnitNotifyFlag
|
||||
|
||||
if (ns != os && ns == UNIT_FAILED) {
|
||||
log_unit_debug(u, "Unit entered failed state.");
|
||||
|
||||
if (!(flags & UNIT_NOTIFY_WILL_AUTO_RESTART))
|
||||
unit_start_on_failure(u, "OnFailure=", UNIT_ATOM_ON_FAILURE, u->on_failure_job_mode);
|
||||
unit_start_on_failure(u, "OnFailure=", UNIT_ATOM_ON_FAILURE, u->on_failure_job_mode);
|
||||
}
|
||||
|
||||
if (UNIT_IS_ACTIVE_OR_RELOADING(ns) && !UNIT_IS_ACTIVE_OR_RELOADING(os)) {
|
||||
@ -2796,8 +2794,7 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, UnitNotifyFlag
|
||||
unit_log_resources(u);
|
||||
}
|
||||
|
||||
if (ns == UNIT_INACTIVE && !IN_SET(os, UNIT_FAILED, UNIT_INACTIVE, UNIT_MAINTENANCE) &&
|
||||
!(flags & UNIT_NOTIFY_WILL_AUTO_RESTART))
|
||||
if (ns == UNIT_INACTIVE && !IN_SET(os, UNIT_FAILED, UNIT_INACTIVE, UNIT_MAINTENANCE))
|
||||
unit_start_on_failure(u, "OnSuccess=", UNIT_ATOM_ON_SUCCESS, u->on_success_job_mode);
|
||||
}
|
||||
|
||||
|
@ -902,12 +902,7 @@ int unit_kill_common(Unit *u, KillWho who, int signo, int code, int value, pid_t
|
||||
|
||||
void unit_notify_cgroup_oom(Unit *u, bool managed_oom);
|
||||
|
||||
typedef enum UnitNotifyFlags {
|
||||
UNIT_NOTIFY_RELOAD_FAILURE = 1 << 0,
|
||||
UNIT_NOTIFY_WILL_AUTO_RESTART = 1 << 1,
|
||||
} UnitNotifyFlags;
|
||||
|
||||
void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, UnitNotifyFlags flags);
|
||||
void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_success);
|
||||
|
||||
int unit_watch_pid(Unit *u, pid_t pid, bool exclusive);
|
||||
void unit_unwatch_pid(Unit *u, pid_t pid);
|
||||
|
Loading…
x
Reference in New Issue
Block a user