panda-server 0.3.4__tar.gz → 0.3.6__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 (213) hide show
  1. {panda_server-0.3.4 → panda_server-0.3.6}/PKG-INFO +2 -2
  2. panda_server-0.3.6/PandaPkgInfo.py +1 -0
  3. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/add_sub.py +0 -58
  4. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/copyArchive.py +11 -6
  5. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/datasetManager.py +3 -2
  6. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/ddm.py +3 -3
  7. panda_server-0.3.6/pandaserver/dataservice/setupper.py +205 -0
  8. panda_server-0.3.6/pandaserver/dataservice/setupper_atlas_plugin.py +2229 -0
  9. panda_server-0.3.6/pandaserver/dataservice/setupper_dummy_plugin.py +47 -0
  10. panda_server-0.3.6/pandaserver/dataservice/setupper_plugin_base.py +67 -0
  11. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/JobUtils.py +14 -0
  12. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/OraDBProxy.py +3 -8
  13. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/TaskBuffer.py +7 -16
  14. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/Utils.py +20 -2
  15. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/userinterface/Client.py +5 -0
  16. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/userinterface/UserIF.py +0 -2
  17. {panda_server-0.3.4 → panda_server-0.3.6}/pyproject.toml +1 -1
  18. {panda_server-0.3.4 → panda_server-0.3.6}/templates/sysconfig/panda_server.sysconfig.rpmnew.template +4 -1
  19. panda_server-0.3.6/templates/sysconfig/panda_server.sysconfig_for_systemd.template +4 -0
  20. {panda_server-0.3.4 → panda_server-0.3.6}/templates/sysconfig/panda_server_env.systemd.rpmnew.template +3 -3
  21. {panda_server-0.3.4 → panda_server-0.3.6}/templates/systemd/panda.service.template +2 -1
  22. {panda_server-0.3.4 → panda_server-0.3.6}/templates/systemd/panda_httpd.service.template +1 -0
  23. panda_server-0.3.4/PandaPkgInfo.py +0 -1
  24. panda_server-0.3.4/pandaserver/dataservice/Setupper.py +0 -224
  25. panda_server-0.3.4/pandaserver/dataservice/SetupperAtlasPlugin.py +0 -2157
  26. panda_server-0.3.4/pandaserver/dataservice/SetupperDummyPlugin.py +0 -23
  27. panda_server-0.3.4/pandaserver/dataservice/SetupperPluginBase.py +0 -41
  28. panda_server-0.3.4/pandaserver/dataservice/forkSetupper.py +0 -96
  29. {panda_server-0.3.4 → panda_server-0.3.6}/.pre-commit-config.yaml +0 -0
  30. {panda_server-0.3.4 → panda_server-0.3.6}/ChangeLog.txt +0 -0
  31. {panda_server-0.3.4 → panda_server-0.3.6}/Dockerfile +0 -0
  32. {panda_server-0.3.4 → panda_server-0.3.6}/INSTALL.md +0 -0
  33. {panda_server-0.3.4 → panda_server-0.3.6}/INSTALL_ATLAS.md +0 -0
  34. {panda_server-0.3.4 → panda_server-0.3.6}/LICENSE.txt +0 -0
  35. {panda_server-0.3.4 → panda_server-0.3.6}/MANIFEST.in +0 -0
  36. {panda_server-0.3.4 → panda_server-0.3.6}/README.md +0 -0
  37. {panda_server-0.3.4 → panda_server-0.3.6}/package/hatch_build.py +0 -0
  38. {panda_server-0.3.4 → panda_server-0.3.6}/panda-server.spec +0 -0
  39. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/__init__.py +0 -0
  40. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/brokerage/ErrorCode.py +0 -0
  41. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/brokerage/SiteMapper.py +0 -0
  42. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/brokerage/__init__.py +0 -0
  43. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/brokerage/broker.py +0 -0
  44. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/config/__init__.py +0 -0
  45. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/config/config_utils.py +0 -0
  46. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/config/daemon_config.py +0 -0
  47. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/config/panda_config.py +0 -0
  48. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/configurator/Carbon.py +0 -0
  49. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/configurator/Configurator.py +0 -0
  50. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/configurator/__init__.py +0 -0
  51. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/configurator/aux.py +0 -0
  52. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/__init__.py +0 -0
  53. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/master.py +0 -0
  54. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/master_systemd.py +0 -0
  55. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/__init__.py +0 -0
  56. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/add_main.py +0 -0
  57. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/cache_pilots.py +0 -0
  58. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/cache_schedconfig.py +0 -0
  59. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/carbon.py +0 -0
  60. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/configurator.py +0 -0
  61. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/dummy_test.py +0 -0
  62. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/evpPD2P.py +0 -0
  63. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/metric_collector.py +0 -0
  64. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/panda_activeusers_query.py +0 -0
  65. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/pilotStreaming.py +0 -0
  66. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/process_workflow_files_daemon.py +0 -0
  67. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/recover_lost_files_daemon.py +0 -0
  68. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/task_evaluator.py +0 -0
  69. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/tmpwatch.py +0 -0
  70. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/worker_synchronization.py +0 -0
  71. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/utils.py +0 -0
  72. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/AdderAtlasPlugin.py +0 -0
  73. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/AdderDummyPlugin.py +0 -0
  74. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/AdderGen.py +0 -0
  75. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/AdderPluginBase.py +0 -0
  76. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/AdderResult.py +0 -0
  77. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/AdderSimplePlugin.py +0 -0
  78. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/DataServiceUtils.py +0 -0
  79. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/ErrorCode.py +0 -0
  80. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/ProcessLimiter.py +0 -0
  81. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/RecoverLostFilesCore.py +0 -0
  82. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/__init__.py +0 -0
  83. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/activator.py +0 -0
  84. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/closer.py +0 -0
  85. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/closer_atlas_plugin.py +0 -0
  86. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/ddm_handler.py +0 -0
  87. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/dyn_data_distributer.py +0 -0
  88. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/event_lookup_client_ei.py +0 -0
  89. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/event_picker.py +0 -0
  90. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/finisher.py +0 -0
  91. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/jobdispatcher/DispatcherUtils.py +0 -0
  92. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/jobdispatcher/ErrorCode.py +0 -0
  93. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/jobdispatcher/JobDispatcher.py +0 -0
  94. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/jobdispatcher/Protocol.py +0 -0
  95. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/jobdispatcher/Watcher.py +0 -0
  96. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/jobdispatcher/__init__.py +0 -0
  97. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/proxycache/__init__.py +0 -0
  98. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/proxycache/panda_proxy_cache.py +0 -0
  99. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/server/.gacl +0 -0
  100. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/server/panda.py +0 -0
  101. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/CoreUtils.py +0 -0
  102. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/MailUtils.py +0 -0
  103. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/__init__.py +0 -0
  104. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/allowed_methods.py +0 -0
  105. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/oidc_utils.py +0 -0
  106. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/panda_request.py +0 -0
  107. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/srv_msg_utils.py +0 -0
  108. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/CloudSpec.py +0 -0
  109. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/CloudTaskSpec.py +0 -0
  110. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/ConBridge.py +0 -0
  111. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/DBProxyPool.py +0 -0
  112. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/DatasetSpec.py +0 -0
  113. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/DdmSpec.py +0 -0
  114. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/ErrorCode.py +0 -0
  115. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/EventServiceUtils.py +0 -0
  116. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/FileSpec.py +0 -0
  117. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/GlobalShares.py +0 -0
  118. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/HarvesterMetricsSpec.py +0 -0
  119. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/Initializer.py +0 -0
  120. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/JobSpec.py +0 -0
  121. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/NucleusSpec.py +0 -0
  122. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/PanDAMsgProcessor.py +0 -0
  123. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/PandaDBSchemaInfo.py +0 -0
  124. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/PickleFileSpec.py +0 -0
  125. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/PickleJobSpec.py +0 -0
  126. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/PrioUtil.py +0 -0
  127. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/ProcessGroups.py +0 -0
  128. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/ResourceSpec.py +0 -0
  129. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/SQLDumper.py +0 -0
  130. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/SQLManager.py +0 -0
  131. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/SiteSpec.py +0 -0
  132. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/SupErrors.py +0 -0
  133. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/TaskBufferInterface.py +0 -0
  134. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/WorkerSpec.py +0 -0
  135. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/WrappedCursor.py +0 -0
  136. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/WrappedPickle.py +0 -0
  137. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/WrappedPostgresConn.py +0 -0
  138. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/__init__.py +0 -0
  139. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/retryModule.py +0 -0
  140. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/task_split_rules.py +0 -0
  141. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/workflow_processor.py +0 -0
  142. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/SchemaChecker.py +0 -0
  143. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/__init__.py +0 -0
  144. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/alice/README.txt +0 -0
  145. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/alice/mysetup +0 -0
  146. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/alice/titan_testScript_ec2_alice_1.py +0 -0
  147. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/alice/titan_testScript_ec2_alice_2.py +0 -0
  148. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/banUser.py +0 -0
  149. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/boostPrio.py +0 -0
  150. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/boostUser.py +0 -0
  151. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/callbackDDM.py +0 -0
  152. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/daod_on_demand.py +0 -0
  153. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/finishJob.py +0 -0
  154. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/finishTaskJEDI.py +0 -0
  155. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/getJobs.py +0 -0
  156. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killJob.py +0 -0
  157. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killJobLowPrio.py +0 -0
  158. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killJobsInTask.py +0 -0
  159. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killProdJobs.py +0 -0
  160. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killTask.py +0 -0
  161. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killTaskJEDI.py +0 -0
  162. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killUser.py +0 -0
  163. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/lsst/README.txt +0 -0
  164. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/lsst/lsstSubmit.py +0 -0
  165. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/lsst/lsstSubmitMERGEtest.py +0 -0
  166. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/lsst/lsstSubmitPhosim332.py +0 -0
  167. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/lsst/prepare-client-tarball-from-bigpanda-server.sh +0 -0
  168. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/reassignJobs.py +0 -0
  169. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/reassignSite.py +0 -0
  170. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/reassignTask.py +0 -0
  171. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/reassignWaiting.py +0 -0
  172. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/recoverLostFiles.py +0 -0
  173. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/reloadInputDS.py +0 -0
  174. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/sendCommandToJob.py +0 -0
  175. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/setDebugMode.py +0 -0
  176. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/setPriority.py +0 -0
  177. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testEvgen.py +0 -0
  178. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testEvgen17.py +0 -0
  179. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testG4sim.py +0 -0
  180. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testG4sim17.py +0 -0
  181. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testGetCriteriaForGlobalShares.py +0 -0
  182. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testGlobalShares.py +0 -0
  183. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testJobFlowATLAS.py +0 -0
  184. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testReco.py +0 -0
  185. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testSimulReco14.py +0 -0
  186. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testSiteMap.py +0 -0
  187. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testUpdateWorkerPilotStatus.py +0 -0
  188. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testutils.py +0 -0
  189. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/userinterface/__init__.py +0 -0
  190. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/__init__.py +0 -0
  191. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/pcwl_test.py +0 -0
  192. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/pcwl_utils.py +0 -0
  193. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/psnakemake_container.json +0 -0
  194. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/psnakemake_task.json +0 -0
  195. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/psnakemake_test.py +0 -0
  196. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/snakeparser/__init__.py +0 -0
  197. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/snakeparser/extensions.py +0 -0
  198. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/snakeparser/log.py +0 -0
  199. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/snakeparser/names.py +0 -0
  200. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/snakeparser/parser.py +0 -0
  201. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/snakeparser/utils.py +0 -0
  202. {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/workflow_utils.py +0 -0
  203. {panda_server-0.3.4 → panda_server-0.3.6}/templates/bin/panda_server-makeSlsXml.exe.template +0 -0
  204. {panda_server-0.3.4 → panda_server-0.3.6}/templates/bin/panda_server-vomsrenew.exe.template +0 -0
  205. {panda_server-0.3.4 → panda_server-0.3.6}/templates/conda_meta.yaml.template +0 -0
  206. {panda_server-0.3.4 → panda_server-0.3.6}/templates/init.d/panda_daemon.exe.template +0 -0
  207. {panda_server-0.3.4 → panda_server-0.3.6}/templates/init.d/panda_httpd.exe.template +0 -0
  208. {panda_server-0.3.4 → panda_server-0.3.6}/templates/init.d/panda_server.exe.template +0 -0
  209. {panda_server-0.3.4 → panda_server-0.3.6}/templates/logrotate.d/panda_server.logrotate.template +0 -0
  210. {panda_server-0.3.4 → panda_server-0.3.6}/templates/panda_server-httpd-FastCGI.conf.rpmnew.template +0 -0
  211. {panda_server-0.3.4 → panda_server-0.3.6}/templates/panda_server-httpd.conf.rpmnew.template +0 -0
  212. {panda_server-0.3.4 → panda_server-0.3.6}/templates/panda_server.cfg.rpmnew.template +0 -0
  213. {panda_server-0.3.4 → panda_server-0.3.6}/templates/systemd/panda_daemon.service.template +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: panda-server
3
- Version: 0.3.4
3
+ Version: 0.3.6
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>
@@ -17,7 +17,7 @@ Requires-Dist: mod-wsgi
17
17
  Requires-Dist: numpy
18
18
  Requires-Dist: packaging
19
19
  Requires-Dist: panda-client-light>=1.5.55
20
- Requires-Dist: panda-common>=0.0.34
20
+ Requires-Dist: panda-common>=0.1.1
21
21
  Requires-Dist: psutil>=5.4.8
22
22
  Requires-Dist: pyjwt
23
23
  Requires-Dist: pyopenssl
@@ -0,0 +1 @@
1
+ release_version = "0.3.6"
@@ -246,64 +246,6 @@ def main(argv=tuple(), tbuf=None, **kwargs):
246
246
  errStr = traceback.format_exc()
247
247
  tmp_log.error(errStr)
248
248
 
249
- tmp_log.debug("Fork session")
250
-
251
- # thread for fork
252
- class ForkThr(threading.Thread):
253
- def __init__(self, fileName):
254
- threading.Thread.__init__(self)
255
- self.fileName = fileName
256
-
257
- def run(self):
258
- if "VIRTUAL_ENV" in os.environ:
259
- prefix = os.environ["VIRTUAL_ENV"]
260
- else:
261
- prefix = ""
262
- setupStr = f"source {prefix}/etc/sysconfig/panda_server; "
263
- runStr = f"{panda_config.native_python}/python -Wignore "
264
- runStr += panda_config.pandaPython_dir + "/dataservice/forkSetupper.py -i "
265
- runStr += self.fileName
266
- if self.fileName.split("/")[-1].startswith("set.NULL."):
267
- runStr += " -t"
268
- comStr = setupStr + runStr
269
- tmp_log.debug(comStr)
270
- commands_get_status_output(comStr)
271
-
272
- # get set.* files
273
- filePatt = panda_config.logdir + "/" + "set.*"
274
- fileList = glob.glob(filePatt)
275
-
276
- # the max number of threads
277
- maxThr = 10
278
- nThr = 0
279
-
280
- # loop over all files
281
- forkThrList = []
282
- timeNow = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
283
- for tmpName in fileList:
284
- if not os.path.exists(tmpName):
285
- continue
286
- try:
287
- # takes care of only recent files
288
- mod_time = datetime.datetime(*(time.gmtime(os.path.getmtime(tmpName))[:7]))
289
- if datetime.timedelta(minutes=1) < (timeNow - mod_time) < datetime.timedelta(hours=1):
290
- cSt, cOut = commands_get_status_output("ps aux | grep fork | grep -v PYTH")
291
- # if no process is running for the file
292
- if cSt == 0 and tmpName not in cOut:
293
- nThr += 1
294
- thr = ForkThr(tmpName)
295
- thr.start()
296
- forkThrList.append(thr)
297
- if nThr > maxThr:
298
- break
299
- except Exception:
300
- errType, errValue = sys.exc_info()[:2]
301
- tmp_log.error(f"{errType} {errValue}")
302
-
303
- # join fork threads
304
- for thr in forkThrList:
305
- thr.join()
306
-
307
249
  # stop taskBuffer if created inside this script
308
250
  if tbuf is None:
309
251
  taskBuffer.cleanup(requester=requester_id)
@@ -6,15 +6,16 @@ import sys
6
6
  import time
7
7
  import traceback
8
8
 
9
- import pandaserver.userinterface.Client as Client
10
9
  import requests
11
10
  from pandacommon.pandalogger.PandaLogger import PandaLogger
12
11
  from pandacommon.pandautils.thread_utils import GenericThread
12
+ from urllib3.exceptions import InsecureRequestWarning
13
+
14
+ import pandaserver.userinterface.Client as Client
13
15
  from pandaserver.brokerage.SiteMapper import SiteMapper
14
16
  from pandaserver.config import panda_config
15
17
  from pandaserver.jobdispatcher.Watcher import Watcher
16
18
  from pandaserver.taskbuffer import EventServiceUtils
17
- from urllib3.exceptions import InsecureRequestWarning
18
19
 
19
20
  # logger
20
21
  _logger = PandaLogger().getLogger("copyArchive")
@@ -629,7 +630,7 @@ def main(argv=tuple(), tbuf=None, **kwargs):
629
630
  varMap[":rFlag1"] = 2
630
631
  stDS, resDS = taskBuffer.querySQLS(sql, varMap)
631
632
  sqlSS = "SELECT laststart FROM ATLAS_PANDAMETA.siteData "
632
- sqlSS += "WHERE site=:site AND flag=:flag AND hours=:hours AND laststart<:laststart "
633
+ sqlSS += "WHERE site=:site AND flag=:flag AND hours=:hours "
633
634
  sqlPI = "SELECT PandaID,eventService,attemptNr FROM ATLAS_PANDA.jobsActive4 "
634
635
  sqlPI += "WHERE prodSourceLabel=:prodSourceLabel AND jobStatus IN (:jobStatus1,:jobStatus2) "
635
636
  sqlPI += "AND (modificationTime<:timeLimit OR stateChangeTime<:timeLimit) "
@@ -644,9 +645,13 @@ def main(argv=tuple(), tbuf=None, **kwargs):
644
645
  varMap[":site"] = tmpSite
645
646
  varMap[":flag"] = "production"
646
647
  varMap[":hours"] = 3
647
- varMap[":laststart"] = timeLimitSite
648
648
  stSS, resSS = taskBuffer.querySQLS(sqlSS, varMap)
649
- if stSS is not None and len(resSS) > 0:
649
+ if resSS is not None and len(resSS) > 0:
650
+ last_start = resSS[0][0]
651
+ else:
652
+ last_start = None
653
+ site_status = siteMapper.getSite(tmpSite).status
654
+ if stSS is True and ((last_start is not None and last_start < timeLimitSite) or site_status in ["offline", "test"]):
650
655
  # get jobs
651
656
  varMap = {}
652
657
  varMap[":prodSourceLabel"] = "managed"
@@ -661,7 +666,7 @@ def main(argv=tuple(), tbuf=None, **kwargs):
661
666
  stPI, resPI = taskBuffer.querySQLS(sqlPI, varMap)
662
667
  jediJobs = []
663
668
  # reassign
664
- _logger.debug(f"reassignJobs for JEDI at inactive site {tmpSite} laststart={resSS[0][0]}")
669
+ _logger.debug(f"reassignJobs for JEDI at inactive site {tmpSite} laststart={last_start} status={site_status}")
665
670
  if resPI is not None:
666
671
  for pandaID, eventService, attemptNr in resPI:
667
672
  if eventService in [EventServiceUtils.esMergeJobFlagNumber]:
@@ -6,9 +6,10 @@ import threading
6
6
  import time
7
7
  import traceback
8
8
 
9
- import pandaserver.taskbuffer.ErrorCode
10
9
  from pandacommon.pandalogger.PandaLogger import PandaLogger
11
10
  from pandacommon.pandautils.thread_utils import GenericThread
11
+
12
+ import pandaserver.taskbuffer.ErrorCode
12
13
  from pandaserver.brokerage.SiteMapper import SiteMapper
13
14
  from pandaserver.config import panda_config
14
15
  from pandaserver.dataservice import DataServiceUtils
@@ -255,7 +256,7 @@ def main(tbuf=None, **kwargs):
255
256
 
256
257
  # close datasets
257
258
  _logger.debug("==== close datasets ====")
258
- timeLimitU = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None) - datetime.timedelta(minutes=30)
259
+ timeLimitU = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None) - datetime.timedelta(minutes=1)
259
260
  timeLimitL = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None) - datetime.timedelta(days=3)
