[nova] review guide for the bandwidth patches

Matt Riedemann mriedemos at gmail.com
Thu Dec 20 18:14:53 UTC 2018


On 12/20/2018 8:47 AM, Jay Pipes wrote:
> 
> The problem with feature flags is they are not discoverable. As much as 
> I hate API extensions, at least they are discoverable.

100% agree. Config-driven API behavior like this flies in the face of 
any kind of hope for interoperability of this feature. Can I do this on 
cloud X? Maybe? Can I do it on cloud Y? Let's find out! At the very 
least, I would think if you're going to add a config option to 
enable/disable this support in the compute API, at least temporarily, 
you would fail any requests which include ports with QoS resource 
requests because we're not going to honor them. That aligns more with 
what I was saying about how I thought the "reject" patches would come 
earlier in the series since we're currently not supporting this feature, 
and lying to users by allowing them to attach these kinds of ports. 
Although I might be conflating QoS ports in general and QoS ports that 
have the bandwidth resource request things on them.

During the spec review, we waffled a bit on whether or not this should 
have a new microversion with it [1][2]. The way this works definitely 
sounds like how volume multiattach is setup - you create a resource in 
another service with a special characteristic and then try to attach 
that thing to a server. Nova can either support that thing or not, and 
the only way for a user to find that out without a microversion is to 
try it and find out (does it fail? if it doesn't fail, is the thing 
working in my guest? if not, is it because it's not supported or because 
something failed or there is a bug?). With volume multiattach we added a 
microversion so that users could know if they can even make the request 
to attach those types of volumes so they didn't have to guess. So I 
could argue that QoS ports like this should get similar treatment, but 
things get fuzzy when it's implicit behavior on some external resource

> 
> Is there a reason why we can't just put code into Nova that, upon seeing 
> the resource requests, acts on it? Is there a reason it needs to be 
> behind a feature flag or even needs to query Neutron for extension 
> support? I mean, if it's in the response payload, just use it, right?

The main reason is how the code is written backward, as I've said 
elsewhere in this thread. If everything was properly plumbed in from the 
bottom up for at least creating servers with these kinds of ports (and 
cleaning them up properly), then it's just a matter of doing like you 
said - take action on the thing if it's there. Like [3] I think we could 
explicitly fail for things that are not supported until they do become 
supported, like any move operations. Whether those are considered bug 
fixes or new features (a la microversions) is debatable. It sucks adding 
stuff that works when creating a server but isn't supported when you 
perform actions on that server, and it sucks holding up features before 
everything is ready, and it sucks to need microversions for every little 
thing that ideally would have just be done up front, so I can't really 
say here on what we should do. I know in the golden days before 
microversions it was totally kosher to just feature flag our way to 
nirvana and we're still dealing with a lot of that fallout (like the 
fact that live migration with NUMA-affined instances still doesn't work 
properly).

[1] 
https://review.openstack.org/#/c/502306/17/specs/rocky/approved/bandwidth-resource-provider.rst@142
[2] 
https://review.openstack.org/#/c/502306/26/specs/rocky/approved/bandwidth-resource-provider.rst@99
[3] https://review.openstack.org/#/c/611088/

-- 

Thanks,

Matt



More information about the openstack-discuss mailing list