From e3fc1f0d78b3cbf015fc4d637b82108e7b67236d Mon Sep 17 00:00:00 2001 From: giuliorebuffo Date: Sat, 20 Aug 2022 15:40:55 +0200 Subject: [PATCH 1/2] Optimized backend pre-checks and fixed FCU deadlock --- eth/stagedsync/stage_headers.go | 2 +- ethdb/privateapi/ethbackend.go | 12 +++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/eth/stagedsync/stage_headers.go b/eth/stagedsync/stage_headers.go index 7384acf297e..4ffadcd0284 100644 --- a/eth/stagedsync/stage_headers.go +++ b/eth/stagedsync/stage_headers.go @@ -164,12 +164,12 @@ func HeadersPOS( return nil } + cfg.hd.SetPOSSync(true) log.Info(fmt.Sprintf("[%s] Waiting for Beacon Chain...", s.LogPrefix())) onlyNewRequests := cfg.hd.PosStatus() == headerdownload.Syncing interrupt, requestId, requestWithStatus := cfg.hd.BeaconRequestList.WaitForRequest(onlyNewRequests, test) - cfg.hd.SetPOSSync(true) cfg.hd.SetHeaderReader(&chainReader{config: &cfg.chainConfig, tx: tx, blockReader: cfg.blockReader}) headerInserter := headerdownload.NewHeaderInserter(s.LogPrefix(), nil, s.BlockNumber, cfg.blockReader) diff --git a/ethdb/privateapi/ethbackend.go b/ethdb/privateapi/ethbackend.go index e4f168ff867..4e27d8f57a3 100644 --- a/ethdb/privateapi/ethbackend.go +++ b/ethdb/privateapi/ethbackend.go @@ -397,24 +397,18 @@ func (s *EthBackendServer) getPayloadStatusFromHashIfPossible(blockHash common.H } // Retrieve parent and total difficulty. var parent *types.Header - var td *big.Int if newPayload { // Obtain TD parent, err = rawdb.ReadHeaderByHash(tx, parentHash) if err != nil { return nil, err } - td, err = rawdb.ReadTdByHash(tx, parentHash) - } else { - td, err = rawdb.ReadTdByHash(tx, blockHash) - } - if err != nil { - return nil, err } + // Check if we already reached TTD. - if td != nil && td.Cmp(s.config.TerminalTotalDifficulty) < 0 { + if !s.hd.POSSync() { log.Warn(fmt.Sprintf("[%s] TTD not reached yet", prefix), "hash", blockHash) - return &engineapi.PayloadStatus{Status: remote.EngineStatus_INVALID, LatestValidHash: common.Hash{}}, nil + return &engineapi.PayloadStatus{Status: remote.EngineStatus_SYNCING, LatestValidHash: common.Hash{}}, nil } var canonicalHash common.Hash From 64b2b1f1f018f8a1a5805d416655328612b535ab Mon Sep 17 00:00:00 2001 From: giuliorebuffo Date: Sat, 20 Aug 2022 15:57:48 +0200 Subject: [PATCH 2/2] fixed tests --- ethdb/privateapi/engine_test.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ethdb/privateapi/engine_test.go b/ethdb/privateapi/engine_test.go index f62b91f8a66..bd56e791772 100644 --- a/ethdb/privateapi/engine_test.go +++ b/ethdb/privateapi/engine_test.go @@ -91,7 +91,7 @@ func TestMockDownloadRequest(t *testing.T) { makeTestDb(ctx, db) hd := headerdownload.NewHeaderDownload(0, 0, nil, nil) - + hd.SetPOSSync(true) events := NewEvents() backend := NewEthBackendServer(ctx, nil, db, events, nil, ¶ms.ChainConfig{TerminalTotalDifficulty: common.Big1}, nil, hd, false) @@ -149,6 +149,7 @@ func TestMockValidExecution(t *testing.T) { makeTestDb(ctx, db) hd := headerdownload.NewHeaderDownload(0, 0, nil, nil) + hd.SetPOSSync(true) events := NewEvents() backend := NewEthBackendServer(ctx, nil, db, events, nil, ¶ms.ChainConfig{TerminalTotalDifficulty: common.Big1}, nil, hd, false) @@ -184,6 +185,7 @@ func TestMockInvalidExecution(t *testing.T) { makeTestDb(ctx, db) hd := headerdownload.NewHeaderDownload(0, 0, nil, nil) + hd.SetPOSSync(true) events := NewEvents() backend := NewEthBackendServer(ctx, nil, db, events, nil, ¶ms.ChainConfig{TerminalTotalDifficulty: common.Big1}, nil, hd, false)