diff --git a/eth/tracers/live/filter.go b/eth/tracers/live/filter.go index dbfa531dc1..abce1d55b5 100644 --- a/eth/tracers/live/filter.go +++ b/eth/tracers/live/filter.go @@ -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 ( diff --git a/eth/tracers/live/filter_freeze.go b/eth/tracers/live/filter_freeze.go index d83b36dded..c112620298 100644 --- a/eth/tracers/live/filter_freeze.go +++ b/eth/tracers/live/filter_freeze.go @@ -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)