rucio-clients 33.5.0__tar.gz → 33.6.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rucio-clients might be problematic. Click here for more details.
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/PKG-INFO +1 -1
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/vcsversion.py +3 -3
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/setuputil.py +2 -1
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_replica_recoverer.py +92 -42
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/AUTHORS.rst +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/ChangeLog +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/LICENSE +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/MANIFEST.in +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/README.rst +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/bin/rucio +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/bin/rucio-admin +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/etc/rse-accounts.cfg.template +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/etc/rucio.cfg.template +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/__init__.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/alembicrevision.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/__init__.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/accountclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/accountlimitclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/baseclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/client.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/configclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/credentialclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/didclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/diracclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/downloadclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/exportclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/fileclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/importclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/lifetimeclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/lockclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/metaclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/pingclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/replicaclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/requestclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/rseclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/ruleclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/scopeclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/subscriptionclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/touchclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/client/uploadclient.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/__init__.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/cache.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/config.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/constants.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/constraints.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/didtype.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/exception.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/extra.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/logging.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/pcache.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/policy.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/schema/__init__.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/schema/atlas.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/schema/belleii.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/schema/cms.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/schema/domatpc.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/schema/escape.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/schema/generic.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/schema/icecube.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/schema/lsst.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/stomp_utils.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/stopwatch.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/test_rucio_server.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/types.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/common/utils.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/__init__.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/__init__.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/cache.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/dummy.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/gfal.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/globus.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/gsiftp.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/http_cache.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/mock.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/ngarc.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/posix.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/protocol.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/rclone.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/rfio.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/srm.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/ssh.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/storm.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/webdav.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/protocols/xrootd.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/rse/rsemanager.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio/version.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/lib/rucio_clients.egg-info/SOURCES.txt +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/pylintrc +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/pyproject.toml +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/requirements.txt +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/setup.cfg +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/setup.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_abacus_account.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_abacus_collection_replica.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_abacus_rse.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_account.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_account_limits.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_api_external_representation.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_archive.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_auditor.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_auditor_hdfs.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_auditor_srmdumps.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_authentication.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_automatix.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_bad_replica.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_bb8.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_belleii.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_bin_rucio.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_boolean.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_clients.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_common_types.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_config.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_conveyor.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_conveyor_submitter.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_counter.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_credential.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_curl.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_daemons.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_dataset_replicas.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_db.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_did.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_did_meta_plugins.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_didtype.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_download.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_dumper.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_dumper_consistency.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_dumper_data_model.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_dumper_path_parsing.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_filter_engine.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_heartbeat.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_hermes.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_identity.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_impl_upload_download.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_import_export.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_judge_cleaner.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_judge_evaluator.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_judge_injector.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_judge_repairer.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_lifetime.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_message.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_meta.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_meta_did.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_module_import.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_monitor.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_multi_vo.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_naming_convention.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_oauthmanager.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_oidc.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_permission.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_pfns.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_ping.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_preparer.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_qos.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_quarantined_replica.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_reaper.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_redirect.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_replica.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_replica_sorting.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_request.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_root_proxy.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rse.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rse_expression_parser.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rse_lfn2path.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rse_protocol_gfal2.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rse_protocol_gfal2_impl.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rse_protocol_posix.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rse_protocol_rclone.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rse_protocol_rsync.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rse_protocol_srm.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rse_protocol_ssh.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rse_protocol_webdav.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rse_protocol_xrootd.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rse_selector.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rucio_server.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_rule.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_schema_cms.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_scope.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_subscription.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_throttler.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_tpc.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_trace.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_transfer.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_undertaker.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_upload.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tests/test_utils.py +0 -0
- {rucio-clients-33.5.0 → rucio-clients-33.6.1}/tools/merge_rucio_configs.py +0 -0
|
@@ -4,8 +4,8 @@ This file is automatically generated; Do not edit it. :)
|
|
|
4
4
|
'''
|
|
5
5
|
VERSION_INFO = {
|
|
6
6
|
'final': True,
|
|
7
|
-
'version': '33.
|
|
7
|
+
'version': '33.6.1',
|
|
8
8
|
'branch_nick': 'release-33',
|
|
9
|
-
'revision_id': '
|
|
10
|
-
'revno':
|
|
9
|
+
'revision_id': 'ba5ba71d7ee18a18bef318699902ab4086926588',
|
|
10
|
+
'revno': 12721
|
|
11
11
|
}
|
|
@@ -112,8 +112,9 @@ def run_shell_command(cmd):
|
|
|
112
112
|
|
|
113
113
|
|
|
114
114
|
def get_rucio_version():
|
|
115
|
+
python_executable = "'" + sys.executable + "'"
|
|
115
116
|
ver = run_shell_command(
|
|
116
|
-
"PYTHONPATH=lib " +
|
|
117
|
+
"PYTHONPATH=lib " + python_executable + " -c "
|
|
117
118
|
'"from rucio import version; print(version.version_string())"'
|
|
118
119
|
)
|
|
119
120
|
if not ver:
|
|
@@ -55,12 +55,14 @@ class TestReplicaRecoverer:
|
|
|
55
55
|
self.tmp_file8 = file_factory.file_generator()
|
|
56
56
|
self.tmp_file9 = file_factory.file_generator()
|
|
57
57
|
self.tmp_file10 = file_factory.file_generator()
|
|
58
|
-
self.tmp_file11 = file_factory.file_generator()
|
|
58
|
+
self.tmp_file11 = file_factory.file_generator() # tmp_file11 shouldn't be declare as bad, as it doesn't have a data type.
|
|
59
|
+
self.tmp_file12 = file_factory.file_generator() # tmp_file12 is used to test the creation of rules by the daemon.
|
|
60
|
+
self.tmp_file13 = file_factory.file_generator()
|
|
59
61
|
|
|
60
62
|
self.listdids_mock = [{'scope': mock_scope, 'name': f.name, 'type': DIDType.FILE}
|
|
61
|
-
for f in [self.tmp_file1, self.tmp_file2, self.tmp_file3, self.tmp_file4, self.tmp_file5, self.tmp_file6]]
|
|
63
|
+
for f in [self.tmp_file1, self.tmp_file2, self.tmp_file3, self.tmp_file4, self.tmp_file5, self.tmp_file6, self.tmp_file12]]
|
|
62
64
|
self.listdids_declarebad = [{'scope': self.scope_declarebad, 'name': f.name, 'type': DIDType.FILE}
|
|
63
|
-
for f in [self.tmp_file7, self.tmp_file9, self.tmp_file11]]
|
|
65
|
+
for f in [self.tmp_file7, self.tmp_file9, self.tmp_file11, self.tmp_file13]]
|
|
64
66
|
self.listdids_nopolicy = [{'scope': self.scope_nopolicy, 'name': f.name, 'type': DIDType.FILE}
|
|
65
67
|
for f in [self.tmp_file8]]
|
|
66
68
|
self.listdids_ignore = [{'scope': self.scope_ignore, 'name': f.name, 'type': DIDType.FILE}
|
|
@@ -68,14 +70,14 @@ class TestReplicaRecoverer:
|
|
|
68
70
|
|
|
69
71
|
for rse in [self.rse4suspicious, self.rse4recovery]:
|
|
70
72
|
# Upload files with scope "mock_scope"
|
|
71
|
-
cmd = 'rucio -v upload --rse {0} --scope {1} {2} {3} {4} {5} {6} {7}'.format(rse, mock_scope.external, self.tmp_file1, self.tmp_file2, self.tmp_file3, self.tmp_file4, self.tmp_file5, self.tmp_file6)
|
|
73
|
+
cmd = 'rucio -v upload --rse {0} --scope {1} {2} {3} {4} {5} {6} {7} {8}'.format(rse, mock_scope.external, self.tmp_file1, self.tmp_file2, self.tmp_file3, self.tmp_file4, self.tmp_file5, self.tmp_file6, self.tmp_file12)
|
|
72
74
|
exitcode, out, err = execute(cmd)
|
|
73
75
|
print("mock_scope:", exitcode, out, err)
|
|
74
76
|
# checking if Rucio upload went OK
|
|
75
77
|
assert exitcode == 0
|
|
76
78
|
|
|
77
79
|
# Upload files with scope "scope_declarebad"
|
|
78
|
-
cmd = 'rucio -v upload --rse {0} --scope {1} {2} {3} {4}'.format(rse, self.scope_declarebad.external, self.tmp_file7, self.tmp_file9, self.tmp_file11)
|
|
80
|
+
cmd = 'rucio -v upload --rse {0} --scope {1} {2} {3} {4} {5}'.format(rse, self.scope_declarebad.external, self.tmp_file7, self.tmp_file9, self.tmp_file11, self.tmp_file13)
|
|
79
81
|
exitcode, out, err = execute(cmd)
|
|
80
82
|
print("scope_declarebad:", exitcode, out, err)
|
|
81
83
|
# checking if Rucio upload went OK
|
|
@@ -109,7 +111,8 @@ class TestReplicaRecoverer:
|
|
|
109
111
|
set_metadata(self.scope_nopolicy, self.tmp_file8.name, 'datatype', 'testtypenopolicy')
|
|
110
112
|
set_metadata(self.scope_declarebad, self.tmp_file9.name, 'datatype', 'testtypeignore')
|
|
111
113
|
set_metadata(self.scope_ignore, self.tmp_file10.name, 'datatype', 'testtypedeclarebad')
|
|
112
|
-
|
|
114
|
+
set_metadata(self.scope_declarebad, self.tmp_file13.name, 'datatype', 'testtypedryrun')
|
|
115
|
+
# tmp_file1, 2, 11 and 12 don't have a datatypes.
|
|
113
116
|
|
|
114
117
|
# Allow for the RSEs to be affected by the suspicious file recovery daemon
|
|
115
118
|
add_rse_attribute(self.rse4suspicious_id, "enable_suspicious_file_recovery", True)
|
|
@@ -127,15 +130,17 @@ class TestReplicaRecoverer:
|
|
|
127
130
|
remove(self.tmp_file9)
|
|
128
131
|
remove(self.tmp_file10)
|
|
129
132
|
remove(self.tmp_file11)
|
|
133
|
+
remove(self.tmp_file12)
|
|
134
|
+
remove(self.tmp_file13)
|
|
130
135
|
|
|
131
136
|
# Reset the cache to include the new RSEs
|
|
132
137
|
rse_expression_parser.REGION.invalidate()
|
|
133
138
|
|
|
134
139
|
# Gather replica info
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
140
|
+
replicalist_scope_mock = list(list_replicas(dids=self.listdids_mock))
|
|
141
|
+
replicalist_scope_declarebad = list(list_replicas(dids=self.listdids_declarebad))
|
|
142
|
+
replicalist_scope_nopolicy = list(list_replicas(dids=self.listdids_nopolicy))
|
|
143
|
+
replicalist_scope_ignore = list(list_replicas(dids=self.listdids_ignore))
|
|
139
144
|
|
|
140
145
|
# Changing the replica statuses as follows:
|
|
141
146
|
# ----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
@@ -152,16 +157,26 @@ class TestReplicaRecoverer:
|
|
|
152
157
|
# tmp_file9 unavailable suspicious (available) scope_declarebad testtypeignore
|
|
153
158
|
# tmp_file10 unavailable suspicious (available) scope_ignore testtypedeclarebad
|
|
154
159
|
# tmp_file11 unavailable suspicious (available) scope_declarebad <none>
|
|
160
|
+
# tmp_file12 unavailable suspicious (available) mock_scope <none>
|
|
161
|
+
# tmp_file13 unavailable suspicious (available) scope_declarebad testtypedryrun
|
|
155
162
|
# ----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
156
163
|
|
|
157
|
-
for replica in
|
|
164
|
+
for replica in replicalist_scope_mock:
|
|
158
165
|
suspicious_pfns = replica['rses'][self.rse4suspicious_id]
|
|
159
|
-
#
|
|
160
|
-
|
|
166
|
+
# Declare each file as suspicious multiple times, apart from tmp_file12, which
|
|
167
|
+
# should only be declared suspicious once. tmp_file12 is used to test the
|
|
168
|
+
# creation of rules by the daemon.
|
|
169
|
+
if replica['name'] == self.tmp_file12.name:
|
|
161
170
|
print("Declaring suspicious file replica: " + suspicious_pfns[0])
|
|
162
171
|
# The reason must contain the word "checksum", so that the replica can be declared bad.
|
|
163
172
|
replica_client.declare_suspicious_file_replicas([suspicious_pfns[0], ], 'checksum')
|
|
164
173
|
sleep(1)
|
|
174
|
+
else:
|
|
175
|
+
for i in range(3):
|
|
176
|
+
print("Declaring suspicious file replica: " + suspicious_pfns[0])
|
|
177
|
+
# The reason must contain the word "checksum", so that the replica can be declared bad.
|
|
178
|
+
replica_client.declare_suspicious_file_replicas([suspicious_pfns[0], ], 'checksum')
|
|
179
|
+
sleep(1)
|
|
165
180
|
if replica['name'] == self.tmp_file2.name:
|
|
166
181
|
print("Declaring bad file replica: " + suspicious_pfns[0])
|
|
167
182
|
replica_client.declare_bad_file_replicas([suspicious_pfns[0], ], 'checksum')
|
|
@@ -177,8 +192,11 @@ class TestReplicaRecoverer:
|
|
|
177
192
|
if replica['name'] == self.tmp_file6.name:
|
|
178
193
|
print("Updating replica state as unavailable: " + replica['rses'][self.rse4recovery_id][0])
|
|
179
194
|
update_replica_state(self.rse4recovery_id, mock_scope, self.tmp_file6.name, ReplicaState.UNAVAILABLE)
|
|
195
|
+
if replica['name'] == self.tmp_file12.name:
|
|
196
|
+
print("Updating replica state as unavailable: " + replica['rses'][self.rse4recovery_id][0])
|
|
197
|
+
update_replica_state(self.rse4recovery_id, mock_scope, self.tmp_file12.name, ReplicaState.UNAVAILABLE)
|
|
180
198
|
|
|
181
|
-
for replica in
|
|
199
|
+
for replica in replicalist_scope_declarebad:
|
|
182
200
|
suspicious_pfns = replica['rses'][self.rse4suspicious_id]
|
|
183
201
|
# Declare each file as suspicious multiple times
|
|
184
202
|
for i in range(3):
|
|
@@ -195,8 +213,11 @@ class TestReplicaRecoverer:
|
|
|
195
213
|
if replica['name'] == self.tmp_file11.name:
|
|
196
214
|
print("Updating replica state as unavailable: " + replica['rses'][self.rse4recovery_id][0])
|
|
197
215
|
update_replica_state(self.rse4recovery_id, self.scope_declarebad, self.tmp_file11.name, ReplicaState.UNAVAILABLE)
|
|
216
|
+
if replica['name'] == self.tmp_file13.name:
|
|
217
|
+
print("Updating replica state as unavailable: " + replica['rses'][self.rse4recovery_id][0])
|
|
218
|
+
update_replica_state(self.rse4recovery_id, self.scope_declarebad, self.tmp_file13.name, ReplicaState.UNAVAILABLE)
|
|
198
219
|
|
|
199
|
-
for replica in
|
|
220
|
+
for replica in replicalist_scope_nopolicy:
|
|
200
221
|
suspicious_pfns = replica['rses'][self.rse4suspicious_id]
|
|
201
222
|
# Declare each file as suspicious multiple times
|
|
202
223
|
for i in range(3):
|
|
@@ -208,7 +229,7 @@ class TestReplicaRecoverer:
|
|
|
208
229
|
print("Updating replica state as unavailable: " + replica['rses'][self.rse4recovery_id][0])
|
|
209
230
|
update_replica_state(self.rse4recovery_id, self.scope_nopolicy, self.tmp_file8.name, ReplicaState.UNAVAILABLE)
|
|
210
231
|
|
|
211
|
-
for replica in
|
|
232
|
+
for replica in replicalist_scope_ignore:
|
|
212
233
|
suspicious_pfns = replica['rses'][self.rse4suspicious_id]
|
|
213
234
|
# Declare each file as suspicious multiple times
|
|
214
235
|
for i in range(3):
|
|
@@ -221,13 +242,13 @@ class TestReplicaRecoverer:
|
|
|
221
242
|
update_replica_state(self.rse4recovery_id, self.scope_ignore, self.tmp_file10.name, ReplicaState.UNAVAILABLE)
|
|
222
243
|
|
|
223
244
|
# Gather replica info after setting initial replica statuses
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
245
|
+
replicalist_scope_mock = list(list_replicas(dids=self.listdids_mock))
|
|
246
|
+
replicalist_scope_declarebad = list(list_replicas(dids=self.listdids_declarebad))
|
|
247
|
+
replicalist_scope_nopolicy = list(list_replicas(dids=self.listdids_nopolicy))
|
|
248
|
+
replicalist_scope_ignore = list(list_replicas(dids=self.listdids_ignore))
|
|
228
249
|
|
|
229
250
|
# Checking if the status changes were effective
|
|
230
|
-
for replica in
|
|
251
|
+
for replica in replicalist_scope_mock:
|
|
231
252
|
if replica['name'] == self.tmp_file1.name:
|
|
232
253
|
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
233
254
|
assert replica['states'][self.rse4recovery_id] == 'AVAILABLE'
|
|
@@ -246,8 +267,11 @@ class TestReplicaRecoverer:
|
|
|
246
267
|
if replica['name'] == self.tmp_file6.name:
|
|
247
268
|
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
248
269
|
assert (self.rse4recovery_id in replica['states']) is False
|
|
270
|
+
if replica['name'] == self.tmp_file12.name:
|
|
271
|
+
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
272
|
+
assert (self.rse4recovery_id in replica['states']) is False
|
|
249
273
|
|
|
250
|
-
for replica in
|
|
274
|
+
for replica in replicalist_scope_declarebad:
|
|
251
275
|
if replica['name'] == self.tmp_file7.name:
|
|
252
276
|
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
253
277
|
assert (self.rse4recovery_id in replica['states']) is False
|
|
@@ -255,16 +279,19 @@ class TestReplicaRecoverer:
|
|
|
255
279
|
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
256
280
|
assert (self.rse4recovery_id in replica['states']) is False
|
|
257
281
|
if replica['name'] == self.tmp_file11.name:
|
|
258
|
-
|
|
282
|
+
# tmp_file11 should be ignored, as it doesn't have a datatype
|
|
283
|
+
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
284
|
+
assert (self.rse4recovery_id in replica['states']) is False
|
|
285
|
+
if replica['name'] == self.tmp_file13.name:
|
|
259
286
|
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
260
287
|
assert (self.rse4recovery_id in replica['states']) is False
|
|
261
288
|
|
|
262
|
-
for replica in
|
|
289
|
+
for replica in replicalist_scope_nopolicy:
|
|
263
290
|
if replica['name'] == self.tmp_file8.name:
|
|
264
291
|
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
265
292
|
assert (self.rse4recovery_id in replica['states']) is False
|
|
266
293
|
|
|
267
|
-
for replica in
|
|
294
|
+
for replica in replicalist_scope_ignore:
|
|
268
295
|
if replica['name'] == self.tmp_file10.name:
|
|
269
296
|
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
270
297
|
assert (self.rse4recovery_id in replica['states']) is False
|
|
@@ -285,6 +312,8 @@ class TestReplicaRecoverer:
|
|
|
285
312
|
assert (self.tmp_file9.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
|
|
286
313
|
assert (self.tmp_file10.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
|
|
287
314
|
assert (self.tmp_file11.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
|
|
315
|
+
assert (self.tmp_file12.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
|
|
316
|
+
assert (self.tmp_file13.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
|
|
288
317
|
|
|
289
318
|
bad_replicas_list = list_bad_replicas_status(rse_id=self.rse4recovery_id, younger_than=self.from_date, vo=vo)
|
|
290
319
|
bad_checklist = [(badf['name'], badf['rse_id'], badf['state']) for badf in bad_replicas_list]
|
|
@@ -300,6 +329,8 @@ class TestReplicaRecoverer:
|
|
|
300
329
|
assert (self.tmp_file9.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
|
|
301
330
|
assert (self.tmp_file10.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
|
|
302
331
|
assert (self.tmp_file11.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
|
|
332
|
+
assert (self.tmp_file12.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
|
|
333
|
+
assert (self.tmp_file13.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
|
|
303
334
|
|
|
304
335
|
# Purposefully not checking for the 'SUSPICIOUS' status on rse4suspicious.
|
|
305
336
|
# The only existing function (to date) gathering info about 'SUSPICIOUS' replicas
|
|
@@ -318,10 +349,11 @@ class TestReplicaRecoverer:
|
|
|
318
349
|
# "datatype": [] and "scope": [] are wildcards; they stand for every datatype or scope.
|
|
319
350
|
json_testentry1 = {"action": "ignore", "datatype": ["testtypedeclarebad"], "scope": [str(self.scope_ignore)]}
|
|
320
351
|
json_testentry2 = {"action": "declare bad", "datatype": ["testtypeignore"], "scope": [str(self.scope_declarebad)]}
|
|
321
|
-
json_testentry3 = {"action": "
|
|
322
|
-
json_testentry4 = {"action": "
|
|
323
|
-
json_testentry5 = {"action": "
|
|
324
|
-
json_testentry6 = {"action": "
|
|
352
|
+
json_testentry3 = {"action": "dry run", "datatype": ["testtypedryrun"], "scope": [str(self.scope_declarebad)]}
|
|
353
|
+
json_testentry4 = {"action": "declare bad", "datatype": ["testtypedeclarebad"], "scope": []}
|
|
354
|
+
json_testentry5 = {"action": "ignore", "datatype": ["testtypeignore"], "scope": []}
|
|
355
|
+
json_testentry6 = {"action": "declare bad", "datatype": [], "scope": [str(self.scope_declarebad)]}
|
|
356
|
+
json_testentry7 = {"action": "ignore", "datatype": [], "scope": [str(self.scope_ignore)]}
|
|
325
357
|
json_data.append(json_HITS)
|
|
326
358
|
json_data.append(json_RAW)
|
|
327
359
|
json_data.append(json_testentry1)
|
|
@@ -330,6 +362,7 @@ class TestReplicaRecoverer:
|
|
|
330
362
|
json_data.append(json_testentry4)
|
|
331
363
|
json_data.append(json_testentry5)
|
|
332
364
|
json_data.append(json_testentry6)
|
|
365
|
+
json_data.append(json_testentry7)
|
|
333
366
|
json.dump(json_data, json_file)
|
|
334
367
|
|
|
335
368
|
def test_replica_recoverer(self, vo):
|
|
@@ -354,6 +387,9 @@ class TestReplicaRecoverer:
|
|
|
354
387
|
# tmp_file8 unavailable suspicious (available) scope_nopolicy testtypenopolicy
|
|
355
388
|
# tmp_file9 unavailable suspicious (available) scope_declarebad testtypeignore
|
|
356
389
|
# tmp_file10 unavailable suspicious (available) scope_ignore testtypedeclarebad
|
|
390
|
+
# tmp_file11 unavailable suspicious (available) scope_declarebad <none>
|
|
391
|
+
# tmp_file12 unavailable suspicious (available) mock_scope <none>
|
|
392
|
+
# tmp_file13 unavailable suspicious (available) scope_declarebad testtypedryrun
|
|
357
393
|
# ----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
358
394
|
|
|
359
395
|
- Explaination: Suspicious replicas that are the last remaining copy (unavailable on rse4recovery) are handeled differently depending
|
|
@@ -374,7 +410,7 @@ class TestReplicaRecoverer:
|
|
|
374
410
|
|
|
375
411
|
Concluding:
|
|
376
412
|
|
|
377
|
-
- checks that tmp_file1, tmp_file4, tmp_file7, tmp_file9
|
|
413
|
+
- checks that tmp_file1, tmp_file4, tmp_file7, tmp_file9, tmp_file10 were declared as 'BAD' on rse4suspicious
|
|
378
414
|
|
|
379
415
|
"""
|
|
380
416
|
|
|
@@ -384,12 +420,12 @@ class TestReplicaRecoverer:
|
|
|
384
420
|
stop()
|
|
385
421
|
|
|
386
422
|
# Checking the outcome:
|
|
387
|
-
# We expect to see four changes: tmp_file1, tmp_file4, tmp_file7
|
|
423
|
+
# We expect to see four changes: tmp_file1, tmp_file4, tmp_file7, tmp_file9, tmp_file10 should be declared as bad on rse4suspicious
|
|
388
424
|
# ----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
389
425
|
# Name State(s) declared on rse4recovery State(s) declared on rse4suspicious Scope Metadata "datatype"
|
|
390
426
|
# ----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
391
|
-
# tmp_file1 available suspicious + bad (unavailable) mock_scope
|
|
392
|
-
# tmp_file2 available suspicious + bad (unavailable) mock_scope
|
|
427
|
+
# tmp_file1 available suspicious + bad (unavailable) mock_scope <none>
|
|
428
|
+
# tmp_file2 available suspicious + bad (unavailable) mock_scope <none>
|
|
393
429
|
# tmp_file3 unavailable suspicious (available) mock_scope RAW
|
|
394
430
|
# tmp_file4 unavailable suspicious + bad (unavailable) mock_scope testtypedeclarebad
|
|
395
431
|
# tmp_file5 unavailable suspicious (available) mock_scope testtypenopolicy
|
|
@@ -398,15 +434,18 @@ class TestReplicaRecoverer:
|
|
|
398
434
|
# tmp_file8 unavailable suspicious (available) scope_nopolicy testtypenopolicy
|
|
399
435
|
# tmp_file9 unavailable suspicious + bad (unavailable) scope_declarebad testtypeignore
|
|
400
436
|
# tmp_file10 unavailable suspicious (available) scope_ignore testtypedeclarebad
|
|
437
|
+
# tmp_file11 unavailable suspicious (available) scope_declarebad <none>
|
|
438
|
+
# tmp_file12 unavailable suspicious (available) mock_scope <none>
|
|
439
|
+
# tmp_file13 unavailable suspicious (available) scope_declarebad testtypedryrun
|
|
401
440
|
# ----------------------------------------------------------------------------------------------------------------------------------------------------
|
|
402
441
|
|
|
403
442
|
# Gather replica info after replica_recoverer has run.
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
443
|
+
replicalist_scope_mock = list(list_replicas(dids=self.listdids_mock))
|
|
444
|
+
replicalist_scope_declarebad = list(list_replicas(dids=self.listdids_declarebad))
|
|
445
|
+
replicalist_scope_nopolicy = list(list_replicas(dids=self.listdids_nopolicy))
|
|
446
|
+
replicalist_scope_ignore = list(list_replicas(dids=self.listdids_ignore))
|
|
408
447
|
|
|
409
|
-
for replica in
|
|
448
|
+
for replica in replicalist_scope_mock:
|
|
410
449
|
if replica['name'] == self.tmp_file1.name or replica['name'] == self.tmp_file2.name:
|
|
411
450
|
assert (self.rse4suspicious_id in replica['states']) is False
|
|
412
451
|
assert replica['states'][self.rse4recovery_id] == 'AVAILABLE'
|
|
@@ -419,24 +458,31 @@ class TestReplicaRecoverer:
|
|
|
419
458
|
if replica['name'] == self.tmp_file5.name:
|
|
420
459
|
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
421
460
|
assert (self.rse4recovery_id in replica['states']) is False
|
|
461
|
+
if replica['name'] == self.tmp_file12.name:
|
|
462
|
+
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
463
|
+
assert (self.rse4recovery_id in replica['states']) is False
|
|
422
464
|
|
|
423
|
-
for replica in
|
|
465
|
+
for replica in replicalist_scope_declarebad:
|
|
424
466
|
if replica['name'] == self.tmp_file7.name:
|
|
425
467
|
# The 'states' key doesn't exist if the replica isn't available on at least one RSE
|
|
426
468
|
assert not replica.get('states')
|
|
427
469
|
if replica['name'] == self.tmp_file9.name:
|
|
428
470
|
assert not replica.get('states')
|
|
429
471
|
if replica['name'] == self.tmp_file11.name:
|
|
430
|
-
|
|
472
|
+
# tmp_file11 should have been ignored, as it doesn't have a datatype
|
|
473
|
+
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
474
|
+
assert (self.rse4recovery_id in replica['states']) is False
|
|
475
|
+
if replica['name'] == self.tmp_file13.name:
|
|
476
|
+
# tmp_file13 should have been ignored, as it is running as a dry run
|
|
431
477
|
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
432
478
|
assert (self.rse4recovery_id in replica['states']) is False
|
|
433
479
|
|
|
434
|
-
for replica in
|
|
480
|
+
for replica in replicalist_scope_nopolicy:
|
|
435
481
|
if replica['name'] == self.tmp_file8.name:
|
|
436
482
|
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
437
483
|
assert (self.rse4recovery_id in replica['states']) is False
|
|
438
484
|
|
|
439
|
-
for replica in
|
|
485
|
+
for replica in replicalist_scope_ignore:
|
|
440
486
|
if replica['name'] == self.tmp_file10.name:
|
|
441
487
|
assert replica['states'][self.rse4suspicious_id] == 'AVAILABLE'
|
|
442
488
|
assert (self.rse4recovery_id in replica['states']) is False
|
|
@@ -456,6 +502,8 @@ class TestReplicaRecoverer:
|
|
|
456
502
|
assert (self.tmp_file9.name, self.rse4suspicious_id, BadFilesStatus.BAD) in bad_checklist
|
|
457
503
|
assert (self.tmp_file10.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
|
|
458
504
|
assert (self.tmp_file11.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
|
|
505
|
+
assert (self.tmp_file12.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
|
|
506
|
+
assert (self.tmp_file13.name, self.rse4suspicious_id, BadFilesStatus.BAD) not in bad_checklist
|
|
459
507
|
|
|
460
508
|
bad_replicas_list = list_bad_replicas_status(rse_id=self.rse4recovery_id, younger_than=self.from_date, vo=vo)
|
|
461
509
|
bad_checklist = [(badf['name'], badf['rse_id'], badf['state']) for badf in bad_replicas_list]
|
|
@@ -471,3 +519,5 @@ class TestReplicaRecoverer:
|
|
|
471
519
|
assert (self.tmp_file9.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
|
|
472
520
|
assert (self.tmp_file10.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
|
|
473
521
|
assert (self.tmp_file11.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
|
|
522
|
+
assert (self.tmp_file12.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
|
|
523
|
+
assert (self.tmp_file13.name, self.rse4recovery_id, BadFilesStatus.BAD) not in bad_checklist
|
|
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
|
|
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
|
|
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
|
|
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
|