diff --git a/src/apify/storage_clients/_apify/_request_queue_single_client.py b/src/apify/storage_clients/_apify/_request_queue_single_client.py index 05614cd8..9bf9e58e 100644 --- a/src/apify/storage_clients/_apify/_request_queue_single_client.py +++ b/src/apify/storage_clients/_apify/_request_queue_single_client.py @@ -192,7 +192,14 @@ async def fetch_next_request(self) -> Request | None: request_id = self._head_requests.pop() if request_id not in self._requests_in_progress and request_id not in self._requests_already_handled: self._requests_in_progress.add(request_id) - return await self._get_request_by_id(request_id) + request = await self._get_request_by_id(request_id) + if request is None: + # Defensive guard against an unexpected `None` from the platform: leaving the id in + # `_requests_in_progress` would make `is_empty()` never settle and filter the id out of future + # head reconciliations, with no recovery path for the caller. + self._requests_in_progress.discard(request_id) + continue + return request # No request locally and the ones returned from the platform are already in progress. return None