rucio 35.2.0__tar.gz → 35.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rucio might be problematic. Click here for more details.
- {rucio-35.2.0 → rucio-35.3.0}/MANIFEST.in +1 -1
- {rucio-35.2.0 → rucio-35.3.0}/PKG-INFO +1 -1
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/baseclient.py +8 -3
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/dumper/consistency.py +3 -3
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/exception.py +22 -2
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/schema/__init__.py +6 -2
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/types.py +4 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/did.py +33 -33
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/did_meta_plugins/__init__.py +3 -1
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/did_meta_plugins/did_column_meta.py +1 -1
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/heartbeat.py +61 -61
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/lifetime_exception.py +6 -6
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/meta_conventions.py +6 -6
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/nongrid_trace.py +17 -4
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/permission/__init__.py +6 -2
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/replica.py +99 -99
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/rse.py +18 -18
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/rule.py +7 -7
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/trace.py +40 -25
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/storage/consistency/actions.py +3 -3
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/7541902bf173_add_didsfollowed_and_followevents_table.py +1 -1
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/models.py +10 -10
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/protocol.py +27 -13
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/vcsversion.py +3 -3
- {rucio-35.2.0 → rucio-35.3.0}/setup.cfg +1 -1
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_dumper_consistency.py +7 -7
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_heartbeat.py +9 -9
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_trace.py +4 -8
- {rucio-35.2.0 → rucio-35.3.0}/AUTHORS.rst +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/ChangeLog +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/LICENSE +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/README.md +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-abacus-account +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-abacus-collection-replica +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-abacus-rse +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-admin +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-atropos +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-auditor +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-automatix +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-bb8 +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-c3po +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-cache-client +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-cache-consumer +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-conveyor-finisher +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-conveyor-poller +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-conveyor-preparer +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-conveyor-receiver +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-conveyor-stager +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-conveyor-submitter +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-conveyor-throttler +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-dark-reaper +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-dumper +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-follower +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-hermes +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-judge-cleaner +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-judge-evaluator +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-judge-injector +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-judge-repairer +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-kronos +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-minos +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-minos-temporary-expiration +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-necromancer +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-oauth-manager +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-reaper +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-replica-recoverer +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-rse-decommissioner +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-storage-consistency-actions +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-transmogrifier +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/bin/rucio-undertaker +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/alembic.ini.template +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/alembic_offline.ini.template +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/globus-config.yml.template +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/ldap.cfg.template +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/mail_templates/rule_approval_request.tmpl +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/mail_templates/rule_approved_admin.tmpl +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/mail_templates/rule_approved_user.tmpl +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/mail_templates/rule_denied_admin.tmpl +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/mail_templates/rule_denied_user.tmpl +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/mail_templates/rule_ok_notification.tmpl +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/rse-accounts.cfg.template +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/rucio.cfg.template +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/etc/rucio_multi_vo.cfg.template +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/alembicrevision.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/accountclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/accountlimitclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/client.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/configclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/credentialclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/didclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/diracclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/downloadclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/exportclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/fileclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/importclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/lifetimeclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/lockclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/metaconventionsclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/pingclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/replicaclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/requestclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/rseclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/ruleclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/scopeclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/subscriptionclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/touchclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/client/uploadclient.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/cache.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/config.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/constants.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/constraints.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/didtype.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/dumper/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/dumper/data_models.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/dumper/path_parsing.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/extra.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/logging.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/pcache.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/plugins.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/policy.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/schema/atlas.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/schema/belleii.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/schema/domatpc.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/schema/escape.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/schema/generic.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/schema/icecube.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/stomp_utils.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/stopwatch.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/test_rucio_server.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/common/utils.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/account.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/account_counter.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/account_limit.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/authentication.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/config.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/credential.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/did_meta_plugins/did_meta_plugin_interface.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/did_meta_plugins/filter_engine.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/did_meta_plugins/json_meta.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/did_meta_plugins/mongo_meta.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/did_meta_plugins/postgres_meta.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/dirac.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/distance.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/exporter.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/identity.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/importer.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/lock.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/message.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/monitor.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/naming_convention.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/oidc.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/permission/atlas.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/permission/belleii.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/permission/escape.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/permission/generic.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/permission/generic_multi_vo.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/quarantined_replica.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/replica_sorter.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/request.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/rse_counter.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/rse_expression_parser.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/rse_selector.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/rule_grouping.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/scope.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/subscription.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/topology.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/transfer.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/vo.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/core/volatile_replica.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/abacus/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/abacus/account.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/abacus/collection_replica.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/abacus/rse.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/atropos/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/atropos/atropos.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/auditor/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/auditor/hdfs.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/auditor/srmdumps.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/automatix/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/automatix/automatix.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/badreplicas/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/badreplicas/minos.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/badreplicas/minos_temporary_expiration.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/badreplicas/necromancer.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/bb8/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/bb8/bb8.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/bb8/common.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/bb8/nuclei_background_rebalance.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/bb8/t2_background_rebalance.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/algorithms/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/algorithms/simple.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/algorithms/t2_free_space_only_pop_with_network.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/c3po.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/collectors/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/collectors/agis.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/collectors/free_space.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/collectors/jedi_did.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/collectors/mock_did.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/collectors/network_metrics.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/collectors/workload.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/utils/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/utils/dataset_cache.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/utils/expiring_dataset_cache.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/utils/expiring_list.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/utils/popularity.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/c3po/utils/timeseries.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/cache/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/cache/consumer.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/common.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/conveyor/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/conveyor/common.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/conveyor/finisher.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/conveyor/poller.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/conveyor/preparer.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/conveyor/receiver.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/conveyor/stager.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/conveyor/submitter.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/conveyor/throttler.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/follower/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/follower/follower.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/hermes/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/hermes/hermes.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/judge/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/judge/cleaner.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/judge/evaluator.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/judge/injector.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/judge/repairer.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/oauthmanager/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/oauthmanager/oauthmanager.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/reaper/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/reaper/dark_reaper.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/reaper/reaper.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/replicarecoverer/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/replicarecoverer/suspicious_replica_recoverer.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/rsedecommissioner/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/rsedecommissioner/config.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/rsedecommissioner/profiles/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/rsedecommissioner/profiles/atlas.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/rsedecommissioner/profiles/generic.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/rsedecommissioner/profiles/types.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/rsedecommissioner/rse_decommissioner.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/storage/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/storage/consistency/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/tracer/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/tracer/kronos.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/transmogrifier/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/transmogrifier/transmogrifier.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/undertaker/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/daemons/undertaker/undertaker.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/constants.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/env.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/01eaf73ab656_add_new_rule_notification_state_progress.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/0437a40dbfd1_add_eol_at_in_rules.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/0f1adb7a599a_create_transfer_hops_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/102efcf145f4_added_stuck_at_column_to_rules.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/13d4f70c66a9_introduce_transfer_limits.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/140fef722e91_cleanup_distances_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/14ec5aeb64cf_add_request_external_host.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/156fb5b5a14_add_request_type_to_requests_idx.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/1677d4d803c8_split_rse_availability_into_multiple.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/16a0aca82e12_create_index_on_table_replicas_path.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/1803333ac20f_adding_provenance_and_phys_group.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/1a29d6a9504c_add_didtype_chck_to_requests.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/1a80adff031a_create_index_on_rules_hist_recent.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/1c45d9730ca6_increase_identity_length.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/1d1215494e95_add_quarantined_replicas_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/1d96f484df21_asynchronous_rules_and_rule_approval.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/1f46c5f240ac_add_bytes_column_to_bad_replicas.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/1fc15ab60d43_add_message_history_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/2190e703eb6e_move_rse_settings_to_rse_attributes.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/21d6b9dc9961_add_mismatch_scheme_state_to_requests.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/22cf51430c78_add_availability_column_to_table_rses.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/22d887e4ec0a_create_sources_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/25821a8a45a3_remove_unique_constraint_on_requests.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/25fc855625cf_added_unique_constraint_to_rules.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/269fee20dee9_add_repair_cnt_to_locks.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/271a46ea6244_add_ignore_availability_column_to_rules.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/277b5fbb41d3_switch_heartbeats_executable.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/27e3a68927fb_remove_replicas_tombstone_and_replicas_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/2854cd9e168_added_rule_id_column.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/295289b5a800_processed_by_and__at_in_requests.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/2962ece31cf4_add_nbaccesses_column_in_the_did_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/2af3291ec4c_added_replicas_history_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/2b69addda658_add_columns_for_third_party_copy_read_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/2b8e7bcb4783_add_config_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/2ba5229cb54c_add_submitted_at_to_requests_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/2cbee484dcf9_added_column_volume_to_rse_transfer_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/2edee4a83846_add_source_to_requests_and_requests_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/2eef46be23d4_change_tokens_pk.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/2f648fc909f3_index_in_rule_history_on_scope_name.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/3082b8cef557_add_naming_convention_table_and_closed_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/30fa38b6434e_add_index_on_service_column_in_the_message_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/3152492b110b_added_staging_area_column.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/32c7d2783f7e_create_bad_replicas_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/3345511706b8_replicas_table_pk_definition_is_in_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/35ef10d1e11b_change_index_on_table_requests.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/379a19b5332d_create_rse_limits_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/384b96aa0f60_created_rule_history_tables.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/3ac1660a1a72_extend_distance_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/3ad36e2268b0_create_collection_replicas_updates_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/3c9df354071b_extend_waiting_request_state.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/3d9813fab443_add_a_new_state_lost_in_badfilesstatus.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/40ad39ce3160_add_transferred_at_to_requests_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/4207be2fd914_add_notification_column_to_rules.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/42db2617c364_create_index_on_requests_external_id.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/436827b13f82_added_column_activity_to_table_requests.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/44278720f774_update_requests_typ_sta_upd_idx_index.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/45378a1e76a8_create_collection_replica_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/469d262be19_removing_created_at_index.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/4783c1f49cb4_create_distance_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/49a21b4d4357_create_index_on_table_tokens.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/4a2cbedda8b9_add_source_replica_expression_column_to_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/4a7182d9578b_added_bytes_length_accessed_at_columns.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/4bab9edd01fc_create_index_on_requests_rule_id.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/4c3a4acfe006_new_attr_account_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/4cf0a2e127d4_adding_transient_metadata.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/4df2c5ddabc0_remove_temporary_dids.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/50280c53117c_add_qos_class_to_rse.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/52153819589c_add_rse_id_to_replicas_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/52fd9f4916fa_added_activity_to_rules.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/53b479c3cb0f_fix_did_meta_table_missing_updated_at_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/5673b4b6e843_add_wfms_metadata_to_rule_tables.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/575767d9f89_added_source_history_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/58bff7008037_add_started_at_to_requests.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/58c8b78301ab_rename_callback_to_message.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/5f139f77382a_added_child_rule_id_column.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/688ef1840840_adding_did_meta_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/6e572a9bfbf3_add_new_split_container_column_to_rules.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/70587619328_add_comment_column_for_subscriptions.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/739064d31565_remove_history_table_pks.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/7ec22226cdbf_new_replica_state_for_temporary_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/810a41685bc1_added_columns_rse_transfer_limits.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/83f991c63a93_correct_rse_expression_length.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/8523998e2e76_increase_size_of_extended_attributes_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/8ea9122275b1_adding_missing_function_based_indices.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/90f47792bb76_add_clob_payload_to_messages.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/914b8f02df38_new_table_for_lifetime_model_exceptions.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/94a5961ddbf2_add_estimator_columns.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/9a1b149a2044_add_saml_identity_type.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/9a45bc4ea66d_add_vp_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/9eb936a81eb1_true_is_true.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/a08fa8de1545_transfer_stats_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/a118956323f8_added_vo_table_and_vo_col_to_rse.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/a193a275255c_add_status_column_in_messages.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/a5f6f6e928a7_1_7_0.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/a616581ee47_added_columns_to_table_requests.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/a6eb23955c28_state_idx_non_functional.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/a74275a1ad30_added_global_quota_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/a93e4e47bda_heartbeats.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/ae2a56fcc89_added_comment_column_to_rules.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/b0070f3695c8_add_deletedidmeta_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/b4293a99f344_added_column_identity_to_table_tokens.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/b5493606bbf5_fix_primary_key_for_subscription_history.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/b7d287de34fd_removal_of_replicastate_source.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/b818052fa670_add_index_to_quarantined_replicas.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/b8caac94d7f0_add_comments_column_for_subscriptions_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/b96a1c7e1cc4_new_bad_pfns_table_and_bad_replicas_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/bb695f45c04_extend_request_state.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/bc68e9946deb_add_staging_timestamps_to_request.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/bf3baa1c1474_correct_pk_and_idx_for_history_tables.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/c0937668555f_add_qos_policy_map_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/c129ccdb2d5_add_lumiblocknr_to_dids.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/ccdbcd48206e_add_did_type_column_index_on_did_meta_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/cebad904c4dd_new_payload_column_for_heartbeats.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/d1189a09c6e0_oauth2_0_and_jwt_feature_support_adding_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/d23453595260_extend_request_state_for_preparer.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/d6dceb1de2d_added_purge_column_to_rules.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/d6e2c3b2cf26_remove_third_party_copy_column_from_rse.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/d91002c5841_new_account_limits_table.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/e138c364ebd0_extending_columns_for_filter_and_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/e59300c8b179_support_for_archive.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/f1b14a8c2ac1_postgres_use_check_constraints.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/f41ffe206f37_oracle_global_temporary_tables.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/f85a2962b021_adding_transfertool_column_to_requests_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/fa7a7d78b602_increase_refresh_token_size.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/fb28a95fe288_add_replicas_rse_id_tombstone_idx.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/fe1a65b176c9_set_third_party_copy_read_and_write_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/migrate_repo/versions/fe8ea2fa9788_added_third_party_copy_column_to_rse_.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/sautils.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/session.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/types.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/db/sqla/util.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/account.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/account_limit.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/authentication.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/config.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/credential.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/did.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/dirac.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/exporter.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/heartbeat.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/identity.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/importer.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/lifetime_exception.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/lock.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/meta_conventions.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/permission.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/quarantined_replica.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/replica.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/request.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/rse.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/rule.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/scope.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/subscription.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/gateway/vo.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/bittorrent.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/cache.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/dummy.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/gfal.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/globus.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/gsiftp.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/http_cache.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/mock.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/ngarc.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/posix.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/rclone.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/rfio.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/srm.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/ssh.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/storm.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/webdav.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/protocols/xrootd.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/rse/rsemanager.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/tests/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/tests/common.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/tests/common_server.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/transfertool/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/transfertool/bittorrent.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/transfertool/bittorrent_driver.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/transfertool/bittorrent_driver_qbittorrent.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/transfertool/fts3.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/transfertool/fts3_plugins.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/transfertool/globus.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/transfertool/globus_library.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/transfertool/mock.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/transfertool/transfertool.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/version.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/authenticated_bp.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/__init__.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/accountlimits.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/accounts.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/archives.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/auth.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/common.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/config.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/credentials.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/dids.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/dirac.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/export.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/heartbeats.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/identities.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/import.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/lifetime_exceptions.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/locks.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/main.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/meta_conventions.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/metrics.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/nongrid_traces.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/ping.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/redirect.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/replicas.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/requests.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/rses.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/rules.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/scopes.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/subscriptions.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_crash.html +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/templates/auth_granted.html +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/traces.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/types.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/flaskapi/v1/vos.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/main.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/metrics.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio/web/rest/ping.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/lib/rucio.egg-info/SOURCES.txt +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/pylintrc +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/pyproject.toml +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/requirements/requirements.server.txt +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/setup.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/setuputil.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_abacus_account.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_abacus_collection_replica.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_abacus_rse.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_account.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_account_limits.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_archive.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_auditor.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_auditor_hdfs.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_auditor_srmdumps.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_authentication.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_automatix.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_bad_replica.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_bb8.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_belleii.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_bin_rucio.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_boolean.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_clients.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_common_types.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_config.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_conveyor.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_conveyor_submitter.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_counter.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_credential.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_curl.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_daemons.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_dataset_replicas.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_db.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_did.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_did_meta_plugins.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_didtype.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_download.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_dumper.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_dumper_data_model.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_dumper_path_parsing.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_filter_engine.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_gateway_external_representation.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_hermes.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_identity.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_impl_upload_download.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_import_export.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_judge_cleaner.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_judge_evaluator.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_judge_injector.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_judge_repairer.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_lifetime.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_message.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_meta_conventions.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_meta_did.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_module_import.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_monitor.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_multi_vo.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_naming_convention.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_oauthmanager.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_oidc.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_permission.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_pfns.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_ping.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_preparer.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_qos.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_quarantined_replica.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_reaper.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_redirect.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_replica.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_replica_recoverer.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_replica_sorting.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_request.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_root_proxy.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rse.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rse_expression_parser.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rse_lfn2path.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rse_protocol_gfal2.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rse_protocol_gfal2_impl.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rse_protocol_posix.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rse_protocol_rclone.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rse_protocol_rsync.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rse_protocol_srm.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rse_protocol_ssh.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rse_protocol_webdav.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rse_protocol_xrootd.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rse_selector.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rucio_server.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_rule.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_scope.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_subscription.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_throttler.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_tpc.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_transfer.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_transfer_plugins.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_undertaker.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_upload.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tests/test_utils.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tools/bootstrap.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tools/merge_rucio_configs.py +0 -0
- {rucio-35.2.0 → rucio-35.3.0}/tools/reset_database.py +0 -0
|
@@ -137,6 +137,7 @@ class BaseClient:
|
|
|
137
137
|
self.logger.debug('No trace_host passed. Using rucio_host instead')
|
|
138
138
|
|
|
139
139
|
self.list_hosts = [self.host]
|
|
140
|
+
self.account = account
|
|
140
141
|
self.ca_cert = ca_cert
|
|
141
142
|
self.auth_token = ""
|
|
142
143
|
self.headers = {}
|
|
@@ -170,10 +171,11 @@ class BaseClient:
|
|
|
170
171
|
except (NoOptionError, NoSectionError):
|
|
171
172
|
self.logger.debug('No ca_cert found in configuration. Falling back to Mozilla default CA bundle (certifi).')
|
|
172
173
|
self.ca_cert = True
|
|
174
|
+
except ConfigNotFound:
|
|
175
|
+
self.logger.debug('No configuration found. Falling back to Mozilla default CA bundle (certifi).')
|
|
176
|
+
self.ca_cert = True
|
|
173
177
|
|
|
174
|
-
if account is
|
|
175
|
-
self.account = account
|
|
176
|
-
else:
|
|
178
|
+
if account is None:
|
|
177
179
|
self.logger.debug('No account passed. Trying to get it from the RUCIO_ACCOUNT environment variable or the config file.')
|
|
178
180
|
try:
|
|
179
181
|
self.account = environ['RUCIO_ACCOUNT']
|
|
@@ -196,6 +198,9 @@ class BaseClient:
|
|
|
196
198
|
except (NoOptionError, NoSectionError):
|
|
197
199
|
self.logger.debug('No VO found. Using default VO.')
|
|
198
200
|
self.vo = 'def'
|
|
201
|
+
except ConfigNotFound:
|
|
202
|
+
self.logger.debug('No configuration found. Using default VO.')
|
|
203
|
+
self.vo = 'def'
|
|
199
204
|
|
|
200
205
|
self.auth_token_file_path, self.token_exp_epoch_file, self.token_file, self.token_path = self._get_auth_tokens()
|
|
201
206
|
self.__authenticate()
|
|
@@ -163,9 +163,9 @@ def _try_to_advance(it, default=None):
|
|
|
163
163
|
return el.strip()
|
|
164
164
|
|
|
165
165
|
|
|
166
|
-
def
|
|
166
|
+
def min_value(*values):
|
|
167
167
|
'''
|
|
168
|
-
Minimum between the
|
|
168
|
+
Minimum between the input values, ignoring None
|
|
169
169
|
'''
|
|
170
170
|
values = [value for value in values if value is not None]
|
|
171
171
|
if len(values) == 0:
|
|
@@ -201,7 +201,7 @@ def compare3(it0, it1, it2):
|
|
|
201
201
|
path0, status0 = split_if_not_none(v0)
|
|
202
202
|
path2, status2 = split_if_not_none(v2)
|
|
203
203
|
|
|
204
|
-
vmin =
|
|
204
|
+
vmin = min_value(path0, v1, path2)
|
|
205
205
|
in0 = in1 = in2 = False
|
|
206
206
|
in0_status = in2_status = None
|
|
207
207
|
|
|
@@ -962,11 +962,11 @@ class NoDistance(RucioException):
|
|
|
962
962
|
|
|
963
963
|
class PolicyPackageNotFound(RucioException):
|
|
964
964
|
"""
|
|
965
|
-
The policy package specified in the config file
|
|
965
|
+
The policy package specified in the config file was not found
|
|
966
966
|
"""
|
|
967
967
|
def __init__(self, *args, **kwargs):
|
|
968
968
|
super(PolicyPackageNotFound, self).__init__(*args, **kwargs)
|
|
969
|
-
self._message = 'The specified policy package
|
|
969
|
+
self._message = 'The specified policy package was not found'
|
|
970
970
|
self.error_code = 93
|
|
971
971
|
|
|
972
972
|
|
|
@@ -1099,3 +1099,23 @@ class SortingAlgorithmNotSupported(RucioException):
|
|
|
1099
1099
|
super(SortingAlgorithmNotSupported, self).__init__(*args, **kwargs)
|
|
1100
1100
|
self._message = 'Sorting algorithm is not supported.'
|
|
1101
1101
|
self.error_code = 106
|
|
1102
|
+
|
|
1103
|
+
|
|
1104
|
+
class ErrorLoadingPolicyPackage(RucioException):
|
|
1105
|
+
"""
|
|
1106
|
+
An error occurred while loading the policy package.
|
|
1107
|
+
"""
|
|
1108
|
+
def __init__(self, *args, **kwargs):
|
|
1109
|
+
super(ErrorLoadingPolicyPackage, self).__init__(*args, **kwargs)
|
|
1110
|
+
self._message = 'An error occurred while loading the specified policy package'
|
|
1111
|
+
self.error_code = 107
|
|
1112
|
+
|
|
1113
|
+
|
|
1114
|
+
class TraceValidationSchemaNotFound(RucioException):
|
|
1115
|
+
"""
|
|
1116
|
+
Trace validation schema not found.
|
|
1117
|
+
"""
|
|
1118
|
+
def __init__(self, *args, **kwargs):
|
|
1119
|
+
super(TraceValidationSchemaNotFound, self).__init__(*args, **kwargs)
|
|
1120
|
+
self._message = 'Trace validation schema not found.'
|
|
1121
|
+
self.error_code = 108
|
|
@@ -60,8 +60,10 @@ if not multivo:
|
|
|
60
60
|
|
|
61
61
|
try:
|
|
62
62
|
module = importlib.import_module(POLICY)
|
|
63
|
-
except
|
|
63
|
+
except ModuleNotFoundError:
|
|
64
64
|
raise exception.PolicyPackageNotFound('Module ' + POLICY + ' not found')
|
|
65
|
+
except ImportError:
|
|
66
|
+
raise exception.ErrorLoadingPolicyPackage('An error occurred while loading module ' + POLICY)
|
|
65
67
|
|
|
66
68
|
schema_modules["def"] = module
|
|
67
69
|
scope_name_regexps.append(module.SCOPE_NAME_REGEXP)
|
|
@@ -90,8 +92,10 @@ def load_schema_for_vo(vo: str) -> None:
|
|
|
90
92
|
|
|
91
93
|
try:
|
|
92
94
|
module = importlib.import_module(POLICY)
|
|
93
|
-
except
|
|
95
|
+
except ModuleNotFoundError:
|
|
94
96
|
raise exception.PolicyPackageNotFound('Module ' + POLICY + ' not found')
|
|
97
|
+
except ImportError:
|
|
98
|
+
raise exception.ErrorLoadingPolicyPackage('An error occurred while loading module ' + POLICY)
|
|
95
99
|
|
|
96
100
|
schema_modules[vo] = module
|
|
97
101
|
|
|
@@ -927,12 +927,12 @@ def delete_dids(
|
|
|
927
927
|
|
|
928
928
|
# Prepare the common part of the query for updating bad replicas if they exist
|
|
929
929
|
bad_replica_stmt = update(
|
|
930
|
-
models.
|
|
930
|
+
models.BadReplica
|
|
931
931
|
).where(
|
|
932
|
-
models.
|
|
932
|
+
models.BadReplica.state == BadFilesStatus.BAD
|
|
933
933
|
).values({
|
|
934
|
-
models.
|
|
935
|
-
models.
|
|
934
|
+
models.BadReplica.state: BadFilesStatus.DELETED,
|
|
935
|
+
models.BadReplica.updated_at: datetime.utcnow(),
|
|
936
936
|
}).execution_options(
|
|
937
937
|
synchronize_session=False
|
|
938
938
|
)
|
|
@@ -956,8 +956,8 @@ def delete_dids(
|
|
|
956
956
|
exists(
|
|
957
957
|
select(1)
|
|
958
958
|
).where(
|
|
959
|
-
and_(models.
|
|
960
|
-
models.
|
|
959
|
+
and_(models.BadReplica.scope == temp_table.scope,
|
|
960
|
+
models.BadReplica.name == temp_table.name)
|
|
961
961
|
)
|
|
962
962
|
)
|
|
963
963
|
session.execute(stmt)
|
|
@@ -1002,8 +1002,8 @@ def delete_dids(
|
|
|
1002
1002
|
exists(
|
|
1003
1003
|
select(1)
|
|
1004
1004
|
).where(
|
|
1005
|
-
and_(models.
|
|
1006
|
-
models.
|
|
1005
|
+
and_(models.BadReplica.scope == resolved_files_temp_table.scope,
|
|
1006
|
+
models.BadReplica.name == resolved_files_temp_table.name)
|
|
1007
1007
|
)
|
|
1008
1008
|
)
|
|
1009
1009
|
session.execute(stmt)
|
|
@@ -1085,13 +1085,13 @@ def delete_dids(
|
|
|
1085
1085
|
|
|
1086
1086
|
with METRICS.timer('delete_dids.dids_followed'):
|
|
1087
1087
|
stmt = delete(
|
|
1088
|
-
models.
|
|
1088
|
+
models.DidFollowed
|
|
1089
1089
|
).where(
|
|
1090
1090
|
exists(
|
|
1091
1091
|
select(1)
|
|
1092
1092
|
).where(
|
|
1093
|
-
and_(models.
|
|
1094
|
-
models.
|
|
1093
|
+
and_(models.DidFollowed.scope == temp_table.scope,
|
|
1094
|
+
models.DidFollowed.name == temp_table.name)
|
|
1095
1095
|
)
|
|
1096
1096
|
).execution_options(
|
|
1097
1097
|
synchronize_session=False
|
|
@@ -2655,8 +2655,8 @@ def add_dids_to_followed(
|
|
|
2655
2655
|
)
|
|
2656
2656
|
did = session.execute(stmt).scalar_one()
|
|
2657
2657
|
# Add the queried to the followed table.
|
|
2658
|
-
new_did_followed = models.
|
|
2659
|
-
|
|
2658
|
+
new_did_followed = models.DidFollowed(scope=did.scope, name=did.name, account=account,
|
|
2659
|
+
did_type=did.did_type)
|
|
2660
2660
|
|
|
2661
2661
|
new_did_followed.save(session=session, flush=False)
|
|
2662
2662
|
|
|
@@ -2681,10 +2681,10 @@ def get_users_following_did(
|
|
|
2681
2681
|
"""
|
|
2682
2682
|
try:
|
|
2683
2683
|
stmt = select(
|
|
2684
|
-
models.
|
|
2684
|
+
models.DidFollowed
|
|
2685
2685
|
).where(
|
|
2686
|
-
and_(models.
|
|
2687
|
-
models.
|
|
2686
|
+
and_(models.DidFollowed.scope == scope,
|
|
2687
|
+
models.DidFollowed.name == name)
|
|
2688
2688
|
)
|
|
2689
2689
|
for user in session.execute(stmt).scalars().all():
|
|
2690
2690
|
# Return a dictionary of users to be rendered as json.
|
|
@@ -2731,11 +2731,11 @@ def remove_dids_from_followed(
|
|
|
2731
2731
|
try:
|
|
2732
2732
|
for did in dids:
|
|
2733
2733
|
stmt = delete(
|
|
2734
|
-
models.
|
|
2734
|
+
models.DidFollowed
|
|
2735
2735
|
).where(
|
|
2736
|
-
and_(models.
|
|
2737
|
-
models.
|
|
2738
|
-
models.
|
|
2736
|
+
and_(models.DidFollowed.scope == did['scope'],
|
|
2737
|
+
models.DidFollowed.name == did['name'],
|
|
2738
|
+
models.DidFollowed.account == account)
|
|
2739
2739
|
).execution_options(
|
|
2740
2740
|
synchronize_session=False
|
|
2741
2741
|
)
|
|
@@ -2754,7 +2754,7 @@ def trigger_event(
|
|
|
2754
2754
|
session: "Session"
|
|
2755
2755
|
) -> None:
|
|
2756
2756
|
"""
|
|
2757
|
-
Records changes occurring in the did to the
|
|
2757
|
+
Records changes occurring in the did to the FollowEvent table
|
|
2758
2758
|
|
|
2759
2759
|
:param scope: The scope name.
|
|
2760
2760
|
:param name: The data identifier name.
|
|
@@ -2764,15 +2764,15 @@ def trigger_event(
|
|
|
2764
2764
|
"""
|
|
2765
2765
|
try:
|
|
2766
2766
|
stmt = select(
|
|
2767
|
-
models.
|
|
2767
|
+
models.DidFollowed
|
|
2768
2768
|
).where(
|
|
2769
|
-
and_(models.
|
|
2770
|
-
models.
|
|
2769
|
+
and_(models.DidFollowed.scope == scope,
|
|
2770
|
+
models.DidFollowed.name == name)
|
|
2771
2771
|
)
|
|
2772
2772
|
for did in session.execute(stmt).scalars().all():
|
|
2773
2773
|
# Create a new event using the specified parameters.
|
|
2774
|
-
new_event = models.
|
|
2775
|
-
|
|
2774
|
+
new_event = models.FollowEvent(scope=scope, name=name, account=did.account,
|
|
2775
|
+
did_type=did.did_type, event_type=event_type, payload=payload)
|
|
2776
2776
|
new_event.save(session=session, flush=False)
|
|
2777
2777
|
|
|
2778
2778
|
session.flush()
|
|
@@ -2792,11 +2792,11 @@ def create_reports(
|
|
|
2792
2792
|
|
|
2793
2793
|
:param session: The database session in use.
|
|
2794
2794
|
"""
|
|
2795
|
-
# Query the
|
|
2795
|
+
# Query the FollowEvent table
|
|
2796
2796
|
stmt = select(
|
|
2797
|
-
models.
|
|
2797
|
+
models.FollowEvent
|
|
2798
2798
|
).order_by(
|
|
2799
|
-
models.
|
|
2799
|
+
models.FollowEvent.created_at
|
|
2800
2800
|
)
|
|
2801
2801
|
|
|
2802
2802
|
# Use heartbeat mechanism to select a chunk of events based on the hashed account
|
|
@@ -2821,11 +2821,11 @@ def create_reports(
|
|
|
2821
2821
|
account = event.account
|
|
2822
2822
|
# Clean up the event after creating the report
|
|
2823
2823
|
stmt = delete(
|
|
2824
|
-
models.
|
|
2824
|
+
models.FollowEvent
|
|
2825
2825
|
).where(
|
|
2826
|
-
and_(models.
|
|
2827
|
-
models.
|
|
2828
|
-
models.
|
|
2826
|
+
and_(models.FollowEvent.scope == event.scope,
|
|
2827
|
+
models.FollowEvent.name == event.name,
|
|
2828
|
+
models.FollowEvent.account == event.account)
|
|
2829
2829
|
).execution_options(
|
|
2830
2830
|
synchronize_session=False
|
|
2831
2831
|
)
|
|
@@ -61,8 +61,10 @@ for meta_module_path in METADATA_PLUGIN_MODULE_PATHS:
|
|
|
61
61
|
base_class = meta_module_path.split(".")[-1]
|
|
62
62
|
metadata_plugin_module = getattr(importlib.import_module(base_module), base_class)()
|
|
63
63
|
METADATA_PLUGIN_MODULES.append(metadata_plugin_module)
|
|
64
|
-
except
|
|
64
|
+
except ModuleNotFoundError:
|
|
65
65
|
raise exception.PolicyPackageNotFound('Module ' + meta_module_path + ' not found')
|
|
66
|
+
except ImportError:
|
|
67
|
+
raise exception.ErrorLoadingPolicyPackage('An error occurred while loading module ' + meta_module_path)
|
|
66
68
|
|
|
67
69
|
# Set restricted character set for metadata in form character: reason
|
|
68
70
|
#
|
|
@@ -20,7 +20,7 @@ from sqlalchemy import and_, delete, func, select, update
|
|
|
20
20
|
|
|
21
21
|
from rucio.common.exception import DatabaseException
|
|
22
22
|
from rucio.common.utils import pid_exists
|
|
23
|
-
from rucio.db.sqla.models import
|
|
23
|
+
from rucio.db.sqla.models import Heartbeat
|
|
24
24
|
from rucio.db.sqla.session import read_session, transactional_session
|
|
25
25
|
|
|
26
26
|
if TYPE_CHECKING:
|
|
@@ -93,36 +93,36 @@ def _sanity_check(
|
|
|
93
93
|
:param session: The database session in use.
|
|
94
94
|
"""
|
|
95
95
|
base_stmt = select(
|
|
96
|
-
|
|
96
|
+
Heartbeat.pid
|
|
97
97
|
).distinct(
|
|
98
98
|
).where(
|
|
99
|
-
|
|
99
|
+
Heartbeat.hostname == hostname
|
|
100
100
|
)
|
|
101
101
|
if executable:
|
|
102
102
|
if not hash_executable:
|
|
103
103
|
hash_executable = calc_hash(executable)
|
|
104
104
|
|
|
105
105
|
stmt = base_stmt.where(
|
|
106
|
-
|
|
106
|
+
Heartbeat.executable == hash_executable
|
|
107
107
|
)
|
|
108
108
|
for pid in session.execute(stmt).scalars().all():
|
|
109
109
|
if not pid_exists(pid):
|
|
110
110
|
stmt = delete(
|
|
111
|
-
|
|
111
|
+
Heartbeat
|
|
112
112
|
).where(
|
|
113
|
-
and_(
|
|
114
|
-
|
|
115
|
-
|
|
113
|
+
and_(Heartbeat.executable == hash_executable,
|
|
114
|
+
Heartbeat.hostname == hostname,
|
|
115
|
+
Heartbeat.pid == pid)
|
|
116
116
|
)
|
|
117
117
|
session.execute(stmt)
|
|
118
118
|
else:
|
|
119
119
|
for pid in session.execute(base_stmt).scalars().all():
|
|
120
120
|
if not pid_exists(pid):
|
|
121
121
|
stmt = delete(
|
|
122
|
-
|
|
122
|
+
Heartbeat
|
|
123
123
|
).where(
|
|
124
|
-
and_(
|
|
125
|
-
|
|
124
|
+
and_(Heartbeat.hostname == hostname,
|
|
125
|
+
Heartbeat.pid == pid)
|
|
126
126
|
)
|
|
127
127
|
session.execute(stmt)
|
|
128
128
|
|
|
@@ -172,45 +172,45 @@ def live(
|
|
|
172
172
|
|
|
173
173
|
# upsert the heartbeat
|
|
174
174
|
stmt = update(
|
|
175
|
-
|
|
175
|
+
Heartbeat
|
|
176
176
|
).where(
|
|
177
|
-
and_(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
177
|
+
and_(Heartbeat.executable == hash_executable,
|
|
178
|
+
Heartbeat.hostname == hostname,
|
|
179
|
+
Heartbeat.pid == pid,
|
|
180
|
+
Heartbeat.thread_id == thread_id)
|
|
181
181
|
).values({
|
|
182
|
-
|
|
183
|
-
|
|
182
|
+
Heartbeat.updated_at: datetime.datetime.utcnow(),
|
|
183
|
+
Heartbeat.payload: payload
|
|
184
184
|
})
|
|
185
185
|
if not session.execute(stmt).rowcount:
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
186
|
+
Heartbeat(executable=hash_executable,
|
|
187
|
+
readable=executable[:Heartbeat.readable.property.columns[0].type.length],
|
|
188
|
+
hostname=hostname,
|
|
189
|
+
pid=pid,
|
|
190
|
+
thread_id=thread_id,
|
|
191
|
+
thread_name=thread_name,
|
|
192
|
+
payload=payload).save(session=session)
|
|
193
193
|
|
|
194
194
|
# assign thread identifier
|
|
195
195
|
stmt = select(
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
196
|
+
Heartbeat.hostname,
|
|
197
|
+
Heartbeat.pid,
|
|
198
|
+
Heartbeat.thread_id
|
|
199
199
|
).with_hint(
|
|
200
|
-
|
|
200
|
+
Heartbeat,
|
|
201
201
|
'INDEX(HEARTBEATS HEARTBEATS_PK)',
|
|
202
202
|
'oracle'
|
|
203
203
|
).where(
|
|
204
|
-
and_(
|
|
205
|
-
|
|
204
|
+
and_(Heartbeat.executable == hash_executable,
|
|
205
|
+
Heartbeat.updated_at >= datetime.datetime.utcnow() - datetime.timedelta(seconds=older_than))
|
|
206
206
|
).group_by(
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
207
|
+
Heartbeat.hostname,
|
|
208
|
+
Heartbeat.pid,
|
|
209
|
+
Heartbeat.thread_id
|
|
210
210
|
).order_by(
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
211
|
+
Heartbeat.hostname,
|
|
212
|
+
Heartbeat.pid,
|
|
213
|
+
Heartbeat.thread_id
|
|
214
214
|
)
|
|
215
215
|
result = session.execute(stmt).all()
|
|
216
216
|
|
|
@@ -252,17 +252,17 @@ def die(
|
|
|
252
252
|
hash_executable = calc_hash(executable)
|
|
253
253
|
|
|
254
254
|
stmt = delete(
|
|
255
|
-
|
|
255
|
+
Heartbeat
|
|
256
256
|
).where(
|
|
257
|
-
and_(
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
257
|
+
and_(Heartbeat.executable == hash_executable,
|
|
258
|
+
Heartbeat.hostname == hostname,
|
|
259
|
+
Heartbeat.pid == pid,
|
|
260
|
+
Heartbeat.thread_id == thread.ident)
|
|
261
261
|
)
|
|
262
262
|
|
|
263
263
|
if older_than:
|
|
264
264
|
stmt = stmt.where(
|
|
265
|
-
|
|
265
|
+
Heartbeat.updated_at < datetime.datetime.utcnow() - datetime.timedelta(seconds=older_than)
|
|
266
266
|
)
|
|
267
267
|
session.execute(stmt)
|
|
268
268
|
|
|
@@ -277,12 +277,12 @@ def cardiac_arrest(older_than: Optional[int] = None, *, session: "Session") -> N
|
|
|
277
277
|
"""
|
|
278
278
|
|
|
279
279
|
stmt = delete(
|
|
280
|
-
|
|
280
|
+
Heartbeat
|
|
281
281
|
)
|
|
282
282
|
|
|
283
283
|
if older_than:
|
|
284
284
|
stmt = stmt.where(
|
|
285
|
-
|
|
285
|
+
Heartbeat.updated_at < datetime.datetime.utcnow() - datetime.timedelta(seconds=older_than)
|
|
286
286
|
)
|
|
287
287
|
session.execute(stmt)
|
|
288
288
|
|
|
@@ -298,17 +298,17 @@ def list_heartbeats(*, session: "Session") -> list["HeartbeatDict"]:
|
|
|
298
298
|
"""
|
|
299
299
|
|
|
300
300
|
stmt = select(
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
301
|
+
Heartbeat.readable,
|
|
302
|
+
Heartbeat.hostname,
|
|
303
|
+
Heartbeat.pid,
|
|
304
|
+
Heartbeat.thread_name,
|
|
305
|
+
Heartbeat.updated_at,
|
|
306
|
+
Heartbeat.created_at,
|
|
307
|
+
Heartbeat.payload
|
|
308
308
|
).order_by(
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
309
|
+
Heartbeat.readable,
|
|
310
|
+
Heartbeat.hostname,
|
|
311
|
+
Heartbeat.thread_name
|
|
312
312
|
)
|
|
313
313
|
|
|
314
314
|
result = session.execute(stmt).all()
|
|
@@ -340,15 +340,15 @@ def list_payload_counts(
|
|
|
340
340
|
if not hash_executable:
|
|
341
341
|
hash_executable = calc_hash(executable)
|
|
342
342
|
stmt = select(
|
|
343
|
-
|
|
344
|
-
func.count(
|
|
343
|
+
Heartbeat.payload,
|
|
344
|
+
func.count(Heartbeat.payload)
|
|
345
345
|
).where(
|
|
346
|
-
and_(
|
|
347
|
-
|
|
346
|
+
and_(Heartbeat.executable == hash_executable,
|
|
347
|
+
Heartbeat.updated_at >= datetime.datetime.utcnow() - datetime.timedelta(seconds=older_than))
|
|
348
348
|
).group_by(
|
|
349
|
-
|
|
349
|
+
Heartbeat.payload
|
|
350
350
|
).order_by(
|
|
351
|
-
|
|
351
|
+
Heartbeat.payload
|
|
352
352
|
)
|
|
353
353
|
|
|
354
354
|
return dict((payload, count) for payload, count in session.execute(stmt).all() if payload)
|
|
@@ -56,9 +56,9 @@ def list_exceptions(
|
|
|
56
56
|
|
|
57
57
|
state_clause = []
|
|
58
58
|
if states:
|
|
59
|
-
state_clause = [models.
|
|
59
|
+
state_clause = [models.LifetimeException.state == state for state in states]
|
|
60
60
|
|
|
61
|
-
query = select(models.
|
|
61
|
+
query = select(models.LifetimeException)
|
|
62
62
|
if state_clause != []:
|
|
63
63
|
query = query.where(or_(*state_clause))
|
|
64
64
|
if exception_id:
|
|
@@ -201,8 +201,8 @@ def __add_exception(
|
|
|
201
201
|
did_type = DIDType[did['did_type']]
|
|
202
202
|
else:
|
|
203
203
|
did_type = did['did_type']
|
|
204
|
-
new_exception = models.
|
|
205
|
-
|
|
204
|
+
new_exception = models.LifetimeException(id=exception_id, scope=did['scope'], name=did['name'], did_type=did_type,
|
|
205
|
+
account=account, pattern=pattern, comments=reason, state=LifetimeExceptionsState.WAITING, expires_at=lifetime)
|
|
206
206
|
if len(text) < 3000:
|
|
207
207
|
text += '%s %s %s\n' % (str(did_type), did['scope'], did['name'])
|
|
208
208
|
else:
|
|
@@ -250,9 +250,9 @@ def update_exception(
|
|
|
250
250
|
raise UnsupportedOperation
|
|
251
251
|
|
|
252
252
|
query = update(
|
|
253
|
-
models.
|
|
253
|
+
models.LifetimeException
|
|
254
254
|
).where(
|
|
255
|
-
models.
|
|
255
|
+
models.LifetimeException.id == exception_id
|
|
256
256
|
).values(
|
|
257
257
|
state=state,
|
|
258
258
|
updated_at=datetime.utcnow()
|
|
@@ -121,7 +121,7 @@ def add_value(key: str, value: str, *, session: "Session") -> None:
|
|
|
121
121
|
:raises KeyNotFound: Key not in metadata conventions table
|
|
122
122
|
:raises InvalidValueForKey: Value conflicts with rse expression for key values or does not have the correct type
|
|
123
123
|
"""
|
|
124
|
-
new_value = models.
|
|
124
|
+
new_value = models.DIDMetaConventionsConstraint(key=key, value=value)
|
|
125
125
|
try:
|
|
126
126
|
new_value.save(session=session)
|
|
127
127
|
except IntegrityError as error:
|
|
@@ -170,9 +170,9 @@ def list_values(key: str, *, session: "Session") -> list[str]:
|
|
|
170
170
|
:returns: A list containing all values.
|
|
171
171
|
"""
|
|
172
172
|
statement = select(
|
|
173
|
-
models.
|
|
173
|
+
models.DIDMetaConventionsConstraint.value
|
|
174
174
|
).where(
|
|
175
|
-
models.
|
|
175
|
+
models.DIDMetaConventionsConstraint.key == key
|
|
176
176
|
)
|
|
177
177
|
return list(session.execute(statement).scalars().all())
|
|
178
178
|
|
|
@@ -193,10 +193,10 @@ def validate_meta(meta: dict, did_type: DIDType, *, session: "Session") -> None:
|
|
|
193
193
|
if did_type == DIDType.DATASET and key in meta:
|
|
194
194
|
try:
|
|
195
195
|
statement = select(
|
|
196
|
-
models.
|
|
196
|
+
models.DIDMetaConventionsConstraint.value
|
|
197
197
|
).where(
|
|
198
|
-
and_(models.
|
|
199
|
-
models.
|
|
198
|
+
and_(models.DIDMetaConventionsConstraint.value == meta[key],
|
|
199
|
+
models.DIDMetaConventionsConstraint.key == key)
|
|
200
200
|
)
|
|
201
201
|
session.execute(statement).one()
|
|
202
202
|
except NoResultFound:
|
|
@@ -16,6 +16,7 @@ import json
|
|
|
16
16
|
import logging.handlers
|
|
17
17
|
import random
|
|
18
18
|
import socket
|
|
19
|
+
from typing import TYPE_CHECKING, Any, Union, overload
|
|
19
20
|
|
|
20
21
|
import stomp
|
|
21
22
|
|
|
@@ -23,6 +24,9 @@ from rucio.common.config import config_get, config_get_int
|
|
|
23
24
|
from rucio.common.logging import rucio_log_formatter
|
|
24
25
|
from rucio.core.monitor import MetricManager
|
|
25
26
|
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from datetime import datetime
|
|
29
|
+
|
|
26
30
|
METRICS = MetricManager(module=__name__)
|
|
27
31
|
|
|
28
32
|
CONFIG_COMMON_LOGLEVEL = getattr(logging, config_get('common', 'loglevel', raise_exception=False, default='DEBUG').upper())
|
|
@@ -79,14 +83,23 @@ for broker in BROKERS_RESOLVED:
|
|
|
79
83
|
CONNS.append(stomp.Connection(host_and_ports=[(broker, PORT)], vhost=VHOST, reconnect_attempts_max=3))
|
|
80
84
|
|
|
81
85
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
@overload
|
|
87
|
+
def date_handler(obj: "datetime") -> str:
|
|
88
|
+
...
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
@overload
|
|
92
|
+
def date_handler(obj: object) -> object:
|
|
93
|
+
...
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def date_handler(obj: Any) -> Union[str, object]:
|
|
97
|
+
""" Format dates to ISO format. """
|
|
85
98
|
return obj.isoformat() if hasattr(obj, 'isoformat') else obj
|
|
86
99
|
|
|
87
100
|
|
|
88
101
|
@METRICS.count_it
|
|
89
|
-
def trace(payload):
|
|
102
|
+
def trace(payload: dict[str, Any]) -> None:
|
|
90
103
|
"""
|
|
91
104
|
Write a trace to the buffer log file and send it to active mq.
|
|
92
105
|
|