network

package
v0.6.2 Latest Latest
Warning

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

Go to latest
Published: Nov 1, 2018 License: Apache-2.0 Imports: 4 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Controller

type Controller interface {
	// SendMessage send message to nodeID.
	SendMessage(nodeID core.RecordRef, name string, msg core.SignedMessage) ([]byte, error)
	// RemoteProcedureRegister register remote procedure that will be executed when message is received.
	RemoteProcedureRegister(name string, method core.RemoteProcedure)
	// SendCascadeMessage sends a message from MessageBus to a cascade of nodes.
	SendCascadeMessage(data core.Cascade, method string, msg core.SignedMessage) error
	// Bootstrap init bootstrap process: 1. Connect to discovery node; 2. Reconnect to new discovery node if redirected.
	Bootstrap() error
	// AnalyzeNetwork legacy method for old DHT network (should be removed in new network).
	AnalyzeNetwork() error
	// Authorize start authorization process on discovery node.
	Authorize() error
	// ResendPulseToKnownHosts resend pulse when we receive pulse from pulsar daemon.
	ResendPulseToKnownHosts(pulse core.Pulse)

	// GetNodeID get self node id (should be removed in far future).
	GetNodeID() core.RecordRef

	// Inject inject components.
	Inject(components core.Components)
}

Controller contains network logic.

type Future

type Future interface {
	GetRequest() Request
	Response() <-chan Response
	GetResponse(duration time.Duration) (Response, error)
}

Future allows to handle responses to a previously sent request.

type HostNetwork

type HostNetwork interface {
	// Start listening to network requests.
	Start()
	// Stop listening to network requests.
	Stop()
	// PublicAddress returns public address that can be published for all nodes.
	PublicAddress() string

	// SendRequest send request to a remote node.
	SendRequest(request Request, receiver core.RecordRef) (Future, error)
	// RegisterRequestHandler register a handler function to process incoming requests of a specific type.
	RegisterRequestHandler(t types.PacketType, handler RequestHandler)
	// NewRequestBuilder create packet builder for an outgoing request with sender set to current node.
	NewRequestBuilder() RequestBuilder
	// BuildResponse create response to an incoming request with Data set to responseData
	BuildResponse(request Request, responseData interface{}) Response
}

HostNetwork simple interface to send network requests and process network responses.

type NodeKeeper

type NodeKeeper interface {
	core.NodeNetwork
	// AddActiveNodes add active nodes.
	AddActiveNodes([]*core.Node)
	// SetPulse sets internal PulseNumber to number. Returns true if set was successful, false if number is less
	// or equal to internal PulseNumber. If set is successful, returns collected unsync list and starts collecting new unsync list.
	SetPulse(number core.PulseNumber) (bool, UnsyncList)
	// Sync initiates transferring syncCandidates -> sync, sync -> active.
	// If number is less than internal PulseNumber then ignore Sync.
	Sync(syncCandidates []*core.Node, number core.PulseNumber)
	// AddUnsync add unsync node to the unsync list. Returns channel that receives active node on successful sync.
	// Channel will return nil node if added node has not passed the consensus.
	// Returns error if current node is not active and cannot participate in consensus.
	AddUnsync(nodeID core.RecordRef, roles []core.NodeRole, address string,
		version string) (chan *core.Node, error)
	// GetUnsyncHolder get unsync list executed in consensus for specific pulse.
	// 1. If pulse is less than internal NodeKeeper pulse, returns error.
	// 2. If pulse is equal to internal NodeKeeper pulse, returns unsync list holder for currently executed consensus.
	// 3. If pulse is more than internal NodeKeeper pulse, blocks till next SetPulse or duration timeout and then acts like in par. 2.
	GetUnsyncHolder(pulse core.PulseNumber, duration time.Duration) (UnsyncList, error)
}

NodeKeeper manages unsync, sync and active lists.

type NodeUnsyncHash

type NodeUnsyncHash struct {
	NodeID core.RecordRef
	Hash   []byte
}

NodeUnsyncHash data needed for consensus.

type OnPulse

type OnPulse func(pulse core.Pulse)

OnPulse callback function to process new pulse from pulsar.

type Packet

type Packet interface {
	GetSender() core.RecordRef
	GetSenderHost() *host.Host
	GetType() types.PacketType
	GetData() interface{}
}

Packet is a packet that is transported via network by HostNetwork.

type Request

type Request Packet

Request is a packet that is sent from the current node.

type RequestBuilder

type RequestBuilder interface {
	Type(packetType types.PacketType) RequestBuilder
	Data(data interface{}) RequestBuilder
	Build() Request
}

RequestBuilder allows to build a Request.

type RequestHandler

type RequestHandler func(Request) (Response, error)

RequestHandler handler function to process incoming requests from network.

type Response

type Response Packet

Response is a packet that is received in response to a previously sent Request.

type UnsyncList

type UnsyncList interface {
	// GetUnsync returns list of local unsync nodes. This list is created.
	GetUnsync() []*core.Node
	// GetPulse returns actual pulse for current consensus process.
	GetPulse() core.PulseNumber
	// SetHash sets hash of unsync lists for each node of consensus.
	SetHash([]*NodeUnsyncHash)
	// GetHash get hash of unsync lists for each node of  If hash is not calculated yet, then this call blocks
	// until the hash is calculated with SetHash() call.
	GetHash(blockTimeout time.Duration) ([]*NodeUnsyncHash, error)
	// AddUnsyncList add unsync list for remote ref.
	AddUnsyncList(ref core.RecordRef, unsync []*core.Node)
	// AddUnsyncHash add unsync hash for remote ref.
	AddUnsyncHash(ref core.RecordRef, hash []*NodeUnsyncHash)
	// GetUnsyncList get unsync list for remote ref.
	GetUnsyncList(ref core.RecordRef) ([]*core.Node, bool)
	// GetUnsyncHash get unsync hash for remote ref.
	GetUnsyncHash(ref core.RecordRef) ([]*NodeUnsyncHash, bool)
}

Directories

Path Synopsis
Package consensus provides BFT-like algorithm to distribute list of records between participants
Package consensus provides BFT-like algorithm to distribute list of records between participants
Package hostnetwork is an implementation of Kademlia DHT.
Package hostnetwork is an implementation of Kademlia DHT.
routing
Package routing implements Kademlia hash tables with XOR distance metrics.
Package routing implements Kademlia hash tables with XOR distance metrics.
rpc
Package rpc allows higher level components to register methods that can be called by other network hosts.
Package rpc allows higher level components to register methods that can be called by other network hosts.
store
Package store provides interfaces and default in-memory implementation of storage for DHT metadata.
Package store provides interfaces and default in-memory implementation of storage for DHT metadata.
Package transport provides network transport interface.
Package transport provides network transport interface.
connection
Package connection encapsulates connection creation process and provides connection factories.
Package connection encapsulates connection creation process and provides connection factories.
host
Package host is a fundamental part of networking system.
Package host is a fundamental part of networking system.
id
packet
Package packet provides network messaging protocol and serialization layer.
Package packet provides network messaging protocol and serialization layer.
relay
Package relay is an implementation of relay mechanism.
Package relay is an implementation of relay mechanism.
resolver
Package resolver provides interface (and default implementation) to retrieve public network address.
Package resolver provides interface (and default implementation) to retrieve public network address.

Jump to

Keyboard shortcuts

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