penpot/frontend
alonso.torres 4b668acf96 🐛 Retry saves that a busy backend refused or rolled back
A save waits for the lock that another save holds on the same file. A
slow save, such as one on a large file, blocks the other saves to that
file. The waiting request also holds the user's only save slot on the
backend, so the user's saves to other files wait behind it too.

Those saves ended in answers that stopped autosave for good:

- a 429 after 60s, when no save slot freed up in time;
- a 504 written by the backend after 300s, with :statement-timeout,
  when Postgres cancelled the wait for the lock.

In both cases the backend never applied the save, so sending it again
is safe. transient-error? now treats them as temporary, and the save
takes the retry path. A statement timeout takes 300s per attempt, so
the slow failure limit still bounds it. GET requests and error reports
are unchanged: the check lives in the save pipeline, not in
retryable-types.

Both answers were reproduced in the devenv by holding the file lock
from a separate database session.
2026-10-16 15:24:22 +02:00
..
2026-05-29 11:24:58 +02:00
2026-09-22 10:22:31 +02:00
2026-04-07 21:35:00 +02:00
2026-09-17 11:25:36 +02:00
2026-09-22 10:22:31 +02:00
2026-09-22 10:22:31 +02:00
2026-09-22 10:22:31 +02:00
2026-09-22 10:22:31 +02:00