diff options
author | Jenkins <jenkins@review.openstack.org> | 2014-06-05 22:01:58 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2014-06-05 22:01:58 +0000 |
commit | 0ecd6a63a80b3d8c66bb0411b12e1c55ea73ca98 (patch) | |
tree | 8a515d71df4cc3b0f8cb84440f5931505c5a6c2b | |
parent | ad10af347c6530e4cb33bf12ca80a39f5f34d214 (diff) | |
parent | fad6e5c2302811e8721123fa8e7f43a5bdecb068 (diff) | |
download | oslo-db-0ecd6a63a80b3d8c66bb0411b12e1c55ea73ca98.tar.gz |
Merge "Fix usage of oslo.config"
-rw-r--r-- | doc/source/usage.rst | 8 | ||||
-rw-r--r-- | oslo/db/api.py | 27 | ||||
-rw-r--r-- | oslo/db/options.py | 28 | ||||
-rw-r--r-- | oslo/db/sqlalchemy/session.py | 10 | ||||
-rw-r--r-- | tests/sqlalchemy/test_options.py | 15 | ||||
-rw-r--r-- | tests/sqlalchemy/test_sqlalchemy.py | 3 | ||||
-rw-r--r-- | tests/test_api.py | 8 |
7 files changed, 69 insertions, 30 deletions
diff --git a/doc/source/usage.rst b/doc/source/usage.rst index be9ff69..0e5a2f2 100644 --- a/doc/source/usage.rst +++ b/doc/source/usage.rst @@ -8,6 +8,7 @@ To use oslo.db in a project:: .. code:: python + from oslo.config import cfg from oslo.db.sqlalchemy import session as db_session _FACADE = None @@ -15,8 +16,7 @@ To use oslo.db in a project:: def _create_facade_lazily(): global _FACADE if _FACADE is None: - _FACADE = db_session.EngineFacade.from_config( - CONF.database.connection, CONF) + _FACADE = db_session.EngineFacade.from_config(cfg.CONF) return _FACADE def get_engine(): @@ -48,12 +48,10 @@ To use oslo.db in a project:: from oslo.config import cfg from oslo.db import api as db_api - CONF = cfg.CONF - CONF.import_opt('backend', 'oslo.db.options', group='database') _BACKEND_MAPPING = {'sqlalchemy': 'project.db.sqlalchemy.api'} - IMPL = db_api.DBAPI(CONF.database.backend, backend_mapping=_BACKEND_MAPPING) + IMPL = db_api.DBAPI.from_config(cfg.CONF, backend_mapping=_BACKEND_MAPPING) def get_engine(): return IMPL.get_engine() diff --git a/oslo/db/api.py b/oslo/db/api.py index a2a7d0b..34f7c62 100644 --- a/oslo/db/api.py +++ b/oslo/db/api.py @@ -28,6 +28,7 @@ import time from oslo.db import exception from oslo.db.openstack.common.gettextutils import _LE from oslo.db.openstack.common import importutils +from oslo.db import options LOG = logging.getLogger(__name__) @@ -160,3 +161,29 @@ class DBAPI(object): max_retry_interval=self.max_retry_interval)(attr) return attr + + @classmethod + def from_config(cls, conf, backend_mapping=None, lazy=False): + """Initialize DBAPI instance given a config instance. + + :param conf: oslo.config config instance + :type conf: oslo.config.cfg.ConfigOpts + + :param backend_mapping: backend name -> module/class to load mapping + :type backend_mapping: dict + + :param lazy: load the DB backend lazily on the first DB API method call + :type lazy: bool + + """ + + conf.register_opts(options.database_opts, 'database') + + return cls(backend_name=conf.database.backend, + backend_mapping=backend_mapping, + lazy=lazy, + use_db_reconnect=conf.database.use_db_reconnect, + retry_interval=conf.database.db_retry_interval, + inc_retry_interval=conf.database.db_inc_retry_interval, + max_retry_interval=conf.database.db_max_retry_interval, + max_retries=conf.database.db_max_retries) diff --git a/oslo/db/options.py b/oslo/db/options.py index 126ec49..19058d0 100644 --- a/oslo/db/options.py +++ b/oslo/db/options.py @@ -130,26 +130,24 @@ database_opts = [ 'count.'), ] -CONF = cfg.CONF -CONF.register_opts(database_opts, 'database') - -def set_defaults(sql_connection, sqlite_db, max_pool_size=None, - max_overflow=None, pool_timeout=None): +def set_defaults(conf, connection=None, sqlite_db=None, + max_pool_size=None, max_overflow=None, + pool_timeout=None): """Set defaults for configuration variables.""" - cfg.set_defaults(database_opts, - connection=sql_connection, - sqlite_db=sqlite_db) - # Update the QueuePool defaults + + conf.register_opts(database_opts, group='database') + + if connection is not None: + conf.set_default('connection', connection, group='database') + if sqlite_db is not None: + conf.set_default('sqlite_db', sqlite_db, group='database') if max_pool_size is not None: - cfg.set_defaults(database_opts, - max_pool_size=max_pool_size) + conf.set_default('max_pool_size', max_pool_size, group='database') if max_overflow is not None: - cfg.set_defaults(database_opts, - max_overflow=max_overflow) + conf.set_default('max_overflow', max_overflow, group='database') if pool_timeout is not None: - cfg.set_defaults(database_opts, - pool_timeout=pool_timeout) + conf.set_default('pool_timeout', pool_timeout, group='database') def list_opts(): diff --git a/oslo/db/sqlalchemy/session.py b/oslo/db/sqlalchemy/session.py index 661fba6..a47f65b 100644 --- a/oslo/db/sqlalchemy/session.py +++ b/oslo/db/sqlalchemy/session.py @@ -291,6 +291,7 @@ from sqlalchemy.pool import NullPool, StaticPool from sqlalchemy.sql.expression import literal_column from oslo.db import exception +from oslo.db import options from oslo.db.openstack.common.gettextutils import _LE, _LW from oslo.db.openstack.common import timeutils @@ -877,13 +878,10 @@ class EngineFacade(object): return self._session_maker(**kwargs) @classmethod - def from_config(cls, connection_string, conf, + def from_config(cls, conf, sqlite_fk=False, autocommit=True, expire_on_commit=False): """Initialize EngineFacade using oslo.config config instance options. - :param connection_string: SQLAlchemy connection string - :type connection_string: string - :param conf: oslo.config config instance :type conf: oslo.config.cfg.ConfigOpts @@ -898,7 +896,9 @@ class EngineFacade(object): """ - return cls(sql_connection=connection_string, + conf.register_opts(options.database_opts, 'database') + + return cls(sql_connection=conf.database.connection, sqlite_fk=sqlite_fk, autocommit=autocommit, expire_on_commit=expire_on_commit, diff --git a/tests/sqlalchemy/test_options.py b/tests/sqlalchemy/test_options.py index 4870ed8..585b67a 100644 --- a/tests/sqlalchemy/test_options.py +++ b/tests/sqlalchemy/test_options.py @@ -14,19 +14,17 @@ from oslo.config import cfg from oslo.db.openstack.common.fixture import config +from oslo.db import options from tests import utils as test_utils -cfg.CONF.import_opt('connection', 'oslo.db.options', - group='database') - - class DbApiOptionsTestCase(test_utils.BaseTestCase): def setUp(self): super(DbApiOptionsTestCase, self).setUp() config_fixture = self.useFixture(config.Config()) self.conf = config_fixture.conf + self.conf.register_opts(options.database_opts, group='database') self.config = config_fixture.config def test_deprecated_session_parameters(self): @@ -118,3 +116,12 @@ pool_timeout=7 self.conf(['--config-file', path]) self.assertEqual(self.conf.database.backend, 'test_123') + + def test_set_defaults(self): + conf = cfg.ConfigOpts() + + options.set_defaults(conf, + connection='sqlite:///:memory:') + + self.assertTrue(len(conf.database.items()) > 1) + self.assertEqual('sqlite:///:memory:', conf.database.connection) diff --git a/tests/sqlalchemy/test_sqlalchemy.py b/tests/sqlalchemy/test_sqlalchemy.py index 9cda622..70a2388 100644 --- a/tests/sqlalchemy/test_sqlalchemy.py +++ b/tests/sqlalchemy/test_sqlalchemy.py @@ -352,13 +352,14 @@ class EngineFacadeTestCase(oslo_test.BaseTestCase): @mock.patch('oslo.db.sqlalchemy.session.create_engine') def test_creation_from_config(self, create_engine, get_maker): conf = mock.MagicMock() + conf.database.connection = 'sqlite:///:memory:' conf.database.items.return_value = [ ('connection_debug', 100), ('max_pool_size', 10), ('mysql_sql_mode', 'TRADITIONAL'), ] - session.EngineFacade.from_config('sqlite:///:memory:', conf, + session.EngineFacade.from_config(conf, autocommit=False, expire_on_commit=True) diff --git a/tests/test_api.py b/tests/test_api.py index 5534757..98c618f 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -16,6 +16,7 @@ """Unit tests for DB API.""" import mock +from oslo.config import cfg from oslo.db import api from oslo.db import exception @@ -78,6 +79,13 @@ class DBAPITestCase(test_utils.BaseTestCase): dbapi.api_class_call1(1, 'abc') self.assertIsNotNone(dbapi._backend) + def test_dbapi_from_config(self): + conf = cfg.ConfigOpts() + + dbapi = api.DBAPI.from_config(conf, + backend_mapping={'sqlalchemy': __name__}) + self.assertIsNotNone(dbapi._backend) + class DBReconnectTestCase(DBAPITestCase): def setUp(self): |