[#757] ir: Do not exclude node in maintenance mode from netmap
Build / Build Components (1.20) (pull_request) Successful in 6m20s Details
DCO action / DCO (pull_request) Successful in 6m45s Details
Vulncheck / Vulncheck (pull_request) Successful in 6m20s Details
Build / Build Components (1.21) (pull_request) Successful in 8m34s Details
Tests and linters / Tests (1.20) (pull_request) Successful in 9m21s Details
Tests and linters / Tests (1.21) (pull_request) Successful in 9m17s Details
Tests and linters / Staticcheck (pull_request) Successful in 9m15s Details
Tests and linters / Lint (pull_request) Successful in 9m42s Details
Tests and linters / Tests with -race (pull_request) Successful in 11m34s Details

Signed-off-by: Anton Nikiforov <an.nikiforov@yadro.com>
pull/757/head
Anton Nikiforov 2023-10-26 10:36:22 +03:00
parent 9f7c2d8810
commit 121f5c4dd8
2 changed files with 19 additions and 1 deletions

View File

@ -24,6 +24,8 @@ type (
epochStamp
binNodeInfo []byte
maintenance bool
}
)
@ -58,6 +60,7 @@ func (c *cleanupTable) update(snapshot netmap.NetMap, now uint64) {
}
access.binNodeInfo = binNodeInfo
access.maintenance = nmNodes[i].IsMaintenance()
newMap[keyString] = access
}
@ -105,7 +108,7 @@ func (c *cleanupTable) forEachRemoveCandidate(epoch uint64, f func(string) error
defer c.Unlock()
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
c.lastAccess[keyString] = access

View File

@ -124,6 +124,21 @@ func TestCleanupTable(t *testing.T) {
}))
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)
})
})
}