rucio 33.4.0.post1__tar.gz → 33.6.0__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.4.0.post1 → rucio-33.6.0}/PKG-INFO +1 -1
  2. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio +0 -44
  3. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-replica-recoverer +2 -2
  4. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/oidc.py +2 -2
  5. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/replica.py +7 -2
  6. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/auditor/__init__.py +1 -1
  7. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +151 -75
  8. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/vcsversion.py +3 -3
  9. {rucio-33.4.0.post1 → rucio-33.6.0}/setuputil.py +2 -1
  10. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_replica_recoverer.py +92 -42
  11. {rucio-33.4.0.post1 → rucio-33.6.0}/AUTHORS.rst +0 -0
  12. {rucio-33.4.0.post1 → rucio-33.6.0}/ChangeLog +0 -0
  13. {rucio-33.4.0.post1 → rucio-33.6.0}/LICENSE +0 -0
  14. {rucio-33.4.0.post1 → rucio-33.6.0}/MANIFEST.in +0 -0
  15. {rucio-33.4.0.post1 → rucio-33.6.0}/README.rst +0 -0
  16. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-abacus-account +0 -0
  17. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-abacus-collection-replica +0 -0
  18. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-abacus-rse +0 -0
  19. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-admin +0 -0
  20. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-atropos +0 -0
  21. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-auditor +0 -0
  22. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-automatix +0 -0
  23. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-bb8 +0 -0
  24. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-c3po +0 -0
  25. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-cache-client +0 -0
  26. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-cache-consumer +0 -0
  27. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-conveyor-finisher +0 -0
  28. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-conveyor-poller +0 -0
  29. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-conveyor-preparer +0 -0
  30. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-conveyor-receiver +0 -0
  31. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-conveyor-stager +0 -0
  32. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-conveyor-submitter +0 -0
  33. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-conveyor-throttler +0 -0
  34. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-dark-reaper +0 -0
  35. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-dumper +0 -0
  36. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-follower +0 -0
  37. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-hermes +0 -0
  38. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-judge-cleaner +0 -0
  39. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-judge-evaluator +0 -0
  40. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-judge-injector +0 -0
  41. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-judge-repairer +0 -0
  42. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-kronos +0 -0
  43. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-minos +0 -0
  44. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-minos-temporary-expiration +0 -0
  45. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-necromancer +0 -0
  46. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-oauth-manager +0 -0
  47. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-reaper +0 -0
  48. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-rse-decommissioner +0 -0
  49. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-storage-consistency-actions +0 -0
  50. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-transmogrifier +0 -0
  51. {rucio-33.4.0.post1 → rucio-33.6.0}/bin/rucio-undertaker +0 -0
  52. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/alembic.ini.template +0 -0
  53. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/alembic_offline.ini.template +0 -0
  54. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/globus-config.yml.template +0 -0
  55. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/ldap.cfg.template +0 -0
  56. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/mail_templates/rule_approval_request.tmpl +0 -0
  57. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
  58. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/mail_templates/rule_approved_user.tmpl +0 -0
  59. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
  60. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/mail_templates/rule_denied_user.tmpl +0 -0
  61. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
  62. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/rse-accounts.cfg.template +0 -0
  63. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/rucio.cfg.atlas.client.template +0 -0
  64. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/rucio.cfg.template +0 -0
  65. {rucio-33.4.0.post1 → rucio-33.6.0}/etc/rucio_multi_vo.cfg.template +0 -0
  66. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/__init__.py +0 -0
  67. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/alembicrevision.py +0 -0
  68. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/__init__.py +0 -0
  69. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/account.py +0 -0
  70. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/account_limit.py +0 -0
  71. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/authentication.py +0 -0
  72. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/config.py +0 -0
  73. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/credential.py +0 -0
  74. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/did.py +0 -0
  75. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/dirac.py +0 -0
  76. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/exporter.py +0 -0
  77. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/heartbeat.py +0 -0
  78. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/identity.py +0 -0
  79. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/importer.py +0 -0
  80. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/lifetime_exception.py +0 -0
  81. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/lock.py +0 -0
  82. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/meta.py +0 -0
  83. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/permission.py +0 -0
  84. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/quarantined_replica.py +0 -0
  85. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/replica.py +0 -0
  86. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/request.py +0 -0
  87. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/rse.py +0 -0
  88. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/rule.py +0 -0
  89. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/scope.py +0 -0
  90. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/subscription.py +0 -0
  91. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/api/vo.py +0 -0
  92. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/__init__.py +0 -0
  93. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/accountclient.py +0 -0
  94. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/accountlimitclient.py +0 -0
  95. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/baseclient.py +0 -0
  96. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/client.py +0 -0
  97. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/configclient.py +0 -0
  98. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/credentialclient.py +0 -0
  99. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/didclient.py +0 -0
  100. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/diracclient.py +0 -0
  101. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/downloadclient.py +0 -0
  102. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/exportclient.py +0 -0
  103. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/fileclient.py +0 -0
  104. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/importclient.py +0 -0
  105. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/lifetimeclient.py +0 -0
  106. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/lockclient.py +0 -0
  107. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/metaclient.py +0 -0
  108. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/pingclient.py +0 -0
  109. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/replicaclient.py +0 -0
  110. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/requestclient.py +0 -0
  111. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/rseclient.py +0 -0
  112. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/ruleclient.py +0 -0
  113. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/scopeclient.py +0 -0
  114. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/subscriptionclient.py +0 -0
  115. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/touchclient.py +0 -0
  116. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/client/uploadclient.py +0 -0
  117. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/__init__.py +0 -0
  118. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/cache.py +0 -0
  119. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/config.py +0 -0
  120. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/constants.py +0 -0
  121. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/constraints.py +0 -0
  122. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/didtype.py +0 -0
  123. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/dumper/__init__.py +0 -0
  124. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/dumper/consistency.py +0 -0
  125. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/dumper/data_models.py +0 -0
  126. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/dumper/path_parsing.py +0 -0
  127. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/exception.py +0 -0
  128. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/extra.py +0 -0
  129. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/logging.py +0 -0
  130. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/pcache.py +0 -0
  131. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/policy.py +0 -0
  132. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/schema/__init__.py +0 -0
  133. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/schema/atlas.py +0 -0
  134. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/schema/belleii.py +0 -0
  135. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/schema/cms.py +0 -0
  136. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/schema/domatpc.py +0 -0
  137. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/schema/escape.py +0 -0
  138. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/schema/generic.py +0 -0
  139. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
  140. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/schema/icecube.py +0 -0
  141. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/schema/lsst.py +0 -0
  142. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/stomp_utils.py +0 -0
  143. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/stopwatch.py +0 -0
  144. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/test_rucio_server.py +0 -0
  145. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/types.py +0 -0
  146. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/common/utils.py +0 -0
  147. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/__init__.py +0 -0
  148. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/account.py +0 -0
  149. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/account_counter.py +0 -0
  150. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/account_limit.py +0 -0
  151. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/authentication.py +0 -0
  152. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/config.py +0 -0
  153. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/credential.py +0 -0
  154. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/did.py +0 -0
  155. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/did_meta_plugins/__init__.py +0 -0
  156. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/did_meta_plugins/did_column_meta.py +0 -0
  157. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
  158. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
  159. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
  160. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
  161. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
  162. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/dirac.py +0 -0
  163. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/distance.py +0 -0
  164. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/exporter.py +0 -0
  165. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/heartbeat.py +0 -0
  166. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/identity.py +0 -0
  167. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/importer.py +0 -0
  168. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/lifetime_exception.py +0 -0
  169. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/lock.py +0 -0
  170. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/message.py +0 -0
  171. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/meta.py +0 -0
  172. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/monitor.py +0 -0
  173. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/naming_convention.py +0 -0
  174. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/nongrid_trace.py +0 -0
  175. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/permission/__init__.py +0 -0
  176. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/permission/atlas.py +0 -0
  177. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/permission/belleii.py +0 -0
  178. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/permission/cms.py +0 -0
  179. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/permission/escape.py +0 -0
  180. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/permission/generic.py +0 -0
  181. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
  182. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/plugins.py +0 -0
  183. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/quarantined_replica.py +0 -0
  184. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/replica_sorter.py +0 -0
  185. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/request.py +0 -0
  186. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/rse.py +0 -0
  187. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/rse_counter.py +0 -0
  188. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/rse_expression_parser.py +0 -0
  189. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/rse_selector.py +0 -0
  190. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/rule.py +0 -0
  191. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/rule_grouping.py +0 -0
  192. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/scope.py +0 -0
  193. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/subscription.py +0 -0
  194. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/topology.py +0 -0
  195. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/trace.py +0 -0
  196. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/transfer.py +0 -0
  197. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/vo.py +0 -0
  198. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/core/volatile_replica.py +0 -0
  199. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/__init__.py +0 -0
  200. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/abacus/__init__.py +0 -0
  201. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/abacus/account.py +0 -0
  202. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
  203. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/abacus/rse.py +0 -0
  204. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/atropos/__init__.py +0 -0
  205. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/atropos/atropos.py +0 -0
  206. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/auditor/hdfs.py +0 -0
  207. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
  208. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/automatix/__init__.py +0 -0
  209. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/automatix/automatix.py +0 -0
  210. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
  211. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/badreplicas/minos.py +0 -0
  212. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
  213. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
  214. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/bb8/__init__.py +0 -0
  215. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/bb8/bb8.py +0 -0
  216. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/bb8/common.py +0 -0
  217. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
  218. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
  219. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/__init__.py +0 -0
  220. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/algorithms/__init__.py +0 -0
  221. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/algorithms/simple.py +0 -0
  222. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space.py +0 -0
  223. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +0 -0
  224. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +0 -0
  225. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/c3po.py +0 -0
  226. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/collectors/__init__.py +0 -0
  227. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/collectors/agis.py +0 -0
  228. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/collectors/free_space.py +0 -0
  229. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/collectors/jedi_did.py +0 -0
  230. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/collectors/mock_did.py +0 -0
  231. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/collectors/network_metrics.py +0 -0
  232. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/collectors/workload.py +0 -0
  233. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/utils/__init__.py +0 -0
  234. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/utils/dataset_cache.py +0 -0
  235. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/utils/expiring_dataset_cache.py +0 -0
  236. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/utils/expiring_list.py +0 -0
  237. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/utils/popularity.py +0 -0
  238. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/c3po/utils/timeseries.py +0 -0
  239. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/cache/__init__.py +0 -0
  240. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/cache/consumer.py +0 -0
  241. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/common.py +0 -0
  242. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/conveyor/__init__.py +0 -0
  243. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/conveyor/common.py +0 -0
  244. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/conveyor/finisher.py +0 -0
  245. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/conveyor/poller.py +0 -0
  246. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/conveyor/preparer.py +0 -0
  247. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/conveyor/receiver.py +0 -0
  248. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/conveyor/stager.py +0 -0
  249. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/conveyor/submitter.py +0 -0
  250. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/conveyor/throttler.py +0 -0
  251. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/follower/__init__.py +0 -0
  252. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/follower/follower.py +0 -0
  253. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/hermes/__init__.py +0 -0
  254. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/hermes/hermes.py +0 -0
  255. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/judge/__init__.py +0 -0
  256. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/judge/cleaner.py +0 -0
  257. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/judge/evaluator.py +0 -0
  258. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/judge/injector.py +0 -0
  259. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/judge/repairer.py +0 -0
  260. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
  261. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
  262. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/reaper/__init__.py +0 -0
  263. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
  264. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/reaper/reaper.py +0 -0
  265. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
  266. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/rsedecommissioner/__init__.py +0 -0
  267. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/rsedecommissioner/config.py +0 -0
  268. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/rsedecommissioner/profiles/__init__.py +0 -0
  269. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/rsedecommissioner/profiles/atlas.py +0 -0
  270. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/rsedecommissioner/profiles/generic.py +0 -0
  271. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/rsedecommissioner/profiles/types.py +0 -0
  272. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/rsedecommissioner/rse_decommissioner.py +0 -0
  273. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/storage/__init__.py +0 -0
  274. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
  275. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
  276. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/tracer/__init__.py +0 -0
  277. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/tracer/kronos.py +0 -0
  278. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
  279. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
  280. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/undertaker/__init__.py +0 -0
  281. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
  282. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/__init__.py +0 -0
  283. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/__init__.py +0 -0
  284. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/constants.py +0 -0
  285. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
  286. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
  287. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
  288. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
  289. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
  290. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
  291. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
  292. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
  293. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
  294. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
  295. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
  296. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
  297. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
  298. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
  299. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
  300. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
  301. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
  302. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
  303. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
  304. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
  305. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
  306. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
  307. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
  308. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
  309. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
  310. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
  311. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
  312. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
  313. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
  314. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -0
  315. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
  316. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -0
  317. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
  318. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
  319. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
  320. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
  321. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
  322. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
  323. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
  324. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
  325. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
  326. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
  327. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
  328. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
  329. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
  330. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
  331. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
  332. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
  333. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
  334. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
  335. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
  336. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
  337. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
  338. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
  339. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
  340. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
  341. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
  342. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
  343. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
  344. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
  345. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
  346. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
  347. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
  348. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
  349. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
  350. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
  351. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
  352. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +0 -0
  353. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
  354. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
  355. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
  356. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
  357. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
  358. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
  359. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
  360. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
  361. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
  362. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
  363. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
  364. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
  365. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
  366. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
  367. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
  368. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
  369. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
  370. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
  371. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
  372. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
  373. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
  374. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
  375. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
  376. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
  377. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
  378. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +0 -0
  379. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
  380. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
  381. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
  382. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
  383. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -0
  384. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
  385. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
  386. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
  387. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
  388. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
  389. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
  390. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
  391. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
  392. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
  393. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
  394. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
  395. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
  396. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
  397. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
  398. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
  399. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
  400. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
  401. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
  402. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
  403. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
  404. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
  405. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
  406. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
  407. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
  408. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
  409. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
  410. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -0
  411. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
  412. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
  413. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/models.py +0 -0
  414. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/sautils.py +0 -0
  415. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/session.py +0 -0
  416. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/types.py +0 -0
  417. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/db/sqla/util.py +0 -0
  418. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/__init__.py +0 -0
  419. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/__init__.py +0 -0
  420. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/cache.py +0 -0
  421. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/dummy.py +0 -0
  422. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/gfal.py +0 -0
  423. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/globus.py +0 -0
  424. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/gsiftp.py +0 -0
  425. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
  426. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/mock.py +0 -0
  427. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/ngarc.py +0 -0
  428. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/posix.py +0 -0
  429. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/protocol.py +0 -0
  430. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/rclone.py +0 -0
  431. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/rfio.py +0 -0
  432. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/srm.py +0 -0
  433. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/ssh.py +0 -0
  434. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/storm.py +0 -0
  435. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/webdav.py +0 -0
  436. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
  437. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/rse/rsemanager.py +0 -0
  438. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/tests/__init__.py +0 -0
  439. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/tests/common.py +0 -0
  440. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/tests/common_server.py +0 -0
  441. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/transfertool/__init__.py +0 -0
  442. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/transfertool/fts3.py +0 -0
  443. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/transfertool/globus.py +0 -0
  444. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/transfertool/globus_library.py +0 -0
  445. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/transfertool/mock.py +0 -0
  446. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/transfertool/transfertool.py +0 -0
  447. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/version.py +0 -0
  448. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/__init__.py +0 -0
  449. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/__init__.py +0 -0
  450. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
  451. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
  452. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
  453. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
  454. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
  455. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
  456. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
  457. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/common.py +0 -0
  458. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
  459. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
  460. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
  461. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
  462. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
  463. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
  464. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
  465. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
  466. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
  467. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
  468. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
  469. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/meta.py +0 -0
  470. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
  471. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
  472. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
  473. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
  474. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/replicas.py +0 -0
  475. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
  476. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
  477. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
  478. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
  479. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
  480. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
  481. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
  482. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
  483. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
  484. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/main.py +0 -0
  485. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/metrics.py +0 -0
  486. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio/web/rest/ping.py +0 -0
  487. {rucio-33.4.0.post1 → rucio-33.6.0}/lib/rucio.egg-info/SOURCES.txt +0 -0
  488. {rucio-33.4.0.post1 → rucio-33.6.0}/pylintrc +0 -0
  489. {rucio-33.4.0.post1 → rucio-33.6.0}/pyproject.toml +0 -0
  490. {rucio-33.4.0.post1 → rucio-33.6.0}/requirements.txt +0 -0
  491. {rucio-33.4.0.post1 → rucio-33.6.0}/setup.cfg +0 -0
  492. {rucio-33.4.0.post1 → rucio-33.6.0}/setup.py +0 -0
  493. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_abacus_account.py +0 -0
  494. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_abacus_collection_replica.py +0 -0
  495. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_abacus_rse.py +0 -0
  496. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_account.py +0 -0
  497. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_account_limits.py +0 -0
  498. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_api_external_representation.py +0 -0
  499. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_archive.py +0 -0
  500. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_auditor.py +0 -0
  501. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_auditor_hdfs.py +0 -0
  502. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_auditor_srmdumps.py +0 -0
  503. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_authentication.py +0 -0
  504. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_automatix.py +0 -0
  505. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_bad_replica.py +0 -0
  506. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_bb8.py +0 -0
  507. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_belleii.py +0 -0
  508. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_bin_rucio.py +0 -0
  509. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_boolean.py +0 -0
  510. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_clients.py +0 -0
  511. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_common_types.py +0 -0
  512. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_config.py +0 -0
  513. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_conveyor.py +0 -0
  514. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_conveyor_submitter.py +0 -0
  515. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_counter.py +0 -0
  516. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_credential.py +0 -0
  517. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_curl.py +0 -0
  518. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_daemons.py +0 -0
  519. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_dataset_replicas.py +0 -0
  520. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_db.py +0 -0
  521. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_did.py +0 -0
  522. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_did_meta_plugins.py +0 -0
  523. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_didtype.py +0 -0
  524. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_download.py +0 -0
  525. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_dumper.py +0 -0
  526. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_dumper_consistency.py +0 -0
  527. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_dumper_data_model.py +0 -0
  528. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_dumper_path_parsing.py +0 -0
  529. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_filter_engine.py +0 -0
  530. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_heartbeat.py +0 -0
  531. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_hermes.py +0 -0
  532. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_identity.py +0 -0
  533. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_impl_upload_download.py +0 -0
  534. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_import_export.py +0 -0
  535. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_judge_cleaner.py +0 -0
  536. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_judge_evaluator.py +0 -0
  537. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_judge_injector.py +0 -0
  538. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_judge_repairer.py +0 -0
  539. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_lifetime.py +0 -0
  540. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_message.py +0 -0
  541. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_meta.py +0 -0
  542. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_meta_did.py +0 -0
  543. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_module_import.py +0 -0
  544. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_monitor.py +0 -0
  545. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_multi_vo.py +0 -0
  546. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_naming_convention.py +0 -0
  547. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_oauthmanager.py +0 -0
  548. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_oidc.py +0 -0
  549. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_permission.py +0 -0
  550. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_pfns.py +0 -0
  551. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_ping.py +0 -0
  552. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_preparer.py +0 -0
  553. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_qos.py +0 -0
  554. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_quarantined_replica.py +0 -0
  555. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_reaper.py +0 -0
  556. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_redirect.py +0 -0
  557. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_replica.py +0 -0
  558. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_replica_sorting.py +0 -0
  559. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_request.py +0 -0
  560. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_root_proxy.py +0 -0
  561. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rse.py +0 -0
  562. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rse_expression_parser.py +0 -0
  563. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rse_lfn2path.py +0 -0
  564. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rse_protocol_gfal2.py +0 -0
  565. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
  566. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rse_protocol_posix.py +0 -0
  567. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rse_protocol_rclone.py +0 -0
  568. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rse_protocol_rsync.py +0 -0
  569. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rse_protocol_srm.py +0 -0
  570. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rse_protocol_ssh.py +0 -0
  571. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rse_protocol_webdav.py +0 -0
  572. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rse_protocol_xrootd.py +0 -0
  573. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rse_selector.py +0 -0
  574. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rucio_server.py +0 -0
  575. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_rule.py +0 -0
  576. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_schema_cms.py +0 -0
  577. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_scope.py +0 -0
  578. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_subscription.py +0 -0
  579. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_throttler.py +0 -0
  580. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_tpc.py +0 -0
  581. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_trace.py +0 -0
  582. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_transfer.py +0 -0
  583. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_undertaker.py +0 -0
  584. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_upload.py +0 -0
  585. {rucio-33.4.0.post1 → rucio-33.6.0}/tests/test_utils.py +0 -0
  586. {rucio-33.4.0.post1 → rucio-33.6.0}/tools/bootstrap.py +0 -0
  587. {rucio-33.4.0.post1 → rucio-33.6.0}/tools/merge_rucio_configs.py +0 -0
  588. {rucio-33.4.0.post1 → rucio-33.6.0}/tools/reset_database.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rucio
