aboutsummaryrefslogtreecommitdiffstats
path: root/trie/sync.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-11-01 19:31:12 +0800
committerGitHub <noreply@github.com>2016-11-01 19:31:12 +0800
commitf4d878f3d83187d27411c0ea5ebd55a82b27e35e (patch)
tree0a684c4ebb5ce6846862df6c10d0209991122751 /trie/sync.go
parent61acd18e7967d67fd6db24be360586cf017d577b (diff)
parente1b4acfb6e6a0f930afeb79749ac56c381609258 (diff)
downloadgo-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.go18
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.