summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/db/sqlalchemy/session.py20
-rw-r--r--nova/virt/baremetal/db/sqlalchemy/session.py1
2 files changed, 12 insertions, 9 deletions
diff --git a/nova/db/sqlalchemy/session.py b/nova/db/sqlalchemy/session.py
index b128ccc23..ae8fec32d 100644
--- a/nova/db/sqlalchemy/session.py
+++ b/nova/db/sqlalchemy/session.py
@@ -306,7 +306,6 @@ def get_session(autocommit=True, expire_on_commit=False):
_MAKER = get_maker(engine, autocommit, expire_on_commit)
session = _MAKER()
- session = wrap_session(session)
return session
@@ -388,13 +387,6 @@ def wrap_db_error(f):
return _wrap
-def wrap_session(session):
- """Return a session whose exceptions are wrapped."""
- session.query = wrap_db_error(session.query)
- session.flush = wrap_db_error(session.flush)
- return session
-
-
def get_engine():
"""Return a SQLAlchemy engine."""
global _ENGINE
@@ -548,9 +540,21 @@ class Query(sqlalchemy.orm.query.Query):
synchronize_session=synchronize_session)
+class Session(sqlalchemy.orm.session.Session):
+ """Custom Session class to avoid SqlAlchemy Session monkey patching"""
+ @wrap_db_error
+ def query(self, *args, **kwargs):
+ return super(Session, self).query(*args, **kwargs)
+
+ @wrap_db_error
+ def flush(self, *args, **kwargs):
+ return super(Session, self).flush(*args, **kwargs)
+
+
def get_maker(engine, autocommit=True, expire_on_commit=False):
"""Return a SQLAlchemy sessionmaker using the given engine."""
return sqlalchemy.orm.sessionmaker(bind=engine,
+ class_=Session,
autocommit=autocommit,
expire_on_commit=expire_on_commit,
query_cls=Query)
diff --git a/nova/virt/baremetal/db/sqlalchemy/session.py b/nova/virt/baremetal/db/sqlalchemy/session.py
index 14013669d..d6e2a533d 100644
--- a/nova/virt/baremetal/db/sqlalchemy/session.py
+++ b/nova/virt/baremetal/db/sqlalchemy/session.py
@@ -52,7 +52,6 @@ def get_session(autocommit=True, expire_on_commit=False):
_MAKER = nova_session.get_maker(engine, autocommit, expire_on_commit)
session = _MAKER()
- session = nova_session.wrap_session(session)
return session