[openstack-dev] [nova] Device tag in the API breaks in the old microversion
Matt Riedemann
mriedemos at gmail.com
Tue Jan 24 16:18:01 UTC 2017
On 1/24/2017 2:05 AM, Alex Xu wrote:
> Unfortunately the device tag support in the API was broken in the old
> Microversion https://bugs.launchpad.net/nova/+bug/1658571, which thanks
> to Kevin Zheng to find out that.
>
> Actually there are two bugs, just all of them are about device tag. The
> first one [0] is a mistake in the initial introduce of device tag. The
> new schema only available for the version 2.32, when the request version
>> 2.32, the schema fallback to the old one.
>
> The second one [1] is that when we bump the API to 2.37, the network
> device tag was removed accidentally which also added in 2.32 [2].
>
> So the current API behavior is as below:
>
> 2.32: BDM tag and network device tag added.
> 2.33 - 2.36: 'tag' in the BDM disappeared. The network device tag still
> works.
> 2.37: The network device tag disappeared also.
>
> There are few questions we should think about:
>
> 1. Should we fix that by Microversion?
> Thanks to Chris Dent point that out in the review. I also think we
> need to bump Microversion, which follow the rule of Microversion.
>
> 2. If we need Microversion, is that something we can do before release?
> We are very close to the feature freeze. And in normal, we need spec
> for microversion. Maybe we only can do that in Pike. For now we can
> update the API-ref, and microversion history to notice that, maybe a
> reno also.
>
> 2. How can we prevent that happened again?
> Both of those patches were reviewed multiple cycles. But we still
> miss that. It is worth to think about how to prevent that happened again.
>
> Talk with Sean. He suggests stop passing plain string version to the
> schema extension point. We should always pass APIVersionRequest object
> instead of plain string. Due to "version == APIVersionRequest('2.32')"
> is always wrong, we should remove the '__eq__'. The developer should
> always use the 'APIVersionRequest.matches' [3] method.
>
> That can prevent the first mistake we made. But nothing help for
> second mistake. Currently we only run the test on the specific
> Microversion for the specific interesting point. In the before, the new
> tests always inherits from the previous microversion tests, just like
> [4]. That can test the old API behavior won't be changed in the new
> microversion. But now, we said that is waste, we didn't do that again
> just like [5]. Should we change that back?
>
> Thanks
> Alex
>
> [0]
> https://review.openstack.org/#/c/304510/64/nova/api/openstack/compute/block_device_mapping.py
> [1] https://review.openstack.org/#/c/316398/37/nova/api/openstack/compute/schemas/servers.py@88
> [2] https://review.openstack.org/#/c/316398/37/nova/api/openstack/compute/schemas/servers.py@79
> [3] https://github.com/openstack/nova/blob/master/nova/api/openstack/api_version_request.py#L219
> [4] https://github.com/openstack/nova/blob/master/nova/tests/unit/api/openstack/compute/test_evacuate.py#L415
> [5] https://github.com/openstack/nova/blob/master/nova/tests/unit/api/openstack/compute/test_serversV21.py#L3584
>
>
>
> __________________________________________________________________________
> 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
>
First, thanks to Kevin and Alex for finding this issue and explaining it
in detail so we can understand the scope.
This is a nasty unfortunate issue which I really wish we could just fix
without a microversion bump but we have microversions for a reason,
which is to fix issues in the API. In thinking about if this were the
legacy 2.0 API, we always had a rule that you couldn't fix bugs in the
API if they changed the behavior, no matter how annoying.
So let's fix this with a microversion. I don't think we need to hold it
to the feature freeze deadline as it's a microversion only for a bug
fix, it's not a new feature. So that's a compromise at least and gives
us some time to get this done correctly and still have it fixed in
Ocata. We'll also want to document this in the api-ref and REST API
version history in whatever way makes it clear about the limitations
between microversions.
As for testing, I think using a mix of test inheritance and using
2.latest is probably a good step to take. I know we've had a mix of that
in different places in the functional API samples tests, but there was
never a clear rule about what do to with testing microversions and if
you should use inheritance to build on existing tests.
--
Thanks,
Matt Riedemann
More information about the OpenStack-dev
mailing list