diff --git a/pkg/innerring/processors/netmap/process_cleanup.go b/pkg/innerring/processors/netmap/process_cleanup.go new file mode 100644 index 000000000..35a098729 --- /dev/null +++ b/pkg/innerring/processors/netmap/process_cleanup.go @@ -0,0 +1,42 @@ +package netmap + +import ( + "github.com/nspcc-dev/neo-go/pkg/crypto/keys" + "github.com/nspcc-dev/neofs-api-go/v2/netmap" + "github.com/nspcc-dev/neofs-node/pkg/innerring/invoke" + "go.uber.org/zap" +) + +func (np *Processor) processNetmapCleanupTick(epoch uint64) { + if !np.activeState.IsActive() { + np.log.Info("passive mode, ignore new netmap cleanup tick") + + return + } + + err := np.netmapSnapshot.forEachRemoveCandidate(epoch, func(s string) error { + key, err := keys.NewPublicKeyFromString(s) + if err != nil { + np.log.Warn("can't decode public key of netmap node", + zap.String("key", s)) + + return nil + } + + np.log.Info("vote to remove node from netmap", zap.String("key", s)) + + err = invoke.UpdatePeerState(np.morphClient, np.netmapContract, &invoke.UpdatePeerArgs{ + Key: key, + Status: uint32(netmap.Offline), + }) + if err != nil { + np.log.Error("can't invoke netmap.UpdateState", zap.Error(err)) + } + + return nil + }) + if err != nil { + np.log.Warn("can't iterate on netmap cleaner cache", + zap.String("error", err.Error())) + } +}