/* * __wt_page_obsolete -- * Discard all obsolete updates on a row-store leaf page. */ void __wt_row_leaf_obsolete(WT_SESSION_IMPL *session, WT_PAGE *page) { WT_INSERT *ins; WT_ROW *rip; WT_UPDATE *upd; uint32_t i; /* For entries before the first on-page record... */ WT_SKIP_FOREACH(ins, WT_ROW_INSERT_SMALLEST(page)) if ((upd = __wt_update_obsolete_check(session, ins->upd)) != NULL) __wt_update_obsolete_free(session, page, upd); /* For each entry on the page... */ WT_ROW_FOREACH(page, rip, i) { if ((upd = __wt_update_obsolete_check( session, WT_ROW_UPDATE(page, rip))) != NULL) __wt_update_obsolete_free(session, page, upd); WT_SKIP_FOREACH(ins, WT_ROW_INSERT(page, rip)) if ((upd = __wt_update_obsolete_check( session, ins->upd)) != NULL) __wt_update_obsolete_free(session, page, upd); } }
/* * __txn_abort_newer_row_leaf -- * Abort updates on a row leaf page with timestamps newer than the * rollback timestamp. */ static void __txn_abort_newer_row_leaf( WT_SESSION_IMPL *session, WT_PAGE *page, wt_timestamp_t *rollback_timestamp) { WT_INSERT_HEAD *insert; WT_ROW *rip; WT_UPDATE *upd; uint32_t i; /* * Review the insert list for keys before the first entry on the disk * page. */ if ((insert = WT_ROW_INSERT_SMALLEST(page)) != NULL) __txn_abort_newer_row_skip( session, insert, rollback_timestamp); /* * Review updates that belong to keys that are on the disk image, * as well as for keys inserted since the page was read from disk. */ WT_ROW_FOREACH(page, rip, i) { if ((upd = WT_ROW_UPDATE(page, rip)) != NULL) __txn_abort_newer_update( session, upd, rollback_timestamp); if ((insert = WT_ROW_INSERT(page, rip)) != NULL) __txn_abort_newer_row_skip( session, insert, rollback_timestamp); } }