← Back to team overview

openstack team mailing list archive

Re: [Swift] Storage Server Redirection


On May 31, 2013, at 4:53 PM, "Luse, Paul E" <paul.e.luse@xxxxxxxxx> wrote:

> I’m looking at tacking this item:
> https://blueprints.launchpad.net/swift/+spec/support-storage-server-redirects
> and wanted to get some feedback on the following observations/thoughts:
> 1) This is a capability that would be checked in independent of other blueprints that might use it (2 are mentioned in the link above) and unit test code would be the only way to initially exercise it; it essentially enables other activities at this point

correct, IMO, but see below.

> 2) The basic idea is that an object server (via middleware or otherwise) will be given the ability to respond to a request to indicate ‘not me but I know who should handle this’.  I’m thinking this makes more sense as a 5xx response with additional information (partition, nodes) about the route included in the response body (as opposed to a 3xx code)  

There are already some specific checks around a 5xx response from object servers that relate to failure handling. I'd assume a 3xx response would be used for redirects, with any additional info given in headers. Can you share more about why a 5xx response is more appropriate?

> 3) The proxy server will be modified to process the response accordingly but using the partition, nodes info from the response as opposed to object_ring.get_nodes() to determine which nodes to use


> 4) Protection will be required to avoid endless redirection loops

Yes, but since this is handled by a single proxy worker on a per-request basis, protection should be fairly simple.

> 5) This applies only to GET operations

Supporting this on writes can allow for less of a replication storm later if the object server knows the correct location before proxy is updated (eg during a cluster upgrade or a ring deploy).

> Appreciate any thoughts/feedback.,  In addition to the two usages of this capability referenced in the blueprint I think there’s applicable to another Tiering blueprint which interests me as well.

The fun part will be figuring out what to do when the cluster is not in an internally consistent state (eg cluster upgrades or ring deployment times). You want to redirect if the object server knows best, but you don't if the proxy server knows best. It may make sense (from a usefulness perspective) to implement https://blueprints.launchpad.net/swift/+spec/send-ring-version first.

> Thanks
> Paul
> _______________________________________________
> Mailing list: https://launchpad.net/~openstack
> Post to     : openstack@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~openstack
> More help   : https://help.launchpad.net/ListHelp

Follow ups