... by storing SLO Etag and size in sysmeta.
Previously, we had to GET the manifest for every HEAD or conditional
request to an SLO. Worse, since SLO PUTs require that we HEAD every
segment, we'd GET all included sub-SLO manifests. This was necessary so
we could recompute the large object's Etag and content-length.
Since we already know both of those during PUT, we'll now store it in
object sysmeta. This allows us to:
* satisfy HEAD requests based purely off of the manifest's HEAD
response, and
* perform the If-(None-)Match comparison on the object server, without
any additional subrequests.
Note that the large object content-length can't just be parsed from
content-type -- with fast-POST enabled, the content-type coming out of
the object-server won't necessarily include swift_bytes.
Also note that we must still fall back to GETting the manifest if the
sysmeta headers were not found. Otherwise, we'd break existing large
objects.
Change-Id: Ia6ad32354105515560b005cea750aa64a88c96f9