Documentation ¶
Index ¶
- Variables
- type ConfigBasedPeerMaintainer
- type Gossip
- type HealthChecker
- type MsgLogsCleaner
- type Overlay
- type Peer
- func (p *Peer) BroadcastMsg(req *pb.BroadcastReq) (*pb.BroadcastRes, error)
- func (p *Peer) Close() error
- func (p *Peer) Connect(config *config.Network) error
- func (p *Peer) GetPeers(req *pb.GetPeersReq) (*pb.GetPeersRes, error)
- func (p *Peer) Ping(ping *pb.Ping) (*pb.Pong, error)
- func (p *Peer) Tell(req *pb.TellReq) (*pb.TellRes, error)
- type PeerMaintainer
- type PeerManager
- type Pinger
- type RPCServer
- func (s *RPCServer) Broadcast(ctx context.Context, req *pb.BroadcastReq) (*pb.BroadcastRes, error)
- func (s *RPCServer) GetPeers(ctx context.Context, req *pb.GetPeersReq) (*pb.GetPeersRes, error)
- func (s *RPCServer) Ping(ctx context.Context, ping *pb.Ping) (*pb.Pong, error)
- func (s *RPCServer) Start() error
- func (s *RPCServer) Stop() error
- func (s *RPCServer) Tell(ctx context.Context, req *pb.TellReq) (*pb.TellRes, error)
Constants ¶
This section is empty.
Variables ¶
var ( // ErrPeerNotFound means the peer is not found ErrPeerNotFound = errors.New("Peer not found") )
Functions ¶
This section is empty.
Types ¶
type ConfigBasedPeerMaintainer ¶
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 (*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 ¶
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
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
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 ¶
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 ¶
Broadcast lets the caller to broadcast the message to all nodes in the P2P network
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 NewTCPPeer ¶
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) GetPeers ¶
func (p *Peer) GetPeers(req *pb.GetPeersReq) (*pb.GetPeersRes, error)
GetPeers 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) 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
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 ¶
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