Skip to content

Push: a failed push-retired.json write keeps a retired subscription registered #2013

Closed

Description

@devswha

Found while answering a CodeRabbit thread on #1995.

In server/push.ts deliver(), a push answered 404/410 writes push-retired.json first and only then removes the subscription:

writeJsonPrivate(retiredPath, ...);          // main: server/push.ts:354
const next = without((endpoint) => endpoint === subscription.endpoint);
if (next) persist(next);

If that write fails (a full disk, a read-only state dir), it throws, the subscription stays registered, and the next push goes to the dead endpoint again. push-retired.json is telemetry (its own comment says so), so its write should not decide whether a retired subscription is removed. Expected: the subscription is removed and the mark kept in memory even when the file cannot be written.

This is on main as well; #1995 keeps the same order (it only made the delivery-record write and the retired list's expiry rewrite non-throwing).

Activity

  1. added a commit that references this issue on Oct 28, 2026
    c739ad0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions