lsst-ctrl-bps-panda 29.2025.3500__tar.gz → 29.2025.3800__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lsst_ctrl_bps_panda-29.2025.3500/python/lsst_ctrl_bps_panda.egg-info → lsst_ctrl_bps_panda-29.2025.3800}/PKG-INFO +1 -1
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/panda_service.py +1 -1
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/utils.py +17 -25
- lsst_ctrl_bps_panda-29.2025.3800/python/lsst/ctrl/bps/panda/version.py +2 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800/python/lsst_ctrl_bps_panda.egg-info}/PKG-INFO +1 -1
- lsst_ctrl_bps_panda-29.2025.3500/python/lsst/ctrl/bps/panda/version.py +0 -2
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/COPYRIGHT +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/LICENSE +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/README.rst +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/bsd_license.txt +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/gpl-v3.0.txt +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/pyproject.toml +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/__init__.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/cli/__init__.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/cli/cmd/__init__.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/cli/cmd/panda_auth_commands.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/cli/panda_auth.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/cmd_line_embedder.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/conf_example/example_panda_SLAC.yaml +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/conf_example/pipelines_check_idf.yaml +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/conf_example/test_idf.yaml +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/conf_example/test_sdf.yaml +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/conf_example/test_usdf.yaml +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/constants.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/edgenode/__init__.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/edgenode/build_cmd_line_decoder.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/edgenode/cmd_line_decoder.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/panda_auth_drivers.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst/ctrl/bps/panda/panda_auth_utils.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst_ctrl_bps_panda.egg-info/SOURCES.txt +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst_ctrl_bps_panda.egg-info/dependency_links.txt +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst_ctrl_bps_panda.egg-info/requires.txt +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst_ctrl_bps_panda.egg-info/top_level.txt +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/python/lsst_ctrl_bps_panda.egg-info/zip-safe +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/setup.cfg +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/tests/test_cmd_line_decoder.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/tests/test_cmd_line_embedder.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/tests/test_panda_auth_utils.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/tests/test_panda_service.py +0 -0
- {lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/tests/test_utils.py +0 -0
|
@@ -193,7 +193,7 @@ class PanDAService(BaseWmsService):
|
|
|
193
193
|
run=head["name"],
|
|
194
194
|
state=WmsStates.UNKNOWN,
|
|
195
195
|
total_number_jobs=0,
|
|
196
|
-
job_state_counts=
|
|
196
|
+
job_state_counts=dict.fromkeys(WmsStates, 0),
|
|
197
197
|
job_summary={},
|
|
198
198
|
run_summary="",
|
|
199
199
|
exit_code_summary=[],
|
|
@@ -48,7 +48,6 @@ import uuid
|
|
|
48
48
|
import idds.common.utils as idds_utils
|
|
49
49
|
import pandaclient.idds_api
|
|
50
50
|
from idds.doma.workflowv2.domapandawork import DomaPanDAWork
|
|
51
|
-
from idds.doma.workflowv2.domatree import DomaTree
|
|
52
51
|
from idds.workflowv2.workflow import AndCondition
|
|
53
52
|
from idds.workflowv2.workflow import Workflow as IDDS_client_workflow
|
|
54
53
|
|
|
@@ -636,27 +635,18 @@ def add_idds_work(config, generic_workflow, idds_workflow):
|
|
|
636
635
|
name_works = {}
|
|
637
636
|
order_id_map = {}
|
|
638
637
|
job_name_to_order_id_map = {}
|
|
639
|
-
doma_tree = None
|
|
640
638
|
order_id_map_file = None
|
|
641
639
|
if enable_event_service:
|
|
642
640
|
enable_event_service = enable_event_service.split(",")
|
|
643
641
|
enable_event_service = [i.strip() for i in enable_event_service]
|
|
644
642
|
if enable_job_name_map:
|
|
645
|
-
doma_tree = DomaTree(name=generic_workflow.name)
|
|
646
643
|
_, order_id_map_filename = config.search(
|
|
647
644
|
"orderIdMapFilename", opt={"default": PANDA_DEFAULT_ORDER_ID_MAP_FILE}
|
|
648
645
|
)
|
|
649
646
|
order_id_map_file = os.path.join(submit_path, order_id_map_filename)
|
|
650
|
-
order_id_map = doma_tree.order_jobs_from_generic_workflow(generic_workflow, order_id_map_file)
|
|
651
647
|
order_id_map_files = {"orderIdMapFilename": order_id_map_file}
|
|
652
648
|
files_to_pre_stage.update(order_id_map_files)
|
|
653
649
|
|
|
654
|
-
# job name to order id map
|
|
655
|
-
job_name_to_order_id_map = {
|
|
656
|
-
label: {job_name: order_id for order_id, job_name in orders.items()}
|
|
657
|
-
for label, orders in order_id_map.items()
|
|
658
|
-
}
|
|
659
|
-
|
|
660
650
|
# To avoid dying due to optimizing number of times through workflow,
|
|
661
651
|
# catch dependency issues to loop through again later.
|
|
662
652
|
jobs_with_dependency_issues = {}
|
|
@@ -672,12 +662,18 @@ def add_idds_work(config, generic_workflow, idds_workflow):
|
|
|
672
662
|
# Assume jobs with same label share config values
|
|
673
663
|
for job_label in generic_workflow.labels:
|
|
674
664
|
_LOG.debug("job_label = %s", job_label)
|
|
665
|
+
|
|
666
|
+
if enable_job_name_map:
|
|
667
|
+
order_id_map[job_label] = {}
|
|
668
|
+
job_name_to_order_id_map[job_label] = {}
|
|
669
|
+
|
|
675
670
|
# Add each job with a particular label to a corresponding PanDA task
|
|
676
671
|
# A PanDA task has a limit on number of jobs, so break into multiple
|
|
677
672
|
# PanDA tasks if needed.
|
|
678
673
|
job_count = 0 # Number of jobs in idds task used for task chunking
|
|
679
674
|
task_chunk = 1 # Task chunk number within job label used for unique name
|
|
680
675
|
work = None
|
|
676
|
+
order_id = -1
|
|
681
677
|
|
|
682
678
|
# Instead of changing code to make chunks up front and round-robin
|
|
683
679
|
# assign jobs to chunks, for now keeping chunk creation in loop
|
|
@@ -694,16 +690,18 @@ def add_idds_work(config, generic_workflow, idds_workflow):
|
|
|
694
690
|
max_jobs_per_task_this_label,
|
|
695
691
|
)
|
|
696
692
|
for gwjob in jobs_by_label:
|
|
693
|
+
order_id += 1
|
|
694
|
+
pseudo_filename = _make_pseudo_filename(config, gwjob)
|
|
695
|
+
job_to_pseudo_filename[gwjob.name] = pseudo_filename
|
|
696
|
+
if enable_job_name_map:
|
|
697
|
+
order_id_map[job_label][str(order_id)] = pseudo_filename
|
|
698
|
+
job_name_to_order_id_map[job_label][gwjob.name] = str(order_id)
|
|
699
|
+
|
|
697
700
|
job_count += 1
|
|
698
701
|
if job_count > max_jobs_per_task_this_label:
|
|
699
702
|
job_count = 1
|
|
700
703
|
task_chunk += 1
|
|
701
704
|
|
|
702
|
-
order_id = job_count
|
|
703
|
-
job_order_id = gwjob.attrs.get("order_id", None)
|
|
704
|
-
if job_order_id is not None:
|
|
705
|
-
order_id = job_order_id
|
|
706
|
-
|
|
707
705
|
if job_count == 1:
|
|
708
706
|
# Create new PanDA task object
|
|
709
707
|
task_count += 1
|
|
@@ -731,9 +729,6 @@ def add_idds_work(config, generic_workflow, idds_workflow):
|
|
|
731
729
|
if generic_workflow.out_degree(gwjob.name) == 0:
|
|
732
730
|
dag_sink_work.append(work)
|
|
733
731
|
|
|
734
|
-
pseudo_filename = _make_pseudo_filename(config, gwjob)
|
|
735
|
-
job_to_pseudo_filename[gwjob.name] = pseudo_filename
|
|
736
|
-
|
|
737
732
|
if enable_qnode_map:
|
|
738
733
|
job_name_PH = "PH:" + gwjob.name
|
|
739
734
|
job_to_pseudo_filename[gwjob.name] = job_name_PH
|
|
@@ -829,15 +824,12 @@ def add_idds_work(config, generic_workflow, idds_workflow):
|
|
|
829
824
|
# trigger the setter function which will validate the dependency_map:
|
|
830
825
|
# 1) check the name length to avoid the the name too long,
|
|
831
826
|
# 2) check to avoid duplicated items.
|
|
832
|
-
work.dependency_map =
|
|
827
|
+
sorted_dep_map = sorted(work.dependency_map, key=lambda x: x["order_id"])
|
|
828
|
+
work.dependency_map = sorted_dep_map
|
|
833
829
|
|
|
834
830
|
if enable_job_name_map:
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
job_name = order_id_map[label_name][order_id]
|
|
838
|
-
if job_name in job_to_pseudo_filename:
|
|
839
|
-
order_id_map[label_name][order_id] = job_to_pseudo_filename[job_name]
|
|
840
|
-
doma_tree.save_order_id_map(order_id_map, order_id_map_file)
|
|
831
|
+
with open(order_id_map_file, "w") as f:
|
|
832
|
+
json.dump(order_id_map, f)
|
|
841
833
|
|
|
842
834
|
return files_to_pre_stage, dag_sink_work, task_count
|
|
843
835
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/tests/test_cmd_line_decoder.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/tests/test_panda_auth_utils.py
RENAMED
|
File without changes
|
{lsst_ctrl_bps_panda-29.2025.3500 → lsst_ctrl_bps_panda-29.2025.3800}/tests/test_panda_service.py
RENAMED
|
File without changes
|
|
File without changes
|