Skip to content

Commit 1064a8a

Browse files
authored
[PRMP-1607] Increase timeout and handle exceptions in bulk upload service (#1184)
1 parent 1eb4bb4 commit 1064a8a

File tree

4 files changed

+22
-13
lines changed

4 files changed

+22
-13
lines changed

lambdas/services/base/s3_service.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ def __new__(cls, *args, **kwargs):
2929
def __init__(self, custom_aws_role=None):
3030
if not self.initialised:
3131
self.config = BotoConfig(
32-
connect_timeout=3,
33-
read_timeout=5,
32+
connect_timeout=10,
33+
read_timeout=60,
3434
retries={"max_attempts": 3, "mode": "standard"},
3535
s3={"addressing_style": "virtual"},
3636
signature_version="s3v4",

lambdas/services/bulk_upload_service.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import uuid
44

55
import pydantic
6-
from botocore.exceptions import ClientError
6+
from botocore.exceptions import ClientError, ConnectTimeoutError, ReadTimeoutError
77

88
from enums.document_review_reason import DocumentReviewReason
99
from enums.patient_ods_inactive_status import PatientOdsInactiveStatus
@@ -335,7 +335,7 @@ def handle_sqs_message(self, message: dict):
335335
f"Successfully uploaded the Lloyd George records for patient: {staging_metadata.nhs_number}",
336336
{"Result": "Successful upload"},
337337
)
338-
except ClientError as e:
338+
except (ClientError, ReadTimeoutError, ConnectTimeoutError) as e:
339339
logger.info(
340340
f"Got unexpected error during file transfer: {str(e)}",
341341
{"Result": "Unsuccessful upload"},

lambdas/tests/unit/services/base/test_s3_service.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import pytest
66
from botocore.exceptions import ClientError
77
from freezegun import freeze_time
8+
89
from services.base.s3_service import S3Service
910
from tests.unit.conftest import (
1011
MOCK_BUCKET,
@@ -72,8 +73,8 @@ def test_s3_service_constructs_boto_client_with_timeouts(mocker):
7273

7374
mocked_boto_client.assert_called_once()
7475
_, kwargs = mocked_boto_client.call_args
75-
assert kwargs["config"].connect_timeout == 3
76-
assert kwargs["config"].read_timeout == 5
76+
assert kwargs["config"].connect_timeout == 10
77+
assert kwargs["config"].read_timeout == 60
7778

7879
S3Service._instance = None
7980

lambdas/tests/unit/services/test_bulk_upload_service.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from copy import copy
33

44
import pytest
5-
from botocore.exceptions import ClientError
5+
from botocore.exceptions import ClientError, ConnectTimeoutError, ReadTimeoutError
66
from freezegun import freeze_time
77

88
from enums.document_review_reason import DocumentReviewReason
@@ -736,7 +736,20 @@ def test_handle_sqs_message_put_staging_metadata_back_to_queue_when_virus_scan_r
736736
repo_under_test.sqs_repository.send_message_to_pdf_stitching_queue.assert_not_called()
737737

738738

739+
@pytest.mark.parametrize(
740+
"transfer_error",
741+
[
742+
ClientError(
743+
{"Error": {"Code": "AccessDenied", "Message": "Access Denied"}},
744+
"GetObject",
745+
),
746+
ReadTimeoutError(endpoint_url="https://s3.amazonaws.com"),
747+
ConnectTimeoutError(endpoint_url="https://s3.amazonaws.com"),
748+
],
749+
ids=["ClientError", "ReadTimeoutError", "ConnectTimeoutError"],
750+
)
739751
def test_handle_sqs_message_rollback_transaction_when_validation_pass_but_file_transfer_failed_halfway(
752+
transfer_error,
740753
repo_under_test,
741754
set_env,
742755
mocker,
@@ -766,16 +779,11 @@ def test_handle_sqs_message_rollback_transaction_when_validation_pass_but_file_t
766779
repo_under_test.bulk_upload_s3_repository,
767780
"remove_ingested_file_from_source_bucket",
768781
)
769-
mock_client_error = ClientError(
770-
{"Error": {"Code": "AccessDenied", "Message": "Access Denied"}},
771-
"GetObject",
772-
)
773782

774-
# simulate a client error occur when copying the 3rd file
775783
repo_under_test.bulk_upload_s3_repository.copy_to_lg_bucket.side_effect = [
776784
MOCK_COPY_OBJECT_RESPONSE,
777785
MOCK_COPY_OBJECT_RESPONSE,
778-
mock_client_error,
786+
transfer_error,
779787
]
780788

781789
repo_under_test.handle_sqs_message(message=TEST_SQS_MESSAGE)

0 commit comments

Comments
 (0)