Mercurial > hg
view tests/test-clone-stream-revlog-split.t @ 50626:9b0fe2b075b5
stream-clone: add a test that highlight crash on revlog splitting
This has been a long running problem, we should have a tests for it.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 29 May 2023 02:22:20 +0200 |
parents | |
children | 9caa860dcbec |
line wrap: on
line source
Test stream cloning while a revlog split happens ------------------------------------------------ #testcases stream-bundle2-v2 stream-bundle2-v3 #if stream-bundle2-v3 $ cat << EOF >> $HGRCPATH > [experimental] > stream-v3 = yes > EOF #endif setup a repository for tests ---------------------------- $ cat >> $HGRCPATH << EOF > [format] > # skip compression to make it easy to trigger a split > revlog-compression=none > EOF $ hg init server $ cd server $ file="some-file" $ printf '%20d' '1' > $file $ hg commit -Aqma $ printf '%1024d' '1' > $file $ hg commit -Aqmb $ printf '%20d' '1' > $file $ hg commit -Aqmc check the revlog is inline $ f -s .hg/store/data/some-file* .hg/store/data/some-file.i: size=1259 $ hg debug-revlog-index some-file rev linkrev nodeid p1-nodeid p2-nodeid 0 0 ed70cecbc103 000000000000 000000000000 1 1 7241018db64c ed70cecbc103 000000000000 2 2 fa1120531cc1 7241018db64c 000000000000 $ cd .. setup synchronisation file $ HG_TEST_STREAM_WALKED_FILE_1="$TESTTMP/sync_file_walked_1" $ export HG_TEST_STREAM_WALKED_FILE_1 $ HG_TEST_STREAM_WALKED_FILE_2="$TESTTMP/sync_file_walked_2" $ export HG_TEST_STREAM_WALKED_FILE_2 $ HG_TEST_STREAM_WALKED_FILE_3="$TESTTMP/sync_file_walked_3" $ export HG_TEST_STREAM_WALKED_FILE_3 Test stream-clone raced by a revlog-split ========================================= Test stream-clone where the file is split right after the lock section is done Start the server $ hg serve -R server \ > -p $HGPORT1 -d --error errors.log --pid-file=hg.pid \ > --config extensions.stream_steps="$RUNTESTDIR/testlib/ext-stream-clone-steps.py" $ cat hg.pid >> $DAEMON_PIDS Start a client doing a streaming clone $ (hg clone -q --stream -U http://localhost:$HGPORT1 clone-while-split > client.log 2>&1; touch "$HG_TEST_STREAM_WALKED_FILE_3") & Wait for the server to be done collecting data $ $RUNTESTDIR/testlib/wait-on-file 10 $HG_TEST_STREAM_WALKED_FILE_1 trigger a split $ dd if=/dev/zero of=server/$file bs=1k count=128 > /dev/null 2>&1 $ hg -R server ci -m "triggering a split" --config ui.timeout.warn=-1 unlock the stream generation $ touch $HG_TEST_STREAM_WALKED_FILE_2 wait for the client to be done cloning. $ $RUNTESTDIR/testlib/wait-on-file 10 $HG_TEST_STREAM_WALKED_FILE_3 Check everything is fine $ cat client.log remote: abort: unexpected error: clone could only read 256 bytes from data/some-file.i, but expected 1259 bytes (known-bad-output !) abort: pull failed on remote (known-bad-output !) $ tail -2 errors.log mercurial.error.Abort: clone could only read 256 bytes from data/some-file.i, but expected 1259 bytes (known-bad-output !) (known-bad-output !) $ hg -R clone-while-split verify checking changesets (missing-correct-output !) checking manifests (missing-correct-output !) crosschecking files in changesets and manifests (missing-correct-output !) checking files (missing-correct-output !) checking dirstate (missing-correct-output !) checked 3 changesets with 3 changes to 1 files (missing-correct-output !) abort: repository clone-while-split not found (known-bad-output !) [255] $ hg -R clone-while-split tip changeset: 2:dbd9854c38a6 (missing-correct-output !) tag: tip (missing-correct-output !) user: test (missing-correct-output !) date: Thu Jan 01 00:00:00 1970 +0000 (missing-correct-output !) summary: c (missing-correct-output !) (missing-correct-output !) abort: repository clone-while-split not found (known-bad-output !) [255] $ hg -R clone-while-split debug-revlog-index some-file rev linkrev nodeid p1-nodeid p2-nodeid (missing-correct-output !) 0 0 ed70cecbc103 000000000000 000000000000 (missing-correct-output !) 1 1 7241018db64c ed70cecbc103 000000000000 (missing-correct-output !) 2 2 fa1120531cc1 7241018db64c 000000000000 (missing-correct-output !) abort: repository clone-while-split not found (known-bad-output !) [255] subsequent pull work $ hg -R clone-while-split pull pulling from http://localhost:$HGPORT1/ (missing-correct-output !) searching for changes (missing-correct-output !) adding changesets (missing-correct-output !) adding manifests (missing-correct-output !) adding file changes (missing-correct-output !) added 1 changesets with 1 changes to 1 files (missing-correct-output !) new changesets df05c6cb1406 (missing-correct-output !) (run 'hg update' to get a working copy) (missing-correct-output !) abort: repository clone-while-split not found (known-bad-output !) [255] $ hg -R clone-while-split debug-revlog-index some-file rev linkrev nodeid p1-nodeid p2-nodeid (missing-correct-output !) 0 0 ed70cecbc103 000000000000 000000000000 (missing-correct-output !) 1 1 7241018db64c ed70cecbc103 000000000000 (missing-correct-output !) 2 2 fa1120531cc1 7241018db64c 000000000000 (missing-correct-output !) 3 3 a631378adaa3 fa1120531cc1 000000000000 (missing-correct-output !) abort: repository clone-while-split not found (known-bad-output !) [255] $ hg -R clone-while-split verify checking changesets (missing-correct-output !) checking manifests (missing-correct-output !) crosschecking files in changesets and manifests (missing-correct-output !) checking files (missing-correct-output !) checking dirstate (missing-correct-output !) checked 4 changesets with 4 changes to 1 files (missing-correct-output !) abort: repository clone-while-split not found (known-bad-output !) [255]