Files
neutron-lib/neutron_lib/db/api.py
Kevin Benton 72a2e9df96 Add flush_on_subtransaction=True to engine config
By default, the new enginefacade doesn't emulate the same
autoflush behavior we had on exits of session context managers
with the old style. As of olso.db 4.18, we have an option to
get this same behavior. This patch implements it in our db.api
to help with the adoption of the new enginefacade by providing
the same flush semantics.

Related-Bug: #1664643
Partially-Implements: blueprint enginefacade-switch
Change-Id: I71e274d0f0199896f28daae6db71241d9b43a2f3
2017-04-04 10:55:14 +00:00

55 lines
1.5 KiB
Python

# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from oslo_concurrency import lockutils
from oslo_db.sqlalchemy import enginefacade
_synchronized = lockutils.synchronized_with_prefix("neutron-")
_CTX_MANAGER = None
@_synchronized("context-manager")
def _create_context_manager():
global _CTX_MANAGER
if _CTX_MANAGER is None:
_CTX_MANAGER = enginefacade.transaction_context()
_CTX_MANAGER.configure(sqlite_fk=True, flush_on_subtransaction=True)
return _CTX_MANAGER
def get_context_manager():
"""Transaction Context Manager accessor.
:returns: The transaction context manager.
"""
if _CTX_MANAGER is None:
return _create_context_manager()
return _CTX_MANAGER
def get_reader_session():
"""Helper to get reader session.
:returns: The reader session.
"""
return get_context_manager().reader.get_sessionmaker()()
def get_writer_session():
"""Helper to get writer session.
:returns: The writer session.
"""
return get_context_manager().writer.get_sessionmaker()()