Skip to content

fix(relay): strip quotes from ETag before If-Match for Ceph RGW compat - #3003

Open
darox wants to merge 2 commits into
block:mainfrom
darox:fix/ceph-rgw-if-match-quoting
Open

fix(relay): strip quotes from ETag before If-Match for Ceph RGW compat#3003
darox wants to merge 2 commits into
block:mainfrom
darox:fix/ceph-rgw-if-match-quoting

Conversation

@darox

@darox darox commented Jul 26, 2026

Copy link
Copy Markdown

Problem

Ceph RGW returns quoted ETags but rejects that form in If-Match. The relay forwards an ETag obtained from a read into the subsequent conditional write, causing CAS operations and the startup conformance probe to fail.

Fix

Remove surrounding double quotes only when setting If-Match. If-None-Match: * is unchanged.

Validation

  • Verified against Ceph RGW in a cluster.
  • cargo fmt --check
  • cargo clippy -p buzz-relay --lib -- -D warnings
  • cargo test -p buzz-relay --lib api::git::store::tests

Closes #3002

Ceph RGW returns quoted ETags in GET responses (per RFC 7232) but rejects
quoted ETags in the If-Match precondition header (returns 412), accepting
only the unquoted form — non-compliant with RFC 7232. buzz-relay forwards
the quoted ETag received from GET verbatim into If-Match, so every
conditional-write (CAS) — including the startup S3 conformance probe —
fails against a Ceph-backed bucket, and the relay CrashLoops on startup.

Strip surrounding double quotes from the ETag before inserting it into
If-Match. AWS S3 and MinIO accept both the quoted and unquoted forms, so
this does not regress those backends.

Closes block#3002

Signed-off-by: Dario Mader <maderdario@gmail.com>
@darox
darox force-pushed the fix/ceph-rgw-if-match-quoting branch from c05319e to 5eac6ca Compare July 27, 2026 18:22
@darox
darox marked this pull request as ready for review July 27, 2026 18:22
Co-authored-by: Phuoc (Phu) Do <91568955+dophsquare@users.noreply.github.com>
Signed-off-by: Phuoc (Phu) Do <91568955+dophsquare@users.noreply.github.com>

* origin/main: (84 commits)
  chore(ci): bump desktop smoke E2E timeout to 30 minutes (block#3409)
  release(chart): publish 0.1.7 (block#3393)
  feat(acp): steer claude-code and codex agents via _session/steering (block#3007)
  feat(desktop): apply WebKit rendering workarounds at startup on Linux (block#3271)
  fix(desktop): stabilize flaky DM expansion E2E ordering assertions (block#2004)
  docs(contributing): document the Linux system libraries just ci requires (block#3396)
  fix(desktop): paint community rail full height (block#3382)
  fix(acp): disable goose cron scheduler in managed agent children (block#3144)
  feat(desktop): add custom harness inline from agent dialogs (block#3252)
  chore(compose): remove stale typesense env vars (block#3332)
  feat(desktop): refine agent catalog sharing (block#2439)
  fix(desktop): keep drafts out of the Inbox All view (block#3217)
  docs: restructure DCO guidance into scannable subsection (block#3337)
  Unify mobile loading spinners (block#3314)
  fix(desktop): restore the inbox icon in the sidebar (block#3341)
  fix(desktop): gate codex-acp on a minimum supported version (block#3254)
  feat(cli): add users set-status command for NIP-38 profile status (block#3253)
  fix(composer): scope multiline block formatting (block#3246)
  feat(chart): add relay pod extension points (block#3322)
  Refine mobile attachment picking (block#3313)
  ...
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.

Ceph RGW rejects quoted ETags in If-Match (412) — relay CAS / S3 conformance probe fails on Ceph-backed object storage

1 participant