annotate contrib/perf-utils/search-discovery-case @ 47305:33e7508b0ae9

hg-cpython: fix new occuring TypeError dd339191f2dc introduced a minor refactoring of error types that highlighted a fragile error creation mechanism that was in place in the Rust `MixedIndex`. `PyErr::from_instance` also accepts a Python class, as long as it's an `Exception` class. Before the aforementioned commit, we never ran into a case where this duck-typing mechanism failed. We rectify this behavior by doing the instantiation ourselves. Differential Revision: https://phab.mercurial-scm.org/D10764
author Raphaël Gomès <rgomes@octobus.net>
date Fri, 21 May 2021 17:37:53 +0200
parents 6b26e6432554
children 6000f5b25c9b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46771
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
1 #!/usr/bin/env python3
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
2 # Search for interesting discovery instance
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
3 #
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
4 # search-discovery-case REPO [REPO]…
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
5 #
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
6 # This use a subsetmaker extension (next to this script) to generate a steam of
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
7 # random discovery instance. When interesting case are discovered, information
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
8 # about them are print on the stdout.
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
9 from __future__ import print_function
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
10
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
11 import json
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
12 import os
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
13 import queue
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
14 import random
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
15 import signal
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
16 import subprocess
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
17 import sys
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
18 import threading
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
19
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
20 this_script = os.path.abspath(sys.argv[0])
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
21 this_dir = os.path.dirname(this_script)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
22 hg_dir = os.path.join(this_dir, '..', '..')
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
23 HG_REPO = os.path.normpath(hg_dir)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
24 HG_BIN = os.path.join(HG_REPO, 'hg')
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
25
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
26 JOB = int(os.environ.get('NUMBER_OF_PROCESSORS', 8))
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
27
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
28
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
29 SLICING = ('scratch', 'randomantichain', 'rev')
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
30
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
31
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
32 def nb_revs(repo_path):
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
33 cmd = [
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
34 HG_BIN,
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
35 '--repository',
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
36 repo_path,
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
37 'log',
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
38 '--template',
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
39 '{rev}',
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
40 '--rev',
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
41 'tip',
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
42 ]
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
43 s = subprocess.Popen(cmd, stdout=subprocess.PIPE)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
44 out, err = s.communicate()
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
45 return int(out)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
46
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
47
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
48 repos = []
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
49 for repo in sys.argv[1:]:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
50 size = nb_revs(repo)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
51 repos.append((repo, size))
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
52
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
53
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
54 def pick_one(repo):
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
55 pick = random.choice(SLICING)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
56 seed = random.randint(0, 100000)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
57 if pick == 'scratch':
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
58 start = int(repo[1] * 0.3)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
59 end = int(repo[1] * 0.7)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
60 nb = random.randint(start, end)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
61 return ('scratch', nb, seed)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
62 elif pick == 'randomantichain':
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
63 return ('randomantichain', seed)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
64 elif pick == 'rev':
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
65 start = int(repo[1] * 0.3)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
66 end = int(repo[1])
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
67 rev = random.randint(start, end)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
68 return ('rev', rev)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
69 else:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
70 assert False
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
71
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
72
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
73 done = threading.Event()
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
74 cases = queue.Queue(maxsize=10 * JOB)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
75 results = queue.Queue()
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
76
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
77
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
78 def worker():
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
79 while not done.is_set():
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
80 c = cases.get()
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
81 if c is None:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
82 return
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
83 try:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
84 res = process(c)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
85 results.put((c, res))
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
86 except Exception as exc:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
87 print('processing-failed: %s %s' % (c, exc), file=sys.stderr)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
88 c = (c[0], c[2], c[1])
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
89 try:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
90 res = process(c)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
91 results.put((c, res))
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
92 except Exception as exc:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
93 print('processing-failed: %s %s' % (c, exc), file=sys.stderr)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
94
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
95
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
96 SUBSET_PATH = os.path.join(HG_REPO, 'contrib', 'perf-utils', 'subsetmaker.py')
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
97
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
98
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
99 CMD_BASE = (
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
100 HG_BIN,
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
101 'debugdiscovery',
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
102 '--template',
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
103 'json',
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
104 '--config',
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
105 'extensions.subset=%s' % SUBSET_PATH,
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
106 )
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
107 # '--local-as-revs "$left" --local-as-revs "$right"'
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
108 # > /data/discovery-references/results/disco-mozilla-unified-$1-$2.txt
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
109 # )
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
110
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
111
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
112 def to_revsets(case):
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
113 t = case[0]
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
114 if t == 'scratch':
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
115 return 'not scratch(all(), %d, "%d")' % (case[1], case[2])
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
116 elif t == 'randomantichain':
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
117 return '::randomantichain(all(), "%d")' % case[1]
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
118 elif t == 'rev':
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
119 return '::%d' % case[1]
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
120 else:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
121 assert False
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
122
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
123
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
124 def process(case):
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
125 (repo, left, right) = case
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
126 cmd = list(CMD_BASE)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
127 cmd.append('-R')
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
128 cmd.append(repo[0])
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
129 cmd.append('--local-as-revs')
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
130 cmd.append(to_revsets(left))
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
131 cmd.append('--remote-as-revs')
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
132 cmd.append(to_revsets(right))
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
133 s = subprocess.Popen(cmd, stdout=subprocess.PIPE)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
134 out, err = s.communicate()
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
135 return json.loads(out)[0]
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
136
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
137
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
138 def interesting_boundary(res):
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
139 """check if a case is interesting or not
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
140
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
141 For now we are mostly interrested in case were we do multiple roundstrip
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
142 and where the boundary is somewhere in the middle of the undecided set.
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
143
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
144 Ideally, we would make this configurable, but this is not a focus for now
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
145
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
146 return None or (round-trip, undecided-common, undecided-missing)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
147 """
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
148 roundtrips = res["total-roundtrips"]
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
149 if roundtrips <= 1:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
150 return None
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
151 undecided_common = res["nb-ini_und-common"]
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
152 undecided_missing = res["nb-ini_und-missing"]
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
153 if undecided_common == 0:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
154 return None
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
155 if undecided_missing == 0:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
156 return None
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
157 return (roundtrips, undecided_common, undecided_missing)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
158
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
159
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
160 def end(*args, **kwargs):
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
161 done.set()
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
162
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
163
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
164 def format_case(case):
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
165 return '-'.join(str(s) for s in case)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
166
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
167
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
168 signal.signal(signal.SIGINT, end)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
169
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
170 for i in range(JOB):
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
171 threading.Thread(target=worker).start()
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
172
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
173 nb_cases = 0
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
174 while not done.is_set():
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
175 repo = random.choice(repos)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
176 left = pick_one(repo)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
177 right = pick_one(repo)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
178 cases.put((repo, left, right))
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
179 while not results.empty():
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
180 # results has a single reader so this is fine
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
181 c, res = results.get_nowait()
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
182 boundary = interesting_boundary(res)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
183 if boundary is not None:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
184 print(c[0][0], format_case(c[1]), format_case(c[2]), *boundary)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
185 sys.stdout.flush()
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
186
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
187 nb_cases += 1
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
188 if not nb_cases % 100:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
189 print('[%d cases generated]' % nb_cases, file=sys.stderr)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
190
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
191 for i in range(JOB):
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
192 try:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
193 cases.put_nowait(None)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
194 except queue.Full:
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
195 pass
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
196
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
197 print('[%d cases generated]' % nb_cases, file=sys.stderr)
6b26e6432554 perf-helpers: add a search-discovery-case script
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
198 print('[ouput generation is over]' % nb_cases, file=sys.stderr)