[SUPPORT] ir: Do not exclude node in maintenance mode from netmap #758
2 changed files with 19 additions and 1 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue