Skip to content

Commit

Permalink
fix snap sync bug
Browse files Browse the repository at this point in the history
  • Loading branch information
mask-pp committed Mar 26, 2024
1 parent d81e682 commit 89c4d49
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 17 deletions.
14 changes: 6 additions & 8 deletions core/blockchain.go
Original file line number Diff line number Diff line change
Expand Up @@ -1005,14 +1005,12 @@ func (bc *BlockChain) Stop() {
if !bc.cacheConfig.TrieDirtyDisabled {
triedb := bc.triedb

maxOffset := uint64(TriesInMemory - 1)
// CHANGE(taiko): If Taiko is enabled, we need to set the max offset based on the finalized block.
maxOffset := uint64(TriesInMemory*2 - 1)
if bc.chainConfig.Taiko {
if header := bc.CurrentFinalBlock(); header != nil {
maxOffset = bc.CurrentBlock().Number.Uint64() - header.Number.Uint64()
} else {
maxOffset = bc.CurrentBlock().Number.Uint64()
log.Debug("Finalized block not found, using default trie gc limit")
header, curBlock := bc.CurrentFinalBlock(), bc.CurrentBlock()
if header != nil && curBlock != nil {
maxOffset += curBlock.Number.Uint64() - header.Number.Uint64()
}
}
for _, offset := range []uint64{0, 1, maxOffset} {
Expand Down Expand Up @@ -1409,8 +1407,8 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types.
// CHANGE(taiko): If Taiko is enabled, we need to set the max offset based on the finalized block.
var chosen uint64
if bc.chainConfig.Taiko {
if header := bc.CurrentFinalBlock(); header != nil {
chosen = header.Number.Uint64() - 1
if header := bc.CurrentFinalBlock(); header != nil && header.Number.Uint64() > TriesInMemory*2 {
chosen = header.Number.Uint64() - TriesInMemory*2
} else {
log.Debug("Finalized block not found, using chosen number for trie gc")
}
Expand Down
31 changes: 22 additions & 9 deletions core/blockchain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2173,7 +2173,7 @@ func testTaikoPruningFinalize(t *testing.T, n int, finalizedNumber uint64, stop
if n, err := chain.InsertChain([]*types.Block{block}); err != nil {
t.Fatalf("block %d: failed to insert into chain: %v", n, err)
}
if block.Number().Uint64() == finalizedNumber {
if finalizedNumber > 0 && block.Number().Uint64() == finalizedNumber {
// Set the finalized block header.
chain.SetFinalized(block.Header())
}
Expand All @@ -2195,17 +2195,30 @@ func testTaikoPruningFinalize(t *testing.T, n int, finalizedNumber uint64, stop
}
}

assert.NotEmpty(t, firstNonPrunedBlock)
assert.Equal(t, finalizedNumber, firstNonPrunedBlock.NumberU64())
assert.True(t, firstNonPrunedBlock != nil)

if finalizedNumber == 0 || finalizedNumber <= TriesInMemory*2 {
assert.Equal(t, uint64(1), firstNonPrunedBlock.Number().Uint64())
} else {
assert.Equal(t, uint64(finalizedNumber-TriesInMemory*2+1), firstNonPrunedBlock.Number().Uint64())
}
}

func TestTaikoPruningFinalize(t *testing.T) {
testTaikoPruningFinalize(t, 2*TriesInMemory, TriesInMemory/2, false)
testTaikoPruningFinalize(t, 2*TriesInMemory, TriesInMemory/2, true)
testTaikoPruningFinalize(t, 2*TriesInMemory, 2*TriesInMemory-1, false)
testTaikoPruningFinalize(t, 2*TriesInMemory, 2*TriesInMemory-1, true)
testTaikoPruningFinalize(t, 8000, 100, true)
testTaikoPruningFinalize(t, 8000, 100, false)
//testTaikoPruningFinalize(t, 3*TriesInMemory, 0, false)
testTaikoPruningFinalize(t, 3*TriesInMemory, 0, true)

testTaikoPruningFinalize(t, 3*TriesInMemory, TriesInMemory/2, false)
testTaikoPruningFinalize(t, 3*TriesInMemory, TriesInMemory/2, true)

testTaikoPruningFinalize(t, 3*TriesInMemory, TriesInMemory*2, false)
testTaikoPruningFinalize(t, 3*TriesInMemory, TriesInMemory*2, true)

testTaikoPruningFinalize(t, 3*TriesInMemory, TriesInMemory*2+1, false)
testTaikoPruningFinalize(t, 3*TriesInMemory, TriesInMemory*2+1, true)

testTaikoPruningFinalize(t, 3*TriesInMemory, TriesInMemory*2+10, false)
testTaikoPruningFinalize(t, 3*TriesInMemory, TriesInMemory*2+10, true)
}

// Tests that importing a sidechain (S), where
Expand Down

0 comments on commit 89c4d49

Please sign in to comment.