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

No graceful connection draining on shutdown in Rust (and TS): in-flight requests dropped on SIGTERM

Aperta
#28 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
68/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
go, rust, typescript
Ambito
api, backend

Direzione di ricerca

Inizia dai loop accept di Rust e dai task serve_connection in corso, quindi confronta il comportamento di riferimento in go/main.go:92-97. Verifica il comportamento di TypeScript server.close() come indicato. Il lavoro è completato quando l’arresto impedisce le nuove connessioni, esaurisce le richieste attive per un massimo di 30 secondi e termina al completamento o alla scadenza del termine.

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

Descrizione

Priority: P2 Type: Enhancement

Summary

On SIGTERM/SIGINT, the Go implementation drains in-flight requests via http.Server.Shutdown with a 30s timeout (go/main.go:92-97). The Rust implementation breaks its accept loops and exits main, which drops the tokio runtime — and with it any in-flight serve_connection tasks, aborting responses mid-flight.

Found during the code review of #27 (which rewrote the Rust shutdown path but preserved this pre-existing behavior — it is not a regression from that PR; the old single-listener code behaved the same way).

Affected implementation(s)

  • Rust
  • Go (reference behavior — already drains)
  • TypeScript (worth auditing while at it: confirm server.close() semantics wait for in-flight requests)

Expected behavior

On shutdown signal:

  1. Stop accepting new connections (already done).
  2. Allow in-flight requests to complete, up to a 30s deadline (matching Go).
  3. Exit after drain or deadline, whichever comes first.

Suggested fix (Rust)

Track connections in a tokio::task::JoinSet (or a counter + notify), and on shutdown call hyper's Connection::graceful_shutdown on active connections, then await the set with tokio::time::timeout(Duration::from_secs(30), ...).

Context

Split out from the review follow-ups on PR #27. Related: #25.

Lingua principale
Rust
Stelle
2
Fork
0
Merge medio
9h 35m
PR unite (30g)
6

Guida per i contributori

Apri la guida per i contributori

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 ChainSafe/docker-socket-policy

Tutte le issue di ChainSafe/docker-socket-policy

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.