From 49bda4418f43481f1223397d177f81e0e6ddca6d Mon Sep 17 00:00:00 2001 From: Jindrich Kolman Date: Thu, 2 Nov 2023 22:10:26 +0100 Subject: [PATCH] experimental resource control --- .../request/request.json | 1 + tests2/runner/runner/tests2.py | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 tests2/endpoint_tests/ledger/good/Robust Input Example 8.7.2021/request/request.json diff --git a/tests2/endpoint_tests/ledger/good/Robust Input Example 8.7.2021/request/request.json b/tests2/endpoint_tests/ledger/good/Robust Input Example 8.7.2021/request/request.json new file mode 100644 index 00000000..6985b0be --- /dev/null +++ b/tests2/endpoint_tests/ledger/good/Robust Input Example 8.7.2021/request/request.json @@ -0,0 +1 @@ +{"nodebug_mem_reserve_mb":1000000} \ No newline at end of file diff --git a/tests2/runner/runner/tests2.py b/tests2/runner/runner/tests2.py index bed9bbfb..c755c8d0 100644 --- a/tests2/runner/runner/tests2.py +++ b/tests2/runner/runner/tests2.py @@ -3,6 +3,7 @@ from xml import etree from xml.etree.ElementTree import canonicalize, fromstring, tostring +import psutil from furl import furl import lxml.etree @@ -128,9 +129,12 @@ def copy_inputs(self, request_files_dir): def write_job_json(self, request_files_dir): + with open(request_files_dir / 'request.json') as fp: + metadata = json.load(fp) data = dict( + **metadata, custom_job_metadata = dict(self.test), - worker_options = dict(self.test['worker_options']) + worker_options = dict(self.test['worker_options']), ) fn = request_files_dir / 'request.json' with open(fn, 'w') as fp: @@ -171,6 +175,19 @@ class TestStart(luigi.Task): test = luigi.parameter.DictParameter() request_files = luigi.parameter.ListParameter() + @property + def resources(self): + for f in self.request_files: + if f.endswith('/request.json'): + with open(f) as fd: + j = json.load(fd) + nodebug_mem_reserve_mb = j.get('nodebug_mem_reserve_mb', 25) + o = j.get('worker_options') + if o is not None: + if o.get('prolog_debug') is True: + nodebug_mem_reserve_mb *= 4 + return {'nodebug_mem_reserve_mb': min(1, nodebug_mem_reserve_mb / (psutil.virtual_memory().available/1000000))} + def run(self): resp = make_request(self.test, self.request_files) if resp.ok: