summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/context.py3
-rw-r--r--nova/local.py37
-rw-r--r--nova/log.py4
3 files changed, 44 insertions, 0 deletions
diff --git a/nova/context.py b/nova/context.py
index de5b791c4..36d15ba08 100644
--- a/nova/context.py
+++ b/nova/context.py
@@ -1,5 +1,6 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
+# Copyright 2011 OpenStack LLC.
# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
@@ -20,6 +21,7 @@
import uuid
+from nova import local
from nova import utils
@@ -51,6 +53,7 @@ class RequestContext(object):
self.request_id = request_id
self.auth_token = auth_token
self.strategy = strategy
+ local.store.context = self
def to_dict(self):
return {'user_id': self.user_id,
diff --git a/nova/local.py b/nova/local.py
new file mode 100644
index 000000000..19d962732
--- /dev/null
+++ b/nova/local.py
@@ -0,0 +1,37 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# 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.
+
+"""Greenthread local storage of variables using weak references"""
+
+import weakref
+
+from eventlet import corolocal
+
+
+class WeakLocal(corolocal.local):
+ def __getattribute__(self, attr):
+ rval = corolocal.local.__getattribute__(self, attr)
+ if rval:
+ rval = rval()
+ return rval
+
+ def __setattr__(self, attr, value):
+ value = weakref.ref(value)
+ return corolocal.local.__setattr__(self, attr, value)
+
+
+store = WeakLocal()
diff --git a/nova/log.py b/nova/log.py
index 1e04f755d..86f157080 100644
--- a/nova/log.py
+++ b/nova/log.py
@@ -1,5 +1,6 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
+# Copyright 2011 OpenStack LLC.
# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
@@ -38,6 +39,7 @@ import traceback
import nova
from nova import flags
+from nova import local
from nova import version
@@ -152,6 +154,8 @@ class NovaLogger(logging.Logger):
"""Extract context from any log call."""
if not extra:
extra = {}
+ if context is None:
+ context = getattr(local.store, 'context', None)
if context:
extra.update(_dictify_context(context))
extra.update({"nova_version": version.version_string_with_vcs()})