rucio 1.30.5__tar.gz → 1.30.7__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.

Potentially problematic release.


This version of rucio might be problematic. Click here for more details.

Files changed (589) hide show
  1. {rucio-1.30.5 → rucio-1.30.7}/PKG-INFO +1 -1
  2. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-conveyor-preparer +2 -1
  3. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/rule.py +3 -0
  4. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/exception.py +11 -0
  5. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/schema/cms.py +23 -10
  6. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/replica.py +7 -3
  7. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/request.py +0 -1
  8. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/rule.py +6 -2
  9. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/transfer.py +19 -8
  10. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/conveyor/common.py +9 -2
  11. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/conveyor/preparer.py +8 -5
  12. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/gfal.py +6 -3
  13. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/common.py +4 -0
  14. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_conveyor.py +109 -3
  15. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_conveyor_submitter.py +9 -1
  16. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_judge_evaluator.py +145 -2
  17. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_preparer.py +2 -1
  18. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_xrootd.py +3 -0
  19. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rule.py +73 -2
  20. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/transfertool/fts3.py +1 -1
  21. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/vcsversion.py +3 -3
  22. {rucio-1.30.5 → rucio-1.30.7}/AUTHORS.rst +0 -0
  23. {rucio-1.30.5 → rucio-1.30.7}/ChangeLog +0 -0
  24. {rucio-1.30.5 → rucio-1.30.7}/LICENSE +0 -0
  25. {rucio-1.30.5 → rucio-1.30.7}/MANIFEST.in +0 -0
  26. {rucio-1.30.5 → rucio-1.30.7}/README.rst +0 -0
  27. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio +0 -0
  28. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-abacus-account +0 -0
  29. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-abacus-collection-replica +0 -0
  30. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-abacus-rse +0 -0
  31. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-admin +0 -0
  32. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-atropos +0 -0
  33. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-auditor +0 -0
  34. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-automatix +0 -0
  35. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-bb8 +0 -0
  36. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-c3po +0 -0
  37. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-cache-client +0 -0
  38. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-cache-consumer +0 -0
  39. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-conveyor-finisher +0 -0
  40. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-conveyor-poller +0 -0
  41. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-conveyor-receiver +0 -0
  42. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-conveyor-stager +0 -0
  43. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-conveyor-submitter +0 -0
  44. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-conveyor-throttler +0 -0
  45. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-dark-reaper +0 -0
  46. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-dumper +0 -0
  47. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-follower +0 -0
  48. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-hermes +0 -0
  49. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-hermes2 +0 -0
  50. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-judge-cleaner +0 -0
  51. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-judge-evaluator +0 -0
  52. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-judge-injector +0 -0
  53. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-judge-repairer +0 -0
  54. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-kronos +0 -0
  55. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-light-reaper +0 -0
  56. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-minos +0 -0
  57. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-minos-temporary-expiration +0 -0
  58. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-necromancer +0 -0
  59. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-oauth-manager +0 -0
  60. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-reaper +0 -0
  61. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-replica-recoverer +0 -0
  62. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-storage-consistency-actions +0 -0
  63. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-transmogrifier +0 -0
  64. {rucio-1.30.5 → rucio-1.30.7}/bin/rucio-undertaker +0 -0
  65. {rucio-1.30.5 → rucio-1.30.7}/etc/alembic.ini.template +0 -0
  66. {rucio-1.30.5 → rucio-1.30.7}/etc/alembic_offline.ini.template +0 -0
  67. {rucio-1.30.5 → rucio-1.30.7}/etc/globus-config.yml.template +0 -0
  68. {rucio-1.30.5 → rucio-1.30.7}/etc/ldap.cfg.template +0 -0
  69. {rucio-1.30.5 → rucio-1.30.7}/etc/mail_templates/rule_approval_request.tmpl +0 -0
  70. {rucio-1.30.5 → rucio-1.30.7}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  71. {rucio-1.30.5 → rucio-1.30.7}/etc/mail_templates/rule_approved_user.tmpl +0 -0
  72. {rucio-1.30.5 → rucio-1.30.7}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  73. {rucio-1.30.5 → rucio-1.30.7}/etc/mail_templates/rule_denied_user.tmpl +0 -0
  74. {rucio-1.30.5 → rucio-1.30.7}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  75. {rucio-1.30.5 → rucio-1.30.7}/etc/rse-accounts.cfg.template +0 -0
  76. {rucio-1.30.5 → rucio-1.30.7}/etc/rucio.cfg.atlas.client.template +0 -0
  77. {rucio-1.30.5 → rucio-1.30.7}/etc/rucio.cfg.template +0 -0
  78. {rucio-1.30.5 → rucio-1.30.7}/etc/rucio_multi_vo.cfg.template +0 -0
  79. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/__init__.py +0 -0
  80. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/alembicrevision.py +0 -0
  81. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/__init__.py +0 -0
  82. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/account.py +0 -0
  83. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/account_limit.py +0 -0
  84. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/authentication.py +0 -0
  85. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/config.py +0 -0
  86. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/credential.py +0 -0
  87. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/did.py +0 -0
  88. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/dirac.py +0 -0
  89. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/exporter.py +0 -0
  90. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/heartbeat.py +0 -0
  91. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/identity.py +0 -0
  92. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/importer.py +0 -0
  93. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/lifetime_exception.py +0 -0
  94. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/lock.py +0 -0
  95. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/meta.py +0 -0
  96. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/permission.py +0 -0
  97. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/quarantined_replica.py +0 -0
  98. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/replica.py +0 -0
  99. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/request.py +0 -0
  100. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/rse.py +0 -0
  101. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/scope.py +0 -0
  102. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/subscription.py +0 -0
  103. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/temporary_did.py +0 -0
  104. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/api/vo.py +0 -0
  105. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/__init__.py +0 -0
  106. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/accountclient.py +0 -0
  107. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/accountlimitclient.py +0 -0
  108. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/baseclient.py +0 -0
  109. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/client.py +0 -0
  110. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/configclient.py +0 -0
  111. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/credentialclient.py +0 -0
  112. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/didclient.py +0 -0
  113. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/diracclient.py +0 -0
  114. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/downloadclient.py +0 -0
  115. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/exportclient.py +0 -0
  116. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/fileclient.py +0 -0
  117. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/importclient.py +0 -0
  118. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/lifetimeclient.py +0 -0
  119. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/lockclient.py +0 -0
  120. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/metaclient.py +0 -0
  121. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/pingclient.py +0 -0
  122. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/replicaclient.py +0 -0
  123. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/requestclient.py +0 -0
  124. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/rseclient.py +0 -0
  125. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/ruleclient.py +0 -0
  126. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/scopeclient.py +0 -0
  127. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/subscriptionclient.py +0 -0
  128. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/touchclient.py +0 -0
  129. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/client/uploadclient.py +0 -0
  130. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/__init__.py +0 -0
  131. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/cache.py +0 -0
  132. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/config.py +0 -0
  133. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/constants.py +0 -0
  134. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/constraints.py +0 -0
  135. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/didtype.py +0 -0
  136. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/dumper/__init__.py +0 -0
  137. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/dumper/consistency.py +0 -0
  138. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/dumper/data_models.py +0 -0
  139. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/dumper/path_parsing.py +0 -0
  140. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/extra.py +0 -0
  141. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/logging.py +0 -0
  142. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/pcache.py +0 -0
  143. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/policy.py +0 -0
  144. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/schema/__init__.py +0 -0
  145. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/schema/atlas.py +0 -0
  146. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/schema/belleii.py +0 -0
  147. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/schema/domatpc.py +0 -0
  148. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/schema/escape.py +0 -0
  149. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/schema/generic.py +0 -0
  150. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  151. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/schema/icecube.py +0 -0
  152. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/schema/lsst.py +0 -0
  153. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/stomp_utils.py +0 -0
  154. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/stopwatch.py +0 -0
  155. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/test_rucio_server.py +0 -0
  156. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/types.py +0 -0
  157. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/common/utils.py +0 -0
  158. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/__init__.py +0 -0
  159. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/account.py +0 -0
  160. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/account_counter.py +0 -0
  161. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/account_limit.py +0 -0
  162. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/authentication.py +0 -0
  163. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/config.py +0 -0
  164. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/credential.py +0 -0
  165. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/did.py +0 -0
  166. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/__init__.py +0 -0
  167. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/did_column_meta.py +0 -0
  168. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
  169. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
  170. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
  171. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
  172. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
  173. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/dirac.py +0 -0
  174. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/distance.py +0 -0
  175. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/exporter.py +0 -0
  176. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/heartbeat.py +0 -0
  177. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/identity.py +0 -0
  178. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/importer.py +0 -0
  179. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/lifetime_exception.py +0 -0
  180. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/lock.py +0 -0
  181. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/message.py +0 -0
  182. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/meta.py +0 -0
  183. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/monitor.py +0 -0
  184. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/naming_convention.py +0 -0
  185. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/nongrid_trace.py +0 -0
  186. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/oidc.py +0 -0
  187. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/permission/__init__.py +0 -0
  188. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/permission/atlas.py +0 -0
  189. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/permission/belleii.py +0 -0
  190. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/permission/cms.py +0 -0
  191. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/permission/escape.py +0 -0
  192. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/permission/generic.py +0 -0
  193. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
  194. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/quarantined_replica.py +0 -0
  195. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/replica_sorter.py +0 -0
  196. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/rse.py +0 -0
  197. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/rse_counter.py +0 -0
  198. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/rse_expression_parser.py +0 -0
  199. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/rse_selector.py +0 -0
  200. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/rule_grouping.py +0 -0
  201. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/scope.py +0 -0
  202. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/subscription.py +0 -0
  203. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/temporary_did.py +0 -0
  204. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/topology.py +0 -0
  205. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/trace.py +0 -0
  206. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/vo.py +0 -0
  207. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/core/volatile_replica.py +0 -0
  208. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/__init__.py +0 -0
  209. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/abacus/__init__.py +0 -0
  210. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/abacus/account.py +0 -0
  211. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
  212. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/abacus/rse.py +0 -0
  213. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/atropos/__init__.py +0 -0
  214. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/atropos/atropos.py +0 -0
  215. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/auditor/__init__.py +0 -0
  216. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/auditor/hdfs.py +0 -0
  217. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
  218. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/automatix/__init__.py +0 -0
  219. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/automatix/automatix.py +0 -0
  220. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
  221. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/badreplicas/minos.py +0 -0
  222. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
  223. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
  224. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/bb8/__init__.py +0 -0
  225. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/bb8/bb8.py +0 -0
  226. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/bb8/common.py +0 -0
  227. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
  228. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
  229. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/__init__.py +0 -0
  230. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/__init__.py +0 -0
  231. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/simple.py +0 -0
  232. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/t2_free_space.py +0 -0
  233. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +0 -0
  234. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +0 -0
  235. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/c3po.py +0 -0
  236. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/__init__.py +0 -0
  237. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/agis.py +0 -0
  238. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/free_space.py +0 -0
  239. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/jedi_did.py +0 -0
  240. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/mock_did.py +0 -0
  241. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/network_metrics.py +0 -0
  242. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/workload.py +0 -0
  243. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/__init__.py +0 -0
  244. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/dataset_cache.py +0 -0
  245. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/expiring_dataset_cache.py +0 -0
  246. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/expiring_list.py +0 -0
  247. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/popularity.py +0 -0
  248. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/timeseries.py +0 -0
  249. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/cache/__init__.py +0 -0
  250. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/cache/consumer.py +0 -0
  251. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/common.py +0 -0
  252. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/conveyor/__init__.py +0 -0
  253. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/conveyor/finisher.py +0 -0
  254. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/conveyor/poller.py +0 -0
  255. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/conveyor/receiver.py +0 -0
  256. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/conveyor/stager.py +0 -0
  257. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/conveyor/submitter.py +0 -0
  258. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/conveyor/throttler.py +0 -0
  259. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/follower/__init__.py +0 -0
  260. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/follower/follower.py +0 -0
  261. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/hermes/__init__.py +0 -0
  262. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/hermes/hermes.py +0 -0
  263. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/hermes/hermes2.py +0 -0
  264. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/judge/__init__.py +0 -0
  265. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/judge/cleaner.py +0 -0
  266. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/judge/evaluator.py +0 -0
  267. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/judge/injector.py +0 -0
  268. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/judge/repairer.py +0 -0
  269. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
  270. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
  271. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/reaper/__init__.py +0 -0
  272. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
  273. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/reaper/light_reaper.py +0 -0
  274. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/reaper/reaper.py +0 -0
  275. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
  276. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +0 -0
  277. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/storage/__init__.py +0 -0
  278. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
  279. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
  280. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/tracer/__init__.py +0 -0
  281. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/tracer/kronos.py +0 -0
  282. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
  283. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
  284. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/undertaker/__init__.py +0 -0
  285. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
  286. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/__init__.py +0 -0
  287. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/__init__.py +0 -0
  288. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/constants.py +0 -0
  289. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
  290. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
  291. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
  292. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
  293. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
  294. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
  295. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
  296. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
  297. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
  298. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
  299. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
  300. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
  301. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
  302. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
  303. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
  304. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
  305. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
  306. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
  307. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
  308. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
  309. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
  310. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
  311. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
  312. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
  313. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
  314. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
  315. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
  316. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
  317. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
  318. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
  319. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
  320. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
  321. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
  322. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
  323. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
  324. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
  325. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
  326. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
  327. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
  328. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
  329. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
  330. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
  331. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
  332. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
  333. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
  334. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
  335. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
  336. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
  337. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
  338. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
  339. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
  340. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
  341. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
  342. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
  343. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
  344. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
  345. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
  346. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
  347. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
  348. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
  349. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
  350. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
  351. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
  352. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
  353. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
  354. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
  355. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
  356. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
  357. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
  358. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
  359. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
  360. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
  361. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
  362. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
  363. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
  364. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
  365. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
  366. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
  367. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
  368. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
  369. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
  370. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
  371. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
  372. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
  373. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
  374. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
  375. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
  376. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
  377. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
  378. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
  379. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
  380. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
  381. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
  382. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
  383. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
  384. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
  385. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
  386. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
  387. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
  388. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
  389. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
  390. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
  391. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
  392. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
  393. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
  394. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
  395. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
  396. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
  397. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
  398. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
  399. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
  400. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
  401. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
  402. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
  403. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
  404. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
  405. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
  406. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
  407. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
  408. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
  409. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
  410. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
  411. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/models.py +0 -0
  412. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/sautils.py +0 -0
  413. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/session.py +0 -0
  414. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/types.py +0 -0
  415. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/db/sqla/util.py +0 -0
  416. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/__init__.py +0 -0
  417. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/__init__.py +0 -0
  418. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/cache.py +0 -0
  419. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/dummy.py +0 -0
  420. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/globus.py +0 -0
  421. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/gsiftp.py +0 -0
  422. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/http_cache.py +0 -0
  423. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/mock.py +0 -0
  424. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/ngarc.py +0 -0
  425. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/posix.py +0 -0
  426. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/protocol.py +0 -0
  427. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/rclone.py +0 -0
  428. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/rfio.py +0 -0
  429. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/srm.py +0 -0
  430. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/ssh.py +0 -0
  431. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/storm.py +0 -0
  432. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/webdav.py +0 -0
  433. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/protocols/xrootd.py +0 -0
  434. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/rse/rsemanager.py +0 -0
  435. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/__init__.py +0 -0
  436. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/common_server.py +0 -0
  437. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/conftest.py +0 -0
  438. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/inputs/__init__.py +0 -0
  439. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/lfn2pfn_module_test.py +0 -0
  440. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/mocks/__init__.py +0 -0
  441. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/mocks/gfal2.py +0 -0
  442. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/rsemgr_api_test.py +0 -0
  443. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/ruciopytest/__init__.py +0 -0
  444. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/ruciopytest/plugin.py +0 -0
  445. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/ruciopytest/rucioxdist.py +0 -0
  446. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/temp_factories.py +0 -0
  447. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_abacus_account.py +0 -0
  448. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_abacus_collection_replica.py +0 -0
  449. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_abacus_rse.py +0 -0
  450. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_account.py +0 -0
  451. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_account_limits.py +0 -0
  452. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_api_external_representation.py +0 -0
  453. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_archive.py +0 -0
  454. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_auditor.py +0 -0
  455. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_auditor_hdfs.py +0 -0
  456. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_auditor_srmdumps.py +0 -0
  457. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_authentication.py +0 -0
  458. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_automatix.py +0 -0
  459. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_bad_replica.py +0 -0
  460. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_bb8.py +0 -0
  461. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_belleii.py +0 -0
  462. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_bin_rucio.py +0 -0
  463. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_boolean.py +0 -0
  464. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_clients.py +0 -0
  465. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_common_types.py +0 -0
  466. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_config.py +0 -0
  467. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_counter.py +0 -0
  468. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_credential.py +0 -0
  469. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_curl.py +0 -0
  470. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_daemons.py +0 -0
  471. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_dataset_replicas.py +0 -0
  472. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_db.py +0 -0
  473. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_did.py +0 -0
  474. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_did_meta_plugins.py +0 -0
  475. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_didtype.py +0 -0
  476. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_download.py +0 -0
  477. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_dumper.py +0 -0
  478. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_dumper_consistency.py +0 -0
  479. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_dumper_data_model.py +0 -0
  480. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_dumper_path_parsing.py +0 -0
  481. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_filter_engine.py +0 -0
  482. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_heartbeat.py +0 -0
  483. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_hermes.py +0 -0
  484. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_identity.py +0 -0
  485. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_impl_upload_download.py +0 -0
  486. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_import_export.py +0 -0
  487. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_judge_cleaner.py +0 -0
  488. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_judge_injector.py +0 -0
  489. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_judge_repairer.py +0 -0
  490. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_lifetime.py +0 -0
  491. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_message.py +0 -0
  492. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_meta.py +0 -0
  493. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_meta_did.py +0 -0
  494. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_module_import.py +0 -0
  495. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_monitor.py +0 -0
  496. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_multi_vo.py +0 -0
  497. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_naming_convention.py +0 -0
  498. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_oauthmanager.py +0 -0
  499. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_oidc.py +0 -0
  500. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_permission.py +0 -0
  501. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_pfns.py +0 -0
  502. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_ping.py +0 -0
  503. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_qos.py +0 -0
  504. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_quarantined_replica.py +0 -0
  505. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_reaper.py +0 -0
  506. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_redirect.py +0 -0
  507. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_replica.py +0 -0
  508. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_replica_recoverer.py +0 -0
  509. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_replica_sorting.py +0 -0
  510. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_request.py +0 -0
  511. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_root_proxy.py +0 -0
  512. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rse.py +0 -0
  513. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rse_expression_parser.py +0 -0
  514. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rse_lfn2path.py +0 -0
  515. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_gfal2.py +0 -0
  516. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_posix.py +0 -0
  517. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_rclone.py +0 -0
  518. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_rsync.py +0 -0
  519. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_srm.py +0 -0
  520. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_ssh.py +0 -0
  521. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_webdav.py +0 -0
  522. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rse_selector.py +0 -0
  523. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_rucio_server.py +0 -0
  524. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_schema_cms.py +5 -5
  525. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_scope.py +0 -0
  526. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_subscription.py +0 -0
  527. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_temporary_did.py +0 -0
  528. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_throttler.py +0 -0
  529. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_tpc.py +0 -0
  530. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_trace.py +0 -0
  531. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_transfer.py +0 -0
  532. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_undertaker.py +0 -0
  533. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_upload.py +0 -0
  534. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/tests/test_utils.py +0 -0
  535. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/transfertool/__init__.py +0 -0
  536. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/transfertool/globus.py +0 -0
  537. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/transfertool/globus_library.py +0 -0
  538. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/transfertool/mock.py +0 -0
  539. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/transfertool/transfertool.py +0 -0
  540. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/version.py +0 -0
  541. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/__init__.py +0 -0
  542. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/__init__.py +0 -0
  543. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
  544. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
  545. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
  546. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
  547. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
  548. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
  549. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
  550. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/common.py +0 -0
  551. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
  552. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
  553. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
  554. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
  555. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
  556. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
  557. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
  558. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
  559. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
  560. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
  561. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
  562. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/meta.py +0 -0
  563. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
  564. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
  565. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
  566. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
  567. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/replicas.py +0 -0
  568. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
  569. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
  570. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
  571. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
  572. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
  573. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
  574. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
  575. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/tmp_dids.py +0 -0
  576. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
  577. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
  578. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/main.py +0 -0
  579. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio/web/rest/metrics.py +0 -0
  580. {rucio-1.30.5 → rucio-1.30.7}/lib/rucio.egg-info/SOURCES.txt +0 -0
  581. {rucio-1.30.5 → rucio-1.30.7}/pylintrc +0 -0
  582. {rucio-1.30.5 → rucio-1.30.7}/pyproject.toml +0 -0
  583. {rucio-1.30.5 → rucio-1.30.7}/requirements.txt +0 -0
  584. {rucio-1.30.5 → rucio-1.30.7}/setup.cfg +0 -0
  585. {rucio-1.30.5 → rucio-1.30.7}/setup.py +0 -0
  586. {rucio-1.30.5 → rucio-1.30.7}/setuputil.py +0 -0
  587. {rucio-1.30.5 → rucio-1.30.7}/tools/bootstrap.py +0 -0
  588. {rucio-1.30.5 → rucio-1.30.7}/tools/merge_rucio_configs.py +0 -0
  589. {rucio-1.30.5 → rucio-1.30.7}/tools/reset_database.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rucio
