Use in_tree getting allocation candidates¶
https://blueprints.launchpad.net/nova/+spec/use-placement-in-tree
In Stein, we introduced in_tree=<rp_uuid>
parameter in placement for the
GET /allocation_candidates
endpoints, which limits the response to
resource providers within the same tree of the specified resource provider.
(See the Filter Allocation Candidates by Provider Tree spec for details)
This spec proposes to use this parameter for optimization when we create or move instances and the target host is already picked before asking to the scheduler.
Problem description¶
In create and move instance operations, there are cases where the target host is already picked before calling the scheduler. Even in such cases, nova retrieves all the possible candidates from placement. This is inefficient and can cause, for example, Bug#1777591 filtering out the pre-determined target resource provider by Limiting Allocation Candidates feature in placement.
Use Cases¶
Creating an instance to a host specified by operator
Migrating an instance to a host specified by operator
Live-migrating an instance to a host specified by operator without forcing
Evacuating an instance to a host specified by operator without forcing
Rebuilding an instance in the same host with a new image.
Proposed change¶
Instead of issuing the inefficient request to placement, we will use
in_tree
query with the pre-determined target host resource provider
uuid calling the GET /allocation_candidates
API.
Alternatives¶
Disable the Limiting Allocation Candidates feature calling placement. This is actually what we have now as workaround, but not efficient. (See the unlimiting allocation candidates patch for details)
Data model impact¶
The RequestGroup
object will have a new field, in_tree
in the new
version.
REST API impact¶
N/A
Security impact¶
N/A
Notifications impact¶
N/A
Other end user impact¶
N/A
Performance Impact¶
The performance would be improved because we don’t need to get all the candidates.
Other deployer impact¶
This spec is proposed on the assumption that the placement code in nova
repository will be removed in Train release and that all the deployers will
use the extracted placement from Train release. Note that in_tree
queryparam to placement is not supported in placement hosted in nova.
Developer impact¶
N/A
Upgrade impact¶
We will have a minimum required placement API check in the nova-status upgrade checks command.
Implementation¶
Assignee(s)¶
- Primary assignee:
tetsuro0907
Work Items¶
Changes to support the new feature
Add
in_tree
field inRequestGroup
object implementing the translation into the placement query parameterAdd a database query in the scheduler to translate
RequestSpec.force_hosts/force_nodes
andRequestSpec.requested_destination
to the compute node uuid and set it to the newRequestGroup.in_tree
field
Revert the workaround in unlimiting allocation candidates patch
Dependencies¶
The Filter Allocation Candidates by Provider Tree spec, but this has been completed in Stein.
Testing¶
Functional tests will be added to ensure the server operations described in the Use Cases section.
Documentation Impact¶
N/A
References¶
Bug#1777591 reported in the launchpad