Merge "Make the CellDatabases fixture work with fasteners >= 0.15"
This commit is contained in:
commit
f37a368e4e
|
@ -17,6 +17,7 @@
|
|||
"""Fixtures for Nova tests."""
|
||||
|
||||
import collections
|
||||
import contextlib
|
||||
from contextlib import contextmanager
|
||||
import functools
|
||||
import logging as std_logging
|
||||
|
@ -406,6 +407,23 @@ class CellDatabases(fixtures.Fixture):
|
|||
# to point to a cell, we need to take an exclusive lock to
|
||||
# prevent any other calls to get_context_manager() until we
|
||||
# reset to the default.
|
||||
# NOTE(melwitt): As of fasteners >= 0.15, the workaround code to use
|
||||
# eventlet.getcurrent if eventlet patching is detected has been removed
|
||||
# and threading.current_thread is being used instead. Although we are
|
||||
# running in a greenlet in our test environment, we are not running in
|
||||
# a greenlet of type GreenThread. A GreenThread is created by calling
|
||||
# eventlet.spawn and spawn is not used to run our tests. At the time of
|
||||
# this writing, the eventlet patched threading.current_thread method
|
||||
# falls back to the original unpatched current_thread method if it is
|
||||
# not called from a GreenThead [1] and that breaks our tests involving
|
||||
# this fixture.
|
||||
# We can work around this by patching threading.current_thread with
|
||||
# eventlet.getcurrent during creation of the lock object.
|
||||
# [1] https://github.com/eventlet/eventlet/blob/v0.32.0/eventlet/green/threading.py#L128 # noqa
|
||||
eventlet_patched = eventlet.patcher.is_monkey_patched('thread')
|
||||
with (contextlib.ExitStack() if not eventlet_patched else
|
||||
fixtures.MonkeyPatch('threading.current_thread',
|
||||
eventlet.getcurrent)):
|
||||
self._cell_lock = lockutils.ReaderWriterLock()
|
||||
|
||||
def _cache_schema(self, connection_str):
|
||||
|
|
Loading…
Reference in New Issue