[openstack-dev] [nova] Future of the Nova API
Matt Riedemann
mriedem at linux.vnet.ibm.com
Mon Feb 24 18:11:02 UTC 2014
On 2/24/2014 10:13 AM, Russell Bryant wrote:
> On 02/24/2014 01: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.
>
> Yes, this is a major concern. It has taken an enormous amount of work
> to get to where we are, and v3 isn't done. It's a good time to
> re-evaluate whether we are on the right path.
>
> The more I think about it, the more I think that our absolute top goal
> should be to maintain a stable API for as long as we can reasonably do
> so. I believe that's what is best for our users. I think if you gave
> people a choice, they would prefer an inconsistent API that works for
> years over dealing with non-backwards compatible jumps to get a nicer
> looking one.
>
> The v3 API and its unit tests are roughly 25k lines of code. This also
> doesn't include the changes necessary in novaclient or tempest. That's
> just *our* code. It explodes out from there into every SDK, and then
> end user apps. This should not be taken lightly.
>
>> 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
>
> I actually think this isn't so bad, as discussed above.
>
>> - not being able to fix numerous input validation issues
>
> I'm not convinced, actually. Surely we can do a lot of cleanup here.
> Perhaps you have some examples of what we couldn't do in the existing API?
>
> If it's a case of wanting to be more strict, some would argue that the
> current behavior isn't so bad (see robustness principle [1]):
>
> "Be conservative in what you do, be liberal in what you accept from
> others (often reworded as "Be conservative in what you send, be
> liberal in what you accept")."
>
> There's a decent counter argument to this, too. However, I still fall
> back on it being best to just not break existing clients above all else.
>
>> - have to forever proxy for glance/cinder/neutron with all
>> the problems that entails.
>
> I don't think I'm as bothered by the proxying as others are. Perhaps
> it's not architecturally pretty, but it's worth it to maintain
> compatibility for our users.
+1 to this, I think this is also related to what Jay Pipes is saying in
his reply:
"Whether a provider chooses to, for example,
deploy with nova-network or Neutron, or Xen vs. KVM, or support block
migration for that matter *should have no effect on the public API*. The
fact that those choices currently *do* effect the public API that is
consumed by the client is a major indication of the weakness of the API."
As a consumer, I don't want to have to know which V2 APIs work and which
don't depending on if I'm using nova-network or Neutron.
>
>> - Backporting V3 infrastructure changes to V2 would be a
>> considerable amount of programmer/review time
>
> Agreed, but so is the ongoing maintenance and development of v3.
>
>>
>> - 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.
>
> So here's the rub ... with the exception of the consistency bits, none
> of this is visible to users, which makes me think we should be able to
> do all of this on v2.
>
>> - 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.
>
> I'm not sure I understand this. A key point is that I think any
> evolving of the V2 API has to be backwards compatible, so there's no
> forcing them along involved.
>
>> - 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.
>
> One of my biggest principles with a new API is that we should not have
> to force a migration with a strict timeline like this. If we haven't
> built something compelling enough to get people to *want* to migrate as
> soon as they are able, then we haven't done our job. Deprecation of the
> old thing should only be done when we feel it's no longer wanted or used
> by the vast majority. I just don't see that happening any time soon.
>
> We have a couple of ways forward right now.
>
> 1) Continue as we have been, and plan to release v3 once we have a
> compelling enough feature set.
>
> 2) Take what we have learned from v3 and apply it to v2. For example:
>
> - The plugin infrastructure is an internal implementation detail that
> can be done with the existing API.
>
> - extension versioning is a concept we can add to v2
>
> - we've also been discussing the concept of a core minor version, to
> reflect updates to the core that are backwards compatible. This
> seems doable in v2.
>
> - revisit a new major API when we get to the point of wanting to
> effectively do a re-write, where we are majorly re-thinking the
> way our API is designed (from an external perspective, not internal
> implementation).
>
> [1] http://en.wikipedia.org/wiki/Robustness_principle
>
--
Thanks,
Matt Riedemann
More information about the OpenStack-dev
mailing list