Support x-openstack-request-id
This patch aims to support "x-openstack-request-id" for Sahara. Nova, Cinder and Neutron have realized "x-openstack-request-id" functionality. This functionality will enable effective log tracing. Change-Id: If0a0b10145d85eff811cdd2114f73494ae7e324a
This commit is contained in:
parent
e8f21cc2b1
commit
38ffca6a92
@ -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):
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
@ -108,6 +109,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
|
||||
|
||||
@ -119,18 +130,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
|
||||
@ -149,12 +157,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:]
|
||||
@ -164,17 +170,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.
|
||||
@ -189,7 +193,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()
|
||||
|
||||
|
@ -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()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user