import "github.com/byte-mug/golibs/chordhash"
func NodeNonNil(n *avl.Node) *avl.Node
-
func Strnode(n *avl.Node) string
-
type Circle struct { Tree *avl.Tree }
-
func (c *Circle) Init()
-
func (c *Circle) Next(key interface{}) (node *avl.Node)
-
func (c *Circle) NextOrEqual(key interface{}) (node *avl.Node)
-
func (c *Circle) Prev(key interface{}) (node *avl.Node)
-
func (c *Circle) PrevOrEqual(key interface{}) (node *avl.Node)
-
func (c *Circle) Step(node *avl.Node) (next *avl.Node)
-
func (c *Circle) StepReverse(node *avl.Node) (prev *avl.Node)
-
type NodeID []byte
-
func (n NodeID) Bits() int
Returns:
len(n)*8
func (n NodeID) Clone() NodeID
Generates a Copy.
func (n NodeID) Decrement()
Calculates:
n = (n - 1) mod 1<<n.Bits()
func (n NodeID) FingerBase(k uint)
Calculates:
n = (n + (1<<k)) mod 1<<n.Bits()
func (n NodeID) Increment()
Calculates:
n = (n + 1) mod 1<<n.Bits()
func (n *NodeID) Set(other NodeID)
Assigns the Value of the NodeID 'other' to 'n', adjusting the buffer size, if necessary.
Internally, it does:
*n = append((*n)[:0],other...)
type NodeManager struct { Finger, Nodes Circle Self string }
A Node manager, offering a holistic member-list and -ring implementation.
This implementation requires the whole list of cluster-members, whereas Chord only requires a Finger-Table.
func (n *NodeManager) Init()
-
func (n *NodeManager) Insert(id NodeID, attachment interface{})
-
func (n *NodeManager) LookupFinger(id NodeID) *avl.Node
-
func (n *NodeManager) LookupPrecise(id NodeID) *avl.Node
-
func (n *NodeManager) Predecessor() *avl.Node
-
func (n *NodeManager) Remove(id NodeID)
-
func (n *NodeManager) Replace(id NodeID, new_attachment interface{})
-
func (n *NodeManager) SetSelf(id NodeID)
-
func (n *NodeManager) Successor() *avl.Node
-
import "fmt"
import "github.com/emirpasic/gods/trees/avltree"