[SUPPORT] ir: Do not exclude node in maintenance mode from netmap #758

Merged
fyrchik merged 1 commit from acid-ant/frostfs-node:bugfix/ir-fix-maintenance-support into support/v0.37 2023-10-27 07:52:19 +00:00
2 changed files with 19 additions and 1 deletions

View file

@ -24,6 +24,8 @@ type (
epochStamp epochStamp
binNodeInfo []byte binNodeInfo []byte
maintenance bool
} }
) )
@ -58,6 +60,7 @@ func (c *cleanupTable) update(snapshot netmap.NetMap, now uint64) {
} }
access.binNodeInfo = binNodeInfo access.binNodeInfo = binNodeInfo
access.maintenance = nmNodes[i].IsMaintenance()
newMap[keyString] = access newMap[keyString] = access
} }
@ -105,7 +108,7 @@ func (c *cleanupTable) forEachRemoveCandidate(epoch uint64, f func(string) error
defer c.Unlock() defer c.Unlock()
for keyString, access := range c.lastAccess { for keyString, access := range c.lastAccess {
if epoch-access.epoch > c.threshold { if !access.maintenance && epoch-access.epoch > c.threshold {
access.removeFlag = true // set remove flag access.removeFlag = true // set remove flag
c.lastAccess[keyString] = access c.lastAccess[keyString] = access

View file

@ -124,6 +124,21 @@ func TestCleanupTable(t *testing.T) {
})) }))
require.EqualValues(t, len(infos)-1, cnt) require.EqualValues(t, len(infos)-1, cnt)
}) })
t.Run("skip maintenance nodes", func(t *testing.T) {
cnt := 0
infos[1].SetMaintenance()
key := netmap.StringifyPublicKey(infos[1])
c.update(networkMap, 5)
require.NoError(t,
c.forEachRemoveCandidate(5, func(s string) error {
cnt++
require.NotEqual(t, s, key)
return nil
}))
require.EqualValues(t, len(infos)-1, cnt)
})
}) })
} }