summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-06-05 22:01:58 +0000
committerGerrit Code Review <review@openstack.org>2014-06-05 22:01:58 +0000
commit0ecd6a63a80b3d8c66bb0411b12e1c55ea73ca98 (patch)
tree8a515d71df4cc3b0f8cb84440f5931505c5a6c2b
parentad10af347c6530e4cb33bf12ca80a39f5f34d214 (diff)
parentfad6e5c2302811e8721123fa8e7f43a5bdecb068 (diff)
downloadoslo-db-0ecd6a63a80b3d8c66bb0411b12e1c55ea73ca98.tar.gz
Merge "Fix usage of oslo.config"
-rw-r--r--doc/source/usage.rst8
-rw-r--r--oslo/db/api.py27
-rw-r--r--oslo/db/options.py28
-rw-r--r--oslo/db/sqlalchemy/session.py10
-rw-r--r--tests/sqlalchemy/test_options.py15
-rw-r--r--tests/sqlalchemy/test_sqlalchemy.py3
-rw-r--r--tests/test_api.py8
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):