Runway DLQ answers FAILED for a merge whose push already landed

Aberta
#820 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 2 dias

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
55/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
go

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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.
Linguagem predominante
Go
Estrelas
247
Forks
16
Merge médio
2d 1h
PRs com merge (30d)
125

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de uber/submitqueue

Todas as issues de uber/submitqueue

Issues semelhantes

Mais issues de Go

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.