feat(master-ui): replace list Compact with Optimize (merge+compact+index)#153
Merged
Conversation
…dex) The experiment list's per-row Compact button becomes Optimize, which enqueues the full maintenance sequence for that experiment in order: merge_wal → compact → index_id. All three go through the unified task queue (compact now enqueues a task rather than hitting the legacy /compact bridge), so progress is visible in one place and the view switches to the queue on click. The detail drawer keeps its three individual buttons (Compact / Merge WAL / Index id) unchanged. Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
The Optimize button enqueues merge_wal, compact, and index_id for one experiment. compact and index_id share a per-experiment base-table write gate (CreateIndex vs Rewrite conflict), so running them concurrently made index_id fail immediately. Chain them via task dependencies instead: compact waits for merge_wal, index_id waits for compact. - api: add optional depends_on to TaskRecord/EnqueueTaskRequest. - scheduler: resolve deps before acquiring a permit (avoids deadlock at concurrency 1); defer-requeue while Waiting, mark Failed if a dep Failed. - ui: OptimizeButton chains the three enqueues by captured task id. Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
Collaborator
Author
|
Follow-up: fixed a gate-conflict found during e2e verification. Optimize enqueues merge_wal → compact → index_id. Because the scheduler runs tasks concurrently (task_concurrency=4) and compact + index_id share the per-experiment base-table write gate, index_id was failing immediately with "a base-table write is already in progress". Fix: task dependencies. compact now depends on merge_wal, index_id depends on compact, so the chain runs strictly in order.
|
The whole UI was a single stateful component with view/selection in a zustand store, so nothing was shareable. Introduce react-router with path-style routes so every screen has its own URL: - /experiments list - /experiments/:name detail drawer (Records tab) - /experiments/:name/overview detail drawer (Overview tab) - /experiments/:name/records/:recordId drawer with a record expanded - /tasks task queue Navigation state (which experiment/tab/record is open) now lives entirely in the URL, so refresh and share both land on the same view. The existing server SPA fallback (ServeDir.fallback(index.html)) already serves these deep paths; verified /experiments/:name/records/:id returns index.html. Added "Copy link" affordances: a link icon by the drawer title and a button in each expanded record. store.ts keeps only list search/pagination. Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
# Conflicts: # crates/lance-context-master/src/routes.rs # crates/lance-context-master/src/scheduler.rs
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.
Summary
merge_wal→compact→index_id/compactbridge), so progress is visible in one place; clicking switches to the queue viewTest plan
npm run build(tsc + vite) passes🤖 Generated with Claude Code