netmap: Return node netmap state directly #264
2 changed files with 134 additions and 16 deletions
|
@ -460,6 +460,10 @@ func (x *NodeInfo) SortAttributes() {
|
||||||
// SetOffline sets the state of the node to "offline". When a node updates
|
// SetOffline sets the state of the node to "offline". When a node updates
|
||||||
// information about itself in the network map, this action is interpreted as
|
// information about itself in the network map, this action is interpreted as
|
||||||
// an intention to leave the network.
|
// an intention to leave the network.
|
||||||
|
//
|
||||||
|
// See also IsOffline.
|
||||||
|
//
|
||||||
|
// Deprecated: use SetStatus instead.
|
||||||
func (x *NodeInfo) SetOffline() {
|
func (x *NodeInfo) SetOffline() {
|
||||||
x.m.SetState(netmap.Offline)
|
x.m.SetState(netmap.Offline)
|
||||||
}
|
}
|
||||||
|
@ -470,6 +474,8 @@ func (x *NodeInfo) SetOffline() {
|
||||||
// mean online).
|
// mean online).
|
||||||
//
|
//
|
||||||
// See also SetOffline.
|
// See also SetOffline.
|
||||||
|
|||||||
|
//
|
||||||
|
// Deprecated: use Status instead.
|
||||||
func (x NodeInfo) IsOffline() bool {
|
func (x NodeInfo) IsOffline() bool {
|
||||||
fyrchik marked this conversation as resolved
Outdated
fyrchik
commented
Why not deprecate it first? Why not deprecate it first?
a-savchuk
commented
Done Done
|
|||||||
return x.m.GetState() == netmap.Offline
|
return x.m.GetState() == netmap.Offline
|
||||||
}
|
}
|
||||||
|
@ -479,6 +485,8 @@ func (x NodeInfo) IsOffline() bool {
|
||||||
// action is interpreted as an intention to enter the network.
|
// action is interpreted as an intention to enter the network.
|
||||||
//
|
//
|
||||||
// See also IsOnline.
|
// See also IsOnline.
|
||||||
|
//
|
||||||
|
// Deprecated: use SetStatus instead.
|
||||||
func (x *NodeInfo) SetOnline() {
|
func (x *NodeInfo) SetOnline() {
|
||||||
x.m.SetState(netmap.Online)
|
x.m.SetState(netmap.Online)
|
||||||
}
|
}
|
||||||
|
@ -489,6 +497,8 @@ func (x *NodeInfo) SetOnline() {
|
||||||
// mean offline).
|
// mean offline).
|
||||||
//
|
//
|
||||||
// See also SetOnline.
|
// See also SetOnline.
|
||||||
|
//
|
||||||
|
// Deprecated: use Status instead.
|
||||||
func (x NodeInfo) IsOnline() bool {
|
func (x NodeInfo) IsOnline() bool {
|
||||||
return x.m.GetState() == netmap.Online
|
return x.m.GetState() == netmap.Online
|
||||||
}
|
}
|
||||||
|
@ -498,6 +508,8 @@ func (x NodeInfo) IsOnline() bool {
|
||||||
// state declares temporal unavailability for a node.
|
// state declares temporal unavailability for a node.
|
||||||
//
|
//
|
||||||
fyrchik marked this conversation as resolved
Outdated
fyrchik
commented
Let's also add Let's also add `SetStatus` and deprecate these `SetOnline`/`SetOffline`
a-savchuk
commented
Done Done
|
|||||||
// See also IsMaintenance.
|
// See also IsMaintenance.
|
||||||
|
//
|
||||||
|
// Deprecated: use SetStatus instead.
|
||||||
func (x *NodeInfo) SetMaintenance() {
|
func (x *NodeInfo) SetMaintenance() {
|
||||||
x.m.SetState(netmap.Maintenance)
|
x.m.SetState(netmap.Maintenance)
|
||||||
}
|
}
|
||||||
|
@ -507,6 +519,63 @@ func (x *NodeInfo) SetMaintenance() {
|
||||||
// Zero NodeInfo has undefined state.
|
// Zero NodeInfo has undefined state.
|
||||||
//
|
//
|
||||||
// See also SetMaintenance.
|
// See also SetMaintenance.
|
||||||
|
//
|
||||||
|
// Deprecated: use Status instead.
|
||||||
func (x NodeInfo) IsMaintenance() bool {
|
func (x NodeInfo) IsMaintenance() bool {
|
||||||
return x.m.GetState() == netmap.Maintenance
|
return x.m.GetState() == netmap.Maintenance
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type NodeState netmap.NodeState
|
||||||
|
|
||||||
|
const (
|
||||||
|
UnspecifiedState = NodeState(netmap.UnspecifiedState)
|
||||||
|
Online = NodeState(netmap.Online)
|
||||||
|
Offline = NodeState(netmap.Offline)
|
||||||
|
Maintenance = NodeState(netmap.Maintenance)
|
||||||
|
)
|
||||||
|
|
||||||
|
// ToV2 converts NodeState to v2.
|
||||||
|
func (ns NodeState) ToV2() netmap.NodeState {
|
||||||
|
return netmap.NodeState(ns)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FromV2 reads NodeState to v2.
|
||||||
|
func (ns *NodeState) FromV2(state netmap.NodeState) {
|
||||||
|
*ns = NodeState(state)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Status returns the current state of the node in the network map.
|
||||||
|
//
|
||||||
|
// Zero NodeInfo has an undefined state, neither online nor offline.
|
||||||
|
func (x NodeInfo) Status() NodeState {
|
||||||
|
return NodeState(x.m.GetState())
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetState updates the state of the node in the network map.
|
||||||
|
//
|
||||||
|
// The state determines the node's current status within the network:
|
||||||
|
// - "online": Indicates the node intends to enter the network.
|
||||||
|
// - "offline": Indicates the node intends to leave the network.
|
||||||
|
// - "maintenance": Indicates the node is temporarily unavailable.
|
||||||
|
//
|
||||||
|
// See also Status.
|
||||||
|
func (x *NodeInfo) SetStatus(state NodeState) {
|
||||||
|
x.m.SetState(netmap.NodeState(state))
|
||||||
|
}
|
||||||
|
|
||||||
|
// String implements fmt.Stringer.
|
||||||
|
//
|
||||||
|
// String is designed to be human-readable, and its format MAY differ between
|
||||||
|
// SDK versions.
|
||||||
|
func (ns NodeState) String() string {
|
||||||
|
return netmap.NodeState(ns).String()
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsOnline checks if the current state is "online".
|
||||||
|
func (ns NodeState) IsOnline() bool { return ns == Online }
|
||||||
|
|
||||||
|
// IsOffline checks if the current state is "offline".
|
||||||
|
func (ns NodeState) IsOffline() bool { return ns == Offline }
|
||||||
|
|
||||||
|
// IsMaintenance checks if the current state is "maintenance".
|
||||||
|
func (ns NodeState) IsMaintenance() bool { return ns == Maintenance }
|
||||||
|
|
|
@ -3,6 +3,7 @@ package netmap
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -23,7 +24,31 @@ func TestNodeInfo_SetAttribute(t *testing.T) {
|
||||||
require.Equal(t, val, n.Attribute(key))
|
require.Equal(t, val, n.Attribute(key))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNodeState(t *testing.T) {
|
||||||
|
m := map[NodeState]netmap.NodeState{
|
||||||
|
UnspecifiedState: netmap.UnspecifiedState,
|
||||||
|
Online: netmap.Online,
|
||||||
|
Offline: netmap.Offline,
|
||||||
|
Maintenance: netmap.Maintenance,
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Run("from sdk to v2", func(t *testing.T) {
|
||||||
|
for stateSDK, stateV2 := range m {
|
||||||
|
require.Equal(t, stateV2, stateSDK.ToV2())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("from v2 to sdk", func(t *testing.T) {
|
||||||
|
for stateSDK, stateV2 := range m {
|
||||||
|
var state NodeState
|
||||||
|
state.FromV2(stateV2)
|
||||||
|
require.Equal(t, stateSDK, state)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestNodeInfo_Status(t *testing.T) {
|
func TestNodeInfo_Status(t *testing.T) {
|
||||||
|
t.Run("deprecated getters/setters", func(t *testing.T) {
|
||||||
var n NodeInfo
|
var n NodeInfo
|
||||||
|
|
||||||
require.False(t, n.IsOnline())
|
require.False(t, n.IsOnline())
|
||||||
|
@ -44,6 +69,30 @@ func TestNodeInfo_Status(t *testing.T) {
|
||||||
require.True(t, n.IsMaintenance())
|
require.True(t, n.IsMaintenance())
|
||||||
require.False(t, n.IsOnline())
|
require.False(t, n.IsOnline())
|
||||||
require.False(t, n.IsOffline())
|
require.False(t, n.IsOffline())
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("brand new getters/setters", func(t *testing.T) {
|
||||||
|
var n NodeInfo
|
||||||
|
|
||||||
|
require.False(t, n.Status().IsOnline())
|
||||||
|
require.False(t, n.Status().IsOffline())
|
||||||
|
require.False(t, n.Status().IsMaintenance())
|
||||||
|
|
||||||
|
n.SetStatus(Online)
|
||||||
|
require.True(t, n.Status().IsOnline())
|
||||||
|
require.False(t, n.Status().IsOffline())
|
||||||
|
require.False(t, n.Status().IsMaintenance())
|
||||||
|
|
||||||
|
n.SetStatus(Offline)
|
||||||
|
require.False(t, n.Status().IsOnline())
|
||||||
|
require.True(t, n.Status().IsOffline())
|
||||||
|
require.False(t, n.Status().IsMaintenance())
|
||||||
|
|
||||||
|
n.SetStatus(Maintenance)
|
||||||
|
require.False(t, n.Status().IsOnline())
|
||||||
|
require.False(t, n.Status().IsOffline())
|
||||||
|
require.True(t, n.Status().IsMaintenance())
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNodeInfo_ExternalAddr(t *testing.T) {
|
func TestNodeInfo_ExternalAddr(t *testing.T) {
|
||||||
|
|
Loading…
Reference in a new issue
This methods (
IsOnline
,IsOffline
...) should be moved tonetmap.NodeState
For this to work, we need to define and enum here, which is a good thing anyway.