Make update_available_resource() use objects

This makes the update_available_resource() periodic task use
objects instead of direct calls to conductor.

Related to blueprint compute-manager-objects-juno

Change-Id: I39fe7cae852c60e0490a5b2f1a98a011ac8b8425
This commit is contained in:
Dan Smith
2014-04-11 11:47:06 -07:00
parent d62a47b5be
commit f5c7b29ce0
3 changed files with 35 additions and 27 deletions

View File

@@ -64,6 +64,7 @@ from nova.network.security_group import openstack_driver
from nova.objects import aggregate as aggregate_obj
from nova.objects import base as obj_base
from nova.objects import block_device as block_device_obj
from nova.objects import compute_node as compute_node_obj
from nova.objects import external_event as external_event_obj
from nova.objects import flavor as flavor_obj
from nova.objects import instance as instance_obj
@@ -5463,21 +5464,19 @@ class ComputeManager(manager.Manager):
compute_nodes_in_db = self._get_compute_nodes_in_db(context)
for cn in compute_nodes_in_db:
if cn.get('hypervisor_hostname') not in nodenames:
LOG.audit(_("Deleting orphan compute node %s") % cn['id'])
self.conductor_api.compute_node_delete(context, cn)
if cn.hypervisor_hostname not in nodenames:
LOG.audit(_("Deleting orphan compute node %s") % cn.id)
cn.destroy()
self._resource_tracker_dict = new_resource_tracker_dict
def _get_compute_nodes_in_db(self, context):
service_ref = self.conductor_api.service_get_by_compute_host(
context, self.host)
if not service_ref:
service = service_obj.Service.get_by_compute_host(context, self.host)
if not service:
LOG.error(_("No service record for host %s"), self.host)
return []
return service_ref['compute_node']
return compute_node_obj.ComputeNodeList.get_by_service(context,
service)
@periodic_task.periodic_task(
spacing=CONF.running_deleted_instance_poll_interval)

View File

@@ -192,16 +192,19 @@ class BaseTestCase(test.TestCase):
'disk_available_least': 265856,
'deleted_at': None,
'free_ram_mb': 130560,
'metrics': '',
'stats': '',
'id': 2}]
return fake_compute_nodes
return [compute_node_obj.ComputeNode._from_db_object(
context, compute_node_obj.ComputeNode(), cn)
for cn in fake_compute_nodes]
def fake_compute_node_delete(context, compute_node):
self.assertEqual(compute_node.get('hypervisor_hostname'),
'fake_phyp1')
def fake_compute_node_delete(context, compute_node_id):
self.assertEqual(2, compute_node_id)
self.stubs.Set(self.compute, '_get_compute_nodes_in_db',
fake_get_compute_nodes_in_db)
self.stubs.Set(self.compute.conductor_api, 'compute_node_delete',
self.stubs.Set(db, 'compute_node_delete',
fake_compute_node_delete)
self.compute.update_available_resource(

View File

@@ -17,6 +17,8 @@
from oslo.config import cfg
from nova import context
from nova import db
from nova.objects import compute_node as compute_node_obj
from nova.openstack.common import importutils
from nova import test
from nova.virt import fake
@@ -103,16 +105,19 @@ class MultiNodeComputeTestCase(BaseTestCase):
'disk_available_least': 265856,
'deleted_at': None,
'free_ram_mb': 130560,
'metrics': '',
'stats': '',
'id': 2}]
return fake_compute_nodes
return [compute_node_obj.ComputeNode._from_db_object(
context, compute_node_obj.ComputeNode(), cn)
for cn in fake_compute_nodes]
def fake_compute_node_delete(context, compute_node):
self.assertEqual(compute_node.get('hypervisor_hostname'),
'fake_phyp1')
def fake_compute_node_delete(context, compute_node_id):
self.assertEqual(2, compute_node_id)
self.stubs.Set(self.compute, '_get_compute_nodes_in_db',
fake_get_compute_nodes_in_db)
self.stubs.Set(self.compute.conductor_api, 'compute_node_delete',
self.stubs.Set(db, 'compute_node_delete',
fake_compute_node_delete)
def test_update_available_resource_add_remove_node(self):
@@ -136,24 +141,25 @@ class MultiNodeComputeTestCase(BaseTestCase):
ctx = context.get_admin_context()
fake.set_nodes(['A', 'B'])
fake_compute_nodes = [{'hypervisor_hostname': 'A',
'id': 2},
{'hypervisor_hostname': 'B',
'id': 3}]
fake_compute_nodes = [
compute_node_obj.ComputeNode(
context=ctx, hypervisor_hostname='A', id=2),
compute_node_obj.ComputeNode(
context=ctx, hypervisor_hostname='B', id=3),
]
def fake_get_compute_nodes_in_db(context):
return fake_compute_nodes
def fake_compute_node_delete(context, compute_node):
def fake_compute_node_delete(context, compute_node_id):
for cn in fake_compute_nodes:
if (compute_node['hypervisor_hostname'] ==
cn['hypervisor_hostname']):
if compute_node_id == cn.id:
fake_compute_nodes.remove(cn)
return
self.stubs.Set(self.compute, '_get_compute_nodes_in_db',
fake_get_compute_nodes_in_db)
self.stubs.Set(self.compute.conductor_api, 'compute_node_delete',
self.stubs.Set(db, 'compute_node_delete',
fake_compute_node_delete)
self.compute.update_available_resource(ctx)