Zbigniew Jędrzejewski-Szmek 930e1b
From 9e694cd271f7bce2ad7a77de03b66d493ca5dd61 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 930e1b
From: Lukas Nykryn <lnykryn@redhat.com>
Zbigniew Jędrzejewski-Szmek 930e1b
Date: Fri, 8 Nov 2013 16:01:22 +0100
Zbigniew Jędrzejewski-Szmek 930e1b
Subject: [PATCH] manager: configurable StartLimit default values
Zbigniew Jędrzejewski-Szmek 930e1b
Zbigniew Jędrzejewski-Szmek 930e1b
https://bugzilla.redhat.com/show_bug.cgi?id=821723
Zbigniew Jędrzejewski-Szmek 930e1b
---
Zbigniew Jędrzejewski-Szmek 930e1b
 man/systemd-system.conf.xml | 13 +++++++++++++
Zbigniew Jędrzejewski-Szmek 930e1b
 man/systemd.service.xml     |  9 ++++++---
Zbigniew Jędrzejewski-Szmek 930e1b
 src/core/main.c             |  6 ++++++
Zbigniew Jędrzejewski-Szmek 930e1b
 src/core/manager.h          |  3 +++
Zbigniew Jędrzejewski-Szmek 930e1b
 src/core/service.c          |  4 +++-
Zbigniew Jędrzejewski-Szmek 930e1b
 src/core/system.conf        |  2 ++
Zbigniew Jędrzejewski-Szmek 930e1b
 src/core/user.conf          |  2 ++
Zbigniew Jędrzejewski-Szmek 930e1b
 src/shared/def.h            |  3 +++
Zbigniew Jędrzejewski-Szmek 930e1b
 8 files changed, 38 insertions(+), 4 deletions(-)
Zbigniew Jędrzejewski-Szmek 930e1b
Zbigniew Jędrzejewski-Szmek 930e1b
diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml
Zbigniew Jędrzejewski-Szmek 930e1b
index c1f2648..9a1a99f 100644
Zbigniew Jędrzejewski-Szmek 930e1b
--- a/man/systemd-system.conf.xml
Zbigniew Jędrzejewski-Szmek 930e1b
+++ b/man/systemd-system.conf.xml
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -115,6 +115,19 @@
Zbigniew Jędrzejewski-Szmek 930e1b
                                 <varname>TimeoutSec=</varname> value.
Zbigniew Jędrzejewski-Szmek 930e1b
                                 </para></listitem>
Zbigniew Jędrzejewski-Szmek 930e1b
                         </varlistentry>
Zbigniew Jędrzejewski-Szmek 930e1b
+                        <varlistentry>
Zbigniew Jędrzejewski-Szmek 930e1b
+                                <term><varname>DefaultStartLimitInterval=</varname></term>
Zbigniew Jędrzejewski-Szmek 930e1b
+                                <term><varname>DefaultStartLimitBurst=</varname></term>
Zbigniew Jędrzejewski-Szmek 930e1b
+
Zbigniew Jędrzejewski-Szmek 930e1b
+                                <listitem><para>Configure the default start rate
Zbigniew Jędrzejewski-Szmek 930e1b
+                                limiting, as configured per-service by
Zbigniew Jędrzejewski-Szmek 930e1b
+                                <varname>StartLimitInterval=</varname> and
Zbigniew Jędrzejewski-Szmek 930e1b
+                                <varname>StartLimitBurst=</varname>. See
Zbigniew Jędrzejewski-Szmek 930e1b
+                                <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
Zbigniew Jędrzejewski-Szmek 930e1b
+                                for details on the per-service
Zbigniew Jędrzejewski-Szmek 930e1b
+                                settings).
Zbigniew Jędrzejewski-Szmek 930e1b
+                                </para></listitem>
Zbigniew Jędrzejewski-Szmek 930e1b
+                        </varlistentry>
Zbigniew Jędrzejewski-Szmek 930e1b
 
Zbigniew Jędrzejewski-Szmek 930e1b
                         <varlistentry>
Zbigniew Jędrzejewski-Szmek 930e1b
                                 <term><varname>CPUAffinity=</varname></term>
