Skip to content

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)
    }

← Sync & Downloader