Scheduler should not select down volume managers

Currently volume managers that are not disabled, but are not running
may be selected by the scheduler for volume creation operations.

Change-Id: Ia06a3da8b31eef918d55aaaf71f863683c721026
Fixes: bug #1197741
This commit is contained in:
Ollie Leahy 2013-07-04 13:58:08 +00:00
parent 3b0921fbdc
commit 3283ce5004
2 changed files with 30 additions and 0 deletions

View File

@ -263,6 +263,7 @@ class HostManager(object):
# Get resource usage across the available volume nodes:
topic = CONF.volume_topic
volume_services = db.service_get_all_by_topic(context, topic)
self.host_state_map.clear()
for service in volume_services:
host = service['host']
if not utils.service_is_up(service) or service['disabled']:

View File

@ -141,9 +141,28 @@ class HostManagerTestCase(test.TestCase):
self.mox.StubOutWithMock(db, 'service_get_all_by_topic')
self.mox.StubOutWithMock(host_manager.LOG, 'warn')
self.mox.StubOutWithMock(host_manager.utils, 'service_is_up')
ret_services = fakes.VOLUME_SERVICES
db.service_get_all_by_topic(context, topic).AndReturn(ret_services)
host_manager.utils.service_is_up(ret_services[0]).AndReturn(True)
host_manager.utils.service_is_up(ret_services[1]).AndReturn(True)
host_manager.utils.service_is_up(ret_services[2]).AndReturn(True)
host_manager.utils.service_is_up(ret_services[3]).AndReturn(True)
host_manager.utils.service_is_up(ret_services[4]).AndReturn(True)
# Disabled service
host_manager.LOG.warn("volume service is down or disabled. "
"(host: host5)")
db.service_get_all_by_topic(context, topic).AndReturn(ret_services)
host_manager.utils.service_is_up(ret_services[0]).AndReturn(True)
host_manager.utils.service_is_up(ret_services[1]).AndReturn(True)
host_manager.utils.service_is_up(ret_services[2]).AndReturn(True)
host_manager.utils.service_is_up(ret_services[3]).AndReturn(False)
# Stopped service
host_manager.LOG.warn("volume service is down or disabled. "
"(host: host4)")
host_manager.utils.service_is_up(ret_services[4]).AndReturn(True)
# Disabled service
host_manager.LOG.warn("volume service is down or disabled. "
"(host: host5)")
@ -160,6 +179,16 @@ class HostManagerTestCase(test.TestCase):
self.assertEqual(host_state_map[host].service,
volume_node)
self.host_manager.get_all_host_states(context)
host_state_map = self.host_manager.host_state_map
self.assertEqual(len(host_state_map), 3)
for i in xrange(3):
volume_node = fakes.VOLUME_SERVICES[i]
host = volume_node['host']
self.assertEqual(host_state_map[host].service,
volume_node)
class HostStateTestCase(test.TestCase):
"""Test case for HostState class"""