##// END OF EJS Templates
revlog: add an experimental option to mitigated delta issues (issue5480)...
marmoute -
r33142:e9d325cf stable
parent child Browse files
Show More
@@ -432,6 +432,9 b' class localrepository(object):'
432 'aggressivemergedeltas', False)
432 'aggressivemergedeltas', False)
433 self.svfs.options['aggressivemergedeltas'] = aggressivemergedeltas
433 self.svfs.options['aggressivemergedeltas'] = aggressivemergedeltas
434 self.svfs.options['lazydeltabase'] = not scmutil.gddeltaconfig(self.ui)
434 self.svfs.options['lazydeltabase'] = not scmutil.gddeltaconfig(self.ui)
435 chainspan = self.ui.configbytes('experimental', 'maxdeltachainspan', -1)
436 if 0 <= chainspan:
437 self.svfs.options['maxdeltachainspan'] = chainspan
435
438
436 for r in self.requirements:
439 for r in self.requirements:
437 if r.startswith('exp-compression-'):
440 if r.startswith('exp-compression-'):
@@ -282,6 +282,7 b' class revlog(object):'
282 self._nodecache = {nullid: nullrev}
282 self._nodecache = {nullid: nullrev}
283 self._nodepos = None
283 self._nodepos = None
284 self._compengine = 'zlib'
284 self._compengine = 'zlib'
285 self._maxdeltachainspan = -1
285
286
286 v = REVLOG_DEFAULT_VERSION
287 v = REVLOG_DEFAULT_VERSION
287 opts = getattr(opener, 'options', None)
288 opts = getattr(opener, 'options', None)
@@ -300,6 +301,8 b' class revlog(object):'
300 self._lazydeltabase = bool(opts.get('lazydeltabase', False))
301 self._lazydeltabase = bool(opts.get('lazydeltabase', False))
301 if 'compengine' in opts:
302 if 'compengine' in opts:
302 self._compengine = opts['compengine']
303 self._compengine = opts['compengine']
304 if 'maxdeltachainspan' in opts:
305 self._maxdeltachainspan = opts['maxdeltachainspan']
303
306
304 if self._chunkcachesize <= 0:
307 if self._chunkcachesize <= 0:
305 raise RevlogError(_('revlog chunk cache size %r is not greater '
308 raise RevlogError(_('revlog chunk cache size %r is not greater '
@@ -1596,7 +1599,13 b' class revlog(object):'
1596 # - 'compresseddeltalen' is the sum of the total size of deltas we need
1599 # - 'compresseddeltalen' is the sum of the total size of deltas we need
1597 # to apply -- bounding it limits the amount of CPU we consume.
1600 # to apply -- bounding it limits the amount of CPU we consume.
1598 dist, l, data, base, chainbase, chainlen, compresseddeltalen = d
1601 dist, l, data, base, chainbase, chainlen, compresseddeltalen = d
1599 if (dist > textlen * 4 or l > textlen or
1602
1603 defaultmax = textlen * 4
1604 maxdist = self._maxdeltachainspan
1605 if not maxdist:
1606 maxdist = dist # ensure the conditional pass
1607 maxdist = max(maxdist, defaultmax)
1608 if (dist > maxdist or l > textlen or
1600 compresseddeltalen > textlen * 2 or
1609 compresseddeltalen > textlen * 2 or
1601 (self._maxchainlen and chainlen > self._maxchainlen)):
1610 (self._maxchainlen and chainlen > self._maxchainlen)):
1602 return False
1611 return False
@@ -159,3 +159,191 b' Test that strip bundle use bundle2'
159 1c5d4dc9a8b8d6e1750966d343e94db665e7a1e9
159 1c5d4dc9a8b8d6e1750966d343e94db665e7a1e9
160
160
161 $ cd ..
161 $ cd ..
162
163 test maxdeltachainspan
164
165 $ hg init source-repo
166 $ cd source-repo
167 $ hg debugbuilddag --new-file '.+5:brancha$.+11:branchb$.+30:branchc<brancha+2<branchb+2'
168 $ cd ..
169 $ hg -R source-repo debugindex -m
170 rev offset length delta linkrev nodeid p1 p2
171 0 0 46 -1 0 19deeef41503 000000000000 000000000000
172 1 46 57 0 1 fffc37b38c40 19deeef41503 000000000000
173 2 103 57 1 2 5822d75c83d9 fffc37b38c40 000000000000
174 3 160 57 2 3 19cf2273e601 5822d75c83d9 000000000000
175 4 217 57 3 4 d45ead487afe 19cf2273e601 000000000000
176 5 274 57 4 5 96e0c2ce55ed d45ead487afe 000000000000
177 6 331 46 -1 6 0c2ea5222c74 000000000000 000000000000
178 7 377 57 6 7 4ca08a89134d 0c2ea5222c74 000000000000
179 8 434 57 7 8 c973dbfd30ac 4ca08a89134d 000000000000
180 9 491 57 8 9 d81d878ff2cd c973dbfd30ac 000000000000
181 10 548 58 9 10 dbee7f0dd760 d81d878ff2cd 000000000000
182 11 606 58 10 11 474be9f1fd4e dbee7f0dd760 000000000000
183 12 664 58 11 12 594a27502c85 474be9f1fd4e 000000000000
184 13 722 58 12 13 a7d25307d6a9 594a27502c85 000000000000
185 14 780 58 13 14 3eb53082272e a7d25307d6a9 000000000000
186 15 838 58 14 15 d1e94c85caf6 3eb53082272e 000000000000
187 16 896 58 15 16 8933d9629788 d1e94c85caf6 000000000000
188 17 954 58 16 17 a33416e52d91 8933d9629788 000000000000
189 18 1012 47 -1 18 4ccbf31021ed 000000000000 000000000000
190 19 1059 58 18 19 dcad7a25656c 4ccbf31021ed 000000000000
191 20 1117 58 19 20 617c4f8be75f dcad7a25656c 000000000000
192 21 1175 58 20 21 975b9c1d75bb 617c4f8be75f 000000000000
193 22 1233 58 21 22 74f09cd33b70 975b9c1d75bb 000000000000
194 23 1291 58 22 23 54e79bfa7ef1 74f09cd33b70 000000000000
195 24 1349 58 23 24 c556e7ff90af 54e79bfa7ef1 000000000000
196 25 1407 58 24 25 42daedfe9c6b c556e7ff90af 000000000000
197 26 1465 58 25 26 f302566947c7 42daedfe9c6b 000000000000
198 27 1523 58 26 27 2346959851cb f302566947c7 000000000000
199 28 1581 58 27 28 ca8d867106b4 2346959851cb 000000000000
200 29 1639 58 28 29 fd9152decab2 ca8d867106b4 000000000000
201 30 1697 58 29 30 3fe34080a79b fd9152decab2 000000000000
202 31 1755 58 30 31 bce61a95078e 3fe34080a79b 000000000000
203 32 1813 58 31 32 1dd9ba54ba15 bce61a95078e 000000000000
204 33 1871 58 32 33 3cd9b90a9972 1dd9ba54ba15 000000000000
205 34 1929 58 33 34 5db8c9754ef5 3cd9b90a9972 000000000000
206 35 1987 58 34 35 ee4a240cc16c 5db8c9754ef5 000000000000
207 36 2045 58 35 36 9e1d38725343 ee4a240cc16c 000000000000
208 37 2103 58 36 37 3463f73086a8 9e1d38725343 000000000000
209 38 2161 58 37 38 88af72fab449 3463f73086a8 000000000000
210 39 2219 58 38 39 472f5ce73785 88af72fab449 000000000000
211 40 2277 58 39 40 c91b8351e5b8 472f5ce73785 000000000000
212 41 2335 58 40 41 9c8289c5c5c0 c91b8351e5b8 000000000000
213 42 2393 58 41 42 a13fd4a09d76 9c8289c5c5c0 000000000000
214 43 2451 58 42 43 2ec2c81cafe0 a13fd4a09d76 000000000000
215 44 2509 58 43 44 f27fdd174392 2ec2c81cafe0 000000000000
216 45 2567 58 44 45 a539ec59fe41 f27fdd174392 000000000000
217 46 2625 58 45 46 5e98b9ecb738 a539ec59fe41 000000000000
218 47 2683 58 46 47 31e6b47899d0 5e98b9ecb738 000000000000
219 48 2741 58 47 48 2cf25d6636bd 31e6b47899d0 000000000000
220 49 2799 197 -1 49 9fff62ea0624 96e0c2ce55ed 000000000000
221 50 2996 58 49 50 467f8e30a066 9fff62ea0624 000000000000
222 51 3054 356 50 51 346db97283df a33416e52d91 000000000000
223 52 3410 58 51 52 4e003fd4d5cd 346db97283df 000000000000
224 $ hg clone --pull source-repo --config experimental.maxdeltachainspan=2800 relax-chain --config format.generaldelta=yes
225 requesting all changes
226 adding changesets
227 adding manifests
228 adding file changes
229 added 53 changesets with 53 changes to 53 files (+2 heads)
230 updating to branch default
231 14 files updated, 0 files merged, 0 files removed, 0 files unresolved
232 $ hg -R relax-chain debugindex -m
233 rev offset length delta linkrev nodeid p1 p2
234 0 0 46 -1 0 19deeef41503 000000000000 000000000000
235 1 46 57 0 1 fffc37b38c40 19deeef41503 000000000000
236 2 103 57 1 2 5822d75c83d9 fffc37b38c40 000000000000
237 3 160 57 2 3 19cf2273e601 5822d75c83d9 000000000000
238 4 217 57 3 4 d45ead487afe 19cf2273e601 000000000000
239 5 274 57 4 5 96e0c2ce55ed d45ead487afe 000000000000
240 6 331 46 -1 6 0c2ea5222c74 000000000000 000000000000
241 7 377 57 6 7 4ca08a89134d 0c2ea5222c74 000000000000
242 8 434 57 7 8 c973dbfd30ac 4ca08a89134d 000000000000
243 9 491 57 8 9 d81d878ff2cd c973dbfd30ac 000000000000
244 10 548 58 9 10 dbee7f0dd760 d81d878ff2cd 000000000000
245 11 606 58 10 11 474be9f1fd4e dbee7f0dd760 000000000000
246 12 664 58 11 12 594a27502c85 474be9f1fd4e 000000000000
247 13 722 58 12 13 a7d25307d6a9 594a27502c85 000000000000
248 14 780 58 13 14 3eb53082272e a7d25307d6a9 000000000000
249 15 838 58 14 15 d1e94c85caf6 3eb53082272e 000000000000
250 16 896 58 15 16 8933d9629788 d1e94c85caf6 000000000000
251 17 954 58 16 17 a33416e52d91 8933d9629788 000000000000
252 18 1012 47 -1 18 4ccbf31021ed 000000000000 000000000000
253 19 1059 58 18 19 dcad7a25656c 4ccbf31021ed 000000000000
254 20 1117 58 19 20 617c4f8be75f dcad7a25656c 000000000000
255 21 1175 58 20 21 975b9c1d75bb 617c4f8be75f 000000000000
256 22 1233 58 21 22 74f09cd33b70 975b9c1d75bb 000000000000
257 23 1291 58 22 23 54e79bfa7ef1 74f09cd33b70 000000000000
258 24 1349 58 23 24 c556e7ff90af 54e79bfa7ef1 000000000000
259 25 1407 58 24 25 42daedfe9c6b c556e7ff90af 000000000000
260 26 1465 58 25 26 f302566947c7 42daedfe9c6b 000000000000
261 27 1523 58 26 27 2346959851cb f302566947c7 000000000000
262 28 1581 58 27 28 ca8d867106b4 2346959851cb 000000000000
263 29 1639 58 28 29 fd9152decab2 ca8d867106b4 000000000000
264 30 1697 58 29 30 3fe34080a79b fd9152decab2 000000000000
265 31 1755 58 30 31 bce61a95078e 3fe34080a79b 000000000000
266 32 1813 58 31 32 1dd9ba54ba15 bce61a95078e 000000000000
267 33 1871 58 32 33 3cd9b90a9972 1dd9ba54ba15 000000000000
268 34 1929 58 33 34 5db8c9754ef5 3cd9b90a9972 000000000000
269 35 1987 58 34 35 ee4a240cc16c 5db8c9754ef5 000000000000
270 36 2045 58 35 36 9e1d38725343 ee4a240cc16c 000000000000
271 37 2103 58 36 37 3463f73086a8 9e1d38725343 000000000000
272 38 2161 58 37 38 88af72fab449 3463f73086a8 000000000000
273 39 2219 58 38 39 472f5ce73785 88af72fab449 000000000000
274 40 2277 58 39 40 c91b8351e5b8 472f5ce73785 000000000000
275 41 2335 58 40 41 9c8289c5c5c0 c91b8351e5b8 000000000000
276 42 2393 58 41 42 a13fd4a09d76 9c8289c5c5c0 000000000000
277 43 2451 58 42 43 2ec2c81cafe0 a13fd4a09d76 000000000000
278 44 2509 58 43 44 f27fdd174392 2ec2c81cafe0 000000000000
279 45 2567 58 44 45 a539ec59fe41 f27fdd174392 000000000000
280 46 2625 58 45 46 5e98b9ecb738 a539ec59fe41 000000000000
281 47 2683 58 46 47 31e6b47899d0 5e98b9ecb738 000000000000
282 48 2741 58 47 48 2cf25d6636bd 31e6b47899d0 000000000000
283 49 2799 197 -1 49 9fff62ea0624 96e0c2ce55ed 000000000000
284 50 2996 58 49 50 467f8e30a066 9fff62ea0624 000000000000
285 51 3054 58 17 51 346db97283df a33416e52d91 000000000000
286 52 3112 369 -1 52 4e003fd4d5cd 346db97283df 000000000000
287 $ hg clone --pull source-repo --config experimental.maxdeltachainspan=0 noconst-chain --config format.generaldelta=yes
288 requesting all changes
289 adding changesets
290 adding manifests
291 adding file changes
292 added 53 changesets with 53 changes to 53 files (+2 heads)
293 updating to branch default
294 14 files updated, 0 files merged, 0 files removed, 0 files unresolved
295 $ hg -R noconst-chain debugindex -m
296 rev offset length delta linkrev nodeid p1 p2
297 0 0 46 -1 0 19deeef41503 000000000000 000000000000
298 1 46 57 0 1 fffc37b38c40 19deeef41503 000000000000
299 2 103 57 1 2 5822d75c83d9 fffc37b38c40 000000000000
300 3 160 57 2 3 19cf2273e601 5822d75c83d9 000000000000
301 4 217 57 3 4 d45ead487afe 19cf2273e601 000000000000
302 5 274 57 4 5 96e0c2ce55ed d45ead487afe 000000000000
303 6 331 46 -1 6 0c2ea5222c74 000000000000 000000000000
304 7 377 57 6 7 4ca08a89134d 0c2ea5222c74 000000000000
305 8 434 57 7 8 c973dbfd30ac 4ca08a89134d 000000000000
306 9 491 57 8 9 d81d878ff2cd c973dbfd30ac 000000000000
307 10 548 58 9 10 dbee7f0dd760 d81d878ff2cd 000000000000
308 11 606 58 10 11 474be9f1fd4e dbee7f0dd760 000000000000
309 12 664 58 11 12 594a27502c85 474be9f1fd4e 000000000000
310 13 722 58 12 13 a7d25307d6a9 594a27502c85 000000000000
311 14 780 58 13 14 3eb53082272e a7d25307d6a9 000000000000
312 15 838 58 14 15 d1e94c85caf6 3eb53082272e 000000000000
313 16 896 58 15 16 8933d9629788 d1e94c85caf6 000000000000
314 17 954 58 16 17 a33416e52d91 8933d9629788 000000000000
315 18 1012 47 -1 18 4ccbf31021ed 000000000000 000000000000
316 19 1059 58 18 19 dcad7a25656c 4ccbf31021ed 000000000000
317 20 1117 58 19 20 617c4f8be75f dcad7a25656c 000000000000
318 21 1175 58 20 21 975b9c1d75bb 617c4f8be75f 000000000000
319 22 1233 58 21 22 74f09cd33b70 975b9c1d75bb 000000000000
320 23 1291 58 22 23 54e79bfa7ef1 74f09cd33b70 000000000000
321 24 1349 58 23 24 c556e7ff90af 54e79bfa7ef1 000000000000
322 25 1407 58 24 25 42daedfe9c6b c556e7ff90af 000000000000
323 26 1465 58 25 26 f302566947c7 42daedfe9c6b 000000000000
324 27 1523 58 26 27 2346959851cb f302566947c7 000000000000
325 28 1581 58 27 28 ca8d867106b4 2346959851cb 000000000000
326 29 1639 58 28 29 fd9152decab2 ca8d867106b4 000000000000
327 30 1697 58 29 30 3fe34080a79b fd9152decab2 000000000000
328 31 1755 58 30 31 bce61a95078e 3fe34080a79b 000000000000
329 32 1813 58 31 32 1dd9ba54ba15 bce61a95078e 000000000000
330 33 1871 58 32 33 3cd9b90a9972 1dd9ba54ba15 000000000000
331 34 1929 58 33 34 5db8c9754ef5 3cd9b90a9972 000000000000
332 35 1987 58 34 35 ee4a240cc16c 5db8c9754ef5 000000000000
333 36 2045 58 35 36 9e1d38725343 ee4a240cc16c 000000000000
334 37 2103 58 36 37 3463f73086a8 9e1d38725343 000000000000
335 38 2161 58 37 38 88af72fab449 3463f73086a8 000000000000
336 39 2219 58 38 39 472f5ce73785 88af72fab449 000000000000
337 40 2277 58 39 40 c91b8351e5b8 472f5ce73785 000000000000
338 41 2335 58 40 41 9c8289c5c5c0 c91b8351e5b8 000000000000
339 42 2393 58 41 42 a13fd4a09d76 9c8289c5c5c0 000000000000
340 43 2451 58 42 43 2ec2c81cafe0 a13fd4a09d76 000000000000
341 44 2509 58 43 44 f27fdd174392 2ec2c81cafe0 000000000000
342 45 2567 58 44 45 a539ec59fe41 f27fdd174392 000000000000
343 46 2625 58 45 46 5e98b9ecb738 a539ec59fe41 000000000000
344 47 2683 58 46 47 31e6b47899d0 5e98b9ecb738 000000000000
345 48 2741 58 47 48 2cf25d6636bd 31e6b47899d0 000000000000
346 49 2799 58 5 49 9fff62ea0624 96e0c2ce55ed 000000000000
347 50 2857 58 49 50 467f8e30a066 9fff62ea0624 000000000000
348 51 2915 58 17 51 346db97283df a33416e52d91 000000000000
349 52 2973 58 51 52 4e003fd4d5cd 346db97283df 000000000000
General Comments 0
You need to be logged in to leave comments. Login now