summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-01-26 20:23:12 +0100
committerLuca Boccassi <luca.boccassi@gmail.com>2023-02-01 12:52:29 +0100
commite4c7b5f5173d92cfc5378c75fa3ab7ef0252f32b (patch)
tree3c08be3d44d3b68ebe48b9a9ad8d89aa542fcc19 /src
parentbuild(deps): bump systemd/mkosi (diff)
downloadsystemd-e4c7b5f5173d92cfc5378c75fa3ab7ef0252f32b.tar.xz
systemd-e4c7b5f5173d92cfc5378c75fa3ab7ef0252f32b.zip
core: split system/user job timeouts and make them configurable
Config options are -Ddefault-timeout-sec= and -Ddefault-user-timeout-sec=. Existing -Dupdate-helper-user-timeout= is renamed to -Dupdate-helper-user-timeout-sec= for consistency. All three options take an integer value in seconds. The renaming and type-change of the option is a small compat break, but it's just at compile time and result in a clear error message. I also doubt that anyone was actually using the option. This commit separates the user manager timeouts, but keeps them unchanged at 90 s. The timeout for the user manager is set to 4/3*user-timeout, which means that it is still 120 s. Fedora wants to experiment with lower timeouts, but doing this via a patch would be annoying and more work than necessary. Let's make this easy to configure.
Diffstat (limited to 'src')
-rw-r--r--src/basic/constants.h7
-rw-r--r--src/core/main.c8
-rw-r--r--src/core/manager.c6
-rw-r--r--src/core/manager.h4
-rw-r--r--src/core/system.conf.in6
-rw-r--r--src/core/user.conf.in5
-rwxr-xr-xsrc/rpm/systemd-update-helper.in10
7 files changed, 28 insertions, 18 deletions
diff --git a/src/basic/constants.h b/src/basic/constants.h
index 4a24ba9c8c..5d68cc6332 100644
--- a/src/basic/constants.h
+++ b/src/basic/constants.h
@@ -25,8 +25,13 @@
# endif
#endif
-#define DEFAULT_TIMEOUT_USEC (90*USEC_PER_SEC)
#define DEFAULT_RESTART_USEC (100*USEC_PER_MSEC)
+
+/* Many different things, but also system unit start/stop */
+#define DEFAULT_TIMEOUT_USEC (DEFAULT_TIMEOUT_SEC*USEC_PER_SEC)
+/* User unit start/stop */
+#define DEFAULT_USER_TIMEOUT_USEC (DEFAULT_USER_TIMEOUT_SEC*USEC_PER_SEC)
+/* Timeout for user confirmation on the console */
#define DEFAULT_CONFIRM_USEC (30*USEC_PER_SEC)
/* We use an extra-long timeout for the reload. This is because a reload or reexec means generators are rerun
diff --git a/src/core/main.c b/src/core/main.c
index a7cdc8d631..867f3c7adc 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -2436,11 +2436,11 @@ static void reset_arguments(void) {
arg_default_std_output = EXEC_OUTPUT_JOURNAL;
arg_default_std_error = EXEC_OUTPUT_INHERIT;
arg_default_restart_usec = DEFAULT_RESTART_USEC;
- arg_default_timeout_start_usec = DEFAULT_TIMEOUT_USEC;
- arg_default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
- arg_default_timeout_abort_usec = DEFAULT_TIMEOUT_USEC;
+ arg_default_timeout_start_usec = manager_default_timeout(arg_system);
+ arg_default_timeout_stop_usec = manager_default_timeout(arg_system);
+ arg_default_timeout_abort_usec = manager_default_timeout(arg_system);
arg_default_timeout_abort_set = false;
- arg_default_device_timeout_usec = DEFAULT_TIMEOUT_USEC;
+ arg_default_device_timeout_usec = manager_default_timeout(arg_system);
arg_default_start_limit_interval = DEFAULT_START_LIMIT_INTERVAL;
arg_default_start_limit_burst = DEFAULT_START_LIMIT_BURST;
arg_runtime_watchdog = 0;
diff --git a/src/core/manager.c b/src/core/manager.c
index d39e917134..67bab54b9b 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -835,10 +835,10 @@ int manager_new(LookupScope scope, ManagerTestRunFlags test_run_flags, Manager *
.default_memory_accounting = MEMORY_ACCOUNTING_DEFAULT,
.default_tasks_accounting = true,
.default_tasks_max = TASKS_MAX_UNSET,
- .default_timeout_start_usec = DEFAULT_TIMEOUT_USEC,
- .default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC,
+ .default_timeout_start_usec = manager_default_timeout(scope == LOOKUP_SCOPE_SYSTEM),
+ .default_timeout_stop_usec = manager_default_timeout(scope == LOOKUP_SCOPE_SYSTEM),
.default_restart_usec = DEFAULT_RESTART_USEC,
- .default_device_timeout_usec = DEFAULT_TIMEOUT_USEC,
+ .default_device_timeout_usec = manager_default_timeout(scope == LOOKUP_SCOPE_SYSTEM),
.original_log_level = -1,
.original_log_target = _LOG_TARGET_INVALID,
diff --git a/src/core/manager.h b/src/core/manager.h
index c13de8fe78..e7b594fdd3 100644
--- a/src/core/manager.h
+++ b/src/core/manager.h
@@ -485,6 +485,10 @@ static inline usec_t manager_default_timeout_abort_usec(Manager *m) {
#define MANAGER_IS_TEST_RUN(m) ((m)->test_run_flags != 0)
+static inline usec_t manager_default_timeout(bool is_system) {
+ return is_system ? DEFAULT_TIMEOUT_USEC : DEFAULT_USER_TIMEOUT_USEC;
+}
+
int manager_new(LookupScope scope, ManagerTestRunFlags test_run_flags, Manager **m);
Manager* manager_free(Manager *m);
DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
diff --git a/src/core/system.conf.in b/src/core/system.conf.in
index 531a7694d9..0c27586c46 100644
--- a/src/core/system.conf.in
+++ b/src/core/system.conf.in
@@ -43,10 +43,10 @@
#DefaultTimerAccuracySec=1min
#DefaultStandardOutput=journal
#DefaultStandardError=inherit
-#DefaultTimeoutStartSec=90s
-#DefaultTimeoutStopSec=90s
+#DefaultTimeoutStartSec={{DEFAULT_TIMEOUT_SEC}}s
+#DefaultTimeoutStopSec={{DEFAULT_TIMEOUT_SEC}}s
#DefaultTimeoutAbortSec=
-#DefaultDeviceTimeoutSec=90s
+#DefaultDeviceTimeoutSec={{DEFAULT_TIMEOUT_SEC}}s
#DefaultRestartSec=100ms
#DefaultStartLimitIntervalSec=10s
#DefaultStartLimitBurst=5
diff --git a/src/core/user.conf.in b/src/core/user.conf.in
index b4938942d1..d67650b858 100644
--- a/src/core/user.conf.in
+++ b/src/core/user.conf.in
@@ -24,9 +24,10 @@
#DefaultTimerAccuracySec=1min
#DefaultStandardOutput=inherit
#DefaultStandardError=inherit
-#DefaultTimeoutStartSec=90s
-#DefaultTimeoutStopSec=90s
+#DefaultTimeoutStartSec={{DEFAULT_USER_TIMEOUT_SEC}}s
+#DefaultTimeoutStopSec={{DEFAULT_USER_TIMEOUT_SEC}}s
#DefaultTimeoutAbortSec=
+#DefaultDeviceTimeoutSec={{DEFAULT_USER_TIMEOUT_SEC}}s
#DefaultRestartSec=100ms
#DefaultStartLimitIntervalSec=10s
#DefaultStartLimitBurst=5
diff --git a/src/rpm/systemd-update-helper.in b/src/rpm/systemd-update-helper.in
index b35d952fab..c623a5ea17 100755
--- a/src/rpm/systemd-update-helper.in
+++ b/src/rpm/systemd-update-helper.in
@@ -32,7 +32,7 @@ case "$command" in
users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p')
for user in $users; do
- SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT}} \
+ SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
systemctl --user -M "$user@" disable --now --no-warn "$@" &
done
wait
@@ -53,7 +53,7 @@ case "$command" in
users=$(systemctl list-units 'user@*' --legend=no | sed -n -r 's/.*user@([0-9]+).service.*/\1/p')
for user in $users; do
for unit in "$@"; do
- SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT}} \
+ SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
systemctl --user -M "$user@" set-property "$unit" Markers=+needs-restart &
done
done
@@ -89,7 +89,7 @@ case "$command" in
if [[ "$command" =~ reexec ]]; then
for user in $users; do
- SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT}} \
+ SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
systemctl --user -M "$user@" daemon-reexec &
done
wait
@@ -97,7 +97,7 @@ case "$command" in
if [[ "$command" =~ reload ]]; then
for user in $users; do
- SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT}} \
+ SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
systemctl --user -M "$user@" daemon-reload &
done
wait
@@ -105,7 +105,7 @@ case "$command" in
if [[ "$command" =~ restart ]]; then
for user in $users; do
- SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT}} \
+ SYSTEMD_BUS_TIMEOUT={{UPDATE_HELPER_USER_TIMEOUT_SEC}}s \
systemctl --user -M "$user@" reload-or-restart --marked &
done
wait