summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBoris Pavlovic <boris@pavlovic.me>2012-12-28 15:21:08 +0400
committerBoris Pavlovic <boris@pavlovic.me>2012-12-28 15:21:08 +0400
commit4d16f2d037acebc986d32a8f2437824dab071fc3 (patch)
treede242bb3fa2d982c91bd17760f62f0855a28377f
parentab135433464865f6612f4b543157d62c05d2fb13 (diff)
downloadnova-4d16f2d037acebc986d32a8f2437824dab071fc3.tar.gz
nova-4d16f2d037acebc986d32a8f2437824dab071fc3.tar.xz
nova-4d16f2d037acebc986d32a8f2437824dab071fc3.zip
Remove session.flush() and session.query() monkey patching
Use custom Session class to avoid monkey patching of SqlAlchemy Session instance. blueprint db-session-cleanup Change-Id: I7d40c20e585782403556f3587141805c197bfa64
-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 3e562e32a..29d77c2a0 100644
--- a/nova/virt/baremetal/db/sqlalchemy/session.py
+++ b/nova/virt/baremetal/db/sqlalchemy/session.py
@@ -47,7 +47,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