From b3e26093ecf0df562cb2be279d2b6fd26c6381cd Mon Sep 17 00:00:00 2001 From: 0xSHKWON Date: Mon, 10 Aug 2026 14:11:14 +0900 Subject: [PATCH] eth/downloader: don't log stale access list reservations as errors (#35493) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since #35386 blocks are delivered without waiting for their access list, a reserved BAL task can outlive its block and hit the stale branch of `reserveHeaders`, which logs at error level — demote that case to debug. --------- Co-authored-by: rjl493456442 --- eth/downloader/queue.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/eth/downloader/queue.go b/eth/downloader/queue.go index a93ef14411..206886c3ff 100644 --- a/eth/downloader/queue.go +++ b/eth/downloader/queue.go @@ -594,7 +594,18 @@ func (q *queue) reserveHeaders(p *peerConnection, count int, taskPool map[common taskQueue.PopItem() progress = true delete(taskPool, header.Hash()) - log.Error("Fetch reservation already delivered", "number", header.Number.Uint64()) + + // Access lists are a best-effort component that block delivery + // never waits on, so a retrieval task outliving the delivery of + // its block is expected rather than a sign of queue corruption. + // It happens whenever a request in flight across the delivery is + // handed back afterwards, be it by the peer not possessing the + // list, by a timeout or by a disconnect. + if kind == balType { + log.Debug("Access list reservation already delivered", "number", header.Number.Uint64()) + } else { + log.Error("Fetch reservation already delivered", "number", header.Number.Uint64()) + } continue } if throttle {