gossip

package
v0.8.18 Latest Latest
Warning

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

Go to latest
Published: Apr 27, 2022 License: Apache-2.0, BSD-2-Clause Imports: 29 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrNotRunning is returned when a neighbor is added to a stopped or not yet started gossip manager.
	ErrNotRunning = errors.New("manager not running")
	// ErrUnknownNeighbor is returned when the specified neighbor is not known to the gossip manager.
	ErrUnknownNeighbor = errors.New("unknown neighbor")
	// ErrLoopbackNeighbor is returned when the own peer is specified as a neighbor.
	ErrLoopbackNeighbor = errors.New("loopback connection not allowed")
	// ErrDuplicateNeighbor is returned when the same peer is added more than once as a neighbor.
	ErrDuplicateNeighbor = errors.New("already connected")
	// ErrNeighborQueueFull is returned when the send queue is already full.
	ErrNeighborQueueFull = errors.New("send queue is full")
)
View Source
var (
	// ErrTimeout is returned when an expected incoming connection was not received in time.
	ErrTimeout = errors.New("accept timeout")
	// ErrDuplicateAccept is returned when the server already registered an accept request for that peer ID.
	ErrDuplicateAccept = errors.New("accept request for that peer already exists")
	// ErrNoGossip means that the given peer does not support the gossip service.
	ErrNoGossip = errors.New("peer does not have a gossip service")
)

Functions

func GetAddress

func GetAddress(p *peer.Peer) string

GetAddress returns the address of the gossip service.

Types

type ConnectPeerOption

type ConnectPeerOption func(conf *connectPeerConfig)

ConnectPeerOption defines an option for the DialPeer and AcceptPeer methods.

func WithNoDefaultTimeout

func WithNoDefaultTimeout() ConnectPeerOption

WithNoDefaultTimeout returns a ConnectPeerOption that disables the default timeout for dial or accept.

type Events

type Events struct {
	// Fired when a new message was received via the gossip protocol.
	MessageReceived *events.Event
}

Events defines all the events related to the gossip protocol.

type LoadMessageFunc

type LoadMessageFunc func(messageId tangle.MessageID) ([]byte, error)

LoadMessageFunc defines a function that returns the message for the given id.

type Manager

type Manager struct {
	Libp2pHost host.Host
	// contains filtered or unexported fields
}

The Manager handles the connected neighbors.

func NewManager

func NewManager(libp2pHost host.Host, local *peer.Local, f LoadMessageFunc, log *logger.Logger, opts ...ManagerOption,
) *Manager

NewManager creates a new Manager.

func (*Manager) AddInbound

func (m *Manager) AddInbound(ctx context.Context, p *peer.Peer, group NeighborsGroup,
	connectOpts ...ConnectPeerOption) error

AddInbound tries to add a neighbor by accepting an incoming connection from that peer.

func (*Manager) AddOutbound

func (m *Manager) AddOutbound(ctx context.Context, p *peer.Peer, group NeighborsGroup,
	connectOpts ...ConnectPeerOption) error

AddOutbound tries to add a neighbor by connecting to that peer.

func (*Manager) AllNeighbors

func (m *Manager) AllNeighbors() []*Neighbor

AllNeighbors returns all the neighbors that are currently connected.

func (*Manager) DropNeighbor

func (m *Manager) DropNeighbor(id identity.ID, group NeighborsGroup) error

DropNeighbor disconnects the neighbor with the given ID and the group.

func (*Manager) Events

func (m *Manager) Events() Events

Events returns the events related to the gossip protocol.

func (*Manager) GetNeighbor

func (m *Manager) GetNeighbor(id identity.ID) (*Neighbor, error)

GetNeighbor returns the neighbor by its id.

func (*Manager) MessageRequestWorkerPoolStatus

func (m *Manager) MessageRequestWorkerPoolStatus() (name string, load int)

MessageRequestWorkerPoolStatus returns the name and the load of the workerpool.

func (*Manager) MessageRequestsRateLimiter

