diff options
author | Vishvananda Ishaya <vishvananda@gmail.com> | 2011-10-21 11:18:11 -0700 |
---|---|---|
committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2011-11-02 17:09:49 -0700 |
commit | 7cca5a8ff7f559da60c03405f69f78a42c763b61 (patch) | |
tree | b647c9d649685a811bab58e49d98ba35d6438a08 /nova/local.py | |
parent | 39c261e683dd8deff157462b7a320c329e3a22f5 (diff) | |
download | nova-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.py | 37 |
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() |