3
- Version: 1.30.5
3
+ Version: 1.30.7
4
4
  Summary: Rucio Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -23,7 +23,7 @@ from rucio.daemons.conveyor.preparer import run, stop
23
23
  def main(args):
24
24
  signal.signal(signal.SIGTERM, stop)
25
25
  try:
26
- run(once=args.run_once, threads=args.threads, sleep_time=args.sleep_time, bulk=args.bulk)
26
+ run(once=args.run_once, threads=args.threads, sleep_time=args.sleep_time, bulk=args.bulk, ignore_availability=args.ignore_availability)
27
27
  except KeyboardInterrupt:
28
28
  stop()
29
29
 
@@ -34,4 +34,5 @@ if __name__ == "__main__":
34
34
  parser.add_argument("--threads", action="store", default=1, type=int, help='Concurrency control: total number of threads on this process')
35
35
  parser.add_argument("--sleep-time", action="store", default=60, type=int, help='Concurrency control: thread sleep time after each chunk of work')
36
36
  parser.add_argument("--bulk", action="store", default=100, type=int, help='Limit of requests per chunk')
37
+ parser.add_argument('--ignore-availability', action="store_true", default=False, help='If True, will also try to submit transfers having blocklisted RSEs as sources')
37
38
  main(args=parser.parse_args())
