Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

RelayRoom keeps a revoked Burrow forwarding when its sweep's row read fails

Ouverte
#910 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
5/5
Temps estimé
Plus d'une semaine
Accessibilité débutants
42/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Active
Stack technique
typescript
Domaine
backend, security

Piste de recherche

Start with RelayRoom.#sweep and RelayRoom.alarm in hosted/server/relay-room.ts, then read the timing constants in hosted/server/relay-room-contract.ts and the stalled row-read test in hosted/server/tests/relay-room.test.ts. Resolve the fail-open versus retry policy, update the code and test, and align the Relay boundary FAIL IF in docs/specs/security-hosted.md with the chosen behavior.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Code: RelayRoom.#sweep in hosted/server/relay-room.ts; the alarm in RelayRoom.alarm re-arms RELAY_ROOM_SWEEP_MS (one hour, hosted/server/relay-room-contract.ts) out whatever the sweep did.

Failure path: a Burrow is removed or de-entitled by any path that does not reach closeBurrow (an entitlement change, or a removal whose closeBurrow RPC failed, which the DELETE route logs and answers 204 anyway). The next alarm calls #sweep. #rows throws (database error, or RELAY_ROW_READ_TIMEOUT_MS passes), the catch logs "could not sweep" and returns, and alarm() arms the next sweep an hour later. The socket keeps forwarding authenticated frames past the sweep it should have died at. If the database stays unreachable, it keeps forwarding through every later sweep too.

This breaks the docs/specs/security-hosted.md -> "Relay boundary" FAIL IF: "a removed or de-entitled Burrow's [socket] outlives the next sweep, at most RELAY_ROOM_SWEEP_MS while any Burrow socket is held". hosted/server/tests/relay-room.test.ts ("a stalled row read … leaves the sweep for later, the object's sockets open") pins the current behavior. Keeping sockets open on a failed read was a deliberate choice: #rows says a stalled read must not reset "the object and every socket it holds".

Suggested fix: decide the policy first, then change the code, test, and FAIL IF together. Options:

  1. Fail closed. On a failed sweep read, retire every held Burrow with a retryable close code. Each one reconnects through the upgrade, which rechecks its row under blockConcurrencyWhile and is refused while the database is down. This meets the FAIL IF exactly, at the cost of dropping every session during a database blip.
  2. Retry soon. On failure, arm the alarm at now + RELAY_ROW_READ_TIMEOUT_MS (or about a minute), not an hour, and fail closed only after N consecutive failures or once RELAY_ROOM_SWEEP_MS has passed since the last good sweep. Then reword the FAIL IF to "within RELAY_ROOM_SWEEP_MS of the last successful sweep".

Option 2 keeps the bound at one sweep interval, or a small multiple of it, without resetting sockets on a single slow query.

Found while trimming #904, which had parked this as a spec "Known gap".

🤖 Generated with Claude Code

Langage dominant
TypeScript
Étoiles
5
Forks
1
Merge moyen
12 h 2 min
PR mergées (30 j)
387

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de diffplug/dormouse

Toutes les issues de diffplug/dormouse

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.