[openstack-dev] [nova] Future of the Nova API

Monty Taylor mordred at inaugust.com
Thu Feb 27 23:30:17 UTC 2014


Sorry for the top post. I was asked to look at this thread and toss in 
my €0.02 but I do not believe I could possibly read this whole thread - 
I'm too jet lagged. So...

As a current large-scale production consumer of the API, I don't care at 
all as long as python-novaclient keeps working at the Python Library API 
level. I do  not care about the REST api specifics at all. I would 
imagine that most Java folks only care that jclouds works. I would 
imagine that most Ruby users would only care that fog works. Since 
jclouds already supports a billion apis, I doubt supporting v2 and v3 
would be hard for them.

AND

As long as the v2/v3 switch is discoverable by the library and I don't, 
as a consumer of the library, need to know about it - so that 
python-novaclient will continue to support client operations on both 
REST versions - I'm fine with that - because I want to continue to be 
able to operate the old Diablo-based HP cloud, the new trunk HP cloud, 
the trunk Rackspace cloud and the TripleO cloud with the same scripts.

That's what I want. I'm sure other people want other things.

On 02/24/2014 07:50 AM, Christopher Yeoh wrote:
> Hi,
>
> There has recently been some speculation around the V3 API and whether
> we should go forward with it or instead backport many of the changes
> to the V2 API. I believe that the core of the concern is the extra
> maintenance and test burden that supporting two APIs means and the
> length of time before we are able to deprecate the V2 API and return
> to maintaining only one (well two including EC2) API again.
>
> This email is rather long so here's the TL;DR version:
>
> - We want to make backwards incompatible changes to the API
>    and whether we do it in-place with V2 or by releasing V3
>    we'll have some form of dual API support burden.
>    - Not making backwards incompatible changes means:
>      - retaining an inconsistent API
>      - not being able to fix numerous input validation issues
>      - have to forever proxy for glance/cinder/neutron with all
>        the problems that entails.
>    - Backporting V3 infrastructure changes to V2 would be a
>      considerable amount of programmer/review time
>
> - The V3 API as-is has:
>    - lower maintenance
>    - is easier to understand and use (consistent).
>    - Much better input validation which is baked-in (json-schema)
>      rather than ad-hoc and incomplete.
>
> - Whilst we have existing users of the API we also have a lot more
>    users in the future. It would be much better to allow them to use
>    the API we want to get to as soon as possible, rather than trying
>    to evolve the V2 API and forcing them along the transition that they
>    could otherwise avoid.
>
> - We already have feature parity for the V3 API (nova-network being
>    the exception due to the very recent unfreezing of it), novaclient
>    support, and a reasonable transition path for V2 users.
>
> - Proposed way forward:
>    - Release the V3 API in Juno with nova-network and tasks support
>    - Feature freeze the V2 API when the V3 API is released
>      - Set the timeline for deprecation of V2 so users have a lot
>        of warning
>      - Fallback for those who really don't want to move after
>    deprecation is an API service which translates between V2 and V3
>    requests, but removes the dual API support burden from Nova.
>
> End TL;DR.
>
>
> Although its late in the development cycle I think its important to
> discuss this now rather than wait until the summit because if we go
> ahead with the V3 API there is exploratory work around nova-network
> that we would like to do before summit and it also affects how we look
> at significant effort applying changes to the V2 API now. I'd also
> prefer to hit the ground running with work we know we need to do in Juno
> as soon as it opens rather than wait until the summit has finished.
>
> Firstly I'd like to step back a bit and ask the question whether we
> ever want to fix up the various problems with the V2 API that involve
> backwards incompatible changes. These range from inconsistent naming
> through the urls and data expected and returned, to poor and
> inconsistent input validation and removal of all the proxying Nova
> does to cinder, glance and neutron. I believe the answer to this is
> yes - inconsistencies in the API make it harder to use (eg do I have a
> instance or a server, and a project or a tenant just to name a
> couple) and more error prone and proxying has caused several painful to
> fix issues for us.
>
> So at some point existing users of the API will need to make changes
> or we'll effectively have to carry two APIs, whether it be inside the
> V2 API code or split between a V2 implementation and V3
> implementation. I think the number of changes required often makes it
> easier to maintain such a split in different files rather than a
> single one to avoid large slabs of if/else which makes the underlying
> code harder to understand and more error prone in the eventual
> removal. Its also more difficult to use decorators like we have for
> input validation in V3 if the function also has to support the old
> behaviour.
>
> One approach that has been suggested for retaining the V2 API is to
> gradually over time mark individual interfaces deprecated, support the
> new behaviour in parallel and then after the deprecation period remove
> the original behaviour.
>
> With this I think we have to consider that if Open Stack continues to
> be successful then although we already have an existing user base of
> the V2 API, that with every release we have more and more new users
> coming in. In fact in a few cycles we may have more post-Icehouse
> users than pre-Icehouse ones. But by taking this gradual approach we
> are basically saying to new users of the API that although we know
> where we are headed with the API that they can't actually write
> against it yet and instead have to use the V2 API.  And then every
> cycle they will need to update their apps as we slowly deprecate parts
> and replace them with the new interface. This seems to be a rather
> hostile approach to people considering using our API. Also every
> release we delay releasing the V3 API or defer making backwards
> incompatible changes to V2 (if that's the route we take), the more
> users we put into this situation of having to rework the software they
> use to continue to access our API in the future.
>
> Another side effect of this is new features such as tasks (which was
> one of the significant reasons for not releasing the V3 API in
> Icehouse) would not be able to be designed the way we want it in the
> V2 API because it requires changes to the core API. So at least in the
> short term we'd end up with a suboptimal API for tasks. And then go
> through the pain of moving to the API we really want.
>
> One thing to note is that the transition from V2 to V3 for users of
> the API it does not have to be a big-bang thing. For example, an
> application can quite legitimately create a server using the V2 API,
> attach a volume using the V3 API, detach it using the V2 API and
> delete the server using the V3 API. It is just a fairly thin layer on
> top of the rest of Nova. So existing users of the API can decide
> whether they want to tackle the job of moving from the V2 to V3 API in
> one big step or in smaller ones over time.
>
> We have also done a considerable amount of work in the V3 API in terms
> of infrastructure which is not always visible to the API user. Such as
> an improved plugin structure, better isolation between plugins,
> versioning, better error handling, better input validation etc which
> would all have to be backported to the V2 API. All in all I think if
> you compare V2 and V3 API code, the latter is a lot cleaner and easier
> to maintain. This is a non trivial amount of work that would take both
> a lot of programmer and reviewer time in Juno, and perhaps overflow
> into Koala. Time that has already been spent on the V3 API.
>
> What I think our plan for the API transition should be is:
>
> - Release the V3 API in Juno (it is probably too late to release it in
>    Icehouse at this stage now without a bunch of FFEs, but
>    theoretically we could make the skeleton of the tasks API changes in
>    IceHouse without functional tasks which would allow tasks to be
>    added in a backwards compatible manner in Juno). The Juno release
>    would have both full task and nova-network support.
>
> - Feature freeze the V2 API development in Juno or at the very least
>    when the V3 API is marked as current/supported (bug fixes are of
>    course ok). I have several reasons for wanting to do this. The first
>    is to avoid the burden of actively developing two APIs. We already
>    have feature parity in V3 with V2 - with the exception of
>    nova-network which was deliberately left out of the V3 API because
>    it was considered deprecated, but has recently been re-opened for
>    development. So an exception for V2 API nova network development
>    would seem reasonable until the V3 API supports it fully.
>
>    I think it's a pretty unusual situation where a project decides to
>    continue significant feature development on both the latest version
>    and the next most recent version. We don't for example allow feature
>    development in Havana. And I don't think the situation needs to be
>    any different for V2 once V3 is available. We already have feature
>    parity and we have a reasonable transition plan for existing users
>    so I think its quite reasonable to say to users that if they want
>    new features that they need to access them via the new API.
>
>    Although as mentioned above, its possible to use the V3 API for new
>    features even if a user is using the V2 API for everything else. So
>    any new features could still be accessed by people who just to only
>    modify their existing V2 API based programs to take advantage of the
>    new functionality without modifying the rest. Also deployers, if they
>    wished, could through policy only expose the parts of the V3 API that
>    they want (even though the core would have to be loaded it doesn't
>    necessarily have to be accessible to everyone).
>
> - At summit or the Juno midcycle meetup decide on a release when we will
>    remove the V2 API so existing users of the V2 API have plenty of
>    warning. They can decide either to do a gradual transition or a
>    big-bang move to the V3 API. Ultimately where we set the date for
>    the removal of the V2 API is going to be a balance between needs of
>    users and what we can afford to spend on maintenance of it. But
>    whether we try to evolve the V2 API or move to the V3 API we still
>    need to make that decision. If we choose the V3 API we can also
>    still choose to gradually deprecate the V2 over time (eg remove
>    support for rarely used extensions earlier and point users to the V3
>    API for that functionality).
>
> - For those who *really* *really* don't want to move off the V2 API
>    when the V2 API is removed, there is the possibility of writing a
>    separate translation service which takes V2 API REST requests and
>    translates them to V3 API requests and also does the proxying that
>    the V2 API currently does for glance/neutron/cinder. Its not a
>    trivial job, but should be possible and does remove the burden of
>    supporting two APIs in the Nova tree.
>
>
> In summary, we need to fix the problems with the V2 API which requires
> changes which are backwards incompatible. I believe releasing the V3
> API in Juno and setting a deprecation timeframe for V2 well in advance
> is the best overall solution we have for both our users (both current
> and future) and us as developers - it balances the needs of users of
> our API and what the easiest path for us as developers is. Attempting
> to "evolve" the V2 API is on the surface attractive because we don't
> in the short term need to make any decisions around deprecation but
> will in the longer term involve more pain for everyone.
>
> Chris
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>




More information about the OpenStack-dev mailing list