← Back to team overview

openstack team mailing list archive

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