mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 01:00:37 +00:00
validate:launcher: Ensure a positive job count.
The default number of jobs to use is half of the available cores rounded down, but in situations where only one core is available (such as under some VMs), this means that `gst-validate-launcher` defaults to using zero jobs, a case that the test-running code is not prepared to handle. This change makes the code match the documentation for the `--jobs` option, guards against negative values both in the default setting and in argument parsing, and introduces some defensive programming to prevent other situations where the code might try to use zero jobs. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-devtools/-/merge_requests/154>
This commit is contained in:
parent
139c2cae66
commit
2b8eef30e7
3 changed files with 13 additions and 4 deletions
|
@ -372,6 +372,7 @@ class GstCheckTestsManager(MesonTestsManager):
|
|||
to_inspect.append(test)
|
||||
|
||||
if to_inspect:
|
||||
assert self.options.num_jobs >= 0
|
||||
executor = conc.ThreadPoolExecutor(
|
||||
max_workers=self.options.num_jobs)
|
||||
tmp = []
|
||||
|
|
|
@ -2091,7 +2091,8 @@ class _TestsLauncher(Loggable):
|
|||
else:
|
||||
alone_tests.append(test)
|
||||
|
||||
max_num_jobs = min(self.options.num_jobs, len(tests))
|
||||
# use max to defend against the case where all tests are alone_tests
|
||||
max_num_jobs = max(min(self.options.num_jobs, len(tests)), 1)
|
||||
jobs_running = 0
|
||||
|
||||
if self.options.forever and len(tests) < self.options.num_jobs and len(tests):
|
||||
|
|
|
@ -181,6 +181,13 @@ class PrintUsage(argparse.Action):
|
|||
parser.exit()
|
||||
|
||||
|
||||
def _positive_integer_type(value):
|
||||
cast = int(value)
|
||||
if cast <= 0:
|
||||
raise argparse.ArgumentTypeError(f'`{value}\' is not a positive integer')
|
||||
return cast
|
||||
|
||||
|
||||
class LauncherConfig(Loggable):
|
||||
|
||||
def __init__(self):
|
||||
|
@ -210,7 +217,7 @@ class LauncherConfig(Loggable):
|
|||
self.logsdir = None
|
||||
self.privatedir = None
|
||||
self.redirect_logs = False
|
||||
self.num_jobs = int(multiprocessing.cpu_count() / 2)
|
||||
self.num_jobs = max(multiprocessing.cpu_count(), 1)
|
||||
self.dest = None
|
||||
self._using_default_paths = False
|
||||
# paths passed with --media-path, and not defined by a testsuite
|
||||
|
@ -543,8 +550,8 @@ class LauncherConfig(Loggable):
|
|||
help="Redirect logs to stdout.")
|
||||
dir_group.add_argument("-j", "--jobs", dest="num_jobs",
|
||||
help="Number of tests to execute simultaneously"
|
||||
" (Defaults to number of cores of the processor)",
|
||||
type=int)
|
||||
" (Defaults to the number of cores of the processor)",
|
||||
type=_positive_integer_type)
|
||||
dir_group.add_argument("--ignore-numfailures", dest="ignore_numfailures",
|
||||
help="Ignore the number of failed test in exit code",
|
||||
default=False, action='store_true')
|
||||
|
|
Loading…
Reference in a new issue