Merge "Use enginefacade instead of db_session"

This commit is contained in:
Jenkins 2016-11-24 15:23:52 +00:00 committed by Gerrit Code Review
commit 19133101e1
1 changed files with 20 additions and 16 deletions

View File

@ -17,7 +17,7 @@ import sys
from oslo_config import cfg
from oslo_db import api as oslo_db_api
from oslo_db.sqlalchemy import session as db_session
from oslo_db.sqlalchemy import enginefacade
from oslo_db.sqlalchemy import utils
from oslo_log import log as logging
from oslo_serialization import jsonutils
@ -49,21 +49,31 @@ CONF.import_opt('max_events_per_stack', 'heat.common.config')
CONF.import_group('profiler', 'heat.common.config')
_facade = None
db_context = enginefacade.transaction_context()
LOG = logging.getLogger(__name__)
# TODO(sbaker): fix tests so that sqlite_fk=True can be passed to configure
db_context.configure()
def get_facade():
global _facade
if _facade is None:
if not _facade:
_facade = db_session.EngineFacade.from_config(CONF)
# FIXME: get_facade() is called by the test suite startup,
# but will not be called normally for API calls.
# osprofiler / oslo_db / enginefacade currently don't have hooks
# to talk to each other, however one needs to be added to oslo.db
# to allow access to the Engine once constructed.
db_context.configure(**CONF.database)
if CONF.profiler.enabled:
if CONF.profiler.trace_sqlalchemy:
osprofiler.sqlalchemy.add_tracing(sqlalchemy,
_facade.get_engine(),
"db")
_facade = db_context.get_legacy_facade()
return _facade
@ -668,8 +678,7 @@ def stack_delete(context, stack_id):
@oslo_db_api.wrap_db_retry(max_retries=3, retry_on_deadlock=True,
retry_interval=0.5, inc_retry_interval=True)
def stack_lock_create(context, stack_id, engine_id):
session = get_session()
with session.begin():
with db_context.writer.independent.using(context) as session:
lock = session.query(models.StackLock).get(stack_id)
if lock is not None:
return lock.engine_id
@ -677,8 +686,7 @@ def stack_lock_create(context, stack_id, engine_id):
def stack_lock_get_engine_id(context, stack_id):
session = get_session()
with session.begin():
with db_context.reader.independent.using(context) as session:
lock = session.query(models.StackLock).get(stack_id)
if lock is not None:
return lock.engine_id
@ -701,8 +709,7 @@ def persist_state_and_release_lock(context, stack_id, engine_id, values):
def stack_lock_steal(context, stack_id, old_engine_id, new_engine_id):
session = get_session()
with session.begin():
with db_context.writer.independent.using(context) as session:
lock = session.query(models.StackLock).get(stack_id)
rows_affected = session.query(
models.StackLock
@ -713,8 +720,7 @@ def stack_lock_steal(context, stack_id, old_engine_id, new_engine_id):
def stack_lock_release(context, stack_id, engine_id):
session = get_session()
with session.begin():
with db_context.writer.independent.using(context) as session:
rows_affected = session.query(
models.StackLock
).filter_by(stack_id=stack_id, engine_id=engine_id).delete()
@ -1364,8 +1370,7 @@ def db_encrypt_parameters_and_properties(ctxt, encryption_key, batch_size=50,
:return: list of exceptions encountered during encryption
"""
from heat.engine import template
session = get_session()
with session.begin():
with db_context.writer.independent.using(ctxt) as session:
query = session.query(models.RawTemplate)
excs = []
for raw_template in _get_batch(
@ -1465,9 +1470,8 @@ def db_decrypt_parameters_and_properties(ctxt, encryption_key, batch_size=50,
resource begins or ends
:return: list of exceptions encountered during decryption
"""
session = get_session()
excs = []
with session.begin():
with db_context.writer.independent.using(ctxt) as session:
query = session.query(models.RawTemplate)
for raw_template in _get_batch(
session=session, ctxt=ctxt, query=query,