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.
- {rucio-33.5.0 → rucio-33.6.1}/PKG-INFO +1 -1
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-replica-recoverer +2 -2
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/quarantined_replica.py +7 -6
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/replica.py +7 -2
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/volatile_replica.py +6 -8
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/auditor/__init__.py +1 -1
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +151 -75
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/transfertool/fts3.py +1 -1
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/vcsversion.py +3 -3
- {rucio-33.5.0 → rucio-33.6.1}/setuputil.py +2 -1
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_replica_recoverer.py +92 -42
- {rucio-33.5.0 → rucio-33.6.1}/AUTHORS.rst +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/ChangeLog +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/LICENSE +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/MANIFEST.in +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/README.rst +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-abacus-account +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-abacus-collection-replica +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-abacus-rse +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-admin +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-atropos +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-auditor +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-automatix +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-bb8 +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-c3po +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-cache-client +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-cache-consumer +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-finisher +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-poller +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-preparer +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-receiver +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-stager +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-submitter +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-conveyor-throttler +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-dark-reaper +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-dumper +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-follower +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-hermes +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-judge-cleaner +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-judge-evaluator +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-judge-injector +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-judge-repairer +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-kronos +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-minos +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-minos-temporary-expiration +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-necromancer +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-oauth-manager +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-reaper +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-rse-decommissioner +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-storage-consistency-actions +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-transmogrifier +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/bin/rucio-undertaker +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/alembic.ini.template +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/alembic_offline.ini.template +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/globus-config.yml.template +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/ldap.cfg.template +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/mail_templates/rule_approval_request.tmpl +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/mail_templates/rule_approved_user.tmpl +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/mail_templates/rule_denied_user.tmpl +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/rse-accounts.cfg.template +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/rucio.cfg.template +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/etc/rucio_multi_vo.cfg.template +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/alembicrevision.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/account.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/account_limit.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/authentication.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/config.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/credential.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/did.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/dirac.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/exporter.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/heartbeat.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/identity.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/importer.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/lifetime_exception.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/lock.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/meta.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/permission.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/quarantined_replica.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/replica.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/request.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/rse.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/rule.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/scope.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/subscription.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/api/vo.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/accountclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/accountlimitclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/baseclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/client.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/configclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/credentialclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/didclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/diracclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/downloadclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/exportclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/fileclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/importclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/lifetimeclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/lockclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/metaclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/pingclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/replicaclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/requestclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/rseclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/ruleclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/scopeclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/subscriptionclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/touchclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/client/uploadclient.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/cache.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/config.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/constants.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/constraints.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/didtype.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/dumper/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/dumper/consistency.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/dumper/data_models.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/dumper/path_parsing.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/exception.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/extra.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/logging.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/pcache.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/policy.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/atlas.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/belleii.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/cms.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/domatpc.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/escape.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/generic.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/icecube.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/schema/lsst.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/stomp_utils.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/stopwatch.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/test_rucio_server.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/types.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/common/utils.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/account.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/account_counter.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/account_limit.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/authentication.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/config.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/credential.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/did_column_meta.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/dirac.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/distance.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/exporter.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/heartbeat.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/identity.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/importer.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/lifetime_exception.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/lock.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/message.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/meta.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/monitor.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/naming_convention.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/nongrid_trace.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/oidc.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/atlas.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/belleii.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/cms.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/escape.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/generic.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/plugins.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/replica_sorter.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/request.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/rse.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/rse_counter.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/rse_expression_parser.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/rse_selector.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/rule.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/rule_grouping.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/scope.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/subscription.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/topology.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/trace.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/transfer.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/core/vo.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/abacus/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/abacus/account.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/abacus/rse.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/atropos/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/atropos/atropos.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/auditor/hdfs.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/automatix/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/automatix/automatix.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/badreplicas/minos.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/bb8/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/bb8/bb8.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/bb8/common.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/algorithms/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/algorithms/simple.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/algorithms/t2_free_space.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/c3po.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/agis.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/free_space.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/jedi_did.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/mock_did.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/network_metrics.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/collectors/workload.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/utils/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/utils/dataset_cache.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/utils/expiring_dataset_cache.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/utils/expiring_list.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/utils/popularity.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/c3po/utils/timeseries.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/cache/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/cache/consumer.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/common.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/common.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/finisher.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/poller.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/preparer.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/receiver.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/stager.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/submitter.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/conveyor/throttler.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/follower/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/follower/follower.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/hermes/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/hermes/hermes.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/judge/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/judge/cleaner.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/judge/evaluator.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/judge/injector.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/judge/repairer.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/reaper/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/reaper/reaper.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/config.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/profiles/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/profiles/atlas.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/profiles/generic.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/profiles/types.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/rsedecommissioner/rse_decommissioner.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/storage/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/tracer/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/tracer/kronos.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/undertaker/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/constants.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
- {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
- {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
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
- {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
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
- {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
- {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
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
- {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
- {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
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
- {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
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
- {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
- {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
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
- {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
- {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
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
- {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
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
- {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
- {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
- {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
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/models.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/sautils.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/session.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/types.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/db/sqla/util.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/cache.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/dummy.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/gfal.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/globus.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/gsiftp.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/http_cache.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/mock.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/ngarc.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/posix.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/protocol.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/rclone.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/rfio.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/srm.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/ssh.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/storm.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/webdav.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/protocols/xrootd.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/rse/rsemanager.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/tests/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/tests/common.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/tests/common_server.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/transfertool/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/transfertool/globus.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/transfertool/globus_library.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/transfertool/mock.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/transfertool/transfertool.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/version.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/common.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/meta.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/replicas.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/main.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/metrics.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio/web/rest/ping.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/lib/rucio.egg-info/SOURCES.txt +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/pylintrc +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/pyproject.toml +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/requirements.txt +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/setup.cfg +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/setup.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_abacus_account.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_abacus_collection_replica.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_abacus_rse.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_account.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_account_limits.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_api_external_representation.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_archive.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_auditor.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_auditor_hdfs.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_auditor_srmdumps.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_authentication.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_automatix.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_bad_replica.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_bb8.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_belleii.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_bin_rucio.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_boolean.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_clients.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_common_types.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_config.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_conveyor.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_conveyor_submitter.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_counter.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_credential.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_curl.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_daemons.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_dataset_replicas.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_db.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_did.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_did_meta_plugins.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_didtype.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_download.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_dumper.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_dumper_consistency.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_dumper_data_model.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_dumper_path_parsing.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_filter_engine.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_heartbeat.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_hermes.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_identity.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_impl_upload_download.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_import_export.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_judge_cleaner.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_judge_evaluator.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_judge_injector.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_judge_repairer.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_lifetime.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_message.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_meta.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_meta_did.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_module_import.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_monitor.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_multi_vo.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_naming_convention.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_oauthmanager.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_oidc.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_permission.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_pfns.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_ping.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_preparer.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_qos.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_quarantined_replica.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_reaper.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_redirect.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_replica.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_replica_sorting.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_request.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_root_proxy.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_expression_parser.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_lfn2path.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_gfal2.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_gfal2_impl.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_posix.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_rclone.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_rsync.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_srm.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_ssh.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_webdav.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_protocol_xrootd.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rse_selector.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rucio_server.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_rule.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_schema_cms.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_scope.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_subscription.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_throttler.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_tpc.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_trace.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_transfer.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_undertaker.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_upload.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tests/test_utils.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tools/bootstrap.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tools/merge_rucio_configs.py +0 -0
- {rucio-33.5.0 → rucio-33.6.1}/tools/reset_database.py +0 -0
|
@@ -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=
|
|
232
|
-
parser.add_argument("--younger-than", action="store", default=
|
|
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:
|
|
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=
|
|
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
|
|
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
|
|
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.
|
|
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
|
{rucio-33.5.0 → rucio-33.6.1}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py
RENAMED
|
@@ -56,7 +56,32 @@ GRACEFUL_STOP = threading.Event()
|
|
|
56
56
|
DAEMON_NAME = 'suspicious-replica-recoverer'
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
def
|
|
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
|
|
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
|
-
|
|
288
|
-
|
|
289
|
-
|
|
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
|
|
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
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
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
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
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
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
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 =
|
|
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).
|
|
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.
|
|
7
|
+
'version': '33.6.1',
|
|
8
8
|
'branch_nick': 'release-33',
|
|
9
|
-
'revision_id': '
|
|
10
|
-
'revno':
|
|
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 " +
|
|
117
|
+
"PYTHONPATH=lib " + python_executable + " -c "
|
|
117
118
|
'"from rucio import version; print(version.version_string())"'
|
|
118
119
|
)
|
|
119
120
|
if not ver:
|