diff --git a/glance_store/_drivers/swift/store.py b/glance_store/_drivers/swift/store.py index 8674f77c..710b7edf 100644 --- a/glance_store/_drivers/swift/store.py +++ b/glance_store/_drivers/swift/store.py @@ -1030,11 +1030,12 @@ class BaseStore(driver.Store): if image_size == 0: image_size = combined_chunks_size - # Now we write the object manifest and return the - # manifest's etag... + # Now we write the object manifest in X-Object-Manifest + # header as defined for Dynamic Large Objects (DLO) Mode. + # This request does not include ETag as PUT request has not + # actual content that we need to verify. manifest = "%s/%s-" % (location.container, location.obj) - headers = {'ETag': hashlib.md5(b"").hexdigest(), - 'X-Object-Manifest': manifest} + headers = {'X-Object-Manifest': manifest} # The ETag returned for the manifest is actually the # MD5 hash of the concatenated checksums of the strings diff --git a/glance_store/tests/unit/test_swift_store.py b/glance_store/tests/unit/test_swift_store.py index 15fd5f3b..e1fc9f60 100644 --- a/glance_store/tests/unit/test_swift_store.py +++ b/glance_store/tests/unit/test_swift_store.py @@ -112,8 +112,9 @@ class SwiftTests(object): fixture_key = "%s/%s" % (container, name) if fixture_key not in fixture_headers: if kwargs.get('headers'): - etag = kwargs['headers']['ETag'] manifest = kwargs.get('headers').get('X-Object-Manifest') + etag = kwargs.get('headers') \ + .get('ETag', hashlib.md5(b'').hexdigest()) fixture_headers[fixture_key] = { 'manifest': True, 'etag': etag, diff --git a/glance_store/tests/unit/test_swift_store_multibackend.py b/glance_store/tests/unit/test_swift_store_multibackend.py index fa263019..07c44d97 100644 --- a/glance_store/tests/unit/test_swift_store_multibackend.py +++ b/glance_store/tests/unit/test_swift_store_multibackend.py @@ -109,8 +109,9 @@ class SwiftTests(object): fixture_key = "%s/%s" % (container, name) if fixture_key not in fixture_headers: if kwargs.get('headers'): - etag = kwargs['headers']['ETag'] manifest = kwargs.get('headers').get('X-Object-Manifest') + etag = kwargs.get('headers') \ + .get('ETag', hashlib.md5(b'').hexdigest()) fixture_headers[fixture_key] = { 'manifest': True, 'etag': etag,