Runway DLQ answers FAILED for a merge whose push already landed

Offen
#820 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 2 Tagen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
55/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
go

Rechercherichtung

Start with runway/controller/dlq/dlq.go and the merger’s existing branch-containment check used for idempotence; the issue does not name that code’s file. Add a unit test for a successful push followed by failed answer publishing until dead-lettering. Done means the DLQ answers MERGED when the request’s changes are already on the target branch and never reports that landed request as FAILED.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bug

Problem

Runway can tell SubmitQueue that a merge failed after the merge has landed on the target branch. landsignal applies the FAILED, and the batch and its requests are reported failed for a change that is on main.

Cause

Runway's merge DLQ (runway/controller/dlq/dlq.go) answers FAILED unconditionally; Runway is stateless and never checks whether the push happened. The merge controller pushes first and publishes its answer afterwards:

runway merge:  push lands on the target branch
runway merge:  publishing SUCCEEDED keeps failing; retries re-run the merge (idempotent: no new commits)
               → retries exhaust → runway-merge DLQ
runway DLQ:    publish FAILED under a distinct message ID, so it is not deduped
landsignal:    batch landing → failed

The git merger's redelivery idempotence covers the merge controller's retries. Nothing covers the DLQ's answer. No orchestrator-side fix (#819) can repair this.

Direction

Check the branch before answering: answer MERGED when the request's changes are already contained in the target ref, FAILED otherwise. The merger already computes this for idempotence. Note the residual hazard recorded in #819: once the DLQ has honestly answered FAILED, a later re-send of the same request must not merge.

Found by model checking spec/submitqueue/landoutcome/LandOutcome.tla.

Acceptance criteria

  • Runway's DLQ never answers FAILED for a request whose changes are on the target branch.
  • Unit test: the push succeeds, the answer publish fails until dead-lettered, and the DLQ answers MERGED.
Vorherrschende Sprache
Go
Sterne
247
Forks
16
Ø Merge
2 T. 1 Std.
Gemergte PRs (30 T.)
125

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus uber/submitqueue

Alle Issues in uber/submitqueue

Ähnliche Issues

Weitere Issues zu Go

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.