diff --git a/changelog/+race-condition.fixed.md b/changelog/+race-condition.fixed.md new file mode 100644 index 00000000..0db5f365 --- /dev/null +++ b/changelog/+race-condition.fixed.md @@ -0,0 +1 @@ +Update offset in process_page() which was causing a race condition in rare case. \ No newline at end of file diff --git a/infrahub_sdk/client.py b/infrahub_sdk/client.py index 16c1c73a..4a6ad81b 100644 --- a/infrahub_sdk/client.py +++ b/infrahub_sdk/client.py @@ -790,7 +790,7 @@ async def filters( async def process_page(page_offset: int, page_number: int) -> tuple[dict, ProcessRelationsNode]: """Process a single page of results.""" query_data = await InfrahubNode(client=self, schema=schema, branch=branch).generate_query_data( - offset=offset or page_offset, + offset=page_offset if offset is None else offset, limit=limit or pagination_size, filters=filters, include=include, @@ -1954,7 +1954,7 @@ def filters( def process_page(page_offset: int, page_number: int) -> tuple[dict, ProcessRelationsNodeSync]: """Process a single page of results.""" query_data = InfrahubNodeSync(client=self, schema=schema, branch=branch).generate_query_data( - offset=offset or page_offset, + offset=page_offset if offset is None else offset, limit=limit or pagination_size, filters=filters, include=include, diff --git a/infrahub_sdk/node/node.py b/infrahub_sdk/node/node.py index 242281b5..4eb1d0d3 100644 --- a/infrahub_sdk/node/node.py +++ b/infrahub_sdk/node/node.py @@ -1,7 +1,7 @@ from __future__ import annotations from collections.abc import Iterable -from copy import copy +from copy import copy, deepcopy from typing import TYPE_CHECKING, Any from ..constants import InfrahubClientMode @@ -397,7 +397,7 @@ def generate_query_data_init( "edges": {"node": {"id": None, "hfid": None, "display_label": None, "__typename": None}}, } - data["@filters"] = filters or {} + data["@filters"] = deepcopy(filters) if filters is not None else {} if order: data["@filters"]["order"] = order