panda-server 0.3.3__tar.gz → 0.3.4__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.3.3 → panda_server-0.3.4}/PKG-INFO +1 -1
  2. panda_server-0.3.4/PandaPkgInfo.py +1 -0
  3. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/JobUtils.py +0 -8
  4. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/OraDBProxy.py +101 -67
  5. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/ResourceSpec.py +46 -0
  6. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/SiteSpec.py +1 -9
  7. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/TaskBuffer.py +1 -1
  8. panda_server-0.3.3/PandaPkgInfo.py +0 -1
  9. {panda_server-0.3.3 → panda_server-0.3.4}/.pre-commit-config.yaml +0 -0
  10. {panda_server-0.3.3 → panda_server-0.3.4}/ChangeLog.txt +0 -0
  11. {panda_server-0.3.3 → panda_server-0.3.4}/Dockerfile +0 -0
  12. {panda_server-0.3.3 → panda_server-0.3.4}/INSTALL.md +0 -0
  13. {panda_server-0.3.3 → panda_server-0.3.4}/INSTALL_ATLAS.md +0 -0
  14. {panda_server-0.3.3 → panda_server-0.3.4}/LICENSE.txt +0 -0
  15. {panda_server-0.3.3 → panda_server-0.3.4}/MANIFEST.in +0 -0
  16. {panda_server-0.3.3 → panda_server-0.3.4}/README.md +0 -0
  17. {panda_server-0.3.3 → panda_server-0.3.4}/package/hatch_build.py +0 -0
  18. {panda_server-0.3.3 → panda_server-0.3.4}/panda-server.spec +0 -0
  19. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/__init__.py +0 -0
  20. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/brokerage/ErrorCode.py +0 -0
  21. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/brokerage/SiteMapper.py +0 -0
  22. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/brokerage/__init__.py +0 -0
  23. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/brokerage/broker.py +0 -0
  24. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/config/__init__.py +0 -0
  25. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/config/config_utils.py +0 -0
  26. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/config/daemon_config.py +0 -0
  27. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/config/panda_config.py +0 -0
  28. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/configurator/Carbon.py +0 -0
  29. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/configurator/Configurator.py +0 -0
  30. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/configurator/__init__.py +0 -0
  31. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/configurator/aux.py +0 -0
  32. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/__init__.py +0 -0
  33. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/master.py +0 -0
  34. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/master_systemd.py +0 -0
  35. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/__init__.py +0 -0
  36. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/add_main.py +0 -0
  37. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/add_sub.py +0 -0
  38. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/cache_pilots.py +0 -0
  39. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/cache_schedconfig.py +0 -0
  40. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/carbon.py +0 -0
  41. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/configurator.py +0 -0
  42. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/copyArchive.py +0 -0
  43. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/datasetManager.py +0 -0
  44. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/dummy_test.py +0 -0
  45. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/evpPD2P.py +0 -0
  46. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/metric_collector.py +0 -0
  47. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/panda_activeusers_query.py +0 -0
  48. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/pilotStreaming.py +0 -0
  49. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/process_workflow_files_daemon.py +0 -0
  50. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/recover_lost_files_daemon.py +0 -0
  51. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/task_evaluator.py +0 -0
  52. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/tmpwatch.py +0 -0
  53. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/worker_synchronization.py +0 -0
  54. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/utils.py +0 -0
  55. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/AdderAtlasPlugin.py +0 -0
  56. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/AdderDummyPlugin.py +0 -0
  57. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/AdderGen.py +0 -0
  58. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/AdderPluginBase.py +0 -0
  59. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/AdderResult.py +0 -0
  60. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/AdderSimplePlugin.py +0 -0
  61. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/DataServiceUtils.py +0 -0
  62. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/ErrorCode.py +0 -0
  63. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/ProcessLimiter.py +0 -0
  64. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/RecoverLostFilesCore.py +0 -0
  65. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/Setupper.py +0 -0
  66. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/SetupperAtlasPlugin.py +0 -0
  67. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/SetupperDummyPlugin.py +0 -0
  68. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/SetupperPluginBase.py +0 -0
  69. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/__init__.py +0 -0
  70. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/activator.py +0 -0
  71. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/closer.py +0 -0
  72. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/closer_atlas_plugin.py +0 -0
  73. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/ddm.py +0 -0
  74. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/ddm_handler.py +0 -0
  75. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/dyn_data_distributer.py +0 -0
  76. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/event_lookup_client_ei.py +0 -0
  77. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/event_picker.py +0 -0
  78. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/finisher.py +0 -0
  79. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/forkSetupper.py +0 -0
  80. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/jobdispatcher/DispatcherUtils.py +0 -0
  81. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/jobdispatcher/ErrorCode.py +0 -0
  82. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/jobdispatcher/JobDispatcher.py +0 -0
  83. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/jobdispatcher/Protocol.py +0 -0
  84. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/jobdispatcher/Watcher.py +0 -0
  85. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/jobdispatcher/__init__.py +0 -0
  86. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/proxycache/__init__.py +0 -0
  87. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/proxycache/panda_proxy_cache.py +0 -0
  88. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/server/.gacl +0 -0
  89. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/server/panda.py +0 -0
  90. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/CoreUtils.py +0 -0
  91. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/MailUtils.py +0 -0
  92. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/__init__.py +0 -0
  93. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/allowed_methods.py +0 -0
  94. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/oidc_utils.py +0 -0
  95. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/panda_request.py +0 -0
  96. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/srv_msg_utils.py +0 -0
  97. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/CloudSpec.py +0 -0
  98. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/CloudTaskSpec.py +0 -0
  99. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/ConBridge.py +0 -0
  100. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/DBProxyPool.py +0 -0
  101. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/DatasetSpec.py +0 -0
  102. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/DdmSpec.py +0 -0
  103. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/ErrorCode.py +0 -0
  104. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/EventServiceUtils.py +0 -0
  105. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/FileSpec.py +0 -0
  106. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/GlobalShares.py +0 -0
  107. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/HarvesterMetricsSpec.py +0 -0
  108. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/Initializer.py +0 -0
  109. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/JobSpec.py +0 -0
  110. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/NucleusSpec.py +0 -0
  111. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/PanDAMsgProcessor.py +0 -0
  112. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/PandaDBSchemaInfo.py +0 -0
  113. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/PickleFileSpec.py +0 -0
  114. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/PickleJobSpec.py +0 -0
  115. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/PrioUtil.py +0 -0
  116. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/ProcessGroups.py +0 -0
  117. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/SQLDumper.py +0 -0
  118. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/SQLManager.py +0 -0
  119. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/SupErrors.py +0 -0
  120. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/TaskBufferInterface.py +0 -0
  121. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/Utils.py +0 -0
  122. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/WorkerSpec.py +0 -0
  123. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/WrappedCursor.py +0 -0
  124. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/WrappedPickle.py +0 -0
  125. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/WrappedPostgresConn.py +0 -0
  126. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/__init__.py +0 -0
  127. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/retryModule.py +0 -0
  128. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/task_split_rules.py +0 -0
  129. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/workflow_processor.py +0 -0
  130. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/SchemaChecker.py +0 -0
  131. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/__init__.py +0 -0
  132. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/alice/README.txt +0 -0
  133. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/alice/mysetup +0 -0
  134. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/alice/titan_testScript_ec2_alice_1.py +0 -0
  135. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/alice/titan_testScript_ec2_alice_2.py +0 -0
  136. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/banUser.py +0 -0
  137. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/boostPrio.py +0 -0
  138. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/boostUser.py +0 -0
  139. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/callbackDDM.py +0 -0
  140. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/daod_on_demand.py +0 -0
  141. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/finishJob.py +0 -0
  142. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/finishTaskJEDI.py +0 -0
  143. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/getJobs.py +0 -0
  144. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killJob.py +0 -0
  145. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killJobLowPrio.py +0 -0
  146. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killJobsInTask.py +0 -0
  147. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killProdJobs.py +0 -0
  148. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killTask.py +0 -0
  149. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killTaskJEDI.py +0 -0
  150. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killUser.py +0 -0
  151. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/lsst/README.txt +0 -0
  152. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/lsst/lsstSubmit.py +0 -0
  153. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/lsst/lsstSubmitMERGEtest.py +0 -0
  154. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/lsst/lsstSubmitPhosim332.py +0 -0
  155. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/lsst/prepare-client-tarball-from-bigpanda-server.sh +0 -0
  156. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/reassignJobs.py +0 -0
  157. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/reassignSite.py +0 -0
  158. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/reassignTask.py +0 -0
  159. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/reassignWaiting.py +0 -0
  160. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/recoverLostFiles.py +0 -0
  161. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/reloadInputDS.py +0 -0
  162. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/sendCommandToJob.py +0 -0
  163. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/setDebugMode.py +0 -0
  164. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/setPriority.py +0 -0
  165. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testEvgen.py +0 -0
  166. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testEvgen17.py +0 -0
  167. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testG4sim.py +0 -0
  168. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testG4sim17.py +0 -0
  169. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testGetCriteriaForGlobalShares.py +0 -0
  170. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testGlobalShares.py +0 -0
  171. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testJobFlowATLAS.py +0 -0
  172. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testReco.py +0 -0
  173. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testSimulReco14.py +0 -0
  174. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testSiteMap.py +0 -0
  175. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testUpdateWorkerPilotStatus.py +0 -0
  176. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testutils.py +0 -0
  177. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/userinterface/Client.py +0 -0
  178. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/userinterface/UserIF.py +0 -0
  179. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/userinterface/__init__.py +0 -0
  180. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/__init__.py +0 -0
  181. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/pcwl_test.py +0 -0
  182. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/pcwl_utils.py +0 -0
  183. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/psnakemake_container.json +0 -0
  184. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/psnakemake_task.json +0 -0
  185. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/psnakemake_test.py +0 -0
  186. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/snakeparser/__init__.py +0 -0
  187. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/snakeparser/extensions.py +0 -0
  188. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/snakeparser/log.py +0 -0
  189. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/snakeparser/names.py +0 -0
  190. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/snakeparser/parser.py +0 -0
  191. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/snakeparser/utils.py +0 -0
  192. {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/workflow_utils.py +0 -0
  193. {panda_server-0.3.3 → panda_server-0.3.4}/pyproject.toml +0 -0
  194. {panda_server-0.3.3 → panda_server-0.3.4}/templates/bin/panda_server-makeSlsXml.exe.template +0 -0
  195. {panda_server-0.3.3 → panda_server-0.3.4}/templates/bin/panda_server-vomsrenew.exe.template +0 -0
  196. {panda_server-0.3.3 → panda_server-0.3.4}/templates/conda_meta.yaml.template +0 -0
  197. {panda_server-0.3.3 → panda_server-0.3.4}/templates/init.d/panda_daemon.exe.template +0 -0
  198. {panda_server-0.3.3 → panda_server-0.3.4}/templates/init.d/panda_httpd.exe.template +0 -0
  199. {panda_server-0.3.3 → panda_server-0.3.4}/templates/init.d/panda_server.exe.template +0 -0
  200. {panda_server-0.3.3 → panda_server-0.3.4}/templates/logrotate.d/panda_server.logrotate.template +0 -0
  201. {panda_server-0.3.3 → panda_server-0.3.4}/templates/panda_server-httpd-FastCGI.conf.rpmnew.template +0 -0
  202. {panda_server-0.3.3 → panda_server-0.3.4}/templates/panda_server-httpd.conf.rpmnew.template +0 -0
  203. {panda_server-0.3.3 → panda_server-0.3.4}/templates/panda_server.cfg.rpmnew.template +0 -0
  204. {panda_server-0.3.3 → panda_server-0.3.4}/templates/sysconfig/panda_server.sysconfig.rpmnew.template +0 -0
  205. {panda_server-0.3.3 → panda_server-0.3.4}/templates/sysconfig/panda_server_env.systemd.rpmnew.template +0 -0
  206. {panda_server-0.3.3 → panda_server-0.3.4}/templates/systemd/panda.service.template +0 -0
  207. {panda_server-0.3.3 → panda_server-0.3.4}/templates/systemd/panda_daemon.service.template +0 -0
  208. {panda_server-0.3.3 → panda_server-0.3.4}/templates/systemd/panda_httpd.service.template +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: panda-server
3
- Version: 0.3.3
3
+ Version: 0.3.4
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>
@@ -0,0 +1 @@
1
+ release_version = "0.3.4"
@@ -26,14 +26,6 @@ job_labels = [ANALY_PS, PROD_PS]
26
26
  priorityTasksToJumpOver = 1500
27
27
 
28
28
 
29
- def translate_resourcetype_to_cores(resource_type, cores_queue):
30
- # resolve the multiplying core factor
31
- if "MCORE" in resource_type:
32
- return cores_queue
33
- else:
34
- return 1
35
-
36
-
37
29
  def translate_prodsourcelabel_to_jobtype(queue_type, prodsourcelabel):
38
30
  if prodsourcelabel in analy_sources:
39
31
  return ANALY_PS
@@ -43,7 +43,11 @@ from pandaserver.taskbuffer.DdmSpec import DdmSpec
43
43
  from pandaserver.taskbuffer.FileSpec import FileSpec
44
44
  from pandaserver.taskbuffer.HarvesterMetricsSpec import HarvesterMetricsSpec
45
45
  from pandaserver.taskbuffer.JobSpec import JobSpec, push_status_changes
46
- from pandaserver.taskbuffer.ResourceSpec import ResourceSpec
46
+ from pandaserver.taskbuffer.ResourceSpec import (
47
+ BASIC_RESOURCE_TYPE,
48
+ ResourceSpec,
49
+ ResourceSpecMapper,
50
+ )
47
51
  from pandaserver.taskbuffer.SupErrors import SupErrors
48
52
  from pandaserver.taskbuffer.Utils import create_shards
49
53
  from pandaserver.taskbuffer.WorkerSpec import WorkerSpec
@@ -156,6 +160,11 @@ class DBProxy:
156
160
  self.__hs_distribution = None # HS06s distribution of sites
157
161
  self.__t_update_distribution = None # Timestamp when the HS06s distribution was last updated
158
162
 
163
+ # resource type mapper
164
+ # if you want to use it, you need to call __reload_resource_spec_mapper first
165
+ self.__resource_spec_mapper = None
166
+ self.__t_update_resource_type_mapper = None
167
+
159
168
  # priority boost
160
169
  self.job_prio_boost_dict = None
161
170
  self.job_prio_boost_dict_update_time = None
@@ -166,9 +175,6 @@ class DBProxy:
166
175
  # mb proxy
167
176
  self.mb_proxy_dict = None
168
177
 
169
- # self.__reload_shares()
170
- # self.__reload_hs_distribution()
171
-
172
178
  # connect to DB
173
179
  def connect(
174
180
  self,
@@ -16809,7 +16815,7 @@ class DBProxy:
16809
16815
 
16810
16816
  # set score site to ES job
16811
16817
  def setScoreSiteToEs(self, jobSpec, methodName, comment):
16812
- _logger.debug(f"{methodName} looking for SCORE site")
16818
+ _logger.debug(f"{methodName} looking for single-core site")
16813
16819
 
16814
16820
  # get score PQ in the nucleus associated to the site to run the small ES job
16815
16821
  sqlSN = "SELECT /* use_json_type */ ps2.panda_site_name "
@@ -16867,9 +16873,9 @@ class DBProxy:
16867
16873
  jobSpec.resource_type = self.get_resource_type_job(jobSpec)
16868
16874
  newSiteName = jobSpec.computingSite
16869
16875
  if newSiteName is not None:
16870
- _logger.info(f"{methodName} set SCORE site to {newSiteName}")
16876
+ _logger.info(f"{methodName} set single-core site to {newSiteName}")
16871
16877
  else:
16872
- _logger.info(f"{methodName} no SCORE site for {jobSpec.computingSite}")
16878
+ _logger.info(f"{methodName} no single-core site for {jobSpec.computingSite}")
16873
16879
  # return
16874
16880
  return
16875
16881
 
@@ -22672,6 +22678,18 @@ class DBProxy:
22672
22678
  _logger.error(f"{comment}: {type} {value}")
22673
22679
  return -1
22674
22680
 
22681
+ def __reload_resource_spec_mapper(self):
22682
+ # update once per hour only
22683
+ if self.__t_update_resource_type_mapper and self.__t_update_resource_type_mapper > datetime.datetime.now() - datetime.timedelta(hours=1):
22684
+ return
22685
+
22686
+ # get the resource types from the DB and make the ResourceSpecMapper object
22687
+ resource_types = self.load_resource_types()
22688
+ if resource_types:
22689
+ self.__resource_spec_mapper = ResourceSpecMapper(resource_types)
22690
+ self.__t_update_resource_type_mapper = datetime.datetime.now()
22691
+ return
22692
+
22675
22693
  def load_resource_types(self, formatting="spec"):
22676
22694
  """
22677
22695
  Load the resource type table to memory
@@ -22872,57 +22890,74 @@ class DBProxy:
22872
22890
  return False, "database error"
22873
22891
 
22874
22892
  # update stat of workers with jobtype breakdown
22875
- def reportWorkerStats_jobtype(self, harvesterID, siteName, paramsList):
22893
+ def reportWorkerStats_jobtype(self, harvesterID, siteName, parameter_list):
22876
22894
  comment = " /* DBProxy.reportWorkerStats_jobtype */"
22877
- methodName = comment.split(" ")[-2].split(".")[-1]
22878
- tmpLog = LogWrapper(
22895
+ method_name = comment.split(" ")[-2].split(".")[-1]
22896
+ tmp_log = LogWrapper(
22879
22897
  _logger,
22880
- methodName + f" < harvesterID={harvesterID} siteName={siteName} >",
22898
+ f"{method_name} < harvesterID={harvesterID} siteName={siteName} >",
22881
22899
  )
22882
- tmpLog.debug("start")
22883
- tmpLog.debug(f"params={str(paramsList)}")
22900
+ tmp_log.debug("start")
22901
+ tmp_log.debug(f"params={str(parameter_list)}")
22884
22902
  try:
22885
22903
  # load new site data
22886
- paramsList = json.loads(paramsList)
22904
+ parameter_list = json.loads(parameter_list)
22887
22905
  # set autocommit on
22888
22906
  self.conn.begin()
22889
- # delete old site data
22890
- sqlDel = "DELETE FROM ATLAS_PANDA.Harvester_Worker_Stats "
22891
- sqlDel += "WHERE harvester_ID=:harvesterID AND computingSite=:siteName "
22892
- varMap = dict()
22893
- varMap[":harvesterID"] = harvesterID
22894
- varMap[":siteName"] = siteName
22895
- self.cur.execute(sqlDel + comment, varMap)
22907
+
22908
+ # lock the site data rows
22909
+ var_map = dict()
22910
+ var_map[":harvesterID"] = harvesterID
22911
+ var_map[":siteName"] = siteName
22912
+ sql_lock = "SELECT harvester_ID, computingSite FROM ATLAS_PANDA.Harvester_Worker_Stats "
22913
+ sql_lock += "WHERE harvester_ID=:harvesterID AND computingSite=:siteName FOR UPDATE NOWAIT "
22914
+ try:
22915
+ self.cur.execute(sql_lock + comment, var_map)
22916
+ except Exception:
22917
+ self._rollback()
22918
+ message = "rows locked by another update"
22919
+ tmp_log.debug(message)
22920
+ tmp_log.debug("done")
22921
+ return False, message
22922
+
22923
+ # delete them
22924
+ sql_delete = "DELETE FROM ATLAS_PANDA.Harvester_Worker_Stats "
22925
+ sql_delete += "WHERE harvester_ID=:harvesterID AND computingSite=:siteName "
22926
+ self.cur.execute(sql_delete + comment, var_map)
22927
+
22896
22928
  # insert new site data
22897
- sqlI = "INSERT INTO ATLAS_PANDA.Harvester_Worker_Stats (harvester_ID, computingSite, jobType, resourceType, status, n_workers, lastUpdate) "
22898
- sqlI += "VALUES (:harvester_ID, :siteName, :jobType, :resourceType, :status, :n_workers, CURRENT_DATE) "
22929
+ sql_insert = "INSERT INTO ATLAS_PANDA.Harvester_Worker_Stats (harvester_ID, computingSite, jobType, resourceType, status, n_workers, lastUpdate) "
22930
+ sql_insert += "VALUES (:harvester_ID, :siteName, :jobType, :resourceType, :status, :n_workers, CURRENT_DATE) "
22899
22931
 
22900
- for jobType in paramsList:
22901
- jt_params = paramsList[jobType]
22932
+ var_map_list = []
22933
+ for jobType in parameter_list:
22934
+ jt_params = parameter_list[jobType]
22902
22935
  for resourceType in jt_params:
22903
22936
  params = jt_params[resourceType]
22904
22937
  if resourceType == "Undefined":
22905
22938
  continue
22906
22939
  for status in params:
22907
22940
  n_workers = params[status]
22908
- varMap = dict()
22909
- varMap[":harvester_ID"] = harvesterID
22910
- varMap[":siteName"] = siteName
22911
- varMap[":status"] = status
22912
- varMap[":jobType"] = jobType
22913
- varMap[":resourceType"] = resourceType
22914
- varMap[":n_workers"] = n_workers
22915
- self.cur.execute(sqlI + comment, varMap)
22916
- # commit
22941
+ var_map = {
22942
+ ":harvester_ID": harvesterID,
22943
+ ":siteName": siteName,
22944
+ ":status": status,
22945
+ ":jobType": jobType,
22946
+ ":resourceType": resourceType,
22947
+ ":n_workers": n_workers,
22948
+ }
22949
+ var_map_list.append(var_map)
22950
+
22951
+ self.cur.executemany(sql_insert + comment, var_map_list)
22952
+
22917
22953
  if not self._commit():
22918
22954
  raise RuntimeError("Commit error")
22919
- # return
22920
- tmpLog.debug("done")
22955
+
22956
+ tmp_log.debug("done")
22921
22957
  return True, "OK"
22922
- except Exception:
22923
- # roll back
22958
+ except Exception as e:
22924
22959
  self._rollback()
22925
- self.dumpErrorMessage(tmpLog, methodName)
22960
+ self.dumpErrorMessage(tmp_log, method_name)
22926
22961
  return False, "database error"
22927
22962
 
22928
22963
  # get stat of workers
@@ -23412,40 +23447,39 @@ class DBProxy:
23412
23447
 
23413
23448
  comment = " /* DBProxy.ups_new_worker_distribution */"
23414
23449
  method_name = comment.split(" ")[-2].split(".")[-1]
23415
- tmpLog = LogWrapper(_logger, f"{method_name}-{queue}")
23416
- tmpLog.debug("start")
23450
+ tmp_log = LogWrapper(_logger, f"{method_name}-{queue}")
23451
+ tmp_log.debug("start")
23417
23452
  n_cores_running = 0
23418
23453
  workers_queued = {}
23419
23454
  n_cores_queued = 0
23420
23455
  harvester_ids_temp = list(worker_stats)
23421
23456
 
23422
- # HIMEM resource types group
23423
23457
  HIMEM = "HIMEM"
23424
- HIMEM_RTS = ["SCORE_HIMEM", "MCORE_HIMEM"]
23458
+ self.__reload_resource_spec_mapper()
23425
23459
 
23426
23460
  # get the configuration for maximum workers of each type
23427
23461
  pq_data_des = self.get_config_for_pq(queue)
23428
23462
  resource_type_limits = {}
23429
23463
  queue_type = "production"
23430
23464
  if not pq_data_des:
23431
- tmpLog.debug("Error retrieving queue configuration from DB, limits can not be applied")
23465
+ tmp_log.debug("Error retrieving queue configuration from DB, limits can not be applied")
23432
23466
  else:
23433
23467
  try:
23434
23468
  resource_type_limits = pq_data_des["uconfig"]["resource_type_limits"]
23435
23469
  except KeyError:
23436
- tmpLog.debug("No resource type limits")
23470
+ tmp_log.debug("No resource type limits")
23437
23471
  pass
23438
23472
  try:
23439
23473
  queue_type = pq_data_des["type"]
23440
23474
  except KeyError:
23441
- tmpLog.error("No queue type")
23475
+ tmp_log.error("No queue type")
23442
23476
  pass
23443
23477
  try:
23444
23478
  cores_queue = pq_data_des["corecount"]
23445
23479
  if not cores_queue:
23446
23480
  cores_queue = 1
23447
23481
  except KeyError:
23448
- tmpLog.error("No corecount")
23482
+ tmp_log.error("No corecount")
23449
23483
  pass
23450
23484
 
23451
23485
  # Retrieve the assigned harvester instance and submit UPS commands only to this instance. We have had multiple
@@ -23470,7 +23504,7 @@ class DBProxy:
23470
23504
  for job_type in worker_stats[harvester_id]:
23471
23505
  workers_queued.setdefault(job_type, {})
23472
23506
  for resource_type in worker_stats[harvester_id][job_type]:
23473
- core_factor = JobUtils.translate_resourcetype_to_cores(resource_type, cores_queue)
23507
+ core_factor = self.__resource_spec_mapper.translate_resourcetype_to_cores(resource_type, cores_queue)
23474
23508
  try:
23475
23509
  n_cores_running = n_cores_running + worker_stats[harvester_id][job_type][resource_type]["running"] * core_factor
23476
23510
 
@@ -23479,14 +23513,14 @@ class DBProxy:
23479
23513
  resource_type_limits[resource_type] = (
23480
23514
  resource_type_limits[resource_type] - worker_stats[harvester_id][job_type][resource_type]["running"]
23481
23515
  )
23482
- tmpLog.debug(f"Limit for rt {resource_type} down to {resource_type_limits[resource_type]}")
23516
+ tmp_log.debug(f"Limit for rt {resource_type} down to {resource_type_limits[resource_type]}")
23483
23517
 
23484
23518
  # This limit is in #CORES, since it mixes single and multi core jobs
23485
- if resource_type in HIMEM_RTS and HIMEM in resource_type_limits:
23519
+ if self.__resource_spec_mapper.is_high_memory(resource_type) and HIMEM in resource_type_limits:
23486
23520
  resource_type_limits[HIMEM] = (
23487
23521
  resource_type_limits[HIMEM] - worker_stats[harvester_id][job_type][resource_type]["running"] * core_factor
23488
23522
  )
23489
- tmpLog.debug(f"Limit for rt group {HIMEM} down to {resource_type_limits[HIMEM]}")
23523
+ tmp_log.debug(f"Limit for rt group {HIMEM} down to {resource_type_limits[HIMEM]}")
23490
23524
 
23491
23525
  except KeyError:
23492
23526
  pass
@@ -23509,7 +23543,7 @@ class DBProxy:
23509
23543
  except KeyError:
23510
23544
  pass
23511
23545
 
23512
- tmpLog.debug(f"Queue {queue} queued worker overview: {workers_queued}")
23546
+ tmp_log.debug(f"Queue {queue} queued worker overview: {workers_queued}")
23513
23547
 
23514
23548
  # For queues that need more pressure towards reaching a target
23515
23549
  n_cores_running_fake = 0
@@ -23519,15 +23553,15 @@ class DBProxy:
23519
23553
  "brokeroff",
23520
23554
  ]: # don't flood test sites with workers
23521
23555
  n_cores_running_fake = pq_data_des["params"]["ups_core_target"]
23522
- tmpLog.debug(f"Using ups_core_target {n_cores_running_fake} for queue {queue}")
23523
- except KeyError: # no value defined in AGIS
23556
+ tmp_log.debug(f"Using ups_core_target {n_cores_running_fake} for queue {queue}")
23557
+ except KeyError: # no value defined in CRIC
23524
23558
  pass
23525
23559
 
23526
23560
  n_cores_running = max(n_cores_running, n_cores_running_fake)
23527
23561
 
23528
23562
  n_cores_target = max(int(n_cores_running * 0.4), 75 * cores_queue)
23529
23563
  n_cores_to_submit = max(n_cores_target - n_cores_queued, 5 * cores_queue)
23530
- tmpLog.debug(f"IN CORES: nrunning {n_cores_running}, ntarget {n_cores_target}, nqueued {n_cores_queued}. We need to process {n_cores_to_submit} cores")
23564
+ tmp_log.debug(f"IN CORES: nrunning {n_cores_running}, ntarget {n_cores_target}, nqueued {n_cores_queued}. We need to process {n_cores_to_submit} cores")
23531
23565
 
23532
23566
  # Get the sorted global shares
23533
23567
  sorted_shares = self.get_sorted_leaves()
@@ -23545,20 +23579,20 @@ class DBProxy:
23545
23579
  """
23546
23580
  self.cur.execute(sql + comment, var_map)
23547
23581
  activated_jobs = self.cur.fetchall()
23548
- tmpLog.debug(f"Processing share: {share.name}. Got {len(activated_jobs)} activated jobs")
23582
+ tmp_log.debug(f"Processing share: {share.name}. Got {len(activated_jobs)} activated jobs")
23549
23583
  for gshare, prodsourcelabel, resource_type in activated_jobs:
23550
- core_factor = JobUtils.translate_resourcetype_to_cores(resource_type, cores_queue)
23584
+ core_factor = self.__resource_spec_mapper.translate_resourcetype_to_cores(resource_type, cores_queue)
23551
23585
 
23552
23586
  # translate prodsourcelabel to a subset of job types, typically 'user' and 'managed'
23553
23587
  job_type = JobUtils.translate_prodsourcelabel_to_jobtype(queue_type, prodsourcelabel)
23554
23588
  # if we reached the limit for the resource type, skip the job
23555
23589
  if resource_type in resource_type_limits and resource_type_limits[resource_type] <= 0:
23556
- # tmpLog.debug('Reached resource type limit for {0}'.format(resource_type))
23590
+ # tmp_log.debug('Reached resource type limit for {0}'.format(resource_type))
23557
23591
  continue
23558
23592
 
23559
23593
  # if we reached the limit for the HIMEM resource type group, skip the job
23560
- if resource_type in HIMEM_RTS and HIMEM in resource_type_limits and resource_type_limits[HIMEM] <= 0:
23561
- # tmpLog.debug('Reached resource type limit for {0}'.format(resource_type))
23594
+ if self.__resource_spec_mapper.is_high_memory(resource_type) and HIMEM in resource_type_limits and resource_type_limits[HIMEM] <= 0:
23595
+ # tmp_log.debug('Reached resource type limit for {0}'.format(resource_type))
23562
23596
  continue
23563
23597
 
23564
23598
  workers_queued.setdefault(job_type, {})
@@ -23570,15 +23604,15 @@ class DBProxy:
23570
23604
 
23571
23605
  # We reached the number of workers needed
23572
23606
  if n_cores_to_submit <= 0:
23573
- tmpLog.debug("Reached cores needed (inner)")
23607
+ tmp_log.debug("Reached cores needed (inner)")
23574
23608
  break
23575
23609
 
23576
23610
  # We reached the number of workers needed
23577
23611
  if n_cores_to_submit <= 0:
23578
- tmpLog.debug("Reached cores needed (outer)")
23612
+ tmp_log.debug("Reached cores needed (outer)")
23579
23613
  break
23580
23614
 
23581
- tmpLog.debug(f"workers_queued: {workers_queued}")
23615
+ tmp_log.debug(f"workers_queued: {workers_queued}")
23582
23616
 
23583
23617
  new_workers = {}
23584
23618
  for job_type in workers_queued:
@@ -23591,7 +23625,7 @@ class DBProxy:
23591
23625
  # we don't have enough workers for this resource type
23592
23626
  new_workers[job_type][resource_type] = -workers_queued[job_type][resource_type] + 1
23593
23627
 
23594
- # We should still submit a SCORE worker, even if there are no activated jobs to avoid queue deactivation
23628
+ # We should still submit a basic worker, even if there are no activated jobs to avoid queue deactivation
23595
23629
  workers = False
23596
23630
  for job_type in new_workers:
23597
23631
  for resource_type in new_workers[job_type]:
@@ -23599,7 +23633,7 @@ class DBProxy:
23599
23633
  workers = True
23600
23634
  break
23601
23635
  if not workers:
23602
- new_workers["managed"] = {"SCORE": 1}
23636
+ new_workers["managed"] = {BASIC_RESOURCE_TYPE: 1}
23603
23637
 
23604
23638
  # In case multiple harvester instances are serving a panda queue, split workers evenly between them
23605
23639
  new_workers_per_harvester = {}
@@ -23612,8 +23646,8 @@ class DBProxy:
23612
23646
  math.ceil(new_workers[job_type][resource_type] * 1.0 / len(harvester_ids))
23613
23647
  )
23614
23648
 
23615
- tmpLog.debug(f"Workers to submit: {new_workers_per_harvester}")
23616
- tmpLog.debug("done")
23649
+ tmp_log.debug(f"Workers to submit: {new_workers_per_harvester}")
23650
+ tmp_log.debug("done")
23617
23651
  return new_workers_per_harvester
23618
23652
 
23619
23653
  # get active consumers
@@ -5,6 +5,43 @@ Resource type specification for JEDI
5
5
 
6
6
  from . import JobUtils
7
7
 
8
+ HIMEM_THRESHOLD = 2000 # MB per core
9
+ BASIC_RESOURCE_TYPE = "SCORE"
10
+
11
+
12
+ class ResourceSpecMapper(object):
13
+ def __init__(self, resource_types):
14
+ """
15
+ :param resource_types: list of ResourceSpec objects
16
+ """
17
+ self.resource_types = resource_types
18
+
19
+ def is_single_core(self, resource_name):
20
+ for resource_type in self.resource_types:
21
+ if resource_type.resource_name == resource_name:
22
+ return resource_type.is_single_core()
23
+ return False
24
+
25
+ def is_multi_core(self, resource_name):
26
+ for resource_type in self.resource_types:
27
+ if resource_type.resource_name == resource_name:
28
+ return resource_type.is_multi_core()
29
+ return False
30
+
31
+ def is_high_memory(self, resource_name):
32
+ for resource_type in self.resource_types:
33
+ if resource_type.resource_name == resource_name:
34
+ if resource_type.minrampercore is not None and resource_type.minrampercore > HIMEM_THRESHOLD:
35
+ return True
36
+ return False
37
+
38
+ def translate_resourcetype_to_cores(self, resource_name, cores_queue):
39
+ # if the resource type is multi-core, return the number of cores in the queue
40
+ if self.is_multi_core(resource_name):
41
+ return cores_queue
42
+
43
+ return 1
44
+
8
45
 
9
46
  class ResourceSpec(object):
10
47
  # attributes
@@ -105,6 +142,15 @@ class ResourceSpec(object):
105
142
 
106
143
  return True
107
144
 
145
+ def is_single_core(self):
146
+ if self.mincore is not None and self.mincore == 1 and self.maxcore is not None and self.maxcore == 1:
147
+ return True
148
+ return False
149
+
150
+ def is_multi_core(self):
151
+ if self.mincore is not None and self.mincore > 1:
152
+ return True
153
+
108
154
  def column_names(cls, prefix=None):
109
155
  """
110
156
  return column names for DB interactions
@@ -82,14 +82,6 @@ class SiteSpec(object):
82
82
  return True
83
83
  return False
84
84
 
85
- # get resource type
86
- def getResourceType(self):
87
- if self.type == "analysis":
88
- return "ANALY"
89
- if self.coreCount > 1:
90
- return "MCORE"
91
- return "SCORE"
92
-
93
85
  # check what type of jobs are allowed
94
86
  def getJobSeed(self):
95
87
  tmpVal = self.jobseed
@@ -157,7 +149,7 @@ class SiteSpec(object):
157
149
  return None
158
150
  return int(tmpVal)
159
151
 
160
- # get minimum of remainig events for jumbo jobs
152
+ # get minimum of remaining events for jumbo jobs
161
153
  def getMinEventsForJumbo(self):
162
154
  tmpVal = self.getValueFromCatchall("minEventsForJumbo")
163
155
  if tmpVal is None:
@@ -3580,7 +3580,7 @@ class TaskBuffer:
3580
3580
 
3581
3581
  def getResourceTypes(self):
3582
3582
  """
3583
- Get resource types (SCORE, MCORE, SCORE_HIMEM, MCORE_HIMEM) and their definitions
3583
+ Get resource types (SCORE, MCORE, ...) and their definitions
3584
3584
  """
3585
3585
  # get DB proxy
3586
3586
  proxy = self.proxyPool.getProxy()
@@ -1 +0,0 @@
1
- release_version = "0.3.3"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes