Skip to content

feat: Store shuffles in object store (S3, Azure)#9

Merged
lukekim merged 7 commits into
spiceai-51from
lukim/object-store
Jan 23, 2026
Merged

feat: Store shuffles in object store (S3, Azure)#9
lukekim merged 7 commits into
spiceai-51from
lukim/object-store

Conversation

@lukekim
Copy link
Copy Markdown

@lukekim lukekim commented Jan 22, 2026

No description provided.

@lukekim lukekim self-assigned this Jan 22, 2026
phillipleblanc and others added 5 commits January 22, 2026 20:47
…10)

* Add shuffle read metrics extraction and QueryStageExecutor::plan() method

- Add public getter methods to PartitionStats (num_rows, num_batches, num_bytes)
- Extend QueryStageExecutor trait with plan() method to access underlying ExecutionPlan
- Add extract_shuffle_read_metrics() to walk plan tree and sum ShuffleReaderExec partition stats
- Record shuffle read metrics (bytes, rows, duration) after successful task execution in executor

* Add shuffle locality metrics to ExecutorMetricsCollector, SchedulerMetricsCollector, and ShuffleReaderExec

- Add record_shuffle_read_local/remote methods to ExecutorMetricsCollector trait
- Add record_task_shuffle_affinity_hit/miss methods to SchedulerMetricsCollector trait
- Add ShuffleReadMetricsCallback trait in ballista-core for tracking local vs remote reads
- Instrument shuffle_reader.rs to call metrics callback during partition fetches
- Add SessionConfigExt methods to pass metrics callback via session config

* Add metrics collector to SchedulerState and instrument executor and planning metrics

- Add metrics_collector field to SchedulerState struct
- Instrument record_planning_duration in submit_job
- Instrument record_executor_registered/deregistered and set_active_executor_count
- Update all SchedulerState constructors and call sites

* Add stage and task lifecycle metrics instrumentation to update_task_status flow

* Add shuffle affinity metrics to scheduler task binding

* Add actual task scheduling latency tracking

- Add schedulable_time_millis field to TaskDescription to track when a task became schedulable (when its stage transitioned to running state)
- Update all TaskDescription creation sites to pass RunningStage.stage_running_time
- Calculate actual scheduling latency in record_task_scheduled calls by computing the difference between current time and schedulable_time_millis
- This enables accurate scheduler_task_scheduling_latency_ms metrics instead of the previous placeholder value of 0

* fix lint
* feat: add Vortex columnar format support for shuffle operations

- Introduced Vortex dependencies in Cargo.toml for columnar format handling.
- Updated Ballista configuration to support shuffle format selection between Arrow IPC and Vortex.
- Implemented Vortex shuffle reader and writer in execution plans.
- Enhanced shuffle operations to detect and handle Vortex files.
- Added utility functions for writing streams to disk in both Arrow IPC and Vortex formats.
- Created a new module for Vortex shuffle operations, including reading and writing logic.
- Added tests for Vortex write and read roundtrip functionality.

* Fix Clippy and lint

* Fix reading of Vortex files
@lukekim lukekim merged commit 62c381a into spiceai-51 Jan 23, 2026
31 checks passed
@lukekim lukekim deleted the lukim/object-store branch January 23, 2026 05:57
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.

2 participants