summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@yahoo-inc.com>2014-05-05 16:45:44 -0700
committerJoshua Harlow <harlowja@yahoo-inc.com>2014-05-30 14:52:34 -0700
commitb07e1de6f675466301cf9893136187bef9c747bc (patch)
tree85558ce1f49e031cabeeeb241329f77a0b43e16f
parent9e8de204e407a1493ec5147ab8f37371f127ea8d (diff)
downloadoslo-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.py14
-rw-r--r--tests/sqlalchemy/test_sqlalchemy.py1
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,