Merge "Support member_of param for allocation candidates"

This commit is contained in:
Zuul 2018-02-15 17:40:49 +00:00 committed by Gerrit Code Review
commit b08d4f40fc
1 changed files with 155 additions and 0 deletions

View File

@ -0,0 +1,155 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
==================================================================
Support filtering by aggregate membership to allocation candidates
==================================================================
https://blueprints.launchpad.net/nova/+spec/alloc-candidates-member-of
Provide support for filtering allocation candidates by the underlying resource
provider's membership in one or more aggregates.
Problem description
===================
The list of resource providers that the placement API's ``GET
/allocation_candidates`` returns can be very large, particularly when many
compute hosts are empty. Sometimes nova may have information that would allow
the number of compute hosts to be dramatically reduced. For instance, if nova
knows that a particular project is "pinned" to a host aggregate, currently nova
asks placement for all the resource providers that meet the resource
requirements of the flavor and then promptly discards any compute hosts that
are not in that particular host aggregate (in the aggregate multi-tenancy
isolation filter).
This process could be much more efficient if the nova scheduler were to simply
ask placement to only return compute hosts that are associated with a nova host
aggregate.
Use Cases
---------
Simple post-processing scheduler filters like the aggregate multi-tenancy
isolation filter can be replaced with more efficient placement-side filtering.
Proposed change
===============
The existing ``GET /resource_providers`` placement REST API call supports a
``member_of`` query `parameter_`. This parameter is "a string representing an
aggregate uuid; or the prefix in: followed by a comma-separated list of strings
representing aggregate uuids. The returned resource providers must be
associated with at least one of the aggregates identified by uuid."
We propose to support this exact same parameter for the ``GET
/allocation_candidates`` placement REST API call.
.. _parameter: https://developer.openstack.org/api-ref/placement/#list-resource-providers
Alternatives
------------
We can continue to do post-processing of compute hosts by looking at host
aggregate relationships in the scheduler filters. As noted, however, this is
inefficient.
Data model impact
-----------------
None.
REST API impact
---------------
Add the ``member_of`` parameter to the ``GET /allocation_candidates`` REST API
call. Make the behavior and specification identical to the same-named parameter
for the ``GET /resource_providers`` REST API call. A new microversion will be
used to indicate to clients that the new parameter is available.
Security impact
---------------
None.
Notifications impact
--------------------
None.
Other end user impact
---------------------
None.
Performance Impact
------------------
Expected increase in overall scheduler performance for use cases where the
scheduler can limit the number of compute hosts it operates on.
Other deployer impact
---------------------
We should be able to deprecate the aggregate multi-tenancy isolation scheduler
filter after the "S" release.
Developer impact
----------------
None.
Upgrade impact
--------------
None.
Implementation
==============
Assignee(s)
-----------
Primary assignee:
jaypipes
Other contributors:
cdent
Work Items
----------
* Add support to the ``nova.objects.AllocationCandidates.get_by_requests()``
method for the ``member_of`` filter. This will require changes to the
``RequestGroup`` object as well
* Add new microversion to the placement REST API to support the ``member_of``
query parameter
Dependencies
============
In order for this functionality to be useful, nova host aggregates should be
"mirrored" into the placement service. Currently, nova host aggregates are not
yet showing up automatically in the placement service. A separate `blueprint_`
for this will be a soft dependency for this work.
.. blueprint_: https://blueprints.launchpad.net/nova/+spec/placement-mirror-host-aggregates
Testing
=======
Normal functional and unit testing.
Documentation Impact
====================
Document the REST API microversion in the appropriate reference docs.
References
==========
placement-req-filter blueprint (use case): https://review.openstack.org/544585