Palash Debnath
b66b09ceaa
fix(dub): deleting a dub no longer resurrects it ( #1252 , #1253 ) ( #1270 )
...
* fix(dub): deleting a dub no longer resurrects it (#1252 , #1253 )
Split out of #1264 . The other six fixes there are independent error-message
changes that needed no corrections; this one is a concurrency change that
needed five rounds, each finding something real in work that looked finished
and tested:
1. review: merge and save were split, so a delete between them had the row
written straight back;
2. review: dict membership cannot express 'withdrawn' — an absent key means
'not written yet' for a new job and 'deleted' for an established one;
3. fail-before check: the race test was not testing the race (it asserted
WHAT happened, never WHEN, and 'save after delete' IS the resurrection);
4. review: the gate sat in two ingest helpers while eight direct save_job
call sites bypassed it;
5. direct check of the reported scenario: the tombstone covered in-flight
ingests only, so a delete during a RENDER — the common case — still
resurrected the job.
Riding a release on that record is not a good trade, so it ships on its own.
What it does now: the withdrawal is recorded when a job is DELETED, held in a
bounded LRU (there is no moment at which a delete stops mattering), and checked
inside save_job so every caller inherits it. Re-importing an id is the only
thing that revives it. The lock is re-entrant because the atomic helpers call
save_job while holding it.
Carries #1252 's message half too: str(KeyError) is the repr of the key, which
is how the user's own job id became the entire error text.
* fix(dub): expire withdrawal markers by age, not by count
Greptile P1 — the sixth real finding on this fix, and reachable by ordinary
use. DELETE /dub/history selects every row with no limit, so a user with a
large history clearing it mid-render pushed that very job's marker out of a
count-bounded LRU, and the render then wrote it straight back.
Age is the honest policy: what matters is how long ago the delete happened, not
how many others followed it. Six hours outlives any realistic render or
transcribe. The count cap stays only as a memory backstop, raised far above any
real history and documented as such.
Verified fail-before: restoring count-based eviction fails both new tests.
* docs(changelog): the dub delete-resurrection fix (#1252 , #1253 )
2026-07-26 14:25:32 -07:00
..
2026-07-23 03:03:32 +05:30
2026-06-11 22:00:30 +05:30
2026-07-20 13:18:51 +05:30
2026-07-18 05:52:33 -07:00
2026-06-23 13:27:43 +05:30
2026-07-16 19:59:19 +05:30
2026-07-17 15:20:54 +05:30
2026-07-20 09:47:41 +05:30
2026-07-09 17:49:25 +05:30
2026-07-20 11:51:40 +05:30
2026-07-20 11:51:40 +05:30
2026-06-22 05:33:00 +05:30
2026-07-12 11:28:28 +05:30
2026-06-16 22:50:39 +05:30
2026-07-09 03:53:46 +05:30
2026-05-31 13:27:30 +05:30
2026-07-17 15:20:54 +05:30
2026-06-26 00:04:54 +05:30
2026-06-16 13:26:26 +05:30
2026-07-17 15:20:54 +05:30
2026-07-20 09:47:41 +05:30
2026-07-12 02:40:45 +05:30
2026-07-02 04:48:51 +05:30
2026-06-03 14:10:08 +05:30
2026-05-31 05:43:33 +05:30
2026-07-21 01:54:13 +05:30
2026-07-21 01:54:13 +05:30
2026-06-13 14:02:10 +05:30
2026-07-20 22:44:56 +05:30
2026-07-16 23:08:36 +05:30
2026-07-05 00:40:35 +05:30
2026-07-04 22:28:37 +05:30
2026-06-12 03:57:20 +05:30
2026-05-18 22:00:59 +05:30
2026-07-12 14:38:14 +05:30
2026-07-17 15:20:54 +05:30
2026-07-17 15:20:54 +05:30
2026-07-02 23:52:17 +05:30
2026-07-20 10:02:30 +05:30
2026-06-22 03:18:15 +05:30
2026-07-05 00:40:35 +05:30
2026-07-13 14:36:06 +05:30
2026-07-13 14:36:06 +05:30
2026-07-19 04:29:33 +05:30
2026-06-11 13:09:18 +05:30
2026-06-11 13:58:21 +05:30
2026-07-02 04:49:50 +05:30
2026-07-02 04:49:50 +05:30
2026-07-26 12:39:29 -07:00
2026-07-02 23:52:17 +05:30
2026-07-19 04:29:33 +05:30
2026-06-20 09:00:47 +05:30
2026-06-11 12:14:45 +05:30
2026-06-13 23:03:22 +05:30
2026-07-01 17:59:49 +05:30
2026-06-11 12:15:28 +05:30
2026-06-11 12:15:28 +05:30
2026-05-20 14:08:55 +05:30
2026-06-03 10:37:37 +05:30
2026-06-25 02:43:53 +05:30
2026-06-20 00:02:27 +05:30
2026-07-14 02:11:43 +05:30
2026-07-16 23:08:36 +05:30
2026-07-04 22:28:37 +05:30
2026-06-22 23:36:32 +05:30
2026-06-26 15:16:45 +05:30
2026-06-23 11:53:44 +05:30
2026-07-23 03:53:30 +05:30
2026-06-22 05:09:51 +05:30
2026-07-16 23:08:36 +05:30
2026-07-13 21:04:06 +05:30
2026-04-22 18:46:01 +05:30
2026-05-29 19:07:38 +05:30
2026-07-26 14:25:32 -07:00
2026-07-16 23:08:36 +05:30
2026-07-13 12:55:32 +05:30
2026-07-11 23:10:35 +05:30
2026-07-20 13:18:51 +05:30
2026-07-05 03:05:40 +05:30
2026-07-05 01:21:23 +05:30
2026-06-12 12:50:39 +05:30
2026-05-31 03:31:03 +05:30
2026-07-26 12:39:29 -07:00
2026-05-29 17:24:25 +05:30
2026-07-20 09:18:13 +05:30
2026-07-04 19:22:12 +05:30
2026-07-10 18:26:07 +05:30
2026-07-16 23:08:36 +05:30
2026-06-20 14:45:58 +05:30
2026-07-10 18:40:16 +05:30
2026-05-20 13:40:16 +05:30
2026-07-11 23:44:21 +05:30
2026-07-26 12:39:29 -07:00
2026-07-12 15:05:11 +05:30
2026-07-02 23:22:49 +05:30
2026-07-11 02:21:21 +05:30
2026-06-11 12:15:28 +05:30
2026-07-11 23:10:35 +05:30
2026-07-08 04:29:21 +05:30
2026-05-29 09:12:23 +05:30
2026-06-13 20:15:15 +05:30
2026-06-13 20:15:15 +05:30
2026-07-16 01:45:23 +05:30
2026-07-13 19:09:02 +05:30
2026-06-12 13:03:00 +05:30
2026-07-16 22:59:34 +05:30
2026-07-17 15:20:54 +05:30
2026-06-14 11:18:37 +05:30
2026-07-09 18:43:33 +05:30
2026-07-12 12:10:47 +05:30
2026-07-08 05:18:00 +05:30
2026-07-08 04:29:01 +05:30
2026-06-26 15:04:31 +05:30
2026-07-10 18:54:14 +05:30
2026-07-03 00:08:30 +05:30
2026-07-20 14:35:21 +05:30
2026-06-22 04:42:16 +05:30
2026-06-14 02:07:54 +05:30
2026-06-21 04:51:45 +05:30
2026-05-29 09:27:43 +05:30
2026-07-17 15:20:54 +05:30
2026-07-12 11:05:00 +05:30
2026-07-12 11:05:00 +05:30
2026-07-02 23:40:15 +05:30
2026-07-21 13:32:13 +05:30
2026-04-18 22:37:20 +05:30
2026-04-21 18:32:25 +05:30
2026-07-19 04:29:33 +05:30
2026-07-02 19:06:14 +05:30
2026-06-16 14:36:59 +05:30
2026-07-05 19:47:54 +05:30
2026-07-05 19:47:54 +05:30
2026-07-13 16:13:41 +05:30
2026-07-02 19:06:14 +05:30
2026-07-10 04:35:17 +05:30
2026-07-12 17:15:10 +05:30
2026-07-20 10:02:30 +05:30
2026-07-21 01:54:13 +05:30
2026-06-20 09:15:40 +05:30
2026-07-16 21:10:25 +05:30
2026-06-13 16:31:13 +05:30
2026-06-14 18:26:17 +05:30
2026-06-14 13:10:01 +05:30
2026-06-14 23:30:11 +05:30
2026-07-10 17:40:15 +05:30
2026-07-13 23:42:36 +05:30
2026-07-20 22:57:31 +05:30
2026-06-14 16:03:28 +05:30
2026-07-23 03:28:22 +05:30
2026-07-08 02:26:19 +05:30
2026-07-17 15:20:54 +05:30
2026-07-16 01:45:00 +05:30
2026-07-26 02:02:23 -07:00
2026-06-23 12:49:39 +05:30
2026-07-26 12:39:29 -07:00
2026-07-11 12:22:49 +05:30
2026-07-12 16:11:42 +05:30
2026-06-20 08:50:42 +05:30
2026-06-22 05:21:19 +05:30
2026-06-14 01:43:21 +05:30
2026-06-13 23:03:22 +05:30
2026-07-08 02:41:47 +05:30
2026-07-11 23:44:21 +05:30
2026-07-17 15:20:54 +05:30
2026-06-22 04:42:16 +05:30
2026-07-17 15:20:54 +05:30
2026-07-17 15:20:54 +05:30
2026-07-19 04:29:33 +05:30
2026-06-20 00:02:27 +05:30
2026-07-08 04:26:12 +05:30
2026-05-30 11:45:54 +05:30
2026-05-30 11:45:54 +05:30
2026-05-30 12:52:51 +05:30
2026-07-20 11:51:40 +05:30
2026-07-20 15:58:34 +05:30
2026-07-26 12:39:29 -07:00
2026-07-01 22:06:56 +05:30
2026-07-12 02:17:07 +05:30
2026-05-31 13:27:30 +05:30
2026-07-23 00:28:42 +05:30
2026-06-22 05:07:07 +05:30
2026-06-23 16:57:48 +05:30
2026-07-05 21:15:14 +05:30
2026-07-19 04:29:33 +05:30
2026-06-04 08:01:29 +05:30
2026-06-14 17:55:17 +05:30
2026-06-13 02:21:43 +05:30
2026-04-21 18:32:25 +05:30
2026-05-29 23:13:32 +05:30
2026-06-01 11:46:32 +05:30
2026-07-23 03:22:13 +05:30
2026-07-12 01:13:35 +05:30
2026-06-11 22:10:30 +05:30
2026-07-08 04:34:14 +05:30
2026-06-20 14:45:58 +05:30
2026-07-08 04:34:14 +05:30
2026-07-03 18:07:44 +05:30
2026-06-25 03:16:25 +05:30
2026-05-30 17:11:44 +05:30
2026-06-03 08:23:58 +05:30
2026-06-11 23:06:49 +05:30
2026-07-14 00:48:23 +05:30
2026-07-16 23:08:36 +05:30
2026-06-22 22:39:07 +05:30
2026-07-23 04:24:20 +05:30
2026-07-03 17:47:45 +05:30
2026-07-02 23:22:49 +05:30
2026-07-01 19:26:38 +05:30
2026-06-12 12:50:35 +05:30
2026-07-04 22:53:47 +05:30
2026-06-24 12:35:57 +05:30
2026-06-11 23:04:00 +05:30
2026-07-02 23:52:17 +05:30
2026-07-11 23:44:21 +05:30
2026-07-17 15:20:54 +05:30
2026-07-02 23:52:45 +05:30
2026-07-17 15:20:54 +05:30
2026-07-09 02:10:06 +05:30
2026-07-19 04:29:33 +05:30
2026-06-12 14:06:00 +05:30
2026-07-16 23:08:36 +05:30
2026-07-05 20:00:08 +05:30
2026-05-31 03:38:54 +05:30
2026-05-30 20:54:49 +05:30
2026-07-09 17:10:23 +05:30
2026-07-17 15:20:54 +05:30
2026-07-20 13:18:51 +05:30
2026-06-13 16:56:55 +05:30
2026-07-12 15:39:07 +05:30
2026-05-30 23:09:43 +05:30
2026-05-30 21:15:09 +05:30
2026-04-21 18:32:25 +05:30
2026-06-01 08:12:55 +05:30
2026-07-23 04:24:54 +05:30
2026-07-21 01:54:13 +05:30
2026-05-30 12:52:51 +05:30
2026-07-11 00:05:04 +05:30
2026-07-13 23:42:36 +05:30
2026-07-02 17:57:56 +05:30
2026-06-11 13:09:18 +05:30
2026-07-09 02:19:07 +05:30
2026-07-17 15:20:54 +05:30
2026-07-13 16:13:41 +05:30
2026-06-20 09:11:20 +05:30
2026-07-01 11:16:13 +05:30
2026-07-13 16:13:41 +05:30
2026-07-23 04:29:17 +05:30
2026-07-21 03:24:25 +05:30
2026-07-12 18:33:36 +05:30
2026-07-26 12:39:29 -07:00
2026-07-13 23:19:58 +05:30
2026-05-29 16:52:50 +05:30
2026-07-20 09:47:41 +05:30
2026-06-22 05:21:19 +05:30
2026-07-11 00:21:54 +05:30
2026-07-10 15:26:40 +05:30
2026-07-16 23:08:36 +05:30
2026-07-02 15:16:34 +05:30
2026-07-26 12:39:29 -07:00
2026-07-16 01:45:23 +05:30
2026-07-26 12:39:29 -07:00