Closed
Description
I see this in the relstorage tests. That means the underlying database connections leak.
Here's where a storage is allocated by calling new_instance()
:
File "//relstorage/src/relstorage/tests/blob/testblob.py", line 146, in testUndoWithoutPreviousVersion
database.undo(database.undoLog(0, 1)[0]['id'])
File "//lib/python3.7/site-packages/ZODB/DB.py", line 997, in undo
self.undoMultiple([id], txn)
File "//lib/python3.7/site-packages/ZODB/DB.py", line 978, in undoMultiple
txn.join(TransactionalUndo(self, ids))
File "//lib/python3.7/site-packages/ZODB/DB.py", line 1060, in __init__
db._mvcc_storage, 'undo_instance', db._mvcc_storage.new_instance)()
The TransactionalUndo
object never closes the new storage.
RelStorage could potentially work around this (e.g., implement a 'undo_instance' method that returns a special storage wrapper that closes itself in tpc_finish
and tpc_abort
), but it seems like the more general solution would be for TransactionalUndo
to close the storage it opened in its implementation of those methods.