Skip to content

Commit 8914550

Browse files
committed
fix: tolerate sessions without ArrayKernels in executor
`execute_until` and the single-step `Executable::execute` looked up the `ArrayKernels` session variable with `session.get`, which panics when the variable is absent. Sessions built without registering `ArrayKernels` (such as the `run_end_take` benchmark's `VortexSession::empty()`) then panicked during execution. Fall back to an empty `ArrayKernels` registry when the variable is not present, matching the optimizer's `get_opt` contract. The registry is consulted first and then each child's static `execute_parent` method, so built-in kernels still fire under an empty registry. Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
1 parent 718ffea commit 8914550

1 file changed

Lines changed: 16 additions & 2 deletions

File tree

vortex-array/src/executor.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,14 @@ impl ArrayRef {
163163
let max_iterations = max_iterations();
164164

165165
let session = ctx.session().clone();
166-
let kernels = session.get::<ArrayKernels>();
166+
let fallback_kernels;
167+
let kernels = match session.get_opt::<ArrayKernels>() {
168+
Some(kernels) => kernels,
169+
None => {
170+
fallback_kernels = ArrayKernels::empty();
171+
&fallback_kernels
172+
}
173+
};
167174

168175
for _ in 0..max_iterations {
169176
let is_done = stack
@@ -427,7 +434,14 @@ impl Executable for ArrayRef {
427434
}
428435

429436
let session = ctx.session().clone();
430-
let kernels = session.get::<ArrayKernels>();
437+
let fallback_kernels;
438+
let kernels = match session.get_opt::<ArrayKernels>() {
439+
Some(kernels) => kernels,
440+
None => {
441+
fallback_kernels = ArrayKernels::empty();
442+
&fallback_kernels
443+
}
444+
};
431445

432446
if let Some(executed_parent) =
433447
try_execute_parent(&array, occupied_slots(&array), kernels, ctx)?

0 commit comments

Comments
 (0)