I've got Glance running on a Ceph Swift backend store (NOT the OpenStack 
implementation of Swift.)  I'm noticing a problem around large images and the 
checksums/ETags on the manifest object.  I'm seeing a 422 Unprocessable Entity 
response from Swift on those PUTs.

(* Background on large objects in Swift below.)

I figured out this is due to a manifest object ETag verification implementation 
difference between Ceph Swift and OS Swift.

OS Swift verifies it just like any other object, md5'ing the content of the 
object - 
https://github.com/openstack/swift/blob/master/swift/obj/server.py#L439-L459

Ceph Swift actually does the full DLO checksum across all the component objects 
- https://github.com/ceph/ceph/blob/master/src/rgw/rgw_op.cc#L1765-L1781

The problem comes into play in the Glance Swift store driver.  It assumes the 
OS Swift behavior, and sends an ETag of md5("") in the PUT request - 
https://github.com/openstack/glance_store/blob/master/glance_store/_drivers/swift/store.py#L552

TBH, I don't understand why the Swift store driver is even sending an ETag 
there.  It would function just as well without sending an ETag at all.

Wondering if anyone else had bumped up against this?  I did a basic search over 
the Glance bugs and I did't see anything around this, so I opened 
https://bugs.launchpad.net/glance/+bug/1387311.  I'm surprised this hasn't 
surfaced before.

Thanks,
Mike



* See 
[1]<http://docs.openstack.org/developer/swift/overview_large_objects.html> and 
[2]<http://docs.openstack.org/api/openstack-object-storage/1.0/content/dynamic-large-object-creation.html>.
  But basically you chunk up the object, upload those separately, and then PUT 
a special manifest object which ties it all together.  The Etag/checksum on the 
manifest object is the "MD5 sum of the concatenated string of ETags for each of 
the segments in the manifest".

When the client provides an ETag header in the PUT request, the Swift API 
checks that against what it determines the checksum for the object to be.  If 
there is a mismatch, the response is a 422 Unprocessable Entity.
_______________________________________________
OpenStack-operators mailing list
OpenStack-operators@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-operators

Reply via email to