Merged trunk.

This commit is contained in:
Brian Lamar
2011-05-11 11:20:50 -04:00
5 changed files with 84 additions and 24 deletions

View File

@@ -44,6 +44,7 @@ Josh Kearney <josh@jk0.org>
Josh Kleinpeter <josh@kleinpeter.org> Josh Kleinpeter <josh@kleinpeter.org>
Joshua McKenty <jmckenty@gmail.com> Joshua McKenty <jmckenty@gmail.com>
Justin Santa Barbara <justin@fathomdb.com> Justin Santa Barbara <justin@fathomdb.com>
Justin Shepherd <jshepher@rackspace.com>
Kei Masumoto <masumotok@nttdata.co.jp> Kei Masumoto <masumotok@nttdata.co.jp>
Ken Pepple <ken.pepple@gmail.com> Ken Pepple <ken.pepple@gmail.com>
Kevin Bringard <kbringard@attinteractive.com> Kevin Bringard <kbringard@attinteractive.com>

View File

@@ -96,8 +96,8 @@ class FlavorFilter(HostFilter):
selected_hosts = [] selected_hosts = []
for host, services in zone_manager.service_states.iteritems(): for host, services in zone_manager.service_states.iteritems():
capabilities = services.get('compute', {}) capabilities = services.get('compute', {})
host_ram_mb = capabilities['host_memory']['free'] host_ram_mb = capabilities['host_memory_free']
disk_bytes = capabilities['disk']['available'] disk_bytes = capabilities['disk_available']
if host_ram_mb >= instance_type['memory_mb'] and \ if host_ram_mb >= instance_type['memory_mb'] and \
disk_bytes >= instance_type['local_gb']: disk_bytes >= instance_type['local_gb']:
selected_hosts.append((host, capabilities)) selected_hosts.append((host, capabilities))
@@ -106,16 +106,16 @@ class FlavorFilter(HostFilter):
#host entries (currently) are like: #host entries (currently) are like:
# {'host_name-description': 'Default install of XenServer', # {'host_name-description': 'Default install of XenServer',
# 'host_hostname': 'xs-mini', # 'host_hostname': 'xs-mini',
# 'host_memory': {'total': 8244539392, # 'host_memory_total': 8244539392,
# 'overhead': 184225792, # 'host_memory_overhead': 184225792,
# 'free': 3868327936, # 'host_memory_free': 3868327936,
# 'free-computed': 3840843776}, # 'host_memory_free_computed': 3840843776},
# 'host_other-config': {}, # 'host_other-config': {},
# 'host_ip_address': '192.168.1.109', # 'host_ip_address': '192.168.1.109',
# 'host_cpu_info': {}, # 'host_cpu_info': {},
# 'disk': {'available': 32954957824, # 'disk_available': 32954957824,
# 'total': 50394562560, # 'disk_total': 50394562560,
# 'used': 17439604736}, # 'disk_used': 17439604736},
# 'host_uuid': 'cedb9b39-9388-41df-8891-c5c9a0c0fe5f', # 'host_uuid': 'cedb9b39-9388-41df-8891-c5c9a0c0fe5f',
# 'host_name-label': 'xs-mini'} # 'host_name-label': 'xs-mini'}
@@ -221,8 +221,8 @@ class JsonFilter(HostFilter):
required_ram = instance_type['memory_mb'] required_ram = instance_type['memory_mb']
required_disk = instance_type['local_gb'] required_disk = instance_type['local_gb']
query = ['and', query = ['and',
['>=', '$compute.host_memory.free', required_ram], ['>=', '$compute.host_memory_free', required_ram],
['>=', '$compute.disk.available', required_disk] ['>=', '$compute.disk_available', required_disk]
] ]
return (self._full_name(), json.dumps(query)) return (self._full_name(), json.dumps(query))

View File

@@ -21,6 +21,7 @@ Tests For Compute
import datetime import datetime
import mox import mox
import stubout
from nova import compute from nova import compute
from nova import context from nova import context
@@ -52,6 +53,10 @@ class FakeTime(object):
self.counter += t self.counter += t
def nop_report_driver_status(self):
pass
class ComputeTestCase(test.TestCase): class ComputeTestCase(test.TestCase):
"""Test case for compute""" """Test case for compute"""
def setUp(self): def setUp(self):
@@ -649,6 +654,10 @@ class ComputeTestCase(test.TestCase):
def test_run_kill_vm(self): def test_run_kill_vm(self):
"""Detect when a vm is terminated behind the scenes""" """Detect when a vm is terminated behind the scenes"""
self.stubs = stubout.StubOutForTesting()
self.stubs.Set(compute_manager.ComputeManager,
'_report_driver_status', nop_report_driver_status)
instance_id = self._create_instance() instance_id = self._create_instance()
self.compute.run_instance(self.context, instance_id) self.compute.run_instance(self.context, instance_id)

View File

