[openstack-dev] [Nova] Should we signal backwards incompatible changes in microversions?
Sylvain Bauza
sbauza at redhat.com
Tue Feb 16 08:33:22 UTC 2016
Le 16/02/2016 09:30, Sylvain Bauza a écrit :
>
>
> Le 16/02/2016 04:09, Alex Xu a écrit :
>>
>>
>> 2016-02-16 9:47 GMT+08:00 GHANSHYAM MANN <ghanshyammann at gmail.com
>> <mailto:ghanshyammann at gmail.com>>:
>>
>> Regards
>> Ghanshyam Mann
>>
>>
>> On Mon, Feb 15, 2016 at 12:07 PM, Alex Xu <soulxu at gmail.com
>> <mailto:soulxu at gmail.com>> wrote:
>> > If we support 2.x.y, when we bump 'x' is a problem. We didn't
>> order the API
>> > changes for now, the version of API change is just based on the
>> order of
>> > patch merge. For support 2.x.y, we need bump 'y' first for
>> back-compatible
>> > changes I guess.
>> >
>> > As I remember, we said before, the new feature is the
>> motivation of user
>> > upgrade their client to support new version API, whatever the
>> new version is
>> > backward compatible or incompatible. So I guess the initial
>> thinking we hope
>> > user always upgrade their code than always stop at old version?
>> If we bump
>> > 'x' after a lot of 'y', will that lead to user always stop at
>> 'x' version?
>> > And the evolution of api will slow down.
>> >
>> > Or we limit to each release cycle. In each release, we bump 'y'
>> first, and
>> > then bump 'x'. Even there isn't any back-incompatible change in
>> the release.
>> > We still bump 'x' when released. Then we can encourage user
>> upgrade their
>> > code. But I still think the back-incompatible API change will
>> be slow down
>> > in development, as it need always merged after back-compatible
>> API change
>> > patches.
>>
>> Yea that true and will be more complicated from development
>> perspective which leads to slow down the evolution of API changes.
>> But if we support x.y then still we can change x at any time back
>> in-comp changes happens(i mean before y also)? Or I may not be
>> getting
>> the issue you mentioned about always bump y before x.
>>
>>
>> If the back-incompatible change merged before back-compatible change,
>> then 'y' become useless. For example, the initial version is 2.1.0,
>> then we have 3 back-comp and 3 in-comp changes, and we are unlucky,
>> in-comp changes merged first, then we get version 2.4.3, then if user
>> want to use those back-comp changes, it still need upgrade those 3
>> in-comp changes.
>>
>>
>> I like the idea of distinguish the backward comp and in-comp changes
>> with x and y which always gives clear perspective about changes.
>> But it should not lead users to ignore y. I mean some backward comp
>> changes which are really good gets ignored by users as they start
>> look
>> at the x only.
>> For example- "adding attribute in resource representation" is back
>> comp change (if so) and if that is added as y then, it might get
>> ignored by users.
>>
>> Another way to clearly distinguish backward comp and in-comp changes
>> is through documentation which was initially discussed during
>> microversion specs. Currently doc has good description about each
>> changes but not much clear way about backward comp or not.
>> Which we can do by adding a clear flag [Backward Compatible/
>> Incompatible] for each version in doc [1]-
>>
>>
>> +1 for doc the change is backward comp or not.
>
> I'm not usually good at thinking API references, but something pinged
> my brain so lemme know if that's terrible or not.
> Why not semantically say that :
> - if the API microversion is a ten, then it's a non-backwards
> compatible change
> - if not, it's backwards-compatible
>
> If you are like with the version #29 and add a new
> backwards-compatible version, then it would be #31 (and not #30).
>
> That way, you would still have a monotonic increase, which I think was
> an agreement when discussing about microversioning, but it would help
> the users which would know the semantics and just look whether a ten
> is between the version they use and the version they want (and if so,
> if it was implemented).
>
> Call me dumb, it's just a thought.
> -Sylvain
>
One slight improvement could be to consider hundreds and not tens for
major versions. That would leave 99 'minor' versions between majors,
which I think is doable.
-S
>> >
>> >
>> >
>> > 2016-02-13 4:55 GMT+08:00 Andrew Laski <andrew at lascii.com
>> <mailto:andrew at lascii.com>>:
>> >>
>> >> Starting a new thread to continue a thought that came up in
>> >>
>> >>
>> http://lists.openstack.org/pipermail/openstack-dev/2016-February/086457.html.
>> >> The Nova API microversion framework allows for backwards
>> compatible and
>> >> backwards incompatible changes but there is no way to
>> programmatically
>> >> distinguish the two. This means that as a user of the API I
>> need to
>> >> understand every change between the version I'm using now and
>> a new
>> >> version I would like to move to in case an intermediate
>> version changes
>> >> default behaviors or removes something I'm currently using.
>> >>
>> >> I would suggest that a more user friendly approach would be to
>> >> distinguish the two types of changes. Perhaps something like
>> 2.x.y where
>> >> x is bumped for a backwards incompatible change and y is still
>> >> monotonically increasing regardless of bumps to x. So if the
>> current
>> >> version is 2.2.7 a new backwards compatible change would bump
>> to 2.2.8
>> >> or a new backwards incompatible change would bump to 2.3.8. As
>> a user
>> >> this would allow me to fairly freely bump the version I'm
>> consuming
>> >> until x changes at which point I need to take more care in
>> moving to a
>> >> new version.
>> >>
>> >> Just wanted to throw the idea out to get some feedback. Or
>> perhaps this
>> >> was already discussed and dismissed when microversions were
>> added and I
>> >> just missed it.
>> >>
>> >>
>> __________________________________________________________________________
>> >> OpenStack Development Mailing List (not for usage questions)
>> >> Unsubscribe:
>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>> <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>> >> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>> >
>> >
>> >
>> >
>> __________________________________________________________________________
>> > OpenStack Development Mailing List (not for usage questions)
>> > Unsubscribe:
>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>> <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>> > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>> >
>>
>> [1]
>> https://github.com/openstack/nova/blob/master/nova/api/openstack/rest_api_version_history.rst
>>
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe:
>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>> <http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe>
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>>
>>
>>
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe:OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20160216/24965faa/attachment.html>
More information about the OpenStack-dev
mailing list