rucio-clients 34.4.0__tar.gz → 34.4.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-34.4.0 → rucio_clients-34.4.1}/PKG-INFO +2 -2
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/uploadclient.py +8 -2
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/protocol.py +56 -1
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/rsemanager.py +13 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/vcsversion.py +3 -3
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/requirements.txt +1 -1
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_upload.py +32 -1
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/AUTHORS.rst +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/ChangeLog +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/LICENSE +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/MANIFEST.in +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/README.rst +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/bin/rucio +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/bin/rucio-admin +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/etc/rse-accounts.cfg.template +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/etc/rucio.cfg.atlas.client.template +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/etc/rucio.cfg.template +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/__init__.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/alembicrevision.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/__init__.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/accountclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/accountlimitclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/baseclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/client.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/configclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/credentialclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/didclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/diracclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/downloadclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/exportclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/fileclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/importclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/lifetimeclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/lockclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/metaconventionsclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/pingclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/replicaclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/requestclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/rseclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/ruleclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/scopeclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/subscriptionclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/client/touchclient.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/__init__.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/cache.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/config.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/constants.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/constraints.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/didtype.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/exception.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/extra.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/logging.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/pcache.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/plugins.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/policy.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/__init__.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/atlas.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/belleii.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/domatpc.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/escape.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/generic.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/generic_multi_vo.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/schema/icecube.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/stomp_utils.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/stopwatch.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/test_rucio_server.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/types.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/common/utils.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/__init__.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/__init__.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/bittorrent.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/cache.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/dummy.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/gfal.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/globus.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/gsiftp.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/http_cache.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/mock.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/ngarc.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/posix.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/rclone.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/rfio.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/srm.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/ssh.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/storm.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/webdav.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/rse/protocols/xrootd.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio/version.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/lib/rucio_clients.egg-info/SOURCES.txt +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/pylintrc +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/pyproject.toml +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/setup.cfg +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/setup.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/setuputil.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_abacus_account.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_abacus_collection_replica.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_abacus_rse.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_account.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_account_limits.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_api_external_representation.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_archive.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_auditor.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_auditor_hdfs.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_auditor_srmdumps.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_authentication.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_automatix.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_bad_replica.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_bb8.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_belleii.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_bin_rucio.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_boolean.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_clients.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_common_types.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_config.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_conveyor.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_conveyor_submitter.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_counter.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_credential.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_curl.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_daemons.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_dataset_replicas.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_db.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_did.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_did_meta_plugins.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_didtype.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_download.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_dumper.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_dumper_consistency.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_dumper_data_model.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_dumper_path_parsing.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_filter_engine.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_heartbeat.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_hermes.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_identity.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_impl_upload_download.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_import_export.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_judge_cleaner.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_judge_evaluator.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_judge_injector.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_judge_repairer.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_lifetime.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_message.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_meta_conventions.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_meta_did.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_module_import.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_monitor.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_multi_vo.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_naming_convention.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_oauthmanager.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_oidc.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_permission.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_pfns.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_ping.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_preparer.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_qos.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_quarantined_replica.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_reaper.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_redirect.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_replica.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_replica_recoverer.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_replica_sorting.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_request.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_root_proxy.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_expression_parser.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_lfn2path.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_gfal2.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_gfal2_impl.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_posix.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_rclone.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_rsync.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_srm.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_ssh.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_webdav.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_protocol_xrootd.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rse_selector.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rucio_server.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_rule.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_scope.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_subscription.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_throttler.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_tpc.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_trace.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_transfer.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_transfer_plugins.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_undertaker.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tests/test_utils.py +0 -0
- {rucio_clients-34.4.0 → rucio_clients-34.4.1}/tools/merge_rucio_configs.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: rucio-clients
|
|
3
|
-
Version: 34.4.
|
|
3
|
+
Version: 34.4.1
|
|
4
4
|
Summary: Rucio Client Lite Package
|
|
5
5
|
Home-page: https://rucio.cern.ch/
|
|
6
6
|
Author: Rucio
|
|
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
19
19
|
Requires-Python: >=3.9, <4
|
|
20
20
|
License-File: LICENSE
|
|
21
21
|
License-File: AUTHORS.rst
|
|
22
|
-
Requires-Dist: requests
|
|
22
|
+
Requires-Dist: requests~=2.32.0
|
|
23
23
|
Requires-Dist: urllib3~=1.26.18
|
|
24
24
|
Requires-Dist: dogpile.cache~=1.2.2
|
|
25
25
|
Requires-Dist: tabulate~=0.9.0
|
|
@@ -286,7 +286,6 @@ class UploadClient:
|
|
|
286
286
|
state_reason = str(error)
|
|
287
287
|
|
|
288
288
|
if success:
|
|
289
|
-
num_succeeded += 1
|
|
290
289
|
trace['transferEnd'] = time.time()
|
|
291
290
|
trace['clientState'] = 'DONE'
|
|
292
291
|
file['state'] = 'A'
|
|
@@ -296,6 +295,7 @@ class UploadClient:
|
|
|
296
295
|
if summary_file_path:
|
|
297
296
|
summary.append(copy.deepcopy(file))
|
|
298
297
|
|
|
298
|
+
registration_succeeded = True
|
|
299
299
|
if not no_register:
|
|
300
300
|
if register_after_upload:
|
|
301
301
|
self._register_file(file, registered_dataset_dids, ignore_availability=ignore_availability, activity=activity)
|
|
@@ -304,6 +304,7 @@ class UploadClient:
|
|
|
304
304
|
try:
|
|
305
305
|
self.client.update_replicas_states(rse, files=[replica_for_api])
|
|
306
306
|
except Exception as error:
|
|
307
|
+
registration_succeeded = False
|
|
307
308
|
logger(logging.ERROR, 'Failed to update replica state for file {}'.format(basename))
|
|
308
309
|
logger(logging.DEBUG, 'Details: {}'.format(str(error)))
|
|
309
310
|
|
|
@@ -312,8 +313,13 @@ class UploadClient:
|
|
|
312
313
|
try:
|
|
313
314
|
self.client.attach_dids(file['dataset_scope'], file['dataset_name'], [file_did])
|
|
314
315
|
except Exception as error:
|
|
315
|
-
|
|
316
|
+
registration_succeeded = False
|
|
317
|
+
logger(logging.ERROR, 'Failed to attach file to the dataset')
|
|
316
318
|
logger(logging.DEBUG, 'Attaching to dataset {}'.format(str(error)))
|
|
319
|
+
|
|
320
|
+
# only report success if the registration operations succeeded as well
|
|
321
|
+
if registration_succeeded:
|
|
322
|
+
num_succeeded += 1
|
|
317
323
|
else:
|
|
318
324
|
trace['clientState'] = 'FAILED'
|
|
319
325
|
trace['stateReason'] = state_reason
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
This module defines the base class for implementing a transfer protocol,
|
|
17
17
|
along with some of the default methods for LFN2PFN translations.
|
|
18
18
|
"""
|
|
19
|
-
|
|
20
19
|
import hashlib
|
|
21
20
|
import logging
|
|
21
|
+
from collections.abc import Callable, Mapping
|
|
22
22
|
from configparser import NoOptionError, NoSectionError
|
|
23
23
|
from typing import TypeVar
|
|
24
24
|
from urllib.parse import urlparse
|
|
@@ -37,6 +37,61 @@ if getattr(rsemanager, 'SERVER_MODE', None):
|
|
|
37
37
|
from rucio.core.rse import get_rse_vo
|
|
38
38
|
|
|
39
39
|
|
|
40
|
+
class RSEDeterministicScopeTranslation(PolicyPackageAlgorithms):
|
|
41
|
+
"""
|
|
42
|
+
Translates a pfn dictionary into a scope and name
|
|
43
|
+
"""
|
|
44
|
+
def __init__(self, vo: str = 'def'):
|
|
45
|
+
super().__init__()
|
|
46
|
+
self.register("def", RSEDeterministicScopeTranslation._default)
|
|
47
|
+
self.register("atlas", RSEDeterministicScopeTranslation._atlas)
|
|
48
|
+
policy_module = vo
|
|
49
|
+
# Uses the same policy as the DeterministicTranslation
|
|
50
|
+
if super()._supports(self.__class__.__name__, policy_module):
|
|
51
|
+
self.parser = self._get_one_algorithm(self.__class__.__name__, policy_module)
|
|
52
|
+
else:
|
|
53
|
+
self.parser = self._get_one_algorithm(self.__class__.__name__, "def")
|
|
54
|
+
|
|
55
|
+
@classmethod
|
|
56
|
+
def register(cls, name: str, func: Callable) -> None:
|
|
57
|
+
super()._register(cls.__name__, {name: func})
|
|
58
|
+
|
|
59
|
+
@staticmethod
|
|
60
|
+
def _default(parsed_pfn: Mapping[str, str]) -> tuple[str, str]:
|
|
61
|
+
""" Translate pfn to name/scope pair
|
|
62
|
+
|
|
63
|
+
:param parsed_pfn: dictionary representing pfn containing:
|
|
64
|
+
- path: str,
|
|
65
|
+
- name: str
|
|
66
|
+
:return: tuple containing name, scope
|
|
67
|
+
"""
|
|
68
|
+
path = parsed_pfn['path']
|
|
69
|
+
scope = path.lstrip('/').split('/')[0]
|
|
70
|
+
name = parsed_pfn['name']
|
|
71
|
+
return name, scope
|
|
72
|
+
|
|
73
|
+
@staticmethod
|
|
74
|
+
def _atlas(parsed_pfn: Mapping[str, str]) -> tuple[str, str]:
|
|
75
|
+
""" Translate pfn to name/scope pair
|
|
76
|
+
|
|
77
|
+
:param parsed_pfn: dictionary representing pfn containing:
|
|
78
|
+
- path: str,
|
|
79
|
+
- name: str
|
|
80
|
+
:return: tuple containing name, scope
|
|
81
|
+
"""
|
|
82
|
+
path = parsed_pfn['path']
|
|
83
|
+
if path.startswith('/user') or path.startswith('/group'):
|
|
84
|
+
scope = '%s.%s' % (path.split('/')[1], path.split('/')[2])
|
|
85
|
+
name = parsed_pfn['name']
|
|
86
|
+
else:
|
|
87
|
+
name, scope = RSEDeterministicScopeTranslation._default(parsed_pfn)
|
|
88
|
+
|
|
89
|
+
return name, scope
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
RSEDeterministicScopeTranslation()
|
|
93
|
+
|
|
94
|
+
|
|
40
95
|
RSEDeterministicTranslationT = TypeVar('RSEDeterministicTranslationT', bound='RSEDeterministicTranslation')
|
|
41
96
|
|
|
42
97
|
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import copy
|
|
16
16
|
import logging
|
|
17
17
|
import random
|
|
18
|
+
from collections.abc import Callable
|
|
18
19
|
from time import sleep
|
|
19
20
|
from urllib.parse import urlparse
|
|
20
21
|
|
|
@@ -25,6 +26,18 @@ from rucio.common.logging import formatted_logger
|
|
|
25
26
|
from rucio.common.utils import GLOBALLY_SUPPORTED_CHECKSUMS, make_valid_did
|
|
26
27
|
|
|
27
28
|
|
|
29
|
+
def get_scope_protocol(vo: str = 'def') -> Callable:
|
|
30
|
+
"""
|
|
31
|
+
Returns the callable protocol to translate the pfn to a name/scope pair
|
|
32
|
+
|
|
33
|
+
:returns:
|
|
34
|
+
Callable: Scope Parser function
|
|
35
|
+
"""
|
|
36
|
+
from rucio.rse.protocols.protocol import RSEDeterministicScopeTranslation
|
|
37
|
+
translation = RSEDeterministicScopeTranslation(vo=vo)
|
|
38
|
+
return translation.parser
|
|
39
|
+
|
|
40
|
+
|
|
28
41
|
def get_rse_info(rse=None, vo='def', rse_id=None, session=None) -> types.RSESettingsDict:
|
|
29
42
|
"""
|
|
30
43
|
Returns all protocol related RSE attributes.
|
|
@@ -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': '34.4.
|
|
7
|
+
'version': '34.4.1',
|
|
8
8
|
'branch_nick': 'release-34',
|
|
9
|
-
'revision_id': '
|
|
10
|
-
'revno':
|
|
9
|
+
'revision_id': '6699a667cf3cd9785086857295f70bc66c7c2174',
|
|
10
|
+
'revno': 12863
|
|
11
11
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# All dependencies needed to run rucio client (and server/daemons) should be defined here
|
|
2
|
-
requests
|
|
2
|
+
requests~=2.32.0 # Python HTTP for Humans.
|
|
3
3
|
urllib3~=1.26.18 # HTTP library with thread-safe connection pooling, file post, etc.
|
|
4
4
|
dogpile.cache~=1.2.2 # Caching API plugins (1.1.2 is the first version to support pymemcache)
|
|
5
5
|
tabulate~=0.9.0 # Pretty-print tabular data
|
|
@@ -21,10 +21,11 @@ from unittest.mock import patch
|
|
|
21
21
|
|
|
22
22
|
import pytest
|
|
23
23
|
|
|
24
|
+
from rucio.client.client import Client
|
|
24
25
|
from rucio.client.uploadclient import UploadClient
|
|
25
26
|
from rucio.common.config import config_add_section, config_set
|
|
26
27
|
from rucio.common.constants import RseAttr
|
|
27
|
-
from rucio.common.exception import InputValidationError, NoFilesUploaded, NotAllFilesUploaded
|
|
28
|
+
from rucio.common.exception import InputValidationError, NoFilesUploaded, NotAllFilesUploaded, ResourceTemporaryUnavailable
|
|
28
29
|
from rucio.common.utils import adler32, generate_uuid
|
|
29
30
|
from rucio.core.rse import add_protocol, add_rse_attribute
|
|
30
31
|
|
|
@@ -398,3 +399,33 @@ def test_upload_file_ignore_availability(rse_factory, scope, upload_client, file
|
|
|
398
399
|
|
|
399
400
|
status = upload_client.upload(item, ignore_availability=True)
|
|
400
401
|
assert status == 0
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
@pytest.fixture
|
|
405
|
+
def upload_client_registration_fail():
|
|
406
|
+
logger = logging.getLogger('upload_client')
|
|
407
|
+
logger.addHandler(logging.StreamHandler())
|
|
408
|
+
logger.setLevel(logging.DEBUG)
|
|
409
|
+
# modify the client object used by upload_client so that replica registration fails
|
|
410
|
+
class RegistrationFailureClient(Client):
|
|
411
|
+
def __init__(self, **args):
|
|
412
|
+
super(RegistrationFailureClient, self).__init__(**args)
|
|
413
|
+
def update_replicas_states(self, rse, files):
|
|
414
|
+
# simulate server timing out
|
|
415
|
+
raise ResourceTemporaryUnavailable
|
|
416
|
+
return UploadClient(logger=logger, _client=RegistrationFailureClient())
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
def test_upload_registration_fail(rse, scope, upload_client_registration_fail, file_factory):
|
|
420
|
+
local_file = file_factory.file_generator()
|
|
421
|
+
fn = os.path.basename(local_file)
|
|
422
|
+
|
|
423
|
+
# upload a file and check that exception is raised
|
|
424
|
+
with pytest.raises(NoFilesUploaded):
|
|
425
|
+
upload_client_registration_fail.upload([{
|
|
426
|
+
'path': local_file,
|
|
427
|
+
'rse': rse,
|
|
428
|
+
'did_scope': scope,
|
|
429
|
+
'did_name': fn,
|
|
430
|
+
'guid': generate_uuid()
|
|
431
|
+
}])
|
|
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
|