annotate tests/test-transaction-rollback-on-revlog-split.t @ 50311:e2ba2234bf1c stable

revlog: update the split + transaction test We add section, increase the amount of comments and simplify some of the constructs. We are about to build more on top this tests so lets do a small cleanup first.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 16 Mar 2023 20:37:11 +0100
parents ccd9cb73125c
children c185545a4c69
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
1 Test correctness of revlog inline -> non-inline transition
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
2 ----------------------------------------------------------
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
3
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
4 Helper extension to intercept renames and kill process
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
5
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
6 $ cat > $TESTTMP/intercept_before_rename.py << EOF
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
7 > import os
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
8 > import signal
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
9 > from mercurial import extensions, util
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
10 >
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
11 > def extsetup(ui):
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
12 > def close(orig, *args, **kwargs):
47561
8e9295912573 compat: normalise path before comparison in revlog splitting test
Raphaël Gomès <rgomes@octobus.net>
parents: 47314
diff changeset
13 > path = util.normpath(args[0]._atomictempfile__name)
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
14 > if path.endswith(b'/.hg/store/data/file.i'):
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
15 > os.kill(os.getpid(), signal.SIGKILL)
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
16 > return orig(*args, **kwargs)
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
17 > extensions.wrapfunction(util.atomictempfile, 'close', close)
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
18 > EOF
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
19
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
20 $ cat > $TESTTMP/killme.py << EOF
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
21 > import os
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
22 > import signal
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
23 >
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
24 > def killme(ui, repo, hooktype, **kwargs):
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
25 > os.kill(os.getpid(), signal.SIGKILL)
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
26 > EOF
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
27
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
28 setup a repository for tests
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
29 ----------------------------
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
30
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
31 $ cat >> $HGRCPATH << EOF
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
32 > [format]
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
33 > revlog-compression=none
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
34 > EOF
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
35
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
36 $ hg init troffset-computation
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
37 $ cd troffset-computation
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
38 $ printf '%20d' '1' > file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
39 $ hg commit -Aqma
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
40 $ printf '%1024d' '1' > file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
41 $ hg commit -Aqmb
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
42 $ printf '%20d' '1' > file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
43 $ hg commit -Aqmc
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
44 $ dd if=/dev/zero of=file bs=1k count=128 > /dev/null 2>&1
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
45 $ hg commit -AqmD
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
46
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
47 Reference size:
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
48 $ f -s file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
49 file: size=131072
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
50 $ f -s .hg/store/data/file*
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
51 .hg/store/data/file.d: size=132139
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
52 .hg/store/data/file.i: size=256
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
53
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
54 $ cd ..
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
55
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
56
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
57 Test a hard crash after the file was split but before the transaction was committed
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
58 ===================================================================================
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
59
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
60 Test offset computation to correctly factor in the index entries themselves.
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
61 Also test that the new data size has the correct size if the transaction is aborted
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
62 after the index has been replaced.
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
63
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
64 Test repo has commits a, b, c, D, where D is large (grows the revlog enough that it
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
65 transitions to non-inline storage). The clone initially has changes a, b
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
66 and will transition to non-inline storage when adding c, D.
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
67
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
68 If the transaction adding c, D is rolled back, then we don't undo the revlog split,
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
69 but truncate the index and the data to remove both c and D.
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
70
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
71
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
72 $ hg clone --quiet --rev 1 troffset-computation troffset-computation-copy
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
73 $ cd troffset-computation-copy
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
74
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
75 Reference size:
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
76 $ f -s file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
77 file: size=1024
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
78 $ f -s .hg/store/data/file*
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
79 .hg/store/data/file.i: size=1174
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
80
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
81 $ cat > .hg/hgrc <<EOF
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
82 > [hooks]
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
83 > pretxnchangegroup = python:$TESTTMP/killme.py:killme
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
84 > EOF
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
85 #if chg
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
86 $ hg pull ../troffset-computation
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
87 pulling from ../troffset-computation
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
88 [255]
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
89 #else
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
90 $ hg pull ../troffset-computation
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
91 pulling from ../troffset-computation
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
92 Killed
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
93 [137]
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
94 #endif
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
95
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
96
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
97 The revlog have been split on disk
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
98
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
99 $ f -s .hg/store/data/file*
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
100 .hg/store/data/file.d: size=132139
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
101 .hg/store/data/file.i: size=256
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
102
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
103 $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file | tail -1
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
104 data/file.i 128
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
105
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
106 The first file.i entry should match the "Reference size" above.
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
107 The first file.d entry is the temporary record during the split,
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
108
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
109 The second entry after the split happened. The sum of the second file.d
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
110 and the second file.i entry should match the first file.i entry.
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
111
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
112 $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
113 data/file.i 1174
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
114 data/file.d 0
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
115 data/file.d 1046
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
116 data/file.i 128
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
117 $ hg recover
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
118 rolling back interrupted transaction
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
119 (verify step skipped, run `hg verify` to check your repository content)
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
120 $ f -s .hg/store/data/file*
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
121 .hg/store/data/file.d: size=1046
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
122 .hg/store/data/file.i: size=128
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
123 $ hg tip
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
124 changeset: 1:cfa8d6e60429
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
125 tag: tip
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
126 user: test
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
127 date: Thu Jan 01 00:00:00 1970 +0000
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
128 summary: b
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
129
47874
308e843f24b1 test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47561
diff changeset
130 $ hg verify -q
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
131 warning: revlog 'data/file.d' not in fncache!
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
132 1 warnings encountered!
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
133 hint: run "hg debugrebuildfncache" to recover from corrupt fncache
47875
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47874
diff changeset
134 $ hg debugrebuildfncache --only-data
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47874
diff changeset
135 adding data/file.d
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47874
diff changeset
136 1 items added, 0 removed from fncache
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47874
diff changeset
137 $ hg verify -q
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
138 $ cd ..
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
139
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
140 Test a hard crash right before the index is move into place
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
141 ===========================================================
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
142
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
143 Now retry the procedure but intercept the rename of the index and check that
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
144 the journal does not contain the new index size. This demonstrates the edge case
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
145 where the data file is left as garbage.
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
146
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
147 $ hg clone --quiet --rev 1 troffset-computation troffset-computation-copy2
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
148 $ cd troffset-computation-copy2
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
149
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
150 Reference size:
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
151 $ f -s file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
152 file: size=1024
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
153 $ f -s .hg/store/data/file*
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
154 .hg/store/data/file.i: size=1174
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
155
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
156 $ cat > .hg/hgrc <<EOF
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
157 > [extensions]
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
158 > intercept_rename = $TESTTMP/intercept_before_rename.py
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
159 > [hooks]
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
160 > pretxnchangegroup = python:$TESTTMP/killme.py:killme
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
161 > EOF
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
162 #if chg
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
163 $ hg pull ../troffset-computation
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
164 pulling from ../troffset-computation
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
165 [255]
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
166 #else
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
167 $ hg pull ../troffset-computation
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
168 pulling from ../troffset-computation
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
169 Killed
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
170 [137]
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
171 #endif
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
172
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
173 The data file is created, but the revlog is still inline
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
174
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
175 $ f -s .hg/store/data/file*
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
176 .hg/store/data/file.d: size=132139
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
177 .hg/store/data/file.i: size=132395
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
178
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
179 $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
180 data/file.i 1174
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
181 data/file.d 0
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
182 data/file.d 1046
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
183
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
184 $ hg recover
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
185 rolling back interrupted transaction
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
186 (verify step skipped, run `hg verify` to check your repository content)
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
187 $ f -s .hg/store/data/file*
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
188 .hg/store/data/file.d: size=1046
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
189 .hg/store/data/file.i: size=1174
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
190 $ hg tip
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
191 changeset: 1:cfa8d6e60429
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
192 tag: tip
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
193 user: test
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
194 date: Thu Jan 01 00:00:00 1970 +0000
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
195 summary: b
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
196
47874
308e843f24b1 test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47561
diff changeset
197 $ hg verify -q
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
198 $ cd ..
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
199
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
200 Have the transaction rollback itself without any hard crash
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
201 ===========================================================
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
202
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
203
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
204 Repeat the original test but let hg rollback the transaction.
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
205
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
206 $ hg clone --quiet --rev 1 troffset-computation troffset-computation-copy-rb
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
207 $ cd troffset-computation-copy-rb
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
208 $ cat > .hg/hgrc <<EOF
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
209 > [hooks]
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
210 > pretxnchangegroup = false
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
211 > EOF
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
212 $ hg pull ../troffset-computation
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
213 pulling from ../troffset-computation
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
214 searching for changes
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
215 adding changesets
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
216 adding manifests
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
217 adding file changes
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
218 transaction abort!
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
219 rollback completed
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
220 abort: pretxnchangegroup hook exited with status 1
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
221 [40]
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
222
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
223 File are still split on disk, with the expected size.
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
224
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
225 $ f -s .hg/store/data/file*
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
226 .hg/store/data/file.d: size=1046
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
227 .hg/store/data/file.i: size=128
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
228
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
229 $ hg tip
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
230 changeset: 1:cfa8d6e60429
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
231 tag: tip
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
232 user: test
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
233 date: Thu Jan 01 00:00:00 1970 +0000
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
234 summary: b
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
235
47874
308e843f24b1 test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47561
diff changeset
236 $ hg verify -q
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
237 warning: revlog 'data/file.d' not in fncache!
48571
ccd9cb73125c revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48570
diff changeset
238 1 warnings encountered!
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
239 hint: run "hg debugrebuildfncache" to recover from corrupt fncache
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
240 $ cd ..
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
241