Implement zvm inspector helper function - _get_inst_stat
In _get_inst_stat, would check cache data expir or not, then update cache if needed, at last, return instance data per latest cache. Change-Id: Iaa499622f1f4e38182a50249f8c63b02e7a36465
This commit is contained in:
parent
05efac6ac8
commit
f4c3964e35
@ -106,6 +106,28 @@ class ZVMInspector(virt_inspector.Inspector):
|
||||
if meter in ('cpus', 'memory.usage'):
|
||||
self._update_inst_cpu_mem_stat(instances)
|
||||
|
||||
def _check_expiration_and_update_cache(self, meter):
|
||||
now = timeutils.utcnow_ts()
|
||||
if now >= self.cache_expiration:
|
||||
self._update_cache(meter)
|
||||
|
||||
def _get_inst_stat(self, meter, instance):
|
||||
self._check_expiration_and_update_cache(meter)
|
||||
|
||||
inst_name = zvmutils.get_inst_name(instance)
|
||||
inst_stat = self.cache.get(inst_name)
|
||||
|
||||
if inst_stat is None:
|
||||
userid = (self.instances.get(inst_name) or
|
||||
zvmutils.get_userid(inst_name))
|
||||
self._update_cache(meter, {inst_name: userid})
|
||||
inst_stat = self.cache.get(inst_name)
|
||||
|
||||
if inst_stat is None:
|
||||
raise virt_inspector.InstanceNotFoundException()
|
||||
else:
|
||||
return inst_stat
|
||||
|
||||
def inspect_cpus(self, instance):
|
||||
pass
|
||||
|
||||
|
@ -365,3 +365,7 @@ def image_performance_query(zhcp_node, inst_list):
|
||||
pi_dict[pi['userid']] = pi
|
||||
|
||||
return pi_dict
|
||||
|
||||
|
||||
def get_inst_name(instance):
|
||||
return getattr(instance, 'OS-EXT-SRV-ATTR:instance_name', None)
|
||||
|
@ -15,7 +15,9 @@
|
||||
|
||||
import mock
|
||||
|
||||
from ceilometer.compute.virt import inspector as virt_inspertor
|
||||
from oslo_config import fixture as fixture_config
|
||||
from oslo_utils import timeutils
|
||||
from oslotest import base
|
||||
|
||||
from ceilometer_zvm.compute.virt.zvm import inspector as zvm_inspector
|
||||
@ -85,3 +87,62 @@ class TestZVMInspector(base.BaseTestCase):
|
||||
inst = {'inst1': 'INST1'}
|
||||
self.inspector._update_cache('memory.usage', inst)
|
||||
upd.assert_called_with(inst)
|
||||
|
||||
@mock.patch("ceilometer_zvm.compute.virt.zvm.inspector.ZVMInspector."
|
||||
"_update_cache")
|
||||
def test_check_expiration_and_update_cache(self, udc):
|
||||
self.inspector._check_expiration_and_update_cache('cpus')
|
||||
udc.assert_called_once_with('cpus')
|
||||
|
||||
@mock.patch("ceilometer_zvm.compute.virt.zvm.inspector.ZVMInspector."
|
||||
"_update_cache")
|
||||
def test_check_expiration_and_update_cache_no_update(self, udc):
|
||||
self.inspector.cache_expiration = timeutils.utcnow_ts() + 100
|
||||
self.inspector._check_expiration_and_update_cache('cpus')
|
||||
udc.assert_not_called()
|
||||
|
||||
@mock.patch.object(zvmutils, 'get_inst_name')
|
||||
@mock.patch("ceilometer_zvm.compute.virt.zvm.inspector.ZVMInspector."
|
||||
"_check_expiration_and_update_cache")
|
||||
def test_get_inst_stat(self, check_update, get_name):
|
||||
get_name.return_value = 'inst1'
|
||||
self.inspector.cache.set({'guest_cpus': 2, 'nodename': 'inst1'})
|
||||
|
||||
inst_stat = self.inspector._get_inst_stat('cpus', {'inst1': 'INST1'})
|
||||
self.assertEqual(2, inst_stat['guest_cpus'])
|
||||
check_update.assert_called_once_with('cpus')
|
||||
|
||||
@mock.patch("ceilometer_zvm.compute.virt.zvm.inspector.ZVMInspector."
|
||||
"_update_cache")
|
||||
@mock.patch.object(zvmutils, 'get_userid')
|
||||
@mock.patch.object(zvmutils, 'get_inst_name')
|
||||
@mock.patch("ceilometer_zvm.compute.virt.zvm.inspector.ZVMInspector."
|
||||
"_check_expiration_and_update_cache")
|
||||
def test_get_inst_stat_not_found(self, check_update, get_name,
|
||||
get_uid, update):
|
||||
get_name.return_value = 'inst1'
|
||||
get_uid.return_value = 'INST1'
|
||||
|
||||
self.assertRaises(virt_inspertor.InstanceNotFoundException,
|
||||
self.inspector._get_inst_stat, 'cpus',
|
||||
{'inst1': 'INST1'})
|
||||
check_update.assert_called_once_with('cpus')
|
||||
update.assert_called_once_with('cpus', {'inst1': 'INST1'})
|
||||
|
||||
@mock.patch("ceilometer_zvm.compute.virt.zvm.inspector.ZVMInspector."
|
||||
"_update_cache")
|
||||
@mock.patch.object(zvmutils, 'get_userid')
|
||||
@mock.patch("ceilometer_zvm.compute.virt.zvm.utils.CacheData.get")
|
||||
@mock.patch.object(zvmutils, 'get_inst_name')
|
||||
@mock.patch("ceilometer_zvm.compute.virt.zvm.inspector.ZVMInspector."
|
||||
"_check_expiration_and_update_cache")
|
||||
def test_get_inst_stat_update_cache(self, check_update, get_name,
|
||||
cache_get, get_uid, update):
|
||||
get_name.return_value = 'inst1'
|
||||
cache_get.side_effect = [None, {'guest_cpus': 2, 'nodename': 'inst1'}]
|
||||
get_uid.return_value = 'INST1'
|
||||
|
||||
inst_stat = self.inspector._get_inst_stat('cpus', {'inst1': 'INST1'})
|
||||
self.assertEqual(2, inst_stat['guest_cpus'])
|
||||
check_update.assert_called_once_with('cpus')
|
||||
update.assert_called_once_with('cpus', {'inst1': 'INST1'})
|
||||
|
Loading…
x
Reference in New Issue
Block a user