Updated service; added excluding the overloaded host execute_overload

This commit is contained in:
Anton Beloglazov 2012-10-27 11:59:42 +11:00
parent 239c36c868
commit b1624abb9a
2 changed files with 18 additions and 6 deletions

View File

@ -234,6 +234,7 @@ def service():
execute_overload(
state['config'],
state['state'],
params['host'],
params['vm_uuids'])
except:
log.exception('Exception during request processing:')
@ -337,16 +338,16 @@ def execute_underload(config, state, host):
del hosts_cpu_total[host]
del hosts_ram_total[host]
if log.isEnabledFor(logging.DEBUG):
log.debug('Host CPU usage: %s', str(hosts_last_cpu))
log.debug('Host total CPU usage: %s', str(hosts_cpu_usage))
# Exclude the underloaded host
del hosts_cpu_usage[underloaded_host]
del hosts_cpu_total[underloaded_host]
del hosts_ram_usage[underloaded_host]
del hosts_ram_total[underloaded_host]
if log.isEnabledFor(logging.DEBUG):
log.debug('Host CPU usage: %s', str(hosts_last_cpu))
log.debug('Host total CPU usage: %s', str(hosts_cpu_usage))
vms_to_migrate = vms_by_host(state['nova'], underloaded_host)
vms_cpu = {}
for vm in vms_to_migrate:
@ -422,7 +423,7 @@ def execute_underload(config, state, host):
@contract
def execute_overload(config, state, vm_uuids):
def execute_overload(config, state, host, vm_uuids):
""" Process an overloaded host: migrate the selected VMs from it.
1. Prepare the data about the current states of the hosts and VMs.
@ -441,6 +442,9 @@ def execute_overload(config, state, vm_uuids):
:param state: A state dictionary.
:type state: dict(str: *)
:param host: A host name.
:type host: str
:param vm_uuids: A list of VM UUIDs to migrate from the host.
:type vm_uuids: list(str)
@ -448,6 +452,7 @@ def execute_overload(config, state, vm_uuids):
:rtype: dict(str: *)
"""
log.info('Started processing an overload request')
overloaded_host = host
hosts_cpu_total, _, hosts_ram_total = state['db'].select_host_characteristics()
hosts_to_vms = vms_by_hosts(state['nova'], state['compute_hosts'])
vms_last_cpu = state['db'].select_last_cpu_mhz_for_vms()
@ -487,6 +492,12 @@ def execute_overload(config, state, vm_uuids):
del hosts_cpu_total[host]
del hosts_ram_total[host]
# Exclude the overloaded host
del hosts_cpu_usage[overloaded_host]
del hosts_cpu_total[overloaded_host]
del hosts_ram_usage[overloaded_host]
del hosts_ram_total[overloaded_host]
if log.isEnabledFor(logging.DEBUG):
log.debug('Host CPU usage: %s', str(hosts_last_cpu))
log.debug('Host total CPU usage: %s', str(hosts_cpu_usage))

View File

@ -230,13 +230,14 @@ class GlobalManager(TestCase):
with MockTransaction:
params = {'reason': 1,
'host': 'host',
'vm_uuids': 'vm_uuids'}
expect(manager).get_params(Any).and_return(params).once()
expect(manager).get_remote_addr(Any).and_return('addr').once()
expect(bottle).app().and_return(app).once()
expect(manager).validate_params('user', 'password', params). \
and_return(True).once()
expect(manager).execute_overload(config, state, 'vm_uuids'). \
expect(manager).execute_overload(config, state, 'host', 'vm_uuids'). \
once()
manager.service()