Files
aptly/api
André Roth 2a5992c74e fix(publish): reload published inside task for source-management endpoints
Affected endpoints: apiPublishAddSource, apiPublishSetSources,
apiPublishUpdateSource, apiPublishRemoveSource, apiPublishDropChanges.

All five handlers shared the same flawed pattern: they loaded the
published repo from the DB and mutated it (ObtainRevision / DropRevision)
outside the task closure, before the task lock was acquired.  Each task
closure then just wrote back the already-mutated, pre-lock object.

Because the task queue serialises tasks that share a resource key, two
concurrent requests appear safe — but each task closure holds a stale
copy of the object captured before the lock was taken:

  Request A loads published: revision = {}
  Request B loads published: revision = {}   <- same DB state
  A mutates: revision = {main: snap1}
  B mutates: revision = {contrib: snap2}
  Task A runs: saves {main: snap1}           OK
  Task B runs: saves {contrib: snap2}        <- clobbers A's change

Fix: perform only a shallow ByStoragePrefixDistribution outside the task
(for the early 404 response, resource key, and task name).  Inside the
task closure a dedicated taskCollectionFactory is created, the published
repo is re-read fresh from the DB (after the lock is acquired), and
LoadComplete + all mutations + Update are executed against that
authoritative copy.
2026-05-23 13:54:50 +02:00
..
2025-08-20 19:41:26 +02:00
2025-04-26 13:29:50 +02:00
2024-10-01 01:07:09 +02:00
2026-01-11 14:26:56 +01:00
2026-01-11 14:26:56 +01:00
2026-04-26 17:44:25 +02:00
2026-05-04 11:35:55 +02:00
2024-12-11 10:40:44 +01:00
2023-02-20 13:42:50 +01:00
2026-04-26 18:37:36 +02:00
2026-05-04 11:35:55 +02:00
2024-12-11 11:19:46 +01:00
2026-05-04 11:35:55 +02:00
2026-04-26 23:56:05 +02:00
2024-12-11 10:40:44 +01:00
2024-12-11 10:40:44 +01:00
2024-12-11 11:19:46 +01:00