annotate tests/test-transaction-rollback-on-revlog-split.t @ 51522:5f9350956c03

branchcache: add more test for the logic around obsolescence and branch heads While working on branch-cache-v3, we noticed some ambiguity in the filtered+obsolete hash. However this was only caught by a rebase test by chance. It seems important to explicitly tests these cases.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 28 Feb 2024 12:56:08 +0100
parents 3ccef7902070
children 3f70ea5bcaeb
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*
50814
4a3a9d961561 revlog: fix the naming scheme use by split temporary file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50813
diff changeset
205 .hg/store/data-s/file.i: 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
50813
4ee64ff1d49f revlog: show that temporary split file use broken name scheme
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50812
diff changeset
208 $ f -s .hg/store/data*/foo*/bar*/babar__celeste*/foo*
50814
4a3a9d961561 revlog: fix the naming scheme use by split temporary file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50813
diff changeset
209 .hg/store/data-s/foo/bar/babar__celeste/foo.i: size=320
50813
4ee64ff1d49f revlog: show that temporary split file use broken name scheme
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50812
diff changeset
210 .hg/store/data/foo/bar/babar__celeste/foo.d: size=267307
4ee64ff1d49f revlog: show that temporary split file use broken name scheme
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50812
diff changeset
211 .hg/store/data/foo/bar/babar__celeste/foo.i: size=132395
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
212
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
213
48570
f38ae2d7390e revlog: demonstrate a bug where transaction can be aborted partially
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 47875
diff changeset
214 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
215 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
216
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
217 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
218
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
219 $ 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
220 data/file.i 1174
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
221 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
222 $ 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
223 data/file.i data/journal.backup.file.i.bck 0
50814
4a3a9d961561 revlog: fix the naming scheme use by split temporary file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50813
diff changeset
224 data-s/file.i 0
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
225
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
226 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
227
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
228 $ hg recover
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
229 rolling back interrupted transaction
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
230 (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
231 $ 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
232 .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
233 $ 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
234 changeset: 1:64b04c8dc267
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
235 tag: tip
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
236 user: test
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
237 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
238 summary: b
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
239
47874
308e843f24b1 test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47561
diff changeset
240 $ 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
241 $ 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
242 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
243 $ hg verify -q
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
244 $ cd ..
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
245
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
246 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
247 ===========================================================
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
248
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
249 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
250 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
251 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
252
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
253 $ 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
254 $ cd troffset-computation-copy2
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
255
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
256 Reference size:
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
257 $ f -s file
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
258 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
259 $ 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
260 .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
261
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
262 $ cat > .hg/hgrc <<EOF
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
263 > [extensions]
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
264 > 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
265 > EOF
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
266 #if chg
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
267 $ hg pull ../troffset-computation
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
268 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
269 searching for changes
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
270 adding changesets
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
271 adding manifests
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
272 adding file changes
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
273 [255]
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
274 #else
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
275 $ hg pull ../troffset-computation
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
276 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
277 searching for changes
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
278 adding changesets
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
279 adding manifests
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
280 adding file changes
50334
2231f7d8a602 test-tx-rollback: more lenient glob for kill status (issue6807)
pacien <pacien.trangirard@pacien.net>
parents: 50316
diff changeset
281 *Killed* (glob)
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
282 [137]
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
283 #endif
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
284
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
285 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
286
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
287 $ f -s .hg/store/data*/file*
50814
4a3a9d961561 revlog: fix the naming scheme use by split temporary file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50813
diff changeset
288 .hg/store/data-s/file.i: size=320
50642
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
289 .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
290 .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
291
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
292 $ 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
293 data/file.i 1174
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
294 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
295
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
296 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
297
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
298 $ hg recover
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
299 rolling back interrupted transaction
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
300 (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
301 $ 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
302 .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
303 $ 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
304 changeset: 1:64b04c8dc267
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
305 tag: tip
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
306 user: test
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
307 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
308 summary: b
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
309
47874
308e843f24b1 test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47561
diff changeset
310 $ hg verify -q
47285
46b828b85eb7 revlog: update data file record before index rename
Joerg Sonnenberger <joerg@bec.de>
parents: 47284
diff changeset
311 $ cd ..
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
312
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
313 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
314 ===========================================================
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
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 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
317
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 $ 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
319 $ 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
320
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 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
322 $ 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
323 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
324 $ 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
325 .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
326
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 $ 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
328 > [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
329 > 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
330 > 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
331 #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
332 $ 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
333 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
334 searching for changes
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
335 adding changesets
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
336 adding manifests
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
337 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
338 [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
339 #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
340 $ 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
341 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
342 searching for changes
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
343 adding changesets
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
344 adding manifests
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
345 adding file changes
50334
2231f7d8a602 test-tx-rollback: more lenient glob for kill status (issue6807)
pacien <pacien.trangirard@pacien.net>
parents: 50316
diff changeset
346 *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
347 [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
348 #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
349
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
350 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
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 $ f -s .hg/store/data*/file*
50642
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
353 .hg/store/data/file.d: size=267307
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
354 .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
355
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
356 $ 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
357 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
358 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
359
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
360 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
361
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50311
diff changeset
362 $ 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
363 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
364 (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
365 $ 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
366 .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
367 $ 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
368 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
369 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
370 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
371 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
372 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
373
c185545a4c69 revlog: add a failing variant of the the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50311
diff changeset
374 $ 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
375 $ 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
376
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
377 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
378 ===========================================================
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
379
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
380
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
381 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
382
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
383 $ 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
384 $ cd troffset-computation-copy-rb
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
385 $ cat > .hg/hgrc <<EOF
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
386 > [hooks]
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
387 > pretxnchangegroup = false
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
388 > EOF
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
389 $ hg pull ../troffset-computation
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
390 pulling from ../troffset-computation
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
391 searching for changes
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
392 adding changesets
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
393 adding manifests
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
394 adding file changes
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
395 transaction abort!
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
396 rollback completed
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
397 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
398 [40]
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
399
50316
87f0155d68aa revlog: improve the robustness of the splitting process
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50314
diff changeset
400 The split was rollback
50311
e2ba2234bf1c revlog: update the split + transaction test
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48571
diff changeset
401
50662
12f13b13f414 revlog: avoid possible collision between directory and temporary index
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50642
diff changeset
402 $ 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
403 .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
404
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
405 $ 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
406 changeset: 1:64b04c8dc267
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
407 tag: tip
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
408 user: test
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
409 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
410 summary: b
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
411
47874
308e843f24b1 test: reduce noise, so the important bits stand out
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents: 47561
diff changeset
412 $ hg verify -q
50811
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
413
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
414 $ cat > .hg/hgrc <<EOF
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
415 > [hooks]
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
416 > EOF
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
417 $ hg pull ../troffset-computation
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
418 pulling from ../troffset-computation
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
419 searching for changes
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
420 adding changesets
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
421 adding manifests
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
422 adding file changes
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
423 added 3 changesets with 18 changes to 6 files
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
424 new changesets c99a94cae9b1:64874a3b0160
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
425 (run 'hg update' to get a working copy)
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
426
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
427 $ f -s .hg/store/data*/file*
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
428 .hg/store/data/file.d: size=267307
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
429 .hg/store/data/file.i: size=320
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
430 $ hg verify -q
5d77a6f37fe1 fncache: add a test demonstrating fncache corruption
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50686
diff changeset
431
47286
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
432 $ cd ..
18415fc918a1 recover: only apply last journal record per file (issue6423)
Joerg Sonnenberger <joerg@bec.de>
parents: 47285
diff changeset
433
50313
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
434 Read race
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
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
437 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
438 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
439
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
440 $ 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
441 $ 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
442 $ 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
443 > [hooks]
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
444 > 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
445 > pretxnclose = false
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
446 > EOF
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
447
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
448 start a reader
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
449
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
450 $ 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
451 > --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
452 > 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
453 > > $TESTTMP/reader.stdout &
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
454
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
455 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
456
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
457 $ 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
458 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
459 searching for changes
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
460 adding changesets
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
461 adding manifests
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
462 adding file changes
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
463 transaction abort!
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
464 rollback completed
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
465 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
466 [40]
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
467 $ 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
468 $ wait
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
469
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
470 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
471 $ 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
472 $ 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
473 1 (no-eol)
50686
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
474
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
475 $ hg verify -q
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
476
50313
b0cdd0bea103 revlog: test possible read race condition with splitting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50312
diff changeset
477 $ 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
478
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 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
480 =============
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
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 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
483
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
484 $ 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
485 $ 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
486 $ 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
487 > [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
488 > 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
489 > 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
490 > 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
491 > 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
492
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 $ (
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
494 > $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
495 > 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
496 > 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
497 > ) >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
498
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
499 $ 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
500 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
501 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
502 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
503 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
504 adding file changes
50642
05d429fe84ed revlog: fix a bug in revlog splitting
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 50366
diff changeset
505 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
506 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
507 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
508 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
509 [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
510
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
511 $ 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
512 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
513 $ 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
514
50686
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
515 $ hg verify -q
a41eeb877d07 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50662
diff changeset
516
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
517
6487737e0f00 revlog: test that pending hooks properly see the repository on split
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50313
diff changeset
518 $ cd ..