test-clone-stream-revlog-split.t
186 lines
| 5.9 KiB
| text/troff
|
Tads3Lexer
/ tests / test-clone-stream-revlog-split.t
r51519 | 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 | ||||
r51534 | > [phases] | |||
> publish=no | ||||
r51519 | > 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 | ||||
r51534 | $ ( \ | |||
> hg clone --debug --stream -U http://localhost:$HGPORT1 \ | ||||
> clone-while-split > client.log 2>&1; \ | ||||
> touch "$HG_TEST_STREAM_WALKED_FILE_3" \ | ||||
> ) & | ||||
r51519 | ||||
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 | ||||
r51534 | using http://localhost:$HGPORT1/ | |||
sending capabilities command | ||||
query 1; heads | ||||
sending batch command | ||||
streaming all changes | ||||
sending getbundle command | ||||
bundle2-input-bundle: with-transaction | ||||
bundle2-input-part: "stream2" (params: 3 mandatory) supported (stream-bundle2-v2 !) | ||||
Arseniy Alekseyev
|
r51599 | bundle2-input-part: "stream3-exp" (params: 1 mandatory) supported (stream-bundle2-v3 !) | ||
r51534 | applying stream bundle | |||
r52074 | 8 files to transfer, 2.11 KB of data (stream-bundle2-v2 no-rust !) | |||
10 files to transfer, 2.29 KB of data (stream-bundle2-v2 rust !) | ||||
Arseniy Alekseyev
|
r51599 | adding [s] data/some-file.i (1.23 KB) (stream-bundle2-v2 !) | ||
7 entries to transfer (stream-bundle2-v3 !) | ||||
adding [s] data/some-file.d (1.04 KB) (stream-bundle2-v3 !) | ||||
adding [s] data/some-file.i (192 bytes) (stream-bundle2-v3 !) | ||||
r51534 | adding [s] phaseroots (43 bytes) | |||
adding [s] 00manifest.i (348 bytes) | ||||
r52074 | adding [s] 00changelog.n (62 bytes) (rust !) | |||
adding [s] 00changelog-88698448.nd (128 bytes) (rust !) | ||||
adding [s] 00changelog.d (189 bytes) | ||||
adding [s] 00changelog.i (192 bytes) | ||||
r51534 | adding [c] branch2-served (94 bytes) | |||
r52799 | adding [c] rbc-names-v2 (7 bytes) | |||
adding [c] rbc-revs-v2 (24 bytes) | ||||
r51534 | updating the branch cache | |||
r52074 | transferred 2.11 KB in * seconds (* */sec) (glob) (no-rust !) | |||
transferred 2.29 KB in * seconds (* */sec) (glob) (rust !) | ||||
bundle2-input-part: total payload size 2285 (stream-bundle2-v2 no-rust !) | ||||
bundle2-input-part: total payload size 2518 (stream-bundle2-v2 rust !) | ||||
bundle2-input-part: total payload size 2313 (stream-bundle2-v3 no-rust !) | ||||
bundle2-input-part: total payload size 2546 (stream-bundle2-v3 rust !) | ||||
r51534 | bundle2-input-part: "listkeys" (params: 1 mandatory) supported | |||
bundle2-input-bundle: 2 parts total | ||||
checking for updated bookmarks | ||||
updating the branch cache | ||||
(sent 3 HTTP requests and * bytes; received * bytes in responses) (glob) | ||||
r51519 | $ tail -2 errors.log | |||
$ hg -R clone-while-split verify | ||||
r51534 | checking changesets | |||
checking manifests | ||||
crosschecking files in changesets and manifests | ||||
checking files | ||||
checking dirstate | ||||
checked 3 changesets with 3 changes to 1 files | ||||
r51519 | $ hg -R clone-while-split tip | |||
r51534 | changeset: 2:dbd9854c38a6 | |||
tag: tip | ||||
user: test | ||||
date: Thu Jan 01 00:00:00 1970 +0000 | ||||
summary: c | ||||
r51519 | $ hg -R clone-while-split debug-revlog-index some-file | |||
r51534 | rev linkrev nodeid p1-nodeid p2-nodeid | |||
0 0 ed70cecbc103 000000000000 000000000000 | ||||
1 1 7241018db64c ed70cecbc103 000000000000 | ||||
2 2 fa1120531cc1 7241018db64c 000000000000 | ||||
$ hg -R server phase --rev 'all()' | ||||
0: draft | ||||
1: draft | ||||
2: draft | ||||
3: draft | ||||
$ hg -R clone-while-split phase --rev 'all()' | ||||
0: draft | ||||
1: draft | ||||
2: draft | ||||
r51519 | ||||
subsequent pull work | ||||
$ hg -R clone-while-split pull | ||||
r51534 | pulling from http://localhost:$HGPORT1/ | |||
searching for changes | ||||
adding changesets | ||||
adding manifests | ||||
adding file changes | ||||
added 1 changesets with 1 changes to 1 files | ||||
new changesets df05c6cb1406 (1 drafts) | ||||
(run 'hg update' to get a working copy) | ||||
r51519 | ||||
$ hg -R clone-while-split debug-revlog-index some-file | ||||
r51534 | rev linkrev nodeid p1-nodeid p2-nodeid | |||
0 0 ed70cecbc103 000000000000 000000000000 | ||||
1 1 7241018db64c ed70cecbc103 000000000000 | ||||
2 2 fa1120531cc1 7241018db64c 000000000000 | ||||
3 3 a631378adaa3 fa1120531cc1 000000000000 | ||||
r51519 | $ hg -R clone-while-split verify | |||
r51534 | checking changesets | |||
checking manifests | ||||
crosschecking files in changesets and manifests | ||||
checking files | ||||
checking dirstate | ||||
checked 4 changesets with 4 changes to 1 files | ||||