diff options
| author | Brian Elliott <brian.elliott@rackspace.com> | 2013-02-04 15:30:32 +0000 |
|---|---|---|
| committer | Mark McLoughlin <markmc@redhat.com> | 2013-02-07 15:25:28 -0500 |
| commit | 195ab59a3a53f636a43b13dc933ca63f1a62cd1a (patch) | |
| tree | 975f62f923d903db4cb94b9d9f89624c4340d541 /openstack/common | |
| parent | 307b2df090a25258f3d2591a7b0c3bcc93ca5496 (diff) | |
| download | oslo-195ab59a3a53f636a43b13dc933ca63f1a62cd1a.tar.gz oslo-195ab59a3a53f636a43b13dc933ca63f1a62cd1a.tar.xz oslo-195ab59a3a53f636a43b13dc933ca63f1a62cd1a.zip | |
Fix eventlet/mysql db pooling code
Eventlet versions >= 0.10 return a tuple from
db_pool.ConnectionPool().create(), not a scalar.
Also, set the FOUND_ROWS client flag, which sqlalchemy
appears to require to sanity check the number of rows
touch.
bug 1097992
Change-Id: I64e798660c506fcd13947a232cb7832db0318360
Diffstat (limited to 'openstack/common')
| -rw-r--r-- | openstack/common/db/sqlalchemy/session.py | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/openstack/common/db/sqlalchemy/session.py b/openstack/common/db/sqlalchemy/session.py index 3b2d9df..700273a 100644 --- a/openstack/common/db/sqlalchemy/session.py +++ b/openstack/common/db/sqlalchemy/session.py @@ -248,8 +248,10 @@ from eventlet import db_pool from eventlet import greenthread try: import MySQLdb + from MySQLdb.constants import CLIENT as mysql_client_constants except ImportError: MySQLdb = None + mysql_client_constants = None from sqlalchemy.exc import DisconnectionError, OperationalError, IntegrityError import sqlalchemy.interfaces import sqlalchemy.orm @@ -511,9 +513,21 @@ def create_engine(sql_connection): 'user': connection_dict.username, 'min_size': CONF.sql_min_pool_size, 'max_size': CONF.sql_max_pool_size, - 'max_idle': CONF.sql_idle_timeout} - creator = db_pool.ConnectionPool(MySQLdb, **pool_args) - engine_args['creator'] = creator.create + 'max_idle': CONF.sql_idle_timeout, + 'client_flag': mysql_client_constants.FOUND_ROWS} + + pool = db_pool.ConnectionPool(MySQLdb, **pool_args) + + def creator(): + conn = pool.create() + if isinstance(conn, tuple): + # NOTE(belliott) eventlet >= 0.10 returns a tuple + now, now, conn = conn + + return conn + + engine_args['creator'] = creator + else: engine_args['pool_size'] = CONF.sql_max_pool_size if CONF.sql_max_overflow is not None: |
