# HG changeset patch # User Pierre-Yves David # Date 1535366447 -7200 # Node ID 6fcda453b31740d5b4a3006f7d7f9d7c925dba73 # Parent 434398b37e16546cbdd88ba535b021527dcb4bd3 sqlcache: also catch malformed database error This is apparently another way for sqlite to fail at concurrency. diff -r 434398b37e16 -r 6fcda453b317 hgext3rd/evolve/obsdiscovery.py --- 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 diff -r 434398b37e16 -r 6fcda453b317 hgext3rd/evolve/stablerangecache.py --- 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