We have seen multiple MongoDB test failures with following assert from __wt_rec_update_select():
WT_ASSERT(session, vpack != NULL && vpack->type != WT_CELL_DEL && !vpack->tw.prepare);
Our initial investigations revealed that following scenario can reproduce this assert:
- Commit an update and remove it in single transaction
- Add a prepared update to the same key
- Evict the page which contains that particular key
- Rollback the prepared transaction
- Perform a checkpoint or evict the page
Debugging from GDB suggests that the function __wt_rec_update_select() is unable to properly restore the tombstone and the regular update (from a single transaction) from history store.