Merge "Add dispose_pool() method to enginefacade context, factory"

This commit is contained in:
Jenkins
2016-07-13 18:19:15 +00:00
committed by Gerrit Code Review
2 changed files with 57 additions and 0 deletions

View File

@@ -308,6 +308,16 @@ class _TransactionFactory(object):
def _maker_args_for_conf(self, conf):
return self._args_for_conf(self._maker_cfg, conf)
def dispose_pool(self):
"""Call engine.pool.dispose() on underlying Engine objects."""
with self._start_lock:
if not self._started:
return
self._writer_engine.pool.dispose()
if self._reader_engine is not self._writer_engine:
self._reader_engine.pool.dispose()
def _start(self, conf=False, connection=None, slave_connection=None):
with self._start_lock:
# self._started has been checked on the outside
@@ -638,6 +648,10 @@ class _TransactionContextManager(object):
return self._factory.get_legacy_facade()
def dispose_pool(self):
"""Call engine.pool.dispose() on underlying Engine objects."""
self._factory.dispose_pool()
@property
def replace(self):
"""Modifier to replace the global transaction factory with this one."""

View File

@@ -62,6 +62,7 @@ class SingletonEngine(SingletonOnName):
super(SingletonEngine, self).__init__(
"engine",
connect=mock.Mock(return_value=connection),
pool=mock.Mock(),
url=connection,
_assert_connection=connection,
**kw
@@ -417,6 +418,48 @@ class MockFacadeTest(oslo_test_base.BaseTestCase):
session.mock_calls,
self.sessions.element_for_writer(writer).mock_calls)
def test_dispose_pool(self):
facade = enginefacade.transaction_context()
facade.configure(
connection=self.engine_uri,
)
facade.dispose_pool()
self.assertFalse(hasattr(facade._factory, '_writer_engine'))
facade._factory._start()
facade.dispose_pool()
self.assertEqual(
facade._factory._writer_engine.pool.mock_calls,
[mock.call.dispose()]
)
def test_dispose_pool_w_reader(self):
facade = enginefacade.transaction_context()
facade.configure(
connection=self.engine_uri,
slave_connection=self.slave_uri
)
facade.dispose_pool()
self.assertFalse(hasattr(facade._factory, '_writer_engine'))
self.assertFalse(hasattr(facade._factory, '_reader_engine'))
facade._factory._start()
facade.dispose_pool()
self.assertEqual(
facade._factory._writer_engine.pool.mock_calls,
[mock.call.dispose()]
)
self.assertEqual(
facade._factory._reader_engine.pool.mock_calls,
[mock.call.dispose()]
)
def test_session_reader_decorator(self):
context = oslo_context.RequestContext()