Wietse Venema writes: > As written in the bug report the assertion also failed with > mdb_map_size set to an insanely large value (half a billion) in > which case the map size never changes.
Yes... > But, it is good to know that the cursor is invalidated by both map > size changes and transactions that change the database. No, that's the wrong idea. This is a case of a user error breaking snapshot isolation: Ending the transaction invalidates its cursors, and you have to end the transaction in these two cases (modifying when using MDB_NOLOCK, or resizing). Those are "user errors" because that made it simple to code those features. We could add code to make them non-errors on in common cases and on common hosts, but I'm not sure if that's worth the trouble. > I can confirm that with LMDB-0.9.10 + ITS#7756 patch, the assertion > failure goes away when I close the cursor (and its read transaction) > before changing the map or the database, and restore the cursor > afterwards. I guess this got broken when things were changed to use > external locks in order to avoid world-writable lockfiles. Yes. Ending the read-only transaction and starting a new one means you are no longer seeing the same snapshot, though. So I hope the reason you couldn't use single transaction which I suggested previously, was that the reader transaction needed to keep seeing the same snapshot. -- Hallvard
