Skip to content

Commit 09cb1e9

Browse files
pablomhclaude
authored andcommitted
Remove After=foreman.target to fix systemd ordering cycles
After=foreman.target was added in 805217d to ensure systemctl stop foreman.target blocks until all constituent services fully stop, preventing a rapid stop+start race. However, every service is also WantedBy=foreman.target, making After=foreman.target inherently circular: foreman.target cannot finish starting until its Wants are satisfied, but those services cannot start until foreman.target has started. This caused both start and stop ordering cycles, which systemd resolved by dropping jobs — leading to unclean postgresql shutdowns, stale postmaster.pid files, and the very race condition the original fix was trying to prevent. Remove After=foreman.target from all services. Stop ordering is preserved through inter-service After= relationships: all application services are After=redis.service postgresql.service (reversed: redis/postgresql stop after all application services). PartOf=foreman.target ensures services stop when foreman.target stops, and systemctl stop foreman.target waits for the full PartOf-propagated transaction to complete. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 5efa47a commit 09cb1e9

File tree

7 files changed

+6
-11
lines changed

7 files changed

+6
-11
lines changed

src/roles/candlepin/tasks/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797
[Unit]
9898
PartOf=foreman.target
9999
Wants=redis.service postgresql.service
100-
After=foreman.target redis.service postgresql.service
100+
After=redis.service postgresql.service
101101
[Service]
102102
TimeoutStartSec=300
103103
healthcheck: curl --fail --insecure https://localhost:23443/candlepin/status

src/roles/foreman/tasks/main.yaml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@
127127
[Unit]
128128
PartOf=foreman.target
129129
Wants=redis.service postgresql.service candlepin.service
130-
After=foreman.target redis.service postgresql.service candlepin.service
130+
After=redis.service postgresql.service candlepin.service
131131
notify: Restart foreman
132132

133133
- name: Deploy Dynflow Container
@@ -162,7 +162,7 @@
162162
[Unit]
163163
PartOf=foreman.target
164164
Wants=redis.service postgresql.service
165-
After=foreman.target redis.service postgresql.service
165+
After=redis.service postgresql.service
166166
- |
167167
[Service]
168168
Restart=on-failure
@@ -207,7 +207,6 @@
207207
- |
208208
[Unit]
209209
PartOf=foreman.target
210-
After=foreman.target
211210
StartLimitIntervalSec=0
212211
- |
213212
[Service]

src/roles/foreman/templates/foreman-recurring@.timer.j2

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
[Unit]
22
Description=Timer for Foreman recurring: {{ item.rake }}
33
PartOf=foreman.target
4-
After=foreman.target
54

65
[Timer]
76
Unit=foreman-recurring@{{ item.instance }}.service

src/roles/foreman_proxy/tasks/main.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
WantedBy=default.target foreman.target
3535
[Unit]
3636
PartOf=foreman.target
37-
After=foreman.target
3837
notify: Restart Foreman Proxy
3938

4039
- name: Create foreman-proxy.container.d folder

src/roles/postgresql/tasks/main.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
WantedBy=default.target foreman.target
4444
[Unit]
4545
PartOf=foreman.target
46-
After=foreman.target
4746
4847
- name: Configure SSL certificates
4948
when:

src/roles/pulp/tasks/main.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@
119119
[Unit]
120120
PartOf=foreman.target
121121
Wants=redis.service postgresql.service
122-
After=foreman.target redis.service postgresql.service
122+
After=redis.service postgresql.service
123123
[Service]
124124
Restart=always
125125
RestartSec=3
@@ -150,7 +150,7 @@
150150
[Unit]
151151
PartOf=foreman.target
152152
Wants=redis.service postgresql.service
153-
After=foreman.target redis.service postgresql.service
153+
After=redis.service postgresql.service
154154
[Service]
155155
Restart=always
156156
RestartSec=3
@@ -181,7 +181,7 @@
181181
[Unit]
182182
PartOf=pulp-worker.target foreman.target
183183
Wants=redis.service postgresql.service
184-
After=foreman.target redis.service postgresql.service
184+
After=redis.service postgresql.service
185185
[Service]
186186
Restart=always
187187
RestartSec=3

src/roles/redis/tasks/main.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
WantedBy=default.target foreman.target
3131
[Unit]
3232
PartOf=foreman.target
33-
After=foreman.target
3433
3534
- name: Run daemon reload
3635
ansible.builtin.systemd:

0 commit comments

Comments
 (0)