From 6ef512c0bb7aeb2000588d7d05e23b4681da8657 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 15 Nov 2023 17:23:27 +0100 Subject: [PATCH] core: serialize and deserialize unit start ratelimits The logic is taken from dump ratelimit: if the config changes, we discard the counters. This allows the user apply new limits and "start from scratch" in that case. This actually makes StartLimitIntervalSec=infinity (or with a large interval) work as expected, because the counter is maintained even if daemon-reload operations are interleaved. --- src/core/unit-serialize.c | 6 ++++++ test/units/testsuite-04.SYSTEMD_JOURNAL_COMPRESS.sh | 4 ++++ test/units/testsuite-67.sh | 2 ++ 3 files changed, 12 insertions(+) diff --git a/src/core/unit-serialize.c b/src/core/unit-serialize.c index af3e1c20899..bef3654525d 100644 --- a/src/core/unit-serialize.c +++ b/src/core/unit-serialize.c @@ -140,6 +140,8 @@ int unit_serialize_state(Unit *u, FILE *f, FDSet *fds, bool switching_root) { (void) serialize_dual_timestamp(f, "condition-timestamp", &u->condition_timestamp); (void) serialize_dual_timestamp(f, "assert-timestamp", &u->assert_timestamp); + (void) serialize_ratelimit(f, "start-ratelimit", &u->start_ratelimit); + if (dual_timestamp_is_set(&u->condition_timestamp)) (void) serialize_bool(f, "condition-result", u->condition_result); @@ -343,6 +345,10 @@ int unit_deserialize_state(Unit *u, FILE *f, FDSet *fds) { (void) deserialize_dual_timestamp(v, &u->assert_timestamp); continue; + } else if (streq(l, "start-ratelimit")) { + deserialize_ratelimit(&u->start_ratelimit, l, v); + continue; + } else if (MATCH_DESERIALIZE("condition-result", l, v, parse_boolean, u->condition_result)) continue; diff --git a/test/units/testsuite-04.SYSTEMD_JOURNAL_COMPRESS.sh b/test/units/testsuite-04.SYSTEMD_JOURNAL_COMPRESS.sh index 8fdf1b132e0..96d096d9adf 100755 --- a/test/units/testsuite-04.SYSTEMD_JOURNAL_COMPRESS.sh +++ b/test/units/testsuite-04.SYSTEMD_JOURNAL_COMPRESS.sh @@ -7,6 +7,9 @@ set -o pipefail mkdir /run/systemd/system/systemd-journald.service.d MACHINE_ID="$(/run/systemd/system/systemd-journald.service.d/compress.conf <