DB locks shouldn't squelch errors

Change-Id: Icca4718a1cea1d21c1e858e9048552946a9f739a
This commit is contained in:
Tim Burke 2022-11-29 09:36:52 -08:00
parent a1939cba03
commit 861d13c513
2 changed files with 26 additions and 13 deletions

View File

@ -581,8 +581,7 @@ class DatabaseBroker(object):
conn.execute('BEGIN IMMEDIATE') conn.execute('BEGIN IMMEDIATE')
try: try:
yield True yield True
except (Exception, Timeout): finally:
pass
try: try:
conn.execute('ROLLBACK') conn.execute('ROLLBACK')
conn.isolation_level = orig_isolation_level conn.isolation_level = orig_isolation_level

View File

@ -914,12 +914,26 @@ class TestDatabaseBroker(unittest.TestCase):
pass pass
with broker.lock(): with broker.lock():
pass pass
with self.assertRaises(RuntimeError) as raised, broker.lock():
raise RuntimeError('boom!')
self.assertEqual(raised.exception.args[0], 'boom!')
broker2 = DatabaseBroker(os.path.join(self.testdir, '1.db'), broker2 = DatabaseBroker(os.path.join(self.testdir, '1.db'),
timeout=.1) timeout=.1)
broker2._initialize = stub broker2._initialize = stub
with broker.lock(): with broker.lock():
with self.assertRaises(LockTimeout) as raised, \ # broker2 raises the timeout
broker2.lock(): with self.assertRaises(LockTimeout) as raised:
with broker2.lock():
pass
self.assertEqual(str(raised.exception),
'0.1 seconds: %s' % broker.db_file)
# and the timeout bubbles up out of broker.lock()
with self.assertRaises(LockTimeout) as raised:
with broker.lock():
with broker2.lock():
pass pass
self.assertEqual(str(raised.exception), self.assertEqual(str(raised.exception),
'0.1 seconds: %s' % broker.db_file) '0.1 seconds: %s' % broker.db_file)