mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 02:12:23 +00:00
freeze: head is not used
Signed-off-by: jsvisa <delweng@gmail.com>
This commit is contained in:
parent
d358f398c9
commit
0c6e9a2207
2 changed files with 13 additions and 40 deletions
|
|
@ -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()
|
go f.freeze()
|
||||||
|
|
||||||
return hooks, apis, nil
|
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")
|
return nil, errors.New("historical data not available")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, tail := f.getFreezerHeadTail()
|
tail := f.getFreezerTail()
|
||||||
|
|
||||||
// If tail is 0 (not found in kvdb), use the offset
|
|
||||||
if tail == 0 {
|
|
||||||
tail = f.offset.Load()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Determine whether to read from kvdb or frdb
|
// Determine whether to read from kvdb or frdb
|
||||||
var (
|
var (
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@ import (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
freezeThreshold = 64
|
freezeThreshold = 64
|
||||||
kvdbHeadKey = "FilterFreezerHead"
|
|
||||||
kvdbTailKey = "FilterFreezerTail"
|
kvdbTailKey = "FilterFreezerTail"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -28,18 +27,16 @@ func (f *filter) freeze() {
|
||||||
}
|
}
|
||||||
lastFinalized = finalizedBlock
|
lastFinalized = finalizedBlock
|
||||||
|
|
||||||
head, tail := f.getFreezerHeadTail()
|
tail := f.getFreezerTail()
|
||||||
|
|
||||||
// If tail is 0 (not found in kvdb), use the offset
|
|
||||||
if tail == 0 {
|
|
||||||
tail = f.offset.Load()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Freeze at most freezeThreshold blocks
|
// Freeze at most freezeThreshold blocks
|
||||||
freezeUpTo := finalizedBlock
|
freezeUpTo := finalizedBlock
|
||||||
freezeUpTo = min(freezeUpTo, tail+freezeThreshold)
|
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++ {
|
for blknum := tail; blknum < freezeUpTo; blknum++ {
|
||||||
if err := f.moveBlockToFreezer(blknum); err != nil {
|
if err := f.moveBlockToFreezer(blknum); err != nil {
|
||||||
log.Error("Failed to move block to freezer", "block", blknum, "error", err)
|
log.Error("Failed to move block to freezer", "block", blknum, "error", err)
|
||||||
|
|
@ -47,40 +44,26 @@ func (f *filter) freeze() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update head and tail
|
// Update the tail of the freezer
|
||||||
if freezeUpTo > tail {
|
|
||||||
if err := f.updateFreezerTail(freezeUpTo); err != nil {
|
if err := f.updateFreezerTail(freezeUpTo); err != nil {
|
||||||
log.Error("Failed to update freezer tail", "error", err)
|
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *filter) getFreezerHeadTail() (head, tail uint64) {
|
func (f *filter) getFreezerTail() (tail uint64) {
|
||||||
headBytes, _ := f.kvdb.Get([]byte(kvdbHeadKey))
|
|
||||||
tailBytes, _ := f.kvdb.Get([]byte(kvdbTailKey))
|
tailBytes, _ := f.kvdb.Get([]byte(kvdbTailKey))
|
||||||
|
|
||||||
if len(headBytes) > 0 {
|
|
||||||
head = binary.BigEndian.Uint64(headBytes)
|
|
||||||
}
|
|
||||||
if len(tailBytes) > 0 {
|
if len(tailBytes) > 0 {
|
||||||
tail = binary.BigEndian.Uint64(tailBytes)
|
tail = binary.BigEndian.Uint64(tailBytes)
|
||||||
|
} else {
|
||||||
|
// If tail is 0 (not found in kvdb), use the offset
|
||||||
|
tail = f.offset.Load()
|
||||||
}
|
}
|
||||||
return
|
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 {
|
func (f *filter) updateFreezerTail(tail uint64) error {
|
||||||
tailBytes := make([]byte, 8)
|
tailBytes := make([]byte, 8)
|
||||||
binary.BigEndian.PutUint64(tailBytes, tail)
|
binary.BigEndian.PutUint64(tailBytes, tail)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue