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