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 {
|
||||
var key []byte
|
||||
var typo byte
|
||||
switch name {
|
||||
case "callTracer":
|
||||
key = []byte("C")
|
||||
typo = byte('C')
|
||||
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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -94,6 +94,8 @@ func (f *filter) moveBlockToFreezer(blknum uint64) error {
|
|||
}
|
||||
|
||||
offset := f.offset.Load()
|
||||
|
||||
size, err := f.frdb.ModifyAncients(func(op ethdb.AncientWriteOp) error {
|
||||
for name := range f.tracer.Tracers() {
|
||||
kvKey := toKVKey(name, blknum, header.Hash())
|
||||
data, err := f.kvdb.Get(kvKey)
|
||||
|
|
@ -102,25 +104,28 @@ func (f *filter) moveBlockToFreezer(blknum uint64) error {
|
|||
}
|
||||
|
||||
table := toTraceTable(name)
|
||||
n, err := f.frdb.ModifyAncients(func(op ethdb.AncientWriteOp) error {
|
||||
return op.AppendRaw(table, blknum-offset, data)
|
||||
err = op.AppendRaw(table, blknum-offset, data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log.Info("Move from kvdb to frdb", "blknum", blknum, "size", n)
|
||||
log.Info("Move from kvdb to frdb", "blknum", blknum, "size", size)
|
||||
|
||||
// Delete all entries for this prefix from kvdb, ignore error
|
||||
prefix := append([]byte(name), encodeBlockNumber(blknum)...)
|
||||
if err := f.deleteKVDBEntriesWithPrefix(prefix); err != nil {
|
||||
if err := f.deleteKVDBEntriesWithPrefix(blknum); err != nil {
|
||||
log.Error("Failed to delete entries from kvdb", "error", err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *filter) deleteKVDBEntriesWithPrefix(prefix []byte) error {
|
||||
func (f *filter) deleteKVDBEntriesWithPrefix(blknum uint64) error {
|
||||
prefix := encodeBlockNumber(blknum)
|
||||
batch := f.kvdb.NewBatch()
|
||||
it := f.kvdb.NewIterator(prefix, nil)
|
||||
defer it.Release()
|
||||
|
|
|
|||
Loading…
Reference in a new issue