##// END OF EJS Templates
revlog: subclass the new `repository.iverifyproblem` Protocol class...
revlog: subclass the new `repository.iverifyproblem` Protocol class This is the same transformation as 3a90a6fd710d did for dirstate, but the CamelCase naming was already cleaned up here. We shouldn't have to explicitly subclass, but I'm doing so to test the interplay of regular attributes and the `attrs` class. Also, PyCharm has a nifty feature that puts a jump point in the gutter to navigate back and forth between the base class and subclasses (and override functions and base class functions) when there's an explicit subclassing. Additionally, PyCharm will immediately flag signature mismatches without a 40m pytype run.

File last commit:

r53256:3f0cf7bb default
r53365:4ef6dbc2 default
Show More
test-clone-stream-revlog-split.t
192 lines | 6.2 KiB | text/troff | Tads3Lexer
/ tests / test-clone-stream-revlog-split.t
stream-clone: add a test that highlight crash on revlog splitting...
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
stream-clone: smoothly detect and handle a case were a revlog is split...
r51534 > [phases]
> publish=no
stream-clone: add a test that highlight crash on revlog splitting...
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
stream: preserve volatile cache early...
r53256 $ 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
stream-clone: add a test that highlight crash on revlog splitting...
r51519 $ HG_TEST_STREAM_WALKED_FILE_3="$TESTTMP/sync_file_walked_3"
$ export HG_TEST_STREAM_WALKED_FILE_3
stream: rename all test hook point one number up...
r53255 $ HG_TEST_STREAM_WALKED_FILE_4="$TESTTMP/sync_file_walked_4"
$ export HG_TEST_STREAM_WALKED_FILE_4
$ HG_TEST_STREAM_WALKED_FILE_5="$TESTTMP/sync_file_walked_5"
$ export HG_TEST_STREAM_WALKED_FILE_5
stream: preserve volatile cache early...
r53256 (we don't need this wait point)
$ touch $HG_TEST_STREAM_WALKED_FILE_2
stream-clone: add a test that highlight crash on revlog splitting...
r51519
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
stream-clone: smoothly detect and handle a case were a revlog is split...
r51534 $ ( \
> hg clone --debug --stream -U http://localhost:$HGPORT1 \
Matt Harbison
tests: disable `worker.backgroundclose` to stabilize a test on Windows...
r52848 > clone-while-split --config worker.backgroundclose=0 > client.log 2>&1; \
stream: rename all test hook point one number up...
r53255 > touch "$HG_TEST_STREAM_WALKED_FILE_5" \
stream-clone: smoothly detect and handle a case were a revlog is split...
r51534 > ) &
stream-clone: add a test that highlight crash on revlog splitting...
r51519
Wait for the server to be done collecting data
stream: rename all test hook point one number up...
r53255 $ $RUNTESTDIR/testlib/wait-on-file 10 $HG_TEST_STREAM_WALKED_FILE_3
stream-clone: add a test that highlight crash on revlog splitting...
r51519
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
stream: rename all test hook point one number up...
r53255 $ touch $HG_TEST_STREAM_WALKED_FILE_4
stream-clone: add a test that highlight crash on revlog splitting...
r51519
wait for the client to be done cloning.
stream: rename all test hook point one number up...
r53255 $ $RUNTESTDIR/testlib/wait-on-file 10 $HG_TEST_STREAM_WALKED_FILE_5
stream-clone: add a test that highlight crash on revlog splitting...
r51519
Check everything is fine
$ cat client.log
stream-clone: smoothly detect and handle a case were a revlog is split...
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
stream-clone: add a v3 version of the protocol...
r51599 bundle2-input-part: "stream3-exp" (params: 1 mandatory) supported (stream-bundle2-v3 !)
stream-clone: smoothly detect and handle a case were a revlog is split...
r51534 applying stream bundle
changelog: never inline changelog...
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
stream-clone: add a v3 version of the protocol...
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 !)
stream-clone: smoothly detect and handle a case were a revlog is split...
r51534 adding [s] phaseroots (43 bytes)
adding [s] 00manifest.i (348 bytes)
changelog: never inline changelog...
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)
stream-clone: smoothly detect and handle a case were a revlog is split...
r51534 adding [c] branch2-served (94 bytes)
rev-branch-cache: increment the version to "v2"...
r52799 adding [c] rbc-names-v2 (7 bytes)
adding [c] rbc-revs-v2 (24 bytes)
stream-clone: smoothly detect and handle a case were a revlog is split...
r51534 updating the branch cache
changelog: never inline changelog...
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 !)
stream-clone: smoothly detect and handle a case were a revlog is split...
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)
stream-clone: add a test that highlight crash on revlog splitting...
r51519 $ tail -2 errors.log
$ hg -R clone-while-split verify
stream-clone: smoothly detect and handle a case were a revlog is split...
r51534 checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
checking dirstate
checked 3 changesets with 3 changes to 1 files
stream-clone: add a test that highlight crash on revlog splitting...
r51519 $ hg -R clone-while-split tip
stream-clone: smoothly detect and handle a case were a revlog is split...
r51534 changeset: 2:dbd9854c38a6
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: c
stream-clone: add a test that highlight crash on revlog splitting...
r51519 $ hg -R clone-while-split debug-revlog-index some-file
stream-clone: smoothly detect and handle a case were a revlog is split...
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
stream-clone: add a test that highlight crash on revlog splitting...
r51519
subsequent pull work
$ hg -R clone-while-split pull
stream-clone: smoothly detect and handle a case were a revlog is split...
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)
stream-clone: add a test that highlight crash on revlog splitting...
r51519
$ hg -R clone-while-split debug-revlog-index some-file
stream-clone: smoothly detect and handle a case were a revlog is split...
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
stream-clone: add a test that highlight crash on revlog splitting...
r51519 $ hg -R clone-while-split verify
stream-clone: smoothly detect and handle a case were a revlog is split...
r51534 checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
checking dirstate
checked 4 changesets with 4 changes to 1 files