Hi, and thank you for the detailed report and the performance analysis — this is a valuable observation.
This appears to be more of a feature request than a bug report. As such, we’ll be closing this as Invalid. If you disagree or believe this is a bug that should be handled differently, feel free to set the status back to New and provide further clarification. If you'd like to propose this improvement, we recommend creating a blueprint here: https://blueprints.launchpad.net/nova You’re also welcome to join the Nova team meeting to discuss this further. We meet on Tuesdays at 16:00 UTC meeting details and agenda can be found in the Nova wiki https://wiki.openstack.org/wiki/Meetings/Nova#Agenda_for_next_meeting. Thanks again! ** Changed in: nova Status: New => Invalid -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to OpenStack Compute (nova). https://bugs.launchpad.net/bugs/2110222 Title: Nova server image uploaded to S3 uses singlepart instead of multipart upload Status in glance_store: New Status in OpenStack Compute (nova): Invalid Bug description: When creating an image from a server using the `openstack server image create` command, a snapshot is created by nova and uploaded to S3 via glanceclient upload method. The size of the image is not supplied to glanceclient (however it can be known to nova by checking the size of temporary file nova created), and therefore it will be set to 0 when its None. This causes the S3 driver to assume the size is smaller than the store_large_object_size and call the _add_singlepart method instead of _add_multipart. This results in poor upload performance and high memory usage on the glance-api server because the whole upload is read in memory. The (virtual) size will eventually be calculated when the upload to S3 is completed, and then get saved in the database. Steps to reproduce: * Configure an S3 backend like MinIO as default_backend in devstack * openstack server create --flavor m1.small --image debian12 --network public vm1 * openstack server image create vm1 Expected result: * Image is uploaded to S3 in parts using multipart Actual result: * Image is uploaded to S3 using _add_singlepart, causing high memory consumption and duration. Performance impact singlepart vs multipart: singlepart: May 01 19:54:23 devstack-1 nova-compute[502984]: INFO nova.virt.libvirt.driver [None req-cf59e8a9-d12a-4424-8221-9e64fb62b5f7 demo admin] [instance: c3f80570-8ce5-40c4-a815-6acad873bba5] Snapshot extracted, beginning image upload May 01 19:55:49 devstack-1 nova-compute[502984]: INFO nova.virt.libvirt.driver [None req-cf59e8a9-d12a-4424-8221-9e64fb62b5f7 demo admin] [instance: c3f80570-8ce5-40c4-a815-6acad873bba5] Snapshot image upload complete May 01 19:55:49 devstack-1 nova-compute[502984]: INFO nova.compute.manager [None req-cf59e8a9-d12a-4424-8221-9e64fb62b5f7 demo admin] [instance: c3f80570-8ce5-40c4-a815-6acad873bba5] Took 89.70 seconds to snapshot the instance on the hypervisor. multipart: May 01 19:57:24 devstack-1 nova-compute[502984]: INFO nova.virt.libvirt.driver [None req-272205be-2fea-417d-8412-2a2a45daefb5 demo admin] [instance: c3f80570-8ce5-40c4-a815-6acad873bba5] Snapshot extracted, beginning image upload May 01 19:57:38 devstack-1 nova-compute[502984]: INFO nova.virt.libvirt.driver [None req-272205be-2fea-417d-8412-2a2a45daefb5 demo admin] [instance: c3f80570-8ce5-40c4-a815-6acad873bba5] Snapshot image upload complete May 01 19:57:38 devstack-1 nova-compute[502984]: INFO nova.compute.manager [None req-272205be-2fea-417d-8412-2a2a45daefb5 demo admin] [instance: c3f80570-8ce5-40c4-a815-6acad873bba5] Took 18.83 seconds to snapshot the instance on the hypervisor I've tried forcing multipart uploads by using this patch https://review.opendev.org/c/openstack/glance_store/+/946382/1/glance_store/_drivers/s3.py and setting the large_object_size to 0. This fixes the issue, but creates another issue when creating an image of volume-backed instances. In that case, a 0 byte dummy object is created as placeholder, and metadata with a reference to the volume snapshot id is saved in glance. This errors out: ERROR glance.common.wsgi botocore.errorfactory.InvalidRequest: An error occurred (InvalidRequest) when calling the CompleteMultipartUpload operation: You must specify at least one part Related to this similar bug: https://bugs.launchpad.net/glance-store/+bug/2043740 To manage notifications about this bug go to: https://bugs.launchpad.net/glance-store/+bug/2110222/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : yahoo-eng-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp