On Tue, Jan 17, 2012 at 4:55 PM, Nikolaus Rath <[email protected]> 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 _______________________________________________ Mailing list: https://launchpad.net/~openstack Post to : [email protected] Unsubscribe : https://launchpad.net/~openstack More help : https://help.launchpad.net/ListHelp