3
- Version: 33.4.0.post1
3
+ Version: 33.6.0
4
4
  Summary: Rucio Package
5
5
  Home-page: https://rucio.cern.ch/
6
6
  Author: Rucio
@@ -20,7 +20,6 @@ import itertools
20
20
  import logging
21
21
  import math
22
22
  import os
23
- import re
24
23
  import signal
25
24
  import subprocess
26
25
  import sys
@@ -49,7 +48,6 @@ from rucio.common.test_rucio_server import TestRucioServer
49
48
  from rucio.common.utils import sizefmt, Color, detect_client_location, chunks, parse_did_filter_from_string, \
50
49
  parse_did_filter_from_string_fe, extract_scope, setup_logger, StoreAndDeprecateWarningAction
51
50
  from rucio.common.constants import ReplicaState
52
- from rucio.rse.protocols.protocol import RSEProtocol
53
51
 
54
52
  EXTRA_MODULES = import_extras(['argcomplete'])
55
53
 
@@ -868,44 +866,6 @@ def erase(args):
868
866
  return SUCCESS
869
867
 
870
868
 
871
- @exception_handler
872
- def list_impls(args):
873
- """
874
- %(prog)s list-impls
875
-
876
- List protocol implementations.
877
- """
878
-
879
- PROTOCOL_DIRECTORY = '/opt/rucio/lib/rucio/rse/protocols'
880
-
881
- for filename in os.listdir(PROTOCOL_DIRECTORY):
882
- if os.path.isdir(os.path.join(PROTOCOL_DIRECTORY, filename)) or filename in ["__init__.py", "cache.py", "http_cache.py", "dummy.py", "protocol.py"]:
883
- continue
884
- else:
885
- filename = re.sub(r".py", r"", filename)
886
- __import__("rucio.rse.protocols", fromlist=[filename])
887
-
888
- impls = []
889
-
890
- def get_subclasses(cls):
891
- for subclass in cls.__subclasses__():
892
- if (str(subclass)[28:-2]).endswith('Default'):
893
- class_name = str(subclass)[28:-10]
894
- else:
895
- class_name = str(subclass)[28:-2]
896
- impls.append([class_name, subclass.__doc__])
897
- get_subclasses(subclass)
898
-
899
- get_subclasses(RSEProtocol)
900
- impls = sorted(impls)
901
- table = []
902
- for impl in impls:
903
- table.append([impl[0], impl[1]])
904
-
905
- print(tabulate(table, tablefmt=tablefmt, headers=['impl', 'DESCRIPTION']))
906
- return SUCCESS
907
-
908
-
909
869
  @exception_handler
