From e63e0e4008971ebf8426dabd3abb4290a3d737f2 Mon Sep 17 00:00:00 2001 From: Pierre Riteau Date: Fri, 4 Apr 2025 22:16:47 +0200 Subject: [PATCH] Support multipart upload when image_size == 0 When doing an image upload of a volume from cinder-volume to glance with an s3 backend, image_size in this context is zero. As a result the check that image_size is larger than s3_store_large_object_size is always negative and glance_store never uses multipart upload. As a workaround, allow setting s3_store_large_object_size to 0, which forces glance_store to use multipart upload. Related-Bug: #2043740 Change-Id: I436d56d0489b081822ed55108e10d43cc38512bb --- glance_store/_drivers/s3.py | 5 ++++- ...-store-large-object-size-zero-a24229ae6955b799.yaml | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/s3-store-large-object-size-zero-a24229ae6955b799.yaml diff --git a/glance_store/_drivers/s3.py b/glance_store/_drivers/s3.py index 95d4c84b..49a17eb0 100644 --- a/glance_store/_drivers/s3.py +++ b/glance_store/_drivers/s3.py @@ -180,6 +180,7 @@ Related Options: """), cfg.IntOpt('s3_store_large_object_size', default=DEFAULT_LARGE_OBJECT_SIZE, + min=0, help=""" What size, in MB, should S3 start chunking image files and do a multipart upload in S3. @@ -190,7 +191,7 @@ upload the image to S3 as is or to split it (Multipart Upload). Note: You can only split up to 10,000 images. Possible values: - * Any positive integer value + * Any positive integer value or zero Related Options: * s3_store_large_object_chunk_size @@ -473,6 +474,8 @@ class Store(glance_store.driver.Store): if not result: if param == 's3_store_create_bucket_on_put': return result + if param == 's3_store_large_object_size': + return result if param == 's3_store_region_name': return result if param == 's3_store_cacert': diff --git a/releasenotes/notes/s3-store-large-object-size-zero-a24229ae6955b799.yaml b/releasenotes/notes/s3-store-large-object-size-zero-a24229ae6955b799.yaml new file mode 100644 index 00000000..b5474add --- /dev/null +++ b/releasenotes/notes/s3-store-large-object-size-zero-a24229ae6955b799.yaml @@ -0,0 +1,10 @@ +--- +features: + - | + Support setting ``s3_store_large_object_size`` to ``0`` to force multipart + upload when ``image_size`` is unknown. +fixes: + - | + `Bug #2043740 `_: + ``s3_store_large_object_size`` can be set to ``0`` to force multipart + upload when creating an image in the S3 backend from a Cinder volume.