From 963b1a97c97ba6c1e53048526d0fdf1925c17c91 Mon Sep 17 00:00:00 2001 From: Radko Krkos Date: Fri, 12 Jul 2019 12:11:01 +0200 Subject: [PATCH] Fix: Use RetryingQuery where possible, also in Hawat. * This complements ed74734f719df027fd1ea7600055c7b5cfdfd081 where the RetryingQuery was introduced to make SQLAlchemy to retry the intended operation on DB failure. This should be asserted in a few more places to be actually used all the time. (Redmine issue: #4569) --- lib/hawat/db.py | 3 ++- lib/mentat/datatype/test_sqldb.py | 3 ++- lib/mentat/services/sqlstorage.py | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/hawat/db.py b/lib/hawat/db.py index 879455d..aa8f0f1 100644 --- a/lib/hawat/db.py +++ b/lib/hawat/db.py @@ -57,7 +57,8 @@ def db_get(): if not _DB: _DB = flask_sqlalchemy.SQLAlchemy( metadata = mentat.datatype.sqldb.MODEL.metadata, - model_class = mentat.datatype.sqldb.MODEL + model_class = mentat.datatype.sqldb.MODEL, + query_class = mentat.services.sqlstorage.RetryingQuery ) mentat.services.sqlstorage.set_manager(StorageServiceManager()) diff --git a/lib/mentat/datatype/test_sqldb.py b/lib/mentat/datatype/test_sqldb.py index 25dbbaf..6325b7d 100644 --- a/lib/mentat/datatype/test_sqldb.py +++ b/lib/mentat/datatype/test_sqldb.py @@ -27,6 +27,7 @@ import sqlalchemy from mentat.datatype.sqldb import MODEL, UserModel, GroupModel, NetworkModel,\ FilterModel, SettingsReportingModel, EventStatisticsModel, EventReportModel,\ ItemChangeLogModel, jsondiff, usermodel_from_typeddict +from mentat.services.sqlstorage import RetryingQuery #------------------------------------------------------------------------------- @@ -50,7 +51,7 @@ class TestMentatDatatypeSqldb(unittest.TestCase): def setUp(self): self.dbengine = sqlalchemy.create_engine("postgresql://mentat:mentat@localhost/mentat_utest", echo = self.verbose) self.sessionmaker = sqlalchemy.orm.sessionmaker(bind = self.dbengine) - self.session = self.sessionmaker() + self.session = self.sessionmaker(query_cls = RetryingQuery) MODEL.metadata.drop_all(self.dbengine) MODEL.metadata.create_all(self.dbengine) diff --git a/lib/mentat/services/sqlstorage.py b/lib/mentat/services/sqlstorage.py index 40320c6..d1e4a07 100644 --- a/lib/mentat/services/sqlstorage.py +++ b/lib/mentat/services/sqlstorage.py @@ -91,7 +91,7 @@ class StorageService: """ if self.session: self.session.close() - self.session = self.sessionmaker() + self.session = self.sessionmaker(query_cls = RetryingQuery) return self.session def database_create(self): -- 2.10.0.windows.1