Created
October 20, 2025 03:43
-
-
Save agorrod/52ff2f1b33f3a8ed45fae0841f38377d to your computer and use it in GitHub Desktop.
Lock free benchmark results
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| This document contains information about experiments run to generate the performance data for the engineering blog post about lock-free WiredTiger. | |
| All experiments run on the following hardware: | |
| An Amazon m7g.4xlarge | |
| $ lscpu | |
| Architecture: aarch64 | |
| CPU(s): 16 | |
| Vendor ID: ARM | |
| Model: 1 | |
| Thread(s) per core: 1 | |
| Core(s) per socket: 16 | |
| Socket(s): 1 | |
| BogoMIPS: 2100.00 | |
| $ cat /proc/meminfo | head -n 1 | |
| MemTotal: 64651532 kB | |
| The experiments are configured to run in-memory, so the underlying I/O subsystem isn’t generally important. It is an AWS gp2 drive with 500GB capacity. | |
| WiredTiger was built with the following command line: | |
| cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchains/mongodbtoolchain_v4_gcc.cmake -DCMAKE_INSTALL_PREFIX=$(pwd)/LOCAL_INSTALL -DCC_OPTIMIZE_LEVEL="-O3" -DCMAKE_BUILD_TYPE=Release -G "Ninja" ./.. | |
| From commit c9dfe11d8eec65e13fa1e95291ba1ff3e252bf31 | |
| Results were generated by running five times and averaging the result: | |
| ./bench/wtperf/wtperf -O ./engblog_writes.wtperf -o verbose=2 | |
| Read only | |
| Wtperf: | |
| $ cat build/engblog_writes.wtperf | |
| # wtperf options file: medium btree configuration | |
| conn_config="cache_size=10G,eviction_dirty_trigger=60,eviction_dirty_target=50" | |
| table_config="type=file" | |
| icount=5000000 | |
| #random_range=20000000 | |
| report_interval=5 | |
| run_time=120 | |
| populate_threads=1 | |
| threads=((count=64,reads=1)) | |
| # Add throughput/latency monitoring | |
| max_latency=2000 | |
| sample_interval=5 | |
| Lock free throughput: | |
| 11880941 reads in 5 secs (5 total secs) | |
| 12594415 reads in 5 secs (10 total secs) | |
| 12563233 reads in 5 secs (15 total secs) | |
| 12543354 reads in 5 secs (20 total secs) | |
| 12566591 reads in 5 secs (25 total secs) | |
| 12573538 reads in 5 secs (30 total secs) | |
| 12548016 reads in 5 secs (35 total secs) | |
| 12547610 reads in 5 secs (40 total secs) | |
| 12551814 reads in 5 secs (45 total secs) | |
| 12544169 reads in 5 secs (50 total secs) | |
| 12544067 reads in 5 secs (55 total secs) | |
| 12555462 reads in 5 secs (60 total secs) | |
| 12568297 reads in 5 secs (65 total secs) | |
| 12576809 reads in 5 secs (70 total secs) | |
| 12586619 reads in 5 secs (75 total secs) | |
| 12546612 reads in 5 secs (80 total secs) | |
| 12561723 reads in 5 secs (85 total secs) | |
| 12587699 reads in 5 secs (90 total secs) | |
| 12577511 reads in 5 secs (95 total secs) | |
| 12583306 reads in 5 secs (100 total secs) | |
| 12583100 reads in 5 secs (105 total secs) | |
| 12578665 reads in 5 secs (110 total secs) | |
| 12545851 reads in 5 secs (115 total secs) | |
| Executed 300907935 read operations (100%) 2507566 ops/sec | |
| Locked throughput: | |
| 8144557 reads in 5 secs (5 total secs) | |
| 8547588 reads in 5 secs (10 total secs) | |
| 8565919 reads in 5 secs (15 total secs) | |
| 8565116 reads in 5 secs (20 total secs) | |
| 8559992 reads in 5 secs (25 total secs) | |
| 8570315 reads in 5 secs (30 total secs) | |
| 8575145 reads in 5 secs (35 total secs) | |
| 8571388 reads in 5 secs (40 total secs) | |
| 8536120 reads in 5 secs (45 total secs) | |
| 8543187 reads in 5 secs (50 total secs) | |
| 8544693 reads in 5 secs (55 total secs) | |
| 8535100 reads in 5 secs (60 total secs) | |
| 8535895 reads in 5 secs (65 total secs) | |
| 8561252 reads in 5 secs (70 total secs) | |
| 8566152 reads in 5 secs (75 total secs) | |
| 8554779 reads in 5 secs (80 total secs) | |
| 8555376 reads in 5 secs (85 total secs) | |
| 8557400 reads in 5 secs (90 total secs) | |
| 8548777 reads in 5 secs (95 total secs) | |
| 8543387 reads in 5 secs (100 total secs) | |
| 8546087 reads in 5 secs (105 total secs) | |
| 8551909 reads in 5 secs (110 total secs) | |
| 8551280 reads in 5 secs (115 total secs) | |
| Executed 204867925 read operations (100%) 1707232 ops/sec | |
| Read and insert (append) workload | |
| Wtperf: | |
| $ cat build/engblog_writes.wtperf | |
| # wtperf options file: medium btree configuration | |
| conn_config="cache_size=10G,eviction_dirty_trigger=60,eviction_dirty_target=50" | |
| table_config="type=file" | |
| icount=5000000 | |
| random_range=20000000 | |
| report_interval=5 | |
| run_time=120 | |
| populate_threads=1 | |
| threads=((count=64,reads=1),(count=6,inserts=1)) | |
| # Add throughput/latency monitoring | |
| max_latency=2000 | |
| sample_interval=5 | |
| Lock free throughput: | |
| 747520 inserts, 10329865 reads in 5 secs (5 total secs) | |
| 833953 inserts, 10215114 reads in 5 secs (10 total secs) | |
| 850921 inserts, 9779752 reads in 5 secs (15 total secs) | |
| 767432 inserts, 9632577 reads in 5 secs (20 total secs) | |
| 785395 inserts, 9344056 reads in 5 secs (25 total secs) | |
| 732163 inserts, 9362662 reads in 5 secs (30 total secs) | |
| 730110 inserts, 9153609 reads in 5 secs (35 total secs) | |
| 741150 inserts, 9024189 reads in 5 secs (40 total secs) | |
| 762275 inserts, 8934668 reads in 5 secs (45 total secs) | |
| 719348 inserts, 8951843 reads in 5 secs (50 total secs) | |
| 720492 inserts, 8874340 reads in 5 secs (55 total secs) | |
| 702197 inserts, 8808282 reads in 5 secs (60 total secs) | |
| 627052 inserts, 8802798 reads in 5 secs (65 total secs) | |
| 572946 inserts, 8327876 reads in 5 secs (70 total secs) | |
| 562412 inserts, 7736815 reads in 5 secs (75 total secs) | |
| 563909 inserts, 7872652 reads in 5 secs (80 total secs) | |
| 589142 inserts, 8387734 reads in 5 secs (85 total secs) | |
| 672068 inserts, 8926825 reads in 5 secs (90 total secs) | |
| 888713 inserts, 9253811 reads in 5 secs (95 total secs) | |
| 1081388 inserts, 9852593 reads in 5 secs (100 total secs) | |
| 757538 inserts, 9744339 reads in 5 secs (105 total secs) | |
| 773163 inserts, 9757558 reads in 5 secs (110 total secs) | |
| 784126 inserts, 9731641 reads in 5 secs (115 total secs) | |
| Executed 17758564 insert operations (7%) 147988 ops/sec | |
| Executed 220436211 read operations (92%) 1836968 ops/sec | |
| Locked throughput: | |
| 492142 inserts, 7281603 reads in 5 secs (5 total secs) | |
| 550769 inserts, 7483477 reads in 5 secs (10 total secs) | |
| 521246 inserts, 7319455 reads in 5 secs (15 total secs) | |
| 546472 inserts, 7164842 reads in 5 secs (20 total secs) | |
| 524494 inserts, 7123281 reads in 5 secs (25 total secs) | |
| 503132 inserts, 7024998 reads in 5 secs (30 total secs) | |
| 510820 inserts, 6939948 reads in 5 secs (35 total secs) | |
| 506800 inserts, 6849678 reads in 5 secs (40 total secs) | |
| 504194 inserts, 6828193 reads in 5 secs (45 total secs) | |
| 499751 inserts, 6801704 reads in 5 secs (50 total secs) | |
| 492660 inserts, 6750012 reads in 5 secs (55 total secs) | |
| 490302 inserts, 6689944 reads in 5 secs (60 total secs) | |
| 486168 inserts, 6680120 reads in 5 secs (65 total secs) | |
| 483580 inserts, 6649821 reads in 5 secs (70 total secs) | |
| 508498 inserts, 6563780 reads in 5 secs (75 total secs) | |
| 505455 inserts, 6566287 reads in 5 secs (80 total secs) | |
| 470064 inserts, 6564067 reads in 5 secs (85 total secs) | |
| 504409 inserts, 6455171 reads in 5 secs (90 total secs) | |
| 441479 inserts, 6419692 reads in 5 secs (95 total secs) | |
| 457818 inserts, 6339075 reads in 5 secs (100 total secs) | |
| 401442 inserts, 6052977 reads in 5 secs (105 total secs) | |
| 367661 inserts, 5850809 reads in 5 secs (110 total secs) | |
| 382741 inserts, 5994866 reads in 5 secs (115 total secs) | |
| Executed 11554460 insert operations (6%) 96287 ops/sec | |
| Executed 160448268 read operations (93%) 1337068 ops/sec | |
| Read and Update workload | |
| Wtperf: | |
| $ cat build/engblog_writes.wtperf | |
| # wtperf options file: medium btree configuration | |
| conn_config="cache_size=10G,eviction_dirty_trigger=60,eviction_dirty_target=50" | |
| table_config="type=file" | |
| icount=5000000 | |
| #random_range=20000000 | |
| report_interval=5 | |
| run_time=120 | |
| populate_threads=1 | |
| threads=((count=64,reads=1),(count=6,updates=1)) | |
| # Add throughput/latency monitoring | |
| max_latency=2000 | |
| sample_interval=5 | |
| Lock free throughput: | |
| 9550515 reads, 492715 updates in 5 secs (5 total secs) | |
| 10015986 reads, 590684 updates in 5 secs (10 total secs) | |
| 10019945 reads, 584407 updates in 5 secs (15 total secs) | |
| 10006182 reads, 559782 updates in 5 secs (20 total secs) | |
| 10137658 reads, 545949 updates in 5 secs (25 total secs) | |
| 9920579 reads, 582482 updates in 5 secs (30 total secs) | |
| 9798153 reads, 572807 updates in 5 secs (35 total secs) | |
| 9768386 reads, 595908 updates in 5 secs (40 total secs) | |
| 9838729 reads, 569578 updates in 5 secs (45 total secs) | |
| 9913495 reads, 543309 updates in 5 secs (50 total secs) | |
| 9872222 reads, 546800 updates in 5 secs (55 total secs) | |
| 9821438 reads, 558135 updates in 5 secs (60 total secs) | |
| 9787258 reads, 547445 updates in 5 secs (65 total secs) | |
| 9742690 reads, 536274 updates in 5 secs (70 total secs) | |
| 9823671 reads, 561804 updates in 5 secs (75 total secs) | |
| 9897381 reads, 530832 updates in 5 secs (80 total secs) | |
| 9840055 reads, 548205 updates in 5 secs (85 total secs) | |
| 9845303 reads, 567630 updates in 5 secs (90 total secs) | |
| 9805423 reads, 561814 updates in 5 secs (95 total secs) | |
| 9852655 reads, 543259 updates in 5 secs (100 total secs) | |
| 9724926 reads, 572016 updates in 5 secs (105 total secs) | |
| 9829009 reads, 545018 updates in 5 secs (110 total secs) | |
| 9895869 reads, 528959 updates in 5 secs (115 total secs) | |
| Executed 236578646 read operations (94%) 1971488 ops/sec | |
| Executed 13324936 update operations (5%) 111041 ops/sec | |
| Locked throughput: | |
| 6892557 reads, 427942 updates in 5 secs (5 total secs) | |
| 7240677 reads, 461438 updates in 5 secs (10 total secs) | |
| 7263636 reads, 457320 updates in 5 secs (15 total secs) | |
| 7275463 reads, 457598 updates in 5 secs (20 total secs) | |
| 7263667 reads, 449990 updates in 5 secs (25 total secs) | |
| 7211795 reads, 453866 updates in 5 secs (30 total secs) | |
| 7239461 reads, 456514 updates in 5 secs (35 total secs) | |
| 7224495 reads, 454302 updates in 5 secs (40 total secs) | |
| 7208558 reads, 452122 updates in 5 secs (45 total secs) | |
| 7188133 reads, 455288 updates in 5 secs (50 total secs) | |
| 7144137 reads, 440623 updates in 5 secs (55 total secs) | |
| 7198178 reads, 442277 updates in 5 secs (60 total secs) | |
| 7186251 reads, 442286 updates in 5 secs (65 total secs) | |
| 7161777 reads, 438688 updates in 5 secs (70 total secs) | |
| 7153048 reads, 439466 updates in 5 secs (75 total secs) | |
| 7125427 reads, 439268 updates in 5 secs (80 total secs) | |
| 7206884 reads, 422370 updates in 5 secs (85 total secs) | |
| 7189942 reads, 421334 updates in 5 secs (90 total secs) | |
| 7202239 reads, 408260 updates in 5 secs (95 total secs) | |
| 7185656 reads, 387844 updates in 5 secs (100 total secs) | |
| 7204841 reads, 400663 updates in 5 secs (105 total secs) | |
| 7266990 reads, 393915 updates in 5 secs (110 total secs) | |
| 7265369 reads, 386785 updates in 5 secs (115 total secs) | |
| Executed 172695948 read operations (94%) 1439132 ops/sec | |
| Executed 10387784 update operations (5%) 86564 ops/sec | |
| Multi-threaded append workload | |
| Wtperf: | |
| $ cat build/engblog_writes.wtperf | |
| # wtperf options file: medium btree configuration | |
| conn_config="cache_size=10G,eviction_dirty_trigger=60,eviction_dirty_target=50" | |
| table_config="type=file" | |
| icount=500000 | |
| #random_range=20000000 | |
| report_interval=5 | |
| run_time=120 | |
| populate_threads=1 | |
| threads=((count=128,inserts=1)) | |
| # Add throughput/latency monitoring | |
| max_latency=2000 | |
| sample_interval=5 | |
| Lock free throughput | |
| 9090660 inserts in 5 secs (5 total secs) | |
| 8360696 inserts in 5 secs (10 total secs) | |
| 7003566 inserts in 5 secs (15 total secs) | |
| 5300703 inserts in 5 secs (20 total secs) | |
| 7082231 inserts in 5 secs (25 total secs) | |
| 5502723 inserts in 5 secs (30 total secs) | |
| 6374823 inserts in 5 secs (35 total secs) | |
| 4129785 inserts in 5 secs (40 total secs) | |
| 5728464 inserts in 5 secs (45 total secs) | |
| 7450289 inserts in 5 secs (50 total secs) | |
| 6766795 inserts in 5 secs (55 total secs) | |
| 6523232 inserts in 5 secs (60 total secs) | |
| 4752164 inserts in 5 secs (65 total secs) | |
| 6168451 inserts in 5 secs (70 total secs) | |
| 6767651 inserts in 5 secs (75 total secs) | |
| 6227354 inserts in 5 secs (80 total secs) | |
| 7001783 inserts in 5 secs (85 total secs) | |
| 5595129 inserts in 5 secs (90 total secs) | |
| 6838429 inserts in 5 secs (95 total secs) | |
| 5929409 inserts in 5 secs (100 total secs) | |
| 6204547 inserts in 5 secs (105 total secs) | |
| 5463659 inserts in 5 secs (110 total secs) | |
| 4901054 inserts in 5 secs (115 total secs) | |
| Executed 151155647 insert operations (100%) 1259630 ops/sec | |
| Locked throughput | |
| 202784 inserts in 5 secs (5 total secs) | |
| 1442451 inserts in 5 secs (10 total secs) | |
| 1731699 inserts in 5 secs (15 total secs) | |
| 1686819 inserts in 5 secs (20 total secs) | |
| 1622336 inserts in 5 secs (25 total secs) | |
| 1734028 inserts in 5 secs (30 total secs) | |
| 1703539 inserts in 5 secs (35 total secs) | |
| 1784244 inserts in 5 secs (40 total secs) | |
| 1592949 inserts in 5 secs (45 total secs) | |
| 1436527 inserts in 5 secs (50 total secs) | |
| 1788624 inserts in 5 secs (55 total secs) | |
| 1857948 inserts in 5 secs (60 total secs) | |
| 1935286 inserts in 5 secs (65 total secs) | |
| 1593141 inserts in 5 secs (70 total secs) | |
| 1489479 inserts in 5 secs (75 total secs) | |
| 1489784 inserts in 5 secs (80 total secs) | |
| 1718794 inserts in 5 secs (85 total secs) | |
| 1834689 inserts in 5 secs (90 total secs) | |
| 1779841 inserts in 5 secs (95 total secs) | |
| 1829270 inserts in 5 secs (100 total secs) | |
| 1522369 inserts in 5 secs (105 total secs) | |
| 1387230 inserts in 5 secs (110 total secs) | |
| 1522388 inserts in 5 secs (115 total secs) | |
| Executed 38388402 insert operations (100%) 319903 ops/sec | |
| Changes to add locking to WiredTiger | |
| diff --git a/src/btree/bt_discard.c b/src/btree/bt_discard.c | |
| index 5136e7f99a..d8fe72dd0d 100644 | |
| --- a/src/btree/bt_discard.c | |
| +++ b/src/btree/bt_discard.c | |
| @@ -124,6 +124,7 @@ __wt_page_out(WT_SESSION_IMPL *session, WT_PAGE **pagep) | |
| (void)S2BT(session)->bm->map_discard( | |
| S2BT(session)->bm, session, dsk, (size_t)dsk->mem_size); | |
| + __wt_rwlock_destroy(session, &page->tmp_page_rwlock); | |
| /* | |
| * If discarding the page as part of process exit, the application may configure to leak the | |
| * memory rather than do the work. | |
| diff --git a/src/btree/bt_page.c b/src/btree/bt_page.c | |
| index 6768bfc28c..40b1ecefa3 100644 | |
| --- a/src/btree/bt_page.c | |
| +++ b/src/btree/bt_page.c | |
| @@ -112,6 +112,7 @@ err: | |
| /* A new page doesn't have a page id. */ | |
| page->block_meta.page_id = WT_BLOCK_INVALID_PAGE_ID; | |
| + WT_ERR(__wt_rwlock_init(session, &page->tmp_page_rwlock)); | |
| /* Increment the cache statistics. */ | |
| __wt_cache_page_inmem_incr(session, page, size, false); | |
| diff --git a/src/btree/bt_read.c b/src/btree/bt_read.c | |
| index 9fe24f854c..84b5e4e8a0 100644 | |
| --- a/src/btree/bt_read.c | |
| +++ b/src/btree/bt_read.c | |
| @@ -99,6 +99,8 @@ __wt_page_release_evict(WT_SESSION_IMPL *session, WT_REF *ref, uint32_t flags) | |
| btree = S2BT(session); | |
| + /* this function always releases the hazard pointer - also release our read lock */ | |
| + __wt_readunlock(session, &ref->page->tmp_page_rwlock); | |
| /* | |
| * This function always releases the hazard pointer - ensure that's done regardless of whether | |
| * we can get exclusive access. Take some care with order of operations: if we release the | |
| @@ -471,6 +473,7 @@ read: | |
| WT_STAT_CONN_INCR(session, page_busy_blocked); | |
| break; | |
| } | |
| + __wt_readlock(session, &ref->page->tmp_page_rwlock); | |
| /* | |
| * If a page has grown too large, we'll try and forcibly evict it before making it | |
| diff --git a/src/btree/bt_sync.c b/src/btree/bt_sync.c | |
| index 0fc30278ce..762dcad2b3 100644 | |
| --- a/src/btree/bt_sync.c | |
| +++ b/src/btree/bt_sync.c | |
| @@ -94,8 +94,10 @@ __sync_dup_hazard_pointer(WT_SESSION_IMPL *session, WT_REF *walk) | |
| * we have one hazard pointer so we should be able to get another one. | |
| */ | |
| WT_RET(__wt_hazard_set(session, walk, &busy)); | |
| - if (!busy) | |
| + if (!busy) { | |
| + __wt_readlock(session, &walk->page->tmp_page_rwlock); | |
| break; | |
| + } | |
| __wt_yield(); | |
| } | |
| return (0); | |
| diff --git a/src/btree/row_modify.c b/src/btree/row_modify.c | |
| index 6f3d6dd136..96972b938f 100644 | |
| --- a/src/btree/row_modify.c | |
| +++ b/src/btree/row_modify.c | |
| @@ -114,8 +114,13 @@ __wt_row_modify(WT_CURSOR_BTREE *cbt, const WT_ITEM *key, const WT_ITEM *value, | |
| ((value == NULL && upd_arg != NULL) || (value != NULL && upd_arg == NULL)))); | |
| WT_ASSERT(session, upd_arg == NULL || modify_type == WT_UPDATE_INVALID); | |
| + /* Exclusive indicates a different path than page-read, so the lock isn't held yet */ | |
| + if (!exclusive) | |
| + __wt_readunlock(session, &page->tmp_page_rwlock); | |
| + __wt_writelock(session, &page->tmp_page_rwlock); | |
| + | |
| /* If we don't yet have a modify structure, we'll need one. */ | |
| - WT_RET(__wt_page_modify_init(session, page)); | |
| + WT_ERR(__wt_page_modify_init(session, page)); | |
| mod = page->modify; | |
| /* | |
| @@ -205,7 +210,8 @@ __wt_row_modify(WT_CURSOR_BTREE *cbt, const WT_ITEM *key, const WT_ITEM *value, | |
| upd->next = old_upd; | |
| /* Serialize the update. */ | |
| - WT_ERR(__wt_update_serial(session, cbt, page, upd_entry, &upd, upd_size, exclusive)); | |
| + ret = __wt_update_serial(session, cbt, page, upd_entry, &upd, upd_size, exclusive); | |
| + WT_ERR(ret); | |
| } else { | |
| /* | |
| * Allocate the insert array as necessary. | |
| @@ -279,8 +285,9 @@ __wt_row_modify(WT_CURSOR_BTREE *cbt, const WT_ITEM *key, const WT_ITEM *value, | |
| ins->next[i] = cbt->next_stack[i]; | |
| /* Insert the WT_INSERT structure. */ | |
| - WT_ERR(__wt_insert_serial( | |
| - session, page, cbt->ins_head, cbt->ins_stack, &ins, ins_size, skipdepth, exclusive)); | |
| + ret = __wt_insert_serial( | |
| + session, page, cbt->ins_head, cbt->ins_stack, &ins, ins_size, skipdepth, exclusive); | |
| + WT_ERR(ret); | |
| } | |
| inserted_to_update_chain = true; | |
| @@ -345,6 +352,9 @@ err: | |
| if (upd == NULL && updp_arg != NULL) | |
| *updp_arg = NULL; | |
| } | |
| + __wt_writeunlock(session, &page->tmp_page_rwlock); | |
| + if (!exclusive) | |
| + __wt_readlock(session, &page->tmp_page_rwlock); | |
| return (ret); | |
| } | |
| diff --git a/src/include/btmem.h b/src/include/btmem.h | |
| index 169c4d431e..ead51b44fa 100644 | |
| --- a/src/include/btmem.h | |
| +++ b/src/include/btmem.h | |
| @@ -823,6 +823,7 @@ struct __wt_page { | |
| uint32_t prefix_start; /* Best page prefix starting slot */ | |
| uint32_t prefix_stop; /* Maximum slot to which the best page prefix applies */ | |
| + WT_RWLOCK tmp_page_rwlock; | |
| /* AUTOMATIC FLAG VALUE GENERATION START 0 */ | |
| #define WT_PAGE_BUILD_KEYS 0x001u /* Keys have been built in memory */ | |
| #define WT_PAGE_COMPACTION_WRITE 0x002u /* Writing the page for compaction */ | |
| diff --git a/src/include/btree_inline.h b/src/include/btree_inline.h | |
| index ea2411d88a..cb4e521833 100644 | |
| --- a/src/include/btree_inline.h | |
| +++ b/src/include/btree_inline.h | |
| @@ -2105,6 +2105,7 @@ __wt_page_release(WT_SESSION_IMPL *session, WT_REF *ref, uint32_t flags) | |
| } | |
| } | |
| + __wt_readunlock(session, &ref->page->tmp_page_rwlock); | |
| return (__wt_hazard_clear(session, ref)); | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment