summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-12-13 00:00:26 +0000
committerGerrit Code Review <review@openstack.org>2012-12-13 00:00:26 +0000
commit31f0eec568e4b70d84b55080790dce317f1303c7 (patch)
tree045883806b29a406172157b7f394193d28071278 /nova
parente467a0a1fe42560753abafb530e5b50c6d5b6428 (diff)
parentd6c89b5d8b77dcdac0d217cf623455735ef91f8b (diff)
downloadnova-31f0eec568e4b70d84b55080790dce317f1303c7.tar.gz
nova-31f0eec568e4b70d84b55080790dce317f1303c7.tar.xz
nova-31f0eec568e4b70d84b55080790dce317f1303c7.zip
Merge "Make update_service_capabilities() accept a list of capabilities"
Diffstat (limited to 'nova')
-rw-r--r--nova/manager.py7
-rw-r--r--nova/scheduler/manager.py13
-rw-r--r--nova/scheduler/rpcapi.py5
-rw-r--r--nova/tests/scheduler/test_rpcapi.py3
-rw-r--r--nova/tests/scheduler/test_scheduler.py22
5 files changed, 38 insertions, 12 deletions
diff --git a/nova/manager.py b/nova/manager.py
index b1a1d471d..e7130fb4a 100644
--- a/nova/manager.py
+++ b/nova/manager.py
@@ -255,8 +255,5 @@ class SchedulerDependentManager(Manager):
"""
if self.last_capabilities:
LOG.debug(_('Notifying Schedulers of capabilities ...'))
- for capability_item in self.last_capabilities:
- self.scheduler_rpcapi.update_service_capabilities(context,
- self.service_name, self.host, capability_item)
- # TODO(NTTdocomo): Make update_service_capabilities() accept a list
- # of capabilities
+ self.scheduler_rpcapi.update_service_capabilities(context,
+ self.service_name, self.host, self.last_capabilities)
diff --git a/nova/scheduler/manager.py b/nova/scheduler/manager.py
index dbb8845cb..535eb7797 100644
--- a/nova/scheduler/manager.py
+++ b/nova/scheduler/manager.py
@@ -54,7 +54,7 @@ QUOTAS = quota.QUOTAS
class SchedulerManager(manager.Manager):
"""Chooses a host to run instances on."""
- RPC_API_VERSION = '2.3'
+ RPC_API_VERSION = '2.4'
def __init__(self, scheduler_driver=None, *args, **kwargs):
if not scheduler_driver:
@@ -72,10 +72,13 @@ class SchedulerManager(manager.Manager):
def update_service_capabilities(self, context, service_name,
host, capabilities):
"""Process a capability update from a service node."""
- if capabilities is None:
- capabilities = {}
- self.driver.update_service_capabilities(service_name, host,
- capabilities)
+ if not isinstance(capabilities, list):
+ capabilities = [capabilities]
+ for capability in capabilities:
+ if capability is None:
+ capability = {}
+ self.driver.update_service_capabilities(service_name, host,
+ capability)
def create_volume(self, context, volume_id, snapshot_id,
reservations=None, image_id=None):
diff --git a/nova/scheduler/rpcapi.py b/nova/scheduler/rpcapi.py
index f368e95a0..4bc6e0e45 100644
--- a/nova/scheduler/rpcapi.py
+++ b/nova/scheduler/rpcapi.py
@@ -47,6 +47,8 @@ class SchedulerAPI(nova.openstack.common.rpc.proxy.RpcProxy):
2.1 - Add image_id to create_volume()
2.2 - Remove reservations argument to create_volume()
2.3 - Remove create_volume()
+ 2.4 - Change update_service_capabilities()
+ - accepts a list of capabilities
'''
#
@@ -102,4 +104,5 @@ class SchedulerAPI(nova.openstack.common.rpc.proxy.RpcProxy):
capabilities):
self.fanout_cast(ctxt, self.make_msg('update_service_capabilities',
service_name=service_name, host=host,
- capabilities=capabilities))
+ capabilities=capabilities),
+ version='2.4')
diff --git a/nova/tests/scheduler/test_rpcapi.py b/nova/tests/scheduler/test_rpcapi.py
index 112a41105..b1174559a 100644
--- a/nova/tests/scheduler/test_rpcapi.py
+++ b/nova/tests/scheduler/test_rpcapi.py
@@ -82,4 +82,5 @@ class SchedulerRpcAPITestCase(test.TestCase):
def test_update_service_capabilities(self):
self._test_scheduler_api('update_service_capabilities',
rpc_method='fanout_cast', service_name='fake_name',
- host='fake_host', capabilities='fake_capabilities')
+ host='fake_host', capabilities='fake_capabilities',
+ version='2.4')
diff --git a/nova/tests/scheduler/test_scheduler.py b/nova/tests/scheduler/test_scheduler.py
index 105240775..d0f0fd6ec 100644
--- a/nova/tests/scheduler/test_scheduler.py
+++ b/nova/tests/scheduler/test_scheduler.py
@@ -87,6 +87,28 @@ class SchedulerManagerTestCase(test.TestCase):
service_name=service_name, host=host,
capabilities=capabilities)
+ def test_update_service_multiple_capabilities(self):
+ service_name = 'fake_service'
+ host = 'fake_host'
+
+ self.mox.StubOutWithMock(self.manager.driver,
+ 'update_service_capabilities')
+
+ capab1 = {'fake_capability': 'fake_value1'},
+ capab2 = {'fake_capability': 'fake_value2'},
+ capab3 = None
+ self.manager.driver.update_service_capabilities(
+ service_name, host, capab1)
+ self.manager.driver.update_service_capabilities(
+ service_name, host, capab2)
+ # None is converted to {}
+ self.manager.driver.update_service_capabilities(
+ service_name, host, {})
+ self.mox.ReplayAll()
+ self.manager.update_service_capabilities(self.context,
+ service_name=service_name, host=host,
+ capabilities=[capab1, capab2, capab3])
+
def test_show_host_resources(self):
host = 'fake_host'