Skip to content

feat(snapshots): Follow the server-selected objectstore usecase - #1587

Merged
NicoHinderling merged 3 commits into
mainfrom
feat/snapshots-objectstore-usecase
Sep 15, 2026
Merged

NicoHinderling merged 3 commits into
mainfrom
feat/snapshots-objectstore-usecase

Conversation

@NicoHinderling

@NicoHinderling NicoHinderling commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Snapshot uploads now request usecase=auto from the upload-options endpoint and use the server's returned usecase for both HEAD deduplication checks and PUT uploads, rather than hardcoding preprod. This keeps Objectstore paths aligned with the minted token and lets the backend move new snapshot content into preprod_snapshots without another CLI change.

When older servers omit usecase, response parsing defaults it to preprod, preserving the existing upload behavior. Object keys remain unchanged; because deduplication is scoped by usecase, the first upload after a server-side switch re-uploads images once.

Pairs with getsentry/sentry#124194 (cross-usecase reads and the upload-options contract) and getsentry/sentry#124210 (server-controlled write selection). getsentry/sentry-cli#3408 implements the same contract in the legacy CLI; both clients are being updated. The backend option remains off by default: register preprod_snapshots in Objectstore before deploying the backend prerequisite, then enable the option only after the backend rollout. Older CLI releases keep writing to preprod and remain readable through fallback reads.

Request automatic usecase selection for snapshot uploads and use the returned value for
both existence checks and uploads. Default to preprod when older servers omit the field.

Refs getsentry/sentry#124194, getsentry/sentry#124210
@vercel

vercel Bot commented Sep 14, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
cli Ready Ready Preview Sep 14, 2026 6:28pm UTC
1 Skipped Deployment
Project Deployment Actions Updated
sentry-local Skipped Skipped Sep 14, 2026 6:28pm UTC

Request Review

@vercel
vercel Bot temporarily deployed to Preview – sentry-local September 14, 2026 18:09 Inactive
@NicoHinderling
NicoHinderling marked this pull request as ready for review September 14, 2026 18:18
Comment thread packages/cli/src/lib/api/preprod-artifacts.ts
NicoHinderling added a commit to getsentry/sentry that referenced this pull request Sep 14, 2026
…124194)

Prepares snapshot storage to move from the shared `preprod` Objectstore
usecase into `preprod_snapshots`. This PR registers the new usecase and
adds cross-usecase reads, HEAD checks, and deletes through
`SnapshotStorage`. Writes remain on `preprod`, so this deploy does not
move stored content or change the write destination. The fallback metric
records when reads use the secondary usecase.

The upload-options endpoint also accepts `usecase=auto` and echoes the
chosen usecase in its response. Requests without the parameter keep
receiving `preprod` tokens for compatibility with existing CLI releases.
getsentry/sentry-cli#3408 and getsentry/cli#1587 opt into this contract;
#124210 adds the default-off option that selects `preprod_snapshots` for
new writes.

Register `preprod_snapshots` in the Objectstore service configuration
**before deploying this prerequisite**: fallback reads may access it
whenever an object is missing from `preprod`. Deploy the backend stack
fully before enabling the write-selection option. No content-copy
migration is required; existing uploads remain readable through the
fallback.
NicoHinderling added a commit to getsentry/sentry that referenced this pull request Sep 15, 2026
…4210)

Adds the default-off boolean option
`preprod.snapshots.objectstore.snapshots-usecase.enabled` to select the
destination for new snapshot content, using the shared storage reader
introduced by #124194, now on `master`.

With the option off, writes remain on `preprod`. When enabled,
server-side writes (manifests, precomputed head images, comparison
results, diff masks, and ZIP archives) use `preprod_snapshots`, and
reads prefer that namespace before falling back to `preprod`.
Upload-options requests with `usecase=auto` receive a token for the
selected usecase and its name in the response; getsentry/sentry-cli#3408
and getsentry/cli#1587 use that contract for direct screenshot uploads.
Requests without `usecase=auto` continue receiving `preprod` tokens even
when the option is enabled.

The Objectstore policy change in getsentry/ops#23486 is merged; confirm
it is deployed and deploy the backend stack fully before enabling the
option through sentry-options-automator. Because deduplication is scoped
by usecase, upgraded clients re-upload images once after the switch;
later uploads deduplicate normally.

**Outstanding review blocker:** comparison outputs currently reuse
artifact-pair keys. Recomputing a comparison across a usecase switch and
then rolling back can read an older manifest or mask while the database
describes the newer result. Before rollout, comparison generations need
authoritative, generation-qualified storage references with
rolling-deploy compatibility. This is a broader follow-up than cleanup;
do not enable getsentry/sentry-options-automator#9713 until it is
addressed.
NicoHinderling added a commit to getsentry/sentry-cli that referenced this pull request Sep 15, 2026
Snapshot uploads now request `usecase=auto` and build their Objectstore
session from the usecase returned by the server rather than hardcoding
`preprod`. Both batched HEAD checks and image uploads use that session,
keeping their paths aligned with the minted token. This lets the backend
move new snapshot content into `preprod_snapshots` without another CLI
change.

Servers that omit the response field default to `preprod`, so existing
Sentry versions retain their current behavior. The integration coverage
exercises actual upload-options requests, authenticated Objectstore
batches, and snapshot creation for `preprod_snapshots`, explicit
`preprod`, and an omitted usecase. Object keys stay unchanged; the first
upload after a usecase switch re-uploads images once because
deduplication is scoped by usecase.

Pairs with getsentry/sentry#124194 (cross-usecase reads and the
upload-options contract) and getsentry/sentry#124210 (default-off write
selection). getsentry/cli#1587 implements the same contract in the
replacement CLI; both clients are being updated. Register
`preprod_snapshots` in Objectstore before deploying the backend
prerequisite and enable the option only after the backend rollout. Older
CLI releases keep writing to `preprod` and remain readable through
fallback reads.
@NicoHinderling
NicoHinderling merged commit 3845072 into main Sep 15, 2026
34 checks passed
@NicoHinderling
NicoHinderling deleted the feat/snapshots-objectstore-usecase branch September 15, 2026 17:42

This branch was successfully deployed

1 active and 1 inactive deployments
Preview – cli — 04ae8309 Deployed Sep 14, 2026 by vercel[bot]
Preview – sentry-local — 04ae8309 Deployed Sep 14, 2026 by vercel[bot]
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