Skip to content

feat(submitqueue): request projection cleanup - get requests list by timestamp and then get request_summary rows - #800

Merged
behinddwalls merged 1 commit into
mainfrom
mnoah1/submitqueue-list-read-cutover
Oct 8, 2026
Merged

behinddwalls merged 1 commit into
mainfrom
mnoah1/submitqueue-list-read-cutover

Conversation

@mnoah1

@mnoah1 mnoah1 commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Builds on #799 to serve List from immutable request_receipt keys and authoritative request_summary rows, instead of the duplicated queue-summary projection.

Changes

  • Scan receipt keys, then point-read summaries for visible results; keep bounds, string-ID ordering, and page-token format unchanged.
  • Use the existing RequestSummary response type and wire mapper.
  • Fail the page on missing, mismatched, or hidden summaries using the existing InternalConsistencyError.
  • Add controller and gateway integration coverage. Keep legacy projection writes for rollback.

Rollout

Deploy only after #799 reaches all writers. No backfill or legacy-read fallback: requests without receipt keys are absent from List. Duplicate-write and old-table removal remain follow-up work.

Test Plan

After CD rollout, confirm new Land requests appear in List with the same summary fields as ID lookup, check continuation pages, and monitor page latency.

Revert Plan

Revert the read cutover to restore the old List path. Legacy projection writes remain active; this PR makes no schema changes.

API Changes

No RPC/proto changes. The Go ListResult now contains RequestSummary values.

Issue Links

None — no separate ticket supplied for this stacked follow-up.

Stack

  1. feat(submitqueue): request projection cleanup - write to timestamp-based lookup table #799
  2. @ feat(submitqueue): request projection cleanup - get requests list by timestamp and then get request_summary rows #800
  3. refactor(submitqueue): request projection cleanup - remove queue-based request projection table and all usage #801

@mnoah1
mnoah1 added this pull request to stack #803 October 7, 2026 17:35
@mnoah1 mnoah1 changed the title feat(submitqueue): read List from receipt lookup feat(submitqueue): request projection cleanup - transition to reading from timestamp store + request summary Oct 7, 2026
@mnoah1 mnoah1 changed the title feat(submitqueue): request projection cleanup - transition to reading from timestamp store + request summary feat(submitqueue): request projection cleanup - read from timestamp-based lookup table + request_summary Oct 7, 2026
@mnoah1 mnoah1 changed the title feat(submitqueue): request projection cleanup - read from timestamp-based lookup table + request_summary feat(submitqueue): request projection cleanup - get requests from timestamp-based lookup table and then get request_summary rows Oct 7, 2026
@mnoah1 mnoah1 changed the title feat(submitqueue): request projection cleanup - get requests from timestamp-based lookup table and then get request_summary rows feat(submitqueue): request projection cleanup - get requests list by timestamp and then get request_summary rows Oct 7, 2026
@mnoah1
mnoah1 marked this pull request as ready for review October 7, 2026 17:58
@mnoah1
mnoah1 requested review from a team, behinddwalls and sbalabanov as code owners October 7, 2026 17:58
mnoah1 added a commit that referenced this pull request Oct 7, 2026
Summary:
Intent:
- Complete the receipt-based List migration from #800: keep one authoritative request summary and immutable lookup keys.

Changes:
- Remove queue-summary writes, the duplicate entity/store, and obsolete tests and mocks.
- Idempotently ensure URI mappings before the receipt key, including partial-write retries and stale logs.
- Update rollout docs; retain the legacy SQL definition for deployment compatibility.

Test Plan:
- Deploy after #800 is stable. Rollback must retain the receipt-based reader once duplicate writes stop.
- Retire the table in a separate internal schema change after old binaries and the rollback window are gone. UQL DEPRECATED can drop immediately in Vitess; no physical retirement is enabled here.

---

