rucio 33.5.0__tar.gz → 33.6.1__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 (588) hide show
  1. {rucio-33.5.0 → rucio-33.6.1}/PKG-INFO +1 -1
  2. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-replica-recoverer +2 -2
  3. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/quarantined_replica.py +7 -6
  4. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/replica.py +7 -2
  5. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/volatile_replica.py +6 -8
  6. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/auditor/__init__.py +1 -1
  7. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +151 -75
  8. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/transfertool/fts3.py +1 -1
  9. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/vcsversion.py +3 -3
  10. {rucio-33.5.0 → rucio-33.6.1}/setuputil.py +2 -1
  11. {rucio-33.5.0 → rucio-33.6.1}/tests/test_replica_recoverer.py +92 -42
  12. {rucio-33.5.0 → rucio-33.6.1}/AUTHORS.rst +0 -0
  13. {rucio-33.5.0 → rucio-33.6.1}/ChangeLog +0 -0
  14. {rucio-33.5.0 → rucio-33.6.1}/LICENSE +0 -0
  15. {rucio-33.5.0 → rucio-33.6.1}/MANIFEST.in +0 -0
  16. {rucio-33.5.0 → rucio-33.6.1}/README.rst +0 -0
  17. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio +0 -0
  18. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-abacus-account +0 -0
  19. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-abacus-collection-replica +0 -0
  20. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-abacus-rse +0 -0
  21. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-admin +0 -0
  22. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-atropos +0 -0
  23. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-auditor +0 -0
  24. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-automatix +0 -0
  25. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-bb8 +0 -0
  26. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-c3po +0 -0
  27. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-cache-client +0 -0
  28. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-cache-consumer +0 -0
  29. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-finisher +0 -0
  30. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-poller +0 -0
  31. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-preparer +0 -0
  32. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-receiver +0 -0
  33. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-stager +0 -0
  34. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-submitter +0 -0
  35. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-throttler +0 -0
  36. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-dark-reaper +0 -0
  37. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-dumper +0 -0
  38. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-follower +0 -0
  39. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-hermes +0 -0
  40. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-judge-cleaner +0 -0
  41. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-judge-evaluator +0 -0
  42. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-judge-injector +0 -0
  43. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-judge-repairer +0 -0
  44. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-kronos +0 -0
  45. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-minos +0 -0
  46. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-minos-temporary-expiration +0 -0
  47. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-necromancer +0 -0
  48. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-oauth-manager +0 -0
  49. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-reaper +0 -0
  50. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-rse-decommissioner +0 -0
  51. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-storage-consistency-actions +0 -0
  52. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-transmogrifier +0 -0
  53. {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-undertaker +0 -0
  54. {rucio-33.5.0 → rucio-33.6.1}/etc/alembic.ini.template +0 -0
  55. {rucio-33.5.0 → rucio-33.6.1}/etc/alembic_offline.ini.template +0 -0
  56. {rucio-33.5.0 → rucio-33.6.1}/etc/globus-config.yml.template +0 -0
  57. {rucio-33.5.0 → rucio-33.6.1}/etc/ldap.cfg.template +0 -0
  58. {rucio-33.5.0 → rucio-33.6.1}/etc/mail_templates/rule_approval_request.tmpl +0 -0
  59. {rucio-33.5.0 → rucio-33.6.1}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  60. {rucio-33.5.0 → rucio-33.6.1}/etc/mail_templates/rule_approved_user.tmpl +0 -0
  61. {rucio-33.5.0 → rucio-33.6.1}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  62. {rucio-33.5.0 → rucio-33.6.1}/etc/mail_templates/rule_denied_user.tmpl +0 -0
  63. {rucio-33.5.0 → rucio-33.6.1}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  64. {rucio-33.5.0 → rucio-33.6.1}/etc/rse-accounts.cfg.template +0 -0
  65. {rucio-33.5.0 → rucio-33.6.1}/etc/rucio.cfg.atlas.client.template +0 -0
  66. {rucio-33.5.0 → rucio-33.6.1}/etc/rucio.cfg.template +0 -0
  67. {rucio-33.5.0 → rucio-33.6.1}/etc/rucio_multi_vo.cfg.template +0 -0
  68. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/__init__.py +0 -0
  69. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/alembicrevision.py +0 -0
  70. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/__init__.py +0 -0
  71. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/account.py +0 -0
  72. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/account_limit.py +0 -0
  73. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/authentication.py +0 -0
  74. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/config.py +0 -0
  75. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/credential.py +0 -0
  76. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/did.py +0 -0
  77. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/dirac.py +0 -0
  78. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/exporter.py +0 -0
  79. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/heartbeat.py +0 -0
  80. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/identity.py +0 -0
  81. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/importer.py +0 -0
  82. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/lifetime_exception.py +0 -0
  83. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/lock.py +0 -0
  84. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/meta.py +0 -0
  85. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/permission.py +0 -0
  86. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/quarantined_replica.py +0 -0
  87. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/replica.py +0 -0
  88. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/request.py +0 -0
  89. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/rse.py +0 -0
  90. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/rule.py +0 -0
  91. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/scope.py +0 -0
  92. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/subscription.py +0 -0
  93. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/vo.py +0 -0
  94. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/__init__.py +0 -0
  95. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/accountclient.py +0 -0
  96. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/accountlimitclient.py +0 -0
  97. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/baseclient.py +0 -0
  98. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/client.py +0 -0
  99. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/configclient.py +0 -0
  100. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/credentialclient.py +0 -0
  101. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/didclient.py +0 -0
  102. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/diracclient.py +0 -0
  103. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/downloadclient.py +0 -0
  104. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/exportclient.py +0 -0
  105. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/fileclient.py +0 -0
  106. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/importclient.py +0 -0
  107. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/lifetimeclient.py +0 -0
  108. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/lockclient.py +0 -0
  109. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/metaclient.py +0 -0
  110. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/pingclient.py +0 -0
  111. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/replicaclient.py +0 -0
  112. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/requestclient.py +0 -0
  113. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/rseclient.py +0 -0
  114. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/ruleclient.py +0 -0
  115. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/scopeclient.py +0 -0
  116. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/subscriptionclient.py +0 -0
  117. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/touchclient.py +0 -0
  118. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/uploadclient.py +0 -0
  119. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/__init__.py +0 -0
  120. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/cache.py +0 -0
  121. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/config.py +0 -0
  122. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/constants.py +0 -0
  123. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/constraints.py +0 -0
  124. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/didtype.py +0 -0
  125. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/dumper/__init__.py +0 -0
  126. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/dumper/consistency.py +0 -0
  127. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/dumper/data_models.py +0 -0
  128. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/dumper/path_parsing.py +0 -0
  129. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/exception.py +0 -0
  130. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/extra.py +0 -0
  131. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/logging.py +0 -0
  132. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/pcache.py +0 -0
  133. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/policy.py +0 -0
  134. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/__init__.py +0 -0
  135. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/atlas.py +0 -0
  136. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/belleii.py +0 -0
  137. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/cms.py +0 -0
  138. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/domatpc.py +0 -0
  139. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/escape.py +0 -0
  140. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/generic.py +0 -0
  141. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  142. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/icecube.py +0 -0
  143. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/lsst.py +0 -0
  144. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/stomp_utils.py +0 -0
  145. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/stopwatch.py +0 -0
  146. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/test_rucio_server.py +0 -0
  147. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/types.py +0 -0
  148. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/utils.py +0 -0
  149. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/__init__.py +0 -0
  150. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/account.py +0 -0
  151. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/account_counter.py +0 -0
  152. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/account_limit.py +0 -0
  153. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/authentication.py +0 -0
  154. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/config.py +0 -0
  155. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/credential.py +0 -0
  156. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did.py +0 -0
  157. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/__init__.py +0 -0
  158. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/did_column_meta.py +0 -0
  159. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
  160. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
  161. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
  162. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
  163. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
  164. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/dirac.py +0 -0
  165. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/distance.py +0 -0
  166. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/exporter.py +0 -0
  167. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/heartbeat.py +0 -0
  168. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/identity.py +0 -0
  169. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/importer.py +0 -0
  170. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/lifetime_exception.py +0 -0
  171. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/lock.py +0 -0
  172. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/message.py +0 -0
  173. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/meta.py +0 -0
  174. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/monitor.py +0 -0
  175. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/naming_convention.py +0 -0
  176. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/nongrid_trace.py +0 -0
  177. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/oidc.py +0 -0
  178. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/__init__.py +0 -0
  179. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/atlas.py +0 -0
  180. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/belleii.py +0 -0
  181. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/cms.py +0 -0
  182. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/escape.py +0 -0
  183. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/generic.py +0 -0
  184. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
  185. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/plugins.py +0 -0
  186. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/replica_sorter.py +0 -0
  187. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/request.py +0 -0
  188. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/rse.py +0 -0
  189. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/rse_counter.py +0 -0
  190. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/rse_expression_parser.py +0 -0
  191. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/rse_selector.py +0 -0
  192. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/rule.py +0 -0
  193. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/rule_grouping.py +0 -0
  194. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/scope.py +0 -0
  195. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/subscription.py +0 -0
  196. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/topology.py +0 -0
  197. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/trace.py +0 -0
  198. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/transfer.py +0 -0
  199. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/vo.py +0 -0
  200. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/__init__.py +0 -0
  201. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/abacus/__init__.py +0 -0
  202. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/abacus/account.py +0 -0
  203. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
  204. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/abacus/rse.py +0 -0
  205. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/atropos/__init__.py +0 -0
  206. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/atropos/atropos.py +0 -0
  207. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/auditor/hdfs.py +0 -0
  208. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
  209. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/automatix/__init__.py +0 -0
  210. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/automatix/automatix.py +0 -0
  211. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
  212. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/badreplicas/minos.py +0 -0
  213. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
  214. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
  215. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/bb8/__init__.py +0 -0
  216. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/bb8/bb8.py +0 -0
  217. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/bb8/common.py +0 -0
  218. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
  219. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
  220. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/__init__.py +0 -0
  221. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/algorithms/__init__.py +0 -0
  222. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/algorithms/simple.py +0 -0
  223. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/algorithms/t2_free_space.py +0 -0
  224. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +0 -0
  225. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +0 -0
  226. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/c3po.py +0 -0
  227. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/__init__.py +0 -0
  228. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/agis.py +0 -0
  229. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/free_space.py +0 -0
  230. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/jedi_did.py +0 -0
  231. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/mock_did.py +0 -0
  232. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/network_metrics.py +0 -0
  233. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/workload.py +0 -0
  234. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/utils/__init__.py +0 -0
  235. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/utils/dataset_cache.py +0 -0
  236. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/utils/expiring_dataset_cache.py +0 -0
  237. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/utils/expiring_list.py +0 -0
  238. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/utils/popularity.py +0 -0
  239. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/utils/timeseries.py +0 -0
  240. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/cache/__init__.py +0 -0
  241. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/cache/consumer.py +0 -0
  242. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/common.py +0 -0
  243. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/__init__.py +0 -0
  244. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/common.py +0 -0
  245. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/finisher.py +0 -0
  246. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/poller.py +0 -0
  247. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/preparer.py +0 -0
  248. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/receiver.py +0 -0
  249. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/stager.py +0 -0
  250. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/submitter.py +0 -0
  251. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/throttler.py +0 -0
  252. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/follower/__init__.py +0 -0
  253. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/follower/follower.py +0 -0
  254. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/hermes/__init__.py +0 -0
  255. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/hermes/hermes.py +0 -0
  256. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/judge/__init__.py +0 -0
  257. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/judge/cleaner.py +0 -0
  258. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/judge/evaluator.py +0 -0
  259. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/judge/injector.py +0 -0
  260. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/judge/repairer.py +0 -0
  261. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
  262. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
  263. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/reaper/__init__.py +0 -0
  264. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
  265. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/reaper/reaper.py +0 -0
  266. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
  267. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/__init__.py +0 -0
  268. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/config.py +0 -0
  269. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/profiles/__init__.py +0 -0
  270. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/profiles/atlas.py +0 -0
  271. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/profiles/generic.py +0 -0
  272. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/profiles/types.py +0 -0
  273. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/rse_decommissioner.py +0 -0
  274. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/storage/__init__.py +0 -0
  275. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
  276. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
  277. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/tracer/__init__.py +0 -0
  278. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/tracer/kronos.py +0 -0
  279. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
  280. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
  281. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/undertaker/__init__.py +0 -0
  282. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
  283. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/__init__.py +0 -0
  284. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/__init__.py +0 -0
  285. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/constants.py +0 -0
  286. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
  287. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
  288. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
  289. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
  290. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
  291. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
  292. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
  293. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
  294. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
  295. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
  296. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
  297. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
  298. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
  299. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
  300. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
  301. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
  302. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
  303. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
  304. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
  305. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
  306. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
  307. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
  308. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
  309. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
  310. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
  311. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
  312. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
  313. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
  314. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
  315. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -0
  316. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
  317. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -0
  318. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
  319. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
  320. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
  321. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
  322. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
  323. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
  324. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
  325. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
  326. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
  327. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
  328. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
  329. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
  330. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
  331. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
  332. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
  333. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
  334. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
  335. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
  336. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
  337. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
  338. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
  339. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
  340. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
  341. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
  342. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
  343. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
  344. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
  345. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
  346. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
  347. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
  348. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
  349. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
  350. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
  351. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
  352. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
  353. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +0 -0
  354. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
  355. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
  356. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
  357. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
  358. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
  359. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
  360. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
  361. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
  362. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
  363. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
  364. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
  365. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
  366. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
  367. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
  368. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
  369. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
  370. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
  371. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
  372. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
  373. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
  374. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
  375. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
  376. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
  377. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
  378. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
  379. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +0 -0
  380. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
  381. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
  382. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
  383. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
  384. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -0
  385. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
  386. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
  387. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
  388. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
  389. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
  390. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
  391. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
  392. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
  393. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
  394. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
  395. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
  396. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
  397. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
  398. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
  399. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
  400. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
  401. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
  402. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
  403. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
  404. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
  405. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
  406. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
  407. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
  408. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
  409. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
  410. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
  411. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -0
  412. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
  413. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
  414. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/models.py +0 -0
  415. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/sautils.py +0 -0
  416. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/session.py +0 -0
  417. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/types.py +0 -0
  418. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/util.py +0 -0
  419. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/__init__.py +0 -0
  420. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/__init__.py +0 -0
  421. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/cache.py +0 -0
  422. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/dummy.py +0 -0
  423. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/gfal.py +0 -0
  424. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/globus.py +0 -0
  425. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/gsiftp.py +0 -0
  426. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/http_cache.py +0 -0
  427. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/mock.py +0 -0
  428. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/ngarc.py +0 -0
  429. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/posix.py +0 -0
  430. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/protocol.py +0 -0
  431. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/rclone.py +0 -0
  432. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/rfio.py +0 -0
  433. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/srm.py +0 -0
  434. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/ssh.py +0 -0
  435. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/storm.py +0 -0
  436. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/webdav.py +0 -0
  437. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/xrootd.py +0 -0
  438. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/rsemanager.py +0 -0
  439. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/tests/__init__.py +0 -0
  440. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/tests/common.py +0 -0
  441. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/tests/common_server.py +0 -0
  442. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/transfertool/__init__.py +0 -0
  443. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/transfertool/globus.py +0 -0
  444. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/transfertool/globus_library.py +0 -0
  445. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/transfertool/mock.py +0 -0
  446. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/transfertool/transfertool.py +0 -0
  447. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/version.py +0 -0
  448. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/__init__.py +0 -0
  449. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/__init__.py +0 -0
  450. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
  451. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
  452. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
  453. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
  454. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
  455. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
  456. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
  457. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/common.py +0 -0
  458. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
  459. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
  460. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
  461. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
  462. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
  463. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
  464. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
  465. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
  466. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
  467. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
  468. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
  469. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/meta.py +0 -0
  470. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
  471. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
  472. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
  473. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
  474. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/replicas.py +0 -0
  475. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
  476. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
  477. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
  478. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
  479. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
  480. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
  481. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
  482. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
  483. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
  484. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/main.py +0 -0
  485. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/metrics.py +0 -0
  486. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/ping.py +0 -0
  487. {rucio-33.5.0 → rucio-33.6.1}/lib/rucio.egg-info/SOURCES.txt +0 -0
  488. {rucio-33.5.0 → rucio-33.6.1}/pylintrc +0 -0
  489. {rucio-33.5.0 → rucio-33.6.1}/pyproject.toml +0 -0
  490. {rucio-33.5.0 → rucio-33.6.1}/requirements.txt +0 -0
  491. {rucio-33.5.0 → rucio-33.6.1}/setup.cfg +0 -0
  492. {rucio-33.5.0 → rucio-33.6.1}/setup.py +0 -0
  493. {rucio-33.5.0 → rucio-33.6.1}/tests/test_abacus_account.py +0 -0
  494. {rucio-33.5.0 → rucio-33.6.1}/tests/test_abacus_collection_replica.py +0 -0
  495. {rucio-33.5.0 → rucio-33.6.1}/tests/test_abacus_rse.py +0 -0
  496. {rucio-33.5.0 → rucio-33.6.1}/tests/test_account.py +0 -0
  497. {rucio-33.5.0 → rucio-33.6.1}/tests/test_account_limits.py +0 -0
  498. {rucio-33.5.0 → rucio-33.6.1}/tests/test_api_external_representation.py +0 -0
  499. {rucio-33.5.0 → rucio-33.6.1}/tests/test_archive.py +0 -0
  500. {rucio-33.5.0 → rucio-33.6.1}/tests/test_auditor.py +0 -0
  501. {rucio-33.5.0 → rucio-33.6.1}/tests/test_auditor_hdfs.py +0 -0
  502. {rucio-33.5.0 → rucio-33.6.1}/tests/test_auditor_srmdumps.py +0 -0
  503. {rucio-33.5.0 → rucio-33.6.1}/tests/test_authentication.py +0 -0
  504. {rucio-33.5.0 → rucio-33.6.1}/tests/test_automatix.py +0 -0
  505. {rucio-33.5.0 → rucio-33.6.1}/tests/test_bad_replica.py +0 -0
  506. {rucio-33.5.0 → rucio-33.6.1}/tests/test_bb8.py +0 -0
  507. {rucio-33.5.0 → rucio-33.6.1}/tests/test_belleii.py +0 -0
  508. {rucio-33.5.0 → rucio-33.6.1}/tests/test_bin_rucio.py +0 -0
  509. {rucio-33.5.0 → rucio-33.6.1}/tests/test_boolean.py +0 -0
  510. {rucio-33.5.0 → rucio-33.6.1}/tests/test_clients.py +0 -0
  511. {rucio-33.5.0 → rucio-33.6.1}/tests/test_common_types.py +0 -0
  512. {rucio-33.5.0 → rucio-33.6.1}/tests/test_config.py +0 -0
  513. {rucio-33.5.0 → rucio-33.6.1}/tests/test_conveyor.py +0 -0
  514. {rucio-33.5.0 → rucio-33.6.1}/tests/test_conveyor_submitter.py +0 -0
  515. {rucio-33.5.0 → rucio-33.6.1}/tests/test_counter.py +0 -0
  516. {rucio-33.5.0 → rucio-33.6.1}/tests/test_credential.py +0 -0
  517. {rucio-33.5.0 → rucio-33.6.1}/tests/test_curl.py +0 -0
  518. {rucio-33.5.0 → rucio-33.6.1}/tests/test_daemons.py +0 -0
  519. {rucio-33.5.0 → rucio-33.6.1}/tests/test_dataset_replicas.py +0 -0
  520. {rucio-33.5.0 → rucio-33.6.1}/tests/test_db.py +0 -0
  521. {rucio-33.5.0 → rucio-33.6.1}/tests/test_did.py +0 -0
  522. {rucio-33.5.0 → rucio-33.6.1}/tests/test_did_meta_plugins.py +0 -0
  523. {rucio-33.5.0 → rucio-33.6.1}/tests/test_didtype.py +0 -0
  524. {rucio-33.5.0 → rucio-33.6.1}/tests/test_download.py +0 -0
  525. {rucio-33.5.0 → rucio-33.6.1}/tests/test_dumper.py +0 -0
  526. {rucio-33.5.0 → rucio-33.6.1}/tests/test_dumper_consistency.py +0 -0
  527. {rucio-33.5.0 → rucio-33.6.1}/tests/test_dumper_data_model.py +0 -0
  528. {rucio-33.5.0 → rucio-33.6.1}/tests/test_dumper_path_parsing.py +0 -0
  529. {rucio-33.5.0 → rucio-33.6.1}/tests/test_filter_engine.py +0 -0
  530. {rucio-33.5.0 → rucio-33.6.1}/tests/test_heartbeat.py +0 -0
  531. {rucio-33.5.0 → rucio-33.6.1}/tests/test_hermes.py +0 -0
  532. {rucio-33.5.0 → rucio-33.6.1}/tests/test_identity.py +0 -0
  533. {rucio-33.5.0 → rucio-33.6.1}/tests/test_impl_upload_download.py +0 -0
  534. {rucio-33.5.0 → rucio-33.6.1}/tests/test_import_export.py +0 -0
  535. {rucio-33.5.0 → rucio-33.6.1}/tests/test_judge_cleaner.py +0 -0
  536. {rucio-33.5.0 → rucio-33.6.1}/tests/test_judge_evaluator.py +0 -0
  537. {rucio-33.5.0 → rucio-33.6.1}/tests/test_judge_injector.py +0 -0
  538. {rucio-33.5.0 → rucio-33.6.1}/tests/test_judge_repairer.py +0 -0
  539. {rucio-33.5.0 → rucio-33.6.1}/tests/test_lifetime.py +0 -0
  540. {rucio-33.5.0 → rucio-33.6.1}/tests/test_message.py +0 -0
  541. {rucio-33.5.0 → rucio-33.6.1}/tests/test_meta.py +0 -0
  542. {rucio-33.5.0 → rucio-33.6.1}/tests/test_meta_did.py +0 -0
  543. {rucio-33.5.0 → rucio-33.6.1}/tests/test_module_import.py +0 -0
  544. {rucio-33.5.0 → rucio-33.6.1}/tests/test_monitor.py +0 -0
  545. {rucio-33.5.0 → rucio-33.6.1}/tests/test_multi_vo.py +0 -0
  546. {rucio-33.5.0 → rucio-33.6.1}/tests/test_naming_convention.py +0 -0
  547. {rucio-33.5.0 → rucio-33.6.1}/tests/test_oauthmanager.py +0 -0
  548. {rucio-33.5.0 → rucio-33.6.1}/tests/test_oidc.py +0 -0
  549. {rucio-33.5.0 → rucio-33.6.1}/tests/test_permission.py +0 -0
  550. {rucio-33.5.0 → rucio-33.6.1}/tests/test_pfns.py +0 -0
  551. {rucio-33.5.0 → rucio-33.6.1}/tests/test_ping.py +0 -0
  552. {rucio-33.5.0 → rucio-33.6.1}/tests/test_preparer.py +0 -0
  553. {rucio-33.5.0 → rucio-33.6.1}/tests/test_qos.py +0 -0
  554. {rucio-33.5.0 → rucio-33.6.1}/tests/test_quarantined_replica.py +0 -0
  555. {rucio-33.5.0 → rucio-33.6.1}/tests/test_reaper.py +0 -0
  556. {rucio-33.5.0 → rucio-33.6.1}/tests/test_redirect.py +0 -0
  557. {rucio-33.5.0 → rucio-33.6.1}/tests/test_replica.py +0 -0
  558. {rucio-33.5.0 → rucio-33.6.1}/tests/test_replica_sorting.py +0 -0
  559. {rucio-33.5.0 → rucio-33.6.1}/tests/test_request.py +0 -0
  560. {rucio-33.5.0 → rucio-33.6.1}/tests/test_root_proxy.py +0 -0
  561. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse.py +0 -0
  562. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_expression_parser.py +0 -0
  563. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_lfn2path.py +0 -0
  564. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_gfal2.py +0 -0
  565. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_gfal2_impl.py +0 -0
  566. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_posix.py +0 -0
  567. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_rclone.py +0 -0
  568. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_rsync.py +0 -0
  569. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_srm.py +0 -0
  570. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_ssh.py +0 -0
  571. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_webdav.py +0 -0
  572. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_xrootd.py +0 -0
  573. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_selector.py +0 -0
  574. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rucio_server.py +0 -0
  575. {rucio-33.5.0 → rucio-33.6.1}/tests/test_rule.py +0 -0
  576. {rucio-33.5.0 → rucio-33.6.1}/tests/test_schema_cms.py +0 -0
  577. {rucio-33.5.0 → rucio-33.6.1}/tests/test_scope.py +0 -0
  578. {rucio-33.5.0 → rucio-33.6.1}/tests/test_subscription.py +0 -0
  579. {rucio-33.5.0 → rucio-33.6.1}/tests/test_throttler.py +0 -0
  580. {rucio-33.5.0 → rucio-33.6.1}/tests/test_tpc.py +0 -0
  581. {rucio-33.5.0 → rucio-33.6.1}/tests/test_trace.py +0 -0
  582. {rucio-33.5.0 → rucio-33.6.1}/tests/test_transfer.py +0 -0
  583. {rucio-33.5.0 → rucio-33.6.1}/tests/test_undertaker.py +0 -0
  584. {rucio-33.5.0 → rucio-33.6.1}/tests/test_upload.py +0 -0
  585. {rucio-33.5.0 → rucio-33.6.1}/tests/test_utils.py +0 -0
  586. {rucio-33.5.0 → rucio-33.6.1}/tools/bootstrap.py +0 -0
  587. {rucio-33.5.0 → rucio-33.6.1}/tools/merge_rucio_configs.py +0 -0
  588. {rucio-33.5.0 → rucio-33.6.1}/tools/reset_database.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rucio
3
- Version: 33.5.0
3
+ Version: 33.6.1
4
4
  Summary: Rucio Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -228,8 +228,8 @@ Note that attempting the use the ``--vos`` argument when in single-VO mode will
228
228
  $ rucio-replica-recoverer --run-once --vos abc xyz
229
229
  2020-07-28 15:21:33,349 5488 WARNING Ignoring argument vos, this is only applicable in a multi-VO setup.
230
230
  ''', formatter_class=argparse.RawDescriptionHelpFormatter) # NOQA: E501
231
- parser.add_argument("--nattempts", action="store", default=10, help='Minimum count of suspicious file replica appearance in bad_replicas table. Default value is 10.')
232
- parser.add_argument("--younger-than", action="store", default=3, help='Consider all file replicas logged in bad_replicas table since speicified number of younger-than days. Default value is 3.')
231
+ parser.add_argument("--nattempts", action="store", default=5, help='Minimum count of suspicious file replica appearance in bad_replicas table. Default value is 5.')
232
+ parser.add_argument("--younger-than", action="store", default=5, help='Consider all file replicas logged in bad_replicas table since speicified number of younger-than days. Default value is 5.')
233
233
  parser.add_argument('--vos', nargs='+', type=str, help='Optional list of VOs to consider. Only used in multi-VO mode.')
234
234
  parser.add_argument("--run-once", action="store_true", default=False, help='One iteration only.')
235
235
  parser.add_argument("--limit-suspicious-files-on-rse", action="store", default=5, help='Maximum number of suspicious replicas on an RSE before that RSE is considered problematic and the suspicious replicas on that RSE are declared "TEMPORARY_UNAVAILABLE". Default value is 5.')
@@ -13,8 +13,9 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
+ from collections.abc import Iterable
16
17
  import datetime
17
- from typing import TYPE_CHECKING
18
+ from typing import TYPE_CHECKING, Any, Optional
18
19
 
19
20
  from sqlalchemy import and_, or_
20
21
  from sqlalchemy.sql.expression import false, insert
@@ -28,7 +29,7 @@ if TYPE_CHECKING:
28
29
 
29
30
 
30
31
  @transactional_session
31
- def add_quarantined_replicas(rse_id, replicas, *, session: "Session"):
32
+ def add_quarantined_replicas(rse_id: str, replicas: list[dict[str, Any]], *, session: "Session") -> None:
32
33
  """
33
34
  Bulk add quarantined file replicas.
34
35
 
@@ -77,12 +78,12 @@ def add_quarantined_replicas(rse_id, replicas, *, session: "Session"):
77
78
 
78
79
 
79
80
  @transactional_session
80
- def delete_quarantined_replicas(rse_id, replicas, *, session: "Session"):
81
+ def delete_quarantined_replicas(rse_id: str, replicas: Iterable[dict[str, Any]], *, session: "Session") -> None:
81
82
  """
82
83
  Delete file replicas.
83
84
 
84
85
  :param rse_id: the rse id.
85
- :param replicas: A list of dicts with the replica information.
86
+ :param replicas: An iterable of dicts with the replica information.
86
87
  :param session: The database session in use.
87
88
  """
88
89
 
@@ -108,7 +109,7 @@ def delete_quarantined_replicas(rse_id, replicas, *, session: "Session"):
108
109
 
109
110
 
110
111
  @read_session
111
- def list_quarantined_replicas(rse_id, limit, worker_number=None, total_workers=None, *, session: "Session"):
112
+ def list_quarantined_replicas(rse_id: str, limit: int, worker_number: Optional[int] = None, total_workers: Optional[int] = None, *, session: "Session") -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
112
113
  """
113
114
  List RSE Quarantined File replicas.
114
115
 
@@ -171,7 +172,7 @@ def list_quarantined_replicas(rse_id, limit, worker_number=None, total_workers=N
171
172
 
172
173
 
173
174
  @read_session
174
- def list_rses_with_quarantined_replicas(filters=None, *, session: "Session"):
175
+ def list_rses_with_quarantined_replicas(filters: Optional[dict[str, Any]] = None, *, session: "Session") -> list[str]:
175
176
  """
176
177
  List RSEs in the Quarantined Queues.
177
178
 
@@ -3427,7 +3427,7 @@ def get_replicas_state(scope=None, name=None, *, session: "Session"):
3427
3427
 
3428
3428
 
3429
3429
  @read_session
3430
- def get_suspicious_files(rse_expression, available_elsewhere, filter_=None, logger=logging.log, younger_than=10, nattempts=0, nattempts_exact=False, *, session: "Session", exclude_states=['B', 'R', 'D'], is_suspicious=False):
3430
+ def get_suspicious_files(rse_expression, available_elsewhere, filter_=None, logger=logging.log, younger_than=5, nattempts=0, nattempts_exact=False, *, session: "Session", exclude_states=['B', 'R', 'D'], is_suspicious=False):
3431
3431
  """
3432
3432
  Gets a list of replicas from bad_replicas table which are: declared more than <nattempts> times since <younger_than> date,
3433
3433
  present on the RSE specified by the <rse_expression> and do not have a state in <exclude_states> list.
@@ -3560,7 +3560,12 @@ def get_suspicious_reason(rse_id, scope, name, nattempts=0, logger=logging.log,
3560
3560
  query = session.query(bad_replicas_alias.scope, bad_replicas_alias.name, bad_replicas_alias.reason, bad_replicas_alias.rse_id)\
3561
3561
  .filter(bad_replicas_alias.rse_id == rse_id,
3562
3562
  bad_replicas_alias.scope == scope,
3563
- bad_replicas_alias.name == name)
3563
+ bad_replicas_alias.name == name,
3564
+ bad_replicas_alias.state == 'S',
3565
+ ~exists(select(1).where(and_(bad_replicas_alias.rse_id == rse_id,
3566
+ bad_replicas_alias.scope == scope,
3567
+ bad_replicas_alias.name == name,
3568
+ bad_replicas_alias.state != 'S',))))
3564
3569
  count = query.count()
3565
3570
 
3566
3571
  query_result = query.group_by(bad_replicas_alias.rse_id, bad_replicas_alias.scope, bad_replicas_alias.name, bad_replicas_alias.reason).having(func.count() > nattempts).all()
@@ -13,9 +13,9 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
-
16
+ from collections.abc import Iterable
17
17
  from datetime import datetime
18
- from typing import TYPE_CHECKING
18
+ from typing import TYPE_CHECKING, Any
19
19
 
20
20
  from sqlalchemy import and_, or_, exists, update, insert
21
21
  from sqlalchemy.orm.exc import NoResultFound
@@ -32,14 +32,13 @@ if TYPE_CHECKING:
32
32
 
33
33
 
34
34
  @transactional_session
35
- def add_volatile_replicas(rse_id, replicas, *, session: "Session"):
35
+ def add_volatile_replicas(rse_id: str, replicas: Iterable[dict[str, Any]], *, session: "Session") -> None:
36
36
  """
37
37
  Bulk add volatile replicas.
38
38
 
39
39
  :param rse_id: the rse id.
40
- :param replicas: the list of volatile replicas.
40
+ :param replicas: the iterable of volatile replicas.
41
41
  :param session: The database session in use.
42
- :returns: True is successful.
43
42
  """
44
43
  # first check that the rse is a volatile one
45
44
  try:
@@ -95,14 +94,13 @@ def add_volatile_replicas(rse_id, replicas, *, session: "Session"):
95
94
 
96
95
 
97
96
  @transactional_session
98
- def delete_volatile_replicas(rse_id, replicas, *, session: "Session"):
97
+ def delete_volatile_replicas(rse_id: str, replicas: Iterable[dict[str, Any]], *, session: "Session") -> None:
99
98
  """
100
99
  Bulk delete volatile replicas.
101
100
 
102
101
  :param rse_id: the rse id.
103
- :param replicas: the list of volatile replicas.
102
+ :param replicas: the iterable of volatile replicas.
104
103
  :param session: The database session in use.
105
- :returns: True is successful.
106
104
  """
107
105
  # first check that the rse is a volatile one
108
106
  try:
@@ -155,7 +155,7 @@ def process_output(output, sanity_check=True, compress=True):
155
155
  rse = os.path.basename(output[:output.rfind('_')])
156
156
  rse_id = get_rse_id(rse=rse)
157
157
  usage = get_rse_usage(rse_id=rse_id, source='rucio')[0]
158
- threshold = config.config_get_float('auditor', 'threshold', False, 0.2)
158
+ threshold = config.config_get_float('auditor', 'threshold', False, 0.1)
159
159
 
160
160
  # Perform a basic sanity check by comparing the number of entries
161
161
  # with the total number of files on the RSE. If the percentage is
@@ -56,7 +56,32 @@ GRACEFUL_STOP = threading.Event()
56
56
  DAEMON_NAME = 'suspicious-replica-recoverer'
57
57
 
58
58
 
59
- def declare_suspicious_replicas_bad(once: bool = False, younger_than: int = 3, nattempts: int = 10, vos: Optional[list[str]] = None, limit_suspicious_files_on_rse: int = 5, json_file_name: str = "/opt/rucio/etc/suspicious_replica_recoverer.json", sleep_time: int = 3600, active_mode: bool = False) -> None:
59
+ def check_suspicious_policy(policy: dict[str, str], file_metadata_datatype: str, file_metadata_scope: str) -> str:
60
+ match_scope = False
61
+ match_datatype = False
62
+ action = ""
63
+
64
+ if not policy.get("scope", []):
65
+ match_scope = True
66
+ for scope in policy.get("scope", []):
67
+ if re.match(scope, file_metadata_scope):
68
+ match_scope = True
69
+ break
70
+
71
+ if not policy.get("datatype", []):
72
+ match_datatype = True
73
+ for datatype in policy.get("datatype", []):
74
+ if re.match(datatype, file_metadata_datatype):
75
+ match_datatype = True
76
+ break
77
+
78
+ if match_scope and match_datatype:
79
+ action = policy["action"]
80
+
81
+ return action
82
+
83
+
84
+ def declare_suspicious_replicas_bad(once: bool = False, younger_than: int = 5, nattempts: int = 5, vos: Optional[list[str]] = None, limit_suspicious_files_on_rse: int = 5, json_file_name: str = "/opt/rucio/etc/suspicious_replica_recoverer.json", sleep_time: int = 3600, active_mode: bool = False) -> None:
60
85
  """
61
86
  Main loop to check for available replicas which are labeled as suspicious.
62
87
 
@@ -282,20 +307,71 @@ def run_once(heartbeat_handler: Any, younger_than: int, nattempts: int, vos: Opt
282
307
 
283
308
  logger(logging.INFO, 'Create rules for replicas with nattempts=1.')
284
309
 
285
- for rse_key in replicas_nattempts_1[vo]:
310
+ # Create as many rules as necessary for the replicas to be picked up by the daemon on the next run
311
+ # Create rules only for replicas that can be declared bad.
312
+ # Replicas from the auditor should be declared bad regardless of suspicious declarations, so no rules necessary.
313
+ for rse_key in list(replicas_nattempts_1[vo].keys()):
314
+ if not replicas_nattempts_1[vo][rse_key]:
315
+ # This is needed for testing purposes.
316
+ continue
317
+ files_to_be_declared_bad_nattempts_1 = []
286
318
  dids_nattempts_1 = []
287
- for replica_values in replicas_nattempts_1[vo][rse_key].values():
288
- dids = {'scope': replica_values['scope'], 'name': replica_values['name'], 'rse': rse_key}
289
- dids_nattempts_1.append(dids)
290
-
319
+ # Get the rse_id by going to one of the suspicious replicas from that RSE and reading it from there
320
+ rse_id = list(replicas_nattempts_1[vo][rse_key].values())[0]['rse_id']
321
+ for replica_key in replicas_nattempts_1[vo][rse_key].keys():
322
+ from_auditor = False
323
+ file_scope = replicas_nattempts_1[vo][rse_key][replica_key]["scope"]
324
+ file_name = replicas_nattempts_1[vo][rse_key][replica_key]["name"]
325
+ file_metadata = get_metadata(file_scope, file_name)
326
+ replicas_nattempts_1[vo][rse_key][replica_key]["datatype"] = str(file_metadata["datatype"])
327
+
328
+ # Auditor
329
+ suspicious_reason = get_suspicious_reason(replicas_nattempts_1[vo][rse_key][replica_key]["rse_id"], file_scope, file_name, nattempts)
330
+ for reason in suspicious_reason:
331
+ if "auditor" in reason["reason"].lower():
332
+ from_auditor = True
333
+ files_to_be_declared_bad_nattempts_1.append(recoverable_replicas[vo][rse_key][replica_key])
334
+ break
335
+
336
+ # Bad
337
+ if not from_auditor:
338
+ if (file_name.startswith("log.")) or (file_name.startswith("user")):
339
+ # Don't keep log files or user files
340
+ files_to_be_declared_bad_nattempts_1.append(recoverable_replicas[vo][rse_key][replica_key])
341
+ action = ""
342
+ else:
343
+ # Deal with replicas based on their metadata.
344
+ if file_metadata["datatype"] is None: # "None" type has no function "split()"
345
+ logger(logging.WARNING, "RSE: %s, replica name %s, surl %s: Replica does not have a data type associated with it. No action will be taken.",
346
+ rse_key, replica_key, replicas_nattempts_1[vo][rse_key][replica_key]['surl'])
347
+ continue
348
+ file_metadata_datatype = str(file_metadata["datatype"])
349
+ file_metadata_scope = str(file_metadata["scope"])
350
+ action = ""
351
+ if file_metadata_datatype:
352
+ # Some files don't have a datatype. They should be ignored.
353
+ for policy in json_data:
354
+ action = check_suspicious_policy(policy=policy, file_metadata_datatype=file_metadata_datatype, file_metadata_scope=file_metadata_scope)
355
+ if action:
356
+ logger(logging.INFO, "The action that will be performed is %s", action)
357
+ break
358
+ if action:
359
+ # Rules will be created for these replicas.
360
+ dids = {'scope': file_scope, 'name': file_name, 'rse': rse_key}
361
+ dids_nattempts_1.append(dids)
291
362
  if active_mode:
292
- # Create as many rules as necessary for the replicas to be picked up by the daemon on the next run
293
363
  if len(dids_nattempts_1) > 0:
294
- add_rule(dids=dids_nattempts_1, account=InternalAccount('root', vo=vo), copies=nattempts, rse_expression='type=SCRATCHDISK', grouping=None, weight=None, lifetime=24 * 3600, locked=False, subscription_id=None)
295
-
364
+ add_rule(dids=dids_nattempts_1, account=InternalAccount('root', vo=vo), copies=nattempts, rse_expression='type=SCRATCHDISK', grouping=None, weight=None, lifetime=5 * 24 * 3600, locked=False, subscription_id=None)
296
365
  logger(logging.INFO, 'Rules have been created for %i replicas on %s.', len(dids_nattempts_1), rse_key)
297
366
  else:
298
- logger(logging.INFO, 'No replicas on %s with nattempts=1.', rse_key)
367
+ logger(logging.INFO, 'No rules have been created for replicas on %s.', rse_key)
368
+ if len(files_to_be_declared_bad_nattempts_1) > 0:
369
+ logger(logging.INFO, 'Ready to declare %s bad replica(s) with nattempts=1 on %s (RSE id: %s).', len(files_to_be_declared_bad_nattempts_1), rse_key, str(rse_id))
370
+ declare_bad_file_replicas(replicas=files_to_be_declared_bad_nattempts_1, reason='Suspicious. Automatic recovery.', issuer=InternalAccount('root', vo=vo), session=None)
371
+ else:
372
+ logger(logging.INFO, 'No suspicious replica(s) with nattempts=1 on %s (RSE id: %s) have been declared bad.', rse_key, str(rse_id))
373
+ else:
374
+ logger(logging.INFO, 'No replicas on %s with nattempts=1.', rse_key)
299
375
 
300
376
  logger(logging.INFO, 'Begin check for problematic RSEs.')
301
377
  time_start_check_probl = time.time()
@@ -335,6 +411,7 @@ def run_once(heartbeat_handler: Any, younger_than: int, nattempts: int, vos: Opt
335
411
  for rse_key in list(recoverable_replicas[vo].keys()):
336
412
  files_to_be_declared_bad = []
337
413
  files_to_be_ignored = []
414
+ files_dry_run_monitoring = []
338
415
  # Remove RSEs from dictionary that don't have any suspicious replicas
339
416
  if len(recoverable_replicas[vo][rse_key]) == 0:
340
417
  del recoverable_replicas[vo][rse_key]
@@ -342,79 +419,76 @@ def run_once(heartbeat_handler: Any, younger_than: int, nattempts: int, vos: Opt
342
419
  # Get the rse_id by going to one of the suspicious replicas from that RSE and reading it from there
343
420
  rse_id = list(recoverable_replicas[vo][rse_key].values())[0]['rse_id']
344
421
  for replica_key in list(recoverable_replicas[vo][rse_key].keys()):
422
+ from_auditor = False
345
423
  file_scope = recoverable_replicas[vo][rse_key][replica_key]["scope"]
346
424
  file_name = recoverable_replicas[vo][rse_key][replica_key]["name"]
347
425
  file_metadata = get_metadata(file_scope, file_name)
348
426
  recoverable_replicas[vo][rse_key][replica_key]["datatype"] = str(file_metadata["datatype"])
349
- if recoverable_replicas[vo][rse_key][replica_key]['available_elsewhere'] is True:
350
- # Replicas with other copies on at least one other RSE can safely be labeled as bad
351
- files_to_be_declared_bad.append(recoverable_replicas[vo][rse_key][replica_key])
352
- # Remove replica from dictionary
353
- del recoverable_replicas[vo][rse_key][replica_key]
354
- elif recoverable_replicas[vo][rse_key][replica_key]['available_elsewhere'] is False:
355
- if (file_name.startswith("log.")) or (file_name.startswith("user")):
356
- # Don't keep log files or user files
357
- files_to_be_declared_bad.append(recoverable_replicas[vo][rse_key][replica_key])
358
- del recoverable_replicas[vo][rse_key][replica_key]
359
- else:
360
- # Deal with replicas based on their metadata.
361
- if file_metadata["datatype"] is None: # "None" type has no function "split()"
362
- files_to_be_ignored.append(recoverable_replicas[vo][rse_key][replica_key])
363
- logger(logging.WARNING, "RSE: %s, replica name %s, surl %s: Replica does not have a data type associated with it. No action will be taken.",
364
- rse_key, replica_key, recoverable_replicas[vo][rse_key][replica_key]['surl'])
365
- continue
366
427
 
367
- file_metadata_datatype = str(file_metadata["datatype"])
368
- file_metadata_scope = str(file_metadata["scope"])
369
- action = ""
370
- if file_metadata_datatype:
371
- # Some files don't have a datatype. They should be ignored.
372
- for policy in json_data:
373
- match_scope = False
374
- match_datatype = False
375
-
376
- if not policy.get("scope", []):
377
- match_scope = True
378
- for scope in policy.get("scope", []):
379
- if re.match(scope, file_metadata_scope):
380
- match_scope = True
381
- break
428
+ suspicious_reason = get_suspicious_reason(recoverable_replicas[vo][rse_key][replica_key]["rse_id"],
429
+ file_scope,
430
+ file_name,
431
+ nattempts)
432
+ for reason in suspicious_reason:
433
+ if "auditor" in reason["reason"].lower():
434
+ auditor += 1
435
+ files_to_be_declared_bad.append(recoverable_replicas[vo][rse_key][replica_key])
436
+ from_auditor = True
437
+ break
382
438
 
383
- if not policy.get("datatype", []):
384
- match_datatype = True
385
- for datatype in policy.get("datatype", []):
386
- if re.match(datatype, file_metadata_datatype):
387
- match_datatype = True
439
+ if not from_auditor:
440
+ if recoverable_replicas[vo][rse_key][replica_key]['available_elsewhere'] is True:
441
+ # Replicas with other copies on at least one other RSE can safely be labeled as bad
442
+ files_to_be_declared_bad.append(recoverable_replicas[vo][rse_key][replica_key])
443
+ # Remove replica from dictionary
444
+ del recoverable_replicas[vo][rse_key][replica_key]
445
+ elif recoverable_replicas[vo][rse_key][replica_key]['available_elsewhere'] is False:
446
+ if (file_name.startswith("log.")) or (file_name.startswith("user")):
447
+ # Don't keep log files or user files
448
+ files_to_be_declared_bad.append(recoverable_replicas[vo][rse_key][replica_key])
449
+ del recoverable_replicas[vo][rse_key][replica_key]
450
+ else:
451
+ # Deal with replicas based on their metadata.
452
+ if file_metadata["datatype"] is None: # "None" type has no function "split()"
453
+ files_to_be_ignored.append(recoverable_replicas[vo][rse_key][replica_key])
454
+ logger(logging.WARNING, "RSE: %s, replica name %s, surl %s: Replica does not have a data type associated with it. No action will be taken.",
455
+ rse_key, replica_key, recoverable_replicas[vo][rse_key][replica_key]['surl'])
456
+ continue
457
+
458
+ file_metadata_datatype = str(file_metadata["datatype"])
459
+ file_metadata_scope = str(file_metadata["scope"])
460
+ action = ""
461
+ if file_metadata_datatype:
462
+ # Some files don't have a datatype. They should be ignored.
463
+ for policy in json_data:
464
+ action = check_suspicious_policy(policy=policy, file_metadata_datatype=file_metadata_datatype, file_metadata_scope=file_metadata_scope)
465
+ if action:
466
+ logger(logging.INFO, "The action that will be performed is %s", action)
388
467
  break
389
468
 
390
- if match_scope and match_datatype:
391
- action = policy["action"]
392
- logger(logging.INFO, "The action that will be performed is %s", action)
393
- break
394
-
395
- if not action:
396
- logger(logging.WARNING, "No recognised actions (ignore/declare bad) found in policy file (etc/suspicious_replica_recoverer.json). Replica will be ignored by default.")
397
-
398
- if action:
399
- if action == "ignore":
469
+ if not action:
470
+ logger(logging.WARNING, "No recognised actions (ignore/declare bad) found in policy file (etc/suspicious_replica_recoverer.json). Replica will be ignored by default.")
471
+
472
+ if action:
473
+ if action == "dry run":
474
+ # Monitoring purposes: Will look like a file has been declared bad, even though no
475
+ # actions will be taken.
476
+ files_dry_run_monitoring.append(recoverable_replicas[vo][rse_key][replica_key])
477
+ elif action == "ignore":
478
+ files_to_be_ignored.append(recoverable_replicas[vo][rse_key][replica_key])
479
+ elif action == "declare bad":
480
+ suspicious_reason = get_suspicious_reason(recoverable_replicas[vo][rse_key][replica_key]["rse_id"],
481
+ file_scope,
482
+ file_name,
483
+ nattempts)
484
+ for reason in suspicious_reason:
485
+ if "checksum" in reason["reason"].lower():
486
+ checksum += 1
487
+ files_to_be_declared_bad.append(recoverable_replicas[vo][rse_key][replica_key])
488
+ break
489
+ else:
490
+ # If no policy has been set, default to ignoring the file (no action taken).
400
491
  files_to_be_ignored.append(recoverable_replicas[vo][rse_key][replica_key])
401
- elif action == "declare bad":
402
- suspicious_reason = get_suspicious_reason(recoverable_replicas[vo][rse_key][replica_key]["rse_id"],
403
- file_scope,
404
- file_name,
405
- nattempts)
406
- for reason in suspicious_reason:
407
- if "auditor" in reason["reason"].lower():
408
- auditor += 1
409
- files_to_be_declared_bad.append(recoverable_replicas[vo][rse_key][replica_key])
410
- break
411
- elif "checksum" in reason["reason"].lower():
412
- checksum += 1
413
- files_to_be_declared_bad.append(recoverable_replicas[vo][rse_key][replica_key])
414
- break
415
- else:
416
- # If no policy has been set, default to ignoring the file (no action taken).
417
- files_to_be_ignored.append(recoverable_replicas[vo][rse_key][replica_key])
418
492
 
419
493
  logger(logging.INFO, '(%s) Remaining replicas (pfns) that will be ignored:', rse_key)
420
494
  for i in files_to_be_ignored:
@@ -422,6 +496,8 @@ def run_once(heartbeat_handler: Any, younger_than: int, nattempts: int, vos: Opt
422
496
  logger(logging.INFO, '(%s) Remaining replica (pfns) that will be declared BAD:', rse_key)
423
497
  for i in files_to_be_declared_bad:
424
498
  logger(logging.INFO, 'Declare bad: RSE: %s Scope: %s Name: %s Datatype: %s PFN: %s', rse_key, i["scope"], i["name"], i["datatype"], i["surl"])
499
+ for i in files_dry_run_monitoring:
500
+ logger(logging.INFO, 'Declare bad (dry run): RSE: %s Scope: %s Name: %s Datatype: %s PFN: %s', rse_key, i["scope"], i["name"], i["datatype"], i["surl"])
425
501
 
426
502
  if files_to_be_declared_bad:
427
503
  logger(logging.INFO, 'Ready to declare %s bad replica(s) on %s (RSE id: %s).', len(files_to_be_declared_bad), rse_key, str(rse_id))
@@ -446,7 +522,7 @@ def run_once(heartbeat_handler: Any, younger_than: int, nattempts: int, vos: Opt
446
522
  return must_sleep
447
523
 
448
524
 
449
- def run(once: bool = False, younger_than: int = 3, nattempts: int = 10, vos: list[str] = None, limit_suspicious_files_on_rse: int = 5, json_file_name: str = "/opt/rucio/etc/suspicious_replica_recoverer.json", sleep_time: int = 3600, active_mode: bool = False) -> None:
525
+ def run(once: bool = False, younger_than: int = 5, nattempts: int = 5, vos: list[str] = None, limit_suspicious_files_on_rse: int = 5, json_file_name: str = "/opt/rucio/etc/suspicious_replica_recoverer.json", sleep_time: int = 3600, active_mode: bool = False) -> None:
450
526
  """
451
527
  Starts up the Suspicious-Replica-Recoverer threads.
452
528
  """
@@ -122,7 +122,7 @@ def _scitags_ids(logger: Callable[..., Any] = logging.log) -> "tuple[int | None,
122
122
  if _SCITAGS_NEXT_REFRESH < now:
123
123
  exp_name = config_get('packet-marking', 'exp_name', default='')
124
124
  fetch_url = config_get('packet-marking', 'fetch_url', default='https://www.scitags.org/api.json')
125
- fetch_interval = config_get_int('packet-marking', 'fetch_interval', default=datetime.timedelta(hours=48).seconds)
125
+ fetch_interval = config_get_int('packet-marking', 'fetch_interval', default=int(datetime.timedelta(hours=48).total_seconds()))
126
126
  fetch_timeout = config_get_int('packet-marking', 'fetch_timeout', default=5)
127
127
 
128
128
  _SCITAGS_NEXT_REFRESH = now + datetime.timedelta(seconds=fetch_interval)
@@ -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': '33.5.0',
7
+ 'version': '33.6.1',
8
8
  'branch_nick': 'release-33',
9
- 'revision_id': '3d4c7c5ec4a4fd63d86d72c9cbe0f03eb52f1130',
10
- 'revno': 12712
9
+ 'revision_id': 'ba5ba71d7ee18a18bef318699902ab4086926588',
10
+ 'revno': 12721
11
11
  }
@@ -112,8 +112,9 @@ def run_shell_command(cmd):
112
112
 
113
113
 
114
114
  def get_rucio_version():
115
+ python_executable = "'" + sys.executable + "'"
115
116
  ver = run_shell_command(
116
- "PYTHONPATH=lib " + sys.executable + " -c "
117
+ "PYTHONPATH=lib " + python_executable + " -c "
117
118
  '"from rucio import version; print(version.version_string())"'
118
119
  )
119
120
  if not ver: