The wt_cmp_dir.py script fails when the version cursor check is enabled.
Perform the following diff to enable the check (and verbose):
diff --git a/tools/wt_cmp_uri.py b/tools/wt_cmp_uri.py
index 62b50bc30..e52aa881a 100755
--- a/tools/wt_cmp_uri.py
+++ b/tools/wt_cmp_uri.py
@@ -41,7 +41,7 @@ def usage_exit():
print(' -t ts read at a timestamp (a different timestamp for each dir may be specified)')
sys.exit(1)
-verboseFlag = False
+verboseFlag = True
def verbose(s):
if verboseFlag:
print("VERBOSE>>> " + s)
@@ -208,8 +208,8 @@ def compare_cursors(cc1, cc2, version):
print('unexpected version cursor search')
ecode = 1
return
- vcc1 = CompareCursor(vcur1, cc1.uri, 'version(key={}) for {}'.format(k1, cc1.name))
- vcc2 = CompareCursor(vcur2, cc2.uri, 'version(key={}) for {}'.format(k2, cc2.name))
+ vcc1 = CompareCursor(vcur1, cc1.uri, 'version(key={}) for {}'.format(k1, cc1.name), is_reverse(cc1.cursor.session, cc1.uri))
+ vcc2 = CompareCursor(vcur2, cc2.uri, 'version(key={}) for {}'.format(k2, cc2.name), is_reverse(cc2.cursor.session, cc2.uri))
verbose('READY for version cursor')
ver_ecode = compare_version_cursors(vcc1, vcc2)
vcur1.close()
@@ -339,8 +339,7 @@ def wiredtiger_compare_uri(args):
print('Failed opening {} in {} at timestamp {}'.format(uri2, wtdir2, timestamp2))
raise
- # Not running with version cursors, it's not quite ready for prime time.
- ecode = compare_cursors(cc1, cc2, False)
+ ecode = compare_cursors(cc1, cc2, True)
cc1.close()
cc2.close()
Then run the reproducer using test_cursor01.py:
$ /opt/mongodbtoolchain/v4/bin/python3 ../test/suite/run.py -p cursor01 $ cd WT_TEST/ $ ../../tools/wt_cmp_dir test_cursor01.0 test_cursor01.0 file:test_cursor01 VERBOSE>>> wiredtiger_open(test_cursor01.0) VERBOSE>>> test_cursor01.0/file:test_cursor01: next VERBOSE>>> key: 1 value: value0 VERBOSE>>> test_cursor01.0/file:test_cursor01: next VERBOSE>>> key: 1 value: value0 VERBOSE>>> READY for version cursor VERBOSE>>> Version: GOT: 1:[0, 0, 0, 18446744073709551605, 18446744073709551615, 18446744073709551615, 3, 0, 0, 1, 'value0'] 1:[0, 0, 0, 18446744073709551605, 18446744073709551615, 18446744073709551615, 3, 0, 0, 1, 'value0'] VERBOSE>>> Version: finished compare ../../tools/wt_cmp_dir: line 167: 20255 Segmentation fault (core dumped) python3 $cmp_uri_script $timestamp_opt1 "$dir1"/$f $timestamp_opt2 "$dir2"/$f
The core indicates a segfault with the hs cursor which is a field of the version cursor:
Program terminated with signal SIGSEGV, Segmentation fault. #0 0x00007fce8a40695d in __curversion_next_int (cursor=cursor@entry=0x19a8c50) at ../src/cursor/cur_version.c:355 355 F_SET(hs_cursor, WT_CURSTD_HS_READ_COMMITTED); [Current thread is 1 (Thread 0x7fce8bbc6740 (LWP 20255))] (gdb) p hs_cursor $1 = (WT_CURSOR *) 0x0