@@ -374,6 +374,90 @@ def _build_setup_message(self, command_line, dependencies_description, env, remo
374
374
launch_params ["setup_params" ] = setup_params
375
375
return launch_params
376
376
377
+ def get_pulsar_app_config (
378
+ self ,
379
+ pulsar_app_config ,
380
+ container ,
381
+ wait_after_submission ,
382
+ manager_name ,
383
+ manager_type ,
384
+ dependencies_description ,
385
+ ):
386
+
387
+ pulsar_app_config = pulsar_app_config or {}
388
+ manager_config = self ._ensure_manager_config (
389
+ pulsar_app_config ,
390
+ manager_name ,
391
+ manager_type ,
392
+ )
393
+
394
+ if (
395
+ "staging_directory" not in manager_config and "staging_directory" not in pulsar_app_config
396
+ ):
397
+ pulsar_app_config ["staging_directory" ] = CONTAINER_STAGING_DIRECTORY
398
+
399
+ if self .amqp_key_prefix :
400
+ pulsar_app_config ["amqp_key_prefix" ] = self .amqp_key_prefix
401
+
402
+ if "monitor" not in manager_config :
403
+ manager_config ["monitor" ] = (
404
+ MonitorStyle .BACKGROUND .value
405
+ if wait_after_submission
406
+ else MonitorStyle .NONE .value
407
+ )
408
+ if "persistence_directory" not in pulsar_app_config :
409
+ pulsar_app_config ["persistence_directory" ] = os .path .join (
410
+ CONTAINER_STAGING_DIRECTORY , "persisted_data"
411
+ )
412
+ elif "manager" in pulsar_app_config and manager_name != "_default_" :
413
+ log .warning (
414
+ "'manager' set in app config but client has non-default manager '%s', this will cause communication"
415
+ " failures, remove `manager` from app or client config to fix" ,
416
+ manager_name ,
417
+ )
418
+
419
+ using_dependencies = container is None and dependencies_description is not None
420
+ if using_dependencies and "dependency_resolution" not in pulsar_app_config :
421
+ # Setup default dependency resolution for container above...
422
+ dependency_resolution = {
423
+ "cache" : False ,
424
+ "use" : True ,
425
+ "default_base_path" : "/pulsar_dependencies" ,
426
+ "cache_dir" : "/pulsar_dependencies/_cache" ,
427
+ "resolvers" : [
428
+ { # TODO: add CVMFS resolution...
429
+ "type" : "conda" ,
430
+ "auto_init" : True ,
431
+ "auto_install" : True ,
432
+ "prefix" : "/pulsar_dependencies/conda" ,
433
+ },
434
+ {
435
+ "type" : "conda" ,
436
+ "auto_init" : True ,
437
+ "auto_install" : True ,
438
+ "prefix" : "/pulsar_dependencies/conda" ,
439
+ "versionless" : True ,
440
+ },
441
+ ],
442
+ }
443
+ pulsar_app_config ["dependency_resolution" ] = dependency_resolution
444
+ return pulsar_app_config
445
+
446
+ def _ensure_manager_config (self , pulsar_app_config , manager_name , manager_type ):
447
+ if "manager" in pulsar_app_config :
448
+ manager_config = pulsar_app_config ["manager" ]
449
+ elif "managers" in pulsar_app_config :
450
+ managers_config = pulsar_app_config ["managers" ]
451
+ if manager_name not in managers_config :
452
+ managers_config [manager_name ] = {}
453
+ manager_config = managers_config [manager_name ]
454
+ else :
455
+ manager_config = {}
456
+ pulsar_app_config ["manager" ] = manager_config
457
+ if "type" not in manager_config :
458
+ manager_config ["type" ] = manager_type
459
+ return manager_config
460
+
377
461
378
462
class MessagingClientManagerProtocol (ClientManagerProtocol ):
379
463
status_cache : Dict [str , Dict [str , Any ]]
@@ -492,7 +576,7 @@ def launch(
492
576
container_info = None ,
493
577
token_endpoint = None ,
494
578
pulsar_app_config = None ,
495
- staging_manifest = None
579
+ staging_manifest = None ,
496
580
) -> Optional [ExternalId ]:
497
581
"""
498
582
"""
@@ -514,48 +598,15 @@ def launch(
514
598
515
599
manager_name = self .client_manager .manager_name
516
600
manager_type = "coexecution" if container is not None else "unqueued"
517
- pulsar_app_config = pulsar_app_config or {}
518
- manager_config = self ._ensure_manager_config (
519
- pulsar_app_config , manager_name , manager_type ,
601
+ pulsar_app_config = self .get_pulsar_app_config (
602
+ pulsar_app_config = pulsar_app_config ,
603
+ container = container ,
604
+ wait_after_submission = wait_after_submission ,
605
+ manager_name = manager_name ,
606
+ manager_type = manager_type ,
607
+ dependencies_description = dependencies_description ,
520
608
)
521
609
522
- if "staging_directory" not in manager_config and "staging_directory" not in pulsar_app_config :
523
- pulsar_app_config ["staging_directory" ] = CONTAINER_STAGING_DIRECTORY
524
-
525
- if self .amqp_key_prefix :
526
- pulsar_app_config ["amqp_key_prefix" ] = self .amqp_key_prefix
527
-
528
- if "monitor" not in manager_config :
529
- manager_config ["monitor" ] = MonitorStyle .BACKGROUND .value if wait_after_submission else MonitorStyle .NONE .value
530
- if "persistence_directory" not in pulsar_app_config :
531
- pulsar_app_config ["persistence_directory" ] = os .path .join (CONTAINER_STAGING_DIRECTORY , "persisted_data" )
532
- elif "manager" in pulsar_app_config and manager_name != '_default_' :
533
- log .warning (
534
- "'manager' set in app config but client has non-default manager '%s', this will cause communication"
535
- " failures, remove `manager` from app or client config to fix" , manager_name )
536
-
537
- using_dependencies = container is None and dependencies_description is not None
538
- if using_dependencies and "dependency_resolution" not in pulsar_app_config :
539
- # Setup default dependency resolution for container above...
540
- dependency_resolution = {
541
- "cache" : False ,
542
- "use" : True ,
543
- "default_base_path" : "/pulsar_dependencies" ,
544
- "cache_dir" : "/pulsar_dependencies/_cache" ,
545
- "resolvers" : [{ # TODO: add CVMFS resolution...
546
- "type" : "conda" ,
547
- "auto_init" : True ,
548
- "auto_install" : True ,
549
- "prefix" : '/pulsar_dependencies/conda' ,
550
- }, {
551
- "type" : "conda" ,
552
- "auto_init" : True ,
553
- "auto_install" : True ,
554
- "prefix" : '/pulsar_dependencies/conda' ,
555
- "versionless" : True ,
556
- }]
557
- }
558
- pulsar_app_config ["dependency_resolution" ] = dependency_resolution
559
610
base64_message = to_base64_json (launch_params )
560
611
base64_app_conf = to_base64_json (pulsar_app_config )
561
612
pulsar_container_image = self .pulsar_container_image
@@ -607,21 +658,6 @@ def _pulsar_script_args(self, manager_name, base64_job, base64_app_conf, wait_ar
607
658
manager_args .extend (["--base64" , base64_job , "--app_conf_base64" , base64_app_conf ])
608
659
return manager_args
609
660
610
- def _ensure_manager_config (self , pulsar_app_config , manager_name , manager_type ):
611
- if "manager" in pulsar_app_config :
612
- manager_config = pulsar_app_config ["manager" ]
613
- elif "managers" in pulsar_app_config :
614
- managers_config = pulsar_app_config ["managers" ]
615
- if manager_name not in managers_config :
616
- managers_config [manager_name ] = {}
617
- manager_config = managers_config [manager_name ]
618
- else :
619
- manager_config = {}
620
- pulsar_app_config ["manager" ] = manager_config
621
- if "type" not in manager_config :
622
- manager_config ["type" ] = manager_type
623
- return manager_config
624
-
625
661
def _launch_containers (
626
662
self ,
627
663
pulsar_submit_container : CoexecutionContainerCommand ,
0 commit comments