From cda9b490eb601fe846061720c5c66a46dc74048b Mon Sep 17 00:00:00 2001 From: Mate Lakat Date: Fri, 31 Aug 2012 10:12:26 +0100 Subject: Fix deallocate_fixed_ip invocation Fixes bug 1043905. The host parameter was not passed to deallocate_fixed_ip method, so that the deallocation tried to do a remote call to another host, which timed out, thus instance termination failed. Change-Id: I18d6de31d15767a45f389ae14769985c3951d560 --- nova/network/manager.py | 3 ++- nova/tests/fake_network.py | 4 ++++ nova/tests/network/test_manager.py | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) (limited to 'nova') diff --git a/nova/network/manager.py b/nova/network/manager.py index dfd6ca2ff..f2af017df 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -1000,7 +1000,8 @@ class NetworkManager(manager.SchedulerDependentManager): context=read_deleted_context) # deallocate fixed ips for fixed_ip in fixed_ips: - self.deallocate_fixed_ip(context, fixed_ip['address']) + self.deallocate_fixed_ip(context, fixed_ip['address'], + host=kwargs.get('host')) # deallocate vifs (mac addresses) self.db.virtual_interface_delete_by_instance(read_deleted_context, diff --git a/nova/tests/fake_network.py b/nova/tests/fake_network.py index ede005840..25ec5c070 100644 --- a/nova/tests/fake_network.py +++ b/nova/tests/fake_network.py @@ -143,8 +143,12 @@ class FakeNetworkManager(network_manager.NetworkManager): def __init__(self): self.db = self.FakeDB() self.deallocate_called = None + self.deallocate_fixed_ip_calls = [] + # TODO(matelakat) method signature should align with the faked one's def deallocate_fixed_ip(self, context, address=None, host=None): + self.deallocate_fixed_ip_calls.append((context, address, host)) + # TODO(matelakat) use the deallocate_fixed_ip_calls instead self.deallocate_called = address def _create_fixed_ips(self, context, network_id, fixed_cidr=None): diff --git a/nova/tests/network/test_manager.py b/nova/tests/network/test_manager.py index 5ae8cf81c..bfe8d7a3b 100644 --- a/nova/tests/network/test_manager.py +++ b/nova/tests/network/test_manager.py @@ -1063,6 +1063,22 @@ class CommonNetworkTestCase(test.TestCase): def fake_create_fixed_ips(self, context, network_id, fixed_cidr=None): return None + def test_deallocate_for_instance_passes_host_info(self): + manager = fake_network.FakeNetworkManager() + db = manager.db + db.instance_get = lambda _x, _y: dict(uuid='ignoreduuid') + db.virtual_interface_delete_by_instance = lambda _x, _y: None + ctx = context.RequestContext('igonre', 'igonre') + + db.fixed_ip_get_by_instance = lambda x, y: [dict(address='1.2.3.4')] + + manager.deallocate_for_instance( + ctx, instance_id='ignore', host='somehost') + + self.assertEquals([ + (ctx, '1.2.3.4', 'somehost') + ], manager.deallocate_fixed_ip_calls) + def test_remove_fixed_ip_from_instance(self): manager = fake_network.FakeNetworkManager() manager.remove_fixed_ip_from_instance(self.context, 99, HOST, -- cgit