panda-server 0.4.0__tar.gz → 0.4.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. {panda_server-0.4.0 → panda_server-0.4.2}/PKG-INFO +1 -2
  2. panda_server-0.4.2/PandaPkgInfo.py +1 -0
  3. {panda_server-0.4.0 → panda_server-0.4.2}/package/hatch_build.py +2 -1
  4. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/brokerage/SiteMapper.py +1 -1
  5. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/configurator/Configurator.py +2 -17
  6. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/utils.py +95 -36
  7. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/setupper_atlas_plugin.py +20 -20
  8. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/jobdispatcher/JobDispatcher.py +1 -69
  9. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/server/panda.py +0 -2
  10. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/srvcore/allowed_methods.py +0 -2
  11. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/OraDBProxy.py +61 -1690
  12. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/TaskBuffer.py +4 -321
  13. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/WrappedCursor.py +30 -17
  14. panda_server-0.4.2/pandaserver/test/test_error_classification.py +71 -0
  15. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/userinterface/Client.py +38 -15
  16. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/userinterface/UserIF.py +2 -16
  17. {panda_server-0.4.0 → panda_server-0.4.2}/templates/panda_server.cfg.rpmnew.template +0 -10
  18. panda_server-0.4.0/PandaPkgInfo.py +0 -1
  19. panda_server-0.4.0/pandaserver/test/test_error_classification.py +0 -38
  20. {panda_server-0.4.0 → panda_server-0.4.2}/.pre-commit-config.yaml +0 -0
  21. {panda_server-0.4.0 → panda_server-0.4.2}/ChangeLog.txt +0 -0
  22. {panda_server-0.4.0 → panda_server-0.4.2}/Dockerfile +0 -0
  23. {panda_server-0.4.0 → panda_server-0.4.2}/INSTALL.md +0 -0
  24. {panda_server-0.4.0 → panda_server-0.4.2}/INSTALL_ATLAS.md +0 -0
  25. {panda_server-0.4.0 → panda_server-0.4.2}/LICENSE.txt +0 -0
  26. {panda_server-0.4.0 → panda_server-0.4.2}/MANIFEST.in +0 -0
  27. {panda_server-0.4.0 → panda_server-0.4.2}/README.md +0 -0
  28. {panda_server-0.4.0 → panda_server-0.4.2}/panda-server.spec +0 -0
  29. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/__init__.py +0 -0
  30. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/brokerage/__init__.py +0 -0
  31. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/brokerage/broker.py +0 -0
  32. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/config/__init__.py +0 -0
  33. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/config/config_utils.py +0 -0
  34. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/config/daemon_config.py +0 -0
  35. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/config/panda_config.py +0 -0
  36. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/configurator/Carbon.py +0 -0
  37. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/configurator/__init__.py +0 -0
  38. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/configurator/aux.py +0 -0
  39. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/__init__.py +0 -0
  40. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/master.py +0 -0
  41. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/master_systemd.py +0 -0
  42. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/__init__.py +0 -0
  43. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/add_main.py +0 -0
  44. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/add_sub.py +0 -0
  45. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/cache_pilots.py +0 -0
  46. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/cache_schedconfig.py +0 -0
  47. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/carbon.py +0 -0
  48. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/configurator.py +0 -0
  49. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/copyArchive.py +0 -0
  50. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/datasetManager.py +0 -0
  51. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/dummy_test.py +0 -0
  52. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/evpPD2P.py +0 -0
  53. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/metric_collector.py +0 -0
  54. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/panda_activeusers_query.py +0 -0
  55. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/pilotStreaming.py +0 -0
  56. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/process_workflow_files_daemon.py +0 -0
  57. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/recover_lost_files_daemon.py +0 -0
  58. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/task_evaluator.py +0 -0
  59. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/tmpwatch.py +0 -0
  60. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/daemons/scripts/worker_synchronization.py +0 -0
  61. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/DataServiceUtils.py +0 -0
  62. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/ErrorCode.py +0 -0
  63. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/RecoverLostFilesCore.py +0 -0
  64. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/__init__.py +0 -0
  65. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/activator.py +0 -0
  66. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/adder_atlas_plugin.py +0 -0
  67. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/adder_dummy_plugin.py +0 -0
  68. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/adder_gen.py +0 -0
  69. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/adder_plugin_base.py +0 -0
  70. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/adder_result.py +0 -0
  71. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/adder_simple_plugin.py +0 -0
  72. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/closer.py +0 -0
  73. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/closer_atlas_plugin.py +0 -0
  74. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/ddm.py +0 -0
  75. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/ddm_handler.py +0 -0
  76. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/dyn_data_distributer.py +0 -0
  77. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/event_lookup_client_ei.py +0 -0
  78. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/event_picker.py +0 -0
  79. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/finisher.py +0 -0
  80. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/setupper.py +0 -0
  81. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/setupper_dummy_plugin.py +0 -0
  82. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/dataservice/setupper_plugin_base.py +0 -0
  83. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/jobdispatcher/DispatcherUtils.py +0 -0
  84. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/jobdispatcher/ErrorCode.py +0 -0
  85. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/jobdispatcher/Protocol.py +0 -0
  86. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/jobdispatcher/Watcher.py +0 -0
  87. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/jobdispatcher/__init__.py +0 -0
  88. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/proxycache/__init__.py +0 -0
  89. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/proxycache/panda_proxy_cache.py +0 -0
  90. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/proxycache/token_cache.py +0 -0
  91. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/server/.gacl +0 -0
  92. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/srvcore/CoreUtils.py +0 -0
  93. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/srvcore/MailUtils.py +0 -0
  94. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/srvcore/__init__.py +0 -0
  95. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/srvcore/oidc_utils.py +0 -0
  96. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/srvcore/panda_request.py +0 -0
  97. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/srvcore/srv_msg_utils.py +0 -0
  98. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/ConBridge.py +0 -0
  99. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/DBProxyPool.py +0 -0
  100. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/DatasetSpec.py +0 -0
  101. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/DdmSpec.py +0 -0
  102. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/ErrorCode.py +0 -0
  103. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/EventServiceUtils.py +0 -0
  104. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/FileSpec.py +0 -0
  105. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/GlobalShares.py +0 -0
  106. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/HarvesterMetricsSpec.py +0 -0
  107. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/Initializer.py +0 -0
  108. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/JobSpec.py +0 -0
  109. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/JobUtils.py +0 -0
  110. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/NucleusSpec.py +0 -0
  111. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/PanDAMsgProcessor.py +0 -0
  112. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/PandaDBSchemaInfo.py +0 -0
  113. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/PickleFileSpec.py +0 -0
  114. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/PickleJobSpec.py +0 -0
  115. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/PrioUtil.py +0 -0
  116. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/ProcessGroups.py +0 -0
  117. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/ResourceSpec.py +0 -0
  118. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/SQLDumper.py +0 -0
  119. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/SQLManager.py +0 -0
  120. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/SiteSpec.py +0 -0
  121. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/SupErrors.py +0 -0
  122. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/TaskBufferInterface.py +0 -0
  123. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/Utils.py +0 -0
  124. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/WorkerSpec.py +0 -0
  125. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/WrappedPickle.py +0 -0
  126. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/WrappedPostgresConn.py +0 -0
  127. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/__init__.py +0 -0
  128. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/retryModule.py +0 -0
  129. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/task_split_rules.py +0 -0
  130. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/workflow_processor.py +0 -0
  131. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/taskbuffer/wrapped_oracle_conn.py +0 -0
  132. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/SchemaChecker.py +0 -0
  133. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/__init__.py +0 -0
  134. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/alice/README.txt +0 -0
  135. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/alice/mysetup +0 -0
  136. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/alice/titan_testScript_ec2_alice_1.py +0 -0
  137. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/alice/titan_testScript_ec2_alice_2.py +0 -0
  138. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/banUser.py +0 -0
  139. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/boostPrio.py +0 -0
  140. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/boostUser.py +0 -0
  141. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/callbackDDM.py +0 -0
  142. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/daod_on_demand.py +0 -0
  143. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/finishJob.py +0 -0
  144. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/finishTaskJEDI.py +0 -0
  145. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/getJobs.py +0 -0
  146. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/killJob.py +0 -0
  147. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/killJobLowPrio.py +0 -0
  148. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/killJobsInTask.py +0 -0
  149. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/killProdJobs.py +0 -0
  150. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/killTask.py +0 -0
  151. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/killTaskJEDI.py +0 -0
  152. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/killUser.py +0 -0
  153. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/lsst/README.txt +0 -0
  154. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/lsst/lsstSubmit.py +0 -0
  155. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/lsst/lsstSubmitMERGEtest.py +0 -0
  156. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/lsst/lsstSubmitPhosim332.py +0 -0
  157. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/lsst/prepare-client-tarball-from-bigpanda-server.sh +0 -0
  158. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/reassignJobs.py +0 -0
  159. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/reassignSite.py +0 -0
  160. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/reassignTask.py +0 -0
  161. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/reassignWaiting.py +0 -0
  162. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/recoverLostFiles.py +0 -0
  163. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/reloadInputDS.py +0 -0
  164. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/sendCommandToJob.py +0 -0
  165. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/setDebugMode.py +0 -0
  166. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/setPriority.py +0 -0
  167. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/testEvgen.py +0 -0
  168. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/testEvgen17.py +0 -0
  169. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/testG4sim.py +0 -0
  170. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/testG4sim17.py +0 -0
  171. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/testGetCriteriaForGlobalShares.py +0 -0
  172. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/testGlobalShares.py +0 -0
  173. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/testJobFlowATLAS.py +0 -0
  174. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/testReco.py +0 -0
  175. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/testSimulReco14.py +0 -0
  176. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/testSiteMap.py +0 -0
  177. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/testUpdateWorkerPilotStatus.py +0 -0
  178. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/test/testutils.py +0 -0
  179. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/userinterface/__init__.py +0 -0
  180. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/workflow/__init__.py +0 -0
  181. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/workflow/pcwl_test.py +0 -0
  182. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/workflow/pcwl_utils.py +0 -0
  183. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/workflow/psnakemake_container.json +0 -0
  184. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/workflow/psnakemake_task.json +0 -0
  185. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/workflow/psnakemake_test.py +0 -0
  186. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/workflow/snakeparser/__init__.py +0 -0
  187. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/workflow/snakeparser/extensions.py +0 -0
  188. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/workflow/snakeparser/log.py +0 -0
  189. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/workflow/snakeparser/names.py +0 -0
  190. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/workflow/snakeparser/parser.py +0 -0
  191. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/workflow/snakeparser/utils.py +0 -0
  192. {panda_server-0.4.0 → panda_server-0.4.2}/pandaserver/workflow/workflow_utils.py +0 -0
  193. {panda_server-0.4.0 → panda_server-0.4.2}/pyproject.toml +0 -0
  194. {panda_server-0.4.0 → panda_server-0.4.2}/templates/bin/panda_server-makeSlsXml.exe.template +0 -0
  195. {panda_server-0.4.0 → panda_server-0.4.2}/templates/bin/panda_server-vomsrenew.exe.template +0 -0
  196. {panda_server-0.4.0 → panda_server-0.4.2}/templates/conda_meta.yaml.template +0 -0
  197. {panda_server-0.4.0 → panda_server-0.4.2}/templates/init.d/panda_daemon.exe.template +0 -0
  198. {panda_server-0.4.0 → panda_server-0.4.2}/templates/init.d/panda_httpd.exe.template +0 -0
  199. {panda_server-0.4.0 → panda_server-0.4.2}/templates/init.d/panda_server.exe.template +0 -0
  200. {panda_server-0.4.0 → panda_server-0.4.2}/templates/logrotate.d/panda_server.logrotate.template +0 -0
  201. {panda_server-0.4.0 → panda_server-0.4.2}/templates/panda_server-httpd-FastCGI.conf.rpmnew.template +0 -0
  202. {panda_server-0.4.0 → panda_server-0.4.2}/templates/panda_server-httpd.conf.rpmnew.template +0 -0
  203. {panda_server-0.4.0 → panda_server-0.4.2}/templates/sysconfig/panda_server.sysconfig.rpmnew.template +0 -0
  204. {panda_server-0.4.0 → panda_server-0.4.2}/templates/sysconfig/panda_server.sysconfig_for_systemd.template +0 -0
  205. {panda_server-0.4.0 → panda_server-0.4.2}/templates/sysconfig/panda_server_env.systemd.rpmnew.template +0 -0
  206. {panda_server-0.4.0 → panda_server-0.4.2}/templates/systemd/panda.service.template +0 -0
  207. {panda_server-0.4.0 → panda_server-0.4.2}/templates/systemd/panda_daemon.service.template +0 -0
  208. {panda_server-0.4.0 → panda_server-0.4.2}/templates/systemd/panda_httpd.service.template +0 -0
