freeze: head is not used

Signed-off-by: jsvisa <delweng@gmail.com>
This commit is contained in:
jsvisa 2024-08-20 07:30:54 +00:00
parent d358f398c9
commit 0c6e9a2207
2 changed files with 13 additions and 40 deletions

View file

@ -212,11 +212,6 @@ func newFilter(cfg json.RawMessage, backend tracers.Backend) (*tracing.Hooks, []
},
}
// Initialize head if it doesn't exist
head, _ := f.getFreezerHeadTail()
if head == 0 {
f.updateFreezerHead(f.latest.Load())
}
go f.freeze()
return hooks, apis, nil
@ -303,12 +298,7 @@ func (f *filter) readBlockTraces(ctx context.Context, name string, blknum uint64
return nil, errors.New("historical data not available")
}
_, tail := f.getFreezerHeadTail()
// If tail is 0 (not found in kvdb), use the offset
if tail == 0 {
tail = f.offset.Load()
}
tail := f.getFreezerTail()
// Determine whether to read from kvdb or frdb
var (

View file

@ -12,7 +12,6 @@ import (
const (
freezeThreshold = 64
kvdbHeadKey = "FilterFreezerHead"
kvdbTailKey = "FilterFreezerTail"
)
@ -28,18 +27,16 @@ func (f *filter) freeze() {
}
lastFinalized = finalizedBlock
head, tail := f.getFreezerHeadTail()
// If tail is 0 (not found in kvdb), use the offset
if tail == 0 {
tail = f.offset.Load()
}
tail := f.getFreezerTail()
// Freeze at most freezeThreshold blocks
freezeUpTo := finalizedBlock
freezeUpTo = min(freezeUpTo, tail+freezeThreshold)
if freezeUpTo <= tail {
continue
}
log.Info("Move traces from kvdb to frdb", "from", tail, "to", freezeUpTo)
log.Info("Move traces from kvdb to frdb", "from", tail, "to", freezeUpTo-1)
for blknum := tail; blknum < freezeUpTo; blknum++ {
if err := f.moveBlockToFreezer(blknum); err != nil {
log.Error("Failed to move block to freezer", "block", blknum, "error", err)
@ -47,40 +44,26 @@ func (f *filter) freeze() {
}
}
// Update head and tail
if freezeUpTo > tail {
if err := f.updateFreezerTail(freezeUpTo); err != nil {
log.Error("Failed to update freezer tail", "error", err)
}
}
if freezeUpTo > head {
if err := f.updateFreezerHead(freezeUpTo); err != nil {
log.Error("Failed to update freezer head", "error", err)
}
// Update the tail of the freezer
if err := f.updateFreezerTail(freezeUpTo); err != nil {
log.Error("Failed to update freezer tail", "error", err)
}
}
}
}
func (f *filter) getFreezerHeadTail() (head, tail uint64) {
headBytes, _ := f.kvdb.Get([]byte(kvdbHeadKey))
func (f *filter) getFreezerTail() (tail uint64) {
tailBytes, _ := f.kvdb.Get([]byte(kvdbTailKey))
if len(headBytes) > 0 {
head = binary.BigEndian.Uint64(headBytes)
}
if len(tailBytes) > 0 {
tail = binary.BigEndian.Uint64(tailBytes)
} else {
// If tail is 0 (not found in kvdb), use the offset
tail = f.offset.Load()
}
return
}
func (f *filter) updateFreezerHead(head uint64) error {
headBytes := make([]byte, 8)
binary.BigEndian.PutUint64(headBytes, head)
return f.kvdb.Put([]byte(kvdbHeadKey), headBytes)
}
func (f *filter) updateFreezerTail(tail uint64) error {
tailBytes := make([]byte, 8)
binary.BigEndian.PutUint64(tailBytes, tail)