feat(master): POST /experiments/{name}/rescan refreshes one store's stats now - #283
Merged
Merged
Conversation
…tats now The merge sweep schedules from the stats table, which the scanner refreshes every interval. When a store's row is known to be wrong (it was for 17k pending generations before lance-format#281) an operator had no way to correct it short of waiting for the next round or hitting the detail route with ?fresh=true, which reads as a query. This is the same refresh_one, as a POST that returns the refreshed summary. Co-Authored-By: Claude Fable 5 <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
The merge sweep picks targets from the stats table, which the scanner refreshes on its interval (300 s in production). When a row is known to be wrong —
mai3_bigclimb_run6p5_77b_t0r1showed 3 pending generations while its shards held 17,254 (#281) — an operator had no direct way to correct it: wait for the next scan, or callGET /experiments/{name}?fresh=true, which reads as a query rather than a scheduler input change.Fix
POST /api/v1/experiments/{name}/rescan: resolves the store through the registry (404 if absent), runs the existingscanner::refresh_one(full observation under the stats-writer lock, upserts the row) and returns the refreshedExperimentDetail.Verification
rescan_experiment_refreshes_pending_generations(etcd-backed): 0 → 2 flushed generations; the response and the persisted row both report 2; unknown name →NotFound.--include-ignoredpasses; clippy clean.🤖 Generated with Claude Code