While testing SERVER-41016, which converts updates into modifications, some test failures were found and investigated.
The problem is that while MongoDB performs operations at snapshot isolation (so each successful update is guaranteed to read the immediately previous version), it does not always assign timestamps in order. In particular, metadata updates to the _mdb_catalog table are sometimes assigned synthetic timestamps for operations without entries in the oplog. Some of these updates satisfy the conditions for conversion to modifications (the underlying document is larger than 1KB and the changes are less than 10% of the document size).
In this situation, when applying the modifications, WiredTiger should use apply all previous modifications until it finds a complete copy of the document. Once a modify is identified as the most recent visible version for a value WT should not apply normal visibility rules to the prior versions – they were visible when the modify was performed, so should be included in the read.
- causes
-
WT-4840 WT_CURSOR.modify must require explicit, snapshot-isolation transaction
- Closed
- is depended on by
-
SERVER-41016 Calculate deltas for updates to large documents
- Closed
- related to
-
WT-5070 Test that using WT_CURSOR::modify works with all visibility scenarios
- Backlog