Skip to content
This repository has been archived by the owner on Jun 26, 2020. It is now read-only.

Commit

Permalink
Enable user to configure pool_timeout
Browse files Browse the repository at this point in the history
Fixes bug 1160442

In addition to this there are the following changes:
1. The set_default method can configure the QueuePool parameters
2. The max_pool_size is defaulted to the QueuePool default

Change-Id: Ie99f7fc4edba68127c4af508290d8074d7094be9
  • Loading branch information
Gary Kotton committed Jun 11, 2013
1 parent faddbbe commit ebaa578
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 3 deletions.
23 changes: 20 additions & 3 deletions openstack/common/db/sqlalchemy/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ def soft_delete_multi_models():
help='Minimum number of SQL connections to keep open in a '
'pool'),
cfg.IntOpt('max_pool_size',
default=5,
default=None,
deprecated_name='sql_max_pool_size',
deprecated_group=DEFAULT,
help='Maximum number of SQL connections to keep open in a '
Expand Down Expand Up @@ -330,6 +330,9 @@ def soft_delete_multi_models():
deprecated_name='sql_connection_trace',
deprecated_group=DEFAULT,
help='Add python stack traces to SQL as comment strings'),
cfg.IntOpt('pool_timeout',
default=None,
help='If set, use this value for pool_timeout with sqlalchemy'),
]

CONF = cfg.CONF
Expand All @@ -343,12 +346,23 @@ def soft_delete_multi_models():
_SLAVE_MAKER = None


def set_defaults(sql_connection, sqlite_db):
def set_defaults(sql_connection, sqlite_db, max_pool_size=None,
max_overflow=None, pool_timeout=None):
"""Set defaults for configuration variables."""
cfg.set_defaults(database_opts,
connection=sql_connection)
cfg.set_defaults(sqlite_db_opts,
sqlite_db=sqlite_db)
# Update the QueuePool defaults
if max_pool_size is not None:
cfg.set_defaults(database_opts,
max_pool_size=max_pool_size)
if max_overflow is not None:
cfg.set_defaults(database_opts,
max_overflow=max_overflow)
if pool_timeout is not None:
cfg.set_defaults(database_opts,
pool_timeout=pool_timeout)


def cleanup():
Expand Down Expand Up @@ -620,9 +634,12 @@ def create_engine(sql_connection, sqlite_fk=False):
engine_args["poolclass"] = StaticPool
engine_args["connect_args"] = {'check_same_thread': False}
else:
engine_args['pool_size'] = CONF.database.max_pool_size
if CONF.database.max_pool_size is not None:
engine_args['pool_size'] = CONF.database.max_pool_size
if CONF.database.max_overflow is not None:
engine_args['max_overflow'] = CONF.database.max_overflow
if CONF.database.pool_timeout is not None:
engine_args['pool_timeout'] = CONF.database.pool_timeout

engine = sqlalchemy.create_engine(sql_connection, **engine_args)

Expand Down
2 changes: 2 additions & 0 deletions tests/unit/db/sqlalchemy/test_sqlalchemy.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ def test_session_parameters(self):
max_overflow=50
connection_debug=60
connection_trace=True
pool_timeout=7
""")])
test_utils.CONF(['--config-file', paths[0]])
self.assertEquals(test_utils.CONF.database.connection, 'x://y.z')
Expand All @@ -80,6 +81,7 @@ def test_session_parameters(self):
self.assertEquals(test_utils.CONF.database.max_overflow, 50)
self.assertEquals(test_utils.CONF.database.connection_debug, 60)
self.assertEquals(test_utils.CONF.database.connection_trace, True)
self.assertEquals(test_utils.CONF.database.pool_timeout, 7)


class SessionErrorWrapperTestCase(test_utils.BaseTestCase):
Expand Down

0 comments on commit ebaa578

Please sign in to comment.