crushkv/crush/node.go
Vasiliy Tolstov 24f641df0d initial rewrite
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2019-04-18 23:13:04 +03:00

76 lines
1.2 KiB
Go

package crush
type Selector interface {
Select(input uint32, round uint32) Node
}
type Node interface {
GetChildren() []Node
GetType() uint16
GetWeight() float32
GetID() string
IsFailed() bool
GetSelector() Selector
SetSelector(Selector)
GetParent() Node
IsLeaf() bool
Select(input uint32, round uint32) Node
}
type Comparitor func(Node) bool
type CrushNode struct {
Selector Selector
}
type TestingNode struct {
Children []Node
CrushNode
Weight float32
Parent Node
Failed bool
ID string
Type uint16
Alg string
}
func (n CrushNode) GetSelector() Selector {
return n.Selector
}
func (n *CrushNode) SetSelector(Selector Selector) {
n.Selector = Selector
}
func (n CrushNode) Select(input uint32, round uint32) Node {
return n.GetSelector().Select(input, round)
}
func (n TestingNode) IsFailed() bool {
return n.Failed
}
func (n TestingNode) IsLeaf() bool {
return len(n.Children) == 0
}
func (n TestingNode) GetParent() Node {
return n.Parent
}
func (n TestingNode) GetID() string {
return n.ID
}
func (n TestingNode) GetWeight() float32 {
return n.Weight
}
func (n TestingNode) GetType() uint16 {
return n.Type
}
func (n TestingNode) GetChildren() []Node {
return n.Children
}