Skip to content

A failed probe of the running front door spawns a second door beside it #370

Closed

Description

@Mearman

ensureFrontDoor probes the running door's provider listener over TLS with a 2 s timeout, and on any failed probe it distrusts that supervisor and spawns a replacement beside it. The old door is never stopped, so a transient failure (a slow answer while many sessions reattach at once, say) leaves two doors alive. The replacement finds the sticky ports held and moves every listener, the direct one included, which strands every provider launch routed through headroom (#367) and leaves sessions on the old door unreachable from the new address.

Seen twice on one day on a machine running a few dozen sessions: each new door was spawned beside a live one, and the second of them ten seconds after a launch started. The door log shows the sticky-port moves but not why the probe failed, so the rejection reason should be logged when a supervisor is distrusted.

A failed probe should be retried with backoff before it is believed. If the listener is still unreachable, the unauthenticated supervisor is stopped (it has already been distrusted) or the launch is refused with the reason; spawning beside a live door is the defect. The probe's timeout alone is not the fix, since the next slow start spawns a duplicate anyway.

Activity

  1. added theissue type on Oct 11, 2026
  2. Mearman commented on Oct 12, 2026

    @Mearman
    MemberAuthor

    Observed live on an install upgraded to the release carrying this change. The headroom daemon was replaced by the new generation, which started with the allowlist file option and an owner-only allowlist file naming the serving door's direct origin. A fresh provider launch then routed through the door and headroom and answered, while sessions from earlier generations were still registered. Probing the daemon directly: the door's direct origin as the upstream base URL passed the guard (the request reached the door and was refused there for lack of a token), and a foreign loopback origin was refused with a 400. headroom status and doctor report the daemon healthy with no allowlist drift; the one remaining doctor failure is an older door still serving pre-upgrade sessions, which drains as they end.

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

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions