mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-28 07:36:44 +00:00
Scheduling of state node downloads hogged the downloader queue lock when new requests were scheduled. This caused timeouts for other requests. With this change, state sync is fully independent of all other downloads and doesn't involve the queue at all. State sync is started and checked on in processContent. This is slightly awkward because processContent doesn't have a select loop. Instead, the queue is closed by an auxiliary goroutine when state sync fails. We tried several alternatives to this but settled on the current approach because it's the least amount of change overall. Handling of the pivot block has changed slightly: the queue previously prevented import of pivot block receipts before the state of the pivot block was available. In this commit, the receipt will be imported before the state. This causes an annoyance where the pivot block is committed as fast block head even when state downloads fail. Stay tuned for more updates in this area ;) |
||
|---|---|---|
| .. | ||
| downloader | ||
| fetcher | ||
| filters | ||
| gasprice | ||
| api.go | ||
| api_backend.go | ||
| api_test.go | ||
| backend.go | ||
| backend_test.go | ||
| bind.go | ||
| config.go | ||
| db_upgrade.go | ||
| gen_config.go | ||
| handler.go | ||
| handler_test.go | ||
| helper_test.go | ||
| metrics.go | ||
| peer.go | ||
| protocol.go | ||
| protocol_test.go | ||
| sync.go | ||
| sync_test.go | ||