diff --git a/pkg/morph/client/netmap/update_state.go b/pkg/morph/client/netmap/update_state.go index 1b860ffe..44a404d0 100644 --- a/pkg/morph/client/netmap/update_state.go +++ b/pkg/morph/client/netmap/update_state.go @@ -7,11 +7,17 @@ import ( "github.com/nspcc-dev/neofs-node/pkg/morph/client" ) +// TODO: enum can become redundant after neofs-contract#270 +const ( + stateOffline int8 = iota + stateOnline +) + // UpdatePeerPrm groups parameters of UpdatePeerState operation. type UpdatePeerPrm struct { key []byte - online bool + state int8 // state enum value client.InvokePrmOptional } @@ -21,9 +27,11 @@ func (u *UpdatePeerPrm) SetKey(key []byte) { u.key = key } -// SetState sets node state. +// SetOnline marks node to be switched into "online" state. +// +// Zero UpdatePeerPrm marks node as "offline". func (u *UpdatePeerPrm) SetOnline() { - u.online = true + u.state = stateOnline } // UpdatePeerState changes peer status through Netmap contract call. @@ -37,8 +45,14 @@ func (c *Client) UpdatePeerState(p UpdatePeerPrm) error { method += "IR" } - state := netmap.OfflineState - if p.online { + state := netmap.OfflineState // pre-assign since type of value is unexported + + switch p.state { + default: + panic(fmt.Sprintf("unexpected node's state value %v", p.state)) + case stateOffline: + // already set above + case stateOnline: state = netmap.OnlineState } diff --git a/pkg/morph/event/netmap/update_peer.go b/pkg/morph/event/netmap/update_peer.go index b96a932e..d83da6a5 100644 --- a/pkg/morph/event/netmap/update_peer.go +++ b/pkg/morph/event/netmap/update_peer.go @@ -12,10 +12,16 @@ import ( "github.com/nspcc-dev/neofs-node/pkg/morph/event" ) +// TODO: enum can become redundant after neofs-contract#270 +const ( + _ int8 = iota + stateOnline +) + type UpdatePeer struct { publicKey *keys.PublicKey - online bool + state int8 // state enum value // For notary notifications only. // Contains raw transactions of notary request. @@ -26,7 +32,7 @@ type UpdatePeer struct { func (UpdatePeer) MorphEvent() {} func (s UpdatePeer) Online() bool { - return s.online + return s.state == stateOnline } func (s UpdatePeer) PublicKey() *keys.PublicKey { @@ -78,7 +84,7 @@ func ParseUpdatePeer(e *state.ContainedNotificationEvent) (event.Event, error) { return nil, fmt.Errorf("unsupported node state %d", st) case int64(netmap.OfflineState): case int64(netmap.OnlineState): - ev.online = true + ev.state = stateOnline } return ev, nil diff --git a/pkg/morph/event/netmap/update_peer_notary.go b/pkg/morph/event/netmap/update_peer_notary.go index 8dc22bfc..1c1b8b36 100644 --- a/pkg/morph/event/netmap/update_peer_notary.go +++ b/pkg/morph/event/netmap/update_peer_notary.go @@ -66,7 +66,7 @@ func ParseUpdatePeerNotary(ne event.NotaryEvent) (event.Event, error) { return nil, fmt.Errorf("unsupported node state %d", err) case v2netmap.Offline: case v2netmap.Online: - ev.online = true + ev.state = stateOnline } fieldNum++ diff --git a/pkg/morph/event/netmap/update_peer_test.go b/pkg/morph/event/netmap/update_peer_test.go index aa397be7..e45e99cb 100644 --- a/pkg/morph/event/netmap/update_peer_test.go +++ b/pkg/morph/event/netmap/update_peer_test.go @@ -51,7 +51,7 @@ func TestParseUpdatePeer(t *testing.T) { require.Equal(t, UpdatePeer{ publicKey: publicKey, - online: true, + state: stateOnline, }, ev) }) }