diff options
author | Joshua Harlow <harlowja@yahoo-inc.com> | 2014-05-05 16:45:44 -0700 |
---|---|---|
committer | Joshua Harlow <harlowja@yahoo-inc.com> | 2014-05-30 14:52:34 -0700 |
commit | b07e1de6f675466301cf9893136187bef9c747bc (patch) | |
tree | 85558ce1f49e031cabeeeb241329f77a0b43e16f | |
parent | 9e8de204e407a1493ec5147ab8f37371f127ea8d (diff) | |
download | oslo-db-b07e1de6f675466301cf9893136187bef9c747bc.tar.gz |
Allow for skipping thread_yielding
When greenthreads aren't being used this call is not
so useful and since oslo.db is a library it can't be
guaranteed that those using it will be also using
eventlet (or similar library).
Change-Id: Ib06d3761fa3f6d4d089357b396ea8c84d41ee835
-rw-r--r-- | oslo/db/sqlalchemy/session.py | 14 | ||||
-rw-r--r-- | tests/sqlalchemy/test_sqlalchemy.py | 1 |
2 files changed, 11 insertions, 4 deletions
diff --git a/oslo/db/sqlalchemy/session.py b/oslo/db/sqlalchemy/session.py index 9bf4b6d..9c280cb 100644 --- a/oslo/db/sqlalchemy/session.py +++ b/oslo/db/sqlalchemy/session.py @@ -605,7 +605,8 @@ def create_engine(sql_connection, sqlite_fk=False, mysql_sql_mode=None, idle_timeout=3600, connection_debug=0, max_pool_size=None, max_overflow=None, pool_timeout=None, sqlite_synchronous=True, - connection_trace=False, max_retries=10, retry_interval=10): + connection_trace=False, max_retries=10, retry_interval=10, + thread_checkin=True): """Return a new SQLAlchemy engine.""" connection_dict = sqlalchemy.engine.url.make_url(sql_connection) @@ -643,7 +644,8 @@ def create_engine(sql_connection, sqlite_fk=False, mysql_sql_mode=None, engine = sqlalchemy.create_engine(sql_connection, **engine_args) - sqlalchemy.event.listen(engine, 'checkin', _thread_yield) + if thread_checkin: + sqlalchemy.event.listen(engine, 'checkin', _thread_yield) if engine.name in ('ibm_db_sa', 'mysql', 'postgresql'): ping_callback = functools.partial(_ping_listener, engine) @@ -827,7 +829,10 @@ class EngineFacade(object): (defaults to 10) :keyword retry_interval: interval between retries of opening a sql connection (defaults to 10) - + :keyword thread_checkin: boolean that indicates that between each + engine checkin event a sleep(0) will occur to + allow other greenthreads to run (defaults to + True) """ super(EngineFacade, self).__init__() @@ -844,7 +849,8 @@ class EngineFacade(object): sqlite_synchronous=kwargs.get('sqlite_synchronous', True), connection_trace=kwargs.get('connection_trace', False), max_retries=kwargs.get('max_retries', 10), - retry_interval=kwargs.get('retry_interval', 10)) + retry_interval=kwargs.get('retry_interval', 10), + thread_checkin=kwargs.get('thread_checkin', True)) self._session_maker = get_maker( engine=self._engine, autocommit=autocommit, diff --git a/tests/sqlalchemy/test_sqlalchemy.py b/tests/sqlalchemy/test_sqlalchemy.py index 9cda622..77c7a6a 100644 --- a/tests/sqlalchemy/test_sqlalchemy.py +++ b/tests/sqlalchemy/test_sqlalchemy.py @@ -376,6 +376,7 @@ class EngineFacadeTestCase(oslo_test.BaseTestCase): connection_trace=mock.ANY, sqlite_synchronous=mock.ANY, pool_timeout=mock.ANY, + thread_checkin=mock.ANY, ) get_maker.assert_called_once_with(engine=create_engine(), autocommit=False, |