author | Pierre-Yves David <pierre-yves.david@octobus.net> |
Thu, 16 Mar 2023 21:04:52 +0100 | |
branch | stable |
changeset 50312 | c185545a4c69 |
parent 50311 | e2ba2234bf1c |
child 50313 | b0cdd0bea103 |
permissions | -rw-r--r-- |
47295
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:
48355
diff
changeset
|
4 |
Helper extension to intercept renames and kill process |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
5 |
|
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
6 |
$ cat > $TESTTMP/intercept_before_rename.py << EOF |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
7 |
> import os |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
8 |
> import signal |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
9 |
> from mercurial import extensions, util |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
10 |
> |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
11 |
> def extsetup(ui): |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
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:
47325
diff
changeset
|
13 |
> path = util.normpath(args[0]._atomictempfile__name) |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
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:
48355
diff
changeset
|
15 |
> os.kill(os.getpid(), signal.SIGKILL) |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
16 |
> return orig(*args, **kwargs) |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
17 |
> extensions.wrapfunction(util.atomictempfile, 'close', close) |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
18 |
> EOF |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
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:
48355
diff
changeset
|
35 |
$ cat > $TESTTMP/killme.py << EOF |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
36 |
> import os |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
37 |
> import signal |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
38 |
> |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
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:
48355
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:
48355
diff
changeset
|
41 |
> EOF |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
42 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
43 |
setup a repository for tests |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
44 |
---------------------------- |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
45 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
46 |
$ cat >> $HGRCPATH << EOF |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
47 |
> [format] |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
48 |
> revlog-compression=none |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
49 |
> EOF |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
50 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
51 |
$ hg init troffset-computation |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
52 |
$ cd troffset-computation |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
53 |
$ printf '%20d' '1' > file |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
54 |
$ hg commit -Aqma |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
55 |
$ printf '%1024d' '1' > file |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
56 |
$ hg commit -Aqmb |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
57 |
$ printf '%20d' '1' > file |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
58 |
$ hg commit -Aqmc |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
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:
48355
diff
changeset
|
60 |
$ hg commit -AqmD |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
61 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
62 |
Reference size: |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
63 |
$ f -s file |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
64 |
file: size=131072 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
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:
48355
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:
48355
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:
48355
diff
changeset
|
68 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
69 |
$ cd .. |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
70 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
71 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
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:
48355
diff
changeset
|
73 |
=================================================================================== |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
74 |
|
48354
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47916
diff
changeset
|
75 |
Test offset computation to correctly factor in the index entries themselves. |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
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:
47295
diff
changeset
|
77 |
after the index has been replaced. |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
78 |
|
48354
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47916
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:
47916
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:
47916
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:
47916
diff
changeset
|
82 |
|
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47916
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:
47916
diff
changeset
|
84 |
but truncate the index and the data to remove both c and D. |
47295
21ed126bab53
revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff
changeset
|
85 |
|
48354
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47916
diff
changeset
|
86 |
|
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
87 |
$ hg clone --quiet --rev 1 troffset-computation troffset-computation-copy |
47295
21ed126bab53
revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff
changeset
|
88 |
$ cd troffset-computation-copy |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
89 |
|
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
90 |
Reference size: |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
91 |
$ f -s file |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
92 |
file: size=1024 |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
93 |
$ f -s .hg/store/data/file* |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
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:
47295
diff
changeset
|
95 |
|
47295
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:
48355
diff
changeset
|
98 |
> pretxnchangegroup = python:$TESTTMP/killme.py:killme |
47295
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:
48355
diff
changeset
|
107 |
Killed |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
108 |
[137] |
47295
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:
48355
diff
changeset
|
110 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
111 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
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:
48355
diff
changeset
|
113 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
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:
48355
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:
48355
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:
48355
diff
changeset
|
117 |
|
47295
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 |
48355
ccd9cb73125c
revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
119 |
data/file.i 128 |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
120 |
|
48354
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47916
diff
changeset
|
121 |
The first file.i entry should match the "Reference size" above. |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
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:
48355
diff
changeset
|
123 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
124 |
The second entry after the split happened. The sum of the second file.d |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
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:
47295
diff
changeset
|
126 |
|
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
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:
47295
diff
changeset
|
128 |
data/file.i 1174 |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
129 |
data/file.d 0 |
48355
ccd9cb73125c
revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
130 |
data/file.d 1046 |
ccd9cb73125c
revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
131 |
data/file.i 128 |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
132 |
$ hg recover |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
133 |
rolling back interrupted transaction |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
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:
47296
diff
changeset
|
135 |
$ f -s .hg/store/data/file* |
48355
ccd9cb73125c
revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
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:
48354
diff
changeset
|
137 |
.hg/store/data/file.i: size=128 |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
138 |
$ hg tip |
48354
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47916
diff
changeset
|
139 |
changeset: 1:cfa8d6e60429 |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
140 |
tag: tip |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
141 |
user: test |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
142 |
date: Thu Jan 01 00:00:00 1970 +0000 |
48354
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47916
diff
changeset
|
143 |
summary: b |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
144 |
|
47915
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 |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
146 |
warning: revlog 'data/file.d' not in fncache! |
48355
ccd9cb73125c
revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
147 |
1 warnings encountered! |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
148 |
hint: run "hg debugrebuildfncache" to recover from corrupt fncache |
47916
0fb328bb2459
debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
47915
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:
47915
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:
47915
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:
47915
diff
changeset
|
152 |
$ hg verify -q |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
153 |
$ cd .. |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
154 |
|
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
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:
48355
diff
changeset
|
156 |
=========================================================== |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
157 |
|
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
158 |
Now retry the procedure but intercept the rename of the index and check that |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
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:
47295
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:
47295
diff
changeset
|
161 |
|
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
162 |
$ hg clone --quiet --rev 1 troffset-computation troffset-computation-copy2 |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
163 |
$ cd troffset-computation-copy2 |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
164 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
165 |
Reference size: |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
166 |
$ f -s file |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
167 |
file: size=1024 |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
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:
48355
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:
48355
diff
changeset
|
170 |
|
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
171 |
$ cat > .hg/hgrc <<EOF |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
172 |
> [extensions] |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
173 |
> intercept_rename = $TESTTMP/intercept_before_rename.py |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
174 |
> [hooks] |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
175 |
> pretxnchangegroup = python:$TESTTMP/killme.py:killme |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
176 |
> EOF |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
177 |
#if chg |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
178 |
$ hg pull ../troffset-computation |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
179 |
pulling from ../troffset-computation |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
180 |
[255] |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
181 |
#else |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
182 |
$ hg pull ../troffset-computation |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
183 |
pulling from ../troffset-computation |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
184 |
Killed |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
185 |
[137] |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
186 |
#endif |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
187 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
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:
48355
diff
changeset
|
189 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
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:
48355
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:
48355
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:
48355
diff
changeset
|
193 |
|
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
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:
47295
diff
changeset
|
195 |
data/file.i 1174 |
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
196 |
data/file.d 0 |
48355
ccd9cb73125c
revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
197 |
data/file.d 1046 |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
198 |
|
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
199 |
$ hg recover |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
200 |
rolling back interrupted transaction |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
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:
47296
diff
changeset
|
202 |
$ f -s .hg/store/data/file* |
48355
ccd9cb73125c
revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
203 |
.hg/store/data/file.d: size=1046 |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
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:
47296
diff
changeset
|
205 |
$ hg tip |
48354
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47916
diff
changeset
|
206 |
changeset: 1:cfa8d6e60429 |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
207 |
tag: tip |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
208 |
user: test |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
209 |
date: Thu Jan 01 00:00:00 1970 +0000 |
48354
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47916
diff
changeset
|
210 |
summary: b |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
211 |
|
47915
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 |
47296
46b828b85eb7
revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents:
47295
diff
changeset
|
213 |
$ cd .. |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
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:
48355
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:
48355
diff
changeset
|
295 |
=========================================================== |
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
296 |
|
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
297 |
|
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
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:
47296
diff
changeset
|
299 |
|
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
300 |
$ hg clone --quiet --rev 1 troffset-computation troffset-computation-copy-rb |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
301 |
$ cd troffset-computation-copy-rb |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
302 |
$ cat > .hg/hgrc <<EOF |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
303 |
> [hooks] |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
304 |
> pretxnchangegroup = false |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
305 |
> EOF |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
306 |
$ hg pull ../troffset-computation |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
307 |
pulling from ../troffset-computation |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
308 |
searching for changes |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
309 |
adding changesets |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
310 |
adding manifests |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
311 |
adding file changes |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
312 |
transaction abort! |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
313 |
rollback completed |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
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:
47296
diff
changeset
|
315 |
[40] |
50311
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
diff
changeset
|
316 |
|
e2ba2234bf1c
revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48355
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:
48355
diff
changeset
|
318 |
|
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
319 |
$ f -s .hg/store/data/file* |
48355
ccd9cb73125c
revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
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:
48354
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:
48355
diff
changeset
|
322 |
|
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
323 |
$ hg tip |
48354
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47916
diff
changeset
|
324 |
changeset: 1:cfa8d6e60429 |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
325 |
tag: tip |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
326 |
user: test |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
327 |
date: Thu Jan 01 00:00:00 1970 +0000 |
48354
f38ae2d7390e
revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
47916
diff
changeset
|
328 |
summary: b |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
329 |
|
47915
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 |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
331 |
warning: revlog 'data/file.d' not in fncache! |
48355
ccd9cb73125c
revlog: fix a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
48354
diff
changeset
|
332 |
1 warnings encountered! |
47297
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
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:
47296
diff
changeset
|
334 |
$ cd .. |
18415fc918a1
recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents:
47296
diff
changeset
|
335 |