Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Retry Playground archive lock generation handoffs

Aperta
#2,464 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
52/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
typescript

Direzione di ricerca

Inizia da tryAcquireCacheLock() e traccia i percorsi di apertura e accesso del sidecar del lease, concentrandoti sul punto in cui vengono classificati i cambiamenti di generazione. Esegui prima la regressione di archive-cache in processi separati, quindi l’aggregato smoke completo; il lavoro è completo quando gli handoff legittimi vengono ritentati, mentre gli stati non sicuri del filesystem continuano a essere rifiutati e le directory vuote abbandonate rimangono recuperabili.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Problem

The authoritative smoke aggregate for #2463 exposed a cross-process handoff that the lock protocol detected correctly but classified incorrectly. tryAcquireCacheLock() can create the shared lock directory and then be descheduled before opening it. After the bounded empty-directory grace expires, another process may legitimately reclaim and replace that uninitialized generation. The original creator then observes a generation change between lstat() and open().

Observed failure: smoke aggregate run 33561166359

LeaseSidecarUnsafeError: Playground cache lease sidecar changed while opening

The protocol already retried generation changes detected while accessing an opened sidecar, but identified that outcome by matching one error-message phrase. A generation change detected while opening therefore escaped as a terminal unsafe-sidecar failure.

Desired outcome

Represent legitimate sidecar generation changes as one explicit typed handoff outcome and retry them consistently during lock acquisition and inspection. Preserve the directory protocol because its non-empty removal interlock prevents a stale cleaner from deleting a replacement owner. Keep symlinks, non-directories, and other unsafe filesystem states fail-closed.

Acceptance criteria

  • Generation changes while opening or accessing a lease sidecar use one typed handoff classification.
  • A creator that loses its uninitialized directory generation retries instead of terminating.
  • Unsafe filesystem type and symlink replacements remain rejected or conservatively protected.
  • Empty abandoned directories remain reclaimable without extending timing allowances.
  • The separate-process archive-cache regression and full smoke aggregate pass.

Rejected design

An initialized file published by hard link was evaluated and rejected: portable Node filesystems do not provide atomic conditional unlink by inode, so stale cleanup could unlink a replacement owner and permit concurrent lock holders.

AI assistance

GPT-5.6 Sol via OpenCode analyzed the failed aggregate, evaluated and rejected an unsafe hard-link design during review, and drafted the typed handoff repair under Chris Huber's direction.

Lingua principale
TypeScript
Stelle
17
Fork
4
Merge medio
1h 39m
PR unite (30g)
45

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Automattic/wp-codebox

Tutte le issue di Automattic/wp-codebox

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.