annotate tests/test-hgwebdir-gc.py @ 49670:2fd8750f3722

emitrevision: if we need to compute a delta on the fly, try p1 or p2 first Falling back to `prev` does not yield any real value on modern storage and result in pathological changes to be created on the other side. Doing a delta against a parent will likely be smaller (helping the network) and will be safer to apply on the client (helping future pulls by Triggering intermediate snapshop where they will be needed by later deltas).
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 24 Nov 2022 04:04:19 +0100
parents 6000f5b25c9b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47802
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
1 import os
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
2 from mercurial.hgweb import hgwebdir_mod
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
3
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
4 hgwebdir = hgwebdir_mod.hgwebdir
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
5
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
6 os.mkdir(b'webdir')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
7 os.chdir(b'webdir')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
8
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
9 webdir = os.path.realpath(b'.')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
10
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
11
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
12 def trivial_response(req, res):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
13 return []
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
14
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
15
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
16 def make_hgwebdir(gc_rate=None):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
17 config = os.path.join(webdir, b'hgwebdir.conf')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
18 with open(config, 'wb') as configfile:
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
19 configfile.write(b'[experimental]\n')
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
20 if gc_rate is not None:
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
21 configfile.write(b'web.full-garbage-collection-rate=%d\n' % gc_rate)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
22 hg_wd = hgwebdir(config)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
23 hg_wd._runwsgi = trivial_response
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
24 return hg_wd
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
25
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
26
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
27 def process_requests(webdir_instance, number):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
28 # we don't care for now about passing realistic arguments
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
29 for _ in range(number):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
30 for chunk in webdir_instance.run_wsgi(None, None):
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
31 pass
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
32
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
33
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
34 without_gc = make_hgwebdir(gc_rate=0)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
35 process_requests(without_gc, 5)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
36 assert without_gc.requests_count == 5
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
37 assert without_gc.gc_full_collections_done == 0
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
38
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
39 with_gc = make_hgwebdir(gc_rate=2)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
40 process_requests(with_gc, 5)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
41 assert with_gc.requests_count == 5
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
42 assert with_gc.gc_full_collections_done == 2
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
43
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
44 with_systematic_gc = make_hgwebdir() # default value of the setting
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
45 process_requests(with_systematic_gc, 3)
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
46 assert with_systematic_gc.requests_count == 3
de2e04fe4897 hgwebdir: avoid systematic full garbage collection
Georges Racinet <georges.racinet@octobus.net>
parents:
diff changeset
47 assert with_systematic_gc.gc_full_collections_done == 3