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:
@@ -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)
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user