260
261
  closeLock = threading.Semaphore(5)
261
262
  closeProxyLock = threading.Lock()
@@ -10,7 +10,6 @@ import traceback
10
10
 
11
11
  from typing import Dict, List
12
12
 
13
- from pandaserver.srvcore import CoreUtils
14
13
  from rucio.client import Client as RucioClient
15
14
  from rucio.common.exception import (
16
15
  DataIdentifierAlreadyExists,
@@ -21,6 +20,7 @@ from rucio.common.exception import (
21
20
  FileAlreadyExists,
22
21
  UnsupportedOperation,
23
22
  )
23
+ from pandaserver.srvcore import CoreUtils
24
24
 
25
25
 
26
26
  # rucio
@@ -910,8 +910,8 @@ class RucioAPI:
910
910
  if user_info is not None:
911
911
  return_value = True
912
912
  break
913
- except Exception as e:
914
- error_message = f"{str(e)}"
913
+ except Exception as error:
914
+ error_message = f"{str(error)}"
915
915
  user_info = error_message
916
916
  return return_value, user_info
917
917
 
@@ -0,0 +1,205 @@
1
+ """
2
+ setup dataset
3
+
4
+ """
5
+
6
+ import sys
7
+ import threading
8
+ import traceback
9
+ from typing import List
10
+
11
+ from pandacommon.pandalogger.LogWrapper import LogWrapper
12
+ from pandacommon.pandalogger.PandaLogger import PandaLogger
13
+ from pandaserver.config import panda_config
14
+ from pandaserver.taskbuffer import EventServiceUtils
15
+ from pandaserver.taskbuffer.PickleJobSpec import PickleJobSpec
16
+
17
+ # logger
18
+ _logger = PandaLogger().getLogger("setupper")
19
+
20
+ panda_config.setupPlugin()
21
+
22
+
23
+ # main class
24
+ class Setupper(threading.Thread):
25
+ """
26
+ Main class for setting up the dataset.
27
+ """
28
+ # constructor
29
+ def __init__(
30
+ self,
31
+ taskBuffer,
32
+ jobs: List[object],
33
+ resubmit: bool = False,
34
+ panda_ddm: bool = False,
35
+ ddm_attempt: int = 0,
36
+ only_ta: bool = False,
37
+ first_submission: bool = True,
38
+ ):
39
+ """
40
+ Constructor for the Setupper class.
41
+
42
+ :param taskBuffer: The buffer for tasks.
43
+ :param jobs: The jobs to be processed.
44
+ :param resubmit: A flag to indicate if the job is a resubmission. Defaults to False.
45
+ :param panda_ddm: A flag to indicate if PandaDDM is used. Defaults to False.
46
+ :param ddm_attempt: The number of attempts for DDM job. Defaults to 0.
47
+ :param only_ta: A flag to indicate if only task assignment should be run. Defaults to False.
48
+ :param first_submission: A flag to indicate if it's the first submission. Defaults to True.
49
+ """
50
+ threading.Thread.__init__(self)
51
+ self.jobs = jobs
52
+ self.task_buffer = taskBuffer
53
+ # resubmission or not
54
+ self.resubmit = resubmit
55
+ # use PandaDDM
56
+ self.panda_ddm = panda_ddm
57
+ # priority for ddm job
58
+ self.ddm_attempt = ddm_attempt
59
+ # run task assignment only
60
+ self.only_ta = only_ta
61
+ # first submission
62
+ self.first_submission = first_submission
63
+
64
+ # main
65
+ def run(self) -> None:
66
+ """
67
+ Main method for running the setup process.
68
+ """
69
+ try:
70
+ # make a message instance
71
+ tmp_log = LogWrapper(_logger, None)
72
+ # run main procedure in the same process
73
+ tmp_log.debug("main start")
74
+ tmp_log.debug(f"first_submission={self.first_submission}")
75
+ # make Specs pickleable
76
+ p_job_list = []
77
+ for job_spec in self.jobs:
78
+ p_job = PickleJobSpec()
79
+ p_job.update(job_spec)
80
+ p_job_list.append(p_job)
81
+ self.jobs = p_job_list
82
+ # group jobs per VO
83
+ vo_jobs_map = {}
84
+ tmp_log.debug(f"{len(self.jobs)} jobs in total")
85
+ for tmp_job in self.jobs:
86
+ # set VO=local for DDM free
87
+ if tmp_job.destinationSE == "local":
88
+ tmp_vo = "local"
89
+ else:
90
+ tmp_vo = tmp_job.VO
91
+ # make map
92
+ vo_jobs_map.setdefault(tmp_vo, [])
93
+ vo_jobs_map[tmp_vo].append(tmp_job)
94
+ # loop over all VOs
95
+ for tmp_vo in vo_jobs_map:
96
+ tmp_job_list = vo_jobs_map[tmp_vo]
97
+ tmp_log.debug(f"vo={tmp_vo} has {len(tmp_job_list)} jobs")
98
+ # get plugin
99
+ setupper_plugin_class = panda_config.getPlugin("setupper_plugins", tmp_vo)
100
+ if setupper_plugin_class is None:
101
+ # use ATLAS plug-in by default
102
+ from pandaserver.dataservice.setupper_atlas_plugin import SetupperAtlasPlugin
103
+ setupper_plugin_class = SetupperAtlasPlugin
104
+ tmp_log.debug(f"plugin name -> {setupper_plugin_class.__name__}")
105
+ try:
106
+ # make plugin
107
+ setupper_plugin = setupper_plugin_class(
108
+ self.task_buffer,
109
+ self.jobs,
110
+ tmp_log,
111
+ resubmit=self.resubmit,
112
+ panda_ddm=self.panda_ddm,
113
+ ddm_attempt=self.ddm_attempt,
114
+ only_ta=self.only_ta,
115
+ first_submission=self.first_submission,
116
+ )
117
+ # run plugin
118
+ tmp_log.debug("run plugin")
119
+ setupper_plugin.run()
120
+ # go forward if not Task Assignment
121
+ if not self.only_ta:
122
+ # update jobs
123
+ tmp_log.debug("update jobs")
124
+ self.update_jobs(setupper_plugin.jobs + setupper_plugin.jumbo_jobs, tmp_log)
125
+ # execute post process
126
+ tmp_log.debug("post execute plugin")
127
+ setupper_plugin.post_run()
128
+ tmp_log.debug("done plugin")
129
+ except Exception:
130
+ error_type, error_value = sys.exc_info()[:2]
131
+ tmp_log.error(f"plugin failed with {error_type}:{error_value}")
132
+ tmp_log.debug("main end")
133
+ except Exception as error:
134
+ tmp_log.error(f"master failed with {str(error)} {traceback.format_exc()}")
135
+
136
+ # update jobs
137
+ def update_jobs(self, job_list: List[object], tmp_log: LogWrapper) -> None:
138
+ """
139
+ Updates the status of jobs.
140
+
141
+ :param job_list: The list of jobs to be updated.
142
+ :param log: The logger to be used for logging.
143
+ """
144
+ update_jobs = []
145
+ failed_jobs = []
146
+ activate_jobs = []
147
+ waiting_jobs = []
148
+ # sort jobs by status
149
+ for job in job_list:
150
+ # failed jobs
151
+ if job.jobStatus in ["failed", "cancelled"]:
152
+ failed_jobs.append(job)
153
+ # waiting
154
+ elif job.jobStatus == "waiting":
155
+ waiting_jobs.append(job)
156
+ # no input jobs
157
+ elif job.dispatchDBlock == "NULL":
158
+ activate_jobs.append(job)
159
+ # normal jobs
160
+ else:
161
+ # change status
162
+ job.jobStatus = "assigned"
163
+ update_jobs.append(job)
164
+
165
+ # trigger merge generation if all events are done
166
+ new_activate_jobs = []
167
+ n_finished = 0
168
+ for job in activate_jobs:
169
+ if job.notDiscardEvents() and job.allOkEvents() and not EventServiceUtils.isEventServiceMerge(job):
170
+ self.task_buffer.updateJobs([job])
171
+ # change status
172
+ job.jobStatus = "finished"
173
+ self.task_buffer.updateJobs([job], False)
174
+ n_finished += 1
175
+ else:
176
+ new_activate_jobs.append(job)
177
+ activate_jobs = new_activate_jobs
178
+ tmp_log.debug(f"# of finished jobs in activated : {n_finished}")
179
+ new_update_jobs = []
180
+ n_finished = 0
181
+ for job in update_jobs:
182
+ if job.notDiscardEvents() and job.allOkEvents() and not EventServiceUtils.isEventServiceMerge(job):
183
+ self.task_buffer.updateJobs([job], True)
184
+ # change status
185
+ job.jobStatus = "finished"
186
+ self.task_buffer.updateJobs([job], True)
187
+ n_finished += 1
188
+ else:
189
+ new_update_jobs.append(job)
190
+ update_jobs = new_update_jobs
191
+ tmp_log.debug(f"# of finished jobs in defined : {n_finished}")
192
+ # update DB
193
+ tmp_log.debug(f"# of activated jobs : {len(activate_jobs)}")
194
+ self.task_buffer.activateJobs(activate_jobs)
195
+ tmp_log.debug(f"# of updated jobs : {len(update_jobs)}")
196
+ self.task_buffer.updateJobs(update_jobs, True)
197
+ tmp_log.debug(f"# of failed jobs : {len(failed_jobs)}")
198
+ self.task_buffer.updateJobs(failed_jobs, True)
199
+ tmp_log.debug(f"# of waiting jobs : {len(waiting_jobs)}")
200
+ self.task_buffer.keepJobs(waiting_jobs)
201
+ # delete local values
202
+ del update_jobs
203
+ del failed_jobs
204
+ del activate_jobs
205
+ del waiting_jobs