network

package
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Apr 20, 2018 License: Apache-2.0 Imports: 27 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrPeerNotFound means the peer is not found
	ErrPeerNotFound = errors.New("Peer not found")
)

Functions

This section is empty.

Types

type ConfigBasedPeerMaintainer

type ConfigBasedPeerMaintainer struct {
	Overlay *Overlay
	Addrs   []net.Addr
}

ConfigBasedPeerMaintainer maintain the neighbors by reading the topology file

func NewConfigBasedPeerMaintainer

func NewConfigBasedPeerMaintainer(o *Overlay, t *config.Topology) *ConfigBasedPeerMaintainer

NewConfigBasedPeerMaintainer creates an instance of ConfigBasedPeerMaintainer

func (*ConfigBasedPeerMaintainer) Do

func (cbpm *ConfigBasedPeerMaintainer) Do()

Do adds the configured addresses into the peer list

type Gossip

type Gossip struct {
	service.CompositeService
	Overlay     *Overlay
	Dispatcher  cm.Dispatcher
	MsgLogs     sync.Map
	CleanerTask *routine.RecurringTask
}

Gossip relays messages in the overlay (at least once semantics)

func NewGossip

func NewGossip(o *Overlay) *Gossip

NewGossip generates a Gossip instance

func (*Gossip) AttachDispatcher

func (g *Gossip) AttachDispatcher(dispatcher cm.Dispatcher)

AttachDispatcher attaches to a Dispatcher instance

func (*Gossip) OnReceivingMsg

func (g *Gossip) OnReceivingMsg(msg *pb.BroadcastReq) error

OnReceivingMsg listens to and handles the incoming broadcast message

type HealthChecker

type HealthChecker struct {
	Overlay        *Overlay
	SilentInterval time.Duration
}

HealthChecker will check its peers at constant interval. If a peer is found not reachable for given period, it would be removed from the peer list

func NewHealthChecker

func NewHealthChecker(o *Overlay) *HealthChecker

NewHealthChecker creates an instance of HealthChecker

func (*HealthChecker) Do

func (hc *HealthChecker) Do()

Do check peer health

type MsgLogsCleaner

type MsgLogsCleaner struct {
	G *Gossip
}

MsgLogsCleaner periodically refreshes the recent received message log

func NewMsgLogsCleaner

func NewMsgLogsCleaner(g *Gossip) *MsgLogsCleaner

NewMsgLogsCleaner generates a MsgLogsCleaner instance

func (*MsgLogsCleaner) Do

func (c *MsgLogsCleaner) Do()

Do log cleaning

type Overlay

type Overlay struct {
	service.CompositeService
	PM         *PeerManager
	PRC        *RPCServer
	Gossip     *Gossip
	Tasks      []*routine.RecurringTask
	Config     *config.Network
	Dispatcher cm.Dispatcher
}

Overlay represents the peer-to-peer network

func NewOverlay

func NewOverlay(config *config.Network) *Overlay

NewOverlay creates an instance of Overlay

func (*Overlay) AttachDispatcher

func (o *Overlay) AttachDispatcher(dispatcher cm.Dispatcher)

AttachDispatcher attaches to a Dispatcher instance

func (*Overlay) Broadcast

func (o *Overlay) Broadcast(msg proto.Message) error

Broadcast lets the caller to broadcast the message to all nodes in the P2P network

func (*Overlay) GetPeers

func (o *Overlay) GetPeers() []net.Addr

GetPeers returns the current neighbors' network identifiers

func (*Overlay) Self

func (o *Overlay) Self() net.Addr

Self returns the PRC server address to receive messages

func (*Overlay) Tell

func (o *Overlay) Tell(node net.Addr, msg proto.Message) error

Tell tells a given node a proto message

type Peer

type Peer struct {
	cm.Node
	Client      pb.PeerClient
	Conn        *grpc.ClientConn
	Ctx         context.Context
	LastResTime time.Time
}

Peer represents a node in the peer-to-peer networks

func NewPeer

func NewPeer(n string, addr string) *Peer

NewPeer creates an instance of Peer

func NewTCPPeer

func NewTCPPeer(addr string) *Peer

NewTCPPeer creates an instance of Peer with tcp transportation

func (*Peer) BroadcastMsg

func (p *Peer) BroadcastMsg(req *pb.BroadcastReq) (*pb.BroadcastRes, error)

