mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-24 13:46:43 +00:00
fix: with context to quick exit
This commit is contained in:
parent
a63160d4c9
commit
57fec99aac
1 changed files with 10 additions and 3 deletions
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue