rucio 1.30.6__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.6 → rucio-1.30.7}/PKG-INFO +1 -1
  2. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-preparer +2 -1
  3. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/rule.py +3 -0
  4. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/replica.py +7 -3
  5. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/preparer.py +8 -5
  6. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/gfal.py +6 -3
  7. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/common.py +4 -0
  8. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_conveyor.py +109 -3
  9. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_conveyor_submitter.py +6 -1
  10. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_judge_evaluator.py +145 -2
  11. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_xrootd.py +3 -0
  12. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/transfertool/fts3.py +1 -1
  13. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/vcsversion.py +3 -3
  14. {rucio-1.30.6 → rucio-1.30.7}/AUTHORS.rst +0 -0
  15. {rucio-1.30.6 → rucio-1.30.7}/ChangeLog +0 -0
  16. {rucio-1.30.6 → rucio-1.30.7}/LICENSE +0 -0
  17. {rucio-1.30.6 → rucio-1.30.7}/MANIFEST.in +0 -0
  18. {rucio-1.30.6 → rucio-1.30.7}/README.rst +0 -0
  19. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio +0 -0
  20. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-abacus-account +0 -0
  21. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-abacus-collection-replica +0 -0
  22. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-abacus-rse +0 -0
  23. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-admin +0 -0
  24. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-atropos +0 -0
  25. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-auditor +0 -0
  26. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-automatix +0 -0
  27. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-bb8 +0 -0
  28. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-c3po +0 -0
  29. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-cache-client +0 -0
  30. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-cache-consumer +0 -0
  31. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-finisher +0 -0
  32. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-poller +0 -0
  33. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-receiver +0 -0
  34. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-stager +0 -0
  35. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-submitter +0 -0
  36. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-throttler +0 -0
  37. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-dark-reaper +0 -0
  38. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-dumper +0 -0
  39. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-follower +0 -0
  40. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-hermes +0 -0
  41. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-hermes2 +0 -0
  42. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-judge-cleaner +0 -0
  43. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-judge-evaluator +0 -0
  44. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-judge-injector +0 -0
  45. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-judge-repairer +0 -0
  46. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-kronos +0 -0
  47. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-light-reaper +0 -0
  48. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-minos +0 -0
  49. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-minos-temporary-expiration +0 -0
  50. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-necromancer +0 -0
  51. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-oauth-manager +0 -0
  52. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-reaper +0 -0
  53. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-replica-recoverer +0 -0
  54. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-storage-consistency-actions +0 -0
  55. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-transmogrifier +0 -0
  56. {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-undertaker +0 -0
  57. {rucio-1.30.6 → rucio-1.30.7}/etc/alembic.ini.template +0 -0
  58. {rucio-1.30.6 → rucio-1.30.7}/etc/alembic_offline.ini.template +0 -0
  59. {rucio-1.30.6 → rucio-1.30.7}/etc/globus-config.yml.template +0 -0
  60. {rucio-1.30.6 → rucio-1.30.7}/etc/ldap.cfg.template +0 -0
  61. {rucio-1.30.6 → rucio-1.30.7}/etc/mail_templates/rule_approval_request.tmpl +0 -0
  62. {rucio-1.30.6 → rucio-1.30.7}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  63. {rucio-1.30.6 → rucio-1.30.7}/etc/mail_templates/rule_approved_user.tmpl +0 -0
  64. {rucio-1.30.6 → rucio-1.30.7}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  65. {rucio-1.30.6 → rucio-1.30.7}/etc/mail_templates/rule_denied_user.tmpl +0 -0
  66. {rucio-1.30.6 → rucio-1.30.7}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  67. {rucio-1.30.6 → rucio-1.30.7}/etc/rse-accounts.cfg.template +0 -0
  68. {rucio-1.30.6 → rucio-1.30.7}/etc/rucio.cfg.atlas.client.template +0 -0
  69. {rucio-1.30.6 → rucio-1.30.7}/etc/rucio.cfg.template +0 -0
  70. {rucio-1.30.6 → rucio-1.30.7}/etc/rucio_multi_vo.cfg.template +0 -0
  71. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/__init__.py +0 -0
  72. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/alembicrevision.py +0 -0
  73. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/__init__.py +0 -0
  74. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/account.py +0 -0
  75. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/account_limit.py +0 -0
  76. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/authentication.py +0 -0
  77. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/config.py +0 -0
  78. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/credential.py +0 -0
  79. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/did.py +0 -0
  80. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/dirac.py +0 -0
  81. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/exporter.py +0 -0
  82. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/heartbeat.py +0 -0
  83. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/identity.py +0 -0
  84. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/importer.py +0 -0
  85. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/lifetime_exception.py +0 -0
  86. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/lock.py +0 -0
  87. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/meta.py +0 -0
  88. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/permission.py +0 -0
  89. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/quarantined_replica.py +0 -0
  90. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/replica.py +0 -0
  91. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/request.py +0 -0
  92. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/rse.py +0 -0
  93. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/scope.py +0 -0
  94. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/subscription.py +0 -0
  95. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/temporary_did.py +0 -0
  96. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/vo.py +0 -0
  97. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/__init__.py +0 -0
  98. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/accountclient.py +0 -0
  99. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/accountlimitclient.py +0 -0
  100. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/baseclient.py +0 -0
  101. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/client.py +0 -0
  102. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/configclient.py +0 -0
  103. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/credentialclient.py +0 -0
  104. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/didclient.py +0 -0
  105. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/diracclient.py +0 -0
  106. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/downloadclient.py +0 -0
  107. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/exportclient.py +0 -0
  108. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/fileclient.py +0 -0
  109. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/importclient.py +0 -0
  110. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/lifetimeclient.py +0 -0
  111. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/lockclient.py +0 -0
  112. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/metaclient.py +0 -0
  113. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/pingclient.py +0 -0
  114. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/replicaclient.py +0 -0
  115. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/requestclient.py +0 -0
  116. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/rseclient.py +0 -0
  117. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/ruleclient.py +0 -0
  118. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/scopeclient.py +0 -0
  119. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/subscriptionclient.py +0 -0
  120. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/touchclient.py +0 -0
  121. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/uploadclient.py +0 -0
  122. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/__init__.py +0 -0
  123. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/cache.py +0 -0
  124. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/config.py +0 -0
  125. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/constants.py +0 -0
  126. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/constraints.py +0 -0
  127. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/didtype.py +0 -0
  128. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/dumper/__init__.py +0 -0
  129. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/dumper/consistency.py +0 -0
  130. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/dumper/data_models.py +0 -0
  131. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/dumper/path_parsing.py +0 -0
  132. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/exception.py +0 -0
  133. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/extra.py +0 -0
  134. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/logging.py +0 -0
  135. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/pcache.py +0 -0
  136. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/policy.py +0 -0
  137. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/__init__.py +0 -0
  138. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/atlas.py +0 -0
  139. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/belleii.py +0 -0
  140. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/cms.py +0 -0
  141. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/domatpc.py +0 -0
  142. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/escape.py +0 -0
  143. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/generic.py +0 -0
  144. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  145. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/icecube.py +0 -0
  146. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/lsst.py +0 -0
  147. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/stomp_utils.py +0 -0
  148. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/stopwatch.py +0 -0
  149. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/test_rucio_server.py +0 -0
  150. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/types.py +0 -0
  151. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/utils.py +0 -0
  152. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/__init__.py +0 -0
  153. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/account.py +0 -0
  154. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/account_counter.py +0 -0
  155. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/account_limit.py +0 -0
  156. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/authentication.py +0 -0
  157. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/config.py +0 -0
  158. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/credential.py +0 -0
  159. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did.py +0 -0
  160. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/__init__.py +0 -0
  161. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/did_column_meta.py +0 -0
  162. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
  163. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
  164. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
  165. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
  166. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
  167. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/dirac.py +0 -0
  168. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/distance.py +0 -0
  169. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/exporter.py +0 -0
  170. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/heartbeat.py +0 -0
  171. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/identity.py +0 -0
  172. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/importer.py +0 -0
  173. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/lifetime_exception.py +0 -0
  174. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/lock.py +0 -0
  175. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/message.py +0 -0
  176. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/meta.py +0 -0
  177. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/monitor.py +0 -0
  178. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/naming_convention.py +0 -0
  179. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/nongrid_trace.py +0 -0
  180. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/oidc.py +0 -0
  181. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/__init__.py +0 -0
  182. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/atlas.py +0 -0
  183. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/belleii.py +0 -0
  184. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/cms.py +0 -0
  185. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/escape.py +0 -0
  186. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/generic.py +0 -0
  187. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
  188. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/quarantined_replica.py +0 -0
  189. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/replica_sorter.py +0 -0
  190. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/request.py +0 -0
  191. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/rse.py +0 -0
  192. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/rse_counter.py +0 -0
  193. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/rse_expression_parser.py +0 -0
  194. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/rse_selector.py +0 -0
  195. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/rule.py +0 -0
  196. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/rule_grouping.py +0 -0
  197. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/scope.py +0 -0
  198. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/subscription.py +0 -0
  199. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/temporary_did.py +0 -0
  200. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/topology.py +0 -0
  201. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/trace.py +0 -0
  202. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/transfer.py +0 -0
  203. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/vo.py +0 -0
  204. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/volatile_replica.py +0 -0
  205. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/__init__.py +0 -0
  206. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/abacus/__init__.py +0 -0
  207. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/abacus/account.py +0 -0
  208. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
  209. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/abacus/rse.py +0 -0
  210. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/atropos/__init__.py +0 -0
  211. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/atropos/atropos.py +0 -0
  212. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/auditor/__init__.py +0 -0
  213. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/auditor/hdfs.py +0 -0
  214. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
  215. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/automatix/__init__.py +0 -0
  216. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/automatix/automatix.py +0 -0
  217. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
  218. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/badreplicas/minos.py +0 -0
  219. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
  220. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
  221. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/bb8/__init__.py +0 -0
  222. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/bb8/bb8.py +0 -0
  223. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/bb8/common.py +0 -0
  224. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
  225. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
  226. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/__init__.py +0 -0
  227. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/__init__.py +0 -0
  228. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/simple.py +0 -0
  229. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/t2_free_space.py +0 -0
  230. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +0 -0
  231. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +0 -0
  232. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/c3po.py +0 -0
  233. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/__init__.py +0 -0
  234. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/agis.py +0 -0
  235. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/free_space.py +0 -0
  236. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/jedi_did.py +0 -0
  237. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/mock_did.py +0 -0
  238. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/network_metrics.py +0 -0
  239. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/workload.py +0 -0
  240. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/__init__.py +0 -0
  241. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/dataset_cache.py +0 -0
  242. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/expiring_dataset_cache.py +0 -0
  243. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/expiring_list.py +0 -0
  244. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/popularity.py +0 -0
  245. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/timeseries.py +0 -0
  246. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/cache/__init__.py +0 -0
  247. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/cache/consumer.py +0 -0
  248. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/common.py +0 -0
  249. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/__init__.py +0 -0
  250. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/common.py +0 -0
  251. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/finisher.py +0 -0
  252. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/poller.py +0 -0
  253. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/receiver.py +0 -0
  254. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/stager.py +0 -0
  255. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/submitter.py +0 -0
  256. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/throttler.py +0 -0
  257. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/follower/__init__.py +0 -0
  258. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/follower/follower.py +0 -0
  259. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/hermes/__init__.py +0 -0
  260. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/hermes/hermes.py +0 -0
  261. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/hermes/hermes2.py +0 -0
  262. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/judge/__init__.py +0 -0
  263. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/judge/cleaner.py +0 -0
  264. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/judge/evaluator.py +0 -0
  265. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/judge/injector.py +0 -0
  266. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/judge/repairer.py +0 -0
  267. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
  268. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
  269. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/reaper/__init__.py +0 -0
  270. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
  271. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/reaper/light_reaper.py +0 -0
  272. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/reaper/reaper.py +0 -0
  273. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
  274. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +0 -0
  275. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/storage/__init__.py +0 -0
  276. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
  277. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
  278. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/tracer/__init__.py +0 -0
  279. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/tracer/kronos.py +0 -0
  280. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
  281. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
  282. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/undertaker/__init__.py +0 -0
  283. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
  284. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/__init__.py +0 -0
  285. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/__init__.py +0 -0
  286. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/constants.py +0 -0
  287. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
  288. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
  289. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
  290. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
  291. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
  292. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
  293. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
  294. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
  295. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
  296. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
  297. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
  298. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
  299. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
  300. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
  301. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
  302. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
  303. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
  304. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
  305. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
  306. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
  307. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
  308. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
  309. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
  310. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
  311. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
  312. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
  313. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
  314. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
  315. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
  316. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
  317. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
  318. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
  319. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
  320. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
  321. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
  322. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
  323. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
  324. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
  325. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
  326. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
  327. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
  328. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
  329. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
  330. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
  331. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
  332. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
  333. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
  334. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
  335. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
  336. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
  337. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
  338. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
  339. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
  340. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
  341. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
  342. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
  343. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
  344. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
  345. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
  346. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
  347. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
  348. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
  349. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
  350. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
  351. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
  352. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
  353. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
  354. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
  355. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
  356. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
  357. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
  358. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
  359. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
  360. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
  361. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
  362. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
  363. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
  364. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
  365. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
  366. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
  367. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
  368. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
  369. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
  370. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
  371. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
  372. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
  373. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
  374. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
  375. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
  376. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
  377. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
  378. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
  379. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
  380. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
  381. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
  382. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
  383. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
  384. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
  385. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
  386. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
  387. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
  388. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
  389. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
  390. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
  391. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
  392. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
  393. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
  394. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
  395. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
  396. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
  397. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
  398. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
  399. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
  400. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
  401. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
  402. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
  403. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
  404. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
  405. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
  406. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
  407. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
  408. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
  409. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/models.py +0 -0
  410. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/sautils.py +0 -0
  411. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/session.py +0 -0
  412. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/types.py +0 -0
  413. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/util.py +0 -0
  414. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/__init__.py +0 -0
  415. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/__init__.py +0 -0
  416. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/cache.py +0 -0
  417. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/dummy.py +0 -0
  418. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/globus.py +0 -0
  419. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/gsiftp.py +0 -0
  420. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/http_cache.py +0 -0
  421. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/mock.py +0 -0
  422. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/ngarc.py +0 -0
  423. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/posix.py +0 -0
  424. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/protocol.py +0 -0
  425. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/rclone.py +0 -0
  426. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/rfio.py +0 -0
  427. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/srm.py +0 -0
  428. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/ssh.py +0 -0
  429. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/storm.py +0 -0
  430. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/webdav.py +0 -0
  431. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/xrootd.py +0 -0
  432. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/rsemanager.py +0 -0
  433. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/__init__.py +0 -0
  434. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/common_server.py +0 -0
  435. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/conftest.py +0 -0
  436. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/inputs/__init__.py +0 -0
  437. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/lfn2pfn_module_test.py +0 -0
  438. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/mocks/__init__.py +0 -0
  439. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/mocks/gfal2.py +0 -0
  440. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/rsemgr_api_test.py +0 -0
  441. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/ruciopytest/__init__.py +0 -0
  442. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/ruciopytest/plugin.py +0 -0
  443. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/ruciopytest/rucioxdist.py +0 -0
  444. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/temp_factories.py +0 -0
  445. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_abacus_account.py +0 -0
  446. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_abacus_collection_replica.py +0 -0
  447. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_abacus_rse.py +0 -0
  448. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_account.py +0 -0
  449. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_account_limits.py +0 -0
  450. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_api_external_representation.py +0 -0
  451. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_archive.py +0 -0
  452. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_auditor.py +0 -0
  453. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_auditor_hdfs.py +0 -0
  454. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_auditor_srmdumps.py +0 -0
  455. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_authentication.py +0 -0
  456. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_automatix.py +0 -0
  457. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_bad_replica.py +0 -0
  458. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_bb8.py +0 -0
  459. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_belleii.py +0 -0
  460. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_bin_rucio.py +0 -0
  461. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_boolean.py +0 -0
  462. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_clients.py +0 -0
  463. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_common_types.py +0 -0
  464. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_config.py +0 -0
  465. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_counter.py +0 -0
  466. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_credential.py +0 -0
  467. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_curl.py +0 -0
  468. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_daemons.py +0 -0
  469. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_dataset_replicas.py +0 -0
  470. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_db.py +0 -0
  471. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_did.py +0 -0
  472. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_did_meta_plugins.py +0 -0
  473. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_didtype.py +0 -0
  474. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_download.py +0 -0
  475. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_dumper.py +0 -0
  476. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_dumper_consistency.py +0 -0
  477. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_dumper_data_model.py +0 -0
  478. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_dumper_path_parsing.py +0 -0
  479. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_filter_engine.py +0 -0
  480. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_heartbeat.py +0 -0
  481. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_hermes.py +0 -0
  482. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_identity.py +0 -0
  483. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_impl_upload_download.py +0 -0
  484. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_import_export.py +0 -0
  485. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_judge_cleaner.py +0 -0
  486. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_judge_injector.py +0 -0
  487. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_judge_repairer.py +0 -0
  488. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_lifetime.py +0 -0
  489. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_message.py +0 -0
  490. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_meta.py +0 -0
  491. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_meta_did.py +0 -0
  492. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_module_import.py +0 -0
  493. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_monitor.py +0 -0
  494. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_multi_vo.py +0 -0
  495. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_naming_convention.py +0 -0
  496. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_oauthmanager.py +0 -0
  497. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_oidc.py +0 -0
  498. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_permission.py +0 -0
  499. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_pfns.py +0 -0
  500. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_ping.py +0 -0
  501. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_preparer.py +0 -0
  502. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_qos.py +0 -0
  503. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_quarantined_replica.py +0 -0
  504. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_reaper.py +0 -0
  505. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_redirect.py +0 -0
  506. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_replica.py +0 -0
  507. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_replica_recoverer.py +0 -0
  508. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_replica_sorting.py +0 -0
  509. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_request.py +0 -0
  510. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_root_proxy.py +0 -0
  511. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse.py +0 -0
  512. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_expression_parser.py +0 -0
  513. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_lfn2path.py +0 -0
  514. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_gfal2.py +0 -0
  515. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_posix.py +0 -0
  516. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_rclone.py +0 -0
  517. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_rsync.py +0 -0
  518. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_srm.py +0 -0
  519. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_ssh.py +0 -0
  520. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_webdav.py +0 -0
  521. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_selector.py +0 -0
  522. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rucio_server.py +0 -0
  523. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rule.py +0 -0
  524. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_schema_cms.py +0 -0
  525. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_scope.py +0 -0
  526. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_subscription.py +0 -0
  527. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_temporary_did.py +0 -0
  528. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_throttler.py +0 -0
  529. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_tpc.py +0 -0
  530. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_trace.py +0 -0
  531. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_transfer.py +0 -0
  532. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_undertaker.py +0 -0
  533. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_upload.py +0 -0
  534. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_utils.py +0 -0
  535. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/transfertool/__init__.py +0 -0
  536. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/transfertool/globus.py +0 -0
  537. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/transfertool/globus_library.py +0 -0
  538. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/transfertool/mock.py +0 -0
  539. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/transfertool/transfertool.py +0 -0
  540. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/version.py +0 -0
  541. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/__init__.py +0 -0
  542. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/__init__.py +0 -0
  543. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
  544. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
  545. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
  546. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
  547. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
  548. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
  549. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
  550. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/common.py +0 -0
  551. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
  552. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
  553. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
  554. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
  555. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
  556. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
  557. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
  558. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
  559. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
  560. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
  561. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
  562. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/meta.py +0 -0
  563. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
  564. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
  565. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
  566. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
  567. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/replicas.py +0 -0
  568. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
  569. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
  570. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
  571. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
  572. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
  573. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
  574. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
  575. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/tmp_dids.py +0 -0
  576. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
  577. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
  578. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/main.py +0 -0
  579. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/metrics.py +0 -0
  580. {rucio-1.30.6 → rucio-1.30.7}/lib/rucio.egg-info/SOURCES.txt +0 -0
  581. {rucio-1.30.6 → rucio-1.30.7}/pylintrc +0 -0
  582. {rucio-1.30.6 → rucio-1.30.7}/pyproject.toml +0 -0
  583. {rucio-1.30.6 → rucio-1.30.7}/requirements.txt +0 -0
  584. {rucio-1.30.6 → rucio-1.30.7}/setup.cfg +0 -0
  585. {rucio-1.30.6 → rucio-1.30.7}/setup.py +0 -0
  586. {rucio-1.30.6 → rucio-1.30.7}/setuputil.py +0 -0
  587. {rucio-1.30.6 → rucio-1.30.7}/tools/bootstrap.py +0 -0
  588. {rucio-1.30.6 → rucio-1.30.7}/tools/merge_rucio_configs.py +0 -0
  589. {rucio-1.30.6 → 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.6
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,
@@ -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
 
@@ -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
@@ -21,17 +21,23 @@ from rucio.common.utils import generate_uuid as uuid
21
21
  from rucio.core.account import get_usage
22
22
  from rucio.core.account_limit import set_local_account_limit
23
23
  from rucio.core.did import add_did, attach_dids, detach_dids
24
- from rucio.core.lock import get_replica_locks, get_dataset_locks
24
+ from rucio.core.lock import get_dataset_locks, get_replica_locks, get_replica_locks_for_rule_id
25
+ from rucio.core.replica import add_replica
25
26
  from rucio.core.rse import add_rse_attribute
26
27
  from rucio.core.rule import add_rule, get_rule
27
28
  from rucio.daemons.abacus.account import account_update
28
29
  from rucio.daemons.judge.evaluator import re_evaluator
29
- from rucio.db.sqla.constants import DIDType
30
+ from rucio.db.sqla.constants import DIDType, LockState
30
31
  from rucio.db.sqla.models import UpdatedDID
31
32
  from rucio.db.sqla.session import transactional_session
33
+ from rucio.tests.common import RSE_namedtuple
32
34
  from rucio.tests.common_server import get_vo
33
35
  from rucio.tests.test_rule import create_files, tag_generator
34
36
 
37
+ from typing import TYPE_CHECKING
38
+ if TYPE_CHECKING:
39
+ from rucio.tests.temp_factories import TemporaryDidFactory, TemporaryRSEFactory
40
+
35
41
 
36
42
  @pytest.fixture(scope="class")
37
43
  def setup_class(request, rse_factory_unittest):
@@ -372,3 +378,140 @@ class TestJudgeEvaluator:
372
378
  # Check if the Locks are created properly
373
379
  for file in more_files:
374
380
  assert len(get_replica_locks(scope=file['scope'], name=file['name'])) == 2
381
+
382
+
383
+ def test_judge_double_rule_on_container(
384
+ did_factory: "TemporaryDidFactory",
385
+ rse_factory: "TemporaryRSEFactory",
386
+ root_account: "InternalAccount"
387
+ ):
388
+ """
389
+ JUDGE EVALUATOR:
390
+ Test the judge evaluator on a container with two rules. The order in which
391
+ rules and datasets are added is relevant to the testcase.
392
+
393
+ 1. A container C is created and a first dataset D1 is added to C.
394
+ 2. A first rule A is created on the container C.
395
+ 3. Then another dataset D2 is added to the container C.
396
+ 4. Then a rule B is created on the container C.
397
+ 5. Run judge-evaluator.
398
+
399
+ NOTE I am unsure whether the judge-evaluator is expected to run here.
400
+
401
+ We assert that both rules must be in state OK. Both rules must be applied to
402
+ each DID that can be traced back to the parent container C.
403
+ """
404
+ # create RSE, setup
405
+ RSE = RSE_namedtuple(*rse_factory.make_mock_rse())
406
+ rsekey, rseval = tag_generator(), tag_generator()
407
+ add_rse_attribute(RSE.id, rsekey, rseval)
408
+
409
+ # 1. create container C, add dataset D1 (with file F1)
410
+ C = did_factory.make_container()
411
+ D1 = did_factory.make_dataset()
412
+ attach_dids(dids=[D1], account=root_account, **C)
413
+ F1 = did_factory.random_file_did()
414
+ add_replica(rse_id=RSE.id, account=root_account, bytes_=10, **F1)
415
+ attach_dids(dids=[F1], account=root_account, **D1)
416
+
417
+ # 2. Add rule A to container C
418
+ # > bind C to RSE using RSE name
419
+ A, = add_rule(
420
+ dids=[C],
421
+ account=root_account,
422
+ copies=1,
423
+ rse_expression=RSE.name,
424
+ grouping="DATASET",
425
+ weight=None,
426
+ lifetime=None,
427
+ locked=False,
428
+ subscription_id=None
429
+ )
430
+
431
+ # 3. Add dataset D2 to container C (with file F2)
432
+ D2 = did_factory.make_dataset()
433
+ attach_dids(dids=[D2], account=root_account, **C)
434
+ F2 = did_factory.random_file_did()
435
+ add_replica(rse_id=RSE.id, account=root_account, bytes_=10, **F2)
436
+ attach_dids(dids=[F2], account=root_account, **D2)
437
+
438
+ # 4. Add rule B to container C
439
+ # > bind C to RSE using RSE attribute
440
+ B, = add_rule(
441
+ dids=[C],
442
+ account=root_account,
443
+ copies=1,
444
+ rse_expression=f"{rsekey}={rseval}",
445
+ grouping="DATASET",
446
+ weight=None,
447
+ lifetime=None,
448
+ locked=False,
449
+ subscription_id=None
450
+ )
451
+
452
+ # 5. Run fake judge-evaluator
453
+ re_evaluator(once=True, did_limit=1000)
454
+
455
+ # Assertions
456
+ for ruleid in (A, B):
457
+ locks = get_replica_locks_for_rule_id(ruleid)
458
+ assert len(locks) == 2 # 2 locks
459
+ assert all([lock["state"] == LockState.OK for lock in locks]) # all OK
460
+
461
+
462
+ def test_judge_double_container_with_existing_rule(
463
+ did_factory: "TemporaryDidFactory",
464
+ rse_factory: "TemporaryRSEFactory",
465
+ root_account: "InternalAccount"
466
+ ):
467
+ """
468
+ JUDGE EVALUATOR:
469
+ Test the judge in attaching to a file structure with two nested
470
+ containers. The root container has a rule.
471
+ """
472
+ RSE = RSE_namedtuple(*rse_factory.make_mock_rse())
473
+
474
+ # create container C1 with rule
475
+ C1 = did_factory.make_container()
476
+
477
+ add_rule(
478
+ dids=[C1],
479
+ account=root_account,
480
+ copies=1,
481
+ rse_expression=RSE.name,
482
+ grouping='DATASET',
483
+ weight=None,
484
+ lifetime=None,
485
+ locked=False,
486
+ subscription_id=None
487
+ )
488
+
489
+ # create setup: C2->D->F
490
+ C2 = did_factory.make_container()
491
+ D = did_factory.make_dataset()
492
+ F = did_factory.random_file_did()
493
+ add_replica(rse_id=RSE.id, account=root_account, bytes_=10, **F)
494
+
495
+ attach_dids(dids=[F], account=root_account, **D)
496
+ attach_dids(dids=[D], account=root_account, **C2)
497
+
498
+ # attach setup to C1 (result: C1->C2->D->F)
499
+ attach_dids(dids=[C2], account=root_account, **C1)
500
+
501
+ # fake judge
502
+ re_evaluator(once=True, did_limit=1000)
503
+
504
+ # assertions
505
+ replicalocks = get_replica_locks(**F)
506
+ assert len(replicalocks) == 1
507
+ assert replicalocks[0].state == LockState.OK
508
+ datasetlocks = list(get_dataset_locks(**D))
509
+ assert len(datasetlocks) == 1
510
+ assert datasetlocks[0]["state"] == LockState.OK
511
+
512
+ # detach again
513
+ detach_dids(dids=[C2], **C1)
514
+ re_evaluator(once=True, did_limit=1000)
515
+
516
+ assert not get_replica_locks(**F)
517
+ assert not get_replica_locks(**D)
@@ -95,3 +95,6 @@ class TestRseXROOTD(MgrTestCases):
95
95
  def setup_obj(self, setup_rse_and_files, vo):
96
96
  rse_settings, tmpdir, user = setup_rse_and_files
97
97
  self.init(tmpdir=tmpdir, rse_settings=rse_settings, user=user, vo=vo)
98
+
99
+ def test_delete_mgr_ok_dir(self):
100
+ raise pytest.skip("Not implemented")
@@ -583,7 +583,7 @@ class FTS3CompletionMessageTransferStatusReport(Fts3TransferStatusReport):
583
583
  reason = fts_message.get('t__error_message', None)
584
584
  # job_state = fts_message.get('t_final_transfer_state', None)
585
585
  new_state = None
586
- if str(fts_message['t_final_transfer_state']) == FTS_COMPLETE_STATE.OK: # pylint:disable=no-member
586
+ if str(fts_message['t_final_transfer_state']) == FTS_COMPLETE_STATE.OK and not fts_message.get('is_archiving'): # pylint:disable=no-member
587
587
  new_state = RequestState.DONE
588
588
  elif str(fts_message['t_final_transfer_state']) == FTS_COMPLETE_STATE.ERROR:
589
589
  request = self.request(session)
@@ -4,8 +4,8 @@ This file is automatically generated; Do not edit it. :)
4
4
  '''
5
5
  VERSION_INFO = {
6
6
  'final': True,
7
- 'version': '1.30.6',
7
+ 'version': '1.30.7',
8
8
  'branch_nick': 'release-1.30',
9
- 'revision_id': '82390181cf8dc300ec59afeb569ad0be93819e7f',
10
- 'revno': 12373
9
+ 'revision_id': '93f5033cba845ef8ec0c0d52a014ffad79cf337c',
10
+ 'revno': 12384
11
11
  }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes