Răsfoiți Sursa

eth/downloader: fix header delays during chain dedup

Péter Szilágyi 6 ani în urmă
părinte
comite
85726fdb02
1 a modificat fișierele cu 7 adăugiri și 0 ștergeri
  1. 7 0
      eth/downloader/downloader.go

+ 7 - 0
eth/downloader/downloader.go

@@ -892,6 +892,7 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, pivot uint64)
 		}
 	}
 	// Start pulling the header chain skeleton until all is done
+	ancestor := from
 	getHeaders(from)
 
 	for {
@@ -962,6 +963,12 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, pivot uint64)
 							head = full
 						}
 					}
+					// If the head is below the common ancestor, we're actually deduplicating
+					// already existing chain segments, so use the ancestor as the fake head.
+					// Otherwise we might end up delaying header deliveries pointlessly.
+					if head < ancestor {
+						head = ancestor
+					}
 					// If the head is way older than this batch, delay the last few headers
 					if head+uint64(reorgProtThreshold) < headers[n-1].Number.Uint64() {
 						delay := reorgProtHeaderDelay