Shortly, no issue.
LMDB provides MVCC via COW, therefore any read transaction see the constant
snapshot of DB, which is correspond to last committed write transaction at
the time when reading was started.
Any further write transactions will create the new snapshots, which will be
visible for further reading, but not for read transactions that was started
2018-08-16 13:03 GMT+03:00 William Brown <william(a)blackhats.net.au>:
While doing some integration testing of LMDB I noticed that there may
be an issue with out of order transaction handling.
The scenario is:
Open Read TXN A
Open Write TXN X, and change values of the DB
Open Read TXN B
Open Write TXN Y, and change values of the DB
Open Read TXN C
Abort/Close TXN B.
At this point, because of the page touch between A -> B and B -> C, B
now believes that the pages of A are the "last time" they are available
as they were all subsequently copied for TXN C. The pages of A are then
added to the freelists when B closes. When TXN A is read from the data
may have been altered due to future writes as LMDB attempts to use
previously allocated pages first.
This situation is more likely to arise on large batch writes, but could
manifest with smaller series of writes. This would be a silent issue,
as the over-written pages may be valid, and could cause data to
"silently vanish" inside of the read transaction A leading to
I hope that this report helps you to diagnose and resolve the issue.