BroadcastMsg implements the client side RPC

func (*Peer) Close

func (p *Peer) Close() error

Close terminates the connection

func (*Peer) Connect

func (p *Peer) Connect(config *config.Network) error

Connect connects the peer

func (*Peer) GetPeers

func (p *Peer) GetPeers(req *pb.GetPeersReq) (*pb.GetPeersRes, error)

GetPeers implements the client side RPC

func (*Peer) Ping

func (p *Peer) Ping(ping *pb.Ping) (*pb.Pong, error)

Ping implements the client side RPC

func (*Peer) Tell

func (p *Peer) Tell(req *pb.TellReq) (*pb.TellRes, error)

Tell implements the client side RPC

type PeerMaintainer

type PeerMaintainer struct {
	Overlay *Overlay
}

PeerMaintainer helps maintain enough connections to other peers in the P2P networks

func NewPeerMaintainer

func NewPeerMaintainer(o *Overlay) *PeerMaintainer

NewPeerMaintainer creates an instance of PeerMaintainer

func (*PeerMaintainer) Do

func (pm *PeerMaintainer) Do()

Do maintain peer connection. Current strategy is to get the (upper_bound - count) peer addresses from one of the current peer if the count is lower than the lower bound

type PeerManager

type PeerManager struct {
	service.CompositeService
	// TODO: Need to revisit sync.Map: https://github.com/golang/go/issues/24112
	Peers              sync.Map
	Overlay            *Overlay
	NumPeersLowerBound uint
	NumPeersUpperBound uint
}

PeerManager represents the outgoing neighbor list TODO: We should decouple peer address and peer. Node can know more nodes than it connects to

func NewPeerManager

func NewPeerManager(o *Overlay, lb uint, ub uint) *PeerManager

NewPeerManager creates an instance of PeerManager

func (*PeerManager) AddPeer

func (pm *PeerManager) AddPeer(addr string)

AddPeer adds a new peer

func (*PeerManager) GetOrAddPeer

func (pm *PeerManager) GetOrAddPeer(addr string) *Peer

GetOrAddPeer gets a peer. If it is still not in the neighbor list, it will be added first.

func (*PeerManager) RemoveLRUPeer

func (pm *PeerManager) RemoveLRUPeer()

RemoveLRUPeer removes the least recently used (contacted) peer

func (*PeerManager) RemovePeer

func (pm *PeerManager) RemovePeer(addr string)

RemovePeer removes an existing peer

type Pinger

type Pinger struct {
	Overlay *Overlay
}

Pinger is the recurring logic to constantly check if the node can talk to its peers

func NewPinger

func NewPinger(o *Overlay) *Pinger

NewPinger creates an instance of Pinger

func (*Pinger) Do

func (h *Pinger) Do()

Do ping the neighbor peers

type RPCServer

type RPCServer struct {
	service.AbstractService
	cm.Node
	Server  *grpc.Server
	Overlay *Overlay
	// contains filtered or unexported fields
}

RPCServer represents the listener at the transportation layer

func NewRPCServer

func NewRPCServer(o *Overlay) *RPCServer

NewRPCServer creates an instance of RPCServer

func (*RPCServer) Broadcast

func (s *RPCServer) Broadcast(ctx context.Context, req *pb.BroadcastReq) (*pb.BroadcastRes, error)

Broadcast implements the server side RPC logic

func (*RPCServer) GetPeers

func (s *RPCServer) GetPeers(ctx context.Context, req *pb.GetPeersReq) (*pb.GetPeersRes, error)

GetPeers implements the server side RPC logic

func (*RPCServer) Ping

func (s *RPCServer) Ping(ctx context.Context, ping *pb.Ping) (*pb.Pong, error)

Ping implements the server side RPC logic

func (*RPCServer) Start

func (s *RPCServer) Start() error

Start starts the rpc server

func (*RPCServer) Stop

func (s *RPCServer) Stop() error

Stop stops the rpc server

func (*RPCServer) Tell

func (s *RPCServer) Tell(ctx context.Context, req *pb.TellReq) (*pb.TellRes, error)

Tell implements the server side RPC logic

Directories

Path Synopsis
Package network is a generated protocol buffer package.
Package network is a generated protocol buffer package.

Jump to

Keyboard shortcuts

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