[#1681] morph/netmap: Support MAINTENANCE state notification

After recent changes Netmap contract can send `UpdateState` notification
event with `MAINTENANCE` node's state. There is a need to provide
functionality to work with the status.

Provide `UpdatePeer.Maintenance` method. Support new state in
`ParseUpdatePeer` and `ParseUpdatePeerNotary` functions.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2022-09-19 20:21:35 +04:00 committed by fyrchik
parent 0903b2af93
commit bdb8243a5a
2 changed files with 17 additions and 4 deletions

View file

@ -16,6 +16,7 @@ import (
const ( const (
_ int8 = iota _ int8 = iota
stateOnline stateOnline
stateMaintenance
) )
type UpdatePeer struct { type UpdatePeer struct {
@ -31,10 +32,18 @@ type UpdatePeer struct {
// MorphEvent implements Neo:Morph Event interface. // MorphEvent implements Neo:Morph Event interface.
func (UpdatePeer) MorphEvent() {} func (UpdatePeer) MorphEvent() {}
// Online returns true if node's state is requested to be switched
// to "online".
func (s UpdatePeer) Online() bool { func (s UpdatePeer) Online() bool {
return s.state == stateOnline return s.state == stateOnline
} }
// Maintenance returns true if node's state is requested to be switched
// to "maintenance".
func (s UpdatePeer) Maintenance() bool {
return s.state == stateMaintenance
}
func (s UpdatePeer) PublicKey() *keys.PublicKey { func (s UpdatePeer) PublicKey() *keys.PublicKey {
return s.publicKey return s.publicKey
} }
@ -85,6 +94,8 @@ func ParseUpdatePeer(e *state.ContainedNotificationEvent) (event.Event, error) {
case int64(netmap.OfflineState): case int64(netmap.OfflineState):
case int64(netmap.OnlineState): case int64(netmap.OnlineState):
ev.state = stateOnline ev.state = stateOnline
case int64(netmap.OfflineState) + 1: // FIXME: use named constant after neofs-contract#269
ev.state = stateMaintenance
} }
return ev, nil return ev, nil

View file

@ -7,7 +7,7 @@ import (
"github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/crypto/keys"
"github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/nspcc-dev/neo-go/pkg/vm/opcode"
v2netmap "github.com/nspcc-dev/neofs-api-go/v2/netmap" "github.com/nspcc-dev/neofs-contract/netmap"
"github.com/nspcc-dev/neofs-node/pkg/morph/event" "github.com/nspcc-dev/neofs-node/pkg/morph/event"
) )
@ -61,12 +61,14 @@ func ParseUpdatePeerNotary(ne event.NotaryEvent) (event.Event, error) {
return nil, err return nil, err
} }
switch v2netmap.NodeState(state) { switch state {
default: default:
return nil, fmt.Errorf("unsupported node state %d", err) return nil, fmt.Errorf("unsupported node state %d", err)
case v2netmap.Offline: case int64(netmap.OfflineState):
case v2netmap.Online: case int64(netmap.OnlineState):
ev.state = stateOnline ev.state = stateOnline
case int64(netmap.OfflineState) + 1: // FIXME: use named constant after neofs-contract#269
ev.state = stateMaintenance
} }
fieldNum++ fieldNum++