summaryrefslogtreecommitdiffstats
path: root/nova/scheduler/manager.py
diff options
context:
space:
mode:
Diffstat (limited to 'nova/scheduler/manager.py')
-rw-r--r--nova/scheduler/manager.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/nova/scheduler/manager.py b/nova/scheduler/manager.py
index 36e9a8473..d0ff30c36 100644
--- a/nova/scheduler/manager.py
+++ b/nova/scheduler/manager.py
@@ -35,6 +35,7 @@ from nova.openstack.common import importutils
from nova.openstack.common import log as logging
from nova.openstack.common.notifier import api as notifier
from nova.openstack.common.rpc import common as rpc_common
+from nova.openstack.common.rpc import dispatcher as rpc_dispatcher
from nova import quota
@@ -61,6 +62,15 @@ class SchedulerManager(manager.Manager):
self.driver = importutils.import_object(scheduler_driver)
super(SchedulerManager, self).__init__(*args, **kwargs)
+ def create_rpc_dispatcher(self):
+ """Get the rpc dispatcher for this manager.
+
+ Return a dispatcher which can call out to either SchedulerManager
+ or _V2SchedulerManagerProxy depending on the RPC API version.
+ """
+ return rpc_dispatcher.RpcDispatcher([self,
+ _V2SchedulerManagerProxy(self)])
+
def __getattr__(self, key):
"""Converts all method calls to use the schedule method"""
# NOTE(russellb) Because of what this is doing, we must be careful
@@ -318,3 +328,67 @@ class SchedulerManager(manager.Manager):
@manager.periodic_task
def _expire_reservations(self, context):
QUOTAS.expire(context)
+
+
+class _V2SchedulerManagerProxy(object):
+
+ RPC_API_VERSION = '2.0'
+
+ # Notes:
+ # - remove get_host_list()
+ # - remove get_service_capabilities()
+ # - add explicit live_migration() method
+ # - remove __getattr__ magic which is replaced by schedule()
+
+ def __init__(self, manager):
+ self.manager = manager
+
+ def create_volume(self, context, volume_id, snapshot_id, reservations):
+ return self.manager.create_volume(
+ context, volume_id, snapshot_id, reservations)
+
+ # Remove instance_id, require instance
+ # Remove topic
+ # Make block_migration and disk_over_commit required
+ def live_migration(self, context, instance, dest,
+ block_migration, disk_over_commit):
+ return self.manager.live_migration(
+ context, dest, instance=instance,
+ block_migration=block_migration,
+ disk_over_commit=disk_over_commit,
+ instance_id=None)
+
+ # Remove update_db
+ # Remove instance_uuid, require instance
+ # Remove instance_type_id, require instance_type
+ # Remove topic
+ # Make reservations required
+ def prep_resize(self, context, image, request_spec, filter_properties,
+ instance, instance_type, reservations):
+ return self.manager.prep_resize(
+ context, image=image, request_spec=request_spec,
+ filter_properties=filter_properties,
+ instance=instance, instance_type=instance_type,
+ reservations=reservations, topic=None,
+ update_db=None, instance_uuid=None, instance_type_id=None)
+
+ # Remove reservations and topic
+ # Require instance_uuids in request_spec
+ def run_instance(self, context, request_spec, admin_password,
+ injected_files, requested_networks, is_first_time,
+ filter_properties):
+ return self.manager.run_instance(
+ context, request_spec, admin_password, injected_files,
+ requested_networks, is_first_time, filter_properties,
+ reservations=None, topic=None)
+
+ def show_host_resources(self, context, host):
+ return self.manager.show_host_resources(context, host)
+
+ # remove kwargs
+ # require service_name, host and capabilities
+ def update_service_capabilities(self, context, service_name,
+ host, capabilities):
+ return self.manager.update_service_capabilities(
+ context, service_name=service_name, host=host,
+ capabilities=capabilities)