Downloader.fillHeaderSkeleton¶
| Source (upstream pre-purge) | Current | |
|---|---|---|
| File | eth/downloader/downloader.go |
downloader_pow.go |
| Symbol | Downloader.fillHeaderSkeleton |
Downloader.fillHeaderSkeleton |
| Ref | 45baf2111~1 |
etc/v1.17.3-full-node |
Diffs: receives queueWithHeaders param instead of using d.queue inline header fields
3-way merge — purge → getc ← upstream¶
pre-purge≈ adapted (origin inferred by similarity)fork-only
↗// fillHeaderSkeleton concurrently retrieves headers from all our available peers
// and maps them to the provided skeleton header chain.
//
// Any partial results from the beginning of the skeleton is (if possible) forwarded
// immediately to the header processor to keep the rest of the pipeline full even
// in the case of header stalls.
//
// The method returns the entire filled skeleton and also the number of headers
// already forwarded for processing.
func (d *Downloader) fillHeaderSkeleton(from uint64, skeleton []*types.Header, qwh *queueWithHeaders) ([]*types.Header, []common.Hash, int, error) {
↗ log.Debug("Filling up skeleton", "from", from)
≈ qwh.ScheduleSkeleton(from, skeleton)
hq := &headerQueue{d: d, queue: qwh}
err := d.concurrentFetch(hq)
↗ if err != nil {
log.Debug("Skeleton fill failed", "err", err)
}
≈ filled, hashes, proced := qwh.RetrieveHeaders()
↗ if err == nil {
log.Debug("Skeleton fill succeeded", "filled", len(filled), "processed", proced)
}
return filled, hashes, proced, err
}
core-geth validation — +5 -4
| | | |---|---| | File | [`downloader.go`](https://github.com/etclabscore/core-geth/blob/v1.12.20/eth/downloader/downloader.go) | | Symbol | `Downloader.fillHeaderSkeleton` | | Ref | `v1.12.20` |--- a/core-geth/eth/downloader/downloader.go
+++ b/etc/eth/downloader/downloader_pow.go
@@ -7,15 +7,16 @@
//
// The method returns the entire filled skeleton and also the number of headers
// already forwarded for processing.
-func (d *Downloader) fillHeaderSkeleton(from uint64, skeleton []*types.Header) ([]*types.Header, []common.Hash, int, error) {
+func (d *Downloader) fillHeaderSkeleton(from uint64, skeleton []*types.Header, qwh *queueWithHeaders) ([]*types.Header, []common.Hash, int, error) {
log.Debug("Filling up skeleton", "from", from)
- d.queue.ScheduleSkeleton(from, skeleton)
+ qwh.ScheduleSkeleton(from, skeleton)
- err := d.concurrentFetch((*headerQueue)(d), false)
+ hq := &headerQueue{d: d, queue: qwh}
+ err := d.concurrentFetch(hq)
if err != nil {
log.Debug("Skeleton fill failed", "err", err)
}
- filled, hashes, proced := d.queue.RetrieveHeaders()
+ filled, hashes, proced := qwh.RetrieveHeaders()
if err == nil {
log.Debug("Skeleton fill succeeded", "filled", len(filled), "processed", proced)
}