diff options
-rw-r--r-- | src/third_party/wiredtiger/import.data | 2 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c | 19 |
2 files changed, 10 insertions, 11 deletions
diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data index 1286ccdd77b..577b9757f2a 100644 --- a/src/third_party/wiredtiger/import.data +++ b/src/third_party/wiredtiger/import.data @@ -2,5 +2,5 @@ "vendor": "wiredtiger", "github": "wiredtiger/wiredtiger.git", "branch": "mongodb-5.0", - "commit": "e5aac1485ef35038e1e1d4e5a0f366ac1b6d4728" + "commit": "5db6a488f50a3c91688ca35cfebbf377dd657a7e" } diff --git a/src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c b/src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c index ee304fedff5..2a8dea06e82 100644 --- a/src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c +++ b/src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c @@ -1064,19 +1064,11 @@ __rollback_abort_updates(WT_SESSION_IMPL *session, WT_REF *ref, wt_timestamp_t r { WT_PAGE *page; - /* Review deleted page saved to the ref. */ - if (ref->page_del != NULL && rollback_timestamp < ref->page_del->durable_timestamp) { - __wt_verbose( - session, WT_VERB_RECOVERY_RTS(session), "%p: deleted page rolled back", (void *)ref); - WT_RET(__wt_delete_page_rollback(session, ref)); - } - /* * If we have a ref with clean page, find out whether the page has any modifications that are * newer than the given timestamp. As eviction writes the newest version to page, even a clean * page may also contain modifications that need rollback. */ - WT_ASSERT(session, ref->page != NULL); page = ref->page; if (!__wt_page_is_modified(page) && !__rollback_page_needs_abort(session, ref, rollback_timestamp)) { @@ -1122,8 +1114,15 @@ static int __rollback_abort_fast_truncate( WT_SESSION_IMPL *session, WT_REF *ref, wt_timestamp_t rollback_timestamp) { - /* Review deleted page saved to the ref. */ - if (ref->page_del != NULL && rollback_timestamp < ref->page_del->durable_timestamp) { + /* + * A fast-truncate page is either in the WT_REF_DELETED state (where the WT_PAGE_DELETED + * structure has the timestamp information), or in an in-memory state where it started as a + * fast-truncate page which was then instantiated and the timestamp information moved to the + * individual WT_UPDATE structures. When reviewing internal pages, ignore the second case, an + * instantiated page is handled when the leaf page is visited. + */ + if (ref->state == WT_REF_DELETED && ref->page_del != NULL && + rollback_timestamp < ref->page_del->durable_timestamp) { __wt_verbose( session, WT_VERB_RECOVERY_RTS(session), "%p: deleted page rolled back", (void *)ref); WT_RET(__wt_delete_page_rollback(session, ref)); |