summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c')
-rw-r--r--src/third_party/wiredtiger/src/txn/txn_rollback_to_stable.c26
1 files changed, 20 insertions, 6 deletions
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.