Use oslo.db create_engine instead of SQLAlchemy

Change-Id: I327c40bcebe8d40cd515038dcf59a1926486f45e
Closes-Bug: #1589673
This commit is contained in:
Jeremy Liu 2017-03-14 08:43:15 -07:00
parent 8a220595e6
commit 314a204600
9 changed files with 26 additions and 33 deletions

View File

@ -26,7 +26,7 @@ from functionaltests.api.v1.behaviors import secret_behaviors
from functionaltests.api.v1.models import container_models
from functionaltests.api.v1.models import secret_models
from functionaltests.common import config
from sqlalchemy import create_engine
from oslo_db.sqlalchemy import session
# Import and configure logging.
BCONF = barbican_config.CONF
@ -46,7 +46,7 @@ class DBManageTestCase(base.TestCase):
time.sleep(5)
# Setup session for tests to query DB
engine = create_engine(db_url)
engine = session.create_engine(db_url)
self.conn = engine.connect()
def tearDown(self):

View File

@ -16,7 +16,7 @@ import base64
import json
import traceback
import sqlalchemy
from oslo_db.sqlalchemy import session
from sqlalchemy import orm
from sqlalchemy.orm import scoping
@ -32,7 +32,7 @@ class KekRewrap(object):
def __init__(self, conf):
self.dry_run = False
self.db_engine = sqlalchemy.create_engine(conf.sql_connection)
self.db_engine = session.create_engine(conf.sql_connection)
self._session_creator = scoping.scoped_session(
orm.sessionmaker(
bind=self.db_engine,

View File

@ -16,7 +16,7 @@ import base64
import json
import traceback
import sqlalchemy
from oslo_db.sqlalchemy import session
from sqlalchemy import orm
from sqlalchemy.orm import scoping
@ -33,7 +33,7 @@ class KekSignatureMigrator(object):
def __init__(self, db_connection, library_path, login, slot_id):
self.dry_run = False
self.db_engine = sqlalchemy.create_engine(db_connection)
self.db_engine = session.create_engine(db_connection)
self._session_creator = scoping.scoped_session(
orm.sessionmaker(
bind=self.db_engine,

View File

@ -15,7 +15,7 @@
from __future__ import with_statement
from alembic import context
from sqlalchemy import create_engine, pool
from oslo_db.sqlalchemy import session
from barbican.model import models
@ -77,9 +77,8 @@ def run_migrations_online():
and associate a connection with the context.
"""
engine = create_engine(
get_sqlalchemy_url(),
poolclass=pool.NullPool)
engine = session.create_engine(
get_sqlalchemy_url())
connection = engine.connect()
context.configure(
connection=connection,

View File

@ -26,6 +26,8 @@ import sys
import time
import uuid
from oslo_db import exception as db_exc
from oslo_db.sqlalchemy import session
from oslo_utils import timeutils
import sqlalchemy
from sqlalchemy import func as sa_func
@ -170,14 +172,9 @@ def _get_engine(engine):
# connection_dict = sqlalchemy.engine.url.make_url(_CONNECTION)
engine_args = {
'pool_recycle': CONF.sql_idle_timeout,
'echo': False,
'convert_unicode': True}
if CONF.sql_pool_class:
engine_args['poolclass'] = utils.get_class_for(
'sqlalchemy.pool', CONF.sql_pool_class)
'idle_timeout': CONF.sql_idle_timeout}
if CONF.sql_pool_size:
engine_args['pool_size'] = CONF.sql_pool_size
engine_args['max_pool_size'] = CONF.sql_pool_size
if CONF.sql_pool_max_overflow:
engine_args['max_overflow'] = CONF.sql_pool_max_overflow
@ -233,7 +230,7 @@ def _create_engine(connection, **engine_args):
LOG.debug('Sql connection: please check "sql_connection" property in '
'barbican configuration file; Args: %s', engine_args)
engine = sqlalchemy.create_engine(connection, **engine_args)
engine = session.create_engine(connection, **engine_args)
# TODO(jfwood): if 'mysql' in connection_dict.drivername:
# TODO(jfwood): sqlalchemy.event.listen(_ENGINE, 'checkout',
@ -408,9 +405,9 @@ class BaseRepo(object):
try:
LOG.debug("Saving entity...")
entity.save(session=session)
except sqlalchemy.exc.IntegrityError as e:
except db_exc.DBDuplicateEntry as e:
LOG.exception(u._LE('Problem saving entity for create'))
error_msg = re.sub('[()]', '', str(e.orig.args))
error_msg = re.sub('[()]', '', str(e.args))
raise exception.ConstraintCheck(error=error_msg)
LOG.debug('Elapsed repo '
@ -1432,7 +1429,7 @@ class ContainerConsumerRepo(BaseRepo):
container.updated_at = timeutils.utcnow()
container.consumers.append(new_consumer)
container.save(session=session)
except sqlalchemy.exc.IntegrityError:
except db_exc.DBDuplicateEntry:
session.rollback() # We know consumer already exists.
# This operation is idempotent, so log this and move on

View File

@ -17,6 +17,7 @@ from barbican.model import clean
from barbican.model import models
from barbican.model import repositories as repos
from barbican.tests import database_utils as utils
from oslo_db import exception as db_exc
from sqlalchemy.exc import IntegrityError
import datetime
@ -434,4 +435,4 @@ class WhenTestingDBCleanUpCommand(utils.RepositoryTestCase):
secret.deleted = True
secret_metadatum.deleted = False
self.assertRaises(IntegrityError, clean.cleanup_all)
self.assertRaises(db_exc.DBReferenceError, clean.cleanup_all)

View File

@ -11,6 +11,7 @@
# under the License.
import fixtures
from oslo_db.sqlalchemy import session
from oslo_utils import timeutils
import sqlalchemy as sa
@ -25,7 +26,7 @@ class SessionQueryFixture(fixtures.Fixture):
"""
def _setUp(self):
self._engine = sa.create_engine('sqlite:///:memory:')
self._engine = session.create_engine('sqlite:///:memory:')
self.Session = sa.orm.sessionmaker(bind=self._engine)
self.external_id = 'EXTERNAL_ID'
models.BASE.metadata.create_all(self._engine)

View File

@ -259,11 +259,8 @@ class WhenTestingGetEnginePrivate(utils.BaseTestCase):
engine.connect.assert_called_once_with()
mock_create_engine.assert_called_once_with(
'connection',
pool_recycle=3600,
convert_unicode=True,
echo=False,
poolclass=sqlalchemy.pool.QueuePool,
pool_size=repositories.CONF.sql_pool_size,
idle_timeout=3600,
max_pool_size=repositories.CONF.sql_pool_size,
max_overflow=repositories.CONF.sql_pool_max_overflow
)
@ -289,11 +286,8 @@ class WhenTestingGetEnginePrivate(utils.BaseTestCase):
engine.connect.assert_called_once_with()
mock_create_engine.assert_called_once_with(
'connection',
pool_recycle=3600,
convert_unicode=True,
echo=False,
poolclass=sqlalchemy.pool.QueuePool,
pool_size=22,
idle_timeout=3600,
max_pool_size=22,
max_overflow=11
)

View File

@ -9,6 +9,7 @@ eventlet!=0.18.3,>=0.18.2 # MIT
jsonschema!=2.5.0,<3.0.0,>=2.0.0 # MIT
oslo.config>=3.22.0 # Apache-2.0
oslo.context>=2.12.0 # Apache-2.0
oslo.db>=4.19.0 # Apache-2.0
oslo.i18n>=2.1.0 # Apache-2.0
oslo.messaging>=5.19.0 # Apache-2.0
oslo.middleware>=3.10.0 # Apache-2.0