comparison tests/test-transaction-rollback-on-revlog-split.t @ 48571:ccd9cb73125c stable

revlog: fix a bug where transaction can be aborted partially Fix a repo corruption bug caused by a partial transaction rollback. Differential Revision: https://phab.mercurial-scm.org/D12009
author Arseniy Alekseyev <aalekseyev@janestreet.com>
date Thu, 20 Jan 2022 14:06:36 +0000
parents f38ae2d7390e
children e2ba2234bf1c
comparison
equal deleted inserted replaced
48570:f38ae2d7390e 48571:ccd9cb73125c
61 $ hg pull ../troffset-computation 61 $ hg pull ../troffset-computation
62 pulling from ../troffset-computation 62 pulling from ../troffset-computation
63 [80] 63 [80]
64 #endif 64 #endif
65 $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file | tail -1 65 $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file | tail -1
66 data/file.i 192 66 data/file.i 128
67 67
68 The first file.i entry should match the "Reference size" above. 68 The first file.i entry should match the "Reference size" above.
69 The first file.d entry is the temporary record during the split, 69 The first file.d entry is the temporary record during the split,
70 the second entry after the split happened. The sum of the second file.d 70 the second entry after the split happened. The sum of the second file.d
71 and the second file.i entry should match the first file.i entry. 71 and the second file.i entry should match the first file.i entry.
72 72
73 $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file 73 $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file
74 data/file.i 1174 74 data/file.i 1174
75 data/file.d 0 75 data/file.d 0
76 data/file.d 1067 76 data/file.d 1046
77 data/file.i 192 77 data/file.i 128
78 $ hg recover 78 $ hg recover
79 rolling back interrupted transaction 79 rolling back interrupted transaction
80 (verify step skipped, run `hg verify` to check your repository content) 80 (verify step skipped, run `hg verify` to check your repository content)
81 $ f -s .hg/store/data/file* 81 $ f -s .hg/store/data/file*
82 .hg/store/data/file.d: size=1067 82 .hg/store/data/file.d: size=1046
83 .hg/store/data/file.i: size=192 83 .hg/store/data/file.i: size=128
84 $ hg tip 84 $ hg tip
85 changeset: 1:cfa8d6e60429 85 changeset: 1:cfa8d6e60429
86 tag: tip 86 tag: tip
87 user: test 87 user: test
88 date: Thu Jan 01 00:00:00 1970 +0000 88 date: Thu Jan 01 00:00:00 1970 +0000
89 summary: b 89 summary: b
90 90
91 $ hg verify -q 91 $ hg verify -q
92 warning: revlog 'data/file.d' not in fncache! 92 warning: revlog 'data/file.d' not in fncache!
93 file@?: rev 2 points to nonexistent changeset 2 93 1 warnings encountered!
94 (expected )
95 file@?: fa1120531cc1 not in manifests
96 2 warnings encountered!
97 hint: run "hg debugrebuildfncache" to recover from corrupt fncache 94 hint: run "hg debugrebuildfncache" to recover from corrupt fncache
98 2 integrity errors encountered!
99 [1]
100 $ hg debugrebuildfncache --only-data 95 $ hg debugrebuildfncache --only-data
101 adding data/file.d 96 adding data/file.d
102 1 items added, 0 removed from fncache 97 1 items added, 0 removed from fncache
103 $ hg verify -q 98 $ hg verify -q
104 file@?: rev 2 points to nonexistent changeset 2
105 (expected )
106 file@?: fa1120531cc1 not in manifests
107 1 warnings encountered!
108 2 integrity errors encountered!
109 [1]
110 $ cd .. 99 $ cd ..
111 100
112 101
113 Now retry the procedure but intercept the rename of the index and check that 102 Now retry the procedure but intercept the rename of the index and check that
114 the journal does not contain the new index size. This demonstrates the edge case 103 the journal does not contain the new index size. This demonstrates the edge case
132 [80] 121 [80]
133 #endif 122 #endif
134 $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file 123 $ cat .hg/store/journal | tr -s '\000' ' ' | grep data/file
135 data/file.i 1174 124 data/file.i 1174
136 data/file.d 0 125 data/file.d 0
137 data/file.d 1067 126 data/file.d 1046
138 127
139 $ hg recover 128 $ hg recover
140 rolling back interrupted transaction 129 rolling back interrupted transaction
141 (verify step skipped, run `hg verify` to check your repository content) 130 (verify step skipped, run `hg verify` to check your repository content)
142 $ f -s .hg/store/data/file* 131 $ f -s .hg/store/data/file*
143 .hg/store/data/file.d: size=1067 132 .hg/store/data/file.d: size=1046
144 .hg/store/data/file.i: size=1174 133 .hg/store/data/file.i: size=1174
145 $ hg tip 134 $ hg tip
146 changeset: 1:cfa8d6e60429 135 changeset: 1:cfa8d6e60429
147 tag: tip 136 tag: tip
148 user: test 137 user: test
170 transaction abort! 159 transaction abort!
171 rollback completed 160 rollback completed
172 abort: pretxnchangegroup hook exited with status 1 161 abort: pretxnchangegroup hook exited with status 1
173 [40] 162 [40]
174 $ f -s .hg/store/data/file* 163 $ f -s .hg/store/data/file*
175 .hg/store/data/file.d: size=1067 164 .hg/store/data/file.d: size=1046
176 .hg/store/data/file.i: size=192 165 .hg/store/data/file.i: size=128
177 $ hg tip 166 $ hg tip
178 changeset: 1:cfa8d6e60429 167 changeset: 1:cfa8d6e60429
179 tag: tip 168 tag: tip
180 user: test 169 user: test
181 date: Thu Jan 01 00:00:00 1970 +0000 170 date: Thu Jan 01 00:00:00 1970 +0000
182 summary: b 171 summary: b
183 172
184 $ hg verify -q 173 $ hg verify -q
185 warning: revlog 'data/file.d' not in fncache! 174 warning: revlog 'data/file.d' not in fncache!
186 file@?: rev 2 points to nonexistent changeset 2 175 1 warnings encountered!
187 (expected )
188 file@?: fa1120531cc1 not in manifests
189 2 warnings encountered!
190 hint: run "hg debugrebuildfncache" to recover from corrupt fncache 176 hint: run "hg debugrebuildfncache" to recover from corrupt fncache
191 2 integrity errors encountered!
192 [1]
193 $ cd .. 177 $ cd ..
194 178