fix: with context to quick exit

This commit is contained in:
jsvisa 2025-08-31 09:22:35 +08:00
parent a63160d4c9
commit 57fec99aac

View file

@ -18,6 +18,7 @@ package rawdb
import ( import (
"bytes" "bytes"
"context"
"errors" "errors"
"fmt" "fmt"
"maps" "maps"
@ -443,7 +444,7 @@ func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error {
unaccountedMu sync.Mutex unaccountedMu sync.Mutex
) )
processRange := func(rangePrefix []byte) error { processRange := func(ctx context.Context, rangePrefix []byte) error {
// Skip ranges that are entirely before keyStart // Skip ranges that are entirely before keyStart
if len(keyStart) > 0 && len(rangePrefix) > 0 && rangePrefix[0] < keyStart[0] { if len(keyStart) > 0 && len(rangePrefix) > 0 && rangePrefix[0] < keyStart[0] {
return nil return nil
@ -560,13 +561,19 @@ func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error {
unaccountedMu.Unlock() unaccountedMu.Unlock()
} }
} }
select {
case <-ctx.Done():
return ctx.Err()
default:
}
} }
return it.Error() return it.Error()
} }
var ( var (
eg errgroup.Group eg, ctx = errgroup.WithContext(context.Background())
workers = runtime.NumCPU() workers = runtime.NumCPU()
) )
eg.SetLimit(workers) eg.SetLimit(workers)
@ -591,7 +598,7 @@ func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error {
// Inspect key-value database in parallel. // Inspect key-value database in parallel.
for i := 0; i < 256; i++ { for i := 0; i < 256; i++ {
rangePrefix := []byte{byte(i)} rangePrefix := []byte{byte(i)}
eg.Go(func() error { return processRange(rangePrefix) }) eg.Go(func() error { return processRange(ctx, rangePrefix) })
} }
if err := eg.Wait(); err != nil { if err := eg.Wait(); err != nil {