From 8127ca86b5f0682d67165143b5562fb6a390ffa8 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 9 Apr 2025 14:48:06 +0800 Subject: [PATCH] fix: cryptarchia headers query - log body size only for size > 0 --- src/api_clients/base_client.py | 3 ++- src/api_clients/rest.py | 5 +++-- src/libs/common.py | 7 +++++-- src/node/nomos_node.py | 3 +++ src/steps/consensus.py | 18 +++++++++++++++++- 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/api_clients/base_client.py b/src/api_clients/base_client.py index ddb68ee..2d6e257 100644 --- a/src/api_clients/base_client.py +++ b/src/api_clients/base_client.py @@ -40,4 +40,5 @@ class BaseClient: def print_request_size(self, data): body_size = len(data) if data else 0 body_kb = body_size / 1024 - logger.debug(f"Request body size: {body_kb:.2f}kB") + if body_size > 0: + logger.debug(f"Request body size: {body_kb:.2f}kB") diff --git a/src/api_clients/rest.py b/src/api_clients/rest.py index 280ebb9..506dd0c 100644 --- a/src/api_clients/rest.py +++ b/src/api_clients/rest.py @@ -33,8 +33,9 @@ class REST(BaseClient): response = self.rest_call("get", "cryptarchia/info") return response.json() - def cryptarchia_headers(self, from_header_id, to_header_id): - response = self.rest_call("get", f"cryptarchia/headers?from={quote(from_header_id, safe='')}" f"&to={quote(to_header_id, safe='')}") + def cryptarchia_headers(self, query): + path = f"cryptarchia/headers{'?' + query if query else ''}" + response = self.rest_call("get", path) return response.json() def da_add_share(self, data): diff --git a/src/libs/common.py b/src/libs/common.py index e42db8a..d0fcdaf 100644 --- a/src/libs/common.py +++ b/src/libs/common.py @@ -43,8 +43,11 @@ def to_blob_id(n: int) -> list: return to_byte_list(n, 32) -def to_header_id(n: int) -> list: - return to_byte_list(n, 32) +def to_header_id(n: int): + if n < 0: + raise ValueError("Input must be an unsigned integer (non-negative)") + + return n.to_bytes(32, byteorder="big").hex() def to_byte_list(n: int, l: int) -> list: diff --git a/src/node/nomos_node.py b/src/node/nomos_node.py index 3e7df22..d3f72ea 100644 --- a/src/node/nomos_node.py +++ b/src/node/nomos_node.py @@ -163,3 +163,6 @@ class NomosNode: def send_get_storage_block_request(self, data): return self._api.storage_block(data) + + def send_get_cryptarchia_headers_request(self, data): + return self._api.cryptarchia_headers(data) diff --git a/src/steps/consensus.py b/src/steps/consensus.py index ab89364..349666e 100644 --- a/src/steps/consensus.py +++ b/src/steps/consensus.py @@ -1,3 +1,5 @@ +from urllib.parse import quote + import allure from tenacity import retry, stop_after_delay, wait_fixed @@ -7,6 +9,18 @@ from src.steps.common import StepsCommon logger = get_custom_logger(__name__) +def prepare_get_cryptarchia_headers_request(from_header_id, to_header_id): + query_parts = [] + + if from_header_id is not None: + query_parts.append(f"from={quote(from_header_id, safe='')}") + + if to_header_id is not None: + query_parts.append(f"to={quote(to_header_id, safe='')}") + + return "&".join(query_parts) + + class StepsConsensus(StepsCommon): @allure.step def get_cryptarchia_headers(self, node, from_header_id=None, to_header_id=None, **kwargs): @@ -14,10 +28,12 @@ class StepsConsensus(StepsCommon): timeout_duration = kwargs.get("timeout_duration", 65) interval = kwargs.get("interval", 0.1) + query = prepare_get_cryptarchia_headers_request(from_header_id, to_header_id) + @retry(stop=stop_after_delay(timeout_duration), wait=wait_fixed(interval), reraise=True) def get_headers(): try: - response = node.send_get_cryptarchia_headers_request(from_header_id, to_header_id) + response = node.send_get_cryptarchia_headers_request(query) except Exception as ex: logger.error(f"Exception while retrieving cryptarchia headers: {ex}") raise