Merge "Support x-openstack-request-id"

This commit is contained in:
Jenkins 2015-04-27 14:33:13 +00:00 committed by Gerrit Code Review
commit 7048cc20a3
4 changed files with 26 additions and 16 deletions

View File

@ -45,6 +45,7 @@ class Context(context.RequestContext):
auth_uri=None,
resource_uuid=None,
current_instance_info=None,
request_id=None,
overwrite=True,
**kwargs):
if kwargs:
@ -55,7 +56,8 @@ class Context(context.RequestContext):
user=user_id,
tenant=tenant_id,
is_admin=is_admin,
resource_uuid=resource_uuid)
resource_uuid=resource_uuid,
request_id=request_id)
self.service_catalog = service_catalog
self.username = username
self.tenant_name = tenant_name
@ -88,6 +90,7 @@ class Context(context.RequestContext):
self.auth_uri,
self.resource_uuid,
self.current_instance_info,
self.request_id,
overwrite=False)
def to_dict(self):
@ -102,6 +105,7 @@ class Context(context.RequestContext):
'roles': self.roles,
'auth_uri': self.auth_uri,
'resource_uuid': self.resource_uuid,
'request_id': self.request_id,
}
def is_auth_capable(self):

View File

@ -18,6 +18,7 @@ import os
import flask
from oslo_config import cfg
from oslo_log import log
from oslo_middleware import request_id
import six
import stevedore
from werkzeug import exceptions as werkzeug_exceptions
@ -42,7 +43,6 @@ from sahara.utils import remote
from sahara.utils import rpc as messaging
from sahara.utils import wsgi
LOG = log.getLogger(__name__)
@ -157,6 +157,7 @@ def make_app():
app.wsgi_app = auth_valid.wrap(app.wsgi_app)
app.wsgi_app = acl.wrap(app.wsgi_app)
app.wsgi_app = request_id.RequestId(app.wsgi_app)
return app

View File

@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import functools
import random
from oslo_config import cfg
@ -104,6 +105,16 @@ def terminate_cluster(ctx, cluster, description):
{'status': 'AwaitingTermination'})
def set_context(func):
@functools.wraps(func)
def handler(self, ctx):
ctx = context.get_admin_context()
context.set_ctx(ctx)
func(self, ctx)
context.set_ctx(None)
return handler
def _make_periodic_tasks():
'''Return the periodic tasks object
@ -115,18 +126,15 @@ def _make_periodic_tasks():
class SaharaPeriodicTasks(periodic_task.PeriodicTasks):
@periodic_task.periodic_task(spacing=45, run_immediately=True)
@set_context
def update_job_statuses(self, ctx):
LOG.debug('Updating job statuses')
ctx = context.get_admin_context()
context.set_ctx(ctx)
job_manager.update_job_statuses()
context.set_ctx(None)
@periodic_task.periodic_task(spacing=90)
@set_context
def terminate_unneeded_transient_clusters(self, ctx):
LOG.debug('Terminating unneeded transient clusters')
ctx = context.get_admin_context()
context.set_ctx(ctx)
for cluster in conductor.cluster_get_all(ctx, status='Active'):
if not cluster.is_transient:
continue
@ -145,12 +153,10 @@ def _make_periodic_tasks():
terminate_cluster(ctx, cluster, description='transient')
# Add event log info cleanup
context.ctx().current_instance_info = context.InstanceInfo()
context.set_ctx(None)
@periodic_task.periodic_task(spacing=zombie_task_spacing)
@set_context
def check_for_zombie_proxy_users(self, ctx):
ctx = context.get_admin_context()
context.set_ctx(ctx)
for user in p.proxy_domain_users_list():
if user.name.startswith('job_'):
je_id = user.name[4:]
@ -160,17 +166,15 @@ def _make_periodic_tasks():
LOG.debug('Found zombie proxy user {username}'.format(
username=user.name))
p.proxy_user_delete(user_id=user.id)
context.set_ctx(None)
@periodic_task.periodic_task(spacing=3600)
@set_context
def terminate_incomplete_clusters(self, ctx):
if CONF.cleanup_time_for_incomplete_clusters <= 0:
return
LOG.debug('Terminating old clusters in non-final state')
ctx = context.get_admin_context()
context.set_ctx(ctx)
# NOTE(alazarev) Retrieving all clusters once in hour for now.
# Criteria support need to be implemented in sahara db API to
# have SQL filtering.
@ -185,7 +189,6 @@ def _make_periodic_tasks():
terminate_cluster(ctx, cluster, description='incomplete')
# Add event log info cleanup
context.ctx().current_instance_info = context.InstanceInfo()
context.set_ctx(None)
return SaharaPeriodicTasks()

View File

@ -17,6 +17,7 @@ import traceback
import flask
from oslo_log import log as logging
from oslo_middleware import request_id as oslo_req_id
from werkzeug import datastructures
from sahara import context
@ -73,6 +74,7 @@ class Rest(flask.Blueprint):
flask.request.status_code = status
kwargs.pop("tenant_id")
req_id = flask.request.environ.get(oslo_req_id.ENV_REQUEST_ID)
ctx = context.Context(
flask.request.headers['X-User-Id'],
flask.request.headers['X-Tenant-Id'],
@ -80,9 +82,9 @@ class Rest(flask.Blueprint):
flask.request.headers['X-Service-Catalog'],
flask.request.headers['X-User-Name'],
flask.request.headers['X-Tenant-Name'],
flask.request.headers['X-Roles'].split(','))
flask.request.headers['X-Roles'].split(','),
request_id=req_id)
context.set_ctx(ctx)
if flask.request.method in ['POST', 'PUT']:
kwargs['data'] = request_data()