openstack team mailing list archive
-
openstack team
-
Mailing list archive
-
Message #06774
Re: Swift Consistency Guarantees?
On Tue, Jan 17, 2012 at 4:55 PM, Nikolaus Rath <Nikolaus@xxxxxxxx> wrote:
> Amazon S3 and Google Storage make very explicit (non-) consistency
> guarantees for stored objects. I'm looking for a similar documentation
> about OpenStack's Swift, but haven't had much success.
I don't think there's any documentation on this, but it would probably
be good to write up. Consistency in Swift is very similar to S3.
That is, there aren't many non-eventual consistency guarantees.
Listing updates can happen asynchronously (especially under load), and
older versions of files can show up in requests (deletes are just a
new "deleted" version of the file).
Swift can generally be relied on for read-after-write consistency,
like S3's regions other than the the US Standard region. The reason
S3 in US Standard doesn't have this guarantee is because it's more
geographically widespread - something Swift isn't good at yet. I can
imagine we'll have the same limitation when we get there.
Also like S3, Swift can't make any strong guarantees about
read-after-update or read-after-delete consistency. We do have an
"X-Newest" header that can be added to GETs and HEADs to make the
proxy do a quorum of backend servers and return the newest available
version, which greatly improves these, at the cost of latency.
> - If I receive a (non-error) response to a PUT request, am I guaranteed
> that the object will be immediately included in all object listings in
> every possible situation?
Nope.
> - If I receive a (non-error) response to a PUT request, am I guaranteed
> that a subsequent GET will return the new data in every possible
> situation (e.g. even if the server accepting the PUT crashes, and
> another server with an older version of the object is still online)?
Nope.
> - If I receive a (non-error) response to a DELETE request, am I
> guaranteed that the object will immediately be no longer included in all
> object listings in every possible situation?
Nope.
> - If the swift server looses an object, will the object name still be
> returned in object listings? Will attempts to retrieve it result in 404
> errors (as if it never existed) or a different error?
It will show up in listings, but give a 404 when you attempt to
retrieve it. I'm not sure how we can improve that with Swift's
general model, but feel free to make suggestions.
- Michael
Follow ups
References