From 57fec99aac1d85c1e13ec7084ec819da5f4a7a6f Mon Sep 17 00:00:00 2001 From: jsvisa Date: Sun, 31 Aug 2025 09:22:35 +0800 Subject: [PATCH] fix: with context to quick exit --- core/rawdb/database.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/core/rawdb/database.go b/core/rawdb/database.go index 93fb453f99..de7efd3db3 100644 --- a/core/rawdb/database.go +++ b/core/rawdb/database.go @@ -18,6 +18,7 @@ package rawdb import ( "bytes" + "context" "errors" "fmt" "maps" @@ -443,7 +444,7 @@ func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error { unaccountedMu sync.Mutex ) - processRange := func(rangePrefix []byte) error { + processRange := func(ctx context.Context, rangePrefix []byte) error { // Skip ranges that are entirely before keyStart if len(keyStart) > 0 && len(rangePrefix) > 0 && rangePrefix[0] < keyStart[0] { return nil @@ -560,13 +561,19 @@ func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error { unaccountedMu.Unlock() } } + + select { + case <-ctx.Done(): + return ctx.Err() + default: + } } return it.Error() } var ( - eg errgroup.Group + eg, ctx = errgroup.WithContext(context.Background()) workers = runtime.NumCPU() ) eg.SetLimit(workers) @@ -591,7 +598,7 @@ func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error { // Inspect key-value database in parallel. for i := 0; i < 256; 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 {