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 6ab1b392..22b66daf 100644 --- a/src/apify/storage_clients/_apify/_request_queue_single_client.py +++ b/src/apify/storage_clients/_apify/_request_queue_single_client.py @@ -204,10 +204,9 @@ async def mark_request_as_handled(self, request: Request) -> ProcessedRequest | if cached_request := self._requests_cache.get(request_id): cached_request.handled_at = request.handled_at - if request.handled_at is None: + should_update_counters = request.handled_at is None + if should_update_counters: request.handled_at = datetime.now(tz=timezone.utc) - self.metadata.handled_request_count += 1 - self.metadata.pending_request_count -= 1 try: # Remember that we handled this request, to optimize local deduplication. @@ -224,6 +223,10 @@ async def mark_request_as_handled(self, request: Request) -> ProcessedRequest | logger.exception(f'Error marking request {request.unique_key} as handled.') return None else: + # Update counters only after a successful API call to avoid inconsistency on failure. + if should_update_counters: + self.metadata.handled_request_count += 1 + self.metadata.pending_request_count -= 1 return processed_request async def reclaim_request(