Commit 49647f2b authored by Rick Bernt's avatar Rick Bernt Committed by GitHub

op-supervisor: Load the starting block from log db (#11090)

* finish TODO(optimism#11023)

* revert GetLogBlockNum() && use ClosestBlockInfo

* catch error

* rewind

* gofmt -w -s .

* op-supervisor: Remove unused import.

---------
Co-authored-by: default avatarAdrian Sutton <adrian@oplabs.co>
parent d4a22a7c
......@@ -5,6 +5,7 @@ import (
"errors"
"fmt"
"io"
"math"
"sync/atomic"
"time"
......@@ -50,7 +51,21 @@ func NewSupervisorBackend(ctx context.Context, logger log.Logger, m Metrics, cfg
return nil, fmt.Errorf("failed to create logdb for chain %v at %v: %w", chainID, path, err)
}
logDBs[i] = logDB
monitor, err := source.NewChainMonitor(ctx, logger, cm, chainID, rpc, rpcClient)
// Get the last checkpoint that was written then Rewind the db
// to the block prior to that block and start from there.
// Guarantees we will always roll back at least one block
// so we know we're always starting from a fully written block.
checkPointBlock, _, err := logDB.ClosestBlockInfo(math.MaxUint64)
if err != nil {
return nil, fmt.Errorf("failed to get block from checkpoint: %w", err)
}
block := checkPointBlock - 1
err = logDB.Rewind(block)
if err != nil {
return nil, fmt.Errorf("failed to 'Rewind' the database: %w", err)
}
monitor, err := source.NewChainMonitor(ctx, logger, cm, chainID, rpc, rpcClient, block)
if err != nil {
return nil, fmt.Errorf("failed to create monitor for rpc %v: %w", rpc, err)
}
......
......@@ -31,15 +31,16 @@ type ChainMonitor struct {
headMonitor *HeadMonitor
}
func NewChainMonitor(ctx context.Context, logger log.Logger, m Metrics, chainID types.ChainID, rpc string, client client.RPC) (*ChainMonitor, error) {
func NewChainMonitor(ctx context.Context, logger log.Logger, m Metrics, chainID types.ChainID, rpc string, client client.RPC, block uint64) (*ChainMonitor, error) {
logger = logger.New("chainID", chainID)
cl, err := newClient(ctx, logger, m, rpc, client, pollInterval, trustRpc, rpcKind)
if err != nil {
return nil, err
}
// TODO(optimism#11023): Load the starting block from log db
startingHead := eth.L1BlockRef{}
startingHead := eth.L1BlockRef{
Number: block,
}
fetchReceipts := newLogFetcher(cl, &loggingReceiptProcessor{logger})
unsafeBlockProcessor := NewChainProcessor(logger, cl, startingHead, fetchReceipts)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment