Commit 6cdf287
committed
fix(run-engine,webapp): close gaps found in adversarial review of the pause sweep
Restore the TTL registration when returning a run. Admission removes the run's
member from the TTL sorted set, so returning it to the pending queue without
re-adding left a run that could never expire: on the next admission the dequeue
script takes its already-expired branch, which deliberately leaves cleanup to
the TTL consumer, and that consumer no longer has an entry to find. The per-run
expireRun job is not a backstop because it is only armed for development
environments.
Take the pause sweep out of the rollback window. It ran inside the try that
compensates a failed pause by clearing the DB flag, but by then the Redis limit
was already 0, so a sweep failure left the environment with no concurrency and
no paused flag — dark, and unrecoverable without a manual pause/resume cycle.
For the billing-limit path it also aborted the remaining environments in the
org. The pause is durable and the sweep is idempotent, so it now runs after the
pause has been committed and a failure is logged rather than propagated. That
also stops the queue pause reporting failure for a pause that took effect.
Retry passes while runs remain unclaimed. Admission is not atomic with the push
onto the worker queue: the dequeue script claims the concurrency slot and a
separate round trip does the RPUSH. A run caught in that gap fails the claim and
would previously have been abandoned, then executed during the pause.
Claim from both the resolver-mapped and the raw worker queue key. The trigger-
time fast path pushes to the raw workerQueue on the message while the master
queue consumer pushes to the resolver-mapped one, so with a region override
active the two producers disagree and a single-key LREM missed fast-pathed runs.
Batch the sweep. It read every payload in one MGET and then made one sequential
round trip per run, on a request path, with no error isolation — one failure
abandoned the remaining runs.
Tests: cover the LREM claim directly by emptying the worker queue without
marking the run dequeued (the previous test was excluded by the candidate set
before ever reaching the script), the TTL round trip, and the concurrency key
running counter across a return.1 parent 90d8032 commit 6cdf287
7 files changed
Lines changed: 407 additions & 77 deletions
File tree
- apps/webapp
- app/v3
- services
- billingLimit
- test
- internal-packages/run-engine/src/run-queue
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
| 2 | + | |
2 | 3 | | |
3 | 4 | | |
4 | 5 | | |
| |||
46 | 47 | | |
47 | 48 | | |
48 | 49 | | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
Lines changed: 9 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
190 | 190 | | |
191 | 191 | | |
192 | 192 | | |
193 | | - | |
194 | 193 | | |
195 | 194 | | |
196 | 195 | | |
| |||
201 | 200 | | |
202 | 201 | | |
203 | 202 | | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
204 | 212 | | |
205 | 213 | | |
206 | 214 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
114 | 114 | | |
115 | 115 | | |
116 | 116 | | |
117 | | - | |
118 | 117 | | |
119 | 118 | | |
120 | 119 | | |
| |||
137 | 136 | | |
138 | 137 | | |
139 | 138 | | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
140 | 143 | | |
141 | 144 | | |
142 | 145 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
| 9 | + | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
66 | | - | |
67 | 66 | | |
68 | 67 | | |
69 | 68 | | |
| |||
78 | 77 | | |
79 | 78 | | |
80 | 79 | | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
81 | 84 | | |
82 | 85 | | |
83 | 86 | | |
| |||
Lines changed: 23 additions & 15 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
98 | | - | |
| 98 | + | |
99 | 99 | | |
100 | 100 | | |
101 | 101 | | |
102 | 102 | | |
103 | 103 | | |
104 | 104 | | |
105 | 105 | | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
106 | 112 | | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | | - | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
119 | 119 | | |
120 | | - | |
121 | | - | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
122 | 130 | | |
123 | 131 | | |
124 | 132 | | |
| |||
0 commit comments