From 0d14ef69f0c0ebd0e97f574fb423945ce120acf1 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Tue, 18 Oct 2022 16:03:33 +0300 Subject: [PATCH] [#1922] neofs-node: Allow to go online after maintenance Signed-off-by: Evgenii Stratonikov --- CHANGELOG.md | 1 + cmd/neofs-node/config.go | 6 ++++-- cmd/neofs-node/netmap.go | 6 +++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91fcb2601b..7da5925e50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ Changelog for NeoFS Node ### Changed ### Fixed - `writecache.max_object_size` is now correctly handled (#1925) +- Correctly handle setting ONLINE netmap status after maintenance (#1922) ### Removed ### Updated diff --git a/cmd/neofs-node/config.go b/cmd/neofs-node/config.go index 8811a11352..21ef0d94ed 100644 --- a/cmd/neofs-node/config.go +++ b/cmd/neofs-node/config.go @@ -848,11 +848,13 @@ func (c *cfg) handleLocalNodeInfo(ni *netmap.NodeInfo) { } // bootstrap sets local node's netmap status to "online". -func (c *cfg) bootstrap() error { +// If current netmap status is MAINTENANCE and this function wasn't called thorough a control service, +// the status is untouched. +func (c *cfg) bootstrap(manual bool) error { ni := c.cfgNodeInfo.localInfo // switch to online except when under maintenance - if st := c.cfgNetmap.state.controlNetmapStatus(); st == control.NetmapStatus_MAINTENANCE { + if st := c.cfgNetmap.state.controlNetmapStatus(); st == control.NetmapStatus_MAINTENANCE && !manual { ni.SetMaintenance() c.log.Info("bootstrap with untouched node state", diff --git a/cmd/neofs-node/netmap.go b/cmd/neofs-node/netmap.go index 068e9dfd6b..0bb668e47c 100644 --- a/cmd/neofs-node/netmap.go +++ b/cmd/neofs-node/netmap.go @@ -179,7 +179,7 @@ func initNetmapService(c *cfg) { const reBootstrapInterval = 2 if (n-c.cfgNetmap.startEpoch)%reBootstrapInterval == 0 { - err := c.bootstrap() + err := c.bootstrap(false) if err != nil { c.log.Warn("can't send re-bootstrap tx", zap.Error(err)) } @@ -241,7 +241,7 @@ func readSubnetCfg(c *cfg) { // Must be called after initNetmapService. func bootstrapNode(c *cfg) { if c.needBootstrap() { - err := c.bootstrap() + err := c.bootstrap(false) fatalOnErrDetails("bootstrap error", err) } } @@ -353,7 +353,7 @@ func (c *cfg) SetNetmapStatus(st control.NetmapStatus) error { if st == control.NetmapStatus_ONLINE { c.cfgNetmap.reBoostrapTurnedOff.Store(false) - return c.bootstrap() + return c.bootstrap(true) } c.cfgNetmap.reBoostrapTurnedOff.Store(true)