Repository navigation
Release - #230
Release#230
Conversation
* fix: tiered mode forwards by signing on non-Tigris endpoints Tiering is a caching topology, not a forwarding flavor, but v1.22.0 wired tiered to the transparent path unconditionally (proxy headers, learned keys) and pinned it to Tigris endpoints — so a tiered deployment fronting any other S3-compatible store failed at startup, and had the validator been bypassed it would have forwarded client signatures valid for the wrong host and never learned a key. Config.ForwardsTransparently is now the single join point: transparent mode forwards transparently, signing never does, and tiered derives it from the endpoint (Tigris → transparent, otherwise → signing via the credential store). The endpoint validator pins only transparent mode to Tigris; main.go's proxy-signer, credential, and local-auth forks key on the helper. Startup logs the selected flavor and, on a non-Tigris endpoint, warns that the cleanup DELETE's If-Match ordering is verified on Tigris only. Comments and docs that called tiered "endpoint-locked to Tigris" corrected.
|
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 5ad46d4. Configure here.
…231) * fix: localhost is not a Tigris endpoint for tiered flavor selection IsTigrisEndpoint conflated two questions: which endpoints transparent mode may target (Tigris domains, or localhost for local testing) and which backends are trusted to behave like Tigris (headers understood, keys learnable, If-Match on DELETE enforced). Once it began selecting tiered mode's forwarding flavor, a localhost stand-in — a local MinIO — took the transparent path and re-enabled the cross-tier cleanup DELETE the unverified_backend gate exists to withhold. IsTigrisEndpoint is now strict (Tigris domains only, case-normalized) and drives the flavor; IsTransparentEndpoint (Tigris or localhost, any case) is the transparent-mode allowlist the validator uses. Docs scope the delete-permission requirement to Tigris-backed tiered deployments — on the signing flavor the key never issues a DELETE and needs read only.
|
🎉 This PR is included in version 1.22.1 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |

Cuts v1.22.1 — tiered store mode on non-Tigris endpoints (#229, #231), found while preparing its first deployment; no change for transparent or signing deployments.
Tiered mode works on non-Tigris S3 endpoints (#229). v1.22.0 wired tiered to the transparent forwarding path unconditionally (proxy headers, keys learned from Tigris) and pinned it to Tigris endpoints, so a tiered deployment fronting any other S3-compatible store failed at startup. Tiering is a caching topology, not a forwarding flavor:
Config.ForwardsTransparently()is now the single join point — transparent mode forwards transparently, signing never does, and tiered derives it from the endpoint (Tigris → transparent; otherwise → signing via the credential store). The startup log states the flavor. On non-Tigris endpoints the cross-tier cleanup DELETE is disabled by construction (tag_tiered_cleanup_total{outcome="unverified_backend"}): its safety rests on the backend enforcingIf-Match, verified on Tigris only, and a backend that accepted-but-ignored it could delete a racing replacement. Displaced upstream copies age out by bucket expiry instead. Tigris host matching is case-insensitive now that it selects the flavor, and it is strict (#231):localhostremains allowed for transparent-mode local testing but is not a trust claim about the backend, so a tiered deployment onlocalhostforwards by signing with cleanup disabled. Docs scope the delete-permission requirement to Tigris-backed tiered deployments.Validation: full suite, race, lint; tiered s3-compat CI job; both tiered shapes booted from the release commit — non-Tigris endpoint →
Signing forwarding enabled+ fenced CAS; Tigris endpoint → transparent path, unchanged.🤖 Generated with Claude Code
https://claude.ai/code/session_01L5DLvDTo9dhD38YQXhHpU9