Skip to content

Commit 722d5b4

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Use placement microversion 1.26 in update_from_provider_tree"
2 parents 85a6062 + 55fb7ef commit 722d5b4

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

nova/scheduler/client/report.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1095,7 +1095,11 @@ def _set_inventory_for_provider(self, context, rp_uuid, inv_data):
10951095
# @safe_connect, so we don't want to decorate this whole method with it
10961096
@safe_connect
10971097
def do_put(url, payload):
1098-
return self.put(url, payload, global_request_id=context.global_id)
1098+
# NOTE(vdrok): in microversion 1.26 it is allowed to have inventory
1099+
# records with reserved value equal to total
1100+
return self.put(
1101+
url, payload, global_request_id=context.global_id,
1102+
version=ALLOW_RESERVED_EQUAL_TOTAL_INVENTORY_VERSION)
10991103

11001104
# If not different from what we've got, short out
11011105
if not self._provider_tree.has_inventory_changed(rp_uuid, inv_data):

nova/tests/functional/test_report_client.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def delete(self, *args, **kwargs):
7979

8080
class SchedulerReportClientTestBase(test.TestCase):
8181

82-
def _interceptor(self, app=None):
82+
def _interceptor(self, app=None, latest_microversion=True):
8383
"""Set up an intercepted placement API to test against.
8484
8585
Use as e.g.
@@ -88,6 +88,10 @@ def _interceptor(self, app=None):
8888
ret = client.get_provider_tree_and_ensure_root(...)
8989
9090
:param app: An optional wsgi app loader.
91+
:param latest_microversion: If True (the default), API requests will
92+
use the latest microversion if not
93+
otherwise specified. If False, the base
94+
microversion is the default.
9195
:return: Context manager, which in turn returns a direct
9296
SchedulerReportClient.
9397
"""
@@ -102,7 +106,8 @@ def __enter__(inner_self):
102106
self._set_client(client)
103107
return client
104108

105-
interceptor = ReportClientInterceptor(CONF, latest_microversion=True)
109+
interceptor = ReportClientInterceptor(
110+
CONF, latest_microversion=latest_microversion)
106111
if app:
107112
interceptor.app = app
108113
return interceptor
@@ -505,6 +510,29 @@ def test_get_provider_tree_with_nested_and_aggregates(self):
505510
self.assertFalse(prov_tree.have_aggregates_changed(
506511
self.compute_uuid, [uuids.agg_disk_1, uuids.agg_disk_2]))
507512

513+
def test__set_inventory_reserved_eq_total(self):
514+
with self._interceptor(latest_microversion=False):
515+
# Create the provider
516+
self.client._ensure_resource_provider(self.context, uuids.cn)
517+
518+
# Make sure we can set reserved value equal to total
519+
inv = {
520+
fields.ResourceClass.SRIOV_NET_VF: {
521+
'total': 24,
522+
'reserved': 24,
523+
'min_unit': 1,
524+
'max_unit': 24,
525+
'step_size': 1,
526+
'allocation_ratio': 1.0,
527+
},
528+
}
529+
self.client._set_inventory_for_provider(
530+
self.context, uuids.cn, inv)
531+
self.assertEqual(
532+
inv,
533+
self.client._get_inventory(
534+
self.context, uuids.cn)['inventories'])
535+
508536
def test__set_inventory_for_provider(self):
509537
"""Tests for SchedulerReportClient._set_inventory_for_provider, NOT
510538
set_inventory_for_provider.

0 commit comments

Comments
 (0)