Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Version v0.11.8 #97

Merged
merged 2 commits into from
May 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
# 0.11.8

* Added systemd skip automatic restart when a JOB_STOP job is pending patch. ([#97])
* Rebuilt to get the latest AL2 updates.

[#97]: https://github.com/bottlerocket-os/bottlerocket-admin-container/pull/97

# 0.11.7

* Rebuilt to get the latest AL2 updates.
Expand Down
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ RUN last_patch=$(awk '/^Patch[0-9]+/ { line = NR } END { print line }' systemd.s
echo 'Patch9501: 9501-cgroup-util-accept-cgroup-hierarchy-base-as-option.patch'; \
echo 'Patch9502: 9502-core-move-initialization-of-.slice-and-init.scope-in.patch'; \
echo 'Patch9503: 9503-core-drop-.slice-from-shipped-units.patch'; \
echo 'Patch9504: 9504-core-skip-restart-when-a-JOB_STOP-job-is-pending.patch'; \
echo ; \
} >>systemd.mod.spec; \
tail -n+$((last_patch + 1)) systemd.spec >>systemd.mod.spec; \
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v0.11.7
v0.11.8
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
From c972880640ee19e89ce9265d8eae1b3aae190332 Mon Sep 17 00:00:00 2001
From: Franck Bui <[email protected]>
Date: Fri, 18 Feb 2022 10:06:24 +0100
Subject: [PATCH] core: really skip automatic restart when a JOB_STOP job is
pending

It's not clear why we rescheduled a service auto restart while a stop job for
the unit was pending. The comment claims that the unit shouldn't be restarted
but the code did reschedule an auto restart meanwhile.

In practice that was rarely an issue because the service waited for the next
auto restart to be rescheduled, letting the queued stop job to be proceed and
service_stop() to be called preventing the next restart to complete.

However when RestartSec=0, the timer expired right away making PID1 to
reschedule the unit again, making the timer expired right away... and so
on. This busy loop prevented PID1 to handle any queued jobs (and hence giving
no chance to the start rate limiting to trigger), which made the busy loop last
forever.

This patch breaks this loop by skipping the reschedule of the unit auto restart
and hence not depending on the value of u->restart_usec anymore.

Fixes: #13667

[kssessio: backport to v219]
Signed-off-by: Kyle Sessions <[email protected]>
---
src/core/service.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/src/core/service.c b/src/core/service.c
index 15e29be..fa2af05 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -1622,12 +1622,7 @@ static void service_enter_restart(Service *s) {

if (UNIT(s)->job && UNIT(s)->job->type == JOB_STOP) {
/* Don't restart things if we are going down anyway */
- log_unit_info(UNIT(s)->id, "Stop job pending for unit, delaying automatic restart.");
-
- r = service_arm_timer(s, s->restart_usec);
- if (r < 0)
- goto fail;
-
+ log_unit_info(UNIT(s)->id, "Stop job pending for unit, skipping automatic restart.");
return;
}

--
2.40.1