diff options
author | Péter Szilágyi <peterke@gmail.com> | 2016-11-01 19:31:12 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-01 19:31:12 +0800 |
commit | f4d878f3d83187d27411c0ea5ebd55a82b27e35e (patch) | |
tree | 0a684c4ebb5ce6846862df6c10d0209991122751 /trie/sync.go | |
parent | 61acd18e7967d67fd6db24be360586cf017d577b (diff) | |
parent | e1b4acfb6e6a0f930afeb79749ac56c381609258 (diff) | |
download | go-tangerine-f4d878f3d83187d27411c0ea5ebd55a82b27e35e.tar go-tangerine-f4d878f3d83187d27411c0ea5ebd55a82b27e35e.tar.gz go-tangerine-f4d878f3d83187d27411c0ea5ebd55a82b27e35e.tar.bz2 go-tangerine-f4d878f3d83187d27411c0ea5ebd55a82b27e35e.tar.lz go-tangerine-f4d878f3d83187d27411c0ea5ebd55a82b27e35e.tar.xz go-tangerine-f4d878f3d83187d27411c0ea5ebd55a82b27e35e.tar.zst go-tangerine-f4d878f3d83187d27411c0ea5ebd55a82b27e35e.zip |
Merge pull request #3216 from karalabe/fastsync-bigdb-tuning
core/state, eth/downloader, trie: reset fast-failure on progress
Diffstat (limited to 'trie/sync.go')
-rw-r--r-- | trie/sync.go | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/trie/sync.go b/trie/sync.go index 58b8a1fb6..2158ab750 100644 --- a/trie/sync.go +++ b/trie/sync.go @@ -142,34 +142,40 @@ func (s *TrieSync) Missing(max int) []common.Hash { return requests } -// Process injects a batch of retrieved trie nodes data. -func (s *TrieSync) Process(results []SyncResult) (int, error) { +// Process injects a batch of retrieved trie nodes data, returning if something +// was committed to the database and also the index of an entry if processing of +// it failed. +func (s *TrieSync) Process(results []SyncResult) (bool, int, error) { + committed := false + for i, item := range results { // If the item was not requested, bail out request := s.requests[item.Hash] if request == nil { - return i, ErrNotRequested + return committed, i, ErrNotRequested } // If the item is a raw entry request, commit directly if request.raw { request.data = item.Data s.commit(request, nil) + committed = true continue } // Decode the node data content and update the request node, err := decodeNode(item.Hash[:], item.Data, 0) if err != nil { - return i, err + return committed, i, err } request.data = item.Data // Create and schedule a request for all the children nodes requests, err := s.children(request, node) if err != nil { - return i, err + return committed, i, err } if len(requests) == 0 && request.deps == 0 { s.commit(request, nil) + committed = true continue } request.deps += len(requests) @@ -177,7 +183,7 @@ func (s *TrieSync) Process(results []SyncResult) (int, error) { s.schedule(child) } } - return 0, nil + return committed, 0, nil } // Pending returns the number of state entries currently pending for download. |