summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/compute/manager.py2
-rw-r--r--nova/conductor/api.py6
-rw-r--r--nova/conductor/manager.py5
-rw-r--r--nova/conductor/rpcapi.py6
-rw-r--r--nova/tests/conductor/test_conductor.py6
5 files changed, 23 insertions, 2 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index 498ec9829..ecfb53085 100644
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -1059,7 +1059,7 @@ class ComputeManager(manager.SchedulerDependentManager):
terminated_at=timeutils.utcnow())
system_meta = compute_utils.metadata_to_dict(
instance['system_metadata'])
- self.db.instance_destroy(context, instance_uuid)
+ self.conductor_api.instance_destroy(context, instance)
# ensure block device mappings are not leaked
self.conductor_api.block_device_mapping_destroy(context, bdms)
diff --git a/nova/conductor/api.py b/nova/conductor/api.py
index 64e574b12..838b4c050 100644
--- a/nova/conductor/api.py
+++ b/nova/conductor/api.py
@@ -75,6 +75,9 @@ class LocalAPI(object):
def instance_get_by_uuid(self, context, instance_uuid):
return self._manager.instance_get_by_uuid(context, instance_uuid)
+ def instance_destroy(self, context, instance):
+ return self._manager.instance_destroy(context, instance)
+
def instance_get_all(self, context):
return self.instance_get_all_by_filters(context, {})
@@ -201,6 +204,9 @@ class API(object):
return self.conductor_rpcapi.instance_update(context, instance_uuid,
updates)
+ def instance_destroy(self, context, instance):
+ return self.conductor_rpcapi.instance_destroy(context, instance)
+
def instance_get_by_uuid(self, context, instance_uuid):
return self.conductor_rpcapi.instance_get_by_uuid(context,
instance_uuid)
diff --git a/nova/conductor/manager.py b/nova/conductor/manager.py
index f5971b8d7..997e23c60 100644
--- a/nova/conductor/manager.py
+++ b/nova/conductor/manager.py
@@ -43,7 +43,7 @@ datetime_fields = ['launched_at', 'terminated_at']
class ConductorManager(manager.SchedulerDependentManager):
"""Mission: TBD"""
- RPC_API_VERSION = '1.15'
+ RPC_API_VERSION = '1.16'
def __init__(self, *args, **kwargs):
super(ConductorManager, self).__init__(service_name='conductor',
@@ -205,3 +205,6 @@ class ConductorManager(manager.SchedulerDependentManager):
project_id,
host)
return jsonutils.to_primitive(result)
+
+ def instance_destroy(self, context, instance):
+ self.db.instance_destroy(context, instance['uuid'])
diff --git a/nova/conductor/rpcapi.py b/nova/conductor/rpcapi.py
index 92f9f9de7..bbbdd7054 100644
--- a/nova/conductor/rpcapi.py
+++ b/nova/conductor/rpcapi.py
@@ -47,6 +47,7 @@ class ConductorAPI(nova.openstack.common.rpc.proxy.RpcProxy):
instance_get_all_hung_in_rebooting and
instance_get_active_by_window
Deprecated instance_get_all_by_host
+ 1.16 - Added instance_destroy
"""
BASE_RPC_API_VERSION = '1.0'
@@ -190,3 +191,8 @@ class ConductorAPI(nova.openstack.common.rpc.proxy.RpcProxy):
begin=begin, end=end, project_id=project_id,
host=host)
return self.call(context, msg, version='1.15')
+
+ def instance_destroy(self, context, instance):
+ instance_p = jsonutils.to_primitive(instance)
+ msg = self.make_msg('instance_destroy', instance=instance_p)
+ self.call(context, msg, version='1.16')
diff --git a/nova/tests/conductor/test_conductor.py b/nova/tests/conductor/test_conductor.py
index a7caa3ac9..18035c135 100644
--- a/nova/tests/conductor/test_conductor.py
+++ b/nova/tests/conductor/test_conductor.py
@@ -288,6 +288,12 @@ class _BaseTestCase(object):
'fake-begin', 'fake-end',
'fake-proj', 'fake-host')
+ def test_instance_destroy(self):
+ self.mox.StubOutWithMock(db, 'instance_destroy')
+ db.instance_destroy(self.context, 'fake-uuid')
+ self.mox.ReplayAll()
+ self.conductor.instance_destroy(self.context, {'uuid': 'fake-uuid'})
+
class ConductorTestCase(_BaseTestCase, test.TestCase):
"""Conductor Manager Tests"""