Skip to content

Commit 6235dc5

Browse files
committed
Add support for max_request_concurrency
1 parent 4e5cd70 commit 6235dc5

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"type": "enhancement",
33
"category": "``awscrt``",
4-
"description": "``CRTTransferManager`` now supports the following ``TransferConfig`` options - ``multipart_threshold``, ``multipart_chunksize``"
4+
"description": "``CRTTransferManager`` now supports the following ``TransferConfig`` options - ``multipart_threshold``, ``multipart_chunksize``, ``max_request_concurrency``"
55
}

s3transfer/crt.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -753,8 +753,15 @@ def _get_crt_transfer_config_options(self):
753753
):
754754
# Let CRT dynamically calculate part size.
755755
part_size = None
756+
max_connections = self._config.max_request_concurrency
757+
if (
758+
self._config.get_deep_attr('max_request_concurrency')
759+
is self._config.UNSET_DEFAULT
760+
):
761+
max_connections = None
756762
return {
757763
'part_size': part_size,
764+
'max_active_connections_override': max_connections,
758765
}
759766

760767
def get_make_request_args(

tests/functional/test_crt.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,7 @@ def test_transfer_config_used_in_upload_request(self):
776776
config = TransferConfig(
777777
multipart_threshold=4 * MB,
778778
multipart_chunksize=2 * MB,
779+
max_request_concurrency=100,
779780
)
780781
transfer_manager = s3transfer.crt.CRTTransferManager(
781782
crt_s3_client=self.s3_crt_client,
@@ -790,11 +791,13 @@ def test_transfer_config_used_in_upload_request(self):
790791
callargs_kwargs = self.s3_crt_client.make_request.call_args[1]
791792
assert callargs_kwargs['multipart_upload_threshold'] == 4 * MB
792793
assert callargs_kwargs['part_size'] == 2 * MB
794+
assert callargs_kwargs['max_active_connections_override'] == 100
793795

794796
def test_transfer_config_used_in_download_request(self):
795797
config = TransferConfig(
796798
multipart_threshold=4 * MB,
797799
multipart_chunksize=2 * MB,
800+
max_request_concurrency=100,
798801
)
799802
transfer_manager = s3transfer.crt.CRTTransferManager(
800803
crt_s3_client=self.s3_crt_client,
@@ -808,6 +811,7 @@ def test_transfer_config_used_in_download_request(self):
808811

809812
callargs_kwargs = self.s3_crt_client.make_request.call_args[1]
810813
assert callargs_kwargs['part_size'] == 2 * MB
814+
assert callargs_kwargs['max_active_connections_override'] == 100
811815
# Config option only used for PUT requests.
812816
assert 'multipart_upload_threshold' not in callargs_kwargs
813817

@@ -827,3 +831,20 @@ def test_unset_part_size_defaults_to_none_in_upload_request(self):
827831

828832
callargs_kwargs = self.s3_crt_client.make_request.call_args[1]
829833
assert callargs_kwargs['part_size'] is None
834+
835+
def test_unset_max_concurrency_defaults_to_none(self):
836+
config = TransferConfig(
837+
max_request_concurrency=TransferConfig.UNSET_DEFAULT,
838+
)
839+
transfer_manager = s3transfer.crt.CRTTransferManager(
840+
crt_s3_client=self.s3_crt_client,
841+
crt_request_serializer=self.request_serializer,
842+
config=config,
843+
)
844+
future = transfer_manager.upload(
845+
self.filename, self.bucket, self.key, {}, []
846+
)
847+
future.result()
848+
849+
callargs_kwargs = self.s3_crt_client.make_request.call_args[1]
850+
assert callargs_kwargs['max_active_connections_override'] is None

0 commit comments

Comments
 (0)