summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSandy Walsh <sandy.walsh@rackspace.com>2011-03-15 18:29:26 -0700
committerSandy Walsh <sandy.walsh@rackspace.com>2011-03-15 18:29:26 -0700
commitf91d7925761f8204fdd46435ff57d74ae17483cf (patch)
tree9998397b46902a35986346b8d77174cb7d66473a
parent10ae2e194e2c429620407ce5be7ce59ac5ccd761 (diff)
first pass openstack redirect working
-rw-r--r--etc/api-paste.ini5
-rw-r--r--nova/api/openstack/servers.py1
-rw-r--r--nova/compute/api.py3
-rw-r--r--nova/compute/manager.py6
-rw-r--r--nova/exception.py6
-rw-r--r--nova/scheduler/api.py13
6 files changed, 26 insertions, 8 deletions
diff --git a/etc/api-paste.ini b/etc/api-paste.ini
index 9f7e93d4c..c0077939b 100644
--- a/etc/api-paste.ini
+++ b/etc/api-paste.ini
@@ -70,7 +70,10 @@ use = egg:Paste#urlmap
/v1.0: openstackapi
[pipeline:openstackapi]
-pipeline = faultwrap auth ratelimit osapiapp
+pipeline = faultwrap zonerouter auth ratelimit osapiapp
+
+[filter:zonerouter]
+paste.filter_factory = nova.api.zone_redirect:ZoneRedirectMiddleware.factory
[filter:faultwrap]
paste.filter_factory = nova.api.openstack:FaultWrapper.factory
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index 85999764f..ffcbe628c 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -343,6 +343,7 @@ class Controller(wsgi.Controller):
""" Permit Admins to Pause the server. """
ctxt = req.environ['nova.context']
try:
+ LOG.debug(_("*** Compute.api::pause %s"), id)
self.compute_api.pause(ctxt, id)
except:
readable = traceback.format_exc()
diff --git a/nova/compute/api.py b/nova/compute/api.py
index 8865a1654..1185b9964 100644
--- a/nova/compute/api.py
+++ b/nova/compute/api.py
@@ -347,7 +347,8 @@ class API(base.Base):
def get(self, context, instance_id):
"""Get a single instance with the given ID."""
- rv = self.db.instance_get(context, instance_id)
+ rv = self.scheduler_api.get_instance_or_reroute(context, instance_id)
+ #rv = self.db.instance_get(context, instance_id)
return dict(rv.iteritems())
def get_all(self, context, project_id=None, reservation_id=None,
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index ebe1ce6f0..499b212e2 100644
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -48,6 +48,7 @@ from nova import scheduler_manager
from nova import rpc
from nova import utils
from nova.compute import power_state
+from nova.scheduler import api as scheduler_api
FLAGS = flags.FLAGS
flags.DEFINE_string('instances_path', '$state_path/instances',
@@ -521,7 +522,10 @@ class ComputeManager(scheduler_manager.SchedulerDependentManager):
def pause_instance(self, context, instance_id):
"""Pause an instance on this server."""
context = context.elevated()
- instance_ref = self.db.instance_get(context, instance_id)
+ LOG.debug(_('*** instance %s: starting pause'), instance_id)
+ instance_ref = scheduler_api.get_instance_or_reroute(context,
+ instance_id)
+ #instance_ref = self.db.instance_get(context, instance_id)
LOG.audit(_('instance %s: pausing'), instance_id, context=context)
self.db.instance_set_state(context,
instance_id,
diff --git a/nova/exception.py b/nova/exception.py
index ce8daf048..d0baa2e29 100644
--- a/nova/exception.py
+++ b/nova/exception.py
@@ -93,9 +93,9 @@ class TimeoutException(Error):
class ZoneRouteException(Error):
- def __init__(self, zone, *args, **kwargs):
- self.zone = zone
- super(ZoneRouteException, self).__init__(args, kwargs)
+ def __init__(self, zones, *args, **kwargs):
+ self.zones = zones
+ super(ZoneRouteException, self).__init__(*args, **kwargs)
class DBError(Error):
diff --git a/nova/scheduler/api.py b/nova/scheduler/api.py
index 8f9806f77..c0e28a0a9 100644
--- a/nova/scheduler/api.py
+++ b/nova/scheduler/api.py
@@ -73,13 +73,22 @@ class API(object):
args=dict(service_name=service_name, host=host,
capabilities=capabilities))
return rpc.fanout_cast(context, 'scheduler', kwargs)
+
+ @classmethod
+ def get_instance_or_reroute(cls, context, instance_id):
+ instance = db.instance_get(context, instance_id)
+ zones = db.zone_get_all(context)
+
+ LOG.debug("*** Firing ZoneRouteException")
+ # Throw a reroute Exception for the middleware to pick up.
+ raise exception.ZoneRouteException(zones)
@classmethod
- def get_queue_for_instance(cls, context, service, instance_id)
+ def get_queue_for_instance(cls, context, service, instance_id):
instance = db.instance_get(context, instance_id)
zone = db.get_zone(instance.zone.id)
if cls._is_current_zone(zone):
- return db.queue_get_for(context, service, instance['host']):
+ return db.queue_get_for(context, service, instance['host'])
# Throw a reroute Exception for the middleware to pick up.
raise exception.ZoneRouteException(zone)