[openstack-dev] [Magnum] Microversioning implementation
Hongbin Lu
hongbin.lu at huawei.com
Thu Jul 28 18:09:35 UTC 2016
Added this to the agenda of next team meeting [1].
I would like to ask clarification for " the community are discussing to using Semantic Versioning(X.Y.Z) instead of microversion X.Y ". Could anyone provide more information about that?
Best regards,
Hongbin
> -----Original Message-----
> From: Grant, Jaycen V [mailto:jaycen.v.grant at intel.com]
> Sent: July-28-16 10:52 AM
> To: OpenStack Development Mailing List (not for usage questions)
> Subject: [openstack-dev] [Magnum] Microversioning implementation
>
>
> There has been a discussion around micro versioning implementation
> going on in the following patch:
> https://review.openstack.org/#/c/343060/8 and I was asked to bring it
> to the mailing list for further discussion.
>
> Magnum added header support for microversioning according to the
> Openstack spec[1] but since we haven’t had any changes yet it was not
> being used. In the patch mentioned above I added code that provides
> infrastructure for implementing micro versions for our API methods. I
> took the idea from how Nova implemented micro versioning and used some
> of their code modified to work with Pecan. The basic idea is that you
> version a method using api_version decorator as shown below:
>
> @base.Controller.api_version("1.1")
> @expose.expose(BayCollection, types.uuid)
> def get_all(self, marker=None):
> """Retrieve a list of bays.
> # code for version 1.1
>
> @base.Controller.api_version(“1.2”, “1.3") @expose.expose(BayCollection,
> types.uuid) def get_all(self, marker=None):
> """Retrieve a list of bays.
> # code for versions 1.2 through 1.3
>
> @base.Controller.api_version("1.4")
> @expose.expose(BayCollection, types.uuid) def get_all(self,
> marker=None):
> """Retrieve a list of bays.
> # code for version 1.4 to latest version
>
>
> The api_version code takes care of selecting the correct version based
> on version requested in the header. It also checks for version overlaps
> in the methods and gaps in the method versions.
>
>
> While working on this Vijendar(working on the first api changes that
> need api versioning) and myself, evaluated several other alternatives:
>
> 1) Just have each method check the version object and handle the
> differences. This was the most basic solution and will work but we were
> concerned it would add a lot of duplicate code. We were also concerned
> it would be messy in the future as more and more micro versions were
> added. Each method would now be responsible for additional checking and
> more places to change code if there were overall micro version code
> changes in the future.
>
> 2) Separate pecan controllers for each micro version. When a new micro
> version is added a new controller would be created inheriting from the
> previous version controller. The new controller would override the
> modified methods. Routing changes would be added to make sure that the
> correct controller was used depending on the API header. We felt that
> the api_version decorator was slightly less complicated and less code
> overhead on each api version change.
>
> I’d appreciate feedback on whether this is the right way to go or if it
> would be better to go to alternative option 1 or 2. Here were some of
> the concerns by one of the cores in the code review:
>
> I don't accept this patch, mark it as -2:
> Reason:
> 1. we have already support microversion in our code base, and your
> propose (copied from nova) make things complicated.
> 2. I think you want to support "Support for async bay operations"
> for you adding microversion support, right?
> I would like suggest you as
> http://paste.openstack.org/show/543105/ , it should work for you
> 3. we don't have too may requirements to bump our microversion (I
> know you want to use it in bay-creation async), so we don't want bring
> much code here then we need to maintain it later.
> 4. the community are discussing to using Semantic Versioning(X.Y.Z)
> [1] instead of microversion X.Y [1]http://semver.org/
> If you have any questions , please discuss it in mailing list or
> weekly meeting.
> Eli.
>
>
>
> Jaycen Grant
> OSIC
>
>
>
>
> [1] http://specs.openstack.org/openstack/api-
> wg/guidelines/microversion_specification.html?highlight=microversioning
>
> >>
> _______________________________________________________________________
> ___
> 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
More information about the OpenStack-dev
mailing list