From b08b20b681390aebea235a1c6b4a103d6a5b4335 Mon Sep 17 00:00:00 2001 From: Hans Lindgren Date: Wed, 13 May 2015 12:55:19 +0200 Subject: [PATCH] Make secgroup rules refresh with refresh_instance_security_rules() The refresh_instance_security_rules() call was introduced to make security rule refreshes be specific to a single instance instead of refreshing rules for all instances on a host[1]. A couple of places that still use the old call can be changed to the more efficient one and the old refresh_security_group_rules() method can be removed since it now becomes unused. [1] Commit: 2afbbab23a9d845cde511baa1e574fdcf5ab5171 Change-Id: I3b0b9e5ad02057649564a7aec895b98f35a70cd9 --- nova/compute/api.py | 14 ++++++-------- nova/compute/manager.py | 2 ++ nova/compute/rpcapi.py | 7 +------ nova/tests/unit/compute/test_rpcapi.py | 4 ---- 4 files changed, 9 insertions(+), 18 deletions(-) diff --git a/nova/compute/api.py b/nova/compute/api.py index 94ee33bf79d6..661545258c11 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -4057,10 +4057,9 @@ class SecurityGroupAPI(base.Base, security_group_base.SecurityGroupBase): self.db.instance_add_security_group(context.elevated(), instance_uuid, security_group['id']) - # NOTE(comstud): No instance_uuid argument to this compute manager - # call - self.compute_rpcapi.refresh_security_group_rules(context, - security_group['id'], host=instance.host) + if instance.host: + self.compute_rpcapi.refresh_instance_security_rules( + context, instance.host, instance) @wrap_check_security_groups_policy def remove_from_instance(self, context, instance, security_group_name): @@ -4080,10 +4079,9 @@ class SecurityGroupAPI(base.Base, security_group_base.SecurityGroupBase): self.db.instance_remove_security_group(context.elevated(), instance_uuid, security_group['id']) - # NOTE(comstud): No instance_uuid argument to this compute manager - # call - self.compute_rpcapi.refresh_security_group_rules(context, - security_group['id'], host=instance.host) + if instance.host: + self.compute_rpcapi.refresh_instance_security_rules( + context, instance.host, instance) def get_rule(self, context, id): self.ensure_default(context) diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 5918e8377175..a07aaa832383 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -1347,6 +1347,8 @@ class ComputeManager(manager.Manager): def get_console_pool_info(self, context, console_type): return self.driver.get_console_pool_info(console_type) + # NOTE(hanlind): This and the virt method it calls can be removed in + # version 5.0 of the RPC API @wrap_exception() def refresh_security_group_rules(self, context, security_group_id): """Tell the virtualization driver to refresh security group rules. diff --git a/nova/compute/rpcapi.py b/nova/compute/rpcapi.py index e9ae27614913..403b8a825686 100644 --- a/nova/compute/rpcapi.py +++ b/nova/compute/rpcapi.py @@ -308,6 +308,7 @@ class ComputeAPI(object): can handle the version_cap being set to 4.5 * ... - Remove refresh_security_group_members() + * ... - Remove refresh_security_group_rules() ''' VERSION_ALIASES = { @@ -927,12 +928,6 @@ class ComputeAPI(object): cctxt.cast(ctxt, 'unquiesce_instance', instance=instance, mapping=mapping) - def refresh_security_group_rules(self, ctxt, security_group_id, host): - version = '4.0' - cctxt = self.client.prepare(server=host, version=version) - cctxt.cast(ctxt, 'refresh_security_group_rules', - security_group_id=security_group_id) - def refresh_instance_security_rules(self, ctxt, host, instance): version = '4.4' if not self.client.can_send_version(version): diff --git a/nova/tests/unit/compute/test_rpcapi.py b/nova/tests/unit/compute/test_rpcapi.py index 075853dc10c2..aff2edcfe569 100644 --- a/nova/tests/unit/compute/test_rpcapi.py +++ b/nova/tests/unit/compute/test_rpcapi.py @@ -330,10 +330,6 @@ class ComputeRpcAPITestCase(test.NoDBTestCase): self._test_compute_api('refresh_provider_fw_rules', 'cast', host='host') - def test_refresh_security_group_rules(self): - self._test_compute_api('refresh_security_group_rules', 'cast', - security_group_id='id', host='host', version='4.0') - def test_refresh_instance_security_rules(self): expected_args = {'instance': self.fake_instance_obj} self._test_compute_api('refresh_instance_security_rules', 'cast',