Repository navigation
feat(file): a coalescing IO service for planning-protocol scans - #10548
joseph-isaacs wants to merge 1 commit into
Conversation
Serves the planning protocol's `IoService` reads of a file: - `FileIoService` coalesces the ranges a batch of requests or announcements asks for, reads each range once for every session interested in it, and withdraws a dropped session's interest. `FileScanIo` serves the same protocol through the file's segment source and read driver. - Local files reuse their handles and admit native reads up to a bound; object-store reads stream completions as they land. - The read driver keeps its coalescing scratch between passes and can leave optional requests out of coalescing. - Segment caches can answer synchronously from `get_if_ready`. - Request tracing ids for diagnostics. A file opened over a reader carries the service as `VortexFile::scan_io`. Nothing drives it yet; the planning scan that does follows separately. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P1oQtzTgSzkvrGDKisoNko Signed-off-by: Claude <noreply@anthropic.com>
Merging this PR will regress 2 benchmarks
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ |
Simulation | density_sweep_dense_runs[0.001] |
29 µs | 46.7 µs | -38.02% |
| ❌ ℹ️ | Simulation | test_scan_filter[int] |
3 ms | 3.4 ms | -10.44% |
| ⚡ | Simulation | take_map[(0.1, 1.0)] |
352.2 µs | 221.2 µs | +59.22% |
| ⚡ | Simulation | take_map[(0.1, 0.5)] |
182.6 µs | 146.4 µs | +24.72% |
| ⚡ | Simulation | take_map[(0.1, 0.05)] |
87 µs | 77.4 µs | +12.42% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing ji/scan-v2-1-io (7f2d936) with develop (6eae823)
Footnotes
-
12 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
Summary
1/5 of a stack that splits the V2 scan (#10464 and #10547) into smaller PRs on current
develop. This is the content of #10463, rebased ondevelop, unchanged. It adds the IO layer the planner-driven scan reads through. Nothing drives it until the V2 scan PRs.Stack:
vortex-scan)vortex-layoutvortex-file, DataFusion and DuckDBChanges
FileIoService. Coalesces the ranges a batch of planning-protocol requests or announcements asks for. Each range is read once for every session interested in it, and a dropped session's interest is withdrawn.FileScanIo. Serves the same protocol through the file's segment source and read driver, sharing pending reads between live consumers.VORTEX_SCAN_IO_COALESCE_OPTIONAL).SegmentCache::get_if_ready.Unit tests for coalescing, shared reads, withdrawal and wake-ups are in
segments::{io_service, scan_io}.Checks run:
cargo clippy -p vortex-io -p vortex-scan -p vortex-layout -p vortex-file --all-targets --all-features -- -D warnings🤖 Generated with Claude Code
https://claude.ai/code/session_01Hai26WGsNERxRHXpA3JboE
Generated by Claude Code