func (m *Manager) MessageRequestsRateLimiter() *ratelimiter.PeerRateLimiter

MessageRequestsRateLimiter returns the message requests rate limiter instance used in the gossip manager.

func (*Manager) MessageWorkerPoolStatus

func (m *Manager) MessageWorkerPoolStatus() (name string, load int)

MessageWorkerPoolStatus returns the name and the load of the workerpool.

func (*Manager) MessagesRateLimiter

func (m *Manager) MessagesRateLimiter() *ratelimiter.PeerRateLimiter

MessagesRateLimiter returns the messages rate limiter instance used in the gossip manager.

func (*Manager) NeighborsEvents

func (m *Manager) NeighborsEvents(group NeighborsGroup) NeighborsEvents

NeighborsEvents returns the events related to the gossip protocol.

func (*Manager) RequestMessage

func (m *Manager) RequestMessage(messageID []byte, to ...identity.ID)

RequestMessage requests the message with the given id from the neighbors. If no peer is provided, all neighbors are queried.

func (*Manager) SendMessage

func (m *Manager) SendMessage(msgData []byte, to ...identity.ID)

SendMessage adds the given message the send queue of the neighbors. The actual send then happens asynchronously. If no peer is provided, it is send to all neighbors.

func (*Manager) Stop

func (m *Manager) Stop()

Stop stops the manager and closes all established connections.

type ManagerOption

type ManagerOption func(m *Manager)

ManagerOption configures the Manager instance.

func WithMessageRequestsRateLimiter

func WithMessageRequestsRateLimiter(prl *ratelimiter.PeerRateLimiter) ManagerOption

WithMessageRequestsRateLimiter allows to set a PeerRateLimiter instance to be used as messages requests rate limiter in the gossip manager.

func WithMessagesRateLimiter

func WithMessagesRateLimiter(prl *ratelimiter.PeerRateLimiter) ManagerOption

WithMessagesRateLimiter allows to set a PeerRateLimiter instance to be used as messages rate limiter in the gossip manager.

type MessageReceivedEvent

type MessageReceivedEvent struct {
	// The raw message.
	Data []byte
	// The sender of the message.
	Peer *peer.Peer
}

MessageReceivedEvent holds data about a message received event.

type Neighbor

type Neighbor struct {
	*peer.Peer
	Group NeighborsGroup
	// contains filtered or unexported fields
}

Neighbor describes the established gossip connection to another peer.

func NewNeighbor

func NewNeighbor(p *peer.Peer, group NeighborsGroup, ps *packetsStream, log *logger.Logger) *Neighbor

NewNeighbor creates a new neighbor from the provided peer and connection.

func (*Neighbor) ConnectionEstablished

func (n *Neighbor) ConnectionEstablished() time.Time

ConnectionEstablished returns the connection established.

func (*Neighbor) PacketsRead

func (n *Neighbor) PacketsRead() uint64

PacketsRead returns number of packets this neighbor has received.

func (*Neighbor) PacketsWritten

func (n *Neighbor) PacketsWritten() uint64

PacketsWritten returns number of packets this neighbor has sent.

type NeighborsEvents

type NeighborsEvents struct {
	// Fired when a neighbor connection has been established.
	NeighborAdded *events.Event
	// Fired when a neighbor has been removed.
	NeighborRemoved *events.Event
}

NeighborsEvents is a collection of events specific for a particular neighbors group, e.g "manual" or "auto".

func NewNeighborsEvents

func NewNeighborsEvents() NeighborsEvents

NewNeighborsEvents returns a new instance of NeighborsEvents.

type NeighborsGroup

type NeighborsGroup int8

NeighborsGroup is an enum type for various neighbors groups like auto/manual.

const (
	// NeighborsGroupAuto represents a neighbors group that is managed automatically.
	NeighborsGroupAuto NeighborsGroup = iota
	// NeighborsGroupManual represents a neighbors group that is managed manually.
	NeighborsGroupManual
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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