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.
Files changed (375) hide show
  1. panda_server_source-0.8.0.dist-info/METADATA +55 -0
  2. panda_server_source-0.8.0.dist-info/RECORD +375 -0
  3. panda_server_source-0.8.0.dist-info/WHEEL +4 -0
  4. panda_server_source-0.8.0.dist-info/licenses/LICENSE.txt +202 -0
  5. pandajedi/__init__.py +0 -0
  6. pandajedi/jedibrokerage/AtlasAnalJobBroker.py +2343 -0
  7. pandajedi/jedibrokerage/AtlasBrokerUtils.py +1292 -0
  8. pandajedi/jedibrokerage/AtlasProdJobBroker.py +2064 -0
  9. pandajedi/jedibrokerage/AtlasProdTaskBroker.py +629 -0
  10. pandajedi/jedibrokerage/GenJobBroker.py +381 -0
  11. pandajedi/jedibrokerage/JobBrokerBase.py +133 -0
  12. pandajedi/jedibrokerage/TaskBrokerBase.py +15 -0
  13. pandajedi/jedibrokerage/__init__.py +0 -0
  14. pandajedi/jediconfig/__init__.py +0 -0
  15. pandajedi/jediconfig/jedi_config.py +40 -0
  16. pandajedi/jedicore/FactoryBase.py +182 -0
  17. pandajedi/jedicore/Interaction.py +433 -0
  18. pandajedi/jedicore/JediDBProxy.py +56 -0
  19. pandajedi/jedicore/JediDBProxyPool.py +37 -0
  20. pandajedi/jedicore/JediDBSchemaInfo.py +17 -0
  21. pandajedi/jedicore/JediException.py +13 -0
  22. pandajedi/jedicore/JediTaskBuffer.py +984 -0
  23. pandajedi/jedicore/JediTaskBufferInterface.py +50 -0
  24. pandajedi/jedicore/MsgWrapper.py +124 -0
  25. pandajedi/jedicore/ProcessUtils.py +34 -0
  26. pandajedi/jedicore/SiteCandidate.py +90 -0
  27. pandajedi/jedicore/ThreadUtils.py +205 -0
  28. pandajedi/jedicore/__init__.py +0 -0
  29. pandajedi/jediddm/AtlasDDMClient.py +1708 -0
  30. pandajedi/jediddm/DDMClientBase.py +16 -0
  31. pandajedi/jediddm/DDMInterface.py +83 -0
  32. pandajedi/jediddm/GenDDMClient.py +17 -0
  33. pandajedi/jediddm/__init__.py +0 -0
  34. pandajedi/jedidog/AtlasAnalWatchDog.py +648 -0
  35. pandajedi/jedidog/AtlasDataCarouselWatchDog.py +189 -0
  36. pandajedi/jedidog/AtlasDataLocalityUpdaterWatchDog.py +215 -0
  37. pandajedi/jedidog/AtlasProdWatchDog.py +443 -0
  38. pandajedi/jedidog/AtlasQueueFillerWatchDog.py +800 -0
  39. pandajedi/jedidog/AtlasTaskWithholderWatchDog.py +245 -0
  40. pandajedi/jedidog/AtlasWorkflowManagerWatchDog.py +63 -0
  41. pandajedi/jedidog/GenWatchDog.py +21 -0
  42. pandajedi/jedidog/JumboWatchDog.py +147 -0
  43. pandajedi/jedidog/TypicalWatchDogBase.py +122 -0
  44. pandajedi/jedidog/WatchDogBase.py +53 -0
  45. pandajedi/jedidog/__init__.py +0 -0
  46. pandajedi/jediexec/reniceJEDI.py +25 -0
  47. pandajedi/jedigen/AtlasTaskGenerator.py +110 -0
  48. pandajedi/jedigen/TaskGeneratorBase.py +15 -0
  49. pandajedi/jedigen/__init__.py +0 -0
  50. pandajedi/jedimsgprocessor/__init__.py +0 -0
  51. pandajedi/jedimsgprocessor/ai_parameter_adjuster_msg_processor +71 -0
  52. pandajedi/jedimsgprocessor/atlas_idds_msg_processor.py +66 -0
  53. pandajedi/jedimsgprocessor/base_msg_processor.py +33 -0
  54. pandajedi/jedimsgprocessor/forwarding_msg_processor.py +29 -0
  55. pandajedi/jedimsgprocessor/hpo_msg_processor.py +93 -0
  56. pandajedi/jedimsgprocessor/jedi_contents_feeder_msg_processor.py +63 -0
  57. pandajedi/jedimsgprocessor/jedi_job_generator_msg_processor.py +185 -0
  58. pandajedi/jedimsgprocessor/jedi_post_processor_msg_processor.py +82 -0
  59. pandajedi/jedimsgprocessor/kafka_msg_processor.py +44 -0
  60. pandajedi/jedimsgprocessor/panda_callback_msg_processor.py +182 -0
  61. pandajedi/jedimsgprocessor/panda_to_jedi_msg_processor.py +74 -0
  62. pandajedi/jedimsgprocessor/processing_msg_processor.py +134 -0
  63. pandajedi/jedimsgprocessor/status_report_msg_processor.py +129 -0
  64. pandajedi/jedimsgprocessor/tape_carousel_msg_processor.py +118 -0
  65. pandajedi/jedimsgprocessor/workflow_manager_msg_processor.py +89 -0
  66. pandajedi/jediorder/ContentsFeeder.py +785 -0
  67. pandajedi/jediorder/JediDaemon.py +27 -0
  68. pandajedi/jediorder/JediKnight.py +55 -0
  69. pandajedi/jediorder/JediMaster.py +238 -0
  70. pandajedi/jediorder/JediMsgProcessor.py +32 -0
  71. pandajedi/jediorder/JobBroker.py +33 -0
  72. pandajedi/jediorder/JobGenerator.py +2763 -0
  73. pandajedi/jediorder/JobSplitter.py +308 -0
  74. pandajedi/jediorder/JobThrottler.py +28 -0
  75. pandajedi/jediorder/PostProcessor.py +166 -0
  76. pandajedi/jediorder/TaskBroker.py +268 -0
  77. pandajedi/jediorder/TaskCommando.py +334 -0
  78. pandajedi/jediorder/TaskGenerator.py +17 -0
  79. pandajedi/jediorder/TaskRefiner.py +611 -0
  80. pandajedi/jediorder/TaskSetupper.py +17 -0
  81. pandajedi/jediorder/WatchDog.py +79 -0
  82. pandajedi/jediorder/__init__.py +0 -0
  83. pandajedi/jedipprocess/AtlasAnalPostProcessor.py +404 -0
  84. pandajedi/jedipprocess/AtlasPostProcessorUtils.py +50 -0
  85. pandajedi/jedipprocess/AtlasProdPostProcessor.py +178 -0
  86. pandajedi/jedipprocess/GenPostProcessor.py +35 -0
  87. pandajedi/jedipprocess/MailTemplates.py +185 -0
  88. pandajedi/jedipprocess/PostProcessorBase.py +269 -0
  89. pandajedi/jedipprocess/__init__.py +0 -0
  90. pandajedi/jedirefine/AtlasAnalTaskRefiner.py +259 -0
  91. pandajedi/jedirefine/AtlasProdTaskRefiner.py +162 -0
  92. pandajedi/jedirefine/GenTaskRefiner.py +61 -0
  93. pandajedi/jedirefine/RefinerUtils.py +154 -0
  94. pandajedi/jedirefine/TaskRefinerBase.py +996 -0
  95. pandajedi/jedirefine/__init__.py +0 -0
  96. pandajedi/jedisetup/AtlasTaskSetupper.py +309 -0
  97. pandajedi/jedisetup/GenTaskSetupper.py +16 -0
  98. pandajedi/jedisetup/SimpleTaskSetupper.py +152 -0
  99. pandajedi/jedisetup/TaskSetupperBase.py +15 -0
  100. pandajedi/jedisetup/__init__.py +0 -0
  101. pandajedi/jeditest/SchemaChecker.py +41 -0
  102. pandajedi/jeditest/addContWoSoTask.py +54 -0
  103. pandajedi/jeditest/addDataCarouselRequest.py +47 -0
  104. pandajedi/jeditest/addEventServiceTask.py +101 -0
  105. pandajedi/jeditest/addHpoTask.py +81 -0
  106. pandajedi/jeditest/addIDDSStageInRequest.py +56 -0
  107. pandajedi/jeditest/addNonAtlasTask.py +71 -0
  108. pandajedi/jeditest/addNonAtlasTaskEnc.py +64 -0
  109. pandajedi/jeditest/addTestTask.py +124 -0
  110. pandajedi/jeditest/addTestTaskParamToDEFT.py +70 -0
  111. pandajedi/jeditest/addTestTaskWithMerger.py +97 -0
  112. pandajedi/jeditest/brokerTest.py +78 -0
  113. pandajedi/jeditest/cancelDataCarouselRequest.py +35 -0
  114. pandajedi/jeditest/contentsFeederTest.py +28 -0
  115. pandajedi/jeditest/contentsFeederTestWithTask.py +18 -0
  116. pandajedi/jeditest/ddmTest.py +4 -0
  117. pandajedi/jeditest/jobGenForOneTask.py +38 -0
  118. pandajedi/jeditest/jobGeneratorTest.py +43 -0
  119. pandajedi/jeditest/jobSplitterTest.py +104 -0
  120. pandajedi/jeditest/jobThrottlerTest.py +22 -0
  121. pandajedi/jeditest/msgProcessorTest.py +9 -0
  122. pandajedi/jeditest/postProcessorTest.py +18 -0
  123. pandajedi/jeditest/resubmitDataCarouselRequest.py +35 -0
  124. pandajedi/jeditest/resubmitTaskParam.py +20 -0
  125. pandajedi/jeditest/taskBrokerTest.py +22 -0
  126. pandajedi/jeditest/taskBrokerTestWithTask.py +38 -0
  127. pandajedi/jeditest/taskBufferTest.py +5 -0
  128. pandajedi/jeditest/taskCommandoTest.py +28 -0
  129. pandajedi/jeditest/taskRefinerTest.py +30 -0
  130. pandajedi/jeditest/testOneTaskToRefine.py +49 -0
  131. pandajedi/jeditest/testOneTaskToTaskBroker.py +42 -0
  132. pandajedi/jeditest/testPandaDDMMap.py +62 -0
  133. pandajedi/jeditest/updateDataCarouselRequestParams.py +50 -0
  134. pandajedi/jeditest/watchDogTest.py +25 -0
  135. pandajedi/jeditest/workQueueTest.py +22 -0
  136. pandajedi/jedithrottle/AtlasAnalJobThrottler.py +19 -0
  137. pandajedi/jedithrottle/AtlasProdJobThrottler.py +18 -0
  138. pandajedi/jedithrottle/GenJobThrottler.py +26 -0
  139. pandajedi/jedithrottle/JobThrottlerBase.py +496 -0
  140. pandajedi/jedithrottle/__init__.py +0 -0
  141. pandaserver/__init__.py +0 -0
  142. pandaserver/api/__init__.py +0 -0
  143. pandaserver/api/v1/__init__.py +0 -0
  144. pandaserver/api/v1/common.py +339 -0
  145. pandaserver/api/v1/credential_management_api.py +372 -0
  146. pandaserver/api/v1/data_carousel_api.py +264 -0
  147. pandaserver/api/v1/event_api.py +269 -0
  148. pandaserver/api/v1/file_server_api.py +942 -0
  149. pandaserver/api/v1/harvester_api.py +445 -0
  150. pandaserver/api/v1/http_client.py +166 -0
  151. pandaserver/api/v1/idds_api.py +180 -0
  152. pandaserver/api/v1/job_api.py +463 -0
  153. pandaserver/api/v1/metaconfig_api.py +122 -0
  154. pandaserver/api/v1/pilot_api.py +895 -0
  155. pandaserver/api/v1/statistics_api.py +207 -0
  156. pandaserver/api/v1/system_api.py +186 -0
  157. pandaserver/api/v1/task_api.py +1520 -0
  158. pandaserver/api/v1/tests/__init__.py +0 -0
  159. pandaserver/api/v1/tests/credential_management_api_tests.py +116 -0
  160. pandaserver/api/v1/tests/data_carousel_api_tests.py +82 -0
  161. pandaserver/api/v1/tests/harvester_api_tests.py +188 -0
  162. pandaserver/api/v1/tests/idds_api_tests.py +45 -0
  163. pandaserver/api/v1/tests/job_api_tests.py +112 -0
  164. pandaserver/api/v1/tests/pilot_api_tests.py +154 -0
  165. pandaserver/api/v1/tests/statistics_api_tests.py +104 -0
  166. pandaserver/api/v1/tests/system_api_tests.py +58 -0
  167. pandaserver/api/v1/tests/task_api_tests.py +590 -0
  168. pandaserver/api/v1/version.py +2 -0
  169. pandaserver/api/v1/workflow_api.py +136 -0
  170. pandaserver/brokerage/SiteMapper.py +406 -0
  171. pandaserver/brokerage/__init__.py +0 -0
  172. pandaserver/brokerage/broker.py +272 -0
  173. pandaserver/config/__init__.py +0 -0
  174. pandaserver/config/config_utils.py +15 -0
  175. pandaserver/config/daemon_config.py +29 -0
  176. pandaserver/config/mcp_config.py +38 -0
  177. pandaserver/config/panda_config.py +233 -0
  178. pandaserver/configurator/Carbon.py +65 -0
  179. pandaserver/configurator/Configurator.py +908 -0
  180. pandaserver/configurator/__init__.py +0 -0
  181. pandaserver/configurator/aux.py +73 -0
  182. pandaserver/daemons/__init__.py +0 -0
  183. pandaserver/daemons/master.py +110 -0
  184. pandaserver/daemons/master_systemd.py +79 -0
  185. pandaserver/daemons/scripts/__init__.py +0 -0
  186. pandaserver/daemons/scripts/add_main.py +264 -0
  187. pandaserver/daemons/scripts/add_sub.py +221 -0
  188. pandaserver/daemons/scripts/cache_pilots.py +47 -0
  189. pandaserver/daemons/scripts/cache_schedconfig.py +286 -0
  190. pandaserver/daemons/scripts/carbon.py +50 -0
  191. pandaserver/daemons/scripts/configurator.py +94 -0
  192. pandaserver/daemons/scripts/copyArchive.py +1387 -0
  193. pandaserver/daemons/scripts/datasetManager.py +1154 -0
  194. pandaserver/daemons/scripts/dummy_test.py +25 -0
  195. pandaserver/daemons/scripts/evpPD2P.py +144 -0
  196. pandaserver/daemons/scripts/hs_scrapers.py +264 -0
  197. pandaserver/daemons/scripts/metric_collector.py +927 -0
  198. pandaserver/daemons/scripts/panda_activeusers_query.py +80 -0
  199. pandaserver/daemons/scripts/pilotStreaming.py +109 -0
  200. pandaserver/daemons/scripts/process_workflow_files_daemon.py +166 -0
  201. pandaserver/daemons/scripts/recover_lost_files_daemon.py +177 -0
  202. pandaserver/daemons/scripts/task_evaluator.py +405 -0
  203. pandaserver/daemons/scripts/tmpwatch.py +70 -0
  204. pandaserver/daemons/scripts/worker_synchronization.py +97 -0
  205. pandaserver/daemons/utils.py +753 -0
  206. pandaserver/dataservice/DataServiceUtils.py +323 -0
  207. pandaserver/dataservice/ErrorCode.py +25 -0
  208. pandaserver/dataservice/RecoverLostFilesCore.py +322 -0
  209. pandaserver/dataservice/__init__.py +0 -0
  210. pandaserver/dataservice/activator.py +79 -0
  211. pandaserver/dataservice/adder_atlas_plugin.py +1106 -0
  212. pandaserver/dataservice/adder_dummy_plugin.py +31 -0
  213. pandaserver/dataservice/adder_gen.py +954 -0
  214. pandaserver/dataservice/adder_plugin_base.py +27 -0
  215. pandaserver/dataservice/adder_result.py +75 -0
  216. pandaserver/dataservice/adder_simple_plugin.py +160 -0
  217. pandaserver/dataservice/closer.py +247 -0
  218. pandaserver/dataservice/closer_atlas_plugin.py +90 -0
  219. pandaserver/dataservice/ddm.py +1381 -0
  220. pandaserver/dataservice/ddm_handler.py +95 -0
  221. pandaserver/dataservice/dyn_data_distributer.py +824 -0
  222. pandaserver/dataservice/event_lookup_client_ei.py +77 -0
  223. pandaserver/dataservice/event_picker.py +268 -0
  224. pandaserver/dataservice/finisher.py +194 -0
  225. pandaserver/dataservice/setupper.py +225 -0
  226. pandaserver/dataservice/setupper_atlas_plugin.py +1851 -0
  227. pandaserver/dataservice/setupper_dummy_plugin.py +47 -0
  228. pandaserver/dataservice/setupper_plugin_base.py +67 -0
  229. pandaserver/jobdispatcher/DispatcherUtils.py +35 -0
  230. pandaserver/jobdispatcher/ErrorCode.py +19 -0
  231. pandaserver/jobdispatcher/JobDispatcher.py +1625 -0
  232. pandaserver/jobdispatcher/Protocol.py +443 -0
  233. pandaserver/jobdispatcher/Watcher.py +186 -0
  234. pandaserver/jobdispatcher/__init__.py +0 -0
  235. pandaserver/pandamcp/__init__.py +0 -0
  236. pandaserver/pandamcp/mcp_main.py +56 -0
  237. pandaserver/pandamcp/mcp_test_client.py +95 -0
  238. pandaserver/pandamcp/mcp_utils.py +74 -0
  239. pandaserver/proxycache/__init__.py +0 -0
  240. pandaserver/proxycache/panda_proxy_cache.py +240 -0
  241. pandaserver/proxycache/token_cache.py +141 -0
  242. pandaserver/server/.gacl +6 -0
  243. pandaserver/server/panda.py +539 -0
  244. pandaserver/srvcore/CoreUtils.py +572 -0
  245. pandaserver/srvcore/MailUtils.py +106 -0
  246. pandaserver/srvcore/__init__.py +0 -0
  247. pandaserver/srvcore/allowed_methods.py +100 -0
  248. pandaserver/srvcore/oidc_utils.py +152 -0
  249. pandaserver/srvcore/panda_request.py +196 -0
  250. pandaserver/srvcore/srv_msg_utils.py +42 -0
  251. pandaserver/taskbuffer/ConBridge.py +513 -0
  252. pandaserver/taskbuffer/DBProxyPool.py +95 -0
  253. pandaserver/taskbuffer/DataCarousel.py +3053 -0
  254. pandaserver/taskbuffer/DatasetSpec.py +137 -0
  255. pandaserver/taskbuffer/DdmSpec.py +201 -0
  256. pandaserver/taskbuffer/ErrorCode.py +87 -0
  257. pandaserver/taskbuffer/EventServiceUtils.py +396 -0
  258. pandaserver/taskbuffer/FileSpec.py +290 -0
  259. pandaserver/taskbuffer/GlobalShares.py +244 -0
  260. pandaserver/taskbuffer/HarvesterMetricsSpec.py +92 -0
  261. pandaserver/taskbuffer/Initializer.py +82 -0
  262. pandaserver/taskbuffer/InputChunk.py +1080 -0
  263. pandaserver/taskbuffer/JediCacheSpec.py +57 -0
  264. pandaserver/taskbuffer/JediDatasetSpec.py +588 -0
  265. pandaserver/taskbuffer/JediFileSpec.py +242 -0
  266. pandaserver/taskbuffer/JediTaskSpec.py +1687 -0
  267. pandaserver/taskbuffer/JobSpec.py +1006 -0
  268. pandaserver/taskbuffer/JobUtils.py +232 -0
  269. pandaserver/taskbuffer/NucleusSpec.py +116 -0
  270. pandaserver/taskbuffer/OraDBProxy.py +174 -0
  271. pandaserver/taskbuffer/PanDAMsgProcessor.py +8 -0
  272. pandaserver/taskbuffer/PandaDBSchemaInfo.py +18 -0
  273. pandaserver/taskbuffer/ParseJobXML.py +350 -0
  274. pandaserver/taskbuffer/PickleFileSpec.py +18 -0
  275. pandaserver/taskbuffer/PickleJobSpec.py +25 -0
  276. pandaserver/taskbuffer/PrioUtil.py +40 -0
  277. pandaserver/taskbuffer/ProcessGroups.py +111 -0
  278. pandaserver/taskbuffer/ResourceSpec.py +175 -0
  279. pandaserver/taskbuffer/SQLDumper.py +37 -0
  280. pandaserver/taskbuffer/SQLManager.py +60 -0
  281. pandaserver/taskbuffer/SiteSpec.py +304 -0
  282. pandaserver/taskbuffer/SupErrors.py +10 -0
  283. pandaserver/taskbuffer/TaskBuffer.py +2882 -0
  284. pandaserver/taskbuffer/TaskBufferInterface.py +163 -0
  285. pandaserver/taskbuffer/Utils.py +848 -0
  286. pandaserver/taskbuffer/WorkQueue.py +227 -0
  287. pandaserver/taskbuffer/WorkQueueMapper.py +203 -0
  288. pandaserver/taskbuffer/WorkerSpec.py +143 -0
  289. pandaserver/taskbuffer/WrappedCursor.py +487 -0
  290. pandaserver/taskbuffer/WrappedPickle.py +88 -0
  291. pandaserver/taskbuffer/WrappedPostgresConn.py +24 -0
  292. pandaserver/taskbuffer/__init__.py +0 -0
  293. pandaserver/taskbuffer/db_proxy_mods/OraDBProxy_structure.png +0 -0
  294. pandaserver/taskbuffer/db_proxy_mods/__init__.py +7 -0
  295. pandaserver/taskbuffer/db_proxy_mods/base_module.py +841 -0
  296. pandaserver/taskbuffer/db_proxy_mods/data_carousel_module.py +772 -0
  297. pandaserver/taskbuffer/db_proxy_mods/entity_module.py +3804 -0
  298. pandaserver/taskbuffer/db_proxy_mods/job_complex_module.py +5661 -0
  299. pandaserver/taskbuffer/db_proxy_mods/job_standalone_module.py +2640 -0
  300. pandaserver/taskbuffer/db_proxy_mods/metrics_module.py +874 -0
  301. pandaserver/taskbuffer/db_proxy_mods/misc_standalone_module.py +4272 -0
  302. pandaserver/taskbuffer/db_proxy_mods/task_complex_module.py +6172 -0
  303. pandaserver/taskbuffer/db_proxy_mods/task_event_module.py +4953 -0
  304. pandaserver/taskbuffer/db_proxy_mods/task_standalone_module.py +4999 -0
  305. pandaserver/taskbuffer/db_proxy_mods/task_utils_module.py +2063 -0
  306. pandaserver/taskbuffer/db_proxy_mods/worker_module.py +1944 -0
  307. pandaserver/taskbuffer/db_proxy_mods/workflow_module.py +832 -0
  308. pandaserver/taskbuffer/retryModule.py +552 -0
  309. pandaserver/taskbuffer/task_split_rules.py +308 -0
  310. pandaserver/taskbuffer/workflow_processor.py +249 -0
  311. pandaserver/taskbuffer/wrapped_oracle_conn.py +18 -0
  312. pandaserver/test/SchemaChecker.py +40 -0
  313. pandaserver/test/__init__.py +0 -0
  314. pandaserver/test/banUser.py +43 -0
  315. pandaserver/test/boostPrio.py +19 -0
  316. pandaserver/test/boostUser.py +35 -0
  317. pandaserver/test/callbackDDM.py +11 -0
  318. pandaserver/test/daod_on_demand.py +95 -0
  319. pandaserver/test/finishJob.py +184 -0
  320. pandaserver/test/finishTaskJEDI.py +11 -0
  321. pandaserver/test/getJobs.py +53 -0
  322. pandaserver/test/killJob.py +79 -0
  323. pandaserver/test/killJobLowPrio.py +99 -0
  324. pandaserver/test/killJobsInTask.py +56 -0
  325. pandaserver/test/killTask.py +80 -0
  326. pandaserver/test/killTaskJEDI.py +11 -0
  327. pandaserver/test/killUser.py +83 -0
  328. pandaserver/test/lsst/README.txt +7 -0
  329. pandaserver/test/lsst/lsstSubmit.py +139 -0
  330. pandaserver/test/lsst/lsstSubmitMERGEtest.py +141 -0
  331. pandaserver/test/lsst/lsstSubmitPhosim332.py +53 -0
  332. pandaserver/test/lsst/prepare-client-tarball-from-bigpanda-server.sh +41 -0
  333. pandaserver/test/reassignJobs.py +17 -0
  334. pandaserver/test/reassignSite.py +82 -0
  335. pandaserver/test/reassignTask.py +117 -0
  336. pandaserver/test/reassignWaiting.py +39 -0
  337. pandaserver/test/recoverLostFiles.py +7 -0
  338. pandaserver/test/reloadInputDS.py +51 -0
  339. pandaserver/test/sendCommandToJob.py +26 -0
  340. pandaserver/test/setDebugMode.py +38 -0
  341. pandaserver/test/setPriority.py +28 -0
  342. pandaserver/test/testEvgen.py +60 -0
  343. pandaserver/test/testEvgen17.py +58 -0
  344. pandaserver/test/testG4sim.py +81 -0
  345. pandaserver/test/testG4sim17.py +90 -0
  346. pandaserver/test/testGlobalShares.py +131 -0
  347. pandaserver/test/testReco.py +103 -0
  348. pandaserver/test/testSimulReco14.py +98 -0
  349. pandaserver/test/testSiteMap.py +26 -0
  350. pandaserver/test/testUpdateWorkerPilotStatus.py +9 -0
  351. pandaserver/userinterface/Client.py +1686 -0
  352. pandaserver/userinterface/UserIF.py +1799 -0
  353. pandaserver/userinterface/__init__.py +0 -0
  354. pandaserver/workflow/__init__.py +0 -0
  355. pandaserver/workflow/data_handler_plugins/base_data_handler.py +48 -0
  356. pandaserver/workflow/data_handler_plugins/ddm_collection_data_handler.py +100 -0
  357. pandaserver/workflow/data_handler_plugins/panda_task_data_handler.py +140 -0
  358. pandaserver/workflow/pcwl_test.py +122 -0
  359. pandaserver/workflow/pcwl_utils.py +384 -0
  360. pandaserver/workflow/psnakemake_container.json +68 -0
  361. pandaserver/workflow/psnakemake_task.json +62 -0
  362. pandaserver/workflow/psnakemake_test.py +60 -0
  363. pandaserver/workflow/snakeparser/__init__.py +3 -0
  364. pandaserver/workflow/snakeparser/extensions.py +74 -0
  365. pandaserver/workflow/snakeparser/log.py +53 -0
  366. pandaserver/workflow/snakeparser/names.py +3 -0
  367. pandaserver/workflow/snakeparser/parser.py +332 -0
  368. pandaserver/workflow/snakeparser/utils.py +29 -0
  369. pandaserver/workflow/step_handler_plugins/base_step_handler.py +85 -0
  370. pandaserver/workflow/step_handler_plugins/panda_task_step_handler.py +280 -0
  371. pandaserver/workflow/workflow_base.py +531 -0
  372. pandaserver/workflow/workflow_core.py +1974 -0
  373. pandaserver/workflow/workflow_core_smoketest.py +388 -0
  374. pandaserver/workflow/workflow_parser.py +222 -0
  375. pandaserver/workflow/workflow_utils.py +1047 -0
