Merge "Physical NIC RP should be child of agent RP"
This commit is contained in:
commit
d6d6855234
@ -151,12 +151,14 @@ class PlacementState(object):
|
|||||||
self._driver_uuid_namespace,
|
self._driver_uuid_namespace,
|
||||||
hypervisor['name'],
|
hypervisor['name'],
|
||||||
device)
|
device)
|
||||||
|
agent_rp_uuid = place_utils.agent_resource_provider_uuid(
|
||||||
|
self._driver_uuid_namespace, hypervisor['name'])
|
||||||
rps.append(
|
rps.append(
|
||||||
DeferredCall(
|
DeferredCall(
|
||||||
self._client.ensure_resource_provider,
|
self._client.ensure_resource_provider,
|
||||||
{'name': rp_name,
|
{'name': rp_name,
|
||||||
'uuid': rp_uuid,
|
'uuid': rp_uuid,
|
||||||
'parent_provider_uuid': hypervisor['uuid']}))
|
'parent_provider_uuid': agent_rp_uuid}))
|
||||||
return rps
|
return rps
|
||||||
|
|
||||||
def deferred_create_resource_providers(self):
|
def deferred_create_resource_providers(self):
|
||||||
|
@ -161,11 +161,19 @@ class PlacementReportPlugin(service_base.ServicePluginBase):
|
|||||||
try:
|
try:
|
||||||
LOG.debug('placement client: {}'.format(deferred))
|
LOG.debug('placement client: {}'.format(deferred))
|
||||||
deferred.execute()
|
deferred.execute()
|
||||||
except Exception:
|
except Exception as e:
|
||||||
errors = True
|
errors = True
|
||||||
LOG.exception(
|
placement_error_str = \
|
||||||
'placement client call failed: %s',
|
're-parenting a provider is not currently allowed'
|
||||||
str(deferred))
|
if (placement_error_str in str(e)):
|
||||||
|
msg = (
|
||||||
|
'placement client call failed'
|
||||||
|
' (this may be due to bug'
|
||||||
|
' https://launchpad.net/bugs/1921150): %s'
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
msg = 'placement client call failed: %s'
|
||||||
|
LOG.exception(msg, str(deferred))
|
||||||
|
|
||||||
resources_synced = not errors
|
resources_synced = not errors
|
||||||
agent_db.resources_synced = resources_synced
|
agent_db.resources_synced = resources_synced
|
||||||
|
@ -47,14 +47,10 @@ class PlacementStateTestCase(base.BaseTestCase):
|
|||||||
self.client_mock = mock.Mock()
|
self.client_mock = mock.Mock()
|
||||||
self.driver_uuid_namespace = uuid.UUID(
|
self.driver_uuid_namespace = uuid.UUID(
|
||||||
'00000000-0000-0000-0000-000000000001')
|
'00000000-0000-0000-0000-000000000001')
|
||||||
# uuid below generated by the following command:
|
|
||||||
# uuid -v5 '00000000-0000-0000-0000-000000000001' 'fakehost'
|
|
||||||
self.hypervisor1_rp_uuid = uuid.UUID(
|
self.hypervisor1_rp_uuid = uuid.UUID(
|
||||||
'c0b4abe5-516f-54b8-b965-ff94060dcbcc')
|
'00000000-0000-0000-0000-000000000002')
|
||||||
# uuid below generated by the following command:
|
|
||||||
# uuid -v5 '00000000-0000-0000-0000-000000000001' 'fakehost2'
|
|
||||||
self.hypervisor2_rp_uuid = uuid.UUID(
|
self.hypervisor2_rp_uuid = uuid.UUID(
|
||||||
'544155b7-1295-5f10-b5f0-eadc50abc6d4')
|
'00000000-0000-0000-0000-000000000003')
|
||||||
self.kwargs = {
|
self.kwargs = {
|
||||||
'rp_bandwidths': {},
|
'rp_bandwidths': {},
|
||||||
'rp_inventory_defaults': {},
|
'rp_inventory_defaults': {},
|
||||||
|
17
releasenotes/notes/bug-1921150-c02692e548a3750e.yaml
Normal file
17
releasenotes/notes/bug-1921150-c02692e548a3750e.yaml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
issues:
|
||||||
|
- |
|
||||||
|
When using the minimim-bandwidth QoS feature due to bug
|
||||||
|
https://launchpad.net/bugs/1921150 physical NIC resource providers
|
||||||
|
were for some time created with the wrong parent (i.e. the
|
||||||
|
hypervisor RP). This is now partially fixed and new resource
|
||||||
|
providers are created now with the expected parent (i.e. the agent
|
||||||
|
RP). However Placement does not allow re-parenting an already
|
||||||
|
existing resource provider, therefore the following Placement
|
||||||
|
DB update may be needed after the fix for bug 1921150 is applied:
|
||||||
|
neutron/tools/bug-1921150-re-parent-device-rps.sql
|
||||||
|
Until all resource providers have the proper parent, neutron-server
|
||||||
|
will retry the re-parenting update, which will be rejected every time,
|
||||||
|
therefore expect polluted logs and some wasted load on Placement.
|
||||||
|
However please note that the bandwidth-aware scheduling is supposed
|
||||||
|
to work even with the wrongly parented resource providers.
|
52
tools/bug-1921150-re-parent-device-rps.sql
Normal file
52
tools/bug-1921150-re-parent-device-rps.sql
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
not use this file except in compliance with the License. You may obtain
|
||||||
|
a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
License for the specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Fix wrongly parented physical NIC resource providers due to bug
|
||||||
|
https://bugs.launchpad.net/neutron/+bug/1921150
|
||||||
|
|
||||||
|
Compatible with MySQL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
USE placement;
|
||||||
|
|
||||||
|
SELECT 'Affected device RPs:' as '';
|
||||||
|
|
||||||
|
SELECT *
|
||||||
|
FROM resource_providers
|
||||||
|
WHERE
|
||||||
|
(name LIKE '%:NIC Switch agent:%' OR
|
||||||
|
name LIKE '%:Open vSwitch agent:%') AND
|
||||||
|
parent_provider_id=root_provider_id;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
To find the proper parent we have to use the naming scheme of the RPs which
|
||||||
|
is <computePR.name>:<agentRP.name>:<deviceRP.name>
|
||||||
|
The name of the proper parent for deviceRP is name of the deviceRP minus
|
||||||
|
everything after the second ':'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
UPDATE resource_providers as rp
|
||||||
|
INNER JOIN resource_providers as parent_rp
|
||||||
|
ON
|
||||||
|
parent_rp.name=SUBSTRING(rp.name, 1, LOCATE(':', rp.name, LOCATE(':', rp.name) + 1) -1)
|
||||||
|
SET
|
||||||
|
rp.parent_provider_id = parent_rp.id
|
||||||
|
WHERE
|
||||||
|
(rp.name LIKE '%:NIC Switch agent:%' OR
|
||||||
|
rp.name LIKE '%:Open vSwitch agent:%') AND
|
||||||
|
rp.parent_provider_id=rp.root_provider_id;
|
||||||
|
|
||||||
|
SELECT CONCAT('Fixed ', ROW_COUNT(), ' RPs') as '';
|
Loading…
Reference in New Issue
Block a user