@@ -318,6 +318,9 @@ def move_replication_rule(rule_id, rse_expression, override, issuer, vo='def', *
318
318
  :param vo: The VO to act on.
319
319
  :raises: RuleNotFound, RuleReplaceFailed, InvalidRSEExpression, AccessDenied
320
320
  """
321
+ override = override.copy()
322
+ if 'account' in override:
323
+ override['account'] = InternalAccount(override['account'], vo=vo)
321
324
  kwargs = {
322
325
  'rule_id': rule_id,
323
326
  'rse_expression': rse_expression,
@@ -1069,3 +1069,14 @@ class PolicyPackageVersionError(RucioException):
1069
1069
  super(PolicyPackageVersionError, self).__init__(*args, **kwargs)
1070
1070
  self._message = 'Policy package %s is not compatible with this Rucio version' % package
1071
1071
  self.error_code = 103
1072
+
1073
+
1074
+ class InvalidSourceReplicaExpression(RucioException):
1075
+ """
1076
+ Source Replica Expression Considered Invalid
1077
+ """
1078
+
1079
+ def __init__(self, *args, **kwargs):
1080
+ super(InvalidSourceReplicaExpression, self).__init__(*args, **kwargs)
1081
+ self._message = 'Provided Source Replica expression is considered invalid.'
1082
+ self.error_code = 104
@@ -445,21 +445,34 @@ def validate_cms_did(obj):
445
445
  Special checking for DIDs
446
446
  Most of the checking is done with JSON schema, but this check
447
447
  makes sure user LFNs are in the correct /store/user/rucio/USERNAME namespace
448
+ makes sure group LFNs are in the correct /store/group/rucio/GROUPNAME namespace
448
449
  """
449
450
  if not obj:
450
451
  return
451
452
 
452
- lfn = obj['name']
453
453
  did_type = obj['type']
454
+ lfn = obj['name']
454
455
  scope = obj['scope']
455
- if scope.startswith('user.') and did_type == 'FILE':
456
- _, user = scope.split('.', 1)
457
- if not lfn.startswith('/store/user/rucio/%s/' % user):
458
- raise InvalidObject("Problem with LFN %(lfn)s : Not allowed for user %(user)s" % locals())
459
- if lfn.startswith('/store/user') and not lfn.startswith('/store/user/rucio/'):
460
- raise InvalidObject("Problem with LFN %(lfn)s : Legacy user files are not managed with Rucio")
461
- if lfn.startswith('/store/user/rucio') and not scope.startswith('user.'):
462
- raise InvalidObject("Problem with LFN %(lfn)s : Only user scopes allowed in /store/user/rucio")
463
- if scope == 'logs' and did_type == 'FILE':
456
+
457
+ if did_type != "FILE":
458
+ return
459
+
460
+ verify_scope_lfn_match(lfn, scope, "user")
461
+ verify_scope_lfn_match(lfn, scope, "group")
462
+
463
+ if scope == 'logs':
464
464
  if not lfn.startswith('/store/logs/'):
465
465
  raise InvalidObject("Problem with LFN %(lfn)s : Logs must start with /store/logs" % locals())
466
+
467
+
468
+ def verify_scope_lfn_match(lfn, scope, scope_type):
469
+ if lfn.startswith(f'/store/{scope_type}') and not lfn.startswith(f'/store/{scope_type}/rucio/'):
470
+ raise InvalidObject(f"Problem with LFN {lfn} : Legacy {scope_type} files are not managed with Rucio")
471
+
472
+ if lfn.startswith(f'/store/{scope_type}/rucio') and not scope.startswith(f'{scope_type}.'):
473
+ raise InvalidObject(f"Problem with LFN {lfn}: Only {scope_type} scopes allowed in /store/{scope_type}/rucio")
474
+
475
+ if scope.startswith(f'{scope_type}.'):
476
+ _, account = scope.split('.', 1)
477
+ if not lfn.startswith(f'/store/{scope_type}/rucio/{account}/'):
478
+ raise InvalidObject(f"Problem with LFN {lfn} : Not allowed for {scope_type} {account}")
@@ -2731,7 +2731,8 @@ def list_and_mark_unlocked_replicas(limit, bytes_=None, rse_id=None, delay_secon
2731
2731
  replicas_alias,
2732
2732
  and_(models.RSEFileAssociation.scope == replicas_alias.scope,
2733
2733
  models.RSEFileAssociation.name == replicas_alias.name,
2734
- models.RSEFileAssociation.rse_id != replicas_alias.rse_id)
2734
+ models.RSEFileAssociation.rse_id != replicas_alias.rse_id,
2735
+ replicas_alias.state == ReplicaState.AVAILABLE)
2735
2736
  ).with_hint(
2736
2737
  models.Request, "INDEX(requests REQUESTS_SCOPE_NAME_RSE_IDX)", 'oracle'
2737
2738
  ).outerjoin(
@@ -2836,9 +2837,12 @@ def list_and_mark_unlocked_replicas_no_temp_table(limit, bytes_=None, rse_id=Non
2836
2837
  # Check if more than one replica is available
2837
2838
  replica_cnt = session.query(func.count(models.RSEFileAssociation.scope)).\
2838
2839
  with_hint(models.RSEFileAssociation, "index(REPLICAS REPLICAS_PK)", 'oracle').\
2839
- filter(and_(models.RSEFileAssociation.scope == scope, models.RSEFileAssociation.name == name, models.RSEFileAssociation.rse_id != rse_id)).one()
2840
+ filter(and_(models.RSEFileAssociation.scope == scope,
2841
+ models.RSEFileAssociation.name == name,
2842
+ models.RSEFileAssociation.rse_id != rse_id,
2843
+ models.RSEFileAssociation.state == ReplicaState.AVAILABLE)).one()
2840
2844
 
2841
- if replica_cnt[0] > 1:
2845
+ if replica_cnt[0] > 0:
2842
2846
  if tombstone != OBSOLETE and only_delete_obsolete:
2843
2847
  break
2844
2848
 
@@ -1629,7 +1629,6 @@ def list_transfer_limits(
1629
1629
  )
1630
1630
  for limit in session.execute(stmt).scalars():
1631
1631
  dict_resp = limit.to_dict()
1632
- dict_resp.pop('_sa_instance_state')
1633
1632
  yield dict_resp
1634
1633
 
1635
1634
 
@@ -47,7 +47,8 @@ from rucio.common.exception import (InvalidRSEExpression, InvalidReplicationRule
47
47
  ReplicationRuleCreationTemporaryFailed, InsufficientTargetRSEs, RucioException,
48
48
  InvalidRuleWeight, StagingAreaRuleRequiresLifetime, DuplicateRule,
49
49
  InvalidObject, RSEWriteBlocked, RuleReplaceFailed, RequestNotFound,
50
- ManualRuleApprovalBlocked, UnsupportedOperation, UndefinedPolicy, InvalidValueForKey)
50
+ ManualRuleApprovalBlocked, UnsupportedOperation, UndefinedPolicy, InvalidValueForKey,
51
+ InvalidSourceReplicaExpression)
51
52
  from rucio.common.schema import validate_schema
52
53
  from rucio.common.types import InternalScope, InternalAccount
53
54
  from rucio.common.utils import str_to_date, sizefmt, chunks
@@ -151,7 +152,10 @@ def add_rule(dids, account, copies, rse_expression, grouping, weight, lifetime,
151
152
  raise ManualRuleApprovalBlocked()
152
153
 
153
154
  if source_replica_expression:
154
- source_rses = parse_expression(source_replica_expression, filter_={'vo': vo}, session=session)
155
+ try:
156
+ source_rses = parse_expression(source_replica_expression, filter_={'vo': vo}, session=session)
157
+ except InvalidRSEExpression:
158
+ raise InvalidSourceReplicaExpression
155
159
  else:
156
160
  source_rses = []
157
161
 
@@ -400,15 +400,25 @@ def ensure_db_sources(
400
400
 
401
401
 
402
402
  @transactional_session
403
- def set_transfers_state(transfers, state, submitted_at, external_host, external_id, *, session: "Session", logger):
403
+ def set_transfers_state(
404
+ transfers,
405
+ state: "RequestState",
406
+ submitted_at: datetime.datetime,
407
+ external_host: str,
408
+ external_id: str,
409
+ transfertool: str,
410
+ *,
411
+ session: "Session",
412
+ logger
413
+ ):
404
414
  """
405
415
  Update the transfer info of a request.
406
416
  :param transfers: Dictionary containing request transfer info.
407
417
  :param session: Database session to use.
408
418
  """
409
419
 
410
- logger(logging.INFO, 'Setting state(%s), external_host(%s) and eid(%s) for transfers: %s',
411
- state.name, external_host, external_id, ', '.join(t.rws.request_id for t in transfers))
420
+ logger(logging.INFO, 'Setting state(%s), transfertool(%s), external_host(%s) and eid(%s) for transfers: %s',
421
+ state.name, transfertool, external_host, external_id, ', '.join(t.rws.request_id for t in transfers))
412
422
  try:
413
423
  for transfer in transfers:
414
424
  rws = transfer.rws
@@ -422,11 +432,12 @@ def set_transfers_state(transfers, state, submitted_at, external_host, external_
422
432
  synchronize_session=False
423
433
  ).values(
424
434
  {
425
- 'state': state,
426
- 'external_id': external_id,
427
- 'external_host': external_host,
428
- 'source_rse_id': transfer.src.rse.id,
429
- 'submitted_at': submitted_at,
435
+ models.Request.state: state,
436
+ models.Request.external_id: external_id,
437
+ models.Request.external_host: external_host,
438
+ models.Request.source_rse_id: transfer.src.rse.id,
439
+ models.Request.submitted_at: submitted_at,
440
+ models.Request.transfertool: transfertool,
430
441
  }
431
442
  )
432
443
  rowcount = session.execute(stmt).rowcount
@@ -493,8 +493,15 @@ def _submit_transfers(transfertool_obj, transfers, job_params, submitter='submit
493
493
 
494
494
  if state_to_set:
495
495
  try:
496
- transfer_core.set_transfers_state(transfers, state=state_to_set, external_host=transfertool_obj.external_host,
497
- external_id=eid, submitted_at=datetime.datetime.utcnow(), logger=logger)
496
+ transfer_core.set_transfers_state(
497
+ transfers,
498
+ state=state_to_set,
499
+ external_host=transfertool_obj.external_host,
500
+ external_id=eid,
501
+ submitted_at=datetime.datetime.utcnow(),
502
+ transfertool=transfertool_obj.external_name,
503
+ logger=logger
504
+ )
498
505
  except Exception:
499
506
  logger(logging.ERROR, 'Failed to register transfer state with error', exc_info=True)
500
507
  if eid is not None:
@@ -47,7 +47,7 @@ def stop():
47
47
  graceful_stop.set()
48
48
 
49
49
 
50
- def run(once=False, threads=1, sleep_time=10, bulk=100):
50
+ def run(once=False, threads=1, sleep_time=10, bulk=100, ignore_availability: bool = False):
51
51
  """
52
52
  Running the preparer daemon either once or by default in a loop until stop is called.
53
53
  """
@@ -58,7 +58,7 @@ def run(once=False, threads=1, sleep_time=10, bulk=100):
58
58
 
59
59
  def preparer_kwargs():
60
60
  # not sure if this is needed for threading.Thread, but it always returns a fresh dictionary
61
- return {'once': once, 'sleep_time': sleep_time, 'bulk': bulk}
61
+ return {'once': once, 'sleep_time': sleep_time, 'bulk': bulk, 'ignore_availability': ignore_availability}
62
62
 
63
63
  threads = [threading.Thread(target=preparer, name=f'conveyor-preparer-{i}', kwargs=preparer_kwargs(), daemon=True) for i in range(threads)]
64
64
  for thr in threads:
@@ -84,7 +84,7 @@ def run(once=False, threads=1, sleep_time=10, bulk=100):
84
84
  logging.info('conveyor-preparer: stopped')
85
85
 
86
86
 
87
- def preparer(once, sleep_time, bulk, partition_wait_time=10):
87
+ def preparer(once, sleep_time, bulk, ignore_availability: bool, partition_wait_time: int = 10):
88
88
  # Make an initial heartbeat so that all instanced daemons have the correct worker number on the next try
89
89
  logger_prefix = executable = 'conveyor-preparer'
90
90
  transfertools = config_get_list('conveyor', 'transfertool', False, None)
@@ -100,6 +100,7 @@ def preparer(once, sleep_time, bulk, partition_wait_time=10):
100
100
  run_once,
101
101
  transfertools=transfertools,
102
102
  bulk=bulk,
103
+ ignore_availability=ignore_availability,
103
104
  ),
104
105
  activities=None,
105
106
  )
@@ -110,6 +111,7 @@ def run_once(
110
111
  bulk: int = 100,
111
112
  heartbeat_handler: "Optional[HeartbeatHandler]" = None,
112
113
  session: "Optional[Session]" = None,
114
+ ignore_availability: bool = False,
113
115
  **kwargs
114
116
  ) -> bool:
115
117
  if heartbeat_handler:
@@ -124,14 +126,15 @@ def run_once(
124
126
  requests_handled = 0
125
127
  try:
126
128
  admin_accounts = list_transfer_admin_accounts()
127
- topology = Topology.create_from_config(logger=logger)
129
+ topology = Topology.create_from_config(logger=logger, ignore_availability=ignore_availability)
128
130
  requests_with_sources = list_transfer_requests_and_source_replicas(
129
131
  total_workers=total_workers,
130
132
  worker_number=worker_number,
131
133
  limit=bulk,
132
134
  request_state=RequestState.PREPARING,
133
135
  request_type=[RequestType.TRANSFER, RequestType.STAGEIN],
134
- session=session
136
+ session=session,
137
+ ignore_availability=ignore_availability
135
138
  )
136
139
  ret = build_transfer_paths(
137
140
  topology=topology,
@@ -436,14 +436,16 @@ class Default(protocol.RSEProtocol):
436
436
  :raises RucioException: if it failed to copy the file.
437
437
  """
438
438
  ctx = self.__ctx
439
+ if transfer_timeout:
440
+ ctx.set_opt_integer("HTTP PLUGIN", "OPERATION_TIMEOUT", transfer_timeout)
441
+ ctx.set_opt_integer("SRM PLUGIN", "OPERATION_TIMEOUT", transfer_timeout)
442
+ ctx.set_opt_integer("GRIDFTP PLUGIN", "OPERATION_TIMEOUT", transfer_timeout)
443
+ watchdog = Timer(int(transfer_timeout) + 60, self.__gfal2_cancel)
439
444
  params = ctx.transfer_parameters()
440
445
  if src_spacetoken:
441
446
  params.src_spacetoken = str(src_spacetoken)
442
447
  if dest_spacetoken:
443
448
  params.dst_spacetoken = str(dest_spacetoken)
444
- if transfer_timeout:
445
- params.timeout = int(transfer_timeout)
446
- watchdog = Timer(params.timeout + 60, self.__gfal2_cancel)
447
449
 
448
450
  if not (self.renaming and dest[:5] == 'https'):
449
451
  dir_name = os.path.dirname(dest)
@@ -458,6 +460,7 @@ class Default(protocol.RSEProtocol):
458
460
 
459
461
  try:
460
462
  if transfer_timeout:
463
+ params.timeout = int(transfer_timeout)
461
464
  watchdog.start()
462
465
  ret = ctx.filecopy(params, str(src), str(dest))
463
466
  if transfer_timeout:
@@ -13,6 +13,7 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
+ from collections import namedtuple
16
17
  import contextlib
17
18
  import itertools
18
19
  import json
@@ -226,3 +227,6 @@ def load_test_conf_file(file_name):
226
227
  config_dir = next(filter(lambda d: os.path.exists(os.path.join(d, file_name)), get_config_dirs()))
227
228
  with open(os.path.join(config_dir, file_name)) as f:
228
229
  return json.load(f)
230
+
231
+
232
+ RSE_namedtuple = namedtuple('RSE_namedtuple', ['name', 'id'])
@@ -12,7 +12,7 @@
12
12
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
-
15
+ import logging
16
16
  import threading
17
17
  import time
18
18
  from datetime import datetime, timedelta
@@ -41,7 +41,7 @@ from rucio.daemons.conveyor.preparer import preparer
41
41
  from rucio.daemons.conveyor.submitter import submitter
42
42
  from rucio.daemons.conveyor.stager import stager
43
43
  from rucio.daemons.conveyor.throttler import throttler
44
- from rucio.daemons.conveyor.receiver import receiver, graceful_stop as receiver_graceful_stop
44
+ from rucio.daemons.conveyor.receiver import receiver, graceful_stop as receiver_graceful_stop, Receiver
45
45
  from rucio.daemons.reaper.reaper import reaper
46
46
  from rucio.db.sqla import models
47
47
  from rucio.db.sqla.constants import LockState, RequestState, RequestType, ReplicaState, RSEType, RuleState
@@ -599,6 +599,75 @@ def test_multihop_receiver_on_success(vo, did_factory, root_account, core_config
599
599
  receiver_graceful_stop.clear()
600
600
 
601
601
 
602
+ @skip_rse_tests_with_accounts
603
+ @pytest.mark.dirty(reason="leaves files in XRD containers")
604
+ @pytest.mark.noparallel(reason="uses predefined RSEs; runs submitter and receiver")
605
+ @pytest.mark.parametrize("caches_mock", [{"caches_to_mock": [
606
+ 'rucio.core.rse.REGION',
607
+ 'rucio.core.rse_expression_parser.REGION',
608
+ 'rucio.core.config.REGION',
609
+ 'rucio.rse.rsemanager.RSE_REGION', # for RSE info
610
+ ]}], indirect=True)
611
+ def test_receiver_archiving(vo, did_factory, root_account, caches_mock):
612
+ """
613
+ Ensure that receiver doesn't mark archiving requests as DONE
614
+ """
615
+
616
+ src_rse = 'XRD3'
617
+ src_rse_id = rse_core.get_rse_id(rse=src_rse, vo=vo)
618
+ dst_rse = 'XRD4'
619
+ dst_rse_id = rse_core.get_rse_id(rse=dst_rse, vo=vo)
620
+ all_rses = [src_rse_id, dst_rse_id]
621
+
622
+ received_messages = {}
623
+
624
+ class ReceiverWrapper(Receiver):
625
+ """
626
+ Wrap receiver to record the last handled message for each given request_id
627
+ """
628
+ def _perform_request_update(self, msg, *, session=None, logger=logging.log):
629
+ ret = super()._perform_request_update(msg, session=session, logger=logger)
630
+ received_messages[msg['file_metadata']['request_id']] = msg
631
+ return ret
632
+
633
+ with patch('rucio.daemons.conveyor.receiver.Receiver', ReceiverWrapper):
634
+ receiver_thread = threading.Thread(target=receiver, kwargs={'id_': 0, 'full_mode': True, 'all_vos': True, 'total_threads': 1})
635
+ receiver_thread.start()
636
+ # Fake that destination RSE is a tape
637
+ rse_core.update_rse(rse_id=dst_rse_id, parameters={'rse_type': RSEType.TAPE})
638
+ try:
639
+ rse_core.add_rse_attribute(dst_rse_id, 'archive_timeout', 60)
640
+
641
+ did = did_factory.upload_test_file(src_rse)
642
+ rule_core.add_rule(dids=[did], account=root_account, copies=1, rse_expression=dst_rse, grouping='ALL', weight=None, lifetime=None, locked=False, subscription_id=None)
643
+ submitter(once=True, rses=[{'id': rse_id} for rse_id in all_rses], group_bulk=2, partition_wait_time=0, transfertype='single', filter_transfertool=None)
644
+
645
+ # Wait for the reception of the FTS Completion message for the submitted request
646
+ request = request_core.get_request_by_did(rse_id=dst_rse_id, **did)
647
+ for i in range(MAX_POLL_WAIT_SECONDS):
648
+ if request['id'] in received_messages:
649
+ break
650
+ if i == MAX_POLL_WAIT_SECONDS - 1:
651
+ assert False # Waited too long; fail the test
652
+ time.sleep(1)
653
+ assert __wait_for_fts_state(request, expected_state='ARCHIVING') == 'ARCHIVING'
654
+
655
+ # Receiver must not mark "ARCHIVING" requests as "DONE"
656
+ request = request_core.get_request_by_did(rse_id=dst_rse_id, **did)
657
+ assert request['state'] == RequestState.SUBMITTED
658
+ # Poller should also correctly handle "ARCHIVING" transfers and not mark them as DONE
659
+ poller(once=True, older_than=0, partition_wait_time=0)
660
+ request = request_core.get_request_by_did(rse_id=dst_rse_id, **did)
661
+ assert request['state'] == RequestState.SUBMITTED
662
+ finally:
663
+ rse_core.update_rse(rse_id=dst_rse_id, parameters={'rse_type': RSEType.DISK})
664
+ rse_core.del_rse_attribute(dst_rse_id, 'archive_timeout')
665
+
666
+ receiver_graceful_stop.set()
667
+ receiver_thread.join(timeout=5)
668
+ receiver_graceful_stop.clear()
669
+
670
+
602
671
  @skip_rse_tests_with_accounts
603
672
  @pytest.mark.noparallel(reason="runs multiple conveyor daemons")
604
673
  @pytest.mark.parametrize("file_config_mock", [{
@@ -640,7 +709,7 @@ def test_preparer_throttler_submitter(rse_factory, did_factory, root_account, fi
640
709
  submitter(once=True, rses=[{'id': rse_id} for rse_id in all_rses], group_bulk=2, partition_wait_time=0, transfertype='single', filter_transfertool=None)
641
710
 
642
711
  # One RSE has limits set: the requests will be moved to WAITING status; the other RSE has no limits: go directly to queued
643
- preparer(once=True, sleep_time=1, bulk=100, partition_wait_time=0)
712
+ preparer(once=True, sleep_time=1, bulk=100, partition_wait_time=0, ignore_availability=False)
644
713
  request = request_core.get_request_by_did(rse_id=dst_rse_id1, **did1)
645
714
  assert request['state'] == RequestState.WAITING
646
715
  request = request_core.get_request_by_did(rse_id=dst_rse_id1, **did2)
@@ -1480,3 +1549,40 @@ def test_checksum_validation(rse_factory, did_factory, root_account):
1480
1549
  request = __wait_for_request_state(dst_rse_id=dst_rse3_id, state=RequestState.FAILED, **did)
1481
1550
  assert 'Source and destination checksums do not match' in request['err_msg']
1482
1551
  assert request['state'] == RequestState.FAILED
1552
+
1553
+
1554
+ @pytest.mark.noparallel(reason="runs multiple conveyor daemons")
1555
+ @pytest.mark.parametrize("file_config_mock", [{
1556
+ "overrides": [('conveyor', 'use_preparer', 'true')]
1557
+ }], indirect=True)
1558
+ @pytest.mark.parametrize("caches_mock", [{"caches_to_mock": [
1559
+ 'rucio.core.topology.REGION',
1560
+ ]}], indirect=True)
1561
+ def test_preparer_ignore_availability(rse_factory, did_factory, root_account, file_config_mock, caches_mock):
1562
+ """
1563
+ Integration test of the preparer/throttler workflow.
1564
+ """
1565
+
1566
+ def __setup_test():
1567
+ src_rse, src_rse_id = rse_factory.make_posix_rse()
1568
+ dst_rse, dst_rse_id = rse_factory.make_posix_rse()
1569
+
1570
+ distance_core.add_distance(src_rse_id, dst_rse_id, distance=10)
1571
+ for rse_id in [src_rse_id, dst_rse_id]:
1572
+ rse_core.add_rse_attribute(rse_id, 'fts', TEST_FTS_HOST)
1573
+ did = did_factory.upload_test_file(src_rse)
1574
+ rule_core.add_rule(dids=[did], account=root_account, copies=1, rse_expression=dst_rse, grouping='ALL', weight=None, lifetime=None, locked=False, subscription_id=None)
1575
+
1576
+ rse_core.update_rse(src_rse_id, {'availability_read': False})
1577
+
1578
+ return src_rse_id, dst_rse_id, did
1579
+
1580
+ src_rse_id, dst_rse_id, did = __setup_test()
1581
+ preparer(once=True, sleep_time=1, bulk=100, partition_wait_time=0, ignore_availability=False)
1582
+ request = request_core.get_request_by_did(rse_id=dst_rse_id, **did)
1583
+ assert request['state'] == RequestState.NO_SOURCES
1584
+
1585
+ src_rse_id, dst_rse_id, did = __setup_test()
1586
+ preparer(once=True, sleep_time=1, bulk=100, partition_wait_time=0, ignore_availability=True)
1587
+ request = request_core.get_request_by_did(rse_id=dst_rse_id, **did)
1588
+ assert request['state'] == RequestState.QUEUED
@@ -209,7 +209,12 @@ def test_multihop_sources_created(rse_factory, did_factory, root_account, core_c
209
209
  'rucio.daemons.reaper.reaper.REGION',
210
210
  'rucio.core.rse_expression_parser.REGION', # The list of multihop RSEs is retrieved by an expression
211
211
  ]}], indirect=True)
212
- def test_source_avoid_deletion(caches_mock, core_config_mock, rse_factory, did_factory, root_account):
212
+ @pytest.mark.parametrize("file_config_mock", [
213
+ # Run test twice: with, and without, temp tables
214
+ {"overrides": [('core', 'use_temp_tables', 'True')]},
215
+ {"overrides": [('core', 'use_temp_tables', 'False')]},
216
+ ], indirect=True)
217
+ def test_source_avoid_deletion(caches_mock, core_config_mock, rse_factory, did_factory, root_account, file_config_mock):
213
218
  """ Test that sources on a file block it from deletion """
214
219
 
215
220
  _, reaper_region, _ = caches_mock
@@ -299,6 +304,7 @@ def test_ignore_availability(rse_factory, did_factory, root_account, core_config
299
304
  submitter(once=True, rses=[{'id': rse_id} for rse_id in (src_rse_id, dst_rse_id)], partition_wait_time=None, transfertools=['mock'], transfertype='single', ignore_availability=True)
300
305
  request = request_core.get_request_by_did(rse_id=dst_rse_id, **did)
301
306
  assert request['state'] == RequestState.SUBMITTED
307
+ assert request['transfertool'] == 'mock'
302
308
 
303
309
 
304
310
  @pytest.mark.noparallel(reason="multiple submitters cannot be run in parallel due to partial job assignment by hash")
@@ -374,8 +380,10 @@ def test_globus(rse_factory, did_factory, root_account):
374
380
  assert job_did2['metadata']['name'] == did2['name']
375
381
  request = request_core.get_request_by_did(rse_id=rse2_id, **did1)
376
382
  assert request['state'] == RequestState.SUBMITTED
383
+ assert request['transfertool'] == 'globus'
377
384
  request = request_core.get_request_by_did(rse_id=rse4_id, **did2)
378
385
  assert request['state'] == RequestState.SUBMITTED
386
+ assert request['transfertool'] == 'globus'
379
387
 
380
388
 
381
389
  @pytest.mark.noparallel(reason="multiple submitters cannot be run in parallel due to partial job assignment by hash")