@@ -1,11 +1,10 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: panda-server
3
- Version: 0.4.0
3
+ Version: 0.4.2
4
4
  Summary: PanDA Server Package
5
5
  Project-URL: Homepage, https://panda-wms.readthedocs.io/en/latest/
6
6
  Author-email: PanDA Team <panda-support@cern.ch>
7
7
  License: Apache-2.0
8
- License-File: LICENSE.txt
9
8
  Requires-Python: >=3.8
10
9
  Requires-Dist: cwl-utils>=0.13
11
10
  Requires-Dist: idds-atlas
@@ -0,0 +1 @@
1
+ release_version = "0.4.2"
@@ -16,6 +16,7 @@ import requests
16
16
  from hatchling.builders.hooks.plugin.interface import BuildHookInterface
17
17
 
18
18
  PACKAGE_EMOJI = ":panda_face:"
19
+ PACKAGE_NAME = "panda-server"
19
20
 
20
21
 
21
22
  def get_user():
@@ -76,7 +77,7 @@ def mm_notification():
76
77
  # On the repository name we enter an empty space to prevent the URLs to preview on Mattermost
77
78
  # We shorten the commit hash to the first seven characters, as they are usually enough to identify a commit
78
79
  mm_message = {
79
- "text": f"{PACKAGE_EMOJI}**Package upgrade on:** `{server_name}` by `{user}`.",
80
+ "text": f"{PACKAGE_EMOJI}**{PACKAGE_NAME}@{branch_name} upgrade on:** `{server_name}` by `{user}`.",
80
81
  "props": {
81
82
  "card": f"""
82
83
  | **Property** | **Value** |
@@ -167,7 +167,7 @@ class SiteMapper:
167
167
  # calculate the minRSS for the child queue
168
168
  if resource_spec.minrampercore is not None:
169
169
  child_site_spec.minrss = max(
170
- child_site_spec.coreCount * resource_spec.minrampercore,
170
+ child_site_spec.coreCount * resource_spec.minrampercore - child_site_spec.coreCount + 1,
171
171
  site_spec.minrss * child_site_spec.coreCount / core_count,
172
172
  )
173
173
  else:
@@ -560,7 +560,7 @@ class NetworkConfigurator(threading.Thread):
560
560
  if hasattr(panda_config, "NWS_URL"):
561
561
  self.NWS_URL = panda_config.NWS_URL
562
562
  else:
563
- self.NWS_URL = "http://atlas-adc-netmetrics-lb.cern.ch/metrics/latest.json"
563
+ self.NWS_URL = "https://atlas-rucio-network-metrics.cern.ch/metrics.json"
564
564
 
565
565
  if hasattr(panda_config, "CRIC_URL_CM"):
566
566
  self.CRIC_URL_CM = panda_config.CRIC_URL_CM
@@ -705,21 +705,6 @@ class NetworkConfigurator(threading.Thread):
705
705
  except KeyError:
706
706
  pass
707
707
 
708
- # PerfSonar latency and packetloss
709
- for metric in [LATENCY, PACKETLOSS]:
710
- try:
711
- struc = self.nws_dump[src_dst][metric]
712
- try:
713
- updated_at = datetime.strptime(struc[TIMESTAMP], "%Y-%m-%dT%H:%M:%S")
714
- if updated_at > latest_validity:
715
- value = struc[LATEST]
716
- data.append((source, destination, metric, value, updated_at))
717
- except KeyError:
718
- self.log_stream.debug(f"Entry {struc} ({source}->{destination}) does not follow {metric} standards")
719
- pass
720
- except KeyError:
721
- continue
722
-
723
708
  return data
724
709
 
725
710
  def process_CRIC_cm_dump(self):
@@ -842,7 +827,7 @@ class SWTagsDumper(threading.Thread):
842
827
  else:
843
828
  self.log_stream = _logger
844
829
 
845
- if hasattr(panda_config, "CRIC_URL_SCHEDCONFIG"):
830
+ if hasattr(panda_config, "CRIC_URL_TAGS"):
846
831
  self.CRIC_URL_TAGS = panda_config.CRIC_URL_TAGS
847
832
  else:
848
833
  self.CRIC_URL_TAGS = "https://atlas-cric.cern.ch/api/atlas/pandaqueue/query/?json&preset=tags"
@@ -39,11 +39,10 @@ CMD_STOP = "__STOP"
39
39
  # epoch datetime
40
40
  EPOCH = datetime.datetime.fromtimestamp(0)
41
41
 
42
-
42
+ # requester id for taskbuffer
43
43
  requester_id = GenericThread().get_full_id(__name__, sys.modules[__name__].__file__)
44
44
 
45
45
 
46
- # kill process tree
47
46
  def kill_proc_tree(pid, sig=signal.SIGKILL, include_parent=True, timeout=None, on_terminate=None):
48
47
  """
49
48
  Kill a process tree (including grandchildren) with signal "sig" and return a (gone, still_alive) tuple.
@@ -63,8 +62,10 @@ def kill_proc_tree(pid, sig=signal.SIGKILL, include_parent=True, timeout=None, o
63
62
  return (gone, alive)
64
63
 
65
64
 
66
- # worker process loop of daemon
67
65
  def daemon_loop(dem_config, msg_queue, pipe_conn, worker_lifetime, tbuf=None, lock_pool=None):
66
+ """
67
+ Main loop of daemon worker process
68
+ """
68
69
  # pid of the worker
69
70
  my_pid = os.getpid()
70
71
  my_full_pid = f"{socket.getfqdn().split('.')[0]}-{os.getpgrp()}-{my_pid}"
@@ -79,6 +80,7 @@ def daemon_loop(dem_config, msg_queue, pipe_conn, worker_lifetime, tbuf=None, lo
79
80
 
80
81
  for sig in END_SIGNALS:
81
82
  signal.signal(sig, got_end_sig)
83
+
82
84
  # dict of all daemons and their script module object
83
85
  module_map = {}
84
86
  # package of daemon scripts
@@ -271,9 +273,6 @@ def daemon_loop(dem_config, msg_queue, pipe_conn, worker_lifetime, tbuf=None, lo
271
273
  # send daemon status back to master
272
274
  status_tuple = (dem_name, to_run_daemon, has_run, last_run_start_ts, last_run_end_ts)
273
275
  pipe_conn.send(status_tuple)
274
- # FIXME: stop and spawn worker in every run for now since some script breaks the worker without exception
275
- # tmp_log.info('as script done, stop this worker')
276
- # break
277
276
  else:
278
277
  # got invalid message
279
278
  tmp_log.warning(f'got invalid message "{one_msg}", skipped it')
@@ -281,8 +280,11 @@ def daemon_loop(dem_config, msg_queue, pipe_conn, worker_lifetime, tbuf=None, lo
281
280
  time.sleep(2**-5)
282
281
 
283
282
 
284
- # worker class of daemon process for PanDA server
285
283
  class DaemonWorker(object):
284
+ """
285
+ Class of worker process of PanDA daemon
286
+ """
287
+
286
288
  __slots__ = (
287
289
  "pid",
288
290
  "parent_conn",
@@ -308,17 +310,23 @@ class DaemonWorker(object):
308
310
  lock_pool=lock_pool,
309
311
  )
310
312
 
311
- # make pipe connection pairs for the worker
312
313
  def _make_pipe(self):
314
+ """
315
+ make pipe connection pairs between master and this worker
316
+ """
313
317
  self.parent_conn, self.child_conn = multiprocessing.Pipe()
314
318
 
315
- # close pipe connections
316
319
  def _close_pipe(self):
320
+ """
321
+ close pipe connection pairs between master and this worker
322
+ """
317
323
  self.parent_conn.close()
318
324
  self.child_conn.close()
319
325
 
320
- # make associated process
321
326
  def _make_process(self, dem_config, msg_queue, worker_lifetime, tbuf, lock_pool):
327
+ """
328
+ make associate process of this worker
329
+ """
322
330
  args = (
323
331
  dem_config,
324
332
  msg_queue,
@@ -329,39 +337,54 @@ class DaemonWorker(object):
329
337
  )
330
338
  self.process = multiprocessing.Process(target=daemon_loop, args=args)
331
339
 
332
- # start worker process
333
340
  def start(self):
341
+ """
342
+ start the worker process
343
+ """
334
344
  self.unset_dem()
335
345
  self.process.start()
336
346
  self.pid = self.process.pid
337
347
 
338
- # whether worker process is alive
339
348
  def is_alive(self):
349
+ """
350
+ whether the worker process is alive
351
+ """
340
352
  return self.process.is_alive()
341
353
 
342
- # kill the worker process and all its subprocesses
343
354
  def kill(self):
355
+ """
356
+ kill the worker process and all its subprocesses
357
+ """
344
358
  self._close_pipe()
345
359
  return kill_proc_tree(self.process.pid)
346
360
 
347
- # whether the worker is running daemon
348
361
  def is_running_dem(self):
362
+ """
363
+ whether the worker is still running a daemon script
364
+ """
349
365
  return not (self.dem_name is None and self.dem_ts is None)
350
366
 
351
- # set current running daemon in this worker
352
367
  def set_dem(self, dem_name, dem_ts):
368
+ """
369
+ set current running daemon in this worker
370
+ """
353
371
  if not self.is_running_dem() or dem_ts >= self.dem_ts:
354
372
  self.dem_name = dem_name
355
373
  self.dem_ts = dem_ts
356
374
 
357
- # unset current running daemon in this worker
358
375
  def unset_dem(self):
376
+ """
377
+ unset current running daemon in this worker
378
+ """
359
379
  self.dem_ts = None
360
380
  self.dem_name = None
361
381
 
362
382
 
363
- # master class of main daemon process for PanDA server
364
383
  class DaemonMaster(object):
384
+ """
385
+ Class of master process of PanDA daemon
386
+ """
387
+
365
388
  # constructor
366
389
  def __init__(self, logger, n_workers=1, n_dbconn=1, worker_lifetime=28800, use_tbif=False):
367
390
  # logger
@@ -400,11 +423,16 @@ class DaemonMaster(object):
400
423
  self._spawn_workers(self.n_workers)
401
424
 
402
425
  def _reset_msg_queue(self):
426
+ """
427
+ reset the message queue for sending commands to workers
428
+ """
403
429
  self.msg_queue = multiprocessing.Queue()
404
430
  self.logger.info(f"reset message queue (qid={id(self.msg_queue)})")
405
431
 
406
- # make common taskBuffer interface for daemon workers
407
432
  def _make_tbif(self):
433
+ """
434
+ make common taskBuffer interface for daemon workers
435
+ """
408
436
  try:
409
437
  # import is always required to have reserveChangedState consistent in *Spec
410
438
  from pandaserver.taskbuffer.TaskBuffer import TaskBuffer
@@ -430,8 +458,10 @@ class DaemonMaster(object):
430
458
  self.logger.error(f"failed to initialize taskBuffer interface with {e.__class__.__name__}: {e} ; terminated")
431
459
  raise e
432
460
 
433
- # spawn new workers and put into worker pool
434
461
  def _spawn_workers(self, n_workers=1, auto_start=False):
462
+ """
463
+ spawn new workers and put them into worker pool
464
+ """
435
465
  for j in range(n_workers):
436
466
  with self._worker_lock:
437
467
  if self.use_tbif:
@@ -450,13 +480,17 @@ class DaemonMaster(object):
450
480
  worker.start()
451
481
  self.logger.debug(f"launched new worker_pid={worker.pid}")
452
482
 
453
- # remove a worker from pool
454
483
  def _remove_worker(self, worker):
484
+ """
485
+ remove a worker from pool
486
+ """
455
487
  with self._worker_lock:
456
488
  self.worker_pool.discard(worker)
457
489
 
458
- # parse daemon config
459
490
  def _parse_config(self):
491
+ """
492
+ parse configuration of PanDA daemon
493
+ """
460
494
  try:
461
495
  config_json = daemon_config.config
462
496
  config_dict = json.loads(config_json)
@@ -495,8 +529,10 @@ class DaemonMaster(object):
495
529
  tb = traceback.format_exc()
496
530
  self.logger.error(f"failed to parse daemon config, {e.__class__.__name__}: {e}\n{tb}\n")
497
531
 
498
- # make daemon run status map
499
532
  def _make_dem_run_map(self):
533
+ """
534
+ initialize daemon run status map
535
+ """
500
536
  dem_run_map = {}
501
537
  for dem in self.dem_config:
502
538
  attrs = {}
@@ -507,8 +543,21 @@ class DaemonMaster(object):
507
543
  dem_run_map[dem] = attrs
508
544
  self.dem_run_map = dem_run_map
509
545
 
510
- # one scheduler cycle
546
+ def _kill_one_worker(self, worker):
547
+ """
548
+ kill one (stuck) worker (and new worker will be re-spawned in scheduler cycle)
549
+ """
550
+ # kill worker process and remove it from pool
551
+ worker.kill()
552
+ self._remove_worker(worker)
553
+ # reset daemon run status map of the daemon run by the worker
554
+ self.dem_run_map[worker.dem_name]["msg_ongoing"] = False
555
+ self.dem_run_map[worker.dem_name]["dem_running"] = False
556
+
511
557
  def _scheduler_cycle(self):
558
+ """
559
+ main scheduler cycle
560
+ """
512
561
  now_ts = int(time.time())
513
562
  # check last run time from pipes
514
563
  for worker in list(self.worker_pool):
@@ -561,10 +610,7 @@ class DaemonMaster(object):
561
610
  timeout=run_timeout,
562
611
  )
563
612
  )
564
- worker.kill()
565
- self._remove_worker(worker)
566
- self.dem_run_map[worker.dem_name]["msg_ongoing"] = False
567
- self.dem_run_map[worker.dem_name]["dem_running"] = False
613
+ self._kill_one_worker(worker)
568
614
  # counter for super delayed daemons
569
615
  n_super_delayed_dems = 0
570
616
  # send message to workers
@@ -607,19 +653,28 @@ class DaemonMaster(object):
607
653
  # sleep
608
654
  time.sleep(0.5)
609
655
 
610
- # send stop command to all worker processes
611
- def _stop_proc(self):
656
+ def _stop_all_workers(self):
657
+ """
658
+ stop all workers gracefully by sending stop command to them
659
+ """
660
+ # send stop command
612
661
  for worker in self.worker_pool:
613
662
  worker.parent_conn.send(CMD_STOP)
614
663
  self.logger.debug(f"sent stop command to worker_pid={worker.pid}")
664
+ # reset daemon run status map of all daemons
665
+ for dem_name in self.dem_config:
666
+ self.dem_run_map[dem_name]["msg_ongoing"] = False
667
+ self.dem_run_map[dem_name]["dem_running"] = False
615
668
 
616
- # stop master
617
669
  def stop(self):
670
+ """
671
+ stop the master (and all workers)
672
+ """
618
673
  self.logger.info("daemon master got stop")
619
674
  # stop scheduler from sending more message
620
675
  self.to_stop_scheduler = True
621
- # send stop command to workers
622
- self._stop_proc()
676
+ # stop all workers gracefully
677
+ self._stop_all_workers()
623
678
  # wait a bit
624
679
  time.sleep(1)
625
680
  # close message queue
@@ -630,11 +685,13 @@ class DaemonMaster(object):
630
685
  # wait a bit
631
686
  time.sleep(2)
632
687
 
633
- # revive: kill all workers, reset a new message queue, and spawn new workers with new queue
634
688
  def revive(self):
689
+ """
690
+ revive: kill all workers, reset a new message queue, and spawn new workers with new queue
691
+ """
635
692
  self.logger.info("daemon master reviving")
636
- # send stop command to workers
637
- self._stop_proc()
693
+ # stop all workers gracefully
694
+ self._stop_all_workers()
638
695
  # wait a bit
639
696
  time.sleep(3)
640
697
  # kill and remove workers
@@ -650,8 +707,10 @@ class DaemonMaster(object):
650
707
  # done
651
708
  self.logger.info("daemon master revived")
652
709
 
653
- # run
654
710
  def run(self):
711
+ """
712
+ main function to run the master
713
+ """
655
714
  # master pid
656
715
  master_pid = os.getpid()
657
716
  self.logger.info(f"daemon master started ; master_pid={master_pid}")
@@ -338,8 +338,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
338
338
  self.replica_map[job.dispatchDBlock][file.dataset] = self.all_replica_map[file.dataset]
339
339
 
340
340
  # register dispatch dataset
341
- disp_list = self.register_dispatch_datasets(file_list, use_zip_to_pin_map, ds_task_map, tmp_logger, disp_error,
342
- jedi_task_id)
341
+ disp_list = self.register_dispatch_datasets(file_list, use_zip_to_pin_map, ds_task_map, tmp_logger, disp_error, jedi_task_id)
343
342
  # insert datasets to DB
344
343
  self.task_buffer.insertDatasets(prod_list + disp_list)
345
344
  # job status
@@ -356,13 +355,13 @@ class SetupperAtlasPlugin(SetupperPluginBase):
356
355
  del prod_error
357
356
 
358
357
  def register_dispatch_datasets(
359
- self,
360
- file_list: Dict[str, Dict[str, List[str]]],
361
- use_zip_to_pin_map: Dict[str, bool],
362
- ds_task_map: Dict[str, int],
363
- tmp_logger: LogWrapper,
364
- disp_error: Dict[str, str],
365
- jedi_task_id: Optional[int]
358
+ self,
359
+ file_list: Dict[str, Dict[str, List[str]]],
360
+ use_zip_to_pin_map: Dict[str, bool],
361
+ ds_task_map: Dict[str, int],
362
+ tmp_logger: LogWrapper,
363
+ disp_error: Dict[str, str],
364
+ jedi_task_id: Optional[int],
366
365
  ) -> List[DatasetSpec]:
367
366
  """
368
367
  Register dispatch datasets in Rucio.
@@ -396,10 +395,10 @@ class SetupperAtlasPlugin(SetupperPluginBase):
396
395
  tmp_zip_out = {}
397
396
  dis_files = {"lfns": [], "guids": [], "fsizes": [], "chksums": []}
398
397
  for tmp_lfn, tmp_guid, tmp_file_size, tmp_checksum in zip(
399
- file_list[dispatch_data_block]["lfns"],
400
- file_list[dispatch_data_block]["guids"],
401
- file_list[dispatch_data_block]["fsizes"],
402
- file_list[dispatch_data_block]["chksums"],
398
+ file_list[dispatch_data_block]["lfns"],
399
+ file_list[dispatch_data_block]["guids"],
400
+ file_list[dispatch_data_block]["fsizes"],
401
+ file_list[dispatch_data_block]["chksums"],
403
402
  ):
404
403
  if tmp_lfn in tmp_zip_out:
405
404
  tmp_zip_file_name = f"{tmp_zip_out[tmp_lfn]['scope']}:{tmp_zip_out[tmp_lfn]['name']}"
@@ -444,9 +443,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
444
443
  self.logger.debug(f"sleep {attempt}/{max_attempt}")
445
444
  time.sleep(10)
446
445
  if not is_ok:
447
- disp_error[
448
- dispatch_data_block] = "setupper.setup_source() could not register dispatch_data_block with {0}".format(
449
- err_str.split("\n")[-1])
446
+ disp_error[dispatch_data_block] = "setupper.setup_source() could not register dispatch_data_block with {0}".format(err_str.split("\n")[-1])
450
447
  continue
451
448
  tmp_logger.debug(out)
452
449
  new_out = out
@@ -464,8 +461,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
464
461
  time.sleep(10)
465
462
  if not status:
466
463
  tmp_logger.error(out)
467
- disp_error[
468
- dispatch_data_block] = f"setupper.setup_source() could not freeze dispatch_data_block with {out}"
464
+ disp_error[dispatch_data_block] = f"setupper.setup_source() could not freeze dispatch_data_block with {out}"
469
465
  continue
470
466
 
471
467
  # get VUID
@@ -479,8 +475,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
479
475
  dataset.status = "defined"
480
476
  dataset.numberfiles = len(file_list[dispatch_data_block]["lfns"])
481
477
  try:
482
- dataset.currentfiles = int(
483
- sum(filter(None, file_list[dispatch_data_block]["fsizes"])) / 1024 / 1024)
478
+ dataset.currentfiles = int(sum(filter(None, file_list[dispatch_data_block]["fsizes"])) / 1024 / 1024)
484
479
  except Exception:
485
480
  dataset.currentfiles = 0
486
481
  if jedi_task_id is not None:
@@ -774,6 +769,11 @@ class SetupperAtlasPlugin(SetupperPluginBase):
774
769
  # set new destDBlock
775
770
  if dest in newname_list:
776
771
  file.destinationDBlock = newname_list[dest]
772
+ # update job status if failed and increment number of files
773
+ for job in jobs_list:
774
+ # ignore failed jobs
775
+ if job.jobStatus in ["failed", "cancelled"] or job.isCancelled():
776
+ continue
777
777
  for file in job.Files:
778
778
  dest = (
779
779
  file.destinationDBlock,
@@ -20,10 +20,9 @@ from pandacommon.pandalogger.PandaLogger import PandaLogger
20
20
  from pandaserver.brokerage.SiteMapper import SiteMapper
21
21
  from pandaserver.config import panda_config
22
22
  from pandaserver.dataservice.adder_gen import AdderGen
23
- from pandaserver.jobdispatcher import DispatcherUtils, Protocol
23
+ from pandaserver.jobdispatcher import Protocol
24
24
  from pandaserver.proxycache import panda_proxy_cache, token_cache
25
25
  from pandaserver.srvcore import CoreUtils
26
- from pandaserver.taskbuffer import EventServiceUtils
27
26
 
28
27
  # logger
29
28
  _logger = PandaLogger().getLogger("JobDispatcher")
@@ -164,7 +163,6 @@ class JobDispatcher:
164
163
  ):
165
164
  t_getJob_start = time.time()
166
165
  jobs = []
167
- useProxyCache = False
168
166
  try:
169
167
  tmpNumJobs = int(nJobs)
170
168
  except Exception:
@@ -237,55 +235,6 @@ class JobDispatcher:
237
235
  response.appendNode("secrets", secrets_map[tmpJob.prodUserName])
238
236
  if panda_config.pilot_secrets in secrets_map and secrets_map[panda_config.pilot_secrets]:
239
237
  response.appendNode("pilotSecrets", secrets_map[panda_config.pilot_secrets])
240
- # check if proxy cache is used
241
- if hasattr(panda_config, "useProxyCache") and panda_config.useProxyCache is True:
242
- self.specialDispatchParams.update()
243
- if "proxyCacheSites" not in self.specialDispatchParams:
244
- proxyCacheSites = {}
245
- else:
246
- proxyCacheSites = self.specialDispatchParams["proxyCacheSites"]
247
- if siteName in proxyCacheSites:
248
- useProxyCache = True
249
- # set proxy
250
- if useProxyCache:
251
- try:
252
- # get compact
253
- compactDN = self.taskBuffer.cleanUserID(realDN)
254
- # check permission
255
- self.specialDispatchParams.update()
256
- if "allowProxy" not in self.specialDispatchParams:
257
- allowProxy = []
258
- else:
259
- allowProxy = self.specialDispatchParams["allowProxy"]
260
- if compactDN not in allowProxy:
261
- tmpLog.warning(f"{siteName} {node} '{compactDN}' no permission to retrieve user proxy")
262
- else:
263
- if useProxyCache:
264
- tmpStat, tmpOut = self.set_user_proxy(
265
- response,
266
- proxyCacheSites[siteName]["dn"],
267
- proxyCacheSites[siteName]["role"],
268
- )
269
- else:
270
- tmpStat, tmpOut = self.set_user_proxy(response)
271
- if not tmpStat:
272
- tmpLog.warning(f"{siteName} {node} failed to get user proxy : {tmpOut}")
273
- except Exception as e:
274
- tmpLog.warning(f"{siteName} {node} failed to get user proxy with {str(e)}")
275
- # panda proxy
276
- if (
277
- "pandaProxySites" in self.specialDispatchParams
278
- and siteName in self.specialDispatchParams["pandaProxySites"]
279
- and (EventServiceUtils.isEventServiceJob(tmpJob) or EventServiceUtils.isEventServiceMerge(tmpJob))
280
- ):
281
- # get secret key
282
- tmpSecretKey, tmpErrMsg = DispatcherUtils.getSecretKey(tmpJob.PandaID)
283
- if tmpSecretKey is None:
284
- tmpLog.warning(f"PandaID={tmpJob.PandaID} site={siteName} failed to get panda proxy secret key : {tmpErrMsg}")
285
- else:
286
- # set secret key
287
- tmpLog.debug(f"PandaID={tmpJob.PandaID} set key={tmpSecretKey}")
288
- response.setPandaProxySecretKey(tmpSecretKey)
289
238
  # add
290
239
  responseList.append(response.data)
291
240
  # make response for bulk
@@ -648,14 +597,6 @@ class JobDispatcher:
648
597
  # return
649
598
  return response.encode(accept_json)
650
599
 
651
- # get DNs authorized for S3
652
- def getDNsForS3(self):
653
- # check permission
654
- self.specialDispatchParams.update()
655
- allowKey = self.specialDispatchParams.get("allowKeyPair", [])
656
- # return
657
- return json.dumps(allowKey)
658
-
659
600
  # get site mapper
660
601
  def getSiteMapper(self):
661
602
  return True, SiteMapper(self.taskBuffer)
@@ -1549,15 +1490,6 @@ def checkPilotPermission(req):
1549
1490
  return True, None
1550
1491
 
1551
1492
 
1552
- def getDNsForS3(req):
1553
- """
1554
- # get DNs authorized for S3
1555
- :param req:
1556
- :return:
1557
- """
1558
- return jobDispatcher.getDNsForS3()
1559
-
1560
-
1561
1493
  def getCommands(req, harvester_id, n_commands, timeout=30):
1562
1494
  """
1563
1495
  This function checks the permissions and retrieves the commands for a specified harvester instance.
@@ -35,7 +35,6 @@ from pandaserver.jobdispatcher.JobDispatcher import (
35
35
  get_max_worker_id,
36
36
  get_token_key,
37
37
  getCommands,
38
- getDNsForS3,
39
38
  getEventRanges,
40
39
  getJob,
41
40
  getKeyPair,
@@ -125,7 +124,6 @@ from pandaserver.userinterface.UserIF import (
125
124
  relay_idds_command,
126
125
  release_task,
127
126
  reloadInput,
128
- reportWorkerStats,
129
127
  reportWorkerStats_jobtype,
130
128
  resumeTask,
131
129
  retryTask,
@@ -29,7 +29,6 @@ allowed_methods += [
29
29
  "updateEventRange",
30
30
  "getKeyPair",
31
31
  "updateEventRanges",
32
- "getDNsForS3",
33
32
  "getProxy",
34
33
  "get_access_token",
35
34
  "get_token_key",
@@ -83,7 +82,6 @@ allowed_methods += [
83
82
  "getTaskParamsMap",
84
83
  "updateWorkers",
85
84
  "harvesterIsAlive",
86
- "reportWorkerStats",
87
85
  "reportWorkerStats_jobtype",
88
86
  "getWorkerStats",
89
87
  "addHarvesterDialogs",