synchronization

package
v0.29.6 Latest Latest
Warning

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

Go to latest
Published: Jan 19, 2023 License: AGPL-3.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	PollInterval time.Duration
	ScanInterval time.Duration
}

func DefaultConfig

func DefaultConfig() *Config

type Engine

type Engine struct {
	// contains filtered or unexported fields
}

Engine is the synchronization engine, responsible for synchronizing chain state.

func New

func New(
	log zerolog.Logger,
	metrics module.EngineMetrics,
	net network.Network,
	me module.Local,
	blocks storage.Blocks,
	comp network.Engine,
	core module.SyncCore,
	finalizedHeader *FinalizedHeaderCache,
	participantsProvider module.IdentifierProvider,
	opts ...OptionFunc,
) (*Engine, error)

New creates a new main chain synchronization engine.

func (*Engine) Done

func (e *Engine) Done() <-chan struct{}

Done returns a done channel that is closed once the engine has fully stopped.

func (*Engine) Process

func (e *Engine) Process(channel channels.Channel, originID flow.Identifier, event interface{}) error

Process processes the given event from the node with the given origin ID in a blocking manner. It returns the potential processing error when done.

func (*Engine) ProcessLocal

func (e *Engine) ProcessLocal(event interface{}) error

ProcessLocal processes an event originating on the local node.

func (*Engine) Ready

func (e *Engine) Ready() <-chan struct{}

Ready returns a ready channel that is closed once the engine has fully started.

func (*Engine) Submit

func (e *Engine) Submit(channel channels.Channel, originID flow.Identifier, event interface{})

Submit submits the given event from the node with the given origin ID for processing in a non-blocking manner. It returns instantly and logs a potential processing error internally when done.

func (*Engine) SubmitLocal

func (e *Engine) SubmitLocal(event interface{})

SubmitLocal submits an event originating on the local node.

type FinalizedHeaderCache

type FinalizedHeaderCache struct {
	// contains filtered or unexported fields
}

FinalizedHeaderCache represents the cached value of the latest finalized header. It is used in Engine to access latest valid data.

func NewFinalizedHeaderCache

func NewFinalizedHeaderCache(log zerolog.Logger, state protocol.State, finalizationDistributor *pubsub.FinalizationDistributor) (*FinalizedHeaderCache, error)

NewFinalizedHeaderCache creates a new finalized header cache.

func (*FinalizedHeaderCache) Done

func (f *FinalizedHeaderCache) Done() <-chan struct{}

func (*FinalizedHeaderCache) Get

func (f *FinalizedHeaderCache) Get() *flow.Header

Get returns the last locally cached finalized header.

func (*FinalizedHeaderCache) Ready

func (f *FinalizedHeaderCache) Ready() <-chan struct{}

type OptionFunc

type OptionFunc func(*Config)

func WithPollInterval

func WithPollInterval(interval time.Duration) OptionFunc

WithPollInterval sets a custom interval at which we scan for poll items

func WithScanInterval

func WithScanInterval(interval time.Duration) OptionFunc

WithScanInterval sets a custom interval at which we scan for pending items and batch them for requesting.

type RequestHandler

type RequestHandler struct {
	// contains filtered or unexported fields
}

func NewRequestHandler

func NewRequestHandler(
	log zerolog.Logger,
	metrics module.EngineMetrics,
	responseSender ResponseSender,
	me module.Local,
	blocks storage.Blocks,
	core module.SyncCore,
	finalizedHeader *FinalizedHeaderCache,
	queueMissingHeights bool,
) *RequestHandler

func (*RequestHandler) Done

func (r *RequestHandler) Done() <-chan struct{}

Done returns a done channel that is closed once the engine has fully stopped.

func (*RequestHandler) Process

func (r *RequestHandler) Process(channel channels.Channel, originID flow.Identifier, event interface{}) error

Process processes the given event from the node with the given origin ID in a blocking manner. It returns the potential processing error when done.

func (*RequestHandler) Ready

func (r *RequestHandler) Ready() <-chan struct{}

Ready returns a ready channel that is closed once the engine has fully started.

type RequestHandlerEngine

type RequestHandlerEngine struct {
	// contains filtered or unexported fields
}

func NewRequestHandlerEngine

func NewRequestHandlerEngine(
	logger zerolog.Logger,
	metrics module.EngineMetrics,
	net network.Network,
	me module.Local,
	blocks storage.Blocks,
	core module.SyncCore,
	finalizedHeader *FinalizedHeaderCache,
) (*RequestHandlerEngine, error)

func (*RequestHandlerEngine) Done

func (r *RequestHandlerEngine) Done() <-chan struct{}

func (*RequestHandlerEngine) Process

func (r *RequestHandlerEngine) Process(channel channels.Channel, originID flow.Identifier, event interface{}) error

func (*RequestHandlerEngine) Ready

func (r *RequestHandlerEngine) Ready() <-chan struct{}

type RequestHeap

type RequestHeap struct {
	// contains filtered or unexported fields
}

RequestHeap is a special structure that implements engine.MessageStore interface and indexes requests by originator. If request will be sent by same originator then it will replace the old one. Comparing to default FIFO queue this one can contain MAX one request for origin ID. Getting value from queue as well as ejecting is pseudo-random.

func NewRequestHeap

func NewRequestHeap(limit uint) *RequestHeap

func (*RequestHeap) Get

func (q *RequestHeap) Get() (*engine.Message, bool)

Get returns pseudo-random element from request storage using go map properties.

func (*RequestHeap) Put

func (q *RequestHeap) Put(message *engine.Message) bool

Put stores message into requests map using OriginID as key. Returns always true

type ResponseSender

type ResponseSender interface {
	SendResponse(interface{}, flow.Identifier) error
}

type ResponseSenderImpl

type ResponseSenderImpl struct {
	// contains filtered or unexported fields
}

func NewResponseSender

func NewResponseSender(con network.Conduit) *ResponseSenderImpl

func (*ResponseSenderImpl) SendResponse

func (r *ResponseSenderImpl) SendResponse(res interface{}, target flow.Identifier) error

Jump to

Keyboard shortcuts

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