Skip to content

feat(stovepipe): associate build issues with repairs using entity CAS - #934

Merged
mnoah1 merged 1 commit into
mainfrom
mnoah1/stovepipe-fix-submission-state
Oct 26, 2026
Merged

mnoah1 merged 1 commit into
mainfrom
mnoah1/stovepipe-fix-submission-state

Conversation

@mnoah1

@mnoah1 mnoah1 commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

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. @ 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

Add an opaque FixID and optimistic-lock version to build observations. Reuse the per-build lookup from the issue-tracking handoff and persist mutable entity fields through the standard Update contract.

Test Plan: Run the storage and buildanalysis unit targets and TestMySQLStorage/BuildIssue integration tests. Run make lint check-tidy check-gazelle check-mocks.

Revert Plan: Revert this commit; the added columns can remain unused.
@mnoah1
mnoah1 force-pushed the mnoah1/stovepipe-fix-submission-state branch from 3ca80ca to 7eae092 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 75f70c9 Oct 26, 2026
19 checks passed
@mnoah1
mnoah1 deleted the mnoah1/stovepipe-fix-submission-state branch October 26, 2026 15:47
DivyanshGarg380 pushed a commit to DivyanshGarg380/submitqueue that referenced this pull request Oct 27, 2026
## 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. 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