From 686f7438d37db6cf1fea640df51f8f4a36b6d6c2 Mon Sep 17 00:00:00 2001 From: Gary Rong Date: Mon, 9 Jan 2023 15:07:08 +0800 Subject: [PATCH] eth/downloader: fix unexpected skeleton header deletion --- eth/downloader/skeleton.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/eth/downloader/skeleton.go b/eth/downloader/skeleton.go index 8dcec2292..6fa565bd5 100644 --- a/eth/downloader/skeleton.go +++ b/eth/downloader/skeleton.go @@ -977,8 +977,14 @@ func (s *skeleton) processResponse(res *headerResponse) (linked bool, merged boo // the expected new sync cycle after some propagated blocks. Log // it for debugging purposes, explicitly clean and don't escalate. case subchains == 2 && s.progress.Subchains[1].Head == s.progress.Subchains[1].Tail: - log.Debug("Cleaning previous beacon sync state", "head", s.progress.Subchains[1].Head) - rawdb.DeleteSkeletonHeader(batch, s.progress.Subchains[1].Head) + // Remove the leftover skeleton header associated with old + // skeleton chain only if it's not covered by the current + // skeleton range. + if s.progress.Subchains[1].Head < s.progress.Subchains[0].Tail { + log.Debug("Cleaning previous beacon sync state", "head", s.progress.Subchains[1].Head) + rawdb.DeleteSkeletonHeader(batch, s.progress.Subchains[1].Head) + } + // Drop the leftover skeleton chain since it's stale. s.progress.Subchains = s.progress.Subchains[:1] // If we have more than one header or more than one leftover chain,