logprovider

package
v2.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 1, 2024 License: MIT Imports: 30 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	LogProviderServiceName = "LogEventProvider"

	ErrHeadNotAvailable   = fmt.Errorf("head not available")
	ErrBlockLimitExceeded = fmt.Errorf("block limit exceeded")

	// AllowedLogsPerUpkeep is the maximum number of logs allowed per upkeep every single call.
	AllowedLogsPerUpkeep = 5
	// MaxPayloads is the maximum number of payloads to return per call.
	MaxPayloads = 100
)
View Source
var (
	// LogRetention is the amount of time to retain logs for.
	LogRetention = 24 * time.Hour
	// LogBackfillBuffer is the number of blocks from the latest block for which backfill is done when adding a filter in log poller
	LogBackfillBuffer = 100
)
View Source
var (
	LogRecovererServiceName = "LogRecoverer"

	// RecoveryInterval is the interval at which the recovery scanning processing is triggered
	RecoveryInterval = 5 * time.Second
	// RecoveryCacheTTL is the time to live for the recovery cache
	RecoveryCacheTTL = 10 * time.Minute
	// GCInterval is the interval at which the recovery cache is cleaned up
	GCInterval = RecoveryCacheTTL - time.Second
	// MaxProposals is the maximum number of proposals that can be returned by GetRecoveryProposals
	MaxProposals = 20
)

Functions

func DefaultUpkeepSelector added in v2.11.0

func DefaultUpkeepSelector(id *big.Int) bool

func LogComparator added in v2.11.0

func LogComparator(a, b logpoller.Log) int

LogComparator compares the logs based on block number, log index. tx hash is also checked in case the log index is not unique within a block.

Returns:

-1 if a <  b
 0 if a == b
+1 if a >  b

func LogSorter added in v2.11.0

func LogSorter(a, b logpoller.Log) bool

LogSorter sorts the logs based on block number, tx hash and log index. returns true if b should come before a.

func New

func New(lggr logger.Logger, poller logpoller.LogPoller, c client.Client, stateStore core.UpkeepStateReader, finalityDepth uint32, chainID *big.Int) (LogEventProvider, LogRecoverer)

New creates a new log event provider and recoverer. using default values for the options.

func NewLogEventsPacker

func NewLogEventsPacker() *logEventsPacker

func NewLogProvider

func NewLogProvider(lggr logger.Logger, poller logpoller.LogPoller, chainID *big.Int, packer LogDataPacker, filterStore UpkeepFilterStore, opts LogTriggersOptions) *logEventProvider

func NewLogRecoverer

func NewLogRecoverer(lggr logger.Logger, poller logpoller.LogPoller, client client.Client, stateStore core.UpkeepStateReader, packer LogDataPacker, filterStore UpkeepFilterStore, opts LogTriggersOptions) *logRecoverer

func NewUpkeepFilterStore

func NewUpkeepFilterStore() *upkeepFilterStore

Types

type BufferVersion added in v2.11.0

type BufferVersion string

BufferVersion is the version of the log buffer. TODO: (AUTO-9355) remove once we have a single version

const (
	BufferVersionDefault BufferVersion = ""
	BufferVersionV1      BufferVersion = "v1"
)

type BufferedLog added in v2.11.0

type BufferedLog struct {
	ID  *big.Int
	Log logpoller.Log
}

type FilterOptions

type FilterOptions struct {
	UpkeepID      *big.Int
	TriggerConfig LogTriggerConfig
	UpdateBlock   uint64
}

type LogBuffer added in v2.11.0

