Documentation
¶
Index ¶
- Constants
- func EqualNode(n, m Node) bool
- func Rint(n int) int
- func Rint64Crypto(n int64) int64
- func RintCrypto(n int) int
- func RintWithSource(n int, src RandomSource) int
- type Config
- type DisconnectRequest
- type ForwardJoinRequest
- type Hyparview
- func (v *Hyparview) AddActive(node Node)
- func (v *Hyparview) AddActiveWithSource(node Node, src RandomSource)
- func (v *Hyparview) AddPassive(node Node)
- func (v *Hyparview) Bootstrap() Node
- func (v *Hyparview) Copy() *Hyparview
- func (v *Hyparview) DelPassive(node Node)
- func (v *Hyparview) DropRandActive()
- func (v *Hyparview) DropRandActiveWithSource(src RandomSource)
- func (v *Hyparview) Gossip(m Message)
- func (v *Hyparview) Peer() Node
- func (v *Hyparview) PromotePassive() Node
- func (v *Hyparview) PromotePassiveBut(peer Node) Node
- func (v *Hyparview) Recv(m Message) *NeighborRefuse
- func (v *Hyparview) RecvDisconnect(r *DisconnectRequest)
- func (v *Hyparview) RecvForwardJoin(r *ForwardJoinRequest)
- func (v *Hyparview) RecvJoin(r *JoinRequest)
- func (v *Hyparview) RecvNeighbor(r *NeighborRequest) *NeighborRefuse
- func (v *Hyparview) RecvShuffle(r *ShuffleRequest)
- func (v *Hyparview) RecvShuffleReply(r *ShuffleReply)
- func (v *Hyparview) Send(ms ...Message)
- func (v *Hyparview) SendJoin(peer Node)
- func (v *Hyparview) SendKeepalives()
- func (v *Hyparview) SendShuffle()
- type JoinRequest
- type Message
- type NeighborRefuse
- type NeighborRequest
- type Node
- type RandomSource
- type Send
- type ShuffleReply
- type ShuffleRequest
- type ViewPart
- func (v *ViewPart) Add(n Node)
- func (v *ViewPart) Contains(n Node) bool
- func (v *ViewPart) ContainsIndex(n Node) int
- func (v *ViewPart) Copy() *ViewPart
- func (v *ViewPart) DelIndex(i int)
- func (v *ViewPart) DelNode(n Node) bool
- func (v *ViewPart) Equal(w *ViewPart) bool
- func (v *ViewPart) GetIndex(i int) Node
- func (v *ViewPart) IsEmpty() bool
- func (v *ViewPart) IsEmptyBut(peer Node) bool
- func (v *ViewPart) IsFull() bool
- func (v *ViewPart) RandIndex() int
- func (v *ViewPart) RandIndexWithSource(src RandomSource) int
- func (v *ViewPart) RandNode() Node
- func (v *ViewPart) RandNodeWithSource(src RandomSource) Node
- func (v *ViewPart) Shuffled() []Node
- func (v *ViewPart) ShuffledWithSource(src RandomSource) []Node
- func (v *ViewPart) Size() int
Constants ¶
const ( HighPriority = true LowPriority = false )
Variables ¶
This section is empty.
Functions ¶
func Rint ¶
rint is a placeholder so we can swap out for rintCrypto in testing rand [0, n] inclusive
func RintWithSource ¶
func RintWithSource(n int, src RandomSource) int
RintWithSource uses the provided RandomSource, falls back to DefaultRandom if nil rand [0, n] inclusive
Types ¶
type Config ¶
type Config struct {
// ActiveViewSize the size is based on log(n) + c
ActiveViewSize int
// PassiveViewSize the size is based on k(log(n) + c)
PassiveViewSize int
ShuffleActive int
ShufflePassive int
// RWLActive max number of hops a ForwardJoin request is forwarded
RWLActive int
// RWLPassive specifies at which point in the walk the node is inserted into the passive view
RWLPassive int
RWLShuffle int
}
Config values should be based on the cluster size n. The passive view has to be larger then the active view. Configuration parameter used in the paper for cluster of size n = 10000 are: ActiveViewSize = 5, PassiveViewSize = 30, with c = 1, k = 6
type DisconnectRequest ¶
type DisconnectRequest struct {
// contains filtered or unexported fields
}
func NewDisconnect ¶
func NewDisconnect(to Node, from Node) *DisconnectRequest
func (*DisconnectRequest) AssocTo ¶
func (r *DisconnectRequest) AssocTo(n Node) Message
func (*DisconnectRequest) From ¶
func (r *DisconnectRequest) From() Node
func (*DisconnectRequest) To ¶
func (r *DisconnectRequest) To() Node
func (*DisconnectRequest) Type ¶
func (*DisconnectRequest) Type() string
type ForwardJoinRequest ¶
func NewForwardJoin ¶
func NewForwardJoin(to Node, from Node, join Node, ttl int) *ForwardJoinRequest
func (*ForwardJoinRequest) AssocTo ¶
func (r *ForwardJoinRequest) AssocTo(n Node) Message
func (*ForwardJoinRequest) From ¶
func (r *ForwardJoinRequest) From() Node
func (*ForwardJoinRequest) To ¶
func (r *ForwardJoinRequest) To() Node
func (*ForwardJoinRequest) Type ¶
func (*ForwardJoinRequest) Type() string
type Hyparview ¶
type Hyparview struct {
Config
S Send
Active *ViewPart
Passive *ViewPart
Self Node
// The passive window peers sent in the last shuffle request
LastShuffle []Node
}
func CreateView ¶
CreateView creates the view with the given configuration. Does not start any process.
func (*Hyparview) AddActive ¶
AddActive adds a node to the active view, possibly dropping an active peer to make room. Paper
func (*Hyparview) AddActiveWithSource ¶
func (v *Hyparview) AddActiveWithSource(node Node, src RandomSource)
AddActiveWithSource adds a node to the active view using the provided RandomSource
func (*Hyparview) AddPassive ¶
AddPassive adds a node to the passive view, possibly dropping a passive peer to make room. Paper
func (*Hyparview) Copy ¶
Copy returns a copy thats safe to modify. Shuffle is copied as a pointer because each ShuffleRequest is immutable once created
func (*Hyparview) DelPassive ¶
DelPassive is a helper function to delete the node from the passive view
func (*Hyparview) DropRandActive ¶
func (v *Hyparview) DropRandActive()
DropRandActive removes a random active peer and returns the disconnect message following the paper
func (*Hyparview) DropRandActiveWithSource ¶
func (v *Hyparview) DropRandActiveWithSource(src RandomSource)
DropRandActiveWithSource removes a random active peer using the provided RandomSource
func (*Hyparview) PromotePassive ¶
func (*Hyparview) PromotePassiveBut ¶
func (*Hyparview) Recv ¶
func (v *Hyparview) Recv(m Message) *NeighborRefuse
Recv is a helper method that dispatches to the correct recv
func (*Hyparview) RecvDisconnect ¶
func (v *Hyparview) RecvDisconnect(r *DisconnectRequest)
RecvDisconnect processes a disconnect, demoting the sender to the passive view
func (*Hyparview) RecvForwardJoin ¶
func (v *Hyparview) RecvForwardJoin(r *ForwardJoinRequest)
RecvForwardJoin processes a ForwardJoin following the paper
func (*Hyparview) RecvJoin ¶
func (v *Hyparview) RecvJoin(r *JoinRequest)
RecvJoin processes a Join following the paper
func (*Hyparview) RecvNeighbor ¶
func (v *Hyparview) RecvNeighbor(r *NeighborRequest) *NeighborRefuse
RecvNeighbor processes a neighbor, sent during failure recovery Returns at most one NeighborRefuse, which must be replied to the client
func (*Hyparview) RecvShuffle ¶
func (v *Hyparview) RecvShuffle(r *ShuffleRequest)
RecvShuffle processes a shuffle request. Paper
func (*Hyparview) RecvShuffleReply ¶
func (v *Hyparview) RecvShuffleReply(r *ShuffleReply)
func (*Hyparview) SendKeepalives ¶
func (v *Hyparview) SendKeepalives()
SendKeepalives actively repairs the active view
func (*Hyparview) SendShuffle ¶
func (v *Hyparview) SendShuffle()
SendShuffle creates and sends a shuffle request to maintain the passive view
type JoinRequest ¶
type JoinRequest struct {
// contains filtered or unexported fields
}
func NewJoin ¶
func NewJoin(to Node, from Node) *JoinRequest
func (*JoinRequest) AssocTo ¶
func (r *JoinRequest) AssocTo(n Node) Message
func (*JoinRequest) From ¶
func (r *JoinRequest) From() Node
func (*JoinRequest) To ¶
func (r *JoinRequest) To() Node
func (*JoinRequest) Type ¶
func (*JoinRequest) Type() string
type Message ¶
Message allows clients to redefine hyparview messages to carry additional meta information
type NeighborRefuse ¶
type NeighborRefuse struct {
// contains filtered or unexported fields
}
func NewNeighborRefuse ¶
func NewNeighborRefuse(to Node, from Node) *NeighborRefuse
func (*NeighborRefuse) AssocTo ¶
func (r *NeighborRefuse) AssocTo(n Node) Message
func (*NeighborRefuse) From ¶
func (r *NeighborRefuse) From() Node
func (*NeighborRefuse) To ¶
func (r *NeighborRefuse) To() Node
func (*NeighborRefuse) Type ¶
func (*NeighborRefuse) Type() string
type NeighborRequest ¶
type NeighborRequest struct {
Priority bool
Join bool
Keepalive bool
// contains filtered or unexported fields
}
func NewNeighbor ¶
func NewNeighbor(to Node, from Node, priority bool) *NeighborRequest
func NewNeighborJoin ¶
func NewNeighborJoin(to Node, from Node) *NeighborRequest
func NewNeighborKeepalive ¶
func NewNeighborKeepalive(to Node, from Node) *NeighborRequest
func (*NeighborRequest) AssocTo ¶
func (r *NeighborRequest) AssocTo(n Node) Message
func (*NeighborRequest) From ¶
func (r *NeighborRequest) From() Node
func (*NeighborRequest) To ¶
func (r *NeighborRequest) To() Node
func (*NeighborRequest) Type ¶
func (*NeighborRequest) Type() string
type RandomSource ¶
var DefaultRandom RandomSource = defaultRandom{}
type Send ¶
type Send interface {
// Send sends one message at a time to a peer. TODO simplify batching?
// send should use a timeout to detect blocking as failure
Send(Message) (*NeighborRefuse, error)
// Failed is called after hyparview has handled the failure, to handle e.g.
// connection cleanup
Failed(Node)
// Bootstrap sends a join to some server, discovered by some external consideration
Bootstrap() Node
}
type ShuffleReply ¶
type ShuffleReply struct {
Passive []Node
// contains filtered or unexported fields
}
func NewShuffleReply ¶
func NewShuffleReply(to Node, from Node, passive []Node) *ShuffleReply
func (*ShuffleReply) AssocTo ¶
func (r *ShuffleReply) AssocTo(n Node) Message
func (*ShuffleReply) From ¶
func (r *ShuffleReply) From() Node
func (*ShuffleReply) To ¶
func (r *ShuffleReply) To() Node
func (*ShuffleReply) Type ¶
func (*ShuffleReply) Type() string
type ShuffleRequest ¶
type ShuffleRequest struct {
Origin Node
Active []Node
Passive []Node
TTL int
// contains filtered or unexported fields
}
func NewShuffle ¶
func NewShuffle(to, from, origin Node, active, passive []Node, ttl int) *ShuffleRequest
func (*ShuffleRequest) AssocTo ¶
func (r *ShuffleRequest) AssocTo(n Node) Message
func (*ShuffleRequest) From ¶
func (r *ShuffleRequest) From() Node
func (*ShuffleRequest) To ¶
func (r *ShuffleRequest) To() Node
func (*ShuffleRequest) Type ¶
func (*ShuffleRequest) Type() string
type ViewPart ¶
func CreateViewPart ¶
func (*ViewPart) ContainsIndex ¶
func (*ViewPart) IsEmptyBut ¶
func (*ViewPart) RandIndexWithSource ¶
func (v *ViewPart) RandIndexWithSource(src RandomSource) int
func (*ViewPart) RandNodeWithSource ¶
func (v *ViewPart) RandNodeWithSource(src RandomSource) Node
func (*ViewPart) ShuffledWithSource ¶
func (v *ViewPart) ShuffledWithSource(src RandomSource) []Node