Skip to content

Commit e6cee39

Browse files
committed
eth/protocols/snap: return error from resetSyncState instead of exiting
1 parent 9bb8941 commit e6cee39

1 file changed

Lines changed: 24 additions & 11 deletions

File tree

eth/protocols/snap/syncv2.go

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,9 @@ func (s *syncerV2) Sync(target *types.Header, cancel chan struct{}) error {
547547

548548
// Retrieve the previous sync status from DB. If there's no persisted
549549
// status, sync is either fresh or already complete.
550-
s.loadSyncStatus()
550+
if err := s.loadSyncStatus(); err != nil {
551+
return err
552+
}
551553

552554
// isPivotChanged is true when we have prior progress against a different
553555
// pivot. That means we need to roll forward via catchUp, or wipe and
@@ -572,7 +574,9 @@ func (s *syncerV2) Sync(target *types.Header, cancel chan struct{}) error {
572574
// right after the commit just needs to recommit.
573575
if prevPivot != nil && s.getPhase() == phaseComplete && isPivotCommitted(s.db, prevPivot) {
574576
log.Warn("Reenabled snap sync over a completed one, restarting from scratch", "oldpivot", prevPivot.Number, "target", target.Number)
575-
s.resetSyncState()
577+
if err := s.resetSyncState(); err != nil {
578+
return err
579+
}
576580
prevPivot = nil
577581
isPivotChanged = false
578582
}
@@ -614,7 +618,9 @@ func (s *syncerV2) Sync(target *types.Header, cancel chan struct{}) error {
614618
// flushed snapshot data the journal doesn't cover.
615619
if err := s.pruneStaleState(); err != nil {
616620
log.Warn("Persisted progress unusable, restarting snap sync from scratch", "err", err)
617-
s.resetSyncState()
621+
if err := s.resetSyncState(); err != nil {
622+
return err
623+
}
618624
}
619625
}
620626
} else {
@@ -624,20 +630,26 @@ func (s *syncerV2) Sync(target *types.Header, cancel chan struct{}) error {
624630
switch {
625631
case isPivotReorged(s.db, prevPivot, target):
626632
log.Warn("Restarting snap sync from scratch", "oldnumber", prevPivot.Number, "oldHash", prevPivot.Hash())
627-
s.resetSyncState()
633+
if err := s.resetSyncState(); err != nil {
634+
return err
635+
}
628636
case catchUpExceedsRetention(prevPivot, target):
629637
// The pivot moved further than the BAL retention window. The access
630638
// lists required for catch-up are almost certainly unavailable from
631639
// peers, so discard the stale progress and resync from scratch
632640
// instead of starting a catch-up doomed to stall.
633641
log.Warn("Catch-up gap exceeds BAL retention, restarting snap sync from scratch", "oldnumber", prevPivot.Number, "newnumber", target.Number, "gap", new(big.Int).Sub(target.Number, prevPivot.Number), "limit", maxCatchUpBlocks)
634-
s.resetSyncState()
642+
if err := s.resetSyncState(); err != nil {
643+
return err
644+
}
635645
default:
636646
// An unclean shutdown may have left flushed snapshot data the journal
637647
// doesn't cover.
638648
if err := s.pruneStaleState(); err != nil {
639649
log.Warn("Persisted progress unusable, restarting snap sync from scratch", "err", err)
640-
s.resetSyncState()
650+
if err := s.resetSyncState(); err != nil {
651+
return err
652+
}
641653
break
642654
}
643655
// A canonical pivot move past a frozen pivot should be impossible:
@@ -1209,7 +1221,7 @@ func (s *syncerV2) processAccessListResponse(res *accessListResponse, headers ma
12091221
// or generates a fresh one if none is available. The persisted blob is framed
12101222
// as `[version byte | JSON payload]`; a missing or mismatching version byte
12111223
// causes the progress to be discarded and sync to start fresh.
1212-
func (s *syncerV2) loadSyncStatus() {
1224+
func (s *syncerV2) loadSyncStatus() error {
12131225
var progress syncProgressV2
12141226

12151227
if raw := rawdb.ReadSnapshotSyncStatus(s.db); len(raw) > 0 {
@@ -1246,11 +1258,11 @@ func (s *syncerV2) loadSyncStatus() {
12461258
// eth_syncing reports real stats during catch-up and trie generation
12471259
// after a resume, instead of the zero-valued initial snapshot.
12481260
s.refreshProgressLocked()
1249-
return
1261+
return nil
12501262
}
12511263
}
12521264
// Either we've failed to decode the previous state, or there was none.
1253-
s.resetSyncState()
1265+
return s.resetSyncState()
12541266
}
12551267

12561268
// increaseKey increase the input key by one bit. Return nil if the entire
@@ -1379,14 +1391,14 @@ func (s *syncerV2) pruneStaleState() error {
13791391
// resetSyncState wipes all persisted snap-sync data (sync status, account
13801392
// and storage snapshots) and re-initializes in-memory state with a fresh
13811393
// chunking of the account hash range.
1382-
func (s *syncerV2) resetSyncState() {
1394+
func (s *syncerV2) resetSyncState() error {
13831395
batch := s.db.NewBatch()
13841396
rawdb.DeleteSnapshotSyncStatus(batch)
13851397
deleteRange(batch, rawdb.SnapshotAccountPrefix)
13861398
deleteRange(batch, rawdb.SnapshotStoragePrefix)
13871399
s.resetTrienodes(batch)
13881400
if err := batch.Write(); err != nil {
1389-
log.Crit("Failed to wipe snap sync state", "err", err)
1401+
return err
13901402
}
13911403

13921404
s.lock.Lock()
@@ -1424,6 +1436,7 @@ func (s *syncerV2) resetSyncState() {
14241436
log.Debug("Created account sync task", "from", next, "last", last)
14251437
next = common.BigToHash(new(big.Int).Add(last.Big(), common.Big1))
14261438
}
1439+
return nil
14271440
}
14281441

14291442
// saveSyncStatus marshals the remaining sync tasks into db.

0 commit comments

Comments
 (0)