mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 02:12:23 +00:00
batch delete kvdb
Signed-off-by: jsvisa <delweng@gmail.com>
This commit is contained in:
parent
3e598cb740
commit
978112678c
2 changed files with 32 additions and 23 deletions
|
|
@ -71,14 +71,18 @@ func encodeBlockNumber(number uint64) []byte {
|
||||||
}
|
}
|
||||||
|
|
||||||
func toKVKey(name string, number uint64, hash common.Hash) []byte {
|
func toKVKey(name string, number uint64, hash common.Hash) []byte {
|
||||||
var key []byte
|
var typo byte
|
||||||
switch name {
|
switch name {
|
||||||
case "callTracer":
|
case "callTracer":
|
||||||
key = []byte("C")
|
typo = byte('C')
|
||||||
case "flatCallTracer":
|
case "flatCallTracer":
|
||||||
key = []byte("P")
|
typo = byte('P')
|
||||||
|
default:
|
||||||
|
panic("not supported yet")
|
||||||
}
|
}
|
||||||
key = append(append(key, encodeBlockNumber(number)...), hash.Bytes()...)
|
// TODO: have some prefix?
|
||||||
|
key := append(encodeBlockNumber(number), hash.Bytes()...)
|
||||||
|
key = append(key, typo)
|
||||||
|
|
||||||
return key
|
return key
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -94,33 +94,38 @@ func (f *filter) moveBlockToFreezer(blknum uint64) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
offset := f.offset.Load()
|
offset := f.offset.Load()
|
||||||
for name := range f.tracer.Tracers() {
|
|
||||||
kvKey := toKVKey(name, blknum, header.Hash())
|
|
||||||
data, err := f.kvdb.Get(kvKey)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
table := toTraceTable(name)
|
size, err := f.frdb.ModifyAncients(func(op ethdb.AncientWriteOp) error {
|
||||||
n, err := f.frdb.ModifyAncients(func(op ethdb.AncientWriteOp) error {
|
for name := range f.tracer.Tracers() {
|
||||||
return op.AppendRaw(table, blknum-offset, data)
|
kvKey := toKVKey(name, blknum, header.Hash())
|
||||||
})
|
data, err := f.kvdb.Get(kvKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Info("Move from kvdb to frdb", "blknum", blknum, "size", n)
|
|
||||||
|
|
||||||
// Delete all entries for this prefix from kvdb, ignore error
|
table := toTraceTable(name)
|
||||||
prefix := append([]byte(name), encodeBlockNumber(blknum)...)
|
err = op.AppendRaw(table, blknum-offset, data)
|
||||||
if err := f.deleteKVDBEntriesWithPrefix(prefix); err != nil {
|
if err != nil {
|
||||||
log.Error("Failed to delete entries from kvdb", "error", err)
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Info("Move from kvdb to frdb", "blknum", blknum, "size", size)
|
||||||
|
|
||||||
|
// Delete all entries for this prefix from kvdb, ignore error
|
||||||
|
if err := f.deleteKVDBEntriesWithPrefix(blknum); err != nil {
|
||||||
|
log.Error("Failed to delete entries from kvdb", "error", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *filter) deleteKVDBEntriesWithPrefix(prefix []byte) error {
|
func (f *filter) deleteKVDBEntriesWithPrefix(blknum uint64) error {
|
||||||
|
prefix := encodeBlockNumber(blknum)
|
||||||
batch := f.kvdb.NewBatch()
|
batch := f.kvdb.NewBatch()
|
||||||
it := f.kvdb.NewIterator(prefix, nil)
|
it := f.kvdb.NewIterator(prefix, nil)
|
||||||
defer it.Release()
|
defer it.Release()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue