Skip to content

Commit 4cc7a91

Browse files
committed
Add new preferred transfer client mode to enable CRT in all environments
1 parent b65af6a commit 4cc7a91

File tree

4 files changed

+20
-4
lines changed

4 files changed

+20
-4
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "feature",
3+
"category": "``s3``",
4+
"description": "Added ``crt`` mode to ``preferred_transfer_client`` parameter in ``TransferConfig`` to enable CRT transfer client in all environments."
5+
}

boto3/s3/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@
1414

1515
# TransferConfig preferred_transfer_client settings
1616
CLASSIC_TRANSFER_CLIENT = "classic"
17+
CRT_TRANSFER_CLIENT = "crt"
1718
AUTO_RESOLVE_TRANSFER_CLIENT = "auto"

boto3/s3/transfer.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,15 +184,15 @@ def create_transfer_manager(client, config, osutil=None):
184184

185185
def _should_use_crt(config):
186186
# This feature requires awscrt>=0.19.18
187-
if HAS_CRT and has_minimum_crt_version((0, 19, 18)):
188-
is_optimized_instance = awscrt.s3.is_optimized_for_system()
189-
else:
190-
is_optimized_instance = False
187+
has_min_crt = HAS_CRT and has_minimum_crt_version((0, 19, 18))
188+
is_optimized_instance = has_min_crt and awscrt.s3.is_optimized_for_system()
191189
pref_transfer_client = config.preferred_transfer_client.lower()
192190

193191
if (
194192
is_optimized_instance
195193
and pref_transfer_client == constants.AUTO_RESOLVE_TRANSFER_CLIENT
194+
) or (
195+
has_min_crt and pref_transfer_client == constants.CRT_TRANSFER_CLIENT
196196
):
197197
logger.debug(
198198
"Attempting to use CRTTransferManager. Config settings may be ignored."
@@ -296,6 +296,7 @@ def __init__(
296296
are made with supported environment and settings.
297297
* classic - Only use the origin S3TransferManager with
298298
requests. Disables possible CRT upgrade on requests.
299+
* crt - Only use the CRTTransferManager with requests.
299300
"""
300301
super().__init__(
301302
multipart_threshold=multipart_threshold,

tests/functional/test_crt.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,15 @@ def test_create_transfer_manager_on_optimized_instance(self):
6868
transfer_manager = create_transfer_manager(client, config)
6969
assert isinstance(transfer_manager, CRTTransferManager)
7070

71+
@requires_crt()
72+
def test_create_transfer_manager_with_crt_preferred(self):
73+
client = create_mock_client()
74+
config = TransferConfig(
75+
preferred_transfer_client='crt',
76+
)
77+
transfer_manager = create_transfer_manager(client, config)
78+
assert isinstance(transfer_manager, CRTTransferManager)
79+
7180
@requires_crt()
7281
def test_minimum_crt_version(self):
7382
assert has_minimum_crt_version((0, 16, 12)) is True

0 commit comments

Comments
 (0)