<sub>Generated by the 🪄 [pr-create](https://sg.uberinternal.com/code.uber.internal/uber-code/devexp-agent-marketplace/-/blob/claude-code/plugins/dev/uber-dev/skills/pr-create/SKILL.md) skill in devexp-agent-marketplace</sub>
@mnoah1
mnoah1 force-pushed the mnoah1/submitqueue-list-read-cutover branch from ec3187f to 8f30300 Compare October 7, 2026 17:58
mnoah1 added a commit that referenced this pull request Oct 7, 2026
Summary:
Intent:
- Complete the receipt-based List migration from #800: keep one authoritative request summary and immutable lookup keys.

Changes:
- Remove queue-summary writes, the duplicate entity/store, and obsolete tests and mocks.
- Idempotently ensure URI mappings before the receipt key, including partial-write retries and stale logs.
- Update rollout docs; retain the legacy SQL definition for deployment compatibility.

Test Plan:
- Deploy after #800 is stable. Rollback must retain the receipt-based reader once duplicate writes stop.
- Retire the table in a separate internal schema change after old binaries and the rollback window are gone. UQL DEPRECATED can drop immediately in Vitess; no physical retirement is enabled here.

---

<sub>Generated by the 🪄 [pr-create](https://sg.uberinternal.com/code.uber.internal/uber-code/devexp-agent-marketplace/-/blob/claude-code/plugins/dev/uber-dev/skills/pr-create/SKILL.md) skill in devexp-agent-marketplace</sub>
@mnoah1
mnoah1 force-pushed the mnoah1/submitqueue-list-read-cutover branch from 8f30300 to a91ce72 Compare October 7, 2026 18:05
Base automatically changed from mnoah1/submitqueue-list-receipt to main October 7, 2026 19:46
Summary:
Builds on #799 to serve List from immutable request_receipt keys and authoritative request_summary rows, instead of the duplicated queue-summary projection.

- Scan receipt keys, then point-read summaries for visible results; keep bounds, string-ID ordering, and page-token format unchanged.
- Use the existing RequestSummary response type and wire mapper.
- Fail the page on missing, mismatched, or hidden summaries using the existing InternalConsistencyError.
- Add controller and gateway integration coverage; update the RFC. Keep legacy projection writes for rollback.

Deploy only after #799 reaches all writers. No backfill or legacy-read fallback: requests without receipt keys are absent from List. Duplicate-write and old-table removal remain follow-up work.

None — no tracking issue was supplied.

Test Plan:
After CD rollout, confirm new Land requests appear in List with the same summary fields as ID lookup, check continuation pages, and monitor page latency.

Revert Plan:
Revert the read cutover to restore the old List path. Legacy projection writes remain active; this PR makes no schema changes.

API Changes:
No RPC/proto changes. The Go ListResult now contains RequestSummary values.
mnoah1 added a commit that referenced this pull request Oct 7, 2026
Summary:
Intent:
- Complete the receipt-based List migration from #800: keep one authoritative request summary and immutable lookup keys.

Changes:
- Remove queue-summary writes, the duplicate entity/store, and obsolete tests and mocks.
- Idempotently ensure URI mappings before the receipt key, including partial-write retries and stale logs.
- Update rollout docs; retain the legacy SQL definition for deployment compatibility.

Test Plan:
- Deploy after #800 is stable. Rollback must retain the receipt-based reader once duplicate writes stop.
- Retire the table in a separate internal schema change after old binaries and the rollback window are gone. UQL DEPRECATED can drop immediately in Vitess; no physical retirement is enabled here.

---

<sub>Generated by the 🪄 [pr-create](https://sg.uberinternal.com/code.uber.internal/uber-code/devexp-agent-marketplace/-/blob/claude-code/plugins/dev/uber-dev/skills/pr-create/SKILL.md) skill in devexp-agent-marketplace</sub>
@mnoah1
mnoah1 force-pushed the mnoah1/submitqueue-list-read-cutover branch from a91ce72 to 981c311 Compare October 7, 2026 19:46
Tmwakalasya pushed a commit to Tmwakalasya/submitqueue that referenced this pull request Oct 7, 2026
…sed lookup table (uber#799)

## Summary
First step toward keeping one full request projection in
request_summary, with a small time-based lookup instead of duplicating
lifecycle data for List. All required response data and receipt time are
already captured.

### Changes

- Add request_receipt with only (queue, received_at_ms, request_id), its
immutable storage contract, and gateway wiring.
- Ensure receipt keys after public projection writes, including
unchanged/stale-log retries. Keep accepting receipts hidden and surface
partial-write failures for existing retry handling.
- Keep List reads and the existing queue-summary projection writes in
place for a safe cutover.
- Add storage, materializer, and integration coverage.

### Migration plan

#### Rollout from this PR (CD)

CD deploys the additive request_receipt table and gateway
receipt-store/materializer changes, with the table available before
receipt writes begin. Public request projections populate receipt keys
alongside the existing queue-summary projection. List reads remain
unchanged.

#### Next

1. Next PR will switch List to scan receipt keys and point-read
request_summary. Preserve the API, time bounds, ordering, and page
tokens; check page latency and retain old projection writes during the
rollback window.
2. Once cutover is stable, land last PR in the stack: stop duplicate
projection writes, remove RequestQueueSummary and its store/mapper, and
retire request_summary_by_queue after the rollback window.


## Test Plan
After rollout, confirm newly public requests have matching receipt keys
while List continues using the existing projection.

## Revert Plan
Revert the writer rollout; List still uses the existing projection.
Leave the additive table in place until no writers depend on it.

## API Changes
No RPC/proto changes. Gateway storage implementations must provide the
new RequestReceiptStore accessor.

## Issue Links
LINEAR-CODEM-561 —
https://linear.app/uber/issue/CODEM-561/clean-up-duplicate-request-projection-in-submitqueue-code

## Stack
1. @ uber#799
1. uber#800
1. uber#801
@behinddwalls
behinddwalls added this pull request to the merge queue Oct 8, 2026
Merged via the queue into main with commit 6c05008 Oct 8, 2026
16 checks passed
@behinddwalls
behinddwalls deleted the mnoah1/submitqueue-list-read-cutover branch October 8, 2026 03:04
behinddwalls pushed a commit that referenced this pull request Oct 8, 2026
Summary:
Intent:
- Complete the receipt-based List migration from #800: keep one authoritative request summary and immutable lookup keys.

Changes:
- Remove queue-summary writes, the duplicate entity/store, and obsolete tests and mocks.
- Idempotently ensure URI mappings before the receipt key, including partial-write retries and stale logs.
- Update rollout docs; retain the legacy SQL definition for deployment compatibility.

Test Plan:
- Deploy after #800 is stable. Rollback must retain the receipt-based reader once duplicate writes stop.
- Retire the table in a separate internal schema change after old binaries and the rollback window are gone. UQL DEPRECATED can drop immediately in Vitess; no physical retirement is enabled here.

---

<sub>Generated by the 🪄 [pr-create](https://sg.uberinternal.com/code.uber.internal/uber-code/devexp-agent-marketplace/-/blob/claude-code/plugins/dev/uber-dev/skills/pr-create/SKILL.md) skill in devexp-agent-marketplace</sub>
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