From 7a5729ea2b84ecf8f97545f5dcfa43369eef7644 Mon Sep 17 00:00:00 2001 From: Leonard Lyubich Date: Tue, 24 Aug 2021 10:43:21 +0300 Subject: [PATCH] [#761] cmd/node: Do not perform bootstrap procedure in relay mode Storage node should not try to register itself in network in relay mode. Implement `needBootstrap` method which checks if node need to bootstrap. Call `bootstrap` method in `bootstrapNode` function only on true return. Skip re-bootstrap logic in new epoch event handler on false return. Return an error if `ControlService.SetNetmapStatus` is called on relay node. Signed-off-by: Leonard Lyubich --- cmd/neofs-node/config.go | 5 +++++ cmd/neofs-node/netmap.go | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/cmd/neofs-node/config.go b/cmd/neofs-node/config.go index 6c38b806ae..88746cad54 100644 --- a/cmd/neofs-node/config.go +++ b/cmd/neofs-node/config.go @@ -443,3 +443,8 @@ func (c *cfg) bootstrap() error { return c.cfgNetmap.wrapper.AddPeer(&ni) } + +// needBootstrap checks if local node should be registered in network on bootup. +func (c *cfg) needBootstrap() bool { + return c.cfgNetmap.needBootstrap +} diff --git a/cmd/neofs-node/netmap.go b/cmd/neofs-node/netmap.go index c5d3504adc..038a059d82 100644 --- a/cmd/neofs-node/netmap.go +++ b/cmd/neofs-node/netmap.go @@ -2,6 +2,7 @@ package main import ( "bytes" + "errors" netmapSDK "github.com/nspcc-dev/neofs-api-go/pkg/netmap" netmapV2 "github.com/nspcc-dev/neofs-api-go/v2/netmap" @@ -113,7 +114,7 @@ func initNetmapService(c *cfg) { }) addNewEpochAsyncNotificationHandler(c, func(ev event.Event) { - if c.cfgNetmap.reBoostrapTurnedOff.Load() { // fixes #470 + if !c.needBootstrap() || c.cfgNetmap.reBoostrapTurnedOff.Load() { // fixes #470 return } @@ -149,8 +150,10 @@ func initNetmapService(c *cfg) { func bootstrapNode(c *cfg) { initState(c) - err := c.bootstrap() - fatalOnErrDetails("bootstrap error", err) + if c.needBootstrap() { + err := c.bootstrap() + fatalOnErrDetails("bootstrap error", err) + } } func addNetmapNotificationHandler(c *cfg, sTyp string, h event.Handler) { @@ -228,7 +231,13 @@ func addNewEpochAsyncNotificationHandler(c *cfg, h event.Handler) { ) } +var errRelayBootstrap = errors.New("setting netmap status is forbidden in relay mode") + func (c *cfg) SetNetmapStatus(st control.NetmapStatus) error { + if !c.needBootstrap() { + return errRelayBootstrap + } + if st == control.NetmapStatus_ONLINE { c.cfgNetmap.reBoostrapTurnedOff.Store(false) return c.bootstrap()