h.b.furuseth@usit.uio.no wrote:
I wrote:
Can't use a DBI from an aborted child txn, unlike aborted main txn:
(...) Well, closing the DBI in mdb_txn_abort() caused problems. A fix in the opposite direction is easy, if we want DBIs to work that way: mdb_env_open() can open the DBI in any parent txns too.
To get more consistent behavior, if that wasn't clear: Any parent txn will receive the DBI independently of commit/abort, just like the MDB_env. Future children of a preexisting txn still differ, which is probably for the best. Changing that would take locking.
After much discussion, this part has been reverted. The rationale is simple: nothing created inside a TXN may be visible outside the TXN until the TXN successfully commits. On an abort or failed commit, all DBIs opened in the TXN are automatically closed, because technically they never existed.