chiark / gitweb /
core: remove system start timeout logic again
authorLennart Poettering <lennart@poettering.net>
Tue, 28 Oct 2014 00:42:13 +0000 (01:42 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 28 Oct 2014 00:42:13 +0000 (01:42 +0100)
The system start timeout as previously implemented would get confused by
long-running services that are included in the initial system startup
transaction for example by being cron-job-like long-running services
triggered immediately at boot. Such long-running jobs would be subject
to the default 15min timeout, esily triggering it.

Hence, remove this again. In a subsequent commit, introduce per-target
job timeouts instead, that allow us to control these timeouts more
finegrained.

NEWS
man/systemd-system.conf.xml
src/core/main.c
src/core/manager.c
src/core/manager.h
src/core/system.conf

diff --git a/NEWS b/NEWS
index e909046..f44db4a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -22,12 +22,6 @@ CHANGES WITH 217:
           /run/systemd/user directory that was already previously
           supported, but is under the control of the user.
 
-        * A timeout for the bootup of the whole system can now be
-          configured. The system can be configured to reboot or
-          poweroff if the basic system default target is not reached
-          before the timeout (new StartTimeoutSec=,
-          StartTimeoutAction=, StartTimeoutRebootArgument= options).
-
         * systemd-logind can be configured to also handle lid switch
           events even when the machine is docked or multiple displays
           are attached (HandleLidSwitchDocked= option).
index 1fad1db..284516d 100644 (file)
                         </varlistentry>
 
                         <varlistentry>
-                                <term><varname>StartTimeoutSec=</varname></term>
-                                <term><varname>StartTimeoutAction=</varname></term>
-                                <term><varname>StartTimeoutRebootArgument=</varname></term>
-
-                                <listitem><para>Configures an over-all
-                                system start-up timeout and controls
-                                what to do when the timeout is
-                                reached. <varname>StartTimeoutSec=</varname>
-                                specifies the timeout, and defaults to
-                                <literal>15min</literal>. <varname>StartTimeoutAction=</varname>
-                                configures the action to take when the
-                                system did not finish boot-up within
-                                the specified time. It takes the same
-                                values as the per-service
-                                <varname>StartLimitAction=</varname>
-                                setting, see
-                                <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
-                                for details. Defaults to
-                                <option>poweroff-force</option>. <varname>StartTimeoutRebootArgument=</varname>
-                                configures an optional reboot string
-                                to pass to the
-                                <citerefentry><refentrytitle>reboot</refentrytitle><manvolnum>2</manvolnum></citerefentry>
-                                system call.</para></listitem>
-                        </varlistentry>
-
-                        <varlistentry>
                                 <term><varname>DefaultTimerAccuracySec=</varname></term>
 
                                 <listitem><para>Sets the default
index 95597de..a0a6ae1 100644 (file)
@@ -116,9 +116,6 @@ static FILE* arg_serialization = NULL;
 static bool arg_default_cpu_accounting = false;
 static bool arg_default_blockio_accounting = false;
 static bool arg_default_memory_accounting = false;
-static usec_t arg_start_timeout_usec = DEFAULT_MANAGER_START_TIMEOUT_USEC;
-static FailureAction arg_start_timeout_action = FAILURE_ACTION_POWEROFF_FORCE;
-static char *arg_start_timeout_reboot_arg = NULL;
 
 static void nop_handler(int sig) {}
 
@@ -673,9 +670,6 @@ static int parse_config_file(void) {
                 { "Manager", "DefaultCPUAccounting",      config_parse_bool,             0, &arg_default_cpu_accounting            },
                 { "Manager", "DefaultBlockIOAccounting",  config_parse_bool,             0, &arg_default_blockio_accounting        },
                 { "Manager", "DefaultMemoryAccounting",   config_parse_bool,             0, &arg_default_memory_accounting         },
-                { "Manager", "StartTimeoutSec",           config_parse_sec,              0, &arg_start_timeout_usec                },
-                { "Manager", "StartTimeoutAction",        config_parse_failure_action,   0, &arg_start_timeout_action              },
-                { "Manager", "StartTimeoutRebootArgument",config_parse_string,           0, &arg_start_timeout_reboot_arg          },
                 {}
         };
 
@@ -1635,9 +1629,6 @@ int main(int argc, char *argv[]) {
         m->default_memory_accounting = arg_default_memory_accounting;
         m->runtime_watchdog = arg_runtime_watchdog;
         m->shutdown_watchdog = arg_shutdown_watchdog;
-        m->start_timeout_usec = arg_start_timeout_usec;
-        m->start_timeout_action = arg_start_timeout_action;
-        free_and_strdup(&m->start_timeout_reboot_arg, arg_start_timeout_reboot_arg);
 
         m->userspace_timestamp = userspace_timestamp;
         m->kernel_timestamp = kernel_timestamp;
@@ -1827,9 +1818,6 @@ finish:
         set_free(arg_syscall_archs);
         arg_syscall_archs = NULL;
 
-        free(arg_start_timeout_reboot_arg);
-        arg_start_timeout_reboot_arg = NULL;
-
         mac_selinux_finish();
 
         if (reexecute) {
index b790d18..7091789 100644 (file)
@@ -459,8 +459,6 @@ int manager_new(SystemdRunningAs running_as, bool test_run, Manager **_m) {
         m->running_as = running_as;
         m->exit_code = _MANAGER_EXIT_CODE_INVALID;
         m->default_timer_accuracy_usec = USEC_PER_MINUTE;
-        m->start_timeout_usec = DEFAULT_MANAGER_START_TIMEOUT_USEC;
-        m->start_timeout_action = FAILURE_ACTION_POWEROFF_FORCE;
 
         m->idle_pipe[0] = m->idle_pipe[1] = m->idle_pipe[2] = m->idle_pipe[3] = -1;
 
@@ -863,9 +861,6 @@ void manager_free(Manager *m) {
 
         manager_close_idle_pipe(m);
 
-        sd_event_source_unref(m->start_timeout_event_source);
-        free(m->start_timeout_reboot_arg);
-
         udev_unref(m->udev);
         sd_event_unref(m->event);
 
@@ -1013,20 +1008,6 @@ static int manager_distribute_fds(Manager *m, FDSet *fds) {
         return 0;
 }
 
-static int on_start_timeout(sd_event_source *s, usec_t usec, void *userdata) {
-        Manager *m = userdata;
-
-        assert(s);
-        assert(m);
-
-        m->start_timeout_event_source = sd_event_source_unref(m->start_timeout_event_source);
-
-        log_error("Startup timed out.");
-
-        failure_action(m, m->start_timeout_action, m->start_timeout_reboot_arg);
-        return 0;
-}
-
 int manager_startup(Manager *m, FILE *serialization, FDSet *fds) {
         int r, q;
 
@@ -1099,22 +1080,6 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds) {
                 m->send_reloading_done = true;
         }
 
-        /* Possibly set up a start timeout */
-        if (!dual_timestamp_is_set(&m->finish_timestamp)) {
-                m->start_timeout_event_source = sd_event_source_unref(m->start_timeout_event_source);
-
-                if (m->start_timeout_usec) {
-                        r = sd_event_add_time(
-                                        m->event,
-                                        &m->start_timeout_event_source,
-                                        CLOCK_MONOTONIC,
-                                        now(CLOCK_MONOTONIC) + m->start_timeout_usec, 0,
-                                        on_start_timeout, m);
-                        if (r < 0)
-                                log_error("Failed to add start timeout event: %s", strerror(-r));
-                }
-        }
-
         return r;
 }
 
@@ -2558,8 +2523,6 @@ void manager_check_finished(Manager *m) {
 
         dual_timestamp_get(&m->finish_timestamp);
 
-        m->start_timeout_event_source = sd_event_source_unref(m->start_timeout_event_source);
-
         if (m->running_as == SYSTEMD_SYSTEM && detect_container(NULL) <= 0) {
 
                 /* Note that m->kernel_usec.monotonic is always at 0,
index 8e3c146..6582167 100644 (file)
@@ -33,8 +33,6 @@
 /* Enforce upper limit how many names we allow */
 #define MANAGER_MAX_NAMES 131072 /* 128K */
 
-#define DEFAULT_MANAGER_START_TIMEOUT_USEC (15*USEC_PER_MINUTE)
-
 typedef struct Manager Manager;
 
 typedef enum ManagerState {
@@ -284,12 +282,6 @@ struct Manager {
 
         /* Used for processing polkit authorization responses */
         Hashmap *polkit_registry;
-
-        /* System wide startup timeouts */
-        usec_t start_timeout_usec;
-        sd_event_source *start_timeout_event_source;
-        FailureAction start_timeout_action;
-        char *start_timeout_reboot_arg;
 };
 
 int manager_new(SystemdRunningAs running_as, bool test_run, Manager **m);
index 5a723bb..65a35a0 100644 (file)
@@ -23,9 +23,6 @@
 #CapabilityBoundingSet=
 #SystemCallArchitectures=
 #TimerSlackNSec=
-#StartTimeoutSec=15min
-#StartTimeoutAction=poweroff-force
-#StartTimeoutRebootArgument=
 #DefaultTimerAccuracySec=1min
 #DefaultStandardOutput=journal
 #DefaultStandardError=inherit