rucio 1.30.6__tar.gz → 1.30.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rucio might be problematic. Click here for more details.
- {rucio-1.30.6 → rucio-1.30.7}/PKG-INFO +1 -1
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-preparer +2 -1
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/rule.py +3 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/replica.py +7 -3
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/preparer.py +8 -5
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/gfal.py +6 -3
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/common.py +4 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_conveyor.py +109 -3
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_conveyor_submitter.py +6 -1
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_judge_evaluator.py +145 -2
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_xrootd.py +3 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/transfertool/fts3.py +1 -1
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/vcsversion.py +3 -3
- {rucio-1.30.6 → rucio-1.30.7}/AUTHORS.rst +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/ChangeLog +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/LICENSE +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/MANIFEST.in +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/README.rst +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-abacus-account +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-abacus-collection-replica +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-abacus-rse +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-admin +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-atropos +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-auditor +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-automatix +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-bb8 +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-c3po +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-cache-client +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-cache-consumer +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-finisher +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-poller +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-receiver +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-stager +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-submitter +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-conveyor-throttler +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-dark-reaper +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-dumper +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-follower +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-hermes +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-hermes2 +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-judge-cleaner +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-judge-evaluator +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-judge-injector +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-judge-repairer +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-kronos +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-light-reaper +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-minos +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-minos-temporary-expiration +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-necromancer +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-oauth-manager +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-reaper +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-replica-recoverer +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-storage-consistency-actions +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-transmogrifier +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/bin/rucio-undertaker +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/alembic.ini.template +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/alembic_offline.ini.template +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/globus-config.yml.template +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/ldap.cfg.template +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/mail_templates/rule_approval_request.tmpl +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/mail_templates/rule_approved_user.tmpl +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/mail_templates/rule_denied_user.tmpl +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/rse-accounts.cfg.template +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/rucio.cfg.template +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/etc/rucio_multi_vo.cfg.template +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/alembicrevision.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/account.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/account_limit.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/authentication.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/config.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/credential.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/did.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/dirac.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/exporter.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/heartbeat.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/identity.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/importer.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/lifetime_exception.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/lock.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/meta.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/permission.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/quarantined_replica.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/replica.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/request.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/rse.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/scope.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/subscription.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/temporary_did.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/api/vo.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/accountclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/accountlimitclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/baseclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/client.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/configclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/credentialclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/didclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/diracclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/downloadclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/exportclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/fileclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/importclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/lifetimeclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/lockclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/metaclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/pingclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/replicaclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/requestclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/rseclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/ruleclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/scopeclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/subscriptionclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/touchclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/client/uploadclient.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/cache.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/config.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/constants.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/constraints.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/didtype.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/dumper/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/dumper/consistency.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/dumper/data_models.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/dumper/path_parsing.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/exception.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/extra.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/logging.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/pcache.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/policy.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/atlas.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/belleii.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/cms.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/domatpc.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/escape.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/generic.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/icecube.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/schema/lsst.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/stomp_utils.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/stopwatch.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/test_rucio_server.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/types.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/common/utils.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/account.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/account_counter.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/account_limit.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/authentication.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/config.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/credential.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/did_column_meta.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/dirac.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/distance.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/exporter.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/heartbeat.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/identity.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/importer.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/lifetime_exception.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/lock.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/message.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/meta.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/monitor.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/naming_convention.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/nongrid_trace.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/oidc.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/atlas.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/belleii.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/cms.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/escape.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/generic.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/quarantined_replica.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/replica_sorter.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/request.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/rse.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/rse_counter.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/rse_expression_parser.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/rse_selector.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/rule.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/rule_grouping.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/scope.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/subscription.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/temporary_did.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/topology.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/trace.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/transfer.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/vo.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/core/volatile_replica.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/abacus/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/abacus/account.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/abacus/rse.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/atropos/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/atropos/atropos.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/auditor/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/auditor/hdfs.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/automatix/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/automatix/automatix.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/badreplicas/minos.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/bb8/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/bb8/bb8.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/bb8/common.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/simple.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/t2_free_space.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/c3po.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/agis.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/free_space.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/jedi_did.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/mock_did.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/network_metrics.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/collectors/workload.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/dataset_cache.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/expiring_dataset_cache.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/expiring_list.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/popularity.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/c3po/utils/timeseries.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/cache/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/cache/consumer.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/common.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/common.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/finisher.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/poller.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/receiver.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/stager.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/submitter.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/conveyor/throttler.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/follower/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/follower/follower.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/hermes/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/hermes/hermes.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/hermes/hermes2.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/judge/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/judge/cleaner.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/judge/evaluator.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/judge/injector.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/judge/repairer.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/reaper/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/reaper/light_reaper.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/reaper/reaper.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/storage/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/storage/consistency/actions.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/tracer/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/tracer/kronos.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/undertaker/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/constants.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/models.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/sautils.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/session.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/types.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/db/sqla/util.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/cache.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/dummy.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/globus.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/gsiftp.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/http_cache.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/mock.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/ngarc.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/posix.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/protocol.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/rclone.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/rfio.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/srm.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/ssh.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/storm.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/webdav.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/protocols/xrootd.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/rse/rsemanager.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/common_server.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/conftest.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/inputs/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/lfn2pfn_module_test.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/mocks/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/mocks/gfal2.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/rsemgr_api_test.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/ruciopytest/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/ruciopytest/plugin.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/ruciopytest/rucioxdist.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/temp_factories.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_abacus_account.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_abacus_collection_replica.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_abacus_rse.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_account.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_account_limits.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_api_external_representation.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_archive.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_auditor.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_auditor_hdfs.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_auditor_srmdumps.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_authentication.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_automatix.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_bad_replica.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_bb8.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_belleii.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_bin_rucio.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_boolean.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_clients.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_common_types.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_config.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_counter.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_credential.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_curl.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_daemons.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_dataset_replicas.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_db.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_did.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_did_meta_plugins.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_didtype.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_download.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_dumper.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_dumper_consistency.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_dumper_data_model.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_dumper_path_parsing.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_filter_engine.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_heartbeat.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_hermes.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_identity.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_impl_upload_download.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_import_export.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_judge_cleaner.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_judge_injector.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_judge_repairer.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_lifetime.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_message.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_meta.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_meta_did.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_module_import.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_monitor.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_multi_vo.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_naming_convention.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_oauthmanager.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_oidc.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_permission.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_pfns.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_ping.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_preparer.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_qos.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_quarantined_replica.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_reaper.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_redirect.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_replica.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_replica_recoverer.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_replica_sorting.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_request.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_root_proxy.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_expression_parser.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_lfn2path.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_gfal2.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_posix.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_rclone.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_rsync.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_srm.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_ssh.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_protocol_webdav.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rse_selector.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rucio_server.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_rule.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_schema_cms.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_scope.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_subscription.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_temporary_did.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_throttler.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_tpc.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_trace.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_transfer.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_undertaker.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_upload.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/tests/test_utils.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/transfertool/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/transfertool/globus.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/transfertool/globus_library.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/transfertool/mock.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/transfertool/transfertool.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/version.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/common.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/meta.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/replicas.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/tmp_dids.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/main.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio/web/rest/metrics.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/lib/rucio.egg-info/SOURCES.txt +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/pylintrc +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/pyproject.toml +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/requirements.txt +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/setup.cfg +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/setup.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/setuputil.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/tools/bootstrap.py +0 -0
- {rucio-1.30.6 → rucio-1.30.7}/tools/merge_rucio_configs.py +0 -0
- {rucio-1.30.6 → 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,
|
|
@@ -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,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
|
|
@@ -21,17 +21,23 @@ from rucio.common.utils import generate_uuid as uuid
|
|
|
21
21
|
from rucio.core.account import get_usage
|
|
22
22
|
from rucio.core.account_limit import set_local_account_limit
|
|
23
23
|
from rucio.core.did import add_did, attach_dids, detach_dids
|
|
24
|
-
from rucio.core.lock import get_replica_locks,
|
|
24
|
+
from rucio.core.lock import get_dataset_locks, get_replica_locks, get_replica_locks_for_rule_id
|
|
25
|
+
from rucio.core.replica import add_replica
|
|
25
26
|
from rucio.core.rse import add_rse_attribute
|
|
26
27
|
from rucio.core.rule import add_rule, get_rule
|
|
27
28
|
from rucio.daemons.abacus.account import account_update
|
|
28
29
|
from rucio.daemons.judge.evaluator import re_evaluator
|
|
29
|
-
from rucio.db.sqla.constants import DIDType
|
|
30
|
+
from rucio.db.sqla.constants import DIDType, LockState
|
|
30
31
|
from rucio.db.sqla.models import UpdatedDID
|
|
31
32
|
from rucio.db.sqla.session import transactional_session
|
|
33
|
+
from rucio.tests.common import RSE_namedtuple
|
|
32
34
|
from rucio.tests.common_server import get_vo
|
|
33
35
|
from rucio.tests.test_rule import create_files, tag_generator
|
|
34
36
|
|
|
37
|
+
from typing import TYPE_CHECKING
|
|
38
|
+
if TYPE_CHECKING:
|
|
39
|
+
from rucio.tests.temp_factories import TemporaryDidFactory, TemporaryRSEFactory
|
|
40
|
+
|
|
35
41
|
|
|
36
42
|
@pytest.fixture(scope="class")
|
|
37
43
|
def setup_class(request, rse_factory_unittest):
|
|
@@ -372,3 +378,140 @@ class TestJudgeEvaluator:
|
|
|
372
378
|
# Check if the Locks are created properly
|
|
373
379
|
for file in more_files:
|
|
374
380
|
assert len(get_replica_locks(scope=file['scope'], name=file['name'])) == 2
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
def test_judge_double_rule_on_container(
|
|
384
|
+
did_factory: "TemporaryDidFactory",
|
|
385
|
+
rse_factory: "TemporaryRSEFactory",
|
|
386
|
+
root_account: "InternalAccount"
|
|
387
|
+
):
|
|
388
|
+
"""
|
|
389
|
+
JUDGE EVALUATOR:
|
|
390
|
+
Test the judge evaluator on a container with two rules. The order in which
|
|
391
|
+
rules and datasets are added is relevant to the testcase.
|
|
392
|
+
|
|
393
|
+
1. A container C is created and a first dataset D1 is added to C.
|
|
394
|
+
2. A first rule A is created on the container C.
|
|
395
|
+
3. Then another dataset D2 is added to the container C.
|
|
396
|
+
4. Then a rule B is created on the container C.
|
|
397
|
+
5. Run judge-evaluator.
|
|
398
|
+
|
|
399
|
+
NOTE I am unsure whether the judge-evaluator is expected to run here.
|
|
400
|
+
|
|
401
|
+
We assert that both rules must be in state OK. Both rules must be applied to
|
|
402
|
+
each DID that can be traced back to the parent container C.
|
|
403
|
+
"""
|
|
404
|
+
# create RSE, setup
|
|
405
|
+
RSE = RSE_namedtuple(*rse_factory.make_mock_rse())
|
|
406
|
+
rsekey, rseval = tag_generator(), tag_generator()
|
|
407
|
+
add_rse_attribute(RSE.id, rsekey, rseval)
|
|
408
|
+
|
|
409
|
+
# 1. create container C, add dataset D1 (with file F1)
|
|
410
|
+
C = did_factory.make_container()
|
|
411
|
+
D1 = did_factory.make_dataset()
|
|
412
|
+
attach_dids(dids=[D1], account=root_account, **C)
|
|
413
|
+
F1 = did_factory.random_file_did()
|
|
414
|
+
add_replica(rse_id=RSE.id, account=root_account, bytes_=10, **F1)
|
|
415
|
+
attach_dids(dids=[F1], account=root_account, **D1)
|
|
416
|
+
|
|
417
|
+
# 2. Add rule A to container C
|
|
418
|
+
# > bind C to RSE using RSE name
|
|
419
|
+
A, = add_rule(
|
|
420
|
+
dids=[C],
|
|
421
|
+
account=root_account,
|
|
422
|
+
copies=1,
|
|
423
|
+
rse_expression=RSE.name,
|
|
424
|
+
grouping="DATASET",
|
|
425
|
+
weight=None,
|
|
426
|
+
lifetime=None,
|
|
427
|
+
locked=False,
|
|
428
|
+
subscription_id=None
|
|
429
|
+
)
|
|
430
|
+
|
|
431
|
+
# 3. Add dataset D2 to container C (with file F2)
|
|
432
|
+
D2 = did_factory.make_dataset()
|
|
433
|
+
attach_dids(dids=[D2], account=root_account, **C)
|
|
434
|
+
F2 = did_factory.random_file_did()
|
|
435
|
+
add_replica(rse_id=RSE.id, account=root_account, bytes_=10, **F2)
|
|
436
|
+
attach_dids(dids=[F2], account=root_account, **D2)
|
|
437
|
+
|
|
438
|
+
# 4. Add rule B to container C
|
|
439
|
+
# > bind C to RSE using RSE attribute
|
|
440
|
+
B, = add_rule(
|
|
441
|
+
dids=[C],
|
|
442
|
+
account=root_account,
|
|
443
|
+
copies=1,
|
|
444
|
+
rse_expression=f"{rsekey}={rseval}",
|
|
445
|
+
grouping="DATASET",
|
|
446
|
+
weight=None,
|
|
447
|
+
lifetime=None,
|
|
448
|
+
locked=False,
|
|
449
|
+
subscription_id=None
|
|
450
|
+
)
|
|
451
|
+
|
|
452
|
+
# 5. Run fake judge-evaluator
|
|
453
|
+
re_evaluator(once=True, did_limit=1000)
|
|
454
|
+
|
|
455
|
+
# Assertions
|
|
456
|
+
for ruleid in (A, B):
|
|
457
|
+
locks = get_replica_locks_for_rule_id(ruleid)
|
|
458
|
+
assert len(locks) == 2 # 2 locks
|
|
459
|
+
assert all([lock["state"] == LockState.OK for lock in locks]) # all OK
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
def test_judge_double_container_with_existing_rule(
|
|
463
|
+
did_factory: "TemporaryDidFactory",
|
|
464
|
+
rse_factory: "TemporaryRSEFactory",
|
|
465
|
+
root_account: "InternalAccount"
|
|
466
|
+
):
|
|
467
|
+
"""
|
|
468
|
+
JUDGE EVALUATOR:
|
|
469
|
+
Test the judge in attaching to a file structure with two nested
|
|
470
|
+
containers. The root container has a rule.
|
|
471
|
+
"""
|
|
472
|
+
RSE = RSE_namedtuple(*rse_factory.make_mock_rse())
|
|
473
|
+
|
|
474
|
+
# create container C1 with rule
|
|
475
|
+
C1 = did_factory.make_container()
|
|
476
|
+
|
|
477
|
+
add_rule(
|
|
478
|
+
dids=[C1],
|
|
479
|
+
account=root_account,
|
|
480
|
+
copies=1,
|
|
481
|
+
rse_expression=RSE.name,
|
|
482
|
+
grouping='DATASET',
|
|
483
|
+
weight=None,
|
|
484
|
+
lifetime=None,
|
|
485
|
+
locked=False,
|
|
486
|
+
subscription_id=None
|
|
487
|
+
)
|
|
488
|
+
|
|
489
|
+
# create setup: C2->D->F
|
|
490
|
+
C2 = did_factory.make_container()
|
|
491
|
+
D = did_factory.make_dataset()
|
|
492
|
+
F = did_factory.random_file_did()
|
|
493
|
+
add_replica(rse_id=RSE.id, account=root_account, bytes_=10, **F)
|
|
494
|
+
|
|
495
|
+
attach_dids(dids=[F], account=root_account, **D)
|
|
496
|
+
attach_dids(dids=[D], account=root_account, **C2)
|
|
497
|
+
|
|
498
|
+
# attach setup to C1 (result: C1->C2->D->F)
|
|
499
|
+
attach_dids(dids=[C2], account=root_account, **C1)
|
|
500
|
+
|
|
501
|
+
# fake judge
|
|
502
|
+
re_evaluator(once=True, did_limit=1000)
|
|
503
|
+
|
|
504
|
+
# assertions
|
|
505
|
+
replicalocks = get_replica_locks(**F)
|
|
506
|
+
assert len(replicalocks) == 1
|
|
507
|
+
assert replicalocks[0].state == LockState.OK
|
|
508
|
+
datasetlocks = list(get_dataset_locks(**D))
|
|
509
|
+
assert len(datasetlocks) == 1
|
|
510
|
+
assert datasetlocks[0]["state"] == LockState.OK
|
|
511
|
+
|
|
512
|
+
# detach again
|
|
513
|
+
detach_dids(dids=[C2], **C1)
|
|
514
|
+
re_evaluator(once=True, did_limit=1000)
|
|
515
|
+
|
|
516
|
+
assert not get_replica_locks(**F)
|
|
517
|
+
assert not get_replica_locks(**D)
|
|
@@ -95,3 +95,6 @@ class TestRseXROOTD(MgrTestCases):
|
|
|
95
95
|
def setup_obj(self, setup_rse_and_files, vo):
|
|
96
96
|
rse_settings, tmpdir, user = setup_rse_and_files
|
|
97
97
|
self.init(tmpdir=tmpdir, rse_settings=rse_settings, user=user, vo=vo)
|
|
98
|
+
|
|
99
|
+
def test_delete_mgr_ok_dir(self):
|
|
100
|
+
raise pytest.skip("Not implemented")
|
|
@@ -583,7 +583,7 @@ class FTS3CompletionMessageTransferStatusReport(Fts3TransferStatusReport):
|
|
|
583
583
|
reason = fts_message.get('t__error_message', None)
|
|
584
584
|
# job_state = fts_message.get('t_final_transfer_state', None)
|
|
585
585
|
new_state = None
|
|
586
|
-
if str(fts_message['t_final_transfer_state']) == FTS_COMPLETE_STATE.OK: # pylint:disable=no-member
|
|
586
|
+
if str(fts_message['t_final_transfer_state']) == FTS_COMPLETE_STATE.OK and not fts_message.get('is_archiving'): # pylint:disable=no-member
|
|
587
587
|
new_state = RequestState.DONE
|
|
588
588
|
elif str(fts_message['t_final_transfer_state']) == FTS_COMPLETE_STATE.ERROR:
|
|
589
589
|
request = self.request(session)
|
|
@@ -4,8 +4,8 @@ This file is automatically generated; Do not edit it. :)
|
|
|
4
4
|
'''
|
|
5
5
|
VERSION_INFO = {
|
|
6
6
|
'final': True,
|
|
7
|
-
'version': '1.30.
|
|
7
|
+
'version': '1.30.7',
|
|
8
8
|
'branch_nick': 'release-1.30',
|
|
9
|
-
'revision_id': '
|
|
10
|
-
'revno':
|
|
9
|
+
'revision_id': '93f5033cba845ef8ec0c0d52a014ffad79cf337c',
|
|
10
|
+
'revno': 12384
|
|
11
11
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|