Land and landsignal DLQs fail a `landing` batch that Runway goes on to merge
I maintainer di solito rispondono entro 2 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- go
- Ambito
- distributed-systems
Direzione di ricerca
Start with submitqueue/orchestrator/controller/dlq/dlq.go and the interleaving described in the issue; then read spec/submitqueue/landoutcome/LandOutcome.tla and compare the design options. Add tests that interleave a DLQ with a late SUCCEEDED and confirm they fail before the fix. Done means the chosen design updates the model and meets all four acceptance criteria without allowing an incorrect terminal outcome.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Problem
A batch is reported failed, and its requests error, even though Runway merged the change onto the target branch.
Cause
failBatch (submitqueue/orchestrator/controller/dlq/dlq.go) moves any non-terminal batch to failed, landing included. A landing batch has already handed its outcome to Runway, so the reconciler cannot know whether the merge happened. Two DLQs reach failBatch while the batch is landing:
submitqueue-landDLQ. The Runway publish island's last step, so a lost ack, or an ambiguous publish error after the row was written, leaves Runway holding the MergeRequest. If later attempts then fail on a storage error, the message dead-letters.landsignalDLQ.landsignalholds Runway'sSUCCEEDED, but the batch compare-and-swap keeps failing on a storage fault. The DLQ payload contains the verdict, and the reconciler discards it.
When Runway's answer arrives later, landsignal sees a terminal batch, re-fans out, and acks. Nothing corrects the outcome.
Interleaving (TLC's shortest counterexample)
speculate: batch speculating → landing, publish to submitqueue-land
land: publish MergeRequest to runway-merge, then the attempt fails; retries exhaust → land DLQ
runway: merges, publishes SUCCEEDED
land DLQ: failBatch: landing → failed, fan out requests → error
landsignal: batch already terminal → ack, outcome unchanged
Why the obvious fixes are not enough
Found by model checking spec/submitqueue/landoutcome/LandOutcome.tla, which checks 24 design combinations:
- Skip
landingin the DLQ and wait for Runway. This trades the wrong answer for a batch that never finishes, when Runway's answer is itself the message that dead-lettered. - Re-send the MergeRequest from the DLQ. This is unsound against today's Runway, for two reasons:
- A stale
FAILEDcan win. Runway's first attempt dead-letters without pushing, so its DLQ honestly answersFAILED. The re-send then merges on a second attempt, and the earlierFAILEDis applied. - The replay is swallowed. A replayed answer reuses the request ID as its message ID and is deduped by the queue (the #352 class).
- A stale
- The only design that passes every property has four parts: the DLQ re-sends; Runway's DLQ checks the branch; Runway records its verdict per request ID; and answers do not dedup on the request ID alone. That gives Runway state, so cheaper designs are worth modelling first. Two candidates: the
landsignalDLQ applies the verdict it holds, andlandrecords "dispatched" before it publishes.
Acceptance criteria
- A dead letter on
submitqueue-landorlandsignalnever moves alandingbatch tofailedwhile the change can still land or has landed. - Every
landingbatch still reaches a terminal state. - Unit tests that interleave the DLQ with a late
SUCCEEDED, confirmed to fail before the fix. -
LandOutcome.tlaupdated to the chosen design.
Related: #818 (the same symptom through the speculate path).
- Lingua principale
- Go
- Stelle
- 247
- Fork
- 16
- Merge medio
- 2g 1h
- PR unite (30g)
- 125
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di uber/submitqueue
-
[Bug] Land returns codes.Unknown instead of InvalidArgument for an unrecognized strategyForse già presa @DivyanshGarg380 l’ha presa 14 giorni fa. Apertabug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 22/100
uber/submitqueue#996 ·
I maintainer di solito rispondono entro 2 giorni
-
Batch-scoped DLQ reconciler fails requests that another live batch ownsForse già presa @burgulvedant l’ha presa 14 giorni fa. Apertabug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
uber/submitqueue#826 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Cancel misses a batch mid-promotion, letting a cancelled request reach speculationForse di nuovo libera @burgulvedant l’ha presa 14 giorni fa e non c’è nessuna pull request aperta. Apertabug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
uber/submitqueue#825 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 52/100
uber/submitqueue#824 · 2 commenti ·
I maintainer di solito rispondono entro 2 giorni
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
uber/submitqueue#820 ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di uber/submitqueue
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
kubescape/node-agent#1099 ·
I maintainer di solito rispondono entro 1 giorno
-
import-export
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
genealogix/glx#1498 ·
I maintainer di solito rispondono entro 2 giorni
-
Docs: 2 broken linksApertaBug pulumi/pulumi-terraform-bridge R2 S2
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
pulumi/pulumi-terraform-bridge#3713 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
ossf/pvtr-github-repo-scanner#539 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
goreleaser/goreleaser#7316 ·
I maintainer di solito rispondono entro 1 giorno