summaryrefslogtreecommitdiffstats
path: root/openstack/common
diff options
context:
space:
mode:
authorBrian Elliott <brian.elliott@rackspace.com>2013-02-04 15:30:32 +0000
committerMark McLoughlin <markmc@redhat.com>2013-02-07 15:25:28 -0500
commit195ab59a3a53f636a43b13dc933ca63f1a62cd1a (patch)
tree975f62f923d903db4cb94b9d9f89624c4340d541 /openstack/common
parent307b2df090a25258f3d2591a7b0c3bcc93ca5496 (diff)
downloadoslo-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.py20
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: