Skip to content

Commit 1b6b386

Browse files
authored
🐛lock botocore<1.36.0 until CEPH S3 is updated to be compatible with AWS S3 (#7587)
1 parent cb79d90 commit 1b6b386

File tree

9 files changed

+54
-20
lines changed

9 files changed

+54
-20
lines changed

packages/aws-library/src/aws_library/s3/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
)
2323

2424
__all__: tuple[str, ...] = (
25-
"CopiedBytesTransferredCallback",
26-
"MultiPartUploadLinks",
2725
"PRESIGNED_LINK_MAX_SIZE",
2826
"S3_MAX_FILE_SIZE",
27+
"CopiedBytesTransferredCallback",
28+
"MultiPartUploadLinks",
2929
"S3AccessError",
3030
"S3BucketInvalidError",
3131
"S3DestinationNotEmptyError",
@@ -37,8 +37,8 @@
3737
"S3RuntimeError",
3838
"S3UploadNotFoundError",
3939
"SimcoreS3API",
40-
"UploadedBytesTransferredCallback",
4140
"UploadID",
41+
"UploadedBytesTransferredCallback",
4242
)
4343

4444
# nopycln: file

packages/aws-library/src/aws_library/s3/_client.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import functools
44
import logging
55
import urllib.parse
6+
import warnings
67
from collections.abc import AsyncGenerator, Sequence
78
from dataclasses import dataclass, field
89
from pathlib import Path
@@ -11,6 +12,7 @@
1112
import aioboto3
1213
from aiobotocore.session import ClientCreatorContext
1314
from boto3.s3.transfer import TransferConfig
15+
from botocore import __version__ as botocore_version
1416
from botocore import exceptions as botocore_exc
1517
from botocore.client import Config
1618
from models_library.api_schemas_storage.storage_schemas import (
@@ -20,6 +22,7 @@
2022
)
2123
from models_library.basic_types import SHA256Str
2224
from models_library.bytes_iters import BytesIter, DataSize
25+
from packaging import version
2326
from pydantic import AnyUrl, ByteSize, TypeAdapter
2427
from servicelib.bytes_iters import DEFAULT_READ_CHUNK_SIZE, BytesStreamer
2528
from servicelib.logging_utils import log_catch, log_context
@@ -51,6 +54,22 @@
5154
)
5255
from ._utils import compute_num_file_chunks, create_final_prefix
5356

57+
_BOTOCORE_VERSION: Final[version.Version] = version.parse(botocore_version)
58+
_MAX_BOTOCORE_VERSION_COMPATIBLE_WITH_CEPH_S3: Final[version.Version] = version.parse(
59+
"1.36.0"
60+
)
61+
62+
63+
def _check_botocore_version() -> None:
64+
if _BOTOCORE_VERSION >= _MAX_BOTOCORE_VERSION_COMPATIBLE_WITH_CEPH_S3:
65+
warnings.warn(
66+
f"Botocore version {botocore_version} is not supported for file uploads with CEPH S3 until CEPH is updated. "
67+
"Please use a version < 1.36.0. The upload operation will likely fail.",
68+
RuntimeWarning,
69+
stacklevel=2,
70+
)
71+
72+
5473
_logger = logging.getLogger(__name__)
5574