Zbigniew Jędrzejewski-Szmek 930e1b
diff --git a/man/systemd.service.xml b/man/systemd.service.xml
Zbigniew Jędrzejewski-Szmek 930e1b
index df04048..3f31c11 100644
Zbigniew Jędrzejewski-Szmek 930e1b
--- a/man/systemd.service.xml
Zbigniew Jędrzejewski-Szmek 930e1b
+++ b/man/systemd.service.xml
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -863,12 +863,15 @@
Zbigniew Jędrzejewski-Szmek 930e1b
                                 these two options, this rate limiting
Zbigniew Jędrzejewski-Szmek 930e1b
                                 may be modified. Use
Zbigniew Jędrzejewski-Szmek 930e1b
                                 <varname>StartLimitInterval=</varname>
Zbigniew Jędrzejewski-Szmek 930e1b
-                                to configure the checking interval
Zbigniew Jędrzejewski-Szmek 930e1b
-                                (defaults to 10s, set to 0 to disable
Zbigniew Jędrzejewski-Szmek 930e1b
+                                to configure the checking interval (defaults to
Zbigniew Jędrzejewski-Szmek 930e1b
+                                <varname>DefaultStartLimitInterval=</varname> in
Zbigniew Jędrzejewski-Szmek 930e1b
+                                manager configuration file, set to 0 to disable
Zbigniew Jędrzejewski-Szmek 930e1b
                                 any kind of rate limiting). Use
Zbigniew Jędrzejewski-Szmek 930e1b
                                 <varname>StartLimitBurst=</varname> to
Zbigniew Jędrzejewski-Szmek 930e1b
                                 configure how many starts per interval
Zbigniew Jędrzejewski-Szmek 930e1b
-                                are allowed (defaults to 5). These
Zbigniew Jędrzejewski-Szmek 930e1b
+                                are allowed (defaults to
Zbigniew Jędrzejewski-Szmek 930e1b
+                                <varname>DefaultStartLimitBurst=</varname> in
Zbigniew Jędrzejewski-Szmek 930e1b
+                                manager configuration file). These
Zbigniew Jędrzejewski-Szmek 930e1b
                                 configuration options are particularly
Zbigniew Jędrzejewski-Szmek 930e1b
                                 useful in conjunction with
Zbigniew Jędrzejewski-Szmek 930e1b
                                 <varname>Restart=</varname>, however
Zbigniew Jędrzejewski-Szmek 930e1b
diff --git a/src/core/main.c b/src/core/main.c
Zbigniew Jędrzejewski-Szmek 930e1b
index 937994c..00fd394 100644
Zbigniew Jędrzejewski-Szmek 930e1b
--- a/src/core/main.c
Zbigniew Jędrzejewski-Szmek 930e1b
+++ b/src/core/main.c
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -93,6 +93,8 @@ static ExecOutput arg_default_std_error = EXEC_OUTPUT_INHERIT;
Zbigniew Jędrzejewski-Szmek 930e1b
 static usec_t arg_default_restart_usec = DEFAULT_RESTART_USEC;
Zbigniew Jędrzejewski-Szmek 930e1b
 static usec_t arg_default_timeout_start_usec = DEFAULT_TIMEOUT_USEC;
Zbigniew Jędrzejewski-Szmek 930e1b
 static usec_t arg_default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC;
Zbigniew Jędrzejewski-Szmek 930e1b
+static usec_t arg_default_start_limit_interval = DEFAULT_START_LIMIT_INTERVAL;
Zbigniew Jędrzejewski-Szmek 930e1b
+static unsigned arg_default_start_limit_burst = DEFAULT_START_LIMIT_BURST;
Zbigniew Jędrzejewski-Szmek 930e1b
 static usec_t arg_runtime_watchdog = 0;
Zbigniew Jędrzejewski-Szmek 930e1b
 static usec_t arg_shutdown_watchdog = 10 * USEC_PER_MINUTE;
Zbigniew Jędrzejewski-Szmek 930e1b
 static char **arg_default_environment = NULL;
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -642,6 +644,8 @@ static int parse_config_file(void) {
Zbigniew Jędrzejewski-Szmek 930e1b
                 { "Manager", "DefaultTimeoutStartSec", config_parse_sec,         0, &arg_default_timeout_start_usec },
Zbigniew Jędrzejewski-Szmek 930e1b
                 { "Manager", "DefaultTimeoutStopSec", config_parse_sec,          0, &arg_default_timeout_stop_usec  },
Zbigniew Jędrzejewski-Szmek 930e1b
                 { "Manager", "DefaultRestartSec",     config_parse_sec,          0, &arg_default_restart_usec  },
Zbigniew Jędrzejewski-Szmek 930e1b
+                { "Manager", "DefaultStartLimitInterval", config_parse_sec,      0, &arg_default_start_limit_interval },
Zbigniew Jędrzejewski-Szmek 930e1b
+                { "Manager", "DefaultStartLimitBurst", config_parse_unsigned,    0, &arg_default_start_limit_burst },
Zbigniew Jędrzejewski-Szmek 930e1b
                 { "Manager", "JoinControllers",       config_parse_join_controllers, 0, &arg_join_controllers },
Zbigniew Jędrzejewski-Szmek 930e1b
                 { "Manager", "RuntimeWatchdogSec",    config_parse_sec,          0, &arg_runtime_watchdog    },
Zbigniew Jędrzejewski-Szmek 930e1b
                 { "Manager", "ShutdownWatchdogSec",   config_parse_sec,          0, &arg_shutdown_watchdog   },
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -1551,6 +1555,8 @@ int main(int argc, char *argv[]) {
Zbigniew Jędrzejewski-Szmek 930e1b
         m->default_restart_usec = arg_default_restart_usec;
Zbigniew Jędrzejewski-Szmek 930e1b
         m->default_timeout_start_usec = arg_default_timeout_start_usec;
Zbigniew Jędrzejewski-Szmek 930e1b
         m->default_timeout_stop_usec = arg_default_timeout_stop_usec;
Zbigniew Jędrzejewski-Szmek 930e1b
+        m->default_start_limit_interval = arg_default_start_limit_interval;
Zbigniew Jędrzejewski-Szmek 930e1b
+        m->default_start_limit_burst = arg_default_start_limit_burst;
Zbigniew Jędrzejewski-Szmek 930e1b
         m->runtime_watchdog = arg_runtime_watchdog;
Zbigniew Jędrzejewski-Szmek 930e1b
         m->shutdown_watchdog = arg_shutdown_watchdog;
Zbigniew Jędrzejewski-Szmek 930e1b
         m->userspace_timestamp = userspace_timestamp;
Zbigniew Jędrzejewski-Szmek 930e1b
diff --git a/src/core/manager.h b/src/core/manager.h
Zbigniew Jędrzejewski-Szmek 930e1b
index e74c609..ee42c5e 100644
Zbigniew Jędrzejewski-Szmek 930e1b
--- a/src/core/manager.h
Zbigniew Jędrzejewski-Szmek 930e1b
+++ b/src/core/manager.h
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -233,6 +233,9 @@ struct Manager {
Zbigniew Jędrzejewski-Szmek 930e1b
         usec_t default_restart_usec, default_timeout_start_usec,
Zbigniew Jędrzejewski-Szmek 930e1b
                 default_timeout_stop_usec;
Zbigniew Jędrzejewski-Szmek 930e1b
 
Zbigniew Jędrzejewski-Szmek 930e1b
+        usec_t default_start_limit_interval;
Zbigniew Jędrzejewski-Szmek 930e1b
+        unsigned default_start_limit_burst;
Zbigniew Jędrzejewski-Szmek 930e1b
+
Zbigniew Jędrzejewski-Szmek 930e1b
         struct rlimit *rlimit[RLIMIT_NLIMITS];
Zbigniew Jędrzejewski-Szmek 930e1b
 
Zbigniew Jędrzejewski-Szmek 930e1b
         /* non-zero if we are reloading or reexecuting, */
Zbigniew Jędrzejewski-Szmek 930e1b
diff --git a/src/core/service.c b/src/core/service.c
Zbigniew Jędrzejewski-Szmek 930e1b
index e81aa1f..5662180 100644
Zbigniew Jędrzejewski-Szmek 930e1b
--- a/src/core/service.c
Zbigniew Jędrzejewski-Szmek 930e1b
+++ b/src/core/service.c
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -143,7 +143,9 @@ static void service_init(Unit *u) {
Zbigniew Jędrzejewski-Szmek 930e1b
         kill_context_init(&s->kill_context);
Zbigniew Jędrzejewski-Szmek 930e1b
         cgroup_context_init(&s->cgroup_context);
Zbigniew Jędrzejewski-Szmek 930e1b
 
Zbigniew Jędrzejewski-Szmek 930e1b
-        RATELIMIT_INIT(s->start_limit, 10*USEC_PER_SEC, 5);
Zbigniew Jędrzejewski-Szmek 930e1b
+        RATELIMIT_INIT(s->start_limit,
Zbigniew Jędrzejewski-Szmek 930e1b
+                       u->manager->default_start_limit_interval,
Zbigniew Jędrzejewski-Szmek 930e1b
+                       u->manager->default_start_limit_burst);
Zbigniew Jędrzejewski-Szmek 930e1b
 
Zbigniew Jędrzejewski-Szmek 930e1b
         s->control_command_id = _SERVICE_EXEC_COMMAND_INVALID;
Zbigniew Jędrzejewski-Szmek 930e1b
 }
Zbigniew Jędrzejewski-Szmek 930e1b
diff --git a/src/core/system.conf b/src/core/system.conf
Zbigniew Jędrzejewski-Szmek 930e1b
index 3c6cc03..38bbca5 100644
Zbigniew Jędrzejewski-Szmek 930e1b
--- a/src/core/system.conf
Zbigniew Jędrzejewski-Szmek 930e1b
+++ b/src/core/system.conf
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -27,6 +27,8 @@
Zbigniew Jędrzejewski-Szmek 930e1b
 #DefaultTimeoutStartSec=90s
Zbigniew Jędrzejewski-Szmek 930e1b
 #DefaultTimeoutStopSec=90s
Zbigniew Jędrzejewski-Szmek 930e1b
 #DefaultRestartSec=100ms
Zbigniew Jędrzejewski-Szmek 930e1b
+#DefaultStartLimitInterval=10s
Zbigniew Jędrzejewski-Szmek 930e1b
+#DefaultStartLimitBurst=5
Zbigniew Jędrzejewski-Szmek 930e1b
 #DefaultEnvironment=
Zbigniew Jędrzejewski-Szmek 930e1b
 #DefaultLimitCPU=
Zbigniew Jędrzejewski-Szmek 930e1b
 #DefaultLimitFSIZE=
Zbigniew Jędrzejewski-Szmek 930e1b
diff --git a/src/core/user.conf b/src/core/user.conf
Zbigniew Jędrzejewski-Szmek 930e1b
index b030701..923ca66 100644
Zbigniew Jędrzejewski-Szmek 930e1b
--- a/src/core/user.conf
Zbigniew Jędrzejewski-Szmek 930e1b
+++ b/src/core/user.conf
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -17,3 +17,5 @@
Zbigniew Jędrzejewski-Szmek 930e1b
 #DefaultTimeoutStartSec=90s
Zbigniew Jędrzejewski-Szmek 930e1b
 #DefaultTimeoutStopSec=90s
Zbigniew Jędrzejewski-Szmek 930e1b
 #DefaultRestartSec=100ms
Zbigniew Jędrzejewski-Szmek 930e1b
+#DefaultStartLimitInterval=10s
Zbigniew Jędrzejewski-Szmek 930e1b
+#DefaultStartLimitBurst=5
Zbigniew Jędrzejewski-Szmek 930e1b
diff --git a/src/shared/def.h b/src/shared/def.h
Zbigniew Jędrzejewski-Szmek 930e1b
index edd0bcf..e4ef735 100644
Zbigniew Jędrzejewski-Szmek 930e1b
--- a/src/shared/def.h
Zbigniew Jędrzejewski-Szmek 930e1b
+++ b/src/shared/def.h
Zbigniew Jędrzejewski-Szmek 930e1b
@@ -27,6 +27,9 @@
Zbigniew Jędrzejewski-Szmek 930e1b
 #define DEFAULT_RESTART_USEC (100*USEC_PER_MSEC)
Zbigniew Jędrzejewski-Szmek 930e1b
 #define DEFAULT_CONFIRM_USEC (30*USEC_PER_SEC)
Zbigniew Jędrzejewski-Szmek 930e1b
 
Zbigniew Jędrzejewski-Szmek 930e1b
+#define DEFAULT_START_LIMIT_INTERVAL (10*USEC_PER_SEC)
Zbigniew Jędrzejewski-Szmek 930e1b
+#define DEFAULT_START_LIMIT_BURST 5
Zbigniew Jędrzejewski-Szmek 930e1b
+
Zbigniew Jędrzejewski-Szmek 930e1b
 #define DEFAULT_EXIT_USEC (5*USEC_PER_MINUTE)
Zbigniew Jędrzejewski-Szmek 930e1b
 
Zbigniew Jędrzejewski-Szmek 930e1b
 #define SYSTEMD_CGROUP_CONTROLLER "name=systemd"