mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 23:26:44 +00:00
feat: delete radius in storage
This commit is contained in:
parent
de4294e9c2
commit
7fd095c4a6
2 changed files with 20 additions and 14 deletions
|
|
@ -13,7 +13,6 @@ var MaxDistance = uint256.MustFromHex("0xfffffffffffffffffffffffffffffffffffffff
|
||||||
|
|
||||||
type ContentType byte
|
type ContentType byte
|
||||||
|
|
||||||
var RadisuKey = []byte("radius")
|
|
||||||
var SizeKey = []byte("size")
|
var SizeKey = []byte("size")
|
||||||
|
|
||||||
type ContentKey struct {
|
type ContentKey struct {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package ethpepple
|
package ethpepple
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"runtime"
|
"runtime"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
@ -139,18 +140,6 @@ func NewPeppleStorage(config PeppleStorageConfig) (storage.ContentStorage, error
|
||||||
writeOptions: &pebble.WriteOptions{Sync: false},
|
writeOptions: &pebble.WriteOptions{Sync: false},
|
||||||
}
|
}
|
||||||
cs.radius.Store(storage.MaxDistance)
|
cs.radius.Store(storage.MaxDistance)
|
||||||
radius, _, err := cs.db.Get(storage.RadisuKey)
|
|
||||||
if err != nil && err != pebble.ErrNotFound {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
dis := uint256.NewInt(0)
|
|
||||||
err = dis.UnmarshalSSZ(radius)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
cs.radius.Store(dis)
|
|
||||||
}
|
|
||||||
|
|
||||||
val, _, err := cs.db.Get(storage.SizeKey)
|
val, _, err := cs.db.Get(storage.SizeKey)
|
||||||
if err != nil && err != pebble.ErrNotFound {
|
if err != nil && err != pebble.ErrNotFound {
|
||||||
|
|
@ -161,6 +150,22 @@ func NewPeppleStorage(config PeppleStorageConfig) (storage.ContentStorage, error
|
||||||
// init stage, no need to use lock
|
// init stage, no need to use lock
|
||||||
cs.size = size
|
cs.size = size
|
||||||
}
|
}
|
||||||
|
|
||||||
|
iter, err := cs.db.NewIter(nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer iter.Close()
|
||||||
|
if iter.Last() && iter.Valid() {
|
||||||
|
distance := iter.Key()
|
||||||
|
dis := uint256.NewInt(0)
|
||||||
|
err = dis.UnmarshalSSZ(distance)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cs.radius.Store(dis)
|
||||||
|
}
|
||||||
|
|
||||||
cs.sizeChan <- struct{}{}
|
cs.sizeChan <- struct{}{}
|
||||||
go cs.saveCapacity()
|
go cs.saveCapacity()
|
||||||
return cs, nil
|
return cs, nil
|
||||||
|
|
@ -256,12 +261,14 @@ func (c *ContentStorage) prune() error {
|
||||||
|
|
||||||
batch := c.db.NewBatch()
|
batch := c.db.NewBatch()
|
||||||
for iter.Last(); iter.Valid(); iter.Prev() {
|
for iter.Last(); iter.Valid(); iter.Prev() {
|
||||||
|
if bytes.Equal(iter.Key(), storage.SizeKey) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if curentSize < expectSize {
|
if curentSize < expectSize {
|
||||||
batch.Delete(iter.Key(), nil)
|
batch.Delete(iter.Key(), nil)
|
||||||
curentSize += uint64(len(iter.Key())) + uint64(len(iter.Value()))
|
curentSize += uint64(len(iter.Key())) + uint64(len(iter.Value()))
|
||||||
} else {
|
} else {
|
||||||
distance := iter.Key()
|
distance := iter.Key()
|
||||||
c.db.Set(storage.RadisuKey, distance, c.writeOptions)
|
|
||||||
dis := uint256.NewInt(0)
|
dis := uint256.NewInt(0)
|
||||||
err = dis.UnmarshalSSZ(distance)
|
err = dis.UnmarshalSSZ(distance)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue