mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
core/rawdb: Use backoff flag to avoid repeating select
This commit is contained in:
parent
9f3ecf34fb
commit
0633250a3b
1 changed files with 19 additions and 36 deletions
|
|
@ -257,6 +257,7 @@ func (f *freezer) Sync() error {
|
||||||
func (f *freezer) freeze(db ethdb.KeyValueStore) {
|
func (f *freezer) freeze(db ethdb.KeyValueStore) {
|
||||||
nfdb := &nofreezedb{KeyValueStore: db}
|
nfdb := &nofreezedb{KeyValueStore: db}
|
||||||
|
|
||||||
|
backoff := false
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-f.quit:
|
case <-f.quit:
|
||||||
|
|
@ -264,55 +265,42 @@ func (f *freezer) freeze(db ethdb.KeyValueStore) {
|
||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
|
if backoff {
|
||||||
|
select {
|
||||||
|
case <-time.NewTimer(freezerRecheckInterval).C:
|
||||||
|
backoff = false
|
||||||
|
case <-f.quit:
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
// Retrieve the freezing threshold.
|
// Retrieve the freezing threshold.
|
||||||
hash := ReadHeadBlockHash(nfdb)
|
hash := ReadHeadBlockHash(nfdb)
|
||||||
if hash == (common.Hash{}) {
|
if hash == (common.Hash{}) {
|
||||||
log.Debug("Current full block hash unavailable") // new chain, empty database
|
log.Debug("Current full block hash unavailable") // new chain, empty database
|
||||||
select {
|
|
||||||
case <-time.NewTimer(freezerRecheckInterval).C:
|
|
||||||
continue
|
|
||||||
case <-f.quit:
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
number := ReadHeaderNumber(nfdb, hash)
|
number := ReadHeaderNumber(nfdb, hash)
|
||||||
switch {
|
switch {
|
||||||
case number == nil:
|
case number == nil:
|
||||||
log.Error("Current full block number unavailable", "hash", hash)
|
log.Error("Current full block number unavailable", "hash", hash)
|
||||||
select {
|
backoff = true
|
||||||
case <-time.NewTimer(freezerRecheckInterval).C:
|
continue
|
||||||
continue
|
|
||||||
case <-f.quit:
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
case *number < params.ImmutabilityThreshold:
|
case *number < params.ImmutabilityThreshold:
|
||||||
log.Debug("Current full block not old enough", "number", *number, "hash", hash, "delay", params.ImmutabilityThreshold)
|
log.Debug("Current full block not old enough", "number", *number, "hash", hash, "delay", params.ImmutabilityThreshold)
|
||||||
select {
|
backoff = true
|
||||||
case <-time.NewTimer(freezerRecheckInterval).C:
|
continue
|
||||||
continue
|
|
||||||
case <-f.quit:
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
case *number-params.ImmutabilityThreshold <= f.frozen:
|
case *number-params.ImmutabilityThreshold <= f.frozen:
|
||||||
log.Debug("Ancient blocks frozen already", "number", *number, "hash", hash, "frozen", f.frozen)
|
log.Debug("Ancient blocks frozen already", "number", *number, "hash", hash, "frozen", f.frozen)
|
||||||
select {
|
backoff = true
|
||||||
case <-time.NewTimer(freezerRecheckInterval).C:
|
continue
|
||||||
continue
|
|
||||||
case <-f.quit:
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
head := ReadHeader(nfdb, hash, *number)
|
head := ReadHeader(nfdb, hash, *number)
|
||||||
if head == nil {
|
if head == nil {
|
||||||
log.Error("Current full block unavailable", "number", *number, "hash", hash)
|
log.Error("Current full block unavailable", "number", *number, "hash", hash)
|
||||||
select {
|
backoff = true
|
||||||
case <-time.NewTimer(freezerRecheckInterval).C:
|
continue
|
||||||
continue
|
|
||||||
case <-f.quit:
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Seems we have data ready to be frozen, process in usable batches
|
// Seems we have data ready to be frozen, process in usable batches
|
||||||
limit := *number - params.ImmutabilityThreshold
|
limit := *number - params.ImmutabilityThreshold
|
||||||
|
|
@ -398,12 +386,7 @@ func (f *freezer) freeze(db ethdb.KeyValueStore) {
|
||||||
|
|
||||||
// Avoid database thrashing with tiny writes
|
// Avoid database thrashing with tiny writes
|
||||||
if f.frozen-first < freezerBatchLimit {
|
if f.frozen-first < freezerBatchLimit {
|
||||||
select {
|
backoff = true
|
||||||
case <-time.NewTimer(freezerRecheckInterval).C:
|
|
||||||
continue
|
|
||||||
case <-f.quit:
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue