[openstack-dev] Ugly Hack to deal with multiple versions

Sean Dague sean at dague.net
Tue Feb 4 16:31:30 UTC 2014


On 02/05/2014 01:09 AM, Dean Troyer wrote:
> On Tue, Feb 4, 2014 at 9:00 AM, Sean Dague <sean at dague.net
> <mailto:sean at dague.net>> wrote:
> 
>     Can you be more specific about what goes wrong here? I'm not entirely
>     sure I understand why an old client of arbitrary age needs to be
>     supported with new OpenStack. The contract is the API, not the client,
>     and an old client that doesn't do version discovery is just a buggy
>     client from what I'm concerned. Time to release a new version.
> 
> 
> Problem 1: API version discovery is not universally considered to be
> part of the API and therefore is not defined by most services beyond
> them responding to a '/' request with a 300 response and a list of
> versions. No two of these responses look alike except where the source
> was copied from an existing service.
> 
> Problem 2: Identity is unique in that it is handed a deployment-defined
> URL to authenticate and get endpoints for all other services.  Most of
> these auth URLs have a version hard-coded in them because the client
> didn't do version discovery or negotiation until recently.  This is what
> we're talking about here, how to remove the version from this URL and
> not break old clients.  We can't.  Not without doing nasty things like
> detecting an old client and compensating for it server-side.  So we have
> to work out a way for new clients to do discovery even when handed a URL
> that has a version in it.
> 
> I've tested a couple of more generalized approaches, and the best
> solution I have found so far is to simply special-case the known legacy
> behaviour then drop in to the general discovery process. 
> 
>     I also wonder if this is an issue with version discovery implementation.
>     It seems like if we think this is going to be affecting multiple
>     services before doing an odd hack for keystone, we should actually
>     figure out a pattern that works for all services, and figure out why
>     this has only just become an issue. Most of the other services have done
> 
> 
> The services that traditionally embed a version inside the URL followed
> by a tenant ID or something get even deeper into parsing the URL to hack
> the version.
> 
>     dual APIs at some point over the last 2 years, and this didn't seem to
>     trip them up too badly. What happened differently in keystone that made
>     this an issue? And what can be learned about how we structure APIs going
>     forward.
> 
> 
> I think the difference is this is the first API we have actually tried
> to deprecate and we don't have the option to hide it in an updated SC
> endpoint.  The service catalog has hidden a lot of this pain for other
> services because the clients generally can use whatever endpoint the SC
> gives it.
> 
> 
> a) Version discovery needs to be rationalized across the services.
>  We've talked about this at summits before, and proposals have been
> written.  And here we are.  We'll do it again in Atlanta, hopefully for
> the last time.
> 
> b) Define a common structured endpoint and let the client assemble the
> components into the final URL.  If the service catalog had a base URL
> for compute, and a list of versions, and the additional bits to be
> appended the client could make an intelligent choice and assemble the
> endpoint.  It isn't like the client doesn't already have to know how the
> REST URLs are constructed.
> 
> b-alt) Stop putting things like tenant IDs in the SC.  This has the same
> issue as the auth URL in how to do this without instantly breaking the
> existing clients.

Ok, much clearer now to me (though I'll still claim jetlag for some bits
not sinking in).

I think a really important thing to keep in mind is any solution that's
implemented client side, is something that all the other OpenStack SDKs
are going to have to implement as well. So an ugly hack isn't just
python-keystone... and be done. It's also just hoisted doing that ugly
hack on the php / go sdk teams, jclouds, deltacloud, etc. Something they
may not be aware is going to break them, or their users.

So we really need version discovery rationalized once and for all,
otherwise this nightmare goes far beyond something that's fixable within
software that we control.

	-Sean

-- 
Sean Dague
Samsung Research America
sean at dague.net / sean.dague at samsung.com
http://dague.net

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 482 bytes
Desc: OpenPGP digital signature
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20140205/16480844/attachment.pgp>


More information about the OpenStack-dev mailing list