Mercurial > hg
annotate tests/test-transaction-rollback-on-revlog-split.t @ 50312:c185545a4c69 stable
revlog: add a failing variant of the the split + transaction test
We have another variant to tests, and it is crashing… So lets cover it with
tests.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 16 Mar 2023 21:04:52 +0100 |
parents | e2ba2234bf1c |
children | b0cdd0bea103 |
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 |
50312
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
20 $ cat > $TESTTMP/intercept_after_rename.py << EOF |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
21 > import os |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
22 > import signal |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
23 > from mercurial import extensions, util |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
24 > |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
25 > def extsetup(ui): |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
26 > def close(orig, *args, **kwargs): |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
27 > path = util.normpath(args[0]._atomictempfile__name) |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
28 > r = orig(*args, **kwargs) |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
29 > if path.endswith(b'/.hg/store/data/file.i'): |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
30 > os.kill(os.getpid(), signal.SIGKILL) |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
31 > return r |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
32 > extensions.wrapfunction(util.atomictempfile, 'close', close) |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
33 > EOF |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
34 |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
35 $ cat > $TESTTMP/killme.py << EOF |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
36 > import os |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
37 > import signal |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
38 > |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
39 > 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
|
40 > 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
|
41 > EOF |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
42 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
43 setup a repository for tests |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
44 ---------------------------- |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
45 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
46 $ cat >> $HGRCPATH << EOF |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
47 > [format] |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
48 > revlog-compression=none |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
49 > EOF |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
50 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
51 $ hg init troffset-computation |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
52 $ cd troffset-computation |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
53 $ printf '%20d' '1' > file |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
54 $ hg commit -Aqma |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
55 $ printf '%1024d' '1' > file |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
56 $ hg commit -Aqmb |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
57 $ printf '%20d' '1' > file |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
58 $ hg commit -Aqmc |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
59 $ 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
|
60 $ hg commit -AqmD |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
61 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
62 Reference size: |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
63 $ f -s file |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
64 file: size=131072 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
65 $ 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
|
66 .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
|
67 .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
|
68 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
69 $ cd .. |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
70 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
71 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
72 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
|
73 =================================================================================== |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
74 |
48570
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47875
diff
changeset
|
75 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
|
76 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
|
77 after the index has been replaced. |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
78 |
48570
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47875
diff
changeset
|
79 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
|
80 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
|
81 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
|
82 |
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47875
diff
changeset
|
83 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
|
84 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
|
85 |
48570
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47875
diff
changeset
|
86 |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
87 $ 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
|
88 $ cd troffset-computation-copy |
47285
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
89 |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
90 Reference size: |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
91 $ f -s file |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
92 file: size=1024 |
47285
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
93 $ f -s .hg/store/data/file* |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
94 .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
|
95 |
47284
21ed126bab53
revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff
changeset
|
96 $ cat > .hg/hgrc <<EOF |
21ed126bab53
revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff
changeset
|
97 > [hooks] |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
98 > 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
|
99 > EOF |
21ed126bab53
revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff
changeset
|
100 #if chg |
21ed126bab53
revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff
changeset
|
101 $ hg pull ../troffset-computation |
21ed126bab53
revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff
changeset
|
102 pulling from ../troffset-computation |
21ed126bab53
revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff
changeset
|
103 [255] |
21ed126bab53
revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff
changeset
|
104 #else |
21ed126bab53
revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff
changeset
|
105 $ hg pull ../troffset-computation |
21ed126bab53
revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff
changeset
|
106 pulling from ../troffset-computation |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
107 Killed |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
108 [137] |
47284
21ed126bab53
revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff
changeset
|
109 #endif |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
110 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
111 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
112 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
|
113 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
114 $ 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
|
115 .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
|
116 .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
|
117 |
47284
21ed126bab53
revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff
changeset
|
118 $ 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
|
119 data/file.i 128 |
47285
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
120 |
48570
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47875
diff
changeset
|
121 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
|
122 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
|
123 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
124 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
|
125 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
|
126 |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
127 $ 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
|
128 data/file.i 1174 |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
129 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
|
130 data/file.d 1046 |
ccd9cb73125c
revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48570
diff
changeset
|
131 data/file.i 128 |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
132 $ hg recover |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
133 rolling back interrupted transaction |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
134 (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
|
135 $ 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
|
136 .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
|
137 .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
|
138 $ hg tip |
48570
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47875
diff
changeset
|
139 changeset: 1:cfa8d6e60429 |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
140 tag: tip |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
141 user: test |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
142 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
|
143 summary: b |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
144 |
47874
308e843f24b1
test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
47561
diff
changeset
|
145 $ hg verify -q |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
146 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
|
147 1 warnings encountered! |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
148 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
|
149 $ 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
|
150 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
|
151 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
|
152 $ hg verify -q |
47285
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
153 $ cd .. |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
154 |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
155 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
|
156 =========================================================== |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
157 |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
158 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
|
159 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
|
160 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
|
161 |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
162 $ 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
|
163 $ cd troffset-computation-copy2 |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
164 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
165 Reference size: |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
166 $ f -s file |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
167 file: size=1024 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
168 $ 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
|
169 .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
|
170 |
47285
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
171 $ cat > .hg/hgrc <<EOF |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
172 > [extensions] |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
173 > 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
|
174 > [hooks] |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
175 > 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
|
176 > EOF |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
177 #if chg |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
178 $ hg pull ../troffset-computation |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
179 pulling from ../troffset-computation |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
180 [255] |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
181 #else |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
182 $ hg pull ../troffset-computation |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
183 pulling from ../troffset-computation |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
184 Killed |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
185 [137] |
47285
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
186 #endif |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
187 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
188 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
|
189 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
190 $ 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
|
191 .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
|
192 .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
|
193 |
47285
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
194 $ 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
|
195 data/file.i 1174 |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
196 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
|
197 data/file.d 1046 |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
198 |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
199 $ hg recover |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
200 rolling back interrupted transaction |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
201 (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
|
202 $ 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
|
203 .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
|
204 .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
|
205 $ hg tip |
48570
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47875
diff
changeset
|
206 changeset: 1:cfa8d6e60429 |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
207 tag: tip |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
208 user: test |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
209 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
|
210 summary: b |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
211 |
47874
308e843f24b1
test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
47561
diff
changeset
|
212 $ hg verify -q |
47285
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47284
diff
changeset
|
213 $ cd .. |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
214 |
50312
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
215 Test a hard crash right after the index is move into place |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
216 =========================================================== |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
217 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
218 Now retry the procedure but intercept the rename of the index. |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
219 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
220 Things get corrupted /o\ |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
221 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
222 $ hg clone --quiet --rev 1 troffset-computation troffset-computation-crash-after-rename |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
223 $ cd troffset-computation-crash-after-rename |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
224 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
225 Reference size: |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
226 $ f -s file |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
227 file: size=1024 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
228 $ f -s .hg/store/data/file* |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
229 .hg/store/data/file.i: size=1174 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
230 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
231 $ cat > .hg/hgrc <<EOF |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
232 > [extensions] |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
233 > intercept_rename = $TESTTMP/intercept_after_rename.py |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
234 > [hooks] |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
235 > pretxnchangegroup = python:$TESTTMP/killme.py:killme |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
236 > EOF |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
237 #if chg |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
238 $ hg pull ../troffset-computation |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
239 pulling from ../troffset-computation |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
240 [255] |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
241 #else |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
242 $ hg pull ../troffset-computation |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
243 pulling from ../troffset-computation |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
244 Killed |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
245 [137] |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
246 #endif |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
247 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
248 the revlog has been split on disk |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
249 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
250 $ f -s .hg/store/data/file* |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
251 .hg/store/data/file.d: size=132139 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
252 .hg/store/data/file.i: size=256 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
253 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
254 $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
255 data/file.i 1174 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
256 data/file.d 0 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
257 data/file.d 1046 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
258 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
259 $ hg recover |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
260 rolling back interrupted transaction |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
261 abort: attempted to truncate data/file.i to 1174 bytes, but it was already 256 bytes |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
262 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
263 [255] |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
264 $ f -s .hg/store/data/file* |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
265 .hg/store/data/file.d: size=1046 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
266 .hg/store/data/file.i: size=256 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
267 $ hg tip |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
268 changeset: 1:cfa8d6e60429 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
269 tag: tip |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
270 user: test |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
271 date: Thu Jan 01 00:00:00 1970 +0000 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
272 summary: b |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
273 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
274 $ hg verify -q |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
275 abandoned transaction found - run hg recover |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
276 warning: revlog 'data/file.d' not in fncache! |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
277 file@0: data length off by -131093 bytes |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
278 file@2: unpacking fa1120531cc1: partial read of revlog data/file.d; expected 21 bytes from offset 1046, got 0 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
279 file@3: unpacking a631378adaa3: partial read of revlog data/file.d; expected 131072 bytes from offset 1067, got -21 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
280 file@?: rev 2 points to nonexistent changeset 2 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
281 (expected ) |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
282 file@?: fa1120531cc1 not in manifests |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
283 file@?: rev 3 points to nonexistent changeset 3 |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
284 (expected ) |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
285 file@?: a631378adaa3 not in manifests |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
286 not checking dirstate because of previous errors |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
287 3 warnings encountered! |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
288 hint: run "hg debugrebuildfncache" to recover from corrupt fncache |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
289 7 integrity errors encountered! |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
290 (first damaged changeset appears to be 0) |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
291 [1] |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
292 $ cd .. |
c185545a4c69
revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50311
diff
changeset
|
293 |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
294 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
|
295 =========================================================== |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
296 |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
297 |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
298 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
|
299 |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
300 $ 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
|
301 $ cd troffset-computation-copy-rb |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
302 $ cat > .hg/hgrc <<EOF |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
303 > [hooks] |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
304 > pretxnchangegroup = false |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
305 > EOF |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
306 $ hg pull ../troffset-computation |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
307 pulling from ../troffset-computation |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
308 searching for changes |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
309 adding changesets |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
310 adding manifests |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
311 adding file changes |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
312 transaction abort! |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
313 rollback completed |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
314 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
|
315 [40] |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
316 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48571
diff
changeset
|
317 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
|
318 |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
319 $ 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
|
320 .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
|
321 .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
|
322 |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
323 $ hg tip |
48570
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47875
diff
changeset
|
324 changeset: 1:cfa8d6e60429 |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
325 tag: tip |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
326 user: test |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
327 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
|
328 summary: b |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
329 |
47874
308e843f24b1
test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
47561
diff
changeset
|
330 $ hg verify -q |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
331 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
|
332 1 warnings encountered! |
47286
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
333 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
|
334 $ cd .. |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47285
diff
changeset
|
335 |