type LogBuffer interface {
	// Enqueue adds logs to the buffer and might also drop logs if the limit for the
	// given upkeep was exceeded. Returns the number of logs that were added and number of logs that were  dropped.
	Enqueue(id *big.Int, logs ...logpoller.Log) (added int, dropped int)
	// Dequeue pulls logs from the buffer that are within the given block window,
	// with a maximum number of logs per upkeep and a total maximum number of logs to return.
	// It also accepts a function to select upkeeps.
	// Returns logs (associated to upkeeps) and the number of remaining
	// logs in that window for the involved upkeeps.
	Dequeue(block int64, blockRate, upkeepLimit, maxResults int, upkeepSelector func(id *big.Int) bool) ([]BufferedLog, int)
	// SetConfig sets the buffer size and the maximum number of logs to keep for each upkeep.
	SetConfig(lookback, blockRate, logLimit uint32)
	// NumOfUpkeeps returns the number of upkeeps that are being tracked by the buffer.
	NumOfUpkeeps() int
	// SyncFilters removes upkeeps that are not in the filter store.
	SyncFilters(filterStore UpkeepFilterStore) error
}

func NewLogBuffer added in v2.11.0

func NewLogBuffer(lggr logger.Logger, lookback, blockRate, logLimit uint32) LogBuffer

type LogDataPacker

type LogDataPacker interface {
	PackLogData(log logpoller.Log) ([]byte, error)
}

type LogEventProvider

type LogEventProvider interface {
	ocr2keepers.LogEventProvider
	LogTriggersLifeCycle

	RefreshActiveUpkeeps(ctx context.Context, ids ...*big.Int) ([]*big.Int, error)

	Start(context.Context) error
	io.Closer
}

type LogEventProviderFeatures added in v2.11.0

type LogEventProviderFeatures interface {
	WithBufferVersion(v BufferVersion)
}

type LogEventProviderTest

type LogEventProviderTest interface {
	LogEventProvider
	ReadLogs(ctx context.Context, ids ...*big.Int) error
	CurrentPartitionIdx() uint64
}

type LogTriggerConfig

LogTriggerConfig is an alias for log trigger config.

type LogTriggersLifeCycle

type LogTriggersLifeCycle interface {
	// RegisterFilter registers the filter (if valid) for the given upkeepID.
	RegisterFilter(ctx context.Context, opts FilterOptions) error
	// UnregisterFilter removes the filter for the given upkeepID.
	UnregisterFilter(ctx context.Context, upkeepID *big.Int) error
}

type LogTriggersOptions

type LogTriggersOptions struct {

	// LookbackBlocks is the number of blocks the provider will look back for logs.
	// The recoverer will scan for logs up to this depth.
	// NOTE: MUST be set to a greater-or-equal to the chain's finality depth.
	LookbackBlocks int64
	// ReadInterval is the interval to fetch logs in the background.
	ReadInterval time.Duration
	// Finality depth is the number of blocks to wait before considering a block final.
	FinalityDepth int64

	// TODO: (AUTO-9355) remove once we have a single version
	BufferVersion BufferVersion
	// LogLimit is the minimum number of logs to process in a single block window.
	LogLimit uint32
	// BlockRate determines the block window for log processing.
	BlockRate uint32
	// contains filtered or unexported fields
}

LogTriggersOptions holds the options for the log trigger components.

func NewOptions

func NewOptions(finalityDepth int64, chainID *big.Int) LogTriggersOptions

func (*LogTriggersOptions) Defaults

func (o *LogTriggersOptions) Defaults(finalityDepth int64)

Defaults sets the default values for the options. NOTE: o.LookbackBlocks should be set only from within tests

type UpkeepFilterStore

type UpkeepFilterStore interface {
	GetIDs(selector func(upkeepFilter) bool) []*big.Int
	UpdateFilters(updater func(upkeepFilter, upkeepFilter) upkeepFilter, filters ...upkeepFilter)
	Has(id *big.Int) bool
	Get(id *big.Int) *upkeepFilter
	RangeFiltersByIDs(iterator func(int, upkeepFilter), ids ...*big.Int)
	GetFilters(selector func(upkeepFilter) bool) []upkeepFilter
	AddActiveUpkeeps(filters ...upkeepFilter)
	RemoveActiveUpkeeps(filters ...upkeepFilter)
	Size() int
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL