panda-server-source 0.8.0__py3-none-any.whl
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.
- panda_server_source-0.8.0.dist-info/METADATA +55 -0
- panda_server_source-0.8.0.dist-info/RECORD +375 -0
- panda_server_source-0.8.0.dist-info/WHEEL +4 -0
- panda_server_source-0.8.0.dist-info/licenses/LICENSE.txt +202 -0
- pandajedi/__init__.py +0 -0
- pandajedi/jedibrokerage/AtlasAnalJobBroker.py +2343 -0
- pandajedi/jedibrokerage/AtlasBrokerUtils.py +1292 -0
- pandajedi/jedibrokerage/AtlasProdJobBroker.py +2064 -0
- pandajedi/jedibrokerage/AtlasProdTaskBroker.py +629 -0
- pandajedi/jedibrokerage/GenJobBroker.py +381 -0
- pandajedi/jedibrokerage/JobBrokerBase.py +133 -0
- pandajedi/jedibrokerage/TaskBrokerBase.py +15 -0
- pandajedi/jedibrokerage/__init__.py +0 -0
- pandajedi/jediconfig/__init__.py +0 -0
- pandajedi/jediconfig/jedi_config.py +40 -0
- pandajedi/jedicore/FactoryBase.py +182 -0
- pandajedi/jedicore/Interaction.py +433 -0
- pandajedi/jedicore/JediDBProxy.py +56 -0
- pandajedi/jedicore/JediDBProxyPool.py +37 -0
- pandajedi/jedicore/JediDBSchemaInfo.py +17 -0
- pandajedi/jedicore/JediException.py +13 -0
- pandajedi/jedicore/JediTaskBuffer.py +984 -0
- pandajedi/jedicore/JediTaskBufferInterface.py +50 -0
- pandajedi/jedicore/MsgWrapper.py +124 -0
- pandajedi/jedicore/ProcessUtils.py +34 -0
- pandajedi/jedicore/SiteCandidate.py +90 -0
- pandajedi/jedicore/ThreadUtils.py +205 -0
- pandajedi/jedicore/__init__.py +0 -0
- pandajedi/jediddm/AtlasDDMClient.py +1708 -0
- pandajedi/jediddm/DDMClientBase.py +16 -0
- pandajedi/jediddm/DDMInterface.py +83 -0
- pandajedi/jediddm/GenDDMClient.py +17 -0
- pandajedi/jediddm/__init__.py +0 -0
- pandajedi/jedidog/AtlasAnalWatchDog.py +648 -0
- pandajedi/jedidog/AtlasDataCarouselWatchDog.py +189 -0
- pandajedi/jedidog/AtlasDataLocalityUpdaterWatchDog.py +215 -0
- pandajedi/jedidog/AtlasProdWatchDog.py +443 -0
- pandajedi/jedidog/AtlasQueueFillerWatchDog.py +800 -0
- pandajedi/jedidog/AtlasTaskWithholderWatchDog.py +245 -0
- pandajedi/jedidog/AtlasWorkflowManagerWatchDog.py +63 -0
- pandajedi/jedidog/GenWatchDog.py +21 -0
- pandajedi/jedidog/JumboWatchDog.py +147 -0
- pandajedi/jedidog/TypicalWatchDogBase.py +122 -0
- pandajedi/jedidog/WatchDogBase.py +53 -0
- pandajedi/jedidog/__init__.py +0 -0
- pandajedi/jediexec/reniceJEDI.py +25 -0
- pandajedi/jedigen/AtlasTaskGenerator.py +110 -0
- pandajedi/jedigen/TaskGeneratorBase.py +15 -0
- pandajedi/jedigen/__init__.py +0 -0
- pandajedi/jedimsgprocessor/__init__.py +0 -0
- pandajedi/jedimsgprocessor/ai_parameter_adjuster_msg_processor +71 -0
- pandajedi/jedimsgprocessor/atlas_idds_msg_processor.py +66 -0
- pandajedi/jedimsgprocessor/base_msg_processor.py +33 -0
- pandajedi/jedimsgprocessor/forwarding_msg_processor.py +29 -0
- pandajedi/jedimsgprocessor/hpo_msg_processor.py +93 -0
- pandajedi/jedimsgprocessor/jedi_contents_feeder_msg_processor.py +63 -0
- pandajedi/jedimsgprocessor/jedi_job_generator_msg_processor.py +185 -0
- pandajedi/jedimsgprocessor/jedi_post_processor_msg_processor.py +82 -0
- pandajedi/jedimsgprocessor/kafka_msg_processor.py +44 -0
- pandajedi/jedimsgprocessor/panda_callback_msg_processor.py +182 -0
- pandajedi/jedimsgprocessor/panda_to_jedi_msg_processor.py +74 -0
- pandajedi/jedimsgprocessor/processing_msg_processor.py +134 -0
- pandajedi/jedimsgprocessor/status_report_msg_processor.py +129 -0
- pandajedi/jedimsgprocessor/tape_carousel_msg_processor.py +118 -0
- pandajedi/jedimsgprocessor/workflow_manager_msg_processor.py +89 -0
- pandajedi/jediorder/ContentsFeeder.py +785 -0
- pandajedi/jediorder/JediDaemon.py +27 -0
- pandajedi/jediorder/JediKnight.py +55 -0
- pandajedi/jediorder/JediMaster.py +238 -0
- pandajedi/jediorder/JediMsgProcessor.py +32 -0
- pandajedi/jediorder/JobBroker.py +33 -0
- pandajedi/jediorder/JobGenerator.py +2763 -0
- pandajedi/jediorder/JobSplitter.py +308 -0
- pandajedi/jediorder/JobThrottler.py +28 -0
- pandajedi/jediorder/PostProcessor.py +166 -0
- pandajedi/jediorder/TaskBroker.py +268 -0
- pandajedi/jediorder/TaskCommando.py +334 -0
- pandajedi/jediorder/TaskGenerator.py +17 -0
- pandajedi/jediorder/TaskRefiner.py +611 -0
- pandajedi/jediorder/TaskSetupper.py +17 -0
- pandajedi/jediorder/WatchDog.py +79 -0
- pandajedi/jediorder/__init__.py +0 -0
- pandajedi/jedipprocess/AtlasAnalPostProcessor.py +404 -0
- pandajedi/jedipprocess/AtlasPostProcessorUtils.py +50 -0
- pandajedi/jedipprocess/AtlasProdPostProcessor.py +178 -0
- pandajedi/jedipprocess/GenPostProcessor.py +35 -0
- pandajedi/jedipprocess/MailTemplates.py +185 -0
- pandajedi/jedipprocess/PostProcessorBase.py +269 -0
- pandajedi/jedipprocess/__init__.py +0 -0
- pandajedi/jedirefine/AtlasAnalTaskRefiner.py +259 -0
- pandajedi/jedirefine/AtlasProdTaskRefiner.py +162 -0
- pandajedi/jedirefine/GenTaskRefiner.py +61 -0
- pandajedi/jedirefine/RefinerUtils.py +154 -0
- pandajedi/jedirefine/TaskRefinerBase.py +996 -0
- pandajedi/jedirefine/__init__.py +0 -0
- pandajedi/jedisetup/AtlasTaskSetupper.py +309 -0
- pandajedi/jedisetup/GenTaskSetupper.py +16 -0
- pandajedi/jedisetup/SimpleTaskSetupper.py +152 -0
- pandajedi/jedisetup/TaskSetupperBase.py +15 -0
- pandajedi/jedisetup/__init__.py +0 -0
- pandajedi/jeditest/SchemaChecker.py +41 -0
- pandajedi/jeditest/addContWoSoTask.py +54 -0
- pandajedi/jeditest/addDataCarouselRequest.py +47 -0
- pandajedi/jeditest/addEventServiceTask.py +101 -0
- pandajedi/jeditest/addHpoTask.py +81 -0
- pandajedi/jeditest/addIDDSStageInRequest.py +56 -0
- pandajedi/jeditest/addNonAtlasTask.py +71 -0
- pandajedi/jeditest/addNonAtlasTaskEnc.py +64 -0
- pandajedi/jeditest/addTestTask.py +124 -0
- pandajedi/jeditest/addTestTaskParamToDEFT.py +70 -0
- pandajedi/jeditest/addTestTaskWithMerger.py +97 -0
- pandajedi/jeditest/brokerTest.py +78 -0
- pandajedi/jeditest/cancelDataCarouselRequest.py +35 -0
- pandajedi/jeditest/contentsFeederTest.py +28 -0
- pandajedi/jeditest/contentsFeederTestWithTask.py +18 -0
- pandajedi/jeditest/ddmTest.py +4 -0
- pandajedi/jeditest/jobGenForOneTask.py +38 -0
- pandajedi/jeditest/jobGeneratorTest.py +43 -0
- pandajedi/jeditest/jobSplitterTest.py +104 -0
- pandajedi/jeditest/jobThrottlerTest.py +22 -0
- pandajedi/jeditest/msgProcessorTest.py +9 -0
- pandajedi/jeditest/postProcessorTest.py +18 -0
- pandajedi/jeditest/resubmitDataCarouselRequest.py +35 -0
- pandajedi/jeditest/resubmitTaskParam.py +20 -0
- pandajedi/jeditest/taskBrokerTest.py +22 -0
- pandajedi/jeditest/taskBrokerTestWithTask.py +38 -0
- pandajedi/jeditest/taskBufferTest.py +5 -0
- pandajedi/jeditest/taskCommandoTest.py +28 -0
- pandajedi/jeditest/taskRefinerTest.py +30 -0
- pandajedi/jeditest/testOneTaskToRefine.py +49 -0
- pandajedi/jeditest/testOneTaskToTaskBroker.py +42 -0
- pandajedi/jeditest/testPandaDDMMap.py +62 -0
- pandajedi/jeditest/updateDataCarouselRequestParams.py +50 -0
- pandajedi/jeditest/watchDogTest.py +25 -0
- pandajedi/jeditest/workQueueTest.py +22 -0
- pandajedi/jedithrottle/AtlasAnalJobThrottler.py +19 -0
- pandajedi/jedithrottle/AtlasProdJobThrottler.py +18 -0
- pandajedi/jedithrottle/GenJobThrottler.py +26 -0
- pandajedi/jedithrottle/JobThrottlerBase.py +496 -0
- pandajedi/jedithrottle/__init__.py +0 -0
- pandaserver/__init__.py +0 -0
- pandaserver/api/__init__.py +0 -0
- pandaserver/api/v1/__init__.py +0 -0
- pandaserver/api/v1/common.py +339 -0
- pandaserver/api/v1/credential_management_api.py +372 -0
- pandaserver/api/v1/data_carousel_api.py +264 -0
- pandaserver/api/v1/event_api.py +269 -0
- pandaserver/api/v1/file_server_api.py +942 -0
- pandaserver/api/v1/harvester_api.py +445 -0
- pandaserver/api/v1/http_client.py +166 -0
- pandaserver/api/v1/idds_api.py +180 -0
- pandaserver/api/v1/job_api.py +463 -0
- pandaserver/api/v1/metaconfig_api.py +122 -0
- pandaserver/api/v1/pilot_api.py +895 -0
- pandaserver/api/v1/statistics_api.py +207 -0
- pandaserver/api/v1/system_api.py +186 -0
- pandaserver/api/v1/task_api.py +1520 -0
- pandaserver/api/v1/tests/__init__.py +0 -0
- pandaserver/api/v1/tests/credential_management_api_tests.py +116 -0
- pandaserver/api/v1/tests/data_carousel_api_tests.py +82 -0
- pandaserver/api/v1/tests/harvester_api_tests.py +188 -0
- pandaserver/api/v1/tests/idds_api_tests.py +45 -0
- pandaserver/api/v1/tests/job_api_tests.py +112 -0
- pandaserver/api/v1/tests/pilot_api_tests.py +154 -0
- pandaserver/api/v1/tests/statistics_api_tests.py +104 -0
- pandaserver/api/v1/tests/system_api_tests.py +58 -0
- pandaserver/api/v1/tests/task_api_tests.py +590 -0
- pandaserver/api/v1/version.py +2 -0
- pandaserver/api/v1/workflow_api.py +136 -0
- pandaserver/brokerage/SiteMapper.py +406 -0
- pandaserver/brokerage/__init__.py +0 -0
- pandaserver/brokerage/broker.py +272 -0
- pandaserver/config/__init__.py +0 -0
- pandaserver/config/config_utils.py +15 -0
- pandaserver/config/daemon_config.py +29 -0
- pandaserver/config/mcp_config.py +38 -0
- pandaserver/config/panda_config.py +233 -0
- pandaserver/configurator/Carbon.py +65 -0
- pandaserver/configurator/Configurator.py +908 -0
- pandaserver/configurator/__init__.py +0 -0
- pandaserver/configurator/aux.py +73 -0
- pandaserver/daemons/__init__.py +0 -0
- pandaserver/daemons/master.py +110 -0
- pandaserver/daemons/master_systemd.py +79 -0
- pandaserver/daemons/scripts/__init__.py +0 -0
- pandaserver/daemons/scripts/add_main.py +264 -0
- pandaserver/daemons/scripts/add_sub.py +221 -0
- pandaserver/daemons/scripts/cache_pilots.py +47 -0
- pandaserver/daemons/scripts/cache_schedconfig.py +286 -0
- pandaserver/daemons/scripts/carbon.py +50 -0
- pandaserver/daemons/scripts/configurator.py +94 -0
- pandaserver/daemons/scripts/copyArchive.py +1387 -0
- pandaserver/daemons/scripts/datasetManager.py +1154 -0
- pandaserver/daemons/scripts/dummy_test.py +25 -0
- pandaserver/daemons/scripts/evpPD2P.py +144 -0
- pandaserver/daemons/scripts/hs_scrapers.py +264 -0
- pandaserver/daemons/scripts/metric_collector.py +927 -0
- pandaserver/daemons/scripts/panda_activeusers_query.py +80 -0
- pandaserver/daemons/scripts/pilotStreaming.py +109 -0
- pandaserver/daemons/scripts/process_workflow_files_daemon.py +166 -0
- pandaserver/daemons/scripts/recover_lost_files_daemon.py +177 -0
- pandaserver/daemons/scripts/task_evaluator.py +405 -0
- pandaserver/daemons/scripts/tmpwatch.py +70 -0
- pandaserver/daemons/scripts/worker_synchronization.py +97 -0
- pandaserver/daemons/utils.py +753 -0
- pandaserver/dataservice/DataServiceUtils.py +323 -0
- pandaserver/dataservice/ErrorCode.py +25 -0
- pandaserver/dataservice/RecoverLostFilesCore.py +322 -0
- pandaserver/dataservice/__init__.py +0 -0
- pandaserver/dataservice/activator.py +79 -0
- pandaserver/dataservice/adder_atlas_plugin.py +1106 -0
- pandaserver/dataservice/adder_dummy_plugin.py +31 -0
- pandaserver/dataservice/adder_gen.py +954 -0
- pandaserver/dataservice/adder_plugin_base.py +27 -0
- pandaserver/dataservice/adder_result.py +75 -0
- pandaserver/dataservice/adder_simple_plugin.py +160 -0
- pandaserver/dataservice/closer.py +247 -0
- pandaserver/dataservice/closer_atlas_plugin.py +90 -0
- pandaserver/dataservice/ddm.py +1381 -0
- pandaserver/dataservice/ddm_handler.py +95 -0
- pandaserver/dataservice/dyn_data_distributer.py +824 -0
- pandaserver/dataservice/event_lookup_client_ei.py +77 -0
- pandaserver/dataservice/event_picker.py +268 -0
- pandaserver/dataservice/finisher.py +194 -0
- pandaserver/dataservice/setupper.py +225 -0
- pandaserver/dataservice/setupper_atlas_plugin.py +1851 -0
- pandaserver/dataservice/setupper_dummy_plugin.py +47 -0
- pandaserver/dataservice/setupper_plugin_base.py +67 -0
- pandaserver/jobdispatcher/DispatcherUtils.py +35 -0
- pandaserver/jobdispatcher/ErrorCode.py +19 -0
- pandaserver/jobdispatcher/JobDispatcher.py +1625 -0
- pandaserver/jobdispatcher/Protocol.py +443 -0
- pandaserver/jobdispatcher/Watcher.py +186 -0
- pandaserver/jobdispatcher/__init__.py +0 -0
- pandaserver/pandamcp/__init__.py +0 -0
- pandaserver/pandamcp/mcp_main.py +56 -0
- pandaserver/pandamcp/mcp_test_client.py +95 -0
- pandaserver/pandamcp/mcp_utils.py +74 -0
- pandaserver/proxycache/__init__.py +0 -0
- pandaserver/proxycache/panda_proxy_cache.py +240 -0
- pandaserver/proxycache/token_cache.py +141 -0
- pandaserver/server/.gacl +6 -0
- pandaserver/server/panda.py +539 -0
- pandaserver/srvcore/CoreUtils.py +572 -0
- pandaserver/srvcore/MailUtils.py +106 -0
- pandaserver/srvcore/__init__.py +0 -0
- pandaserver/srvcore/allowed_methods.py +100 -0
- pandaserver/srvcore/oidc_utils.py +152 -0
- pandaserver/srvcore/panda_request.py +196 -0
- pandaserver/srvcore/srv_msg_utils.py +42 -0
- pandaserver/taskbuffer/ConBridge.py +513 -0
- pandaserver/taskbuffer/DBProxyPool.py +95 -0
- pandaserver/taskbuffer/DataCarousel.py +3053 -0
- pandaserver/taskbuffer/DatasetSpec.py +137 -0
- pandaserver/taskbuffer/DdmSpec.py +201 -0
- pandaserver/taskbuffer/ErrorCode.py +87 -0
- pandaserver/taskbuffer/EventServiceUtils.py +396 -0
- pandaserver/taskbuffer/FileSpec.py +290 -0
- pandaserver/taskbuffer/GlobalShares.py +244 -0
- pandaserver/taskbuffer/HarvesterMetricsSpec.py +92 -0
- pandaserver/taskbuffer/Initializer.py +82 -0
- pandaserver/taskbuffer/InputChunk.py +1080 -0
- pandaserver/taskbuffer/JediCacheSpec.py +57 -0
- pandaserver/taskbuffer/JediDatasetSpec.py +588 -0
- pandaserver/taskbuffer/JediFileSpec.py +242 -0
- pandaserver/taskbuffer/JediTaskSpec.py +1687 -0
- pandaserver/taskbuffer/JobSpec.py +1006 -0
- pandaserver/taskbuffer/JobUtils.py +232 -0
- pandaserver/taskbuffer/NucleusSpec.py +116 -0
- pandaserver/taskbuffer/OraDBProxy.py +174 -0
- pandaserver/taskbuffer/PanDAMsgProcessor.py +8 -0
- pandaserver/taskbuffer/PandaDBSchemaInfo.py +18 -0
- pandaserver/taskbuffer/ParseJobXML.py +350 -0
- pandaserver/taskbuffer/PickleFileSpec.py +18 -0
- pandaserver/taskbuffer/PickleJobSpec.py +25 -0
- pandaserver/taskbuffer/PrioUtil.py +40 -0
- pandaserver/taskbuffer/ProcessGroups.py +111 -0
- pandaserver/taskbuffer/ResourceSpec.py +175 -0
- pandaserver/taskbuffer/SQLDumper.py +37 -0
- pandaserver/taskbuffer/SQLManager.py +60 -0
- pandaserver/taskbuffer/SiteSpec.py +304 -0
- pandaserver/taskbuffer/SupErrors.py +10 -0
- pandaserver/taskbuffer/TaskBuffer.py +2882 -0
- pandaserver/taskbuffer/TaskBufferInterface.py +163 -0
- pandaserver/taskbuffer/Utils.py +848 -0
- pandaserver/taskbuffer/WorkQueue.py +227 -0
- pandaserver/taskbuffer/WorkQueueMapper.py +203 -0
- pandaserver/taskbuffer/WorkerSpec.py +143 -0
- pandaserver/taskbuffer/WrappedCursor.py +487 -0
- pandaserver/taskbuffer/WrappedPickle.py +88 -0
- pandaserver/taskbuffer/WrappedPostgresConn.py +24 -0
- pandaserver/taskbuffer/__init__.py +0 -0
- pandaserver/taskbuffer/db_proxy_mods/OraDBProxy_structure.png +0 -0
- pandaserver/taskbuffer/db_proxy_mods/__init__.py +7 -0
- pandaserver/taskbuffer/db_proxy_mods/base_module.py +841 -0
- pandaserver/taskbuffer/db_proxy_mods/data_carousel_module.py +772 -0
- pandaserver/taskbuffer/db_proxy_mods/entity_module.py +3804 -0
- pandaserver/taskbuffer/db_proxy_mods/job_complex_module.py +5661 -0
- pandaserver/taskbuffer/db_proxy_mods/job_standalone_module.py +2640 -0
- pandaserver/taskbuffer/db_proxy_mods/metrics_module.py +874 -0
- pandaserver/taskbuffer/db_proxy_mods/misc_standalone_module.py +4272 -0
- pandaserver/taskbuffer/db_proxy_mods/task_complex_module.py +6172 -0
- pandaserver/taskbuffer/db_proxy_mods/task_event_module.py +4953 -0
- pandaserver/taskbuffer/db_proxy_mods/task_standalone_module.py +4999 -0
- pandaserver/taskbuffer/db_proxy_mods/task_utils_module.py +2063 -0
- pandaserver/taskbuffer/db_proxy_mods/worker_module.py +1944 -0
- pandaserver/taskbuffer/db_proxy_mods/workflow_module.py +832 -0
- pandaserver/taskbuffer/retryModule.py +552 -0
- pandaserver/taskbuffer/task_split_rules.py +308 -0
- pandaserver/taskbuffer/workflow_processor.py +249 -0
- pandaserver/taskbuffer/wrapped_oracle_conn.py +18 -0
- pandaserver/test/SchemaChecker.py +40 -0
- pandaserver/test/__init__.py +0 -0
- pandaserver/test/banUser.py +43 -0
- pandaserver/test/boostPrio.py +19 -0
- pandaserver/test/boostUser.py +35 -0
- pandaserver/test/callbackDDM.py +11 -0
- pandaserver/test/daod_on_demand.py +95 -0
- pandaserver/test/finishJob.py +184 -0
- pandaserver/test/finishTaskJEDI.py +11 -0
- pandaserver/test/getJobs.py +53 -0
- pandaserver/test/killJob.py +79 -0
- pandaserver/test/killJobLowPrio.py +99 -0
- pandaserver/test/killJobsInTask.py +56 -0
- pandaserver/test/killTask.py +80 -0
- pandaserver/test/killTaskJEDI.py +11 -0
- pandaserver/test/killUser.py +83 -0
- pandaserver/test/lsst/README.txt +7 -0
- pandaserver/test/lsst/lsstSubmit.py +139 -0
- pandaserver/test/lsst/lsstSubmitMERGEtest.py +141 -0
- pandaserver/test/lsst/lsstSubmitPhosim332.py +53 -0
- pandaserver/test/lsst/prepare-client-tarball-from-bigpanda-server.sh +41 -0
- pandaserver/test/reassignJobs.py +17 -0
- pandaserver/test/reassignSite.py +82 -0
- pandaserver/test/reassignTask.py +117 -0
- pandaserver/test/reassignWaiting.py +39 -0
- pandaserver/test/recoverLostFiles.py +7 -0
- pandaserver/test/reloadInputDS.py +51 -0
- pandaserver/test/sendCommandToJob.py +26 -0
- pandaserver/test/setDebugMode.py +38 -0
- pandaserver/test/setPriority.py +28 -0
- pandaserver/test/testEvgen.py +60 -0
- pandaserver/test/testEvgen17.py +58 -0
- pandaserver/test/testG4sim.py +81 -0
- pandaserver/test/testG4sim17.py +90 -0
- pandaserver/test/testGlobalShares.py +131 -0
- pandaserver/test/testReco.py +103 -0
- pandaserver/test/testSimulReco14.py +98 -0
- pandaserver/test/testSiteMap.py +26 -0
- pandaserver/test/testUpdateWorkerPilotStatus.py +9 -0
- pandaserver/userinterface/Client.py +1686 -0
- pandaserver/userinterface/UserIF.py +1799 -0
- pandaserver/userinterface/__init__.py +0 -0
- pandaserver/workflow/__init__.py +0 -0
- pandaserver/workflow/data_handler_plugins/base_data_handler.py +48 -0
- pandaserver/workflow/data_handler_plugins/ddm_collection_data_handler.py +100 -0
- pandaserver/workflow/data_handler_plugins/panda_task_data_handler.py +140 -0
- pandaserver/workflow/pcwl_test.py +122 -0
- pandaserver/workflow/pcwl_utils.py +384 -0
- pandaserver/workflow/psnakemake_container.json +68 -0
- pandaserver/workflow/psnakemake_task.json +62 -0
- pandaserver/workflow/psnakemake_test.py +60 -0
- pandaserver/workflow/snakeparser/__init__.py +3 -0
- pandaserver/workflow/snakeparser/extensions.py +74 -0
- pandaserver/workflow/snakeparser/log.py +53 -0
- pandaserver/workflow/snakeparser/names.py +3 -0
- pandaserver/workflow/snakeparser/parser.py +332 -0
- pandaserver/workflow/snakeparser/utils.py +29 -0
- pandaserver/workflow/step_handler_plugins/base_step_handler.py +85 -0
- pandaserver/workflow/step_handler_plugins/panda_task_step_handler.py +280 -0
- pandaserver/workflow/workflow_base.py +531 -0
- pandaserver/workflow/workflow_core.py +1974 -0
- pandaserver/workflow/workflow_core_smoketest.py +388 -0
- pandaserver/workflow/workflow_parser.py +222 -0
- pandaserver/workflow/workflow_utils.py +1047 -0
|
@@ -0,0 +1,984 @@
|
|
|
1
|
+
# DB API for JEDI
|
|
2
|
+
|
|
3
|
+
from pandacommon.pandalogger.PandaLogger import PandaLogger
|
|
4
|
+
|
|
5
|
+
from pandajedi.jediconfig import jedi_config
|
|
6
|
+
from pandaserver.taskbuffer import TaskBuffer
|
|
7
|
+
|
|
8
|
+
from . import JediDBProxyPool
|
|
9
|
+
from .Interaction import CommandReceiveInterface
|
|
10
|
+
|
|
11
|
+
logger = PandaLogger().getLogger(__name__.split(".")[-1])
|
|
12
|
+
|
|
13
|
+
# use customized proxy pool
|
|
14
|
+
TaskBuffer.DBProxyPool = JediDBProxyPool.DBProxyPool
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class JediTaskBuffer(TaskBuffer.TaskBuffer, CommandReceiveInterface):
|
|
18
|
+
# constructor
|
|
19
|
+
def __init__(self, conn, nDBConnection=1):
|
|
20
|
+
CommandReceiveInterface.__init__(self, conn)
|
|
21
|
+
TaskBuffer.TaskBuffer.__init__(self)
|
|
22
|
+
TaskBuffer.TaskBuffer.init(self, jedi_config.db.dbhost, jedi_config.db.dbpasswd, nDBConnection=nDBConnection)
|
|
23
|
+
logger.debug("__init__")
|
|
24
|
+
|
|
25
|
+
# query an SQL
|
|
26
|
+
def querySQL(self, sql, varMap, arraySize=1000):
|
|
27
|
+
with self.proxyPool.get() as proxy:
|
|
28
|
+
return proxy.querySQLS(sql, varMap, arraySize)[1]
|
|
29
|
+
|
|
30
|
+
# get work queue map
|
|
31
|
+
def getWorkQueueMap(self):
|
|
32
|
+
with self.proxyPool.get() as proxy:
|
|
33
|
+
return proxy.getWorkQueueMap()
|
|
34
|
+
|
|
35
|
+
# get the list of datasets to feed contents to DB
|
|
36
|
+
def getDatasetsToFeedContents_JEDI(self, vo=None, prodSourceLabel=None, task_id=None, force_read=False):
|
|
37
|
+
with self.proxyPool.get() as proxy:
|
|
38
|
+
return proxy.getDatasetsToFeedContents_JEDI(vo, prodSourceLabel, task_id, force_read)
|
|
39
|
+
|
|
40
|
+
# feed files to the JEDI contents table
|
|
41
|
+
def insertFilesForDataset_JEDI(
|
|
42
|
+
self,
|
|
43
|
+
datasetSpec,
|
|
44
|
+
fileMap,
|
|
45
|
+
datasetState,
|
|
46
|
+
stateUpdateTime,
|
|
47
|
+
nEventsPerFile,
|
|
48
|
+
nEventsPerJob,
|
|
49
|
+
maxAttempt,
|
|
50
|
+
firstEventNumber,
|
|
51
|
+
nMaxFiles,
|
|
52
|
+
nMaxEvents,
|
|
53
|
+
useScout,
|
|
54
|
+
fileList,
|
|
55
|
+
useFilesWithNewAttemptNr,
|
|
56
|
+
nFilesPerJob,
|
|
57
|
+
nEventsPerRange,
|
|
58
|
+
nChunksForScout,
|
|
59
|
+
includePatt,
|
|
60
|
+
excludePatt,
|
|
61
|
+
xmlConfig,
|
|
62
|
+
noWaitParent,
|
|
63
|
+
parent_tid,
|
|
64
|
+
pid,
|
|
65
|
+
maxFailure,
|
|
66
|
+
useRealNumEvents,
|
|
67
|
+
respectLB,
|
|
68
|
+
tgtNumEventsPerJob,
|
|
69
|
+
skipFilesUsedBy,
|
|
70
|
+
ramCount,
|
|
71
|
+
taskSpec,
|
|
72
|
+
skipShortInput,
|
|
73
|
+
inputPreStaging,
|
|
74
|
+
order_by,
|
|
75
|
+
maxFileRecords,
|
|
76
|
+
skip_short_output,
|
|
77
|
+
):
|
|
78
|
+
with self.proxyPool.get() as proxy:
|
|
79
|
+
return proxy.insertFilesForDataset_JEDI(
|
|
80
|
+
datasetSpec,
|
|
81
|
+
fileMap,
|
|
82
|
+
datasetState,
|
|
83
|
+
stateUpdateTime,
|
|
84
|
+
nEventsPerFile,
|
|
85
|
+
nEventsPerJob,
|
|
86
|
+
maxAttempt,
|
|
87
|
+
firstEventNumber,
|
|
88
|
+
nMaxFiles,
|
|
89
|
+
nMaxEvents,
|
|
90
|
+
useScout,
|
|
91
|
+
fileList,
|
|
92
|
+
useFilesWithNewAttemptNr,
|
|
93
|
+
nFilesPerJob,
|
|
94
|
+
nEventsPerRange,
|
|
95
|
+
nChunksForScout,
|
|
96
|
+
includePatt,
|
|
97
|
+
excludePatt,
|
|
98
|
+
xmlConfig,
|
|
99
|
+
noWaitParent,
|
|
100
|
+
parent_tid,
|
|
101
|
+
pid,
|
|
102
|
+
maxFailure,
|
|
103
|
+
useRealNumEvents,
|
|
104
|
+
respectLB,
|
|
105
|
+
tgtNumEventsPerJob,
|
|
106
|
+
skipFilesUsedBy,
|
|
107
|
+
ramCount,
|
|
108
|
+
taskSpec,
|
|
109
|
+
skipShortInput,
|
|
110
|
+
inputPreStaging,
|
|
111
|
+
order_by,
|
|
112
|
+
maxFileRecords,
|
|
113
|
+
skip_short_output,
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
# get files from the JEDI contents table with jediTaskID and/or datasetID
|
|
117
|
+
def getFilesInDatasetWithID_JEDI(self, jediTaskID=None, datasetID=None, nFiles=None, status=None):
|
|
118
|
+
with self.proxyPool.get() as proxy:
|
|
119
|
+
return proxy.getFilesInDatasetWithID_JEDI(jediTaskID, datasetID, nFiles, status)
|
|
120
|
+
|
|
121
|
+
# insert dataset to the JEDI datasets table
|
|
122
|
+
def insertDataset_JEDI(self, datasetSpec):
|
|
123
|
+
with self.proxyPool.get() as proxy:
|
|
124
|
+
return proxy.insertDataset_JEDI(datasetSpec)
|
|
125
|
+
|
|
126
|
+
# update JEDI dataset
|
|
127
|
+
def updateDataset_JEDI(self, datasetSpec, criteria, lockTask=False):
|
|
128
|
+
with self.proxyPool.get() as proxy:
|
|
129
|
+
return proxy.updateDataset_JEDI(datasetSpec, criteria, lockTask)
|
|
130
|
+
|
|
131
|
+
# update JEDI dataset attributes
|
|
132
|
+
def updateDatasetAttributes_JEDI(self, jediTaskID, datasetID, attributes):
|
|
133
|
+
with self.proxyPool.get() as proxy:
|
|
134
|
+
return proxy.updateDatasetAttributes_JEDI(jediTaskID, datasetID, attributes)
|
|
135
|
+
|
|
136
|
+
# get JEDI dataset attributes
|
|
137
|
+
def getDatasetAttributes_JEDI(self, jediTaskID, datasetID, attributes):
|
|
138
|
+
with self.proxyPool.get() as proxy:
|
|
139
|
+
return proxy.getDatasetAttributes_JEDI(jediTaskID, datasetID, attributes)
|
|
140
|
+
|
|
141
|
+
# get JEDI dataset attributes with map
|
|
142
|
+
def getDatasetAttributesWithMap_JEDI(self, jediTaskID, criteria, attributes):
|
|
143
|
+
with self.proxyPool.get() as proxy:
|
|
144
|
+
return proxy.getDatasetAttributesWithMap_JEDI(jediTaskID, criteria, attributes)
|
|
145
|
+
|
|
146
|
+
# get JEDI dataset with jediTaskID and datasetID
|
|
147
|
+
def getDatasetWithID_JEDI(self, jediTaskID, datasetID):
|
|
148
|
+
with self.proxyPool.get() as proxy:
|
|
149
|
+
return proxy.getDatasetWithID_JEDI(jediTaskID, datasetID)
|
|
150
|
+
|
|
151
|
+
# get JEDI datasets with jediTaskID
|
|
152
|
+
def getDatasetsWithJediTaskID_JEDI(self, jediTaskID, datasetTypes=None, getFiles=False):
|
|
153
|
+
with self.proxyPool.get() as proxy:
|
|
154
|
+
retStat, datasetSpecList = proxy.getDatasetsWithJediTaskID_JEDI(jediTaskID, datasetTypes=datasetTypes)
|
|
155
|
+
if retStat is True and getFiles is True:
|
|
156
|
+
for datasetSpec in datasetSpecList:
|
|
157
|
+
# read files
|
|
158
|
+
retStat, fileSpecList = proxy.getFilesInDatasetWithID_JEDI(jediTaskID, datasetSpec.datasetID, None, None)
|
|
159
|
+
if retStat is False:
|
|
160
|
+
break
|
|
161
|
+
for fileSpec in fileSpecList:
|
|
162
|
+
datasetSpec.addFile(fileSpec)
|
|
163
|
+
# return
|
|
164
|
+
return retStat, datasetSpecList
|
|
165
|
+
|
|
166
|
+
# get jediTaskIDs with dataset attributes
|
|
167
|
+
def get_task_ids_with_dataset_attributes(self, dataset_attributes, only_active_tasks=True):
|
|
168
|
+
with self.proxyPool.get() as proxy:
|
|
169
|
+
return proxy.get_task_ids_with_dataset_attributes(dataset_attributes, only_active_tasks)
|
|
170
|
+
|
|
171
|
+
# insert task to the JEDI tasks table
|
|
172
|
+
def insertTask_JEDI(self, taskSpec):
|
|
173
|
+
with self.proxyPool.get() as proxy:
|
|
174
|
+
return proxy.insertTask_JEDI(taskSpec)
|
|
175
|
+
|
|
176
|
+
# update JEDI task
|
|
177
|
+
def updateTask_JEDI(self, taskSpec, criteria, oldStatus=None, updateDEFT=False, insertUnknown=None, setFrozenTime=True, setOldModTime=False):
|
|
178
|
+
with self.proxyPool.get() as proxy:
|
|
179
|
+
return proxy.updateTask_JEDI(taskSpec, criteria, oldStatus, updateDEFT, insertUnknown, setFrozenTime, setOldModTime)
|
|
180
|
+
|
|
181
|
+
# update JEDI task lock
|
|
182
|
+
def updateTaskLock_JEDI(self, jediTaskID):
|
|
183
|
+
with self.proxyPool.get() as proxy:
|
|
184
|
+
return proxy.updateTaskLock_JEDI(jediTaskID)
|
|
185
|
+
|
|
186
|
+
# update JEDI task status by ContentsFeeder
|
|
187
|
+
def updateTaskStatusByContFeeder_JEDI(self, jediTaskID, taskSpec=None, getTaskStatus=False, pid=None, setFrozenTime=True, useWorldCloud=False):
|
|
188
|
+
with self.proxyPool.get() as proxy:
|
|
189
|
+
return proxy.updateTaskStatusByContFeeder_JEDI(jediTaskID, taskSpec, getTaskStatus, pid, setFrozenTime, useWorldCloud)
|
|
190
|
+
|
|
191
|
+
# get JEDI task with jediTaskID
|
|
192
|
+
def getTaskWithID_JEDI(self, jediTaskID, fullFlag=False, lockTask=False, pid=None, lockInterval=None, clearError=False):
|
|
193
|
+
with self.proxyPool.get() as proxy:
|
|
194
|
+
return proxy.getTaskWithID_JEDI(jediTaskID, fullFlag, lockTask, pid, lockInterval, clearError)
|
|
195
|
+
|
|
196
|
+
# get JEDI task and tasks with ID and lock it
|
|
197
|
+
def getTaskDatasetsWithID_JEDI(self, jediTaskID, pid, lockTask=True):
|
|
198
|
+
with self.proxyPool.get() as proxy:
|
|
199
|
+
return proxy.getTaskDatasetsWithID_JEDI(jediTaskID, pid, lockTask)
|
|
200
|
+
|
|
201
|
+
# get JEDI tasks with selection criteria
|
|
202
|
+
def getTaskIDsWithCriteria_JEDI(self, criteria, nTasks=50):
|
|
203
|
+
with self.proxyPool.get() as proxy:
|
|
204
|
+
return proxy.getTaskIDsWithCriteria_JEDI(criteria, nTasks)
|
|
205
|
+
|
|
206
|
+
# get JEDI tasks to be finished
|
|
207
|
+
def getTasksToBeFinished_JEDI(self, vo, prodSourceLabel, pid, nTasks=50, target_tasks=None):
|
|
208
|
+
with self.proxyPool.get() as proxy:
|
|
209
|
+
return proxy.getTasksToBeFinished_JEDI(vo, prodSourceLabel, pid, nTasks, target_tasks)
|
|
210
|
+
|
|
211
|
+
# get tasks to be processed
|
|
212
|
+
def getTasksToBeProcessed_JEDI(
|
|
213
|
+
self,
|
|
214
|
+
pid,
|
|
215
|
+
vo,
|
|
216
|
+
workQueue,
|
|
217
|
+
prodSourceLabel,
|
|
218
|
+
cloudName,
|
|
219
|
+
nTasks=50,
|
|
220
|
+
nFiles=100,
|
|
221
|
+
simTasks=None,
|
|
222
|
+
minPriority=None,
|
|
223
|
+
maxNumJobs=None,
|
|
224
|
+
typicalNumFilesMap=None,
|
|
225
|
+
fullSimulation=False,
|
|
226
|
+
simDatasets=None,
|
|
227
|
+
mergeUnThrottled=None,
|
|
228
|
+
readMinFiles=False,
|
|
229
|
+
numNewTaskWithJumbo=0,
|
|
230
|
+
resource_name=None,
|
|
231
|
+
ignore_lock=False,
|
|
232
|
+
target_tasks=None,
|
|
233
|
+
):
|
|
234
|
+
with self.proxyPool.get() as proxy:
|
|
235
|
+
return proxy.getTasksToBeProcessed_JEDI(
|
|
236
|
+
pid,
|
|
237
|
+
vo,
|
|
238
|
+
workQueue,
|
|
239
|
+
prodSourceLabel,
|
|
240
|
+
cloudName,
|
|
241
|
+
nTasks,
|
|
242
|
+
nFiles,
|
|
243
|
+
simTasks=simTasks,
|
|
244
|
+
minPriority=minPriority,
|
|
245
|
+
maxNumJobs=maxNumJobs,
|
|
246
|
+
typicalNumFilesMap=typicalNumFilesMap,
|
|
247
|
+
fullSimulation=fullSimulation,
|
|
248
|
+
simDatasets=simDatasets,
|
|
249
|
+
mergeUnThrottled=mergeUnThrottled,
|
|
250
|
+
readMinFiles=readMinFiles,
|
|
251
|
+
numNewTaskWithJumbo=numNewTaskWithJumbo,
|
|
252
|
+
resource_name=resource_name,
|
|
253
|
+
ignore_lock=ignore_lock,
|
|
254
|
+
target_tasks=target_tasks,
|
|
255
|
+
)
|
|
256
|
+
|
|
257
|
+
# get tasks to be processed
|
|
258
|
+
def checkWaitingTaskPrio_JEDI(self, vo, workQueue, prodSourceLabel, cloudName, resource_name=None):
|
|
259
|
+
with self.proxyPool.get() as proxy:
|
|
260
|
+
return proxy.getTasksToBeProcessed_JEDI(None, vo, workQueue, prodSourceLabel, cloudName, isPeeking=True, resource_name=resource_name)
|
|
261
|
+
|
|
262
|
+
# get job statistics with work queue
|
|
263
|
+
def getJobStatisticsWithWorkQueue_JEDI(self, vo, prodSourceLabel, minPriority=None):
|
|
264
|
+
with self.proxyPool.get() as proxy:
|
|
265
|
+
return proxy.getJobStatisticsWithWorkQueue_JEDI(vo, prodSourceLabel, minPriority)
|
|
266
|
+
|
|
267
|
+
# get core statistics with VO and prodSourceLabel
|
|
268
|
+
def get_core_statistics(self, vo, prod_source_label):
|
|
269
|
+
with self.proxyPool.get() as proxy:
|
|
270
|
+
return proxy.get_core_statistics(vo, prod_source_label)
|
|
271
|
+
|
|
272
|
+
# get job statistics by global share
|
|
273
|
+
def getJobStatisticsByGlobalShare(self, vo, exclude_rwq=False):
|
|
274
|
+
with self.proxyPool.get() as proxy:
|
|
275
|
+
return proxy.getJobStatisticsByGlobalShare(vo, exclude_rwq)
|
|
276
|
+
|
|
277
|
+
# get whether a gshare rtype combination is active
|
|
278
|
+
def get_active_gshare_rtypes(self, vo):
|
|
279
|
+
with self.proxyPool.get() as proxy:
|
|
280
|
+
return proxy.get_active_gshare_rtypes(vo)
|
|
281
|
+
|
|
282
|
+
# get job statistics by resource type
|
|
283
|
+
def getJobStatisticsByResourceType(self, workqueue):
|
|
284
|
+
with self.proxyPool.get() as proxy:
|
|
285
|
+
return proxy.getJobStatisticsByResourceType(workqueue)
|
|
286
|
+
|
|
287
|
+
# get job statistics by site and resource type
|
|
288
|
+
def getJobStatisticsByResourceTypeSite(self, workqueue):
|
|
289
|
+
with self.proxyPool.get() as proxy:
|
|
290
|
+
return proxy.getJobStatisticsByResourceTypeSite(workqueue)
|
|
291
|
+
|
|
292
|
+
# generate output files for task
|
|
293
|
+
def getOutputFiles_JEDI(
|
|
294
|
+
self,
|
|
295
|
+
jediTaskID,
|
|
296
|
+
provenanceID,
|
|
297
|
+
simul,
|
|
298
|
+
instantiateTmpl=False,
|
|
299
|
+
instantiatedSite=None,
|
|
300
|
+
isUnMerging=False,
|
|
301
|
+
isPrePro=False,
|
|
302
|
+
xmlConfigJob=None,
|
|
303
|
+
siteDsMap=None,
|
|
304
|
+
middleName="",
|
|
305
|
+
registerDatasets=False,
|
|
306
|
+
parallelOutMap=None,
|
|
307
|
+
fileIDPool=[],
|
|
308
|
+
n_files_per_chunk=1,
|
|
309
|
+
bulk_fetch_for_multiple_jobs=False,
|
|
310
|
+
master_dataset_id=None,
|
|
311
|
+
):
|
|
312
|
+
with self.proxyPool.get() as proxy:
|
|
313
|
+
return proxy.getOutputFiles_JEDI(
|
|
314
|
+
jediTaskID,
|
|
315
|
+
provenanceID,
|
|
316
|
+
simul,
|
|
317
|
+
instantiateTmpl,
|
|
318
|
+
instantiatedSite,
|
|
319
|
+
isUnMerging,
|
|
320
|
+
isPrePro,
|
|
321
|
+
xmlConfigJob,
|
|
322
|
+
siteDsMap,
|
|
323
|
+
middleName,
|
|
324
|
+
registerDatasets,
|
|
325
|
+
parallelOutMap,
|
|
326
|
+
fileIDPool,
|
|
327
|
+
n_files_per_chunk,
|
|
328
|
+
bulk_fetch_for_multiple_jobs,
|
|
329
|
+
master_dataset_id,
|
|
330
|
+
)
|
|
331
|
+
|
|
332
|
+
# insert output file templates
|
|
333
|
+
def insertOutputTemplate_JEDI(self, templates):
|
|
334
|
+
with self.proxyPool.get() as proxy:
|
|
335
|
+
return proxy.insertOutputTemplate_JEDI(templates)
|
|
336
|
+
|
|
337
|
+
# insert JobParamsTemplate
|
|
338
|
+
def insertJobParamsTemplate_JEDI(self, jediTaskID, templ):
|
|
339
|
+
with self.proxyPool.get() as proxy:
|
|
340
|
+
return proxy.insertJobParamsTemplate_JEDI(jediTaskID, templ)
|
|
341
|
+
|
|
342
|
+
# insert TaskParams
|
|
343
|
+
def insertTaskParams_JEDI(self, vo, prodSourceLabel, userName, taskName, taskParams, parent_tid=None):
|
|
344
|
+
with self.proxyPool.get() as proxy:
|
|
345
|
+
return proxy.insertTaskParams_JEDI(vo, prodSourceLabel, userName, taskName, taskParams, parent_tid)
|
|
346
|
+
|
|
347
|
+
# reset unused files
|
|
348
|
+
def resetUnusedFiles_JEDI(self, jediTaskID, inputChunk):
|
|
349
|
+
with self.proxyPool.get() as proxy:
|
|
350
|
+
return proxy.resetUnusedFiles_JEDI(jediTaskID, inputChunk)
|
|
351
|
+
|
|
352
|
+
# insert TaskParams
|
|
353
|
+
def insertUpdateTaskParams_JEDI(self, jediTaskID, vo, prodSourceLabel, updateTaskParams, insertTaskParamsList):
|
|
354
|
+
with self.proxyPool.get() as proxy:
|
|
355
|
+
return proxy.insertUpdateTaskParams_JEDI(jediTaskID, vo, prodSourceLabel, updateTaskParams, insertTaskParamsList)
|
|
356
|
+
|
|
357
|
+
# set missing files
|
|
358
|
+
def setMissingFiles_JEDI(self, jediTaskID, datasetID, fileIDs):
|
|
359
|
+
with self.proxyPool.get() as proxy:
|
|
360
|
+
return proxy.setMissingFiles_JEDI(jediTaskID, datasetID, fileIDs)
|
|
361
|
+
|
|
362
|
+
# rescue picked files
|
|
363
|
+
def rescuePickedFiles_JEDI(self, vo, prodSourceLabel, waitTime):
|
|
364
|
+
with self.proxyPool.get() as proxy:
|
|
365
|
+
return proxy.rescuePickedFiles_JEDI(vo, prodSourceLabel, waitTime)
|
|
366
|
+
|
|
367
|
+
# rescue unlocked tasks with picked files
|
|
368
|
+
def rescueUnLockedTasksWithPicked_JEDI(self, vo, prodSourceLabel, waitTime, pid):
|
|
369
|
+
with self.proxyPool.get() as proxy:
|
|
370
|
+
return proxy.rescueUnLockedTasksWithPicked_JEDI(vo, prodSourceLabel, waitTime, pid)
|
|
371
|
+
|
|
372
|
+
# unlock tasks
|
|
373
|
+
def unlockTasks_JEDI(self, vo, prodSourceLabel, waitTime, hostName=None, pgid=None):
|
|
374
|
+
with self.proxyPool.get() as proxy:
|
|
375
|
+
return proxy.unlockTasks_JEDI(vo, prodSourceLabel, waitTime, hostName, pgid)
|
|
376
|
+
|
|
377
|
+
# get the size of input files which will be copied to the site
|
|
378
|
+
def getMovingInputSize_JEDI(self, siteName):
|
|
379
|
+
with self.proxyPool.get() as proxy:
|
|
380
|
+
return proxy.getMovingInputSize_JEDI(siteName)
|
|
381
|
+
|
|
382
|
+
# get typical number of input files for each workQueue+processingType
|
|
383
|
+
def getTypicalNumInput_JEDI(self, vo, prodSourceLabel, workQueue):
|
|
384
|
+
with self.proxyPool.get() as proxy:
|
|
385
|
+
return proxy.getTypicalNumInput_JEDI(vo, prodSourceLabel, workQueue)
|
|
386
|
+
|
|
387
|
+
# get highest prio jobs with workQueueID
|
|
388
|
+
def getHighestPrioJobStat_JEDI(self, prodSourceLabel, cloudName, workQueue, resource_name=None):
|
|
389
|
+
with self.proxyPool.get() as proxy:
|
|
390
|
+
return proxy.getHighestPrioJobStat_JEDI(prodSourceLabel, cloudName, workQueue, resource_name)
|
|
391
|
+
|
|
392
|
+
# get the list of tasks to refine
|
|
393
|
+
def getTasksToRefine_JEDI(self, vo=None, prodSourceLabel=None):
|
|
394
|
+
with self.proxyPool.get() as proxy:
|
|
395
|
+
return proxy.getTasksToRefine_JEDI(vo, prodSourceLabel)
|
|
396
|
+
|
|
397
|
+
# get task parameters with jediTaskID
|
|
398
|
+
def getTaskParamsWithID_JEDI(self, jediTaskID):
|
|
399
|
+
with self.proxyPool.get() as proxy:
|
|
400
|
+
return proxy.getTaskParamsWithID_JEDI(jediTaskID)
|
|
401
|
+
|
|
402
|
+
# register task/dataset/templ/param in a single transaction
|
|
403
|
+
def registerTaskInOneShot_JEDI(
|
|
404
|
+
self,
|
|
405
|
+
jediTaskID,
|
|
406
|
+
taskSpec,
|
|
407
|
+
inMasterDatasetSpec,
|
|
408
|
+
inSecDatasetSpecList,
|
|
409
|
+
outDatasetSpecList,
|
|
410
|
+
outputTemplateMap,
|
|
411
|
+
jobParamsTemplate,
|
|
412
|
+
taskParams,
|
|
413
|
+
unmergeMasterDatasetSpec,
|
|
414
|
+
unmergeDatasetSpecMap,
|
|
415
|
+
uniqueTaskName,
|
|
416
|
+
oldTaskStatus,
|
|
417
|
+
):
|
|
418
|
+
with self.proxyPool.get() as proxy:
|
|
419
|
+
return proxy.registerTaskInOneShot_JEDI(
|
|
420
|
+
jediTaskID,
|
|
421
|
+
taskSpec,
|
|
422
|
+
inMasterDatasetSpec,
|
|
423
|
+
inSecDatasetSpecList,
|
|
424
|
+
outDatasetSpecList,
|
|
425
|
+
outputTemplateMap,
|
|
426
|
+
jobParamsTemplate,
|
|
427
|
+
taskParams,
|
|
428
|
+
unmergeMasterDatasetSpec,
|
|
429
|
+
unmergeDatasetSpecMap,
|
|
430
|
+
uniqueTaskName,
|
|
431
|
+
oldTaskStatus,
|
|
432
|
+
)
|
|
433
|
+
|
|
434
|
+
# set tasks to be assigned
|
|
435
|
+
def setScoutJobDataToTasks_JEDI(self, vo, prodSourceLabel):
|
|
436
|
+
with self.proxyPool.get() as proxy:
|
|
437
|
+
tmp_site_mapper = self.get_site_mapper()
|
|
438
|
+
return proxy.setScoutJobDataToTasks_JEDI(vo, prodSourceLabel, tmp_site_mapper)
|
|
439
|
+
|
|
440
|
+
# prepare tasks to be finished
|
|
441
|
+
def prepareTasksToBeFinished_JEDI(self, vo, prodSourceLabel, nTasks=50, simTasks=None, pid="lock", noBroken=False):
|
|
442
|
+
with self.proxyPool.get() as proxy:
|
|
443
|
+
tmp_site_mapper = self.get_site_mapper()
|
|
444
|
+
return proxy.prepareTasksToBeFinished_JEDI(vo, prodSourceLabel, nTasks, simTasks, pid, noBroken, tmp_site_mapper)
|
|
445
|
+
|
|
446
|
+
# get tasks to be assigned
|
|
447
|
+
def getTasksToAssign_JEDI(self, vo, prodSourceLabel, workQueue, resource_name):
|
|
448
|
+
with self.proxyPool.get() as proxy:
|
|
449
|
+
return proxy.getTasksToAssign_JEDI(vo, prodSourceLabel, workQueue, resource_name)
|
|
450
|
+
|
|
451
|
+
# get tasks to check task assignment
|
|
452
|
+
def getTasksToCheckAssignment_JEDI(self, vo, prodSourceLabel, workQueue, resource_name):
|
|
453
|
+
with self.proxyPool.get() as proxy:
|
|
454
|
+
return proxy.getTasksToCheckAssignment_JEDI(vo, prodSourceLabel, workQueue, resource_name)
|
|
455
|
+
|
|
456
|
+
# calculate RW with a priority
|
|
457
|
+
def calculateRWwithPrio_JEDI(self, vo, prodSourceLabel, workQueue, priority):
|
|
458
|
+
with self.proxyPool.get() as proxy:
|
|
459
|
+
return proxy.calculateRWwithPrio_JEDI(vo, prodSourceLabel, workQueue, priority)
|
|
460
|
+
|
|
461
|
+
# calculate RW for tasks
|
|
462
|
+
def calculateTaskRW_JEDI(self, jediTaskID):
|
|
463
|
+
with self.proxyPool.get() as proxy:
|
|
464
|
+
return proxy.calculateTaskRW_JEDI(jediTaskID)
|
|
465
|
+
|
|
466
|
+
# calculate WORLD RW with a priority
|
|
467
|
+
def calculateWorldRWwithPrio_JEDI(self, vo, prodSourceLabel, workQueue, priority):
|
|
468
|
+
with self.proxyPool.get() as proxy:
|
|
469
|
+
return proxy.calculateWorldRWwithPrio_JEDI(vo, prodSourceLabel, workQueue, priority)
|
|
470
|
+
|
|
471
|
+
# calculate WORLD RW for tasks
|
|
472
|
+
def calculateTaskWorldRW_JEDI(self, jediTaskID):
|
|
473
|
+
with self.proxyPool.get() as proxy:
|
|
474
|
+
return proxy.calculateTaskWorldRW_JEDI(jediTaskID)
|
|
475
|
+
|
|
476
|
+
# set cloud to tasks
|
|
477
|
+
def setCloudToTasks_JEDI(self, taskCloudMap):
|
|
478
|
+
with self.proxyPool.get() as proxy:
|
|
479
|
+
return proxy.setCloudToTasks_JEDI(taskCloudMap)
|
|
480
|
+
|
|
481
|
+
# get the list of tasks to exec command
|
|
482
|
+
def getTasksToExecCommand_JEDI(self, vo, prodSourceLabel):
|
|
483
|
+
with self.proxyPool.get() as proxy:
|
|
484
|
+
return proxy.getTasksToExecCommand_JEDI(vo, prodSourceLabel)
|
|
485
|
+
|
|
486
|
+
# get the list of PandaIDs for a task
|
|
487
|
+
def getPandaIDsWithTask_JEDI(self, jediTaskID, onlyActive):
|
|
488
|
+
with self.proxyPool.get() as proxy:
|
|
489
|
+
return proxy.getPandaIDsWithTask_JEDI(jediTaskID, onlyActive)
|
|
490
|
+
|
|
491
|
+
# get the list of queued PandaIDs for a task
|
|
492
|
+
def getQueuedPandaIDsWithTask_JEDI(self, jediTaskID):
|
|
493
|
+
with self.proxyPool.get() as proxy:
|
|
494
|
+
return proxy.getQueuedPandaIDsWithTask_JEDI(jediTaskID)
|
|
495
|
+
|
|
496
|
+
# get jediTaskID/datasetID/FileID with dataset and file names
|
|
497
|
+
def getIDsWithFileDataset_JEDI(self, datasetName, fileName, fileType):
|
|
498
|
+
with self.proxyPool.get() as proxy:
|
|
499
|
+
return proxy.getIDsWithFileDataset_JEDI(datasetName, fileName, fileType)
|
|
500
|
+
|
|
501
|
+
# get PandaID for a file
|
|
502
|
+
def getPandaIDWithFileID_JEDI(self, jediTaskID, datasetID, fileID):
|
|
503
|
+
with self.proxyPool.get() as proxy:
|
|
504
|
+
return proxy.getPandaIDWithFileID_JEDI(jediTaskID, datasetID, fileID)
|
|
505
|
+
|
|
506
|
+
# get JEDI files for a job
|
|
507
|
+
def getFilesWithPandaID_JEDI(self, pandaID):
|
|
508
|
+
with self.proxyPool.get() as proxy:
|
|
509
|
+
return proxy.getFilesWithPandaID_JEDI(pandaID)
|
|
510
|
+
|
|
511
|
+
# update task parameters
|
|
512
|
+
def updateTaskParams_JEDI(self, jediTaskID, taskParams):
|
|
513
|
+
with self.proxyPool.get() as proxy:
|
|
514
|
+
return proxy.updateTaskParams_JEDI(jediTaskID, taskParams)
|
|
515
|
+
|
|
516
|
+
# reactivate pending tasks
|
|
517
|
+
def reactivatePendingTasks_JEDI(self, vo, prodSourceLabel, timeLimit, timeoutLimit=None, minPriority=None):
|
|
518
|
+
with self.proxyPool.get() as proxy:
|
|
519
|
+
return proxy.reactivatePendingTasks_JEDI(vo, prodSourceLabel, timeLimit, timeoutLimit, minPriority)
|
|
520
|
+
|
|
521
|
+
# restart contents update
|
|
522
|
+
def restartTasksForContentsUpdate_JEDI(self, vo, prodSourceLabel, timeLimit=30):
|
|
523
|
+
with self.proxyPool.get() as proxy:
|
|
524
|
+
return proxy.restartTasksForContentsUpdate_JEDI(vo, prodSourceLabel, timeLimit=timeLimit)
|
|
525
|
+
|
|
526
|
+
# kick exhausted tasks
|
|
527
|
+
def kickExhaustedTasks_JEDI(self, vo, prodSourceLabel, timeLimit):
|
|
528
|
+
with self.proxyPool.get() as proxy:
|
|
529
|
+
return proxy.kickExhaustedTasks_JEDI(vo, prodSourceLabel, timeLimit)
|
|
530
|
+
|
|
531
|
+
# get file spec of lib.tgz
|
|
532
|
+
def get_previous_build_file_spec(self, jediTaskID, siteName, associatedSites):
|
|
533
|
+
with self.proxyPool.get() as proxy:
|
|
534
|
+
return proxy.get_previous_build_file_spec(jediTaskID, siteName, associatedSites)
|
|
535
|
+
|
|
536
|
+
# get file spec of old lib.tgz
|
|
537
|
+
def getOldBuildFileSpec_JEDI(self, jediTaskID, datasetID, fileID):
|
|
538
|
+
with self.proxyPool.get() as proxy:
|
|
539
|
+
return proxy.getOldBuildFileSpec_JEDI(jediTaskID, datasetID, fileID)
|
|
540
|
+
|
|
541
|
+
# insert lib dataset and files
|
|
542
|
+
def insertBuildFileSpec_JEDI(self, jobSpec, reusedDatasetID, simul):
|
|
543
|
+
with self.proxyPool.get() as proxy:
|
|
544
|
+
return proxy.insertBuildFileSpec_JEDI(jobSpec, reusedDatasetID, simul)
|
|
545
|
+
|
|
546
|
+
# get sites used by a task
|
|
547
|
+
def getSitesUsedByTask_JEDI(self, jediTaskID):
|
|
548
|
+
with self.proxyPool.get() as proxy:
|
|
549
|
+
return proxy.getSitesUsedByTask_JEDI(jediTaskID)
|
|
550
|
+
|
|
551
|
+
# get random seed
|
|
552
|
+
def getRandomSeed_JEDI(self, jediTaskID, simul, n_files=1):
|
|
553
|
+
with self.proxyPool.get() as proxy:
|
|
554
|
+
return proxy.getRandomSeed_JEDI(jediTaskID, simul, n_files)
|
|
555
|
+
|
|
556
|
+
# get preprocess metadata
|
|
557
|
+
def getPreprocessMetadata_JEDI(self, jediTaskID):
|
|
558
|
+
with self.proxyPool.get() as proxy:
|
|
559
|
+
return proxy.getPreprocessMetadata_JEDI(jediTaskID)
|
|
560
|
+
|
|
561
|
+
# get log dataset for preprocessing
|
|
562
|
+
def getPreproLog_JEDI(self, jediTaskID, simul):
|
|
563
|
+
with self.proxyPool.get() as proxy:
|
|
564
|
+
return proxy.getPreproLog_JEDI(jediTaskID, simul)
|
|
565
|
+
|
|
566
|
+
# get jobsetID
|
|
567
|
+
def getUserJobsetID_JEDI(self, userName):
|
|
568
|
+
with self.proxyPool.get() as proxy:
|
|
569
|
+
tmpJobID, tmpDummy, tmpStat = proxy.getUserParameter(userName, 1, None)
|
|
570
|
+
# return
|
|
571
|
+
return tmpStat, tmpJobID
|
|
572
|
+
|
|
573
|
+
# retry or incrementally execute a task
|
|
574
|
+
def retryTask_JEDI(
|
|
575
|
+
self,
|
|
576
|
+
jediTaskID,
|
|
577
|
+
commStr,
|
|
578
|
+
maxAttempt=5,
|
|
579
|
+
retryChildTasks=True,
|
|
580
|
+
discardEvents=False,
|
|
581
|
+
release_unstaged=False,
|
|
582
|
+
keep_share_priority=False,
|
|
583
|
+
ignore_hard_exhausted=False,
|
|
584
|
+
):
|
|
585
|
+
with self.proxyPool.get() as proxy:
|
|
586
|
+
return proxy.retryTask_JEDI(
|
|
587
|
+
jediTaskID,
|
|
588
|
+
commStr,
|
|
589
|
+
maxAttempt,
|
|
590
|
+
retryChildTasks=retryChildTasks,
|
|
591
|
+
discardEvents=discardEvents,
|
|
592
|
+
release_unstaged=release_unstaged,
|
|
593
|
+
keep_share_priority=keep_share_priority,
|
|
594
|
+
ignore_hard_exhausted=ignore_hard_exhausted,
|
|
595
|
+
)
|
|
596
|
+
|
|
597
|
+
# append input datasets for incremental execution
|
|
598
|
+
def appendDatasets_JEDI(self, jediTaskID, inMasterDatasetSpecList, inSecDatasetSpecList):
|
|
599
|
+
with self.proxyPool.get() as proxy:
|
|
600
|
+
return proxy.appendDatasets_JEDI(jediTaskID, inMasterDatasetSpecList, inSecDatasetSpecList)
|
|
601
|
+
|
|
602
|
+
# record retry history
|
|
603
|
+
def recordRetryHistory_JEDI(self, jediTaskID, oldNewPandaIDs, relationType):
|
|
604
|
+
with self.proxyPool.get() as proxy:
|
|
605
|
+
return proxy.recordRetryHistory_JEDI(jediTaskID, oldNewPandaIDs, relationType)
|
|
606
|
+
|
|
607
|
+
# get JEDI tasks with a selection criteria
|
|
608
|
+
def getTasksWithCriteria_JEDI(
|
|
609
|
+
self,
|
|
610
|
+
vo,
|
|
611
|
+
prodSourceLabel,
|
|
612
|
+
taskStatusList,
|
|
613
|
+
taskCriteria={},
|
|
614
|
+
datasetCriteria={},
|
|
615
|
+
taskParamList=[],
|
|
616
|
+
datasetParamList=[],
|
|
617
|
+
taskLockColumn=None,
|
|
618
|
+
taskLockInterval=60,
|
|
619
|
+
):
|
|
620
|
+
with self.proxyPool.get() as proxy:
|
|
621
|
+
return proxy.getTasksWithCriteria_JEDI(
|
|
622
|
+
vo, prodSourceLabel, taskStatusList, taskCriteria, datasetCriteria, taskParamList, datasetParamList, taskLockColumn, taskLockInterval
|
|
623
|
+
)
|
|
624
|
+
|
|
625
|
+
# check parent task status
|
|
626
|
+
def checkParentTask_JEDI(self, parent_task_id, jedi_task_id=None):
|
|
627
|
+
with self.proxyPool.get() as proxy:
|
|
628
|
+
return proxy.checkParentTask_JEDI(parent_task_id, jedi_task_id)
|
|
629
|
+
|
|
630
|
+
# get task status
|
|
631
|
+
def getTaskStatus_JEDI(self, jediTaskID):
|
|
632
|
+
with self.proxyPool.get() as proxy:
|
|
633
|
+
return proxy.getTaskStatus_JEDI(jediTaskID)
|
|
634
|
+
|
|
635
|
+
# get lib.tgz for waiting jobs
|
|
636
|
+
def getLibForWaitingRunJob_JEDI(self, vo, prodSourceLabel, checkInterval):
|
|
637
|
+
with self.proxyPool.get() as proxy:
|
|
638
|
+
return proxy.getLibForWaitingRunJob_JEDI(vo, prodSourceLabel, checkInterval)
|
|
639
|
+
|
|
640
|
+
# get tasks to get reassigned
|
|
641
|
+
def getTasksToReassign_JEDI(self, vo=None, prodSourceLabel=None):
|
|
642
|
+
with self.proxyPool.get() as proxy:
|
|
643
|
+
return proxy.getTasksToReassign_JEDI(vo, prodSourceLabel)
|
|
644
|
+
|
|
645
|
+
# kill child tasks
|
|
646
|
+
def killChildTasks_JEDI(self, jediTaskID, taskStatus):
|
|
647
|
+
with self.proxyPool.get() as proxy:
|
|
648
|
+
return proxy.killChildTasks_JEDI(jediTaskID, taskStatus)
|
|
649
|
+
|
|
650
|
+
# kick child tasks
|
|
651
|
+
def kickChildTasks_JEDI(self, jediTaskID):
|
|
652
|
+
with self.proxyPool.get() as proxy:
|
|
653
|
+
return proxy.kickChildTasks_JEDI(jediTaskID)
|
|
654
|
+
|
|
655
|
+
# lock task
|
|
656
|
+
def lockTask_JEDI(self, jediTaskID, pid):
|
|
657
|
+
with self.proxyPool.get() as proxy:
|
|
658
|
+
return proxy.lockTask_JEDI(jediTaskID, pid)
|
|
659
|
+
|
|
660
|
+
# get successful files
|
|
661
|
+
def getSuccessfulFiles_JEDI(self, jediTaskID, datasetID):
|
|
662
|
+
with self.proxyPool.get() as proxy:
|
|
663
|
+
return proxy.getSuccessfulFiles_JEDI(jediTaskID, datasetID)
|
|
664
|
+
|
|
665
|
+
# unlock a single task
|
|
666
|
+
def unlockSingleTask_JEDI(self, jediTaskID, pid):
|
|
667
|
+
with self.proxyPool.get() as proxy:
|
|
668
|
+
return proxy.unlockSingleTask_JEDI(jediTaskID, pid)
|
|
669
|
+
|
|
670
|
+
# throttle JEDI tasks
|
|
671
|
+
def throttleTasks_JEDI(self, vo, prodSourceLabel, waitTime):
|
|
672
|
+
with self.proxyPool.get() as proxy:
|
|
673
|
+
return proxy.throttleTasks_JEDI(vo, prodSourceLabel, waitTime)
|
|
674
|
+
|
|
675
|
+
# throttle a JEDI task
|
|
676
|
+
def throttleTask_JEDI(self, jediTaskID, waitTime, errorDialog):
|
|
677
|
+
with self.proxyPool.get() as proxy:
|
|
678
|
+
return proxy.throttleTask_JEDI(jediTaskID, waitTime, errorDialog)
|
|
679
|
+
|
|
680
|
+
# release throttled tasks
|
|
681
|
+
def releaseThrottledTasks_JEDI(self, vo, prodSourceLabel):
|
|
682
|
+
with self.proxyPool.get() as proxy:
|
|
683
|
+
return proxy.releaseThrottledTasks_JEDI(vo, prodSourceLabel)
|
|
684
|
+
|
|
685
|
+
# release a task with on-hold status
|
|
686
|
+
def release_task_on_hold(self, jedi_task_id, target_status=None):
|
|
687
|
+
with self.proxyPool.get() as proxy:
|
|
688
|
+
return proxy.release_task_on_hold(jedi_task_id, target_status)
|
|
689
|
+
|
|
690
|
+
# get throttled users
|
|
691
|
+
def getThrottledUsersTasks_JEDI(self, vo, prodSourceLabel):
|
|
692
|
+
with self.proxyPool.get() as proxy:
|
|
693
|
+
return proxy.getThrottledUsersTasks_JEDI(vo, prodSourceLabel)
|
|
694
|
+
|
|
695
|
+
# lock process
|
|
696
|
+
def lockProcess_JEDI(self, vo, prodSourceLabel, cloud, workqueue_id, resource_name, component, pid, forceOption=False, timeLimit=5):
|
|
697
|
+
with self.proxyPool.get() as proxy:
|
|
698
|
+
return proxy.lockProcess_JEDI(vo, prodSourceLabel, cloud, workqueue_id, resource_name, component, pid, forceOption, timeLimit)
|
|
699
|
+
|
|
700
|
+
# unlock process
|
|
701
|
+
def unlockProcess_JEDI(self, vo, prodSourceLabel, cloud, workqueue_id, resource_name, component, pid):
|
|
702
|
+
with self.proxyPool.get() as proxy:
|
|
703
|
+
return proxy.unlockProcess_JEDI(vo, prodSourceLabel, cloud, workqueue_id, resource_name, component, pid)
|
|
704
|
+
|
|
705
|
+
# unlock process with PID
|
|
706
|
+
def unlockProcessWithPID_JEDI(self, vo, prodSourceLabel, workqueue_id, resource_name, pid, useBase):
|
|
707
|
+
with self.proxyPool.get() as proxy:
|
|
708
|
+
return proxy.unlockProcessWithPID_JEDI(vo, prodSourceLabel, workqueue_id, resource_name, pid, useBase)
|
|
709
|
+
|
|
710
|
+
# check process lock
|
|
711
|
+
def checkProcessLock_JEDI(self, vo, prodSourceLabel, cloud, workqueue_id, resource_name, component, pid, checkBase):
|
|
712
|
+
with self.proxyPool.get() as proxy:
|
|
713
|
+
return proxy.checkProcessLock_JEDI(vo, prodSourceLabel, cloud, workqueue_id, resource_name, component, pid, checkBase)
|
|
714
|
+
|
|
715
|
+
# get JEDI tasks to be assessed
|
|
716
|
+
def getAchievedTasks_JEDI(self, vo, prodSourceLabel, timeLimit=60, nTasks=50):
|
|
717
|
+
with self.proxyPool.get() as proxy:
|
|
718
|
+
return proxy.getAchievedTasks_JEDI(vo, prodSourceLabel, timeLimit, nTasks)
|
|
719
|
+
|
|
720
|
+
# get tasks to take periodic action
|
|
721
|
+
def get_tasks_for_periodic_action(self, vo, prod_source_label, time_limit=12, n_tasks=100):
|
|
722
|
+
with self.proxyPool.get() as proxy:
|
|
723
|
+
return proxy.get_tasks_for_periodic_action(vo, prod_source_label, time_limit, n_tasks)
|
|
724
|
+
|
|
725
|
+
# get inactive sites
|
|
726
|
+
def getInactiveSites_JEDI(self, flag, timeLimit):
|
|
727
|
+
with self.proxyPool.get() as proxy:
|
|
728
|
+
return proxy.getInactiveSites_JEDI(flag, timeLimit)
|
|
729
|
+
|
|
730
|
+
# get total walltime
|
|
731
|
+
def getTotalWallTime_JEDI(self, vo, prodSourceLabel, workQueue, resource_name):
|
|
732
|
+
with self.proxyPool.get() as proxy:
|
|
733
|
+
return proxy.getTotalWallTime_JEDI(vo, prodSourceLabel, workQueue, resource_name)
|
|
734
|
+
|
|
735
|
+
# check duplication with internal merge
|
|
736
|
+
def checkDuplication_JEDI(self, jediTaskID):
|
|
737
|
+
with self.proxyPool.get() as proxy:
|
|
738
|
+
return proxy.checkDuplication_JEDI(jediTaskID)
|
|
739
|
+
|
|
740
|
+
# get network metrics for brokerage
|
|
741
|
+
def getNetworkMetrics(self, dst, keyList):
|
|
742
|
+
with self.proxyPool.get() as proxy:
|
|
743
|
+
return proxy.getNetworkMetrics(dst, keyList)
|
|
744
|
+
|
|
745
|
+
# get nuclei that have built up a long backlog
|
|
746
|
+
def getBackloggedNuclei(self):
|
|
747
|
+
with self.proxyPool.get() as proxy:
|
|
748
|
+
return proxy.getBackloggedNuclei()
|
|
749
|
+
|
|
750
|
+
# get network metrics for brokerage
|
|
751
|
+
def getPandaSiteToOutputStorageSiteMapping(self):
|
|
752
|
+
with self.proxyPool.get() as proxy:
|
|
753
|
+
return proxy.getPandaSiteToOutputStorageSiteMapping()
|
|
754
|
+
|
|
755
|
+
# get failure counts for a task
|
|
756
|
+
def getFailureCountsForTask_JEDI(self, jediTaskID, timeWindow):
|
|
757
|
+
with self.proxyPool.get() as proxy:
|
|
758
|
+
return proxy.getFailureCountsForTask_JEDI(jediTaskID, timeWindow)
|
|
759
|
+
|
|
760
|
+
# count the number of queued jobs per user or working group
|
|
761
|
+
|
|
762
|
+
def countJobsPerTarget_JEDI(self, target, is_user):
|
|
763
|
+
with self.proxyPool.get() as proxy:
|
|
764
|
+
return proxy.countJobsPerTarget_JEDI(target, is_user)
|
|
765
|
+
|
|
766
|
+
# get old merge job PandaIDs
|
|
767
|
+
def getOldMergeJobPandaIDs_JEDI(self, jediTaskID, pandaID):
|
|
768
|
+
with self.proxyPool.get() as proxy:
|
|
769
|
+
return proxy.getOldMergeJobPandaIDs_JEDI(jediTaskID, pandaID)
|
|
770
|
+
|
|
771
|
+
# get active jumbo jobs for a task
|
|
772
|
+
def getActiveJumboJobs_JEDI(self, jediTaskID):
|
|
773
|
+
with self.proxyPool.get() as proxy:
|
|
774
|
+
return proxy.getActiveJumboJobs_JEDI(jediTaskID)
|
|
775
|
+
|
|
776
|
+
# get jobParams of the first job
|
|
777
|
+
def getJobParamsOfFirstJob_JEDI(self, jediTaskID):
|
|
778
|
+
with self.proxyPool.get() as proxy:
|
|
779
|
+
return proxy.getJobParamsOfFirstJob_JEDI(jediTaskID)
|
|
780
|
+
|
|
781
|
+
# bulk fetch fileIDs
|
|
782
|
+
def bulkFetchFileIDs_JEDI(self, jediTaskID, nIDs):
|
|
783
|
+
with self.proxyPool.get() as proxy:
|
|
784
|
+
return proxy.bulkFetchFileIDs_JEDI(jediTaskID, nIDs)
|
|
785
|
+
|
|
786
|
+
# set del flag to events
|
|
787
|
+
def setDelFlagToEvents_JEDI(self, jediTaskID):
|
|
788
|
+
with self.proxyPool.get() as proxy:
|
|
789
|
+
return proxy.setDelFlagToEvents_JEDI(jediTaskID)
|
|
790
|
+
|
|
791
|
+
# set del flag to events
|
|
792
|
+
def removeFilesIndexInconsistent_JEDI(self, jediTaskID, datasetIDs):
|
|
793
|
+
with self.proxyPool.get() as proxy:
|
|
794
|
+
return proxy.removeFilesIndexInconsistent_JEDI(jediTaskID, datasetIDs)
|
|
795
|
+
|
|
796
|
+
# throttle jobs in pauses tasks
|
|
797
|
+
def throttleJobsInPausedTasks_JEDI(self, vo, prodSourceLabel):
|
|
798
|
+
with self.proxyPool.get() as proxy:
|
|
799
|
+
return proxy.throttleJobsInPausedTasks_JEDI(vo, prodSourceLabel)
|
|
800
|
+
|
|
801
|
+
# set useJumbo flag
|
|
802
|
+
def setUseJumboFlag_JEDI(self, jediTaskID, statusStr):
|
|
803
|
+
with self.proxyPool.get() as proxy:
|
|
804
|
+
return proxy.setUseJumboFlag_JEDI(jediTaskID, statusStr)
|
|
805
|
+
|
|
806
|
+
# get number of tasks with running jumbo jobs
|
|
807
|
+
def getNumTasksWithRunningJumbo_JEDI(self, vo, prodSourceLabel, cloudName, workqueue):
|
|
808
|
+
with self.proxyPool.get() as proxy:
|
|
809
|
+
return proxy.getNumTasksWithRunningJumbo_JEDI(vo, prodSourceLabel, cloudName, workqueue)
|
|
810
|
+
|
|
811
|
+
# get number of unprocessed events
|
|
812
|
+
def getNumUnprocessedEvents_JEDI(self, vo, prodSourceLabel, criteria, neg_criteria):
|
|
813
|
+
with self.proxyPool.get() as proxy:
|
|
814
|
+
return proxy.getNumUnprocessedEvents_JEDI(vo, prodSourceLabel, criteria, neg_criteria)
|
|
815
|
+
|
|
816
|
+
# get number of jobs for a task
|
|
817
|
+
def getNumJobsForTask_JEDI(self, jediTaskID):
|
|
818
|
+
with self.proxyPool.get() as proxy:
|
|
819
|
+
return proxy.getNumJobsForTask_JEDI(jediTaskID)
|
|
820
|
+
|
|
821
|
+
# get number map for standby jobs
|
|
822
|
+
def getNumMapForStandbyJobs_JEDI(self, workqueue):
|
|
823
|
+
with self.proxyPool.get() as proxy:
|
|
824
|
+
return proxy.getNumMapForStandbyJobs_JEDI(workqueue)
|
|
825
|
+
|
|
826
|
+
# update datasets to finish a task
|
|
827
|
+
def updateDatasetsToFinishTask_JEDI(self, jediTaskID, lockedBy):
|
|
828
|
+
with self.proxyPool.get() as proxy:
|
|
829
|
+
return proxy.updateDatasetsToFinishTask_JEDI(jediTaskID, lockedBy)
|
|
830
|
+
|
|
831
|
+
# get tasks with jumbo jobs
|
|
832
|
+
def getTaskWithJumbo_JEDI(self, vo, prodSourceLabel):
|
|
833
|
+
with self.proxyPool.get() as proxy:
|
|
834
|
+
return proxy.getTaskWithJumbo_JEDI(vo, prodSourceLabel)
|
|
835
|
+
|
|
836
|
+
# kick pending tasks with jumbo jobs
|
|
837
|
+
def kickPendingTasksWithJumbo_JEDI(self, jediTaskID):
|
|
838
|
+
with self.proxyPool.get() as proxy:
|
|
839
|
+
return proxy.kickPendingTasksWithJumbo_JEDI(jediTaskID)
|
|
840
|
+
|
|
841
|
+
# reset input to re-generate co-jumbo jobs
|
|
842
|
+
def resetInputToReGenCoJumbo_JEDI(self, jediTaskID):
|
|
843
|
+
with self.proxyPool.get() as proxy:
|
|
844
|
+
return proxy.resetInputToReGenCoJumbo_JEDI(jediTaskID)
|
|
845
|
+
|
|
846
|
+
# get averaged disk IO
|
|
847
|
+
def getAvgDiskIO_JEDI(self):
|
|
848
|
+
with self.proxyPool.get() as proxy:
|
|
849
|
+
return proxy.getAvgDiskIO_JEDI()
|
|
850
|
+
|
|
851
|
+
# update input files stage-in done (according to message from iDDS, called by other methods, etc.)
|
|
852
|
+
def updateInputFilesStaged_JEDI(self, jeditaskid, scope, filenames_dict, chunk_size=500, by=None, check_scope=True):
|
|
853
|
+
with self.proxyPool.get() as proxy:
|
|
854
|
+
return proxy.updateInputFilesStaged_JEDI(jeditaskid, scope, filenames_dict, chunk_size, by, check_scope)
|
|
855
|
+
|
|
856
|
+
# update input datasets stage-in done (according to message from iDDS, called by other methods, etc.)
|
|
857
|
+
def updateInputDatasetsStaged_JEDI(self, jeditaskid, scope, dsnames_dict, use_commit=True, by=None):
|
|
858
|
+
with self.proxyPool.get() as proxy:
|
|
859
|
+
return proxy.updateInputDatasetsStaged_JEDI(jeditaskid, scope, dsnames_dict, use_commit, by)
|
|
860
|
+
|
|
861
|
+
# get number of staging files
|
|
862
|
+
def getNumStagingFiles_JEDI(self, jeditaskid):
|
|
863
|
+
with self.proxyPool.get() as proxy:
|
|
864
|
+
return proxy.getNumStagingFiles_JEDI(jeditaskid)
|
|
865
|
+
|
|
866
|
+
# get usage breakdown by users and sites
|
|
867
|
+
def getUsageBreakdown_JEDI(self, prod_source_label="user"):
|
|
868
|
+
with self.proxyPool.get() as proxy:
|
|
869
|
+
return proxy.getUsageBreakdown_JEDI(prod_source_label)
|
|
870
|
+
|
|
871
|
+
# get jobs stat of each user
|
|
872
|
+
def getUsersJobsStats_JEDI(self, prod_source_label="user"):
|
|
873
|
+
with self.proxyPool.get() as proxy:
|
|
874
|
+
return proxy.getUsersJobsStats_JEDI(prod_source_label)
|
|
875
|
+
|
|
876
|
+
# insert HPO pseudo event according to message from idds
|
|
877
|
+
def insertHpoEventAboutIdds_JEDI(self, jedi_task_id, event_id_list):
|
|
878
|
+
with self.proxyPool.get() as proxy:
|
|
879
|
+
return proxy.insertHpoEventAboutIdds_JEDI(jedi_task_id, event_id_list)
|
|
880
|
+
|
|
881
|
+
# get event statistics
|
|
882
|
+
def get_event_statistics(self, jedi_task_id):
|
|
883
|
+
with self.proxyPool.get() as proxy:
|
|
884
|
+
return proxy.get_event_statistics(jedi_task_id)
|
|
885
|
+
|
|
886
|
+
# get site to-running rate statistics by global share
|
|
887
|
+
def getSiteToRunRateStats(self, vo, exclude_rwq, starttime_min, starttime_max):
|
|
888
|
+
with self.proxyPool.get() as proxy:
|
|
889
|
+
return proxy.getSiteToRunRateStats(vo, exclude_rwq, starttime_min, starttime_max)
|
|
890
|
+
|
|
891
|
+
# update cache
|
|
892
|
+
def updateCache_JEDI(self, main_key, sub_key, data):
|
|
893
|
+
with self.proxyPool.get() as proxy:
|
|
894
|
+
return proxy.updateCache_JEDI(main_key, sub_key, data)
|
|
895
|
+
|
|
896
|
+
# get cache
|
|
897
|
+
def getCache_JEDI(self, main_key, sub_key):
|
|
898
|
+
with self.proxyPool.get() as proxy:
|
|
899
|
+
return proxy.getCache_JEDI(main_key, sub_key)
|
|
900
|
+
|
|
901
|
+
# get cache
|
|
902
|
+
def extendSandboxLifetime_JEDI(self, jedi_taskid, file_name):
|
|
903
|
+
with self.proxyPool.get() as proxy:
|
|
904
|
+
return proxy.extendSandboxLifetime_JEDI(jedi_taskid, file_name)
|
|
905
|
+
|
|
906
|
+
# turn a task into pending status for some reason
|
|
907
|
+
def makeTaskPending_JEDI(self, jedi_taskid, reason="unknown"):
|
|
908
|
+
with self.proxyPool.get() as proxy:
|
|
909
|
+
return proxy.makeTaskPending_JEDI(jedi_taskid, reason)
|
|
910
|
+
|
|
911
|
+
# query tasks and turn them into pending status for some reason, sql_query should query jeditaskid
|
|
912
|
+
def queryTasksToBePending_JEDI(self, sql_query, params_map, reason):
|
|
913
|
+
with self.proxyPool.get() as proxy:
|
|
914
|
+
return proxy.queryTasksToBePending_JEDI(sql_query, params_map, reason)
|
|
915
|
+
|
|
916
|
+
# get IDs of all datasets of input and lib, to update data locality records
|
|
917
|
+
def get_tasks_inputdatasets_JEDI(self, vo):
|
|
918
|
+
with self.proxyPool.get() as proxy:
|
|
919
|
+
return proxy.get_tasks_inputdatasets_JEDI(vo)
|
|
920
|
+
|
|
921
|
+
# update dataset locality
|
|
922
|
+
def updateDatasetLocality_JEDI(self, jedi_taskid, datasetid, rse):
|
|
923
|
+
with self.proxyPool.get() as proxy:
|
|
924
|
+
return proxy.updateDatasetLocality_JEDI(jedi_taskid, datasetid, rse)
|
|
925
|
+
|
|
926
|
+
# delete outdated dataset locality records
|
|
927
|
+
def deleteOutdatedDatasetLocality_JEDI(self, before_timestamp):
|
|
928
|
+
with self.proxyPool.get() as proxy:
|
|
929
|
+
return proxy.deleteOutdatedDatasetLocality_JEDI(before_timestamp)
|
|
930
|
+
|
|
931
|
+
# query tasks and preassign them to dedicate workqueue, sql_query should query jeditaskid
|
|
932
|
+
def queryTasksToPreassign_JEDI(self, sql_query, params_map, site, blacklist=set(), limit=1):
|
|
933
|
+
with self.proxyPool.get() as proxy:
|
|
934
|
+
return proxy.queryTasksToPreassign_JEDI(sql_query, params_map, site, blacklist, limit)
|
|
935
|
+
|
|
936
|
+
# close and reassign N jobs of a preassigned task
|
|
937
|
+
def reassignJobsInPreassignedTask_JEDI(self, jedi_taskid, site, n_jobs_to_close):
|
|
938
|
+
with self.proxyPool.get() as proxy:
|
|
939
|
+
return proxy.reassignJobsInPreassignedTask_JEDI(jedi_taskid, site, n_jobs_to_close)
|
|
940
|
+
|
|
941
|
+
# undo preassigned tasks
|
|
942
|
+
def undoPreassignedTasks_JEDI(self, jedi_taskids, task_orig_attr_map, params_map, force=False):
|
|
943
|
+
with self.proxyPool.get() as proxy:
|
|
944
|
+
return proxy.undoPreassignedTasks_JEDI(jedi_taskids, task_orig_attr_map, params_map, force)
|
|
945
|
+
|
|
946
|
+
# set missing files according to iDDS messages
|
|
947
|
+
def setMissingFilesAboutIdds_JEDI(self, jeditaskid, filenames_dict):
|
|
948
|
+
with self.proxyPool.get() as proxy:
|
|
949
|
+
return proxy.setMissingFilesAboutIdds_JEDI(jeditaskid, filenames_dict)
|
|
950
|
+
|
|
951
|
+
# set missing files according to iDDS messages
|
|
952
|
+
def load_sw_map(self):
|
|
953
|
+
with self.proxyPool.get() as proxy:
|
|
954
|
+
return proxy.load_sw_map()
|
|
955
|
+
|
|
956
|
+
# get origin datasets
|
|
957
|
+
def get_origin_datasets(self, jedi_task_id, dataset_name, lfns):
|
|
958
|
+
with self.proxyPool.get() as proxy:
|
|
959
|
+
return proxy.get_origin_datasets(jedi_task_id, dataset_name, lfns)
|
|
960
|
+
|
|
961
|
+
# push message to message processors which triggers functions of agents
|
|
962
|
+
def push_task_trigger_message(self, msg_type, jedi_task_id, data_dict=None, priority=None, task_spec=None):
|
|
963
|
+
with self.proxyPool.get() as proxy:
|
|
964
|
+
return proxy.push_task_trigger_message(msg_type, jedi_task_id, data_dict, priority, task_spec)
|
|
965
|
+
|
|
966
|
+
# aggregate carbon footprint of a task
|
|
967
|
+
def get_task_carbon_footprint(self, jedi_task_id, level="global"):
|
|
968
|
+
with self.proxyPool.get() as proxy:
|
|
969
|
+
return proxy.get_task_carbon_footprint(jedi_task_id, level)
|
|
970
|
+
|
|
971
|
+
# get pending data carousel tasks and their input datasets
|
|
972
|
+
def get_pending_dc_tasks_JEDI(self, task_type="prod", time_limit_minutes=60):
|
|
973
|
+
with self.proxyPool.get() as proxy:
|
|
974
|
+
return proxy.get_pending_dc_tasks_JEDI(task_type=task_type, time_limit_minutes=time_limit_minutes)
|
|
975
|
+
|
|
976
|
+
# get max number of events in a file of the dataset
|
|
977
|
+
def get_max_events_in_dataset(self, jedi_task_id, dataset_id):
|
|
978
|
+
with self.proxyPool.get() as proxy:
|
|
979
|
+
return proxy.get_max_events_in_dataset(jedi_task_id, dataset_id)
|
|
980
|
+
|
|
981
|
+
# get task failure metrics
|
|
982
|
+
def get_task_failure_metrics(self, jedi_task_id):
|
|
983
|
+
with self.proxyPool.get() as proxy:
|
|
984
|
+
return proxy.get_task_failure_metrics(jedi_task_id)
|