5675
_S3_MAX_CONCURRENCY_DEFAULT: Final[int] = 10
@@ -504,6 +523,9 @@ async def upload_file(
504523
bytes_transfered_cb: UploadedBytesTransferredCallback | None,
505524
) -> None:
506525
"""upload a file using aioboto3 transfer manager (e.g. works >5Gb and creates multiple threads)"""
526+
527+
_check_botocore_version()
528+
507529
upload_options: dict[str, Any] = {
508530
"Bucket": bucket,
509531
"Key": object_key,
@@ -528,6 +550,9 @@ async def copy_object(
528550
object_metadata: S3MetaData | None = None,
529551
) -> None:
530552
"""copy a file in S3 using aioboto3 transfer manager (e.g. works >5Gb and creates multiple threads)"""
553+
554+
_check_botocore_version()
555+
531556
copy_options: dict[str, Any] = {
532557
"CopySource": {"Bucket": bucket, "Key": src_object_key},
533558
"Bucket": bucket,
@@ -634,6 +659,7 @@ async def upload_object_from_file_like(
634659
file_like_reader: FileLikeReader,
635660
) -> None:
636661
"""streams write an object in S3 from an AsyncIterable[bytes]"""
662+
_check_botocore_version()
637663
await self._client.upload_fileobj(file_like_reader, bucket_name, object_key) # type: ignore[arg-type]
638664

639665
@staticmethod

services/dask-sidecar/requirements/_base.txt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
aio-pika==9.5.3
22
# via -r requirements/../../../packages/service-library/requirements/_base.in
3-
aiobotocore==2.21.1
3+
aiobotocore==2.17.0
44
# via s3fs
55
aiocache==0.12.3
66
# via -r requirements/../../../packages/service-library/requirements/_base.in
@@ -67,8 +67,10 @@ blosc==1.11.2
6767
# via -r requirements/_base.in
6868
bokeh==3.6.2
6969
# via dask
70-
botocore==1.37.1
71-
# via aiobotocore
70+
botocore==1.35.93
71+
# via
72+
# -c requirements/constraints.txt
73+
# aiobotocore
7274
certifi==2024.8.30
7375
# via
7476
# -c requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt
@@ -567,6 +569,7 @@ urllib3==2.2.3
567569
# -c requirements/../../../packages/settings-library/requirements/../../../packages/common-library/requirements/../../../requirements/constraints.txt
568570
# -c requirements/../../../packages/settings-library/requirements/../../../requirements/constraints.txt
569571
# -c requirements/../../../requirements/constraints.txt
572+
# aiobotocore
570573
# botocore
571574
# distributed
572575
# requests

services/dask-sidecar/requirements/_test.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ aws-xray-sdk==2.14.0
1515
# via moto
1616
blinker==1.9.0
1717
# via flask
18-
boto3==1.37.1
18+
boto3==1.35.93
1919
# via
2020
# aws-sam-translator
2121
# moto
22-
botocore==1.37.1
22+
botocore==1.35.93
2323
# via
2424
# -c requirements/_base.txt
2525
# aws-xray-sdk
@@ -226,7 +226,7 @@ rpds-py==0.22.3
226226
# -c requirements/_base.txt
227227
# jsonschema
228228
# referencing
229-
s3transfer==0.11.3
229+
s3transfer==0.10.4
230230
# via boto3
231231
setuptools==75.8.2
232232
# via moto

services/dask-sidecar/requirements/constraints.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,6 @@ dask[distributed]>=2024.4.2 # issue with publish_dataset: https://github.com/das
1313
#
1414
# Compatibility/coordination
1515
#
16+
# botocore does not always add the checksums to the s3 object metadata leading to issues with CEPH S3
17+
# see https://github.com/ITISFoundation/osparc-simcore/issues/7585
18+
botocore<1.36.0

services/storage/requirements/_base.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#
44

55
--constraint ../../../requirements/constraints.txt
6+
--constraint ./constraints.txt
67

78

89
--requirement ../../../packages/aws-library/requirements/_base.in

services/storage/requirements/_base.txt

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ aio-pika==9.5.4
22
# via
33
# -r requirements/../../../packages/aws-library/requirements/../../../packages/service-library/requirements/_base.in
44
# -r requirements/../../../packages/service-library/requirements/_base.in
5-
aioboto3==14.1.0
5+
aioboto3==13.3.0
66
# via
77
# -r requirements/../../../packages/aws-library/requirements/_base.in
88
# -r requirements/_base.in
9-
aiobotocore==2.21.1
9+
aiobotocore==2.16.0
1010
# via aioboto3
1111
aiocache==0.12.3
1212
# via
@@ -102,10 +102,11 @@ attrs==25.1.0
102102
# referencing
103103
billiard==4.2.1
104104
# via celery
105-
boto3==1.37.1
105+
boto3==1.35.81
106106
# via aiobotocore
107-
botocore==1.37.1
107+
botocore==1.35.81
108108
# via
109+
# -c requirements/./constraints.txt
109110
# aiobotocore
110111
# boto3
111112
# s3transfer
@@ -285,7 +286,6 @@ jinja2==3.1.5
285286
# fastapi
286287
jmespath==1.0.1
287288
# via
288-
# aiobotocore
289289
# boto3
290290
# botocore
291291
jsonschema==4.23.0
@@ -337,7 +337,6 @@ mdurl==0.1.2
337337
# via markdown-it-py
338338
multidict==6.1.0
339339
# via
340-
# aiobotocore
341340
# aiohttp
342341
# yarl
343342
opentelemetry-api==1.30.0
@@ -637,7 +636,6 @@ pyinstrument==5.0.1
637636
# -r requirements/../../../packages/service-library/requirements/_base.in
638637
python-dateutil==2.9.0.post0
639638
# via
640-
# aiobotocore
641639
# arrow
642640
# botocore
643641
# celery
@@ -756,7 +754,7 @@ rpds-py==0.22.3
756754
# via
757755
# jsonschema
758756
# referencing
759-
s3transfer==0.11.3
757+
s3transfer==0.10.4
760758
# via boto3
761759
sh==2.2.1
762760
# via -r requirements/../../../packages/aws-library/requirements/_base.in

services/storage/requirements/_test.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ billiard==4.2.1
4747
# celery
4848
blinker==1.9.0
4949
# via flask
50-
boto3==1.37.1
50+
boto3==1.35.81
5151
# via
5252
# -c requirements/_base.txt
5353
# aws-sam-translator
5454
# moto
55-
botocore==1.37.1
55+
botocore==1.35.81
5656
# via
5757
# -c requirements/_base.txt
5858
# aws-xray-sdk
@@ -362,7 +362,7 @@ rpds-py==0.22.3
362362
# -c requirements/_base.txt
363363
# jsonschema
364364
# referencing
365-
s3transfer==0.11.3
365+
s3transfer==0.10.4
366366
# via
367367
# -c requirements/_base.txt
368368
# boto3
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# botocore does not always add the checksums to the s3 object metadata leading to issues with CEPH S3
2+
# see https://github.com/ITISFoundation/osparc-simcore/issues/7585
3+
botocore<1.36.0

0 commit comments

Comments
 (0)