@@ -28,7 +28,7 @@ use tonic::{Request, Response, Status};
2828use tracing:: { debug, error, info, instrument, trace, warn} ;
2929
3030use crate :: {
31- blob_store:: { self , BlobStorage } ,
31+ blob_store:: { self , registry :: BlobStorageRegistry } ,
3232 data_model:: {
3333 self ,
3434 Allocation ,
@@ -415,7 +415,7 @@ impl TryFrom<FunctionExecutorState> for data_model::FunctionExecutor {
415415
416416fn to_function_executor_diagnostics (
417417 function_executor_update : & executor_api_pb:: FunctionExecutorUpdate ,
418- blob_storage : & BlobStorage ,
418+ blob_storage_registry : & BlobStorageRegistry ,
419419) -> Result < FunctionExecutorDiagnostics > {
420420 let description = function_executor_update
421421 . description
@@ -441,15 +441,19 @@ fn to_function_executor_diagnostics(
441441 . graph_version
442442 . clone ( )
443443 . ok_or ( anyhow:: anyhow!( "graph_version is required" ) ) ?;
444+ let blob_storage_url_schema = blob_storage_registry
445+ . get_blob_store ( & namespace)
446+ . get_url_scheme ( ) ;
447+ let blob_storage_url = blob_storage_registry. get_blob_store ( & namespace) . get_url ( ) ;
444448 let startup_stdout = prepare_data_payload (
445449 function_executor_update. startup_stdout . clone ( ) ,
446- & blob_storage . get_url_scheme ( ) ,
447- & blob_storage . get_url ( ) ,
450+ & blob_storage_url_schema ,
451+ & blob_storage_url ,
448452 ) ;
449453 let startup_stderr = prepare_data_payload (
450454 function_executor_update. startup_stderr . clone ( ) ,
451- & blob_storage . get_url_scheme ( ) ,
452- & blob_storage . get_url ( ) ,
455+ & blob_storage_url_schema ,
456+ & blob_storage_url ,
453457 ) ;
454458
455459 Ok ( data_model:: FunctionExecutorDiagnostics {
@@ -465,12 +469,12 @@ fn to_function_executor_diagnostics(
465469
466470fn to_function_executor_diagnostics_vector (
467471 function_executor_updates : & Vec < executor_api_pb:: FunctionExecutorUpdate > ,
468- blob_storage : & BlobStorage ,
472+ blob_storage_registry : & BlobStorageRegistry ,
469473) -> Result < Vec < FunctionExecutorDiagnostics > > {
470474 function_executor_updates
471475 . iter ( )
472476 . map ( |function_executor_update| {
473- to_function_executor_diagnostics ( function_executor_update, blob_storage )
477+ to_function_executor_diagnostics ( function_executor_update, blob_storage_registry )
474478 } )
475479 . collect ( )
476480}
@@ -479,21 +483,21 @@ pub struct ExecutorAPIService {
479483 indexify_state : Arc < IndexifyState > ,
480484 executor_manager : Arc < ExecutorManager > ,
481485 api_metrics : Arc < api_io_stats:: Metrics > ,
482- blob_storage : Arc < blob_store:: BlobStorage > ,
486+ blob_storage_registry : Arc < blob_store:: registry :: BlobStorageRegistry > ,
483487}
484488
485489impl ExecutorAPIService {
486490 pub fn new (
487491 indexify_state : Arc < IndexifyState > ,
488492 executor_manager : Arc < ExecutorManager > ,
489493 api_metrics : Arc < api_io_stats:: Metrics > ,
490- blob_storage : Arc < blob_store:: BlobStorage > ,
494+ blob_storage_registry : Arc < blob_store:: registry :: BlobStorageRegistry > ,
491495 ) -> Self {
492496 Self {
493497 indexify_state,
494498 executor_manager,
495499 api_metrics,
496- blob_storage ,
500+ blob_storage_registry ,
497501 }
498502 }
499503
@@ -577,16 +581,21 @@ impl ExecutorAPIService {
577581
578582 let mut payloads = Vec :: new ( ) ;
579583 let mut encoding_str = String :: new ( ) ;
584+ let blob_storage_url_schema = self
585+ . blob_storage_registry
586+ . get_blob_store ( & namespace)
587+ . get_url_scheme ( ) ;
588+ let blob_storage_url = self
589+ . blob_storage_registry
590+ . get_blob_store ( & namespace)
591+ . get_url ( ) ;
580592 for output in task_result. function_outputs . clone ( ) {
581593 let url = output
582594 . uri
583595 . ok_or ( Status :: invalid_argument ( "uri is required" ) ) ?;
584596
585- let path = blob_store_url_to_path (
586- & url,
587- & self . blob_storage . get_url_scheme ( ) ,
588- & self . blob_storage . get_url ( ) ,
589- ) ;
597+ let path =
598+ blob_store_url_to_path ( & url, & blob_storage_url_schema, & blob_storage_url) ;
590599 let size = output
591600 . size
592601 . ok_or ( Status :: invalid_argument ( "size is required" ) ) ?;
@@ -621,8 +630,8 @@ impl ExecutorAPIService {
621630 }
622631 let invocation_error_payload = prepare_data_payload (
623632 task_result. invocation_error_output . clone ( ) ,
624- & self . blob_storage . get_url_scheme ( ) ,
625- & self . blob_storage . get_url ( ) ,
633+ & blob_storage_url_schema ,
634+ & blob_storage_url ,
626635 ) ;
627636
628637 let node_output = NodeOutputBuilder :: default ( )
@@ -642,13 +651,13 @@ impl ExecutorAPIService {
642651 let task_diagnostic = TaskDiagnostics {
643652 stdout : prepare_data_payload (
644653 task_result. stdout . clone ( ) ,
645- & self . blob_storage . get_url_scheme ( ) ,
646- & self . blob_storage . get_url ( ) ,
654+ & blob_storage_url_schema ,
655+ & blob_storage_url ,
647656 ) ,
648657 stderr : prepare_data_payload (
649658 task_result. stderr . clone ( ) ,
650- & self . blob_storage . get_url_scheme ( ) ,
651- & self . blob_storage . get_url ( ) ,
659+ & blob_storage_url_schema ,
660+ & blob_storage_url ,
652661 ) ,
653662 } ;
654663 let allocation_key = Allocation :: key_from (
@@ -849,7 +858,7 @@ impl ExecutorApi for ExecutorAPIService {
849858
850859 let function_executor_diagnostics = to_function_executor_diagnostics_vector (
851860 & executor_update. function_executor_updates ,
852- & self . blob_storage ,
861+ & self . blob_storage_registry ,
853862 )
854863 . map_err ( |e| Status :: invalid_argument ( e. to_string ( ) ) ) ?;
855864
0 commit comments