Documentation
¶
Overview ¶
Package nodes provides lookup and watcher utilities for groups of nodes.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func TagsForRoleMask ¶
TagsForRoleMask returns node lookup tags for node roles.
Types ¶
type NodeDescriptorLookup ¶
type NodeDescriptorLookup interface {
// Lookup looks up a node descriptor given its identifier.
Lookup(id signature.PublicKey) *node.Node
// LookupByPeerID looks up a node descriptor given its P2P peer ID.
LookupByPeerID(id signature.PublicKey) *node.Node
// LookupTags looks up tags for a given node.
LookupTags(id signature.PublicKey) []string
// GetNodes returns current list of nodes.
GetNodes() []*node.Node
// WatchNodeUpdates subscribes to notifications about node descriptor updates.
//
// For non-Versioned descriptor lookups there should be NO Versioned events.
// On subscription the current nodes will be sent immediately.
WatchNodeUpdates() (<-chan *NodeUpdate, pubsub.ClosableSubscription, error)
// Versioned returns true if this descriptor lookup is versioned.
//
// Versioned descriptor lookups are suitable to track versioned groups of nodes
// (e.g. committees versioned by the group number), while non-versioned lookups
// are suitable for watching non-versioned groups of nodes (e.g. all nodes,
// or all nodes registered for a specific runtime).
Versioned() bool
}
NodeDescriptorLookup is the node descriptor lookup interface.
func NewFilteredNodeLookup ¶
func NewFilteredNodeLookup(nl NodeDescriptorLookup, f NodeFilterFunc) NodeDescriptorLookup
NewFilteredNodeLookup creates a NodeDescriptorLookup with a node filter function applied.
func NewRuntimeNodeLookup ¶
func NewRuntimeNodeLookup( ctx context.Context, consensus consensus.Service, runtimeID common.Namespace, ) (NodeDescriptorLookup, error)
NewRuntimeNodeLookup creates a new runtime node lookup.
Runtime node lookup watches all registered nodes for the provided runtime. Aditionally, watched nodes are tagged by node roles.
type NodeFilterFunc ¶
NodeFilterFunc is a function that performs node filtering.
func IgnoreNodeFilter ¶
func IgnoreNodeFilter(id signature.PublicKey) NodeFilterFunc
IgnoreNodeFilter returns a node filter function that filters out the node with the provided id.
func TagFilter ¶
func TagFilter(tag string) NodeFilterFunc
TagFilter returns a node filter function that only includes nodes with the given tag.
func WithAllFilters ¶
func WithAllFilters(filters ...NodeFilterFunc) NodeFilterFunc
WithAllFilters combines multiple filters into a single NodeFilterFunc that only includes nodes passing all of the provided filters.
type NodeUpdate ¶
type NodeUpdate struct {
Update *node.Node
Delete *signature.PublicKey
Reset bool
Freeze *VersionEvent
BumpVersion *VersionEvent
}
NodeUpdate is a node update.
type VersionEvent ¶
type VersionEvent struct {
Version int64
}
VersionEvent is a committee version event.
type VersionedNodeDescriptorWatcher ¶
type VersionedNodeDescriptorWatcher interface {
NodeDescriptorLookup
// Reset clears the watcher so it doesn't watch any nodes.
Reset()
// Freeze freezes the node descriptor watcher so no new nodes can be watched.
//
// In order to watch new nodes, the caller must first call Reset. Calling this method on an
// already frozen watcher may result in a panic.
//
// The version argument may be used to signal which committee version this is.
Freeze(version int64)
// BumpVersion updates the committee version without performing a reset.
//
// This method may be used when the new committee version is exactly the same as the old one
// without introducing a needless reset.
//
// The watcher must have previously been frozen. Calling this method on an unfrozen watcher may
// result in a panic.
BumpVersion(version int64)
// WatchNode starts watching a given node.
//
// It returns the latest version of the node descriptor.
WatchNode(ctx context.Context, id signature.PublicKey) (*node.Node, error)
// WatchNodeWithTag starts watching a given node, tagging it with a specific tag.
//
// It returns the latest version of the node descriptor.
WatchNodeWithTag(ctx context.Context, id signature.PublicKey, tag string) (*node.Node, error)
}
VersionedNodeDescriptorWatcher is the versioned node descriptor watcher interface.
func NewVersionedNodeDescriptorWatcher ¶
func NewVersionedNodeDescriptorWatcher(ctx context.Context, consensus consensus.Service) (VersionedNodeDescriptorWatcher, error)
NewVersionedNodeDescriptorWatcher creates a new base versioned node descriptor watcher.
This watcher will only track nodes that will be explicitly marked to watch via WatchNode/WatchNodeWithTags methods.