Don't use a different thread local store to oslo.log

Context logging does not work if we don't do it in a way that
oslo.log can pick up the context.

- Use the thread local storage from the base RequestContext class.
- Use the helper method context.get_current() as appropriate
- Update the custom_backend_auth.
- Remove heat/openstack/common/local.py as it is now not used.

Change-Id: I64f6af5090e98579b93a616bc79f4aaa6cd2b2ee
Closes-bug: 1435588
changes/70/167070/1
Angus Salkeld 8 years ago
parent d06b6c098b
commit 5eea2226e0
  1. 6
      heat/common/context.py
  2. 9
      heat/common/custom_backend_auth.py
  3. 45
      heat/openstack/common/local.py
  4. 1
      openstack-common.conf

@ -29,7 +29,6 @@ from heat.common import policy
from heat.common import wsgi
from heat.db import api as db_api
from heat.engine import clients
from heat.openstack.common import local
LOG = logging.getLogger(__name__)
@ -105,8 +104,6 @@ class RequestContext(context.RequestContext):
self.auth_token_info = auth_token_info
self.auth_url = auth_url
self.roles = roles or []
if overwrite or not hasattr(local.store, 'context'):
self.update_store()
self._session = None
self._clients = None
self.trust_id = trust_id
@ -119,9 +116,6 @@ class RequestContext(context.RequestContext):
else:
self.is_admin = is_admin
def update_store(self):
local.store.context = self
@property
def session(self):
if self._session is None:

@ -18,12 +18,11 @@
Middleware for authenticating against custom backends.
"""
import logging
from oslo_context import context
from oslo_log import log as logging
import webob.exc
from heat.common.i18n import _
from heat.openstack.common import local
from heat.rpc import client as rpc_client
LOG = logging.getLogger(__name__)
@ -43,8 +42,8 @@ class AuthProtocol(object):
we can't authenticate.
"""
LOG.debug('Authenticating user token')
context = local.store.context
authenticated = self.rpc_client.authenticated_to_backend(context)
ctx = context.get_current()
authenticated = self.rpc_client.authenticated_to_backend(ctx)
if authenticated:
return self.app(env, start_response)
else:

@ -1,45 +0,0 @@
# Copyright 2011 OpenStack Foundation.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""Local storage of variables using weak references"""
import threading
import weakref
class WeakLocal(threading.local):
def __getattribute__(self, attr):
rval = super(WeakLocal, self).__getattribute__(attr)
if rval:
# NOTE(mikal): this bit is confusing. What is stored is a weak
# reference, not the value itself. We therefore need to lookup
# the weak reference and return the inner value here.
rval = rval()
return rval
def __setattr__(self, attr, value):
value = weakref.ref(value)
return super(WeakLocal, self).__setattr__(attr, value)
# NOTE(mikal): the name "store" should be deprecated in the future
store = WeakLocal()
# A "weak" store uses weak references and allows an object to fall out of scope
# when it falls out of scope in the code that uses the thread local storage. A
# "strong" store will hold a reference to the object so that it never falls out
# of scope.
weak_store = WeakLocal()
strong_store = threading.local()

@ -3,7 +3,6 @@
# The list of modules to copy from oslo-incubator
module=crypto
module=eventlet_backdoor
module=local
module=loopingcall
module=policy
module=service

Loading…
Cancel
Save