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 | 26 |
2 files changed, 21 insertions, 7 deletions
diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data index 605e8f05e4a..e014839e84e 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-6.1", - "commit": "8be0aa4ba3878c34dbcd956e12ecc44cba094f30" + "commit": "987bc122e766ff2147e512b05e42a8434ccf1924" } 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 444374bda1f..9f980c86029 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 @@ -1634,6 +1634,20 @@ __rollback_progress_msg(WT_SESSION_IMPL *session, struct timespec rollback_start } /* + * __rollback_to_stable_check_btree_modified -- + * Check that the rollback to stable btree is modified or not. + */ +static int +__rollback_to_stable_check_btree_modified(WT_SESSION_IMPL *session, const char *uri, bool *modified) +{ + WT_DECL_RET; + + ret = __wt_conn_dhandle_find(session, uri, NULL); + *modified = ret == 0 && S2BT(session)->modified; + return (ret); +} + +/* * __rollback_to_stable_btree_apply -- * Perform rollback to stable on a single file. */ @@ -1649,7 +1663,7 @@ __rollback_to_stable_btree_apply( uint64_t rollback_txnid, write_gen; uint32_t btree_id; char ts_string[2][WT_TS_INT_STRING_SIZE]; - bool dhandle_allocated, durable_ts_found, has_txn_updates_gt_than_ckpt_snap, perform_rts; + bool dhandle_allocated, durable_ts_found, has_txn_updates_gt_than_ckpt_snap, modified; bool prepared_updates; /* Ignore non-btree objects as well as the metadata and history store files. */ @@ -1738,14 +1752,14 @@ __rollback_to_stable_btree_apply( * 4. There is no durable timestamp in any checkpoint. * 5. The checkpoint newest txn is greater than snapshot min txn id. */ - WT_WITH_HANDLE_LIST_READ_LOCK(session, (ret = __wt_conn_dhandle_find(session, uri, NULL))); - - perform_rts = ret == 0 && S2BT(session)->modified; + WT_WITHOUT_DHANDLE(session, + WT_WITH_HANDLE_LIST_READ_LOCK( + session, (ret = __rollback_to_stable_check_btree_modified(session, uri, &modified)))); WT_ERR_NOTFOUND_OK(ret, false); - if (perform_rts || max_durable_ts > rollback_timestamp || prepared_updates || - !durable_ts_found || has_txn_updates_gt_than_ckpt_snap) { + if (modified || max_durable_ts > rollback_timestamp || prepared_updates || !durable_ts_found || + has_txn_updates_gt_than_ckpt_snap) { /* * Open a handle; we're potentially opening a lot of handles and there's no reason to cache * all of them for future unknown use, discard on close. |