diff options
author | Jenkins <jenkins@review.openstack.org> | 2016-07-13 18:19:15 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2016-07-13 18:19:15 +0000 |
commit | 673f27b0e88bbe69b47b10fdc0fd6f1f353c66ae (patch) | |
tree | 52cf0a12d36c232bb291b3e12a64285cd6be31b6 | |
parent | 6e814373c793071db546ca7508c07b33203e2825 (diff) | |
parent | 7b76cdf420289353f5a8e8acb7d49882b35d18ac (diff) | |
download | oslo-db-673f27b0e88bbe69b47b10fdc0fd6f1f353c66ae.tar.gz |
Merge "Add dispose_pool() method to enginefacade context, factory"
-rw-r--r-- | oslo_db/sqlalchemy/enginefacade.py | 14 | ||||
-rw-r--r-- | oslo_db/tests/sqlalchemy/test_enginefacade.py | 43 |
2 files changed, 57 insertions, 0 deletions
diff --git a/oslo_db/sqlalchemy/enginefacade.py b/oslo_db/sqlalchemy/enginefacade.py index c935602..cd6745b 100644 --- a/oslo_db/sqlalchemy/enginefacade.py +++ b/oslo_db/sqlalchemy/enginefacade.py @@ -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.""" diff --git a/oslo_db/tests/sqlalchemy/test_enginefacade.py b/oslo_db/tests/sqlalchemy/test_enginefacade.py index d27f7bf..1365f1c 100644 --- a/oslo_db/tests/sqlalchemy/test_enginefacade.py +++ b/oslo_db/tests/sqlalchemy/test_enginefacade.py @@ -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() |