From 28dd0ceb9ee423c5822465a08584a08c44d28c53 Mon Sep 17 00:00:00 2001 From: Stefan Marr Date: Fri, 3 Jul 2026 15:02:03 +0200 Subject: [PATCH 1/2] ReBenchDB.send_results() is expected to return only a bool Signed-off-by: Stefan Marr --- rebench/rebench.py | 4 ++-- rebench/rebenchdb.py | 17 +++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/rebench/rebench.py b/rebench/rebench.py index 967fdf87..2d03b91a 100755 --- a/rebench/rebench.py +++ b/rebench/rebench.py @@ -232,9 +232,9 @@ def determine_exp_name_and_filters(filters): f.startswith("t:"))] return exp_name, exp_filter - def _report_completion(self): + def _report_completion(self) -> bool: rebench_db = self._config.get_rebench_db_connector() - success, _ = rebench_db.send_completion(get_current_time()) + success = rebench_db.send_completion(get_current_time()) return success @staticmethod diff --git a/rebench/rebenchdb.py b/rebench/rebenchdb.py index c0a32f01..c3902bb6 100644 --- a/rebench/rebenchdb.py +++ b/rebench/rebenchdb.py @@ -1,5 +1,6 @@ import json from time import sleep +from typing import Optional, Tuple from http.client import HTTPException from urllib.request import urlopen, Request as HttpRequest @@ -60,7 +61,7 @@ def is_api_v2(self): return self._api_v2 - def send_results(self, benchmark_data, num_items): + def send_results(self, benchmark_data, num_items) -> bool: success, response = self._send_to_rebench_db(benchmark_data, "/results") if success: @@ -68,9 +69,9 @@ def send_results(self, benchmark_data, num_items): "ReBenchDB: Sent {num_i} results to ReBenchDB, response was: {resp}\n", num_i=num_items, resp=response) - return success, response + return success - def send_completion(self, end_time): + def send_completion(self, end_time) -> bool: success, response = self._send_to_rebench_db({"endTime": end_time}, "/completion") if success: @@ -82,10 +83,10 @@ def send_completion(self, end_time): self.ui.error("Reporting completion to ReBenchDB failed.\n" + "{ind}Error: {response}", response=response) - return success, response + return success @staticmethod - def _send_payload(payload, url): + def _send_payload(payload, url) -> str: req = HttpRequest(url, payload, {'Content-Type': 'application/json'}, method='PUT') with urlopen(req) as socket: @@ -106,7 +107,7 @@ def _get_api_version(self): def convert_data_to_json(self, data): return json.dumps(data, separators=(",", ":"), ensure_ascii=True) - def _send_to_rebench_db(self, payload_data, operation): + def _send_to_rebench_db(self, payload_data, operation) -> Tuple[bool, Optional[str]]: payload_data["projectName"] = self._project_name payload_data["experimentName"] = self._experiment_name url = self._server_base_url + operation @@ -119,8 +120,8 @@ def _send_to_rebench_db(self, payload_data, operation): return self._send_with_retries(payload.encode("utf-8"), url) - def _send_with_retries(self, payload_bytes, url): - attempts = 4 + def _send_with_retries(self, payload_bytes, url) -> Tuple[bool, Optional[str]]: + attempts = 10 wait_sec = 10 while True: try: From afb43ec1f09d5517aa29e13ccae7daf19af33938 Mon Sep 17 00:00:00 2001 From: Stefan Marr Date: Fri, 3 Jul 2026 15:15:49 +0200 Subject: [PATCH 2/2] When sending data to rebenchdb fails, wait longer After the time out is at 5min, cap it here. Wait 10 times but do a exponential backoff only until we reach a 5min wait time. Signed-off-by: Stefan Marr --- rebench/rebenchdb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rebench/rebenchdb.py b/rebench/rebenchdb.py index c3902bb6..b6a0c22e 100644 --- a/rebench/rebenchdb.py +++ b/rebench/rebenchdb.py @@ -144,7 +144,7 @@ def _send_with_retries(self, payload_bytes, url) -> Tuple[bool, Optional[str]]: + "{ind}{ind}" + str(error) + "\n") attempts -= 1 sleep(wait_sec) - wait_sec *= 2 + wait_sec = min(wait_sec * 2, 5 * 60) else: self.ui.error("{ind}Error: Reporting to ReBenchDB failed.\n" + "{ind}{ind}" + str(error) + "\n")