batch delete kvdb

Signed-off-by: jsvisa <delweng@gmail.com>
This commit is contained in:
jsvisa 2024-08-13 06:30:41 +00:00
parent 3e598cb740
commit 978112678c
2 changed files with 32 additions and 23 deletions

View file

@ -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
} }

View file

@ -94,6 +94,8 @@ func (f *filter) moveBlockToFreezer(blknum uint64) error {
} }
offset := f.offset.Load() offset := f.offset.Load()
size, err := f.frdb.ModifyAncients(func(op ethdb.AncientWriteOp) error {
for name := range f.tracer.Tracers() { for name := range f.tracer.Tracers() {
kvKey := toKVKey(name, blknum, header.Hash()) kvKey := toKVKey(name, blknum, header.Hash())
data, err := f.kvdb.Get(kvKey) data, err := f.kvdb.Get(kvKey)
@ -102,25 +104,28 @@ func (f *filter) moveBlockToFreezer(blknum uint64) error {
} }
table := toTraceTable(name) table := toTraceTable(name)
n, err := f.frdb.ModifyAncients(func(op ethdb.AncientWriteOp) error { err = op.AppendRaw(table, blknum-offset, data)
return op.AppendRaw(table, blknum-offset, data) if err != nil {
return err
}
}
return nil
}) })
if err != nil { if err != nil {
return err 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 // Delete all entries for this prefix from kvdb, ignore error
prefix := append([]byte(name), encodeBlockNumber(blknum)...) if err := f.deleteKVDBEntriesWithPrefix(blknum); err != nil {
if err := f.deleteKVDBEntriesWithPrefix(prefix); err != nil {
log.Error("Failed to delete entries from kvdb", "error", err) 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()