@@ -1280,41 +1280,13 @@ func (d *Downloader) fetchReceipts(from uint64, beaconMode bool) error {
1280
1280
// keeps processing and scheduling them into the header chain and downloader's
1281
1281
// queue until the stream ends or a failure occurs.
1282
1282
func (d * Downloader ) processHeaders (origin uint64 , td , ttd * big.Int , beaconMode bool ) error {
1283
- // Keep a count of uncertain headers to roll back
1284
1283
var (
1285
- rollback uint64 // Zero means no rollback (fine as you can't unroll the genesis)
1286
- rollbackErr error
1287
- mode = d .getMode ()
1284
+ mode = d .getMode ()
1285
+ gotHeaders = false // Wait for batches of headers to process
1288
1286
)
1289
- defer func () {
1290
- if rollback > 0 {
1291
- lastHeader , lastFastBlock , lastBlock := d .lightchain .CurrentHeader ().Number , common .Big0 , common .Big0
1292
- if mode != LightSync {
1293
- lastFastBlock = d .blockchain .CurrentSnapBlock ().Number
1294
- lastBlock = d .blockchain .CurrentBlock ().Number
1295
- }
1296
- if err := d .lightchain .SetHead (rollback - 1 ); err != nil { // -1 to target the parent of the first uncertain block
1297
- // We're already unwinding the stack, only print the error to make it more visible
1298
- log .Error ("Failed to roll back chain segment" , "head" , rollback - 1 , "err" , err )
1299
- }
1300
- curFastBlock , curBlock := common .Big0 , common .Big0
1301
- if mode != LightSync {
1302
- curFastBlock = d .blockchain .CurrentSnapBlock ().Number
1303
- curBlock = d .blockchain .CurrentBlock ().Number
1304
- }
1305
- log .Warn ("Rolled back chain segment" ,
1306
- "header" , fmt .Sprintf ("%d->%d" , lastHeader , d .lightchain .CurrentHeader ().Number ),
1307
- "snap" , fmt .Sprintf ("%d->%d" , lastFastBlock , curFastBlock ),
1308
- "block" , fmt .Sprintf ("%d->%d" , lastBlock , curBlock ), "reason" , rollbackErr )
1309
- }
1310
- }()
1311
- // Wait for batches of headers to process
1312
- gotHeaders := false
1313
-
1314
1287
for {
1315
1288
select {
1316
1289
case <- d .cancelCh :
1317
- rollbackErr = errCanceled
1318
1290
return errCanceled
1319
1291
1320
1292
case task := <- d .headerProcCh :
@@ -1363,8 +1335,6 @@ func (d *Downloader) processHeaders(origin uint64, td, ttd *big.Int, beaconMode
1363
1335
}
1364
1336
}
1365
1337
}
1366
- // Disable any rollback and return
1367
- rollback = 0
1368
1338
return nil
1369
1339
}
1370
1340
// Otherwise split the chunk of headers into batches and process them
@@ -1375,7 +1345,6 @@ func (d *Downloader) processHeaders(origin uint64, td, ttd *big.Int, beaconMode
1375
1345
// Terminate if something failed in between processing chunks
1376
1346
select {
1377
1347
case <- d .cancelCh :
1378
- rollbackErr = errCanceled
1379
1348
return errCanceled
1380
1349
default :
1381
1350
}
@@ -1422,29 +1391,11 @@ func (d *Downloader) processHeaders(origin uint64, td, ttd *big.Int, beaconMode
1422
1391
}
1423
1392
if len (chunkHeaders ) > 0 {
1424
1393
if n , err := d .lightchain .InsertHeaderChain (chunkHeaders ); err != nil {
1425
- rollbackErr = err
1426
-
1427
- // If some headers were inserted, track them as uncertain
1428
- if mode == SnapSync && n > 0 && rollback == 0 {
1429
- rollback = chunkHeaders [0 ].Number .Uint64 ()
1430
- }
1431
1394
log .Warn ("Invalid header encountered" , "number" , chunkHeaders [n ].Number , "hash" , chunkHashes [n ], "parent" , chunkHeaders [n ].ParentHash , "err" , err )
1432
1395
return fmt .Errorf ("%w: %v" , errInvalidChain , err )
1433
1396
}
1434
- // All verifications passed, track all headers within the allowed limits
1435
- if mode == SnapSync {
1436
- head := chunkHeaders [len (chunkHeaders )- 1 ].Number .Uint64 ()
1437
- if head - rollback > uint64 (fsHeaderSafetyNet ) {
1438
- rollback = head - uint64 (fsHeaderSafetyNet )
1439
- } else {
1440
- rollback = 1
1441
- }
1442
- }
1443
1397
}
1444
1398
if len (rejected ) != 0 {
1445
- // Merge threshold reached, stop importing, but don't roll back
1446
- rollback = 0
1447
-
1448
1399
log .Info ("Legacy sync reached merge threshold" , "number" , rejected [0 ].Number , "hash" , rejected [0 ].Hash (), "td" , td , "ttd" , ttd )
1449
1400
return ErrMergeTransition
1450
1401
}
@@ -1455,15 +1406,13 @@ func (d *Downloader) processHeaders(origin uint64, td, ttd *big.Int, beaconMode
1455
1406
for d .queue .PendingBodies () >= maxQueuedHeaders || d .queue .PendingReceipts () >= maxQueuedHeaders {
1456
1407
select {
1457
1408
case <- d .cancelCh :
1458
- rollbackErr = errCanceled
1459
1409
return errCanceled
1460
1410
case <- time .After (time .Second ):
1461
1411
}
1462
1412
}
1463
1413
// Otherwise insert the headers for content retrieval
1464
1414
inserts := d .queue .Schedule (chunkHeaders , chunkHashes , origin )
1465
1415
if len (inserts ) != len (chunkHeaders ) {
1466
- rollbackErr = fmt .Errorf ("stale headers: len inserts %v len(chunk) %v" , len (inserts ), len (chunkHeaders ))
1467
1416
return fmt .Errorf ("%w: stale headers" , errBadPeer )
1468
1417
}
1469
1418
}
0 commit comments