On 09/28/2018 09:25 AM, Eric Fried wrote:
It's time somebody said this.

Every time we turn a corner or look under a rug, we find another use
case for provider traits in placement. But every time we have to have
the argument about whether that use case satisfies the original
"intended purpose" of traits.

That's only reason I've ever been able to glean: that it (whatever "it"
is) wasn't what the architects had in mind when they came up with the
idea of traits.

Don't pussyfoot around things. It's me you're talking about, Eric. You could just ask me instead of passive-aggressively posting to the list like this.

We're not even talking about anything that would require changes to
the placement API. Just, "Oh, that's not a *capability* - shut it
down."
That's precisely the attitude that got the Nova scheduler into the unmaintainable and convoluted mess that it is now: "well, who cares if a concept was originally intended to describe X, it's just *easier* for us to re-use this random piece of data in ways it wasn't intended because that way we don't have to change anything about our docs or our API".

And *this* is the kind of stuff you end up with:

https://github.com/openstack/nova/blob/99bf62e42701397690fe2b4987ce4fd7879355b8/nova/scheduler/filters/compute_capabilities_filter.py#L35-L107

Which is a pile of unreadable, unintelligible garbage; nobody knows how it works, how it originally was intended to work, or how to really clean it up.

Bubble wrap was originally intended as a textured wallpaper and a
greenhouse insulator. Can we accept the fact that traits have (many,
many) uses beyond marking capabilities, and quit with the arbitrary
restrictions?

They aren't arbitrary. They are there for a reason: a trait is a boolean capability. It describes something that either a provider is capable of supporting or it isn't.

Conceptually, having boolean traits/capabilities is important because it allows the user to reason simply about how a provider meets the requested constraints for scheduling.

Currently, those constraints include the following:

* Does the provider have *capacity* for the requested resources?
* Does the provider have the required (or forbidden) *capabilities*?
* Does the provider belong to some group?

If we want to add further constraints to the placement allocation candidates request that ask things like:

* Does the provider have version 1.22.61821 of BIOS firmware from Marvell installed on it? * Does the provider support an FPGA that has had an OVS program flashed to it in the last 20 days? * Does the provider belong to physical network "corpnet" and also support creation of virtual NICs of type either "DIRECT" or "NORMAL"?

Then we should add a data model that allow providers to be decorated with key/value (or more complex than key/value) information where we can query for those kinds of constraints without needing to encode all sorts of non-binary bits of information into a capability string.

Propose such a thing and I'll gladly support it. But I won't support bastardizing the simple concept of a boolean capability just because we don't want to change the API or database schema.

-jay

__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to