From c76f3bd7bc5da52d117f5478a6c9e17ffc840f7a Mon Sep 17 00:00:00 2001 From: Matt Riedemann Date: Tue, 25 Jun 2019 14:49:48 -0400 Subject: [PATCH] Deprecate non-update_provider_tree compat code With all in-tree virt drivers now implementing the update_provider_tree interface, we can deprecate the compatibility code in the ResourceTracker. This change simply logs a warning if the driver does not implement the upt interface and sets the timer for removal in the U release at the earliest. The resource tracker unit tests will need to be cleaned up but that can happen in a separate change so it does not slow down this deprecation. Change-Id: I1eae47bce08f6292d38e893a2122289bcd6f4b58 --- nova/compute/resource_tracker.py | 7 +++++++ nova/tests/unit/compute/test_resource_tracker.py | 6 ++++++ .../train-deprecate-non-upt-compat-d061edf3f702eeec.yaml | 8 ++++++++ 3 files changed, 21 insertions(+) create mode 100644 releasenotes/notes/train-deprecate-non-upt-compat-d061edf3f702eeec.yaml diff --git a/nova/compute/resource_tracker.py b/nova/compute/resource_tracker.py index f7258cd44f..5b37f48d8d 100644 --- a/nova/compute/resource_tracker.py +++ b/nova/compute/resource_tracker.py @@ -983,6 +983,13 @@ class ResourceTracker(object): traits = self._get_traits(nodename, provider_tree=prov_tree) prov_tree.update_traits(nodename, traits) except NotImplementedError: + # TODO(mriedem): Remove the compatibility code in the U release. + LOG.warning('Compute driver "%s" does not implement the ' + '"update_provider_tree" interface. Compatibility for ' + 'non-update_provider_tree interfaces will be removed ' + 'in a future release and result in an error to report ' + 'inventory for this compute service.', + CONF.compute_driver) # update_provider_tree isn't implemented yet - try get_inventory try: inv_data = self.driver.get_inventory(nodename) diff --git a/nova/tests/unit/compute/test_resource_tracker.py b/nova/tests/unit/compute/test_resource_tracker.py index 17943e0484..4ddeb345c6 100644 --- a/nova/tests/unit/compute/test_resource_tracker.py +++ b/nova/tests/unit/compute/test_resource_tracker.py @@ -445,6 +445,7 @@ def setup_rt(hostname, virt_resources=_VIRT_DRIVER_AVAIL_RESOURCES, virt_resources = copy.deepcopy(virt_resources) vd.get_available_resource.return_value = virt_resources vd.get_inventory.side_effect = NotImplementedError + # TODO(mriedem): Need to make this mocked virt driver implement upt. vd.update_provider_tree.side_effect = NotImplementedError vd.get_host_ip_addr.return_value = _NODENAME vd.estimate_instance_overhead.side_effect = estimate_overhead @@ -1413,6 +1414,11 @@ class TestUpdateComputeNode(BaseTestCase): self.rt._update(mock.sentinel.ctx, new_compute) save_mock.assert_called_once_with() norm_mock.assert_called_once_with(mock.sentinel.inv_data, new_compute) + # Assert a warning was logged about using a virt driver that does not + # implement update_provider_tree. + self.assertIn('Compute driver "%s" does not implement the ' + '"update_provider_tree" interface.' % + CONF.compute_driver, self.stdlog.logger.output) def test_existing_node_capabilities_as_traits(self): """The capabilities_as_traits() driver method returns traits diff --git a/releasenotes/notes/train-deprecate-non-upt-compat-d061edf3f702eeec.yaml b/releasenotes/notes/train-deprecate-non-upt-compat-d061edf3f702eeec.yaml new file mode 100644 index 0000000000..a0dbfbaa36 --- /dev/null +++ b/releasenotes/notes/train-deprecate-non-upt-compat-d061edf3f702eeec.yaml @@ -0,0 +1,8 @@ +--- +deprecations: + - | + Compatibility code for compute drivers that do not implement the + `update_provider_tree`__ interface is deprecated and will be removed + in a future release. + + __ https://docs.openstack.org/nova/latest/reference/update-provider-tree.html