910
870
  def upload(args):
911
871
  """
@@ -2265,10 +2225,6 @@ You can filter by key/value, e.g.::
2265
2225
  list_content_history_parser.set_defaults(function=list_content_history)
2266
2226
  list_content_history_parser.add_argument(dest='dids', nargs='+', action='store', help='List of space separated data identifiers.')
2267
2227
 
2268
- # The list-impls command
2269
- list_impls_parser = subparsers.add_parser('list-impls', help='List all supported protocol implementations.')
2270
- list_impls_parser.set_defaults(function=list_impls)
2271
-
2272
2228
  # The upload subparser
2273
2229
  upload_parser = subparsers.add_parser('upload', help='Upload method.')
2274
2230
  upload_parser.set_defaults(function=upload)
@@ -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.')
@@ -58,8 +58,8 @@ if TYPE_CHECKING:
58
58
 
59
59
  # The WLCG Common JWT Profile dictates that the lifetime of access and ID tokens
60
60
  # should range from five minutes to six hours.
61
- TOKEN_MIN_LIFETIME: Final = int(timedelta(minutes=5).total_seconds())
62
- TOKEN_MAX_LIFETIME: Final = int(timedelta(hours=6).total_seconds())
61
+ TOKEN_MIN_LIFETIME: Final = config_get_int('oidc', 'token_min_lifetime', default=300)
62
+ TOKEN_MAX_LIFETIME: Final = config_get_int('oidc', 'token_max_lifetime', default=21600)
63
63
 
64
64
  REGION: Final = make_region_memcached(expiration_time=TOKEN_MAX_LIFETIME)
65
65
  METRICS = MetricManager(module=__name__)
@@ -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()
@@ -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
  """
@@ -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.4.0.post1',
7
+ 'version': '33.6.0',
8
8
  'branch_nick': 'release-33',
9
- 'revision_id': 'c97a3d9dd1478ed7e74f21c1a7549c8ee6ec6035',
10
- 'revno': 12709
9
+ 'revision_id': '899edfbe2422bc415584854b849aad5bec2ee469',
10
+ 'revno': 12715
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: