pull

package
v2.0.0-alpha Latest Latest
Warning

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

Go to latest
Published: Apr 9, 2019 License: Apache-2.0 Imports: 12 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func SelectEndpoints

func SelectEndpoints(k int, peerPool []discovery.NetworkMember) []*comm.RemotePeer

SelectEndpoints select k peers from peerPool and returns them.

Types

type Config

type Config struct {
	ID                string
	PullInterval      time.Duration // Duration between pull invocations
	Channel           common.ChainID
	PeerCountToSelect int // Number of peers to initiate pull with
	Tag               proto.GossipMessage_Tag
	MsgType           proto.PullMsgType
	PullEngineConfig  algo.PullEngineConfig
}

Config defines the configuration of the pull mediator

type EgressDigestFilter

type EgressDigestFilter func(helloMsg protoext.ReceivedMessage) func(digestItem string) bool

EgressDigestFilter filters digests to be sent to a remote peer, that sent a hello with the following message

type IdentifierExtractor

type IdentifierExtractor func(*protoext.SignedGossipMessage) string

IdentifierExtractor extracts from a SignedGossipMessage an identifier

type IngressDigestFilter

type IngressDigestFilter func(digestMsg *proto.DataDigest) *proto.DataDigest

IngressDigestFilter filters out entities in digests that are received from remote peers

type Mediator

type Mediator interface {
	// Stop stop the Mediator
	Stop()

	// RegisterMsgHook registers a message hook to a specific type of pull message
	RegisterMsgHook(MsgType, MessageHook)

	// Add adds a GossipMessage to the Mediator
	Add(*protoext.SignedGossipMessage)

	// Remove removes a GossipMessage from the Mediator with a matching digest,
	// if such a message exits
	Remove(digest string)

	// HandleMessage handles a message from some remote peer
	HandleMessage(msg protoext.ReceivedMessage)
}

Mediator is a component wrap a PullEngine and provides the methods it needs to perform pull synchronization. The specialization of a pull mediator to a certain type of message is done by the configuration, a IdentifierExtractor, IdentifierExtractor given at construction, and also hooks that can be registered for each type of pullMsgType (hello, digest, req, res).

func NewPullMediator

func NewPullMediator(config Config, adapter *PullAdapter) Mediator

NewPullMediator returns a new Mediator

type MembershipService

type MembershipService interface {
	// GetMembership returns the membership of
	GetMembership() []discovery.NetworkMember
}

MembershipService obtains membership information of alive peers

type MessageHook

type MessageHook func(itemIDs []string, items []*protoext.SignedGossipMessage, msg protoext.ReceivedMessage)

MessageHook defines a function that will run after a certain pull message is received

type MsgConsumer

type MsgConsumer func(message *protoext.SignedGossipMessage)

MsgConsumer invokes code given a SignedGossipMessage

type MsgType

type MsgType int

MsgType defines the type of a message that is sent to the PullStore

const (
	HelloMsgType MsgType = iota
	DigestMsgType
	RequestMsgType
	ResponseMsgType
)

Constants go here.

type PullAdapter

type PullAdapter struct {
	Sndr             Sender
	MemSvc           MembershipService
	IdExtractor      IdentifierExtractor
	MsgCons          MsgConsumer
	EgressDigFilter  EgressDigestFilter
	IngressDigFilter IngressDigestFilter
}

PullAdapter defines methods of the pullStore to interact with various modules of gossip

type Sender

type Sender interface {
	// Send sends a message to a list of remote peers
	Send(msg *protoext.SignedGossipMessage, peers ...*comm.RemotePeer)
}

Sender sends messages to remote peers

Jump to

Keyboard shortcuts

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