diff options
author | Etienne Petrel <etienne.petrel@mongodb.com> | 2022-06-22 11:45:09 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-06-22 12:37:32 +0000 |
commit | 636312d3b279cdc03222780122b272f811e3c2a2 (patch) | |
tree | deb9c15213dfbe55b6d53ba9e44888f799c04502 /src/third_party | |
parent | a89e546704988917bd9770538a486cf9ae7ea38e (diff) | |
download | mongo-636312d3b279cdc03222780122b272f811e3c2a2.tar.gz |
Import wiredtiger: 3a5e2b974eae2b5ebe2a7cc007b46aaea79516c0 from branch mongodb-master
ref: 94bdf27918..3a5e2b974e
for: 6.1.0-rc0
WT-9477 Fix a bug in checkpoint walk that leads to a corrupted internal tree
Diffstat (limited to 'src/third_party')
-rw-r--r-- | src/third_party/wiredtiger/import.data | 2 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/btree/bt_split.c | 11 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data index 3ef9ecfcc0c..431405508e2 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-master", - "commit": "94bdf27918b476e5d6bb8189984223e60992d828" + "commit": "3a5e2b974eae2b5ebe2a7cc007b46aaea79516c0" } diff --git a/src/third_party/wiredtiger/src/btree/bt_split.c b/src/third_party/wiredtiger/src/btree/bt_split.c index 2c6f8449e3c..1fd13c47fe0 100644 --- a/src/third_party/wiredtiger/src/btree/bt_split.c +++ b/src/third_party/wiredtiger/src/btree/bt_split.c @@ -1271,8 +1271,15 @@ __split_parent_climb(WT_SESSION_IMPL *session, WT_PAGE *page) * to a different part of the tree where it will be written; in other words, in one part of the * tree we'll skip the newly created insert split chunk, but we'll write it upon finding it in a * different part of the tree. - */ - if (__wt_btree_syncing_by_other_session(session)) { + * + * Historically we allowed checkpoint itself to trigger an internal split here. That wasn't + * correct, since if that split climbs the tree above the immediate parent the checkpoint walk + * will potentially miss some internal pages. This is wrong as checkpoint needs to reconcile the + * entire internal tree structure. Non checkpoint cursor traversal doesn't care the internal + * tree structure as they just want to get the next leaf page correctly. Therefore, it is OK to + * split concurrently to cursor operations. + */ + if (WT_BTREE_SYNCING(S2BT(session))) { __split_internal_unlock(session, page); return (0); } |