@@ -37,6 +37,7 @@ use vortex::array::arrow::ArrowArrayExecutor;
3737use vortex:: error:: VortexError ;
3838use vortex:: file:: OpenOptionsSessionExt ;
3939use vortex:: io:: InstrumentedReadAt ;
40+ use vortex:: io:: session:: RuntimeSessionExt ;
4041use vortex:: layout:: LayoutReader ;
4142use vortex:: layout:: scan:: scan_builder:: ScanBuilder ;
4243use vortex:: metrics:: Label ;
@@ -362,6 +363,7 @@ impl FileOpener for VortexOpener {
362363 }
363364
364365 let stream_schema = Arc :: new ( stream_schema) ;
366+ let handle = session. handle ( ) ;
365367
366368 let stream = scan_builder
367369 . with_metrics_registry ( metrics_registry)
@@ -370,10 +372,15 @@ impl FileOpener for VortexOpener {
370372 . with_ordered ( has_output_ordering)
371373 . into_stream ( )
372374 . map_err ( |e| exec_datafusion_err ! ( "Failed to create Vortex stream: {e}" ) ) ?
373- . map ( move |chunk| {
374- let mut ctx = session. create_execution_ctx ( ) ;
375- chunk. and_then ( |chunk| {
376- chunk. execute_record_batch ( stream_schema. as_ref ( ) , & mut ctx)
375+ . then ( move |chunk| {
376+ let session = session. clone ( ) ;
377+ let stream_schema = Arc :: clone ( & stream_schema) ;
378+ let handle = handle. clone ( ) ;
379+ handle. spawn_blocking ( move || {
380+ let mut ctx = session. create_execution_ctx ( ) ;
381+ chunk. and_then ( |chunk| {
382+ chunk. execute_record_batch ( stream_schema. as_ref ( ) , & mut ctx)
383+ } )
377384 } )
378385 } )
379386 . map_ok ( move |rb| {
0 commit comments