forked from TrueCloudLab/frostfs-api-go
[#189] sdk/netmap: Implement NodeState enum
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
53697081ce
commit
d4f5c27d47
2 changed files with 71 additions and 0 deletions
|
@ -23,6 +23,19 @@ type (
|
||||||
Nodes []*Node
|
Nodes []*Node
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// NodeState is an enumeration of various states of the NeoFS node.
|
||||||
|
type NodeState uint32
|
||||||
|
|
||||||
|
const (
|
||||||
|
_ NodeState = iota
|
||||||
|
|
||||||
|
// NodeStateOffline is network unavailable state.
|
||||||
|
NodeStateOffline
|
||||||
|
|
||||||
|
// NodeStateOnline is an active state in the network.
|
||||||
|
NodeStateOnline
|
||||||
|
)
|
||||||
|
|
||||||
// Enumeration of well-known attributes.
|
// Enumeration of well-known attributes.
|
||||||
const (
|
const (
|
||||||
CapacityAttr = "Capacity"
|
CapacityAttr = "Capacity"
|
||||||
|
@ -98,3 +111,38 @@ func GetBucketWeight(ns Nodes, a aggregator, wf weightFunc) float64 {
|
||||||
}
|
}
|
||||||
return a.Compute()
|
return a.Compute()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NodeStateFromV2 converts v2 NodeState to NodeState.
|
||||||
|
func NodeStateFromV2(s netmap.NodeState) NodeState {
|
||||||
|
switch s {
|
||||||
|
default:
|
||||||
|
return 0
|
||||||
|
case netmap.Online:
|
||||||
|
return NodeStateOnline
|
||||||
|
case netmap.Offline:
|
||||||
|
return NodeStateOffline
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToV2 converts NodeState to v2 NodeState.
|
||||||
|
func (s NodeState) ToV2() netmap.NodeState {
|
||||||
|
switch s {
|
||||||
|
default:
|
||||||
|
return netmap.UnspecifiedState
|
||||||
|
case NodeStateOffline:
|
||||||
|
return netmap.Offline
|
||||||
|
case NodeStateOnline:
|
||||||
|
return netmap.Online
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s NodeState) String() string {
|
||||||
|
switch s {
|
||||||
|
default:
|
||||||
|
return "UNSPECIFIED"
|
||||||
|
case NodeStateOffline:
|
||||||
|
return "OFFLINE"
|
||||||
|
case NodeStateOnline:
|
||||||
|
return "ONLINE"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -19,3 +19,26 @@ func TestNode_NetworkAddress(t *testing.T) {
|
||||||
|
|
||||||
require.Equal(t, addr, n.NetworkAddress())
|
require.Equal(t, addr, n.NetworkAddress())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNodeStateFromV2(t *testing.T) {
|
||||||
|
for _, item := range []struct {
|
||||||
|
s NodeState
|
||||||
|
sV2 netmap.NodeState
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
s: 0,
|
||||||
|
sV2: netmap.UnspecifiedState,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
s: NodeStateOnline,
|
||||||
|
sV2: netmap.Online,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
s: NodeStateOffline,
|
||||||
|
sV2: netmap.Offline,
|
||||||
|
},
|
||||||
|
} {
|
||||||
|
require.Equal(t, item.s, NodeStateFromV2(item.sV2))
|
||||||
|
require.Equal(t, item.sV2, item.s.ToV2())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue