eth-tracker/internal/syncer/historical.go

56 lines
1.2 KiB
Go

package syncer
import (
"context"
"fmt"
)
func (s *Syncer) BootstrapHistoricalSyncer() {
// logg here
for i, e := s.db.NextSet(0); e; i, e = s.db.NextSet(i + 1) {
if i > 0 {
s.batchQueue.PushBack(uint64(i))
}
}
}
func (s *Syncer) StartHistoricalSyncer(ctx context.Context) error {
for {
select {
case <-ctx.Done():
s.logg.Info("historical syncer shutting down")
return nil
default:
for s.batchQueue.Len() > 0 {
var (
currentIterLen = s.batchQueue.Len()
batch []uint64
)
if currentIterLen < blockBatchSize {
batch = make([]uint64, currentIterLen)
for i := 0; i < currentIterLen; i++ {
v, _ := s.batchQueue.PopFront()
batch[i] = v
}
} else {
batch = make([]uint64, blockBatchSize)
for i := 0; i < blockBatchSize; i++ {
v, _ := s.batchQueue.PopFront()
batch[i] = v
}
}
blocks, err := s.chain.GetBlocks(context.Background(), batch)
if err != nil {
s.logg.Error("batch blocks fetcher error", "fetch_size", currentIterLen, "block_range", fmt.Sprintf("%d-%d", batch[0], batch[len(batch)-1]), "error", err)
}
for _, v := range blocks {
s.blocksQueue.PushBack(v)
}
}
}
}
}