[#1681] ir/netmap: Require MAINTENANCE mode to be allowed by network

There is a need to prevent limitless abuse of MAINTENANCE status of the
storage nodes. To do this, configuration of the NeoFS network is going
to be extended with the flag which allows the state. Until this is done,
it makes sense to prepare a site for this in the code.

Define `state.NetworkSettings` interface as an abstraction of global
network configuration within the `state` package. Make
`NetMapCandidateValidator` to depend on `NetworkSettings` and provide
corresponding field setter. Change `VerifyAndUpdate` method's behavior
to return an error for candidates with MAINTENANCE state if this state
is disallowed by the network configuration. Provide `NetworkSettings`
from the wrapper over Netmap contract's client on Inner Ring application
side. The provider is implemented to statically disallow MAINTENANCE
mode in order to save previous behavior.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
Signed-off-by: Leonard Lyubich <ctulhurider@gmail.com>
This commit is contained in:
Leonard Lyubich 2022-09-19 18:36:54 +04:00 committed by fyrchik
parent 42fb40e841
commit f64ae55806
4 changed files with 93 additions and 4 deletions

20
pkg/innerring/netmap.go Normal file
View file

@ -0,0 +1,20 @@
package innerring
import (
"github.com/nspcc-dev/neofs-node/pkg/innerring/processors/netmap/nodevalidation/state"
netmapclient "github.com/nspcc-dev/neofs-node/pkg/morph/client/netmap"
)
/*
File contains dependencies for processor of the Netmap contract's notifications.
*/
// wraps Netmap contract's client and provides state.NetworkSettings.
type networkSettings netmapclient.Client
// MaintenanceModeAllowed requests network configuration from the Sidechain
// and check allowance of storage node's maintenance mode according to it.
// Always returns state.ErrMaintenanceModeDisallowed.
func (s *networkSettings) MaintenanceModeAllowed() error {
return state.ErrMaintenanceModeDisallowed
}