discovery

package
v0.0.0-...-51fbea3 Latest Latest
Warning

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

Go to latest
Published: Sep 22, 2024 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultAliveTimeInterval            = 5 * time.Second
	DefaultAliveExpirationTimeout       = 25 * time.Second
	DefaultMsgExpirationFactor          = 20
	DefaultAliveExpirationCheckInterval = DefaultAliveExpirationTimeout / 10
	DefaultReconnectInterval            = 25 * time.Second
	DefaultMaxConnectAttempts           = 120
)

Variables

This section is empty.

Functions

func NewDiscoverySecurityAdapter

func NewDiscoverySecurityAdapter(identity utils.PeerIdentityType, iip time.Time,
	idMapper utils.IdentityMapper, mcs utils.MessageCryptoService, logger mlog.Logger) *discoverySecurityAdapter

Types

type AnchorPeerTracker

type AnchorPeerTracker interface {
	IsAnchorPeer(endpoint string) bool
	Update(channelName string, endpoints map[string]struct{})
}

AnchorPeerTracker 给定一个节点的 endpoint,判断该节点是否是锚点。

type Config

type Config struct {
	AliveTimeInterval            time.Duration
	AliveExpirationTimeout       time.Duration
	AliveExpirationCheckInterval time.Duration
	ReconnectInterval            time.Duration
	MaxConnectionAttempts        int
	// MsgExpirationFactor 定义了一个乘法因子,用来调节 alive 消息的过期时间。
	MsgExpirationFactor int
	// BootstrapPeers 在启动时需要连接到的 peer 节点。
	BootstrapPeers []string
}

type DisclosurePolicy

type DisclosurePolicy func(remotePeer *utils.NetworkMember) (Sieve, EnvelopeFilter)

DisclosurePolicy 定义了给定的远程对等体是否有资格了解消息,以及从给定的 SignedGossipMessage 中有资格了解哪些消息。

type Discovery

type Discovery interface {
	// Lookup 根据节点 ID 寻找节点。
	Lookup(pkiID utils.PKIidType) *utils.NetworkMember

	// Self 返回此实例的信息。
	Self() utils.NetworkMember

	// UpdateMetadata 更新此实例的元数据信息。
	UpdateMetadata([]byte)

	// UpdateEndpoint 更新此实例的 endpoint。
	UpdateEndpoint(string)

	// GetMembership 返回所有成员信息。
	GetMembership() utils.Members

	// InitiateSync 向 peerNum 个节点询问它们所掌握的成员信息,将这些信息同步过来。
	InitiateSync(peerNum int)

	// Connect 与节点建立连接,建立连接的方式就是给对方发送一个 membership request,如果发送不了,那就及时建立一个与对方的连接。
	Connect(member utils.NetworkMember, identifier identifier)

	Stop()
}

func NewDiscoveryService

func NewDiscoveryService(self utils.NetworkMember, adapter DiscoveryAdapter, crypt DiscoverySecurityAdapter, policy DisclosurePolicy,
	config Config, anchorPeerTracker AnchorPeerTracker, logger mlog.Logger) Discovery

type DiscoveryAdapter

type DiscoveryAdapter interface {
	// Gossip 广播。
	Gossip(msg *utils.SignedGossipMessage)

	// SendToPeer 单播。
	SendToPeer(peer *utils.NetworkMember, msg *utils.SignedGossipMessage)

	Ping(peer *utils.NetworkMember) bool

	Accept() <-chan utils.ReceivedMessage

	// ReceiveDiscoveryMessage 接收与 discovery 相关的消息。
	ReceiveDiscoveryMessage(msg utils.ReceivedMessage)

	PresumedDead() <-chan utils.PKIidType

	CloseConn(peer *utils.NetworkMember)

	// Forward 将消息转发给下一跳。
	Forward(msg utils.ReceivedMessage)

	// IdentitySwitch 返回一个通道,此通道内存放证书发生变化的节点的 ID。
	IdentitySwitch() <-chan utils.PKIidType

	Stop()
}

func NewDiscoveryAdapter

func NewDiscoveryAdapter(c comm.Comm, propagateTimes int, emitter utils.BatchingEmitter, presumedDead chan utils.PKIidType, disclosurePolicy DisclosurePolicy) DiscoveryAdapter

type DiscoverySecurityAdapter

type DiscoverySecurityAdapter interface {
	SignMessage(m *pgossip.GossipMessage, internalEndpoint string) *pgossip.Envelope
	ValidateAliveMsg(m *utils.SignedGossipMessage) bool
}

type EnvelopeFilter

type EnvelopeFilter func(message *utils.SignedGossipMessage) *pgossip.Envelope

EnvelopeFilter 会过滤掉 SignedGossipMessage 中的部分信息得到一个 Envelope。

type PeerIdentification

type PeerIdentification struct {
	PKIid   utils.PKIidType
	SelfOrg bool // 用于表示是否与自己同属于同一组织
}

type Sieve

type Sieve func(message *utils.SignedGossipMessage) bool

Sieve 决定了是否能将 SignedGossipMessage 发送给远程节点。

Jump to

Keyboard shortcuts

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