From ee32683023a9f2ac85778e4bdd5a8ef67baac9ea Mon Sep 17 00:00:00 2001 From: lihsai0 Date: Thu, 12 Sep 2024 17:49:42 +0800 Subject: [PATCH] fix: form retry not working by no resume recorder --- .../storage/uploaders/_default_retrier.py | 4 +++- .../test_storage/test_uploader.py | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/qiniu/services/storage/uploaders/_default_retrier.py b/qiniu/services/storage/uploaders/_default_retrier.py index 25e0b18f..25114894 100644 --- a/qiniu/services/storage/uploaders/_default_retrier.py +++ b/qiniu/services/storage/uploaders/_default_retrier.py @@ -185,6 +185,7 @@ def get_default_retrier( """ retry_policies = [] upload_service_names = [ServiceName.UP] + handle_change_region = None if accelerate_uploading: retry_policies.append(AccUnavailableRetryPolicy()) @@ -196,6 +197,7 @@ def get_default_retrier( record_delete_handler=progress_record.delete, record_exists_handler=progress_record.exists )) + handle_change_region = lambda _: progress_record.delete() retry_policies += [ EndpointsRetryPolicy(skip_init_context=True), @@ -203,7 +205,7 @@ def get_default_retrier( regions_provider=regions_provider, service_names=upload_service_names, preferred_endpoints_provider=preferred_endpoints_provider, - on_change_region=lambda _: progress_record.delete() + on_change_region=handle_change_region ) ] diff --git a/tests/cases/test_services/test_storage/test_uploader.py b/tests/cases/test_services/test_storage/test_uploader.py index 564146d5..3d26774e 100644 --- a/tests/cases/test_services/test_storage/test_uploader.py +++ b/tests/cases/test_services/test_storage/test_uploader.py @@ -346,6 +346,28 @@ def test_put_file_with_callback( assert ret['x-qn-meta']['name'] == 'qiniu' assert ret['x-qn-meta']['age'] == '18' + @pytest.mark.parametrize('temp_file', [64 * KB, 10 * MB], indirect=True) + def test_put_file_with_form_regions_retry( + self, + qn_auth, + bucket_name, + temp_file, + regions_with_fake_endpoints, + get_remote_object_headers_and_md5, + get_key + ): + key = get_key('test_file_with_form_regions_retry') + token = qn_auth.upload_token(bucket_name, key) + ret, info = put_file( + token, + key, + temp_file.path, + regions=regions_with_fake_endpoints + ) + _, actual_md5 = get_remote_object_headers_and_md5(key=key) + assert ret['key'] == key + assert actual_md5 == temp_file.md5 + def test_put_data_with_callback( self, qn_auth,