@@ -43,16 +43,16 @@ class HostFilterTestCase(test.TestCase):
# which means ... don't go above 10 hosts. # which means ... don't go above 10 hosts.
return {'host_name-description': 'XenServer %s' % multiplier, return {'host_name-description': 'XenServer %s' % multiplier,
'host_hostname': 'xs-%s' % multiplier, 'host_hostname': 'xs-%s' % multiplier,
'host_memory': {'total': 100, 'host_memory_total': 100,
'overhead': 10, 'host_memory_overhead': 10,
'free': 10 + multiplier * 10, 'host_memory_free': 10 + multiplier * 10,
'free-computed': 10 + multiplier * 10}, 'host_memory_free-computed': 10 + multiplier * 10,
'host_other-config': {}, 'host_other-config': {},
'host_ip_address': '192.168.1.%d' % (100 + multiplier), 'host_ip_address': '192.168.1.%d' % (100 + multiplier),
'host_cpu_info': {}, 'host_cpu_info': {},
'disk': {'available': 100 + multiplier * 100, 'disk_available': 100 + multiplier * 100,
'total': 1000, 'disk_total': 1000,
'used': 0}, 'disk_used': 0,
'host_uuid': 'xxx-%d' % multiplier, 'host_uuid': 'xxx-%d' % multiplier,
'host_name-label': 'xs-%s' % multiplier} 'host_name-label': 'xs-%s' % multiplier}
@@ -131,12 +131,12 @@ class HostFilterTestCase(test.TestCase):
raw = ['or', raw = ['or',
['and', ['and',
['<', '$compute.host_memory.free', 30], ['<', '$compute.host_memory_free', 30],
['<', '$compute.disk.available', 300] ['<', '$compute.disk_available', 300]
], ],
['and', ['and',
['>', '$compute.host_memory.free', 70], ['>', '$compute.host_memory_free', 70],
['>', '$compute.disk.available', 700] ['>', '$compute.disk_available', 700]
] ]
] ]
cooked = json.dumps(raw) cooked = json.dumps(raw)
@@ -149,7 +149,7 @@ class HostFilterTestCase(test.TestCase):
self.assertEquals('host%02d' % index, host) self.assertEquals('host%02d' % index, host)
raw = ['not', raw = ['not',
['=', '$compute.host_memory.free', 30], ['=', '$compute.host_memory_free', 30],
] ]
cooked = json.dumps(raw) cooked = json.dumps(raw)
hosts = driver.filter_hosts(self.zone_manager, cooked) hosts = driver.filter_hosts(self.zone_manager, cooked)
@@ -160,7 +160,7 @@ class HostFilterTestCase(test.TestCase):
for index, host in zip([1, 2, 4, 5, 6, 7, 8, 9, 10], just_hosts): for index, host in zip([1, 2, 4, 5, 6, 7, 8, 9, 10], just_hosts):
self.assertEquals('host%02d' % index, host) self.assertEquals('host%02d' % index, host)
raw = ['in', '$compute.host_memory.free', 20, 40, 60, 80, 100] raw = ['in', '$compute.host_memory_free', 20, 40, 60, 80, 100]
cooked = json.dumps(raw) cooked = json.dumps(raw)
hosts = driver.filter_hosts(self.zone_manager, cooked) hosts = driver.filter_hosts(self.zone_manager, cooked)

View File

@@ -17,6 +17,7 @@
"""Test suite for XenAPI.""" """Test suite for XenAPI."""
import functools import functools
import json
import os import os
import re import re
import stubout import stubout
@@ -665,3 +666,52 @@ class XenAPIDetermineDiskImageTestCase(test.TestCase):
self.fake_instance.image_id = glance_stubs.FakeGlance.IMAGE_VHD self.fake_instance.image_id = glance_stubs.FakeGlance.IMAGE_VHD
self.fake_instance.kernel_id = None self.fake_instance.kernel_id = None
self.assert_disk_type(vm_utils.ImageType.DISK_VHD) self.assert_disk_type(vm_utils.ImageType.DISK_VHD)
class FakeXenApi(object):
"""Fake XenApi for testing HostState."""
class FakeSR(object):
def get_record(self, ref):
return {'virtual_allocation': 10000,
'physical_utilisation': 20000}
SR = FakeSR()
class FakeSession(object):
"""Fake Session class for HostState testing."""
def async_call_plugin(self, *args):
return None
def wait_for_task(self, *args):
vm = {'total': 10,
'overhead': 20,
'free': 30,
'free-computed': 40}
return json.dumps({'host_memory': vm})
def get_xenapi(self):
return FakeXenApi()
class HostStateTestCase(test.TestCase):
"""Tests HostState, which holds metrics from XenServer that get
reported back to the Schedulers."""
def _fake_safe_find_sr(self, session):
"""None SR ref since we're ignoring it in FakeSR."""
return None
def test_host_state(self):
self.stubs = stubout.StubOutForTesting()
self.stubs.Set(vm_utils, 'safe_find_sr', self._fake_safe_find_sr)
host_state = xenapi_conn.HostState(FakeSession())
stats = host_state._stats
self.assertEquals(stats['disk_total'], 10000)
self.assertEquals(stats['disk_used'], 20000)
self.assertEquals(stats['host_memory_total'], 10)
self.assertEquals(stats['host_memory_overhead'], 20)
self.assertEquals(stats['host_memory_free'], 30)
self.assertEquals(stats['host_memory_free_computed'], 40)