Skip to content

feat(stovepipe): select and submit one repair per build - #935

Merged
mnoah1 merged 1 commit into
mnoah1/stovepipe-fix-submission-statefrom
mnoah1/stovepipe-fix-controller
Oct 26, 2026
Merged

mnoah1 merged 1 commit into
mnoah1/stovepipe-fix-submission-statefrom
mnoah1/stovepipe-fix-controller

Conversation

@mnoah1

@mnoah1 mnoah1 commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Why?

Submit a repair for a newly opened issue while initially limiting recorded repairs to one issue per build.

Once we get this working end to end for the first failure on each build, we can build out additional logic that can introduce multiple parallel fixes for different issues in the same build.

What?

Add a fix controller that scans the build's durable observations, skips builds with a recorded fix ID, and submits one currently open issue first seen in that build. Persist the executor's returned ID with entity CAS, including IDs returned alongside an error. Errors without an ID follow normal queue error handling; concurrent submissions or retries can produce duplicate outbound calls.

Test Plan

Run ./tool/bazel test //stovepipe/controller/fix:go_default_test. Tests cover pagination, existing repair associations, issue recovery, executor errors, and CAS conflicts. Run make lint check-tidy check-gazelle.

Revert Plan

Revert the queue-wiring layer first, then this commit.

Stack

  1. feat(stovepipe): associate build issues with repairs using entity CAS #934
  2. @ feat(stovepipe): select and submit one repair per build #935
  3. feat(stovepipe): publish build repair requests to the fix queue #936

Scan build observations for existing fix IDs, submit an eligible open issue, and associate the returned ID through entity CAS. Return submission errors without an ID for normal queue handling; document caller-owned retry policy.

Test Plan: Run ./tool/bazel test //stovepipe/controller/fix:go_default_test and make lint check-tidy check-gazelle.

Revert Plan: Revert this commit.
@mnoah1
mnoah1 force-pushed the mnoah1/stovepipe-fix-controller branch from 86a421d to fddd6b2 Compare October 26, 2026 15:21
@mnoah1
mnoah1 enabled stacked auto-merge October 26, 2026 15:21
@mnoah1
mnoah1 added this pull request to the merge queue Oct 26, 2026
Merged via the queue into main with commit a67b694 Oct 26, 2026
19 checks passed
@mnoah1
mnoah1 deleted the mnoah1/stovepipe-fix-controller branch October 26, 2026 15:47
DivyanshGarg380 pushed a commit to DivyanshGarg380/submitqueue that referenced this pull request Oct 27, 2026
…uber#934)

## Why?
Keep the repair association on the durable build observation so it
survives issue recovery.

## What?
Add an opaque `BuildIssue.FixID`, a version, and the standard entity
`Update` CAS operation. Reuse the existing per-build lookup. MySQL
stores `fix_id VARCHAR(255) NOT NULL DEFAULT ''`; add this column and
`version INT NOT NULL DEFAULT 0` before deploying the updated readers
and writers.

## Test Plan
Run the storage unit target and the `TestMySQLStorage/BuildIssue`
integration tests. The integration tests cover omitted-column defaults,
repair persistence after recovery, and concurrent CAS updates. Run `make
lint check-tidy check-gazelle check-mocks`.

## Revert Plan
Revert this commit after its dependents. The added database columns can
remain unused.

## Issue Links
None — this is the storage layer of the planned repair workflow.

## Stack
1. @ uber#934
1. uber#935
1. uber#936
DivyanshGarg380 pushed a commit to DivyanshGarg380/submitqueue that referenced this pull request Oct 27, 2026
…#936)

## Why?
Let issue tracking hand a build to the fix controller after persisting
its issue records.

## What?
Add the `FixRequest` protobuf and topic, a publisher carrying queue and
build IDs, and the fix controller's standard `Process` delivery adapter.
Issue tracking can call the publisher after its writes succeed. The
adapter validates the message and delegates to the controller introduced
by the previous PR.

## Test Plan
Run `./tool/bazel test //stovepipe/controller/fix:go_default_test
//stovepipe/core/fixrequest:go_default_test
//stovepipe/core/messagequeue:go_default_test`. Run `make lint
check-tidy check-gazelle check-mocks`.

## Revert Plan
Revert this commit and remove any host wiring that calls the publisher.

## Issue Links
None — this is the message-wiring layer of the planned repair workflow.

## Stack
1. uber#934
1. uber#935
1. @ uber#936
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants