diff options
-rw-r--r-- | nova/db/sqlalchemy/session.py | 20 | ||||
-rw-r--r-- | nova/virt/baremetal/db/sqlalchemy/session.py | 1 |
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 |