Skip to content

Commit 2767e84

Browse files
rjl493456442mariameda
authored andcommitted
eth/downloader: flush state sync data before exit (ethereum#16280)
1 parent 2e9ecd1 commit 2767e84

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

eth/downloader/statesync.go

+13-5
Original file line numberDiff line numberDiff line change
@@ -274,15 +274,21 @@ func (s *stateSync) Cancel() error {
274274
// receive data from peers, rather those are buffered up in the downloader and
275275
// pushed here async. The reason is to decouple processing from data receipt
276276
// and timeouts.
277-
func (s *stateSync) loop() error {
277+
func (s *stateSync) loop() (err error) {
278278
// Listen for new peer events to assign tasks to them
279279
newPeer := make(chan *peerConnection, 1024)
280280
peerSub := s.d.peers.SubscribeNewPeers(newPeer)
281281
defer peerSub.Unsubscribe()
282+
defer func() {
283+
cerr := s.commit(true)
284+
if err == nil {
285+
err = cerr
286+
}
287+
}()
282288

283289
// Keep assigning new tasks until the sync completes or aborts
284290
for s.sched.Pending() > 0 {
285-
if err := s.commit(false); err != nil {
291+
if err = s.commit(false); err != nil {
286292
return err
287293
}
288294
s.assignTasks()
@@ -307,14 +313,14 @@ func (s *stateSync) loop() error {
307313
s.d.dropPeer(req.peer.id)
308314
}
309315
// Process all the received blobs and check for stale delivery
310-
if err := s.process(req); err != nil {
316+
if err = s.process(req); err != nil {
311317
log.Warn("Node data write error", "err", err)
312318
return err
313319
}
314320
req.peer.SetNodeDataIdle(len(req.response))
315321
}
316322
}
317-
return s.commit(true)
323+
return nil
318324
}
319325

320326
func (s *stateSync) commit(force bool) error {
@@ -323,7 +329,9 @@ func (s *stateSync) commit(force bool) error {
323329
}
324330
start := time.Now()
325331
b := s.d.stateDB.NewBatch()
326-
s.sched.Commit(b)
332+
if written, err := s.sched.Commit(b); written == 0 || err != nil {
333+
return err
334+
}
327335
if err := b.Write(); err != nil {
328336
return fmt.Errorf("DB write error: %v", err)
329337
}

trie/sync.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func (s *TrieSync) Process(results []SyncResult) (bool, int, error) {
212212
}
213213

214214
// Commit flushes the data stored in the internal membatch out to persistent
215-
// storage, returning th enumber of items written and any occurred error.
215+
// storage, returning the number of items written and any occurred error.
216216
func (s *TrieSync) Commit(dbw ethdb.Putter) (int, error) {
217217
// Dump the membatch into a database dbw
218218
for i, key := range s.membatch.order {

0 commit comments

Comments
 (0)