diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2023-04-14 10:50:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-14 10:50:50 +0200 |
commit | 7eac8838df029c9dfeac6db149a306ed72c02555 (patch) | |
tree | 81f5ccac5cd9e822b931401a9e648b9024a9711f | |
parent | 33fc09c2a52ff4e0b51ab922cd7cdca9f7924435 (diff) | |
parent | de3df3009bf003f327d35e246d5904d93273e2e9 (diff) |
Merge pull request #8199 from tweag/fix-sqlite-busy-reporting
Fix unnecessary reporting of SQLite busy errors
-rw-r--r-- | src/libstore/sqlite.cc | 9 | ||||
-rw-r--r-- | src/libstore/sqlite.hh | 6 |
2 files changed, 7 insertions, 8 deletions
diff --git a/src/libstore/sqlite.cc b/src/libstore/sqlite.cc index 871f2f3be..df334c23c 100644 --- a/src/libstore/sqlite.cc +++ b/src/libstore/sqlite.cc @@ -239,14 +239,11 @@ SQLiteTxn::~SQLiteTxn() } } -void handleSQLiteBusy(const SQLiteBusy & e) +void handleSQLiteBusy(const SQLiteBusy & e, time_t & nextWarning) { - static std::atomic<time_t> lastWarned{0}; - time_t now = time(0); - - if (now > lastWarned + 10) { - lastWarned = now; + if (now > nextWarning) { + nextWarning = now + 10; logWarning({ .msg = hintfmt(e.what()) }); diff --git a/src/libstore/sqlite.hh b/src/libstore/sqlite.hh index b735838ec..6e14852cb 100644 --- a/src/libstore/sqlite.hh +++ b/src/libstore/sqlite.hh @@ -139,7 +139,7 @@ protected: MakeError(SQLiteBusy, SQLiteError); -void handleSQLiteBusy(const SQLiteBusy & e); +void handleSQLiteBusy(const SQLiteBusy & e, time_t & nextWarning); /** * Convenience function for retrying a SQLite transaction when the @@ -148,11 +148,13 @@ void handleSQLiteBusy(const SQLiteBusy & e); template<typename T, typename F> T retrySQLite(F && fun) { + time_t nextWarning = time(0) + 1; + while (true) { try { return fun(); } catch (SQLiteBusy & e) { - handleSQLiteBusy(e); + handleSQLiteBusy(e, nextWarning); } } } |