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

Joshua Harlow harlowja at yahoo-inc.com
Fri Feb 28 00:30:57 UTC 2014


+1

I'd rather have good and supported clients that satisfy peoples needs
rather than nit-pick or remove v3 or something else...

Forward progress is good so I'll throw my hat for v3, but I doubt many
people that use the API's care (as long as their friendly client library
still works).

Make it discoverable, let said persons library of choice find a matching
version (or not find one), annnnnd profit.

-----Original Message-----
From: Monty Taylor <mordred at inaugust.com>
Reply-To: "OpenStack Development Mailing List (not for usage questions)"
<openstack-dev at lists.openstack.org>
Date: Thursday, February 27, 2014 at 3:30 PM
To: "openstack-dev at lists.openstack.org" <openstack-dev at lists.openstack.org>
Subject: Re: [openstack-dev] [nova] Future of the Nova API

>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
>>
>
>
>_______________________________________________
>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