[#1900] node: Fix loosing the "maintenance" status

In previous implementation node lost maintenance status after successful
switching to it. For example, after some period of time node sent
bootstrap requests with the "online" state instead of "maintenance".

Make `startMaintenance` method to set maintenance status in the
`networkState`.

Signed-off-by: Leonard Lyubich <ctulhurider@gmail.com>
This commit is contained in:
Leonard Lyubich 2022-10-28 11:08:49 +04:00 committed by fyrchik
parent db92e96e40
commit 98034005f1
3 changed files with 11 additions and 2 deletions

View file

@ -29,6 +29,7 @@ Changelog for NeoFS Node
- Make it possible to use `shard.ContainerSize` in read-only mode (#1975) - Make it possible to use `shard.ContainerSize` in read-only mode (#1975)
- Storage node now starts if at least one gRPC enpoint is available (#1893) - Storage node now starts if at least one gRPC enpoint is available (#1893)
- Missing object relatives in object removal session opened by NeoFS CLI (#1978) - Missing object relatives in object removal session opened by NeoFS CLI (#1978)
- Bringing a node back online during maintenance (#1900)
### Removed ### Removed
### Updated ### Updated

View file

@ -312,8 +312,9 @@ type internals struct {
} }
// starts node's maintenance. // starts node's maintenance.
func (c *internals) startMaintenance() { func (c *cfg) startMaintenance() {
c.isMaintenance.Store(true) c.isMaintenance.Store(true)
c.cfgNetmap.state.setControlNetmapStatus(control.NetmapStatus_MAINTENANCE)
c.log.Info("started local node's maintenance") c.log.Info("started local node's maintenance")
} }

View file

@ -84,7 +84,14 @@ func (s *networkState) setNodeInfo(ni *netmapSDK.NodeInfo) {
} }
} }
s.controlNetStatus.Store(ctrlNetSt) s.setControlNetmapStatus(ctrlNetSt)
}
// sets the current node state to the given value. Subsequent cfg.bootstrap
// calls will process this value to decide what status node should set in the
// network.
func (s *networkState) setControlNetmapStatus(st control.NetmapStatus) {
s.controlNetStatus.Store(st)
} }
func (s *networkState) controlNetmapStatus() (res control.NetmapStatus) { func (s *networkState) controlNetmapStatus() (res control.NetmapStatus) {