From 950efbbb45472b6b102c3a0a388e45eca426519c Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 28 Oct 2025 07:40:12 +0100 Subject: [PATCH] safety catch for --cpus so it isn't higher than actual CPUs --- fdroidserver/up.py | 15 +++++++++------ tests/test_up.py | 10 ++++++++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/fdroidserver/up.py b/fdroidserver/up.py index f6b561f3..24c71da5 100644 --- a/fdroidserver/up.py +++ b/fdroidserver/up.py @@ -148,13 +148,16 @@ def get_virt_cpus_opt(cpus): If no CPU count is configured, calculate a reasonable default value. """ - if cpus: - return cpus cpu_cnt = os.cpu_count() - if cpu_cnt < 8: - return max(1, int(0.5 * cpu_cnt)) - # use a quarter of available CPUs if there - return 2 + int(0.25 * cpu_cnt) + if not cpus: + if cpu_cnt < 8: + cpus = max(1, int(0.5 * cpu_cnt)) + else: + # use a quarter of available CPUs if there + cpus = 2 + int(0.25 * cpu_cnt) + if min(cpus, cpu_cnt) != cpus: + logging.warning(f'Capping {cpus} CPUs to how many are available ({cpu_cnt}).') + return min(cpus, cpu_cnt) def get_virt_memory_opt(memory): diff --git a/tests/test_up.py b/tests/test_up.py index 09820b73..1e75ed8e 100755 --- a/tests/test_up.py +++ b/tests/test_up.py @@ -145,6 +145,16 @@ class Up_run_vagrant(UpTest): class Up_options(UpTest): + def test_get_virt_cpus_opt_default(self): + self.assertTrue(up.get_virt_cpus_opt(None) > 0) + + def test_get_virt_cpus_opt_too_small(self): + self.assertTrue(up.get_virt_cpus_opt(0.1) > 0) + + def test_get_virt_cpus_opt_too_big(self): + with self.assertLogs(): + self.assertEqual(up.get_virt_cpus_opt(99999999), os.cpu_count()) + def test_get_virt_memory_opt_default(self): self.assertEqual(up.get_virt_memory_opt(None), 6 * 1024**3)