summaryrefslogtreecommitdiffstats
path: root/nova/local.py
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2011-10-21 11:18:11 -0700
committerVishvananda Ishaya <vishvananda@gmail.com>2011-11-02 17:09:49 -0700
commit7cca5a8ff7f559da60c03405f69f78a42c763b61 (patch)
treeb647c9d649685a811bab58e49d98ba35d6438a08 /nova/local.py
parent39c261e683dd8deff157462b7a320c329e3a22f5 (diff)
downloadnova-7cca5a8ff7f559da60c03405f69f78a42c763b61.tar.gz
nova-7cca5a8ff7f559da60c03405f69f78a42c763b61.tar.xz
nova-7cca5a8ff7f559da60c03405f69f78a42c763b61.zip
Add local storage of context for logging
* adds nova/local.py:store for storing greenthread local data * saves a weak reference to the last context object created * uses the last context object if it exists for logging * Fixes bug 879582 Cc: stable-maintainers Change-Id: Ic373556ce197f2e8e7d23c807a65b12111db96eb
Diffstat (limited to 'nova/local.py')
-rw-r--r--nova/local.py37
1 files changed, 37 insertions, 0 deletions
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()