Repository navigation
refactor: route metadata lifecycle operations through the Metastore trait - #146
Merged
Merged
Conversation
This was referenced Nov 11, 2026
The floating quay.io/parseablehq/quest:main image now expects 202 from stream deletion. This server still deletes synchronously and returns 200, so TestSmokeRbacBasic and TestSmokeRoles fail on main and on every pull request. The previous image digest is no longer available from the registry, so build Quest from the last source commit before that change. The compose files take the image and pull policy from QUEST_IMAGE and QUEST_PULL_POLICY and keep their previous defaults. Refs #151 Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Metastore(src/metastore/metastore_traits.rs) is meant to be the door to Parseable's metadata, but several call sites read or wrote metadata objects directly throughObjectStorage. That makes the trait an incomplete seam: a second metastore backend would still leave some metadata in the bucket.Change
A behaviour-preserving refactor. Nine call sites now go through the trait: the health check, the startup latency probe, stream existence and deleting checks, stream and date-partition deletion, and tenant discovery. Seven trait methods are added, each implemented for the object-store backend by moving the existing logic:
The same objects are touched, in the same order, with the same errors. No conditional writes, caching or race fixes are introduced.
A guard test fails when new code writes or prefix-deletes a metadata path directly on object storage outside the approved adapters. It is a text-level check: it does not catch alternate APIs, macros, or changes inside the exempt adapters.
What stays on object storage
Parquet I/O, first/latest event times derived from directory names, legacy partition discovery and physical occupancy checks. These are data-plane operations. Staging and hot-tier state stay node-local. The full classification (33 metadata operation groups, 10 data-plane, 4 node-local, 1 unclear) is in
docs/metastore-boundary-audit.md.One side effect to know about
Stream and retention deletes now run on the metastore's storage client, which has its own request limiter, where they used to run on the data client. Keys, operations and errors are unchanged; only the request budget they draw from moved.
Not fixed here
The unconditional read-modify-write updates of
stream.json, manifests, schemas, RBAC, alert state, filters and the node registry are unchanged and tracked in #141.Tests
Library suite passes (1,379 passed, 4 ignored). Local-filesystem fixtures check exact bytes, discovery, deletion errors, and tenant and date isolation. An independent review compared every reroute against
mainand found the object-store behaviour equivalent.🤖 Generated with Claude Code
Open in [code]smith · Need help on this PR? Tag
@codesmith-botwith what you need.