From e3a8188e21b409f1720fd2a9b40a66c51571b210 Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Thu, 4 Apr 2019 16:40:32 +0100 Subject: [PATCH] Remove 'instance_info_cache_update_at_top' This was being called within the 'InstanceInfoCache' object. Remove it in its entirety, given that nothing should be calling it now. An 'update_cells' argument is removed from a number of functions as these all resulted in a call to the cells v1 RPC API, a call that is now removed. Part of blueprint remove-cells-v1 Change-Id: Ia8da8cd040d104d745bd7adf20438b8eec558680 Signed-off-by: Stephen Finucane --- nova/cells/rpcapi.py | 12 ------ nova/network/base_api.py | 13 ++---- nova/network/manager.py | 2 +- nova/network/neutronv2/api.py | 3 +- nova/objects/instance_info_cache.py | 21 +--------- nova/tests/unit/network/test_api.py | 6 +-- nova/tests/unit/network/test_neutronv2.py | 5 +-- .../unit/objects/test_instance_info_cache.py | 41 ------------------- 8 files changed, 10 insertions(+), 93 deletions(-) diff --git a/nova/cells/rpcapi.py b/nova/cells/rpcapi.py index 124dbf21685d..a0012577c9db 100644 --- a/nova/cells/rpcapi.py +++ b/nova/cells/rpcapi.py @@ -31,7 +31,6 @@ from oslo_utils import uuidutils from nova import cells import nova.conf from nova import exception -from nova import objects from nova.objects import base as objects_base from nova import profiler from nova import rpc @@ -248,17 +247,6 @@ class CellsAPI(object): self.client.cast(ctxt, 'bw_usage_update_at_top', bw_update_info=bw_update_info) - def instance_info_cache_update_at_top(self, ctxt, instance_info_cache): - """Broadcast up that an instance's info_cache has changed.""" - version = '1.35' - instance = objects.Instance(uuid=instance_info_cache.instance_uuid, - info_cache=instance_info_cache) - if not self.client.can_send_version('1.35'): - instance = objects_base.obj_to_primitive(instance) - version = '1.34' - cctxt = self.client.prepare(version=version) - cctxt.cast(ctxt, 'instance_update_at_top', instance=instance) - def get_cell_info_for_neighbors(self, ctxt): """Get information about our neighbor cells from the manager.""" if not CONF.cells.enable: diff --git a/nova/network/base_api.py b/nova/network/base_api.py index e2151a698e4f..2c680f7d8d37 100644 --- a/nova/network/base_api.py +++ b/nova/network/base_api.py @@ -31,8 +31,7 @@ LOG = logging.getLogger(__name__) @hooks.add_hook('instance_network_info') -def update_instance_cache_with_nw_info(impl, context, instance, - nw_info=None, update_cells=True): +def update_instance_cache_with_nw_info(impl, context, instance, nw_info=None): if instance.deleted: LOG.debug('Instance is deleted, no further info cache update', instance=instance) @@ -52,7 +51,7 @@ def update_instance_cache_with_nw_info(impl, context, instance, # from the DB first. ic = objects.InstanceInfoCache.new(context, instance.uuid) ic.network_info = nw_info - ic.save(update_cells=update_cells) + ic.save() instance.info_cache = ic except Exception: with excutils.save_and_reraise_exception(): @@ -254,14 +253,8 @@ class NetworkAPI(base.Base): """Returns all network info related to an instance.""" with lockutils.lock('refresh_cache-%s' % instance.uuid): result = self._get_instance_nw_info(context, instance, **kwargs) - # NOTE(comstud): Don't update API cell with new info_cache every - # time we pull network info for an instance. The periodic healing - # of info_cache causes too many cells messages. Healing the API - # will happen separately. - update_cells = kwargs.get('update_cells', False) update_instance_cache_with_nw_info(self, context, instance, - nw_info=result, - update_cells=update_cells) + nw_info=result) return result def _get_instance_nw_info(self, context, instance, **kwargs): diff --git a/nova/network/manager.py b/nova/network/manager.py index a801093a72b6..c3c1b3ac8f27 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -314,7 +314,7 @@ class NetworkManager(manager.Manager): None, None) ic = objects.InstanceInfoCache.new(admin_context, instance_id) ic.network_info = nw_info - ic.save(update_cells=False) + ic.save() except exception.InstanceInfoCacheNotFound: pass groups = instance.security_groups diff --git a/nova/network/neutronv2/api.py b/nova/network/neutronv2/api.py index a17932775bd6..da3b44b12251 100644 --- a/nova/network/neutronv2/api.py +++ b/nova/network/neutronv2/api.py @@ -1129,8 +1129,7 @@ class API(base_api.NetworkAPI): context, instance, networks=ordered_nets, port_ids=ordered_port_ids, admin_client=admin_client, - preexisting_port_ids=preexisting_port_ids, - update_cells=True) + preexisting_port_ids=preexisting_port_ids) # Only return info about ports we processed in this run, which might # have been pre-existing neutron ports or ones that nova created. In # the initial allocation case (server create), this will be everything diff --git a/nova/objects/instance_info_cache.py b/nova/objects/instance_info_cache.py index 4b1a1285cbf7..1efb5d630a82 100644 --- a/nova/objects/instance_info_cache.py +++ b/nova/objects/instance_info_cache.py @@ -14,8 +14,6 @@ from oslo_log import log as logging -from nova.cells import opts as cells_opts -from nova.cells import rpcapi as cells_rpcapi from nova.db import api as db from nova import exception from nova.objects import base @@ -71,33 +69,16 @@ class InstanceInfoCache(base.NovaPersistentObject, base.NovaObject): instance_uuid=instance_uuid) return cls._from_db_object(context, cls(context), db_obj) - @staticmethod - def _info_cache_cells_update(ctxt, info_cache): - cell_type = cells_opts.get_cell_type() - if cell_type != 'compute': - return - cells_api = cells_rpcapi.CellsAPI() - try: - cells_api.instance_info_cache_update_at_top(ctxt, info_cache) - except Exception: - LOG.exception("Failed to notify cells of instance info " - "cache update") - + # TODO(stephenfin): Remove 'update_cells' in version 2.0 @base.remotable def save(self, update_cells=True): if 'network_info' in self.obj_what_changed(): - if update_cells: - stale_instance = self.obj_clone() nw_info_json = self.fields['network_info'].to_primitive( self, 'network_info', self.network_info) rv = db.instance_info_cache_update(self._context, self.instance_uuid, {'network_info': nw_info_json}) self._from_db_object(self._context, self, rv) - if update_cells: - # Send a copy of ourselves before updates are applied so - # that cells can tell what changed. - self._info_cache_cells_update(self._context, stale_instance) self.obj_reset_changes() @base.remotable diff --git a/nova/tests/unit/network/test_api.py b/nova/tests/unit/network/test_api.py index cf9366130da7..a5c7f97aa86f 100644 --- a/nova/tests/unit/network/test_api.py +++ b/nova/tests/unit/network/test_api.py @@ -184,8 +184,7 @@ class ApiTestCase(test.TestCase): return fake_info_cache def fake_update_instance_cache_with_nw_info(api, context, instance, - nw_info=None, - update_cells=True): + nw_info=None): return with test.nested( @@ -555,8 +554,7 @@ class ApiTestCase(test.TestCase): result = self.network_api.get_instance_nw_info(self.context, instance) mock_get.assert_called_once_with(self.context, instance) mock_update.assert_called_once_with(self.network_api, self.context, - instance, nw_info=fake_result, - update_cells=False) + instance, nw_info=fake_result) self.assertEqual(fake_result, result) diff --git a/nova/tests/unit/network/test_neutronv2.py b/nova/tests/unit/network/test_neutronv2.py index 5dcf8112615b..3ae2eeb1f4bc 100644 --- a/nova/tests/unit/network/test_neutronv2.py +++ b/nova/tests/unit/network/test_neutronv2.py @@ -715,7 +715,7 @@ class TestNeutronv2Base(test.TestCase): mock.ANY, self.instance, networks=nets_in_requested_net_order, port_ids=ports_in_requested_net_order, admin_client=mocked_client, - preexisting_port_ids=preexisting_port_ids, update_cells=True) + preexisting_port_ids=preexisting_port_ids) return nw_info, mocked_client @@ -3573,8 +3573,7 @@ class TestNeutronv2WithMock(TestNeutronv2Base): result = self.api.get_instance_nw_info(self.context, instance) mock_get.assert_called_once_with(self.context, instance) mock_update.assert_called_once_with(self.api, self.context, instance, - nw_info=fake_result, - update_cells=False) + nw_info=fake_result) self.assertEqual(fake_result, result) def _test_validate_networks_fixed_ip_no_dup(self, nets, requested_networks, diff --git a/nova/tests/unit/objects/test_instance_info_cache.py b/nova/tests/unit/objects/test_instance_info_cache.py index 442879f2aa76..839a9fab991a 100644 --- a/nova/tests/unit/objects/test_instance_info_cache.py +++ b/nova/tests/unit/objects/test_instance_info_cache.py @@ -18,8 +18,6 @@ import mock from oslo_utils.fixture import uuidsentinel as uuids from oslo_utils import timeutils -from nova.cells import opts as cells_opts -from nova.cells import rpcapi as cells_rpcapi from nova.db import api as db from nova import exception from nova.network import model as network_model @@ -65,45 +63,6 @@ class _TestInstanceInfoCacheObject(object): self.assertEqual(uuids.info_instance, obj.instance_uuid) self.assertIsNone(obj.network_info) - @mock.patch.object(cells_opts, 'get_cell_type') - @mock.patch.object(cells_rpcapi, 'CellsAPI') - @mock.patch.object(db, 'instance_info_cache_update') - def _save_helper(self, cell_type, update_cells, mock_update, - mock_rpc, mock_get_type): - obj = instance_info_cache.InstanceInfoCache() - cells_api = cells_rpcapi.CellsAPI() - - nwinfo = network_model.NetworkInfo.hydrate([{'address': 'foo'}]) - new_info_cache = fake_info_cache.copy() - new_info_cache['network_info'] = nwinfo.json() - mock_update.return_value = new_info_cache - with mock.patch.object(cells_api, - 'instance_info_cache_update_at_top'): - if update_cells: - mock_get_type.return_vaule = cell_type - if cell_type == 'compute': - mock_rpc.return_value = cells_api - cells_api.instance_info_cache_update_at_top( - self.context, 'foo') - mock_rpc.assert_called_once_with() - obj._context = self.context - obj.instance_uuid = uuids.info_instance - obj.network_info = nwinfo - obj.save(update_cells=update_cells) - mock_update.assert_called_once_with(self.context, obj.instance_uuid, - {'network_info': nwinfo.json()}) - if update_cells: - mock_get_type.assert_called_once() - - def test_save_with_update_cells_and_compute_cell(self): - self._save_helper('compute', True) - - def test_save_with_update_cells_and_non_compute_cell(self): - self._save_helper(None, True) - - def test_save_without_update_cells(self): - self._save_helper(None, False) - @mock.patch.object(db, 'instance_info_cache_update') def test_save_updates_self(self, mock_update): fake_updated_at = datetime.datetime(2015, 1, 1)