From 195ab59a3a53f636a43b13dc933ca63f1a62cd1a Mon Sep 17 00:00:00 2001 From: Brian Elliott Date: Mon, 4 Feb 2013 15:30:32 +0000 Subject: 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 --- openstack/common/db/sqlalchemy/session.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'openstack/common/db/sqlalchemy') 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: -- cgit