There is an assertion when we have just finished evicting a page that we have seen fire once in testing:
2018-05-30T23:21:40.880+0000 E STORAGE [thread17] WiredTiger error (0) [1527722500:880252][39746:0x3fff9942ee30], file:collection-31--7788036076520929582.wt, eviction-server: __evict_review, 670: __wt_page_is_modified(page) || __wt_txn_visible_all(session, page->modify->rec_max_txn, WT_TIMESTAMP_NULL(&page->modify->rec_max_timestamp)) 2018-05-30T23:21:40.880+0000 E STORAGE [thread17] WiredTiger error (0) [1527722500:880396][39746:0x3fff9942ee30], file:collection-31--7788036076520929582.wt, eviction-server: aborting WiredTiger library
The comment describing the assertion is:
* If the page is clean, assert that reconciliation * was configured for a lookaside table, or it's not a durable object * (currently the lookaside table), or all page updates were globally * visible.
Which doesn't match the actual assertion:
WT_ASSERT(session, __wt_page_is_modified(page) || __wt_txn_visible_all(session, page->modify->rec_max_txn, WT_TIMESTAMP_NULL(&page->modify->rec_max_timestamp)));
I believe we should add in a check for lookaside eviction here:
WT_ASSERT(session, __wt_page_is_modified(page) || LF_ISSET(WT_REC_LOOKASIDE) || __wt_txn_visible_all(session, page->modify->rec_max_txn, WT_TIMESTAMP_NULL(&page->modify->rec_max_timestamp)));
It's OK to evict a clean page with necessary history when that history was written to lookaside.