@@ -0,0 +1,78 @@
1
+ import sys
2
+
3
+ from pandacommon.pandalogger.PandaLogger import PandaLogger
4
+
5
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
6
+ from pandajedi.jedicore.MsgWrapper import MsgWrapper
7
+ from pandajedi.jedicore.ThreadUtils import ThreadPool
8
+ from pandajedi.jediddm.DDMInterface import DDMInterface
9
+ from pandajedi.jediorder.JobBroker import JobBroker
10
+ from pandajedi.jediorder.JobGenerator import JobGeneratorThread
11
+ from pandajedi.jediorder.JobSplitter import JobSplitter
12
+ from pandajedi.jediorder.TaskSetupper import TaskSetupper
13
+
14
+ logger = PandaLogger().getLogger("JobGenerator")
15
+ tmpLog = MsgWrapper(logger)
16
+
17
+ tbIF = JediTaskBufferInterface()
18
+ tbIF.setupInterface()
19
+
20
+ siteMapper = tbIF.get_site_mapper()
21
+
22
+ ddmIF = DDMInterface()
23
+ ddmIF.setupInterface()
24
+
25
+ jediTaskID = int(sys.argv[1])
26
+
27
+ datasetIDs = None
28
+ if len(sys.argv) > 2:
29
+ datasetIDs = [int(sys.argv[2])]
30
+
31
+ s, taskSpec = tbIF.getTaskWithID_JEDI(jediTaskID)
32
+
33
+ cloudName = taskSpec.cloud
34
+ vo = taskSpec.vo
35
+ prodSourceLabel = taskSpec.prodSourceLabel
36
+ queueID = taskSpec.workQueue_ID
37
+ gshare_name = taskSpec.gshare
38
+
39
+ workQueue = tbIF.getWorkQueueMap().getQueueWithID(queueID, gshare_name)
40
+
41
+ threadPool = ThreadPool()
42
+
43
+ # get typical number of files
44
+ # typicalNumFilesMap = tbIF.getTypicalNumInput_JEDI(vo,prodSourceLabel,workQueue,
45
+ # useResultCache=600)
46
+
47
+ typicalNumFilesMap = {}
48
+
49
+ tmpListList = tbIF.getTasksToBeProcessed_JEDI(
50
+ None,
51
+ vo,
52
+ workQueue,
53
+ prodSourceLabel,
54
+ cloudName,
55
+ nFiles=10,
56
+ simTasks=[jediTaskID],
57
+ fullSimulation=True,
58
+ typicalNumFilesMap=typicalNumFilesMap,
59
+ simDatasets=datasetIDs,
60
+ )
61
+
62
+ taskSetupper = TaskSetupper(vo, prodSourceLabel)
63
+ taskSetupper.initializeMods(tbIF, ddmIF)
64
+
65
+ for dummyID, tmpList in tmpListList:
66
+ for taskSpec, cloudName, inputChunk in tmpList:
67
+ jobBroker = JobBroker(taskSpec.vo, taskSpec.prodSourceLabel)
68
+ tmpStat = jobBroker.initializeMods(ddmIF.getInterface(vo), tbIF)
69
+ splitter = JobSplitter()
70
+ gen = JobGeneratorThread(None, threadPool, tbIF, ddmIF, siteMapper, False, taskSetupper, None, None, "dummy", None, None)
71
+
72
+ taskParamMap = None
73
+ if taskSpec.useLimitedSites():
74
+ tmpStat, taskParamMap = gen.readTaskParams(taskSpec, taskParamMap, tmpLog)
75
+
76
+ tmpStat, inputChunk = jobBroker.doBrokerage(taskSpec, cloudName, inputChunk, taskParamMap)
77
+
78
+ # tmpStat,subChunks = splitter.doSplit(taskSpec,inputChunk,siteMapper)
@@ -0,0 +1,35 @@
1
+ import sys
2
+
3
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
4
+ from pandajedi.jediddm.DDMInterface import DDMInterface
5
+ from pandajedi.jedirefine import RefinerUtils
6
+ from pandaserver.taskbuffer.DataCarousel import DataCarouselInterface
7
+
8
+ vo = "atlas"
9
+ request_id = int(sys.argv[1])
10
+
11
+ print("set tbIF")
12
+ tbIF = JediTaskBufferInterface()
13
+ tbIF.setupInterface(max_size=1)
14
+
15
+ print("set ddmIF")
16
+ ddmIF = DDMInterface()
17
+ ddmIF.setupInterface()
18
+
19
+ print("set DCIF")
20
+ data_carousel_interface = DataCarouselInterface(tbIF, ddmIF.getInterface(vo))
21
+ if data_carousel_interface is None:
22
+ # data carousel interface is undefined
23
+ errStr = f"data carousel interface is undefined for vo={vo}"
24
+ print(errStr)
25
+ sys.exit(1)
26
+
27
+ print(f"cancel request_id={request_id}")
28
+ ret = data_carousel_interface.cancel_request(request_id)
29
+
30
+ if not ret:
31
+ # failed to cancel
32
+ print(f"failed; got {ret}")
33
+ else:
34
+ # cancelled
35
+ print(f"cancelled, got {ret}")
@@ -0,0 +1,28 @@
1
+ import sys
2
+
3
+ try:
4
+ testTaskType = sys.argv[1]
5
+ except Exception:
6
+ testTaskType = "test"
7
+
8
+ try:
9
+ vo = sys.argv[2]
10
+ except Exception:
11
+ vo = "atlas"
12
+
13
+ import multiprocessing
14
+
15
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
16
+ from pandajedi.jediddm.DDMInterface import DDMInterface
17
+ from pandajedi.jediorder import ContentsFeeder
18
+
19
+ tbIF = JediTaskBufferInterface()
20
+ tbIF.setupInterface()
21
+
22
+ ddmIF = DDMInterface()
23
+ ddmIF.setupInterface()
24
+
25
+ parent_conn, child_conn = multiprocessing.Pipe()
26
+
27
+ contentsFeeder = multiprocessing.Process(target=ContentsFeeder.launcher, args=(child_conn, tbIF, ddmIF, vo, testTaskType))
28
+ contentsFeeder.start()
@@ -0,0 +1,18 @@
1
+ import sys
2
+
3
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
4
+ from pandajedi.jediddm.DDMInterface import DDMInterface
5
+ from pandajedi.jediorder.ContentsFeeder import ContentsFeederThread
6
+
7
+ jedi_task_id = int(sys.argv[1])
8
+
9
+ tbIF = JediTaskBufferInterface()
10
+ tbIF.setupInterface()
11
+
12
+ ddmIF = DDMInterface()
13
+ ddmIF.setupInterface()
14
+
15
+ task_ds_list = tbIF.getDatasetsToFeedContents_JEDI(task_id=jedi_task_id, force_read=True)
16
+
17
+ c = ContentsFeederThread(taskDsList=None, threadPool=None, taskbufferIF=tbIF, ddmIF=ddmIF, pid="")
18
+ c.feed_contents_to_tasks(task_ds_list, real_run=False)
@@ -0,0 +1,4 @@
1
+ from pandajedi.jediddm.DDMInterface import DDMInterface
2
+
3
+ ddmIF = DDMInterface()
4
+ ddmIF.setupInterface()
@@ -0,0 +1,38 @@
1
+ import os
2
+ import socket
3
+ import sys
4
+
5
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
6
+ from pandajedi.jedicore.ThreadUtils import ListWithLock, ThreadPool
7
+ from pandajedi.jediddm.DDMInterface import DDMInterface
8
+ from pandajedi.jediorder.JobGenerator import JobGeneratorThread
9
+ from pandajedi.jediorder.TaskSetupper import TaskSetupper
10
+
11
+ tbIF = JediTaskBufferInterface()
12
+ tbIF.setupInterface()
13
+
14
+ siteMapper = tbIF.get_site_mapper()
15
+
16
+ ddmIF = DDMInterface()
17
+ ddmIF.setupInterface()
18
+
19
+ jediTaskID = int(sys.argv[1])
20
+
21
+ # get task attributes
22
+ s, taskSpec = tbIF.getTaskWithID_JEDI(jediTaskID)
23
+ pid = f"{socket.getfqdn().split('.')[0]}-{os.getpid()}_{os.getpgrp()}-sgen"
24
+ vo = taskSpec.vo
25
+ prodSourceLabel = taskSpec.prodSourceLabel
26
+ workQueue = tbIF.getWorkQueueMap().getQueueWithIDGshare(taskSpec.workQueue_ID, taskSpec.gshare)
27
+
28
+ # get inputs
29
+ tmpList = tbIF.getTasksToBeProcessed_JEDI(pid, None, workQueue, None, None, nFiles=1000, target_tasks=[jediTaskID])
30
+ inputList = ListWithLock(tmpList)
31
+
32
+ # create thread
33
+ threadPool = ThreadPool()
34
+ taskSetupper = TaskSetupper(vo, prodSourceLabel)
35
+ taskSetupper.initializeMods(tbIF, ddmIF)
36
+ gen = JobGeneratorThread(inputList, threadPool, tbIF, ddmIF, siteMapper, True, taskSetupper, pid, workQueue, "sgen", None, None, None, False)
37
+ gen.start()
38
+ gen.join()
@@ -0,0 +1,43 @@
1
+ import multiprocessing
2
+ import sys
3
+
4
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
5
+ from pandajedi.jediddm.DDMInterface import DDMInterface
6
+ from pandajedi.jediorder import JobGenerator
7
+
8
+ tbIF = JediTaskBufferInterface()
9
+ tbIF.setupInterface()
10
+
11
+
12
+ ddmIF = DDMInterface()
13
+ ddmIF.setupInterface()
14
+
15
+
16
+ parent_conn, child_conn = multiprocessing.Pipe()
17
+
18
+ try:
19
+ testVO = sys.argv[1]
20
+ except Exception:
21
+ testVO = "atlas"
22
+
23
+ try:
24
+ testTaskType = sys.argv[2]
25
+ except Exception:
26
+ testTaskType = "test"
27
+
28
+ try:
29
+ execJob = False
30
+ if sys.argv[3] == "y":
31
+ execJob = True
32
+ except Exception:
33
+ pass
34
+
35
+ try:
36
+ testClouds = sys.argv[4].split(",")
37
+ except Exception:
38
+ testClouds = [None]
39
+
40
+ print(f"{testVO} {testTaskType} {testClouds}")
41
+
42
+ gen = multiprocessing.Process(target=JobGenerator.launcher, args=(child_conn, tbIF, ddmIF, testVO, testTaskType, testClouds, False, execJob, None, True))
43
+ gen.start()
@@ -0,0 +1,104 @@
1
+ import sys
2
+
3
+ from pandajedi.jedicore import Interaction
4
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
5
+ from pandajedi.jedicore.MsgWrapper import MsgWrapper
6
+ from pandajedi.jedicore.ThreadUtils import ListWithLock, ThreadPool
7
+ from pandajedi.jediddm.DDMInterface import DDMInterface
8
+ from pandajedi.jediorder.JobBroker import JobBroker
9
+ from pandajedi.jediorder.JobGenerator import JobGeneratorThread, logger
10
+ from pandajedi.jediorder.JobSplitter import JobSplitter
11
+ from pandajedi.jediorder.TaskSetupper import TaskSetupper
12
+
13
+ tmpLog = MsgWrapper(logger)
14
+
15
+
16
+ tbIF = JediTaskBufferInterface()
17
+ tbIF.setupInterface()
18
+
19
+ siteMapper = tbIF.get_site_mapper()
20
+
21
+
22
+ ddmIF = DDMInterface()
23
+ ddmIF.setupInterface()
24
+
25
+ jediTaskID = int(sys.argv[1])
26
+ try:
27
+ datasetID = [int(sys.argv[2])]
28
+ except Exception:
29
+ datasetID = None
30
+ try:
31
+ n_files = int(sys.argv[3])
32
+ except Exception:
33
+ n_files = 10
34
+
35
+ s, taskSpec = tbIF.getTaskWithID_JEDI(jediTaskID)
36
+
37
+ cloudName = taskSpec.cloud
38
+ vo = taskSpec.vo
39
+ prodSourceLabel = taskSpec.prodSourceLabel
40
+ queueID = taskSpec.workQueue_ID
41
+ gshare_name = taskSpec.gshare
42
+
43
+ workQueue = tbIF.getWorkQueueMap().getQueueWithIDGshare(queueID, gshare_name)
44
+
45
+ brokerageLockIDs = ListWithLock([])
46
+
47
+ threadPool = ThreadPool()
48
+
49
+ # get typical number of files
50
+ typicalNumFilesMap = tbIF.getTypicalNumInput_JEDI(vo, prodSourceLabel, workQueue, useResultCache=600)
51
+
52
+ tmpListList = tbIF.getTasksToBeProcessed_JEDI(
53
+ None,
54
+ vo,
55
+ workQueue,
56
+ prodSourceLabel,
57
+ cloudName,
58
+ nFiles=n_files,
59
+ simTasks=[jediTaskID],
60
+ fullSimulation=True,
61
+ typicalNumFilesMap=typicalNumFilesMap,
62
+ simDatasets=datasetID,
63
+ numNewTaskWithJumbo=5,
64
+ ignore_lock=True,
65
+ )
66
+
67
+ taskSetupper = TaskSetupper(vo, prodSourceLabel)
68
+ taskSetupper.initializeMods(tbIF, ddmIF)
69
+
70
+ resource_types = tbIF.load_resource_types()
71
+
72
+ for dummyID, tmpList in tmpListList:
73
+ task_common = {}
74
+ for taskSpec, cloudName, inputChunk in tmpList:
75
+ jobBroker = JobBroker(taskSpec.vo, taskSpec.prodSourceLabel)
76
+ tmpStat = jobBroker.initializeMods(ddmIF.getInterface(vo), tbIF)
77
+ jobBrokerCore = jobBroker.getImpl(taskSpec.vo, taskSpec.prodSourceLabel)
78
+ jobBrokerCore.setTestMode()
79
+ jobBrokerCore.set_task_common_dict(task_common)
80
+ splitter = JobSplitter()
81
+ gen = JobGeneratorThread(
82
+ None, threadPool, tbIF, ddmIF, siteMapper, False, taskSetupper, None, None, "dummy", None, None, brokerageLockIDs, False, resource_types
83
+ )
84
+ gen.time_profile_level = 1
85
+
86
+ taskParamMap = None
87
+ if taskSpec.useLimitedSites():
88
+ tmpStat, taskParamMap = gen.readTaskParams(taskSpec, taskParamMap, tmpLog)
89
+ jobBroker.setLockID(taskSpec.vo, taskSpec.prodSourceLabel, 123, 0)
90
+ tmpStat, inputChunk = jobBroker.doBrokerage(taskSpec, cloudName, inputChunk, taskParamMap)
91
+ brokerageLockID = jobBroker.getBaseLockID(taskSpec.vo, taskSpec.prodSourceLabel)
92
+ if brokerageLockID is not None:
93
+ brokerageLockIDs.append(brokerageLockID)
94
+ for brokeragelockID in brokerageLockIDs:
95
+ tbIF.unlockProcessWithPID_JEDI(taskSpec.vo, taskSpec.prodSourceLabel, workQueue.queue_id, brokeragelockID, True)
96
+ tmpStat, subChunks, isSkipped = splitter.doSplit(taskSpec, inputChunk, siteMapper, allow_chunk_size_limit=True)
97
+ if tmpStat == Interaction.SC_SUCCEEDED and isSkipped:
98
+ # run again without chunk size limit to generate jobs for skipped snippet
99
+ tmpStat, tmpChunks, isSkipped = splitter.doSplit(taskSpec, inputChunk, siteMapper, allow_chunk_size_limit=False)
100
+ if tmpStat == Interaction.SC_SUCCEEDED:
101
+ subChunks += tmpChunks
102
+ tmpStat, pandaJobs, datasetToRegister, oldPandaIDs, parallelOutMap, outDsMap = gen.doGenerate(
103
+ taskSpec, cloudName, subChunks, inputChunk, tmpLog, True, splitter=splitter
104
+ )
@@ -0,0 +1,22 @@
1
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
2
+ from pandajedi.jediorder.JobThrottler import JobThrottler
3
+
4
+ tbIF = JediTaskBufferInterface()
5
+ tbIF.setupInterface()
6
+
7
+ vo = "atlas"
8
+ prodSourceLabel = "managed"
9
+ cloud = "WORLD"
10
+
11
+ # get SiteMapper
12
+ siteMapper = tbIF.get_site_mapper()
13
+ wqMap = tbIF.getWorkQueueMap()
14
+
15
+ jt = JobThrottler(vo, prodSourceLabel)
16
+ jt.initializeMods(tbIF)
17
+
18
+ workQueues = wqMap.getAlignedQueueList(vo, prodSourceLabel)
19
+ resource_types = tbIF.load_resource_types()
20
+ for workQueue in workQueues:
21
+ for resource_type in resource_types:
22
+ print(jt.toBeThrottled(vo, prodSourceLabel, cloud, workQueue, resource_type.resource_name))
@@ -0,0 +1,9 @@
1
+ import multiprocessing
2
+
3
+ from pandajedi.jediorder import JediMsgProcessor
4
+
5
+ stop_event = multiprocessing.Event()
6
+
7
+ agent = multiprocessing.Process(target=JediMsgProcessor.launcher, args=(stop_event,))
8
+ agent.start()
9
+ stop_event.wait()
@@ -0,0 +1,18 @@
1
+ import multiprocessing
2
+
3
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
4
+ from pandajedi.jediddm.DDMInterface import DDMInterface
5
+ from pandajedi.jediorder import PostProcessor
6
+
7
+ tbIF = JediTaskBufferInterface()
8
+ tbIF.setupInterface()
9
+
10
+
11
+ ddmIF = DDMInterface()
12
+ ddmIF.setupInterface()
13
+
14
+
15
+ parent_conn, child_conn = multiprocessing.Pipe()
16
+
17
+ postProcessor = multiprocessing.Process(target=PostProcessor.launcher, args=(child_conn, tbIF, ddmIF))
18
+ postProcessor.start()
@@ -0,0 +1,35 @@
1
+ import sys
2
+
3
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
4
+ from pandajedi.jediddm.DDMInterface import DDMInterface
5
+ from pandajedi.jedirefine import RefinerUtils
6
+ from pandaserver.taskbuffer.DataCarousel import DataCarouselInterface
7
+
8
+ vo = "atlas"
9
+ request_id = int(sys.argv[1])
10
+
11
+ print("set tbIF")
12
+ tbIF = JediTaskBufferInterface()
13
+ tbIF.setupInterface(max_size=1)
14
+
15
+ print("set ddmIF")
16
+ ddmIF = DDMInterface()
17
+ ddmIF.setupInterface()
18
+
19
+ print("set DCIF")
20
+ data_carousel_interface = DataCarouselInterface(tbIF, ddmIF.getInterface(vo))
21
+ if data_carousel_interface is None:
22
+ # data carousel interface is undefined
23
+ errStr = f"data carousel interface is undefined for vo={vo}"
24
+ print(errStr)
25
+ sys.exit(1)
26
+
27
+ print(f"resubmit for request_id={request_id}")
28
+ dc_req_spec_resubmitted, _ = data_carousel_interface.resubmit_request(request_id)
29
+
30
+ if not dc_req_spec_resubmitted:
31
+ # failed to resubmit
32
+ print(f"failed; got {dc_req_spec_resubmitted}")
33
+ else:
34
+ # resubmitted
35
+ print(f"resubmitted; new request_id={dc_req_spec_resubmitted.request_id}")
@@ -0,0 +1,20 @@
1
+ import sys
2
+
3
+ from taskbuffer.Initializer import initializer
4
+
5
+ from pandajedi.jedicore import JediTaskBuffer
6
+
7
+ jediTaskID = sys.argv[1]
8
+
9
+ # initialize DB using dummy connection
10
+ initializer.init()
11
+
12
+
13
+ taskBuffer = JediTaskBuffer.JediTaskBuffer(None)
14
+ proxy = taskBuffer.proxyPool.getProxy()
15
+
16
+ s, o = proxy.getClobObj("select task_param from atlas_deft.deft_task where task_id=:task_id", {":task_id": jediTaskID})
17
+
18
+ taskParamStr = o[0][0]
19
+
20
+ proxy.insertTaskParams_JEDI(None, taskParamStr)
@@ -0,0 +1,22 @@
1
+ import multiprocessing
2
+ import sys
3
+
4
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
5
+ from pandajedi.jediddm.DDMInterface import DDMInterface
6
+ from pandajedi.jediorder import TaskBroker
7
+
8
+ try:
9
+ testTaskType = sys.argv[1]
10
+ except Exception:
11
+ testTaskType = "test"
12
+
13
+ tbIF = JediTaskBufferInterface()
14
+ tbIF.setupInterface()
15
+
16
+ ddmIF = DDMInterface()
17
+ ddmIF.setupInterface()
18
+
19
+ parent_conn, child_conn = multiprocessing.Pipe()
20
+
21
+ taskBroker = multiprocessing.Process(target=TaskBroker.launcher, args=(child_conn, tbIF, ddmIF, "atlas", testTaskType))
22
+ taskBroker.start()
@@ -0,0 +1,38 @@
1
+ import sys
2
+
3
+ from pandajedi.jedicore.FactoryBase import FactoryBase
4
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
5
+ from pandajedi.jediddm.DDMInterface import DDMInterface
6
+ from pandajedi.jediorder.TaskBroker import TaskBroker
7
+
8
+ tbIF = JediTaskBufferInterface()
9
+ tbIF.setupInterface()
10
+
11
+ siteMapper = tbIF.get_site_mapper()
12
+
13
+
14
+ ddmIF = DDMInterface()
15
+ ddmIF.setupInterface()
16
+
17
+ jedi_task_id = int(sys.argv[1])
18
+
19
+ s, task_spec = tbIF.getTaskWithID_JEDI(jedi_task_id)
20
+
21
+ vo = task_spec.vo
22
+ prodSourceLabel = task_spec.prodSourceLabel
23
+ resource_type = task_spec.resource_type
24
+ queue_id = task_spec.workQueue_ID
25
+ gshare_name = task_spec.gshare
26
+
27
+ work_queue = tbIF.getWorkQueueMap().getQueueWithIDGshare(queue_id, gshare_name)
28
+
29
+
30
+ task_list = tbIF.getTasksToBeProcessed_JEDI(None, None, None, None, None, simTasks=[jedi_task_id], readMinFiles=True, fullSimulation=True)
31
+ for ts in task_list:
32
+ for t in ts[1]:
33
+ t[0].nucleus = None
34
+
35
+ task_broker = TaskBroker(None, tbIF, ddmIF, [vo], [prodSourceLabel])
36
+ FactoryBase.initializeMods(task_broker, task_broker.taskBufferIF, task_broker.ddmIF)
37
+ impl = task_broker.getImpl(vo, prodSourceLabel)
38
+ impl.doBrokerage(task_list, vo, prodSourceLabel, work_queue, resource_type)
@@ -0,0 +1,5 @@
1
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
2
+
3
+ tbIF = JediTaskBufferInterface()
4
+ tbIF.setupInterface()
5
+ wqMap = tbIF.getWorkQueueMap()
@@ -0,0 +1,28 @@
1
+ import multiprocessing
2
+
3
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
4
+ from pandajedi.jediddm.DDMInterface import DDMInterface
5
+ from pandajedi.jediorder import TaskCommando
6
+
7
+ tbIF = JediTaskBufferInterface()
8
+ tbIF.setupInterface()
9
+
10
+
11
+ ddmIF = DDMInterface()
12
+ ddmIF.setupInterface()
13
+
14
+
15
+ parent_conn, child_conn = multiprocessing.Pipe()
16
+
17
+ try:
18
+ testVO = sys.argv[1]
19
+ except Exception:
20
+ testVO = "any"
21
+
22
+ try:
23
+ testTaskType = sys.argv[2]
24
+ except Exception:
25
+ testTaskType = "any"
26
+
27
+ taskCommando = multiprocessing.Process(target=TaskCommando.launcher, args=(child_conn, tbIF, ddmIF, testVO, testTaskType))
28
+ taskCommando.start()
@@ -0,0 +1,30 @@
1
+ import sys
2
+
3
+ try:
4
+ testTaskType = sys.argv[1]
5
+ except Exception:
6
+ testTaskType = "test"
7
+
8
+ try:
9
+ vo = sys.argv[2]
10
+ except Exception:
11
+ vo = "atlas"
12
+
13
+ import multiprocessing
14
+
15
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
16
+ from pandajedi.jediddm.DDMInterface import DDMInterface
17
+ from pandajedi.jediorder import TaskRefiner
18
+
19
+ tbIF = JediTaskBufferInterface()
20
+ tbIF.setupInterface()
21
+
22
+
23
+ ddmIF = DDMInterface()
24
+ ddmIF.setupInterface()
25
+
26
+
27
+ parent_conn, child_conn = multiprocessing.Pipe()
28
+
29
+ taskRefiner = multiprocessing.Process(target=TaskRefiner.launcher, args=(child_conn, tbIF, ddmIF, vo, testTaskType))
30
+ taskRefiner.start()
@@ -0,0 +1,49 @@
1
+ import sys
2
+
3
+ from pandacommon.pandalogger.PandaLogger import PandaLogger
4
+
5
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
6
+ from pandajedi.jedicore.MsgWrapper import MsgWrapper
7
+ from pandajedi.jediddm.DDMInterface import DDMInterface
8
+ from pandajedi.jediorder.TaskRefiner import TaskRefiner
9
+ from pandajedi.jedirefine import RefinerUtils
10
+
11
+ logger = PandaLogger().getLogger("TaskRefiner")
12
+ tmpLog = MsgWrapper(logger)
13
+
14
+ tbIF = JediTaskBufferInterface()
15
+ tbIF.setupInterface()
16
+
17
+ siteMapper = tbIF.get_site_mapper()
18
+
19
+ ddmIF = DDMInterface()
20
+ ddmIF.setupInterface()
21
+
22
+
23
+ jediTaskID = int(sys.argv[1])
24
+
25
+ s, taskSpec = tbIF.getTaskWithID_JEDI(jediTaskID)
26
+ refiner = TaskRefiner(None, tbIF, ddmIF, taskSpec.vo, taskSpec.prodSourceLabel)
27
+ refiner.initializeMods(tbIF, ddmIF)
28
+
29
+
30
+ taskParam = tbIF.getTaskParamsWithID_JEDI(jediTaskID)
31
+ taskParamMap = RefinerUtils.decodeJSON(taskParam)
32
+
33
+ vo = taskParamMap["vo"]
34
+ prodSourceLabel = taskParamMap["prodSourceLabel"]
35
+ taskType = taskParamMap["taskType"]
36
+
37
+ cloudName = taskSpec.cloud
38
+ vo = taskSpec.vo
39
+ prodSourceLabel = taskSpec.prodSourceLabel
40
+ queueID = taskSpec.workQueue_ID
41
+ gshare_name = taskSpec.gshare
42
+
43
+ impl = refiner.instantiateImpl(vo, prodSourceLabel, taskType, tbIF, ddmIF)
44
+
45
+ workQueueMapper = tbIF.getWorkQueueMap()
46
+
47
+ impl.initializeRefiner(tmpLog)
48
+ impl.extractCommon(jediTaskID, taskParamMap, workQueueMapper, taskSpec.splitRule)
49
+ impl.doRefine(jediTaskID, taskParamMap)
@@ -0,0 +1,42 @@
1
+ import sys
2
+
3
+ from pandacommon.pandalogger.PandaLogger import PandaLogger
4
+
5
+ from pandajedi.jedicore.JediTaskBufferInterface import JediTaskBufferInterface
6
+ from pandajedi.jedicore.MsgWrapper import MsgWrapper
7
+ from pandajedi.jediddm.DDMInterface import DDMInterface
8
+ from pandajedi.jediorder.TaskBroker import TaskBroker
9
+ from pandajedi.jedirefine import RefinerUtils
10
+
11
+ logger = PandaLogger().getLogger("TaskBroker")
12
+ tmpLog = MsgWrapper(logger)
13
+
14
+ tbIF = JediTaskBufferInterface()
15
+ tbIF.setupInterface()
16
+
17
+ siteMapper = tbIF.get_site_mapper()
18
+
19
+ ddmIF = DDMInterface()
20
+ ddmIF.setupInterface()
21
+
22
+ jediTaskID = int(sys.argv[1])
23
+
24
+ s, taskSpec = tbIF.getTaskWithID_JEDI(jediTaskID, False)
25
+ body = TaskBroker(None, tbIF, ddmIF, taskSpec.vo, taskSpec.prodSourceLabel)
26
+ body.initializeMods(tbIF, ddmIF)
27
+
28
+ taskParam = tbIF.getTaskParamsWithID_JEDI(jediTaskID)
29
+ taskParamMap = RefinerUtils.decodeJSON(taskParam)
30
+
31
+ vo = taskParamMap["vo"]
32
+ prodSourceLabel = taskParamMap["prodSourceLabel"]
33
+ taskType = taskParamMap["taskType"]
34
+
35
+ workQueueMapper = tbIF.getWorkQueueMap()
36
+ workQueue = workQueueMapper.getQueueWithIDGshare(taskSpec.workQueue_ID, taskSpec.gshare)
37
+
38
+ impl = body.getImpl(vo, prodSourceLabel)
39
+
40
+
41
+ tmpListItem = tbIF.getTasksToBeProcessed_JEDI(None, None, None, None, None, simTasks=[jediTaskID], readMinFiles=True)
42
+ impl.doBrokerage(tmpListItem, taskSpec.vo, taskSpec.prodSourceLabel, workQueue, taskSpec.resource_type)