sqlcache: also catch malformed database error
This is apparently another way for sqlite to fail at concurrency.
--- a/hgext3rd/evolve/obsdiscovery.py Mon Aug 27 12:40:41 2018 +0200
+++ b/hgext3rd/evolve/obsdiscovery.py Mon Aug 27 12:40:47 2018 +0200
@@ -442,7 +442,7 @@
if obshash is not None:
value = obshash[0]
self._data[rangeid] = value
- except sqlite3.OperationalError:
+ except (sqlite3.DatabaseError, sqlite3.OperationalError):
# something is wrong with the sqlite db
# Since this is a cache, we ignore it.
if '_con' in vars(self):
@@ -494,7 +494,7 @@
con.executemany(_delete, ranges)
for r in ranges:
self._data.pop(r, None)
- except sqlite3.OperationalError as exc:
+ except (sqlite3.DatabaseError, sqlite3.OperationalError) as exc:
repo.ui.log('evoext-cache', 'error while updating obshashrange cache: %s' % exc)
del self._updating
return
@@ -589,7 +589,7 @@
return
try:
return self._trysave(repo)
- except (sqlite3.OperationalError, sqlite3.IntegrityError) as exc:
+ except (sqlite3.DatabaseError, sqlite3.OperationalError, sqlite3.IntegrityError) as exc:
# Catch error that may arise under stress
#
# operational error catch read-only and locked database
--- a/hgext3rd/evolve/stablerangecache.py Mon Aug 27 12:40:41 2018 +0200
+++ b/hgext3rd/evolve/stablerangecache.py Mon Aug 27 12:40:47 2018 +0200
@@ -183,7 +183,7 @@
value = self._con.execute(_querysubranges, rangeid).fetchall()
# in memory caching of the value
cache[rangeid] = value
- except sqlite3.OperationalError:
+ except (sqlite3.DatabaseError, sqlite3.OperationalError):
# something is wrong with the sqlite db
# Since this is a cache, we ignore it.
if '_con' in vars(self):
@@ -235,7 +235,7 @@
return
try:
return self._trysave(repo)
- except (sqlite3.OperationalError, sqlite3.IntegrityError) as exc:
+ except (sqlite3.DatabaseError, sqlite3.OperationalError, sqlite3.IntegrityError) as exc:
# Catch error that may arise under stress
#
# operational error catch read-only and locked database