diff --git a/cmd/integration/commands/state_stages.go b/cmd/integration/commands/state_stages.go index d6a8aa703289aa851bbe10954017b481c676284f..f9c5bcbf9cbc45dd4fc685efa8cd5cd568dfa63b 100644 --- a/cmd/integration/commands/state_stages.go +++ b/cmd/integration/commands/state_stages.go @@ -379,6 +379,9 @@ func checkChanges(expectedAccountChanges map[uint64]*changeset.ChangeSet, tx eth checkHistoryFrom = prunedTo } for blockN := range expectedAccountChanges { + if blockN <= checkHistoryFrom { + continue + } if err := checkChangeSet(tx, blockN, expectedAccountChanges[blockN], expectedStorageChanges[blockN]); err != nil { return err } diff --git a/eth/stagedsync/default_stages.go b/eth/stagedsync/default_stages.go index 1fa1431077de33714366bb06439429e5f307b210..627dcc448f68dab91e903aa2846432aca5353289 100644 --- a/eth/stagedsync/default_stages.go +++ b/eth/stagedsync/default_stages.go @@ -57,9 +57,10 @@ func DefaultStages(ctx context.Context, }, }, { - ID: stages.CreateHeadersSnapshot, - Description: "Create headers snapshot", - Disabled: true, + ID: stages.CreateHeadersSnapshot, + Description: "Create headers snapshot", + Disabled: true, + DisabledDescription: "Enable by --snapshot.layout", Forward: func(firstCycle bool, s *StageState, u Unwinder, tx ethdb.RwTx) error { return SpawnHeadersSnapshotGenerationStage(s, tx, snapshotHeaders, firstCycle, ctx) }, @@ -84,9 +85,10 @@ func DefaultStages(ctx context.Context, }, }, { - ID: stages.CreateBodiesSnapshot, - Description: "Create bodies snapshot", - Disabled: true, + ID: stages.CreateBodiesSnapshot, + Description: "Create bodies snapshot", + Disabled: true, + DisabledDescription: "Enable by --snapshot.layout", Forward: func(firstCycle bool, s *StageState, u Unwinder, tx ethdb.RwTx) error { return SpawnBodiesSnapshotGenerationStage(s, tx, snapshotBodies, ctx) }, diff --git a/eth/stagedsync/stage_execute.go b/eth/stagedsync/stage_execute.go index f0f7ddb7a6b3076a4ccdc70a6243cb42ca728789..a0d59130c9d78989b36b757ca66407b4817ff07a 100644 --- a/eth/stagedsync/stage_execute.go +++ b/eth/stagedsync/stage_execute.go @@ -229,6 +229,13 @@ func SpawnExecuteBlocksStage(s *StageState, u Unwinder, tx ethdb.RwTx, toBlock u if errStart != nil { return errStart } + nextStageProgress, err := stages.GetStageProgress(tx, stages.HashState) + if err != nil { + return err + } + nextStagesExpectData := nextStageProgress > 0 // Incremental move of next stages depend on fully written ChangeSets, Receipts, CallTraceSet + + logPrefix := s.LogPrefix() var to = prevStageProgress if toBlock > 0 { to = min(prevStageProgress, toBlock) @@ -236,7 +243,6 @@ func SpawnExecuteBlocksStage(s *StageState, u Unwinder, tx ethdb.RwTx, toBlock u if to <= s.BlockNumber { return nil } - logPrefix := s.LogPrefix() if to > s.BlockNumber+16 { log.Info(fmt.Sprintf("[%s] Blocks execution", logPrefix), "from", s.BlockNumber, "to", to) } @@ -281,9 +287,10 @@ Loop: checkTEVMCode = ethdb.GetCheckTEVM(tx) } - writeReceipts := blockNum > cfg.prune.Receipts.PruneTo(to) - writeChangeSets := blockNum > cfg.prune.History.PruneTo(to) - writeCallTraces := blockNum > cfg.prune.CallTraces.PruneTo(to) + // Incremental move of next stages depend on fully written ChangeSets, Receipts, CallTraceSet + writeChangeSets := nextStagesExpectData || blockNum > cfg.prune.History.PruneTo(to) + writeReceipts := nextStagesExpectData || blockNum > cfg.prune.Receipts.PruneTo(to) + writeCallTraces := nextStagesExpectData || blockNum > cfg.prune.CallTraces.PruneTo(to) if err = executeBlock(block, tx, batch, cfg, *cfg.vmConfig, writeChangeSets, writeReceipts, writeCallTraces, checkTEVMCode, initialCycle); err != nil { log.Error(fmt.Sprintf("[%s] Execution failed", logPrefix), "block", blockNum, "hash", block.Hash().String(), "error", err) u.UnwindTo(blockNum-1, block.Hash()) diff --git a/eth/stagedsync/stage_interhashes.go b/eth/stagedsync/stage_interhashes.go index 196a4310a622c641f61735647aa296a10e8ad160..e6b5b5f813f8a6834b29f41425c697d5f9c157b5 100644 --- a/eth/stagedsync/stage_interhashes.go +++ b/eth/stagedsync/stage_interhashes.go @@ -479,6 +479,9 @@ func ResetHashState(tx ethdb.RwTx) error { if err := stages.SaveStageProgress(tx, stages.HashState, 0); err != nil { return err } + if err := stages.SaveStagePruneProgress(tx, stages.HashState, 0); err != nil { + return err + } return nil } @@ -493,6 +496,9 @@ func ResetIH(tx ethdb.RwTx) error { if err := stages.SaveStageProgress(tx, stages.IntermediateHashes, 0); err != nil { return err } + if err := stages.SaveStagePruneProgress(tx, stages.IntermediateHashes, 0); err != nil { + return err + } return nil }