core: handle corner case in report

This commit is contained in:
Gary Rong 2025-03-20 20:21:01 +08:00
parent 54244fe263
commit e9e5ab1fd8
2 changed files with 18 additions and 1 deletions

View file

@ -250,6 +250,14 @@ func (indexer *txIndexer) loop(chain *BlockChain) {
// report returns the tx indexing progress. // report returns the tx indexing progress.
func (indexer *txIndexer) report(head uint64) TxIndexProgress { func (indexer *txIndexer) report(head uint64) TxIndexProgress {
// Special case if the head is even below the cutoff,
// nothing to index.
if head < indexer.cutoff {
return TxIndexProgress{
Indexed: 0,
Remaining: 0,
}
}
// Compute how many blocks are supposed to be indexed // Compute how many blocks are supposed to be indexed
total := indexer.limit total := indexer.limit
if indexer.limit == 0 || total > head { if indexer.limit == 0 || total > head {
@ -259,7 +267,7 @@ func (indexer *txIndexer) report(head uint64) TxIndexProgress {
if total > length { if total > length {
total = length total = length
} }
// Compute how many block have been indexed // Compute how many blocks have been indexed
var indexed uint64 var indexed uint64
tail := rawdb.ReadTxIndexTail(indexer.db) tail := rawdb.ReadTxIndexTail(indexer.db)
if tail != nil { if tail != nil {

View file

@ -416,6 +416,15 @@ func TestTxIndexerReport(t *testing.T) {
expIndexed: 62, expIndexed: 62,
expRemaining: 1, expRemaining: 1,
}, },
{
// head = 128, limit = 64, cutoff = 256 => index: [66, 128]
head: chainHead,
limit: 0,
cutoff: 256,
tail: nil,
expIndexed: 0,
expRemaining: 0,
},
} }
for _, c := range cases { for _, c := range cases {
db, _ := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), "", "", false) db, _ := rawdb.NewDatabaseWithFreezer(rawdb.NewMemoryDatabase(), "", "", false)