annotate tests/test-transaction-rollback-on-revlog-split.t @ 50751:0a55206c5a1e

branching: merge stable into default
author Raphaël Gomès <rgomes@octobus.net>
date Thu, 06 Jul 2023 16:07:34 +0200
parents a41eeb877d07
children 5c3d07950bac 5d77a6f37fe1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
1 Test correctness of revlog inline -> non-inline transition
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
2 ----------------------------------------------------------
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
3
50366
a445194f0a4d backup: fix issue when the backup end up in a different directory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50364
diff changeset
4 We test various file length and naming pattern as this created issue in the
a445194f0a4d backup: fix issue when the backup end up in a different directory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50364
diff changeset
5 past.
a445194f0a4d backup: fix issue when the backup end up in a different directory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50364
diff changeset
6
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
7 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
8
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
9 $ 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
10 > import os
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
11 > import signal
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
12 > from mercurial import extensions, util
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
13 >
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
14 > def extsetup(ui):
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
15 > def rename(orig, src, dest, *args, **kwargs):
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
16 > path = util.normpath(dest)
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
17 > if path.endswith(b'data/file.i'):
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
18 > os.kill(os.getpid(), signal.SIGKILL)
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
19 > return orig(src, dest, *args, **kwargs)
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
20 > extensions.wrapfunction(util, 'rename', rename)
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
21 > EOF
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
22
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
23 $ 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
24 > 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
25 > 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
26 > 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
27 >
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 > 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
29 > 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
30 > 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
31 > 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
32 > 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
33 > 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
34 > 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
35 > extensions.wrapfunction(util.atomictempfile, 'close', close)
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
36 > def extsetup(ui):
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
37 > def rename(orig, src, dest, *args, **kwargs):
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
38 > path = util.normpath(dest)
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
39 > r = orig(src, dest, *args, **kwargs)
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
40 > if path.endswith(b'data/file.i'):
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
41 > os.kill(os.getpid(), signal.SIGKILL)
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
42 > return r
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
43 > extensions.wrapfunction(util, 'rename', rename)
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
44 > 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
45
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
46 $ cat > $TESTTMP/killme.py << EOF
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
47 > import os
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
48 > import signal
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
49 >
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
50 > 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
51 > 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
52 > EOF
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
53
50313
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
54 $ cat > $TESTTMP/reader_wait_split.py << EOF
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
55 > import os
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
56 > import signal
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
57 > from mercurial import extensions, revlog, testing
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
58 > def _wait_post_load(orig, self, *args, **kwargs):
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
59 > wait = b'data/file' in self.radix
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
60 > if wait:
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
61 > testing.wait_file(b"$TESTTMP/writer-revlog-split")
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
62 > r = orig(self, *args, **kwargs)
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
63 > if wait:
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
64 > testing.write_file(b"$TESTTMP/reader-index-read")
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
65 > testing.wait_file(b"$TESTTMP/writer-revlog-unsplit")
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
66 > return r
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
67 >
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
68 > def extsetup(ui):
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
69 > extensions.wrapfunction(revlog.revlog, '_loadindex', _wait_post_load)
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
70 > EOF
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
71
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
72 setup a repository for tests
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
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
75 $ cat >> $HGRCPATH << EOF
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
76 > [format]
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
77 > revlog-compression=none
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
78 > EOF
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
79
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
80 $ hg init troffset-computation
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
81 $ cd troffset-computation
50364
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
82 $ files="
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
83 > file
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
84 > Directory_With,Special%Char/Complex_File.babar
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
85 > foo/bar/babar_celeste/foo
50366
a445194f0a4d backup: fix issue when the backup end up in a different directory
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50364
diff changeset
86 > 1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/1234567890/f
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
87 > some_dir/sub_dir/foo_bar
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
88 > some_dir/sub_dir/foo_bar.i.s/tutu
50364
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
89 > "
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
90 $ for f in $files; do
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
91 > mkdir -p `dirname $f`
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
92 > done
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
93 $ for f in $files; do
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
94 > printf '%20d' '1' > $f
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
95 > done
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
96 $ hg commit -Aqma
50364
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
97 $ for f in $files; do
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
98 > printf '%1024d' '1' > $f
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
99 > done
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
100 $ hg commit -Aqmb
50364
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
101 $ for f in $files; do
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
102 > printf '%20d' '1' > $f
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
103 > done
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
104 $ hg commit -Aqmc
50364
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
105 $ for f in $files; do
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
106 > dd if=/dev/zero of=$f bs=1k count=128 > /dev/null 2>&1
f930af431193 revlog: test more complex file pattern for revlog split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50334
diff changeset
107 > done
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
108 $ hg commit -AqmD --traceback
50642
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
109 $ for f in $files; do
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
110 > dd if=/dev/zero of=$f bs=1k count=132 > /dev/null 2>&1
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
111 > done
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
112 $ hg commit -AqmD --traceback
50311
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 Reference size:
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
115 $ f -s file
50642
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
116 file: size=135168
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
117 $ f -s .hg/store/data*/file*
50642
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
118 .hg/store/data/file.d: size=267307
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
119 .hg/store/data/file.i: size=320
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
120
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
121 $ cd ..
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
122
50686
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
123 Test a succesful pull
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
124 =====================
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
125
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
126 Make sure everything goes though as expect if we don't do any crash
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
127
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
128 $ hg clone --quiet --rev 1 troffset-computation troffset-success
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
129 $ cd troffset-success
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
130
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
131 Reference size:
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
132 $ f -s file
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
133 file: size=1024
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
134 $ f -s .hg/store/data/file*
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
135 .hg/store/data/file.i: size=1174
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
136
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
137 $ hg pull ../troffset-computation
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
138 pulling from ../troffset-computation
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
139 searching for changes
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
140 adding changesets
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
141 adding manifests
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
142 adding file changes
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
143 added 3 changesets with 18 changes to 6 files
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
144 new changesets c99a94cae9b1:64874a3b0160
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
145 (run 'hg update' to get a working copy)
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
146
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
147
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
148 The inline revlog has been replaced
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
149
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
150 $ f -s .hg/store/data/file*
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
151 .hg/store/data/file.d: size=267307
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
152 .hg/store/data/file.i: size=320
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
153
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
154
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
155 $ hg verify -q
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
156 $ cd ..
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
157
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
158
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
159 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
160 ===================================================================================
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
161
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
162 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
163 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
164 after the index has been replaced.
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
165
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
166 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
167 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
168 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
169
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
170 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
171 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
172
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
173
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
174 $ 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
175 $ cd troffset-computation-copy
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
176
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
177 Reference size:
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
178 $ f -s file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
179 file: size=1024
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
180 $ f -s .hg/store/data*/file*
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
181 .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
182
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
183 $ cat > .hg/hgrc <<EOF
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
184 > [hooks]
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
185 > 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
186 > EOF
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
187 #if chg
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
188 $ hg pull ../troffset-computation
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
189 pulling from ../troffset-computation
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
190 [255]
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
191 #else
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
192 $ hg pull ../troffset-computation
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
193 pulling from ../troffset-computation
50334
2231f7d8a602 test-tx-rollback: more lenient glob for kill status (issue6807)
pacien <pacien.trangirard@pacien.net>
parents: 50316
diff changeset
194 *Killed* (glob)
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
195 [137]
47284
21ed126bab53 revlog: fix index computation during inline->non-inline transition
Joerg Sonnenberger <joerg@bec.de>
parents:
diff changeset
196 #endif
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
197
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
198
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
199 The inline revlog still exist, but a split version exist next to it
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
200
50642
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
201 $ cat .hg/store/journal | tr '\0' ' ' | grep '\.s'
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
202 data/some_dir/sub_dir/foo_bar.i.s/tutu.i 1174
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
203 data/some_dir/sub_dir/foo_bar.i.s/tutu.d 0
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
204 $ f -s .hg/store/data*/file*
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
205 .hg/store/data-s/file: size=320
50642
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
206 .hg/store/data/file.d: size=267307
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
207 .hg/store/data/file.i: size=132395
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
208
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
209
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
210 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
211 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
212
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
213 A "temporary file" entry exist for the split index.
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
214
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
215 $ 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
216 data/file.i 1174
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
217 data/file.d 0
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
218 $ cat .hg/store/journal.backupfiles | tr -s '\000' ' ' | tr -s '\00' ' '| grep 'data.*/file'
50686
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
219 data/file.i data/journal.backup.file.i.bck 0
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
220 data-s/file 0
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
221
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
222 recover is rolling the split back, the fncache is still valid
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
223
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
224 $ hg recover
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
225 rolling back interrupted transaction
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
226 (verify step skipped, run `hg verify` to check your repository content)
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
227 $ f -s .hg/store/data*/file*
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
228 .hg/store/data/file.i: size=1174
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
229 $ hg tip
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
230 changeset: 1:64b04c8dc267
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
231 tag: tip
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
232 user: test
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
233 date: Thu Jan 01 00:00:00 1970 +0000
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
234 summary: b
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
235
47874
308e843f24b1 test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47561
diff changeset
236 $ hg verify -q
47875
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47874
diff changeset
237 $ hg debugrebuildfncache --only-data
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
238 fncache already up to date
47875
0fb328bb2459 debugrebuildfncache: add a cheaper option to rebuild the fncache
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47874
diff changeset
239 $ hg verify -q
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
240 $ cd ..
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
241
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
242 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
243 ===========================================================
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
244
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
245 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
246 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
247 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
248
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
249 $ 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
250 $ cd troffset-computation-copy2
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
251
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
252 Reference size:
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
253 $ f -s file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
254 file: size=1024
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
255 $ f -s .hg/store/data*/file*
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
256 .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
257
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
258 $ cat > .hg/hgrc <<EOF
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
259 > [extensions]
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
260 > 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
261 > EOF
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
262 #if chg
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
263 $ hg pull ../troffset-computation
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
264 pulling from ../troffset-computation
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
265 searching for changes
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
266 adding changesets
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
267 adding manifests
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
268 adding file changes
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
269 [255]
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
270 #else
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
271 $ hg pull ../troffset-computation
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
272 pulling from ../troffset-computation
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
273 searching for changes
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
274 adding changesets
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
275 adding manifests
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
276 adding file changes
50334
2231f7d8a602 test-tx-rollback: more lenient glob for kill status (issue6807)
pacien <pacien.trangirard@pacien.net>
parents: 50316
diff changeset
277 *Killed* (glob)
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
278 [137]
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
279 #endif
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
280
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
281 The inline revlog still exist, but a split version exist next to it
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
282
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
283 $ f -s .hg/store/data*/file*
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
284 .hg/store/data-s/file: size=320
50642
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
285 .hg/store/data/file.d: size=267307
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
286 .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
287
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
288 $ cat .hg/store/journal | tr -s '\000' ' ' | grep 'data.*/file'
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
289 data/file.i 1174
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
290 data/file.d 0
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
291
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
292 recover is rolling the split back, the fncache is still valid
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
293
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
294 $ hg recover
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
295 rolling back interrupted transaction
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
296 (verify step skipped, run `hg verify` to check your repository content)
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
297 $ f -s .hg/store/data*/file*
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
298 .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
299 $ hg tip
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
300 changeset: 1:64b04c8dc267
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
301 tag: tip
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
302 user: test
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
303 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
304 summary: b
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
305
47874
308e843f24b1 test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47561
diff changeset
306 $ hg verify -q
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
307 $ cd ..
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
308
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
309 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
310 ===========================================================
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50311
diff changeset
311
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50311
diff changeset
312 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
313
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50311
diff changeset
314 $ 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
315 $ 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
316
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50311
diff changeset
317 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
318 $ 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
319 file: size=1024
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
320 $ f -s .hg/store/data*/file*
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
321 .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
322
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50311
diff changeset
323 $ 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
324 > [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
325 > 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
326 > 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
327 #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
328 $ 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
329 pulling from ../troffset-computation
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
330 searching for changes
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
331 adding changesets
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
332 adding manifests
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
333 adding file changes
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
334 [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
335 #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
336 $ 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
337 pulling from ../troffset-computation
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
338 searching for changes
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
339 adding changesets
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
340 adding manifests
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
341 adding file changes
50334
2231f7d8a602 test-tx-rollback: more lenient glob for kill status (issue6807)
pacien <pacien.trangirard@pacien.net>
parents: 50316
diff changeset
342 *Killed* (glob)
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
343 [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
344 #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
345
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
346 The inline revlog was over written on disk
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
347
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
348 $ f -s .hg/store/data*/file*
50642
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
349 .hg/store/data/file.d: size=267307
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
350 .hg/store/data/file.i: size=320
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
351
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
352 $ cat .hg/store/journal | tr -s '\000' ' ' | grep 'data.*/file'
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
353 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
354 data/file.d 0
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
355
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
356 recover is rolling the split back, the fncache is still valid
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
357
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50311
diff changeset
358 $ 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
359 rolling back interrupted transaction
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
360 (verify step skipped, run `hg verify` to check your repository content)
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
361 $ f -s .hg/store/data*/file*
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
362 .hg/store/data/file.i: size=1174
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
363 $ hg tip
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
364 changeset: 1:64b04c8dc267
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
365 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
366 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
367 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
368 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
369
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50311
diff changeset
370 $ 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
371 $ 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
372
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
373 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
374 ===========================================================
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
375
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
376
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
377 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
378
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
379 $ 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
380 $ cd troffset-computation-copy-rb
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
381 $ cat > .hg/hgrc <<EOF
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
382 > [hooks]
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
383 > pretxnchangegroup = false
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
384 > EOF
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
385 $ hg pull ../troffset-computation
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
386 pulling from ../troffset-computation
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
387 searching for changes
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
388 adding changesets
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
389 adding manifests
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
390 adding file changes
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
391 transaction abort!
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
392 rollback completed
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
393 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
394 [40]
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
395
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
396 The split was rollback
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
397
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
398 $ f -s .hg/store/data*/file*
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
399 .hg/store/data/file.d: size=0
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
400 .hg/store/data/file.i: size=1174
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
401
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
402
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
403 $ hg tip
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
404 changeset: 1:64b04c8dc267
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
405 tag: tip
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
406 user: test
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
407 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
408 summary: b
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
409
47874
308e843f24b1 test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47561
diff changeset
410 $ hg verify -q
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
411 $ cd ..
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
412
50313
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
413 Read race
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
414 =========
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
415
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
416 We check that a client that started reading a revlog (its index) after the
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
417 split and end reading (the data) after the rollback should be fine
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
418
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
419 $ hg clone --quiet --rev 1 troffset-computation troffset-computation-race
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
420 $ cd troffset-computation-race
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
421 $ cat > .hg/hgrc <<EOF
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
422 > [hooks]
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
423 > pretxnchangegroup=$RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/reader-index-read $TESTTMP/writer-revlog-split
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
424 > pretxnclose = false
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
425 > EOF
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
426
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
427 start a reader
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
428
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
429 $ hg cat --rev 0 file \
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
430 > --config "extensions.wait_read=$TESTTMP/reader_wait_split.py" \
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
431 > 2> $TESTTMP/reader.stderr \
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
432 > > $TESTTMP/reader.stdout &
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
433
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
434 Do a failed pull in //
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
435
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
436 $ hg pull ../troffset-computation
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
437 pulling from ../troffset-computation
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
438 searching for changes
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
439 adding changesets
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
440 adding manifests
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
441 adding file changes
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
442 transaction abort!
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
443 rollback completed
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
444 abort: pretxnclose hook exited with status 1
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
445 [40]
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
446 $ touch $TESTTMP/writer-revlog-unsplit
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
447 $ wait
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
448
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
449 The reader should be fine
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
450 $ cat $TESTTMP/reader.stderr
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
451 $ cat $TESTTMP/reader.stdout
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
452 1 (no-eol)
50686
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
453
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
454 $ hg verify -q
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
455
50313
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
456 $ cd ..
50314
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
457
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
458 pending hooks
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
459 =============
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
460
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
461 We checks that hooks properly see the inside of the transaction, while other process don't.
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
462
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
463 $ hg clone --quiet --rev 1 troffset-computation troffset-computation-hooks
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
464 $ cd troffset-computation-hooks
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
465 $ cat > .hg/hgrc <<EOF
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
466 > [hooks]
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
467 > pretxnclose.01-echo = hg cat -r 'max(all())' file | f --size
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
468 > pretxnclose.02-echo = $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/hook-done $TESTTMP/hook-tr-ready
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
469 > pretxnclose.03-abort = false
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
470 > EOF
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
471
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
472 $ (
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
473 > $RUNTESTDIR/testlib/wait-on-file 5 $TESTTMP/hook-tr-ready;\
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
474 > hg cat -r 'max(all())' file | f --size;\
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
475 > touch $TESTTMP/hook-done
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
476 > ) >stdout 2>stderr &
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
477
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
478 $ hg pull ../troffset-computation
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
479 pulling from ../troffset-computation
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
480 searching for changes
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
481 adding changesets
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
482 adding manifests
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
483 adding file changes
50642
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
484 size=135168
50314
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
485 transaction abort!
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
486 rollback completed
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
487 abort: pretxnclose.03-abort hook exited with status 1
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
488 [40]
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
489
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
490 $ cat stdout
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
491 size=1024
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
492 $ cat stderr
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
493
50686
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
494 $ hg verify -q
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
495
50314
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
496
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
497 $ cd ..