[#428] cmd/node: Trigger local trust controller on new epoch
Implement and call `initReputationService` func that constructs local trust storage and controller, and subscribes the controller on new epoch notification. Event handler calls `Controller.Report` method to process collected values. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
c4a1c70089
commit
a6f2394dec
3 changed files with 43 additions and 0 deletions
|
@ -32,6 +32,8 @@ import (
|
|||
netmap2 "github.com/nspcc-dev/neofs-node/pkg/morph/event/netmap"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/network"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/services/control"
|
||||
trustcontroller "github.com/nspcc-dev/neofs-node/pkg/services/reputation/local/controller"
|
||||
truststorage "github.com/nspcc-dev/neofs-node/pkg/services/reputation/local/storage"
|
||||
tokenStorage "github.com/nspcc-dev/neofs-node/pkg/services/session/storage"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/services/util/response"
|
||||
util2 "github.com/nspcc-dev/neofs-node/pkg/util"
|
||||
|
@ -200,6 +202,8 @@ type cfg struct {
|
|||
healthStatus *atomic.Int32
|
||||
|
||||
closers []func()
|
||||
|
||||
cfgReputation cfgReputation
|
||||
}
|
||||
|
||||
type cfgGRPC struct {
|
||||
|
@ -287,6 +291,12 @@ type cfgControlService struct {
|
|||
server *grpc.Server
|
||||
}
|
||||
|
||||
type cfgReputation struct {
|
||||
localTrustStorage *truststorage.Storage
|
||||
|
||||
localTrustCtrl *trustcontroller.Controller
|
||||
}
|
||||
|
||||
const (
|
||||
_ BootstrapType = iota
|
||||
StorageNode
|
||||
|
|
|
@ -46,6 +46,7 @@ func initApp(c *cfg) {
|
|||
initAccountingService(c)
|
||||
initContainerService(c)
|
||||
initSessionService(c)
|
||||
initReputationService(c)
|
||||
initObjectService(c)
|
||||
initProfiler(c)
|
||||
initMetrics(c)
|
||||
|
|
|
@ -4,7 +4,10 @@ import (
|
|||
"bytes"
|
||||
"encoding/hex"
|
||||
|
||||
crypto "github.com/nspcc-dev/neofs-crypto"
|
||||
netmapcore "github.com/nspcc-dev/neofs-node/pkg/core/netmap"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/morph/event/netmap"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/services/reputation"
|
||||
trustcontroller "github.com/nspcc-dev/neofs-node/pkg/services/reputation/local/controller"
|
||||
truststorage "github.com/nspcc-dev/neofs-node/pkg/services/reputation/local/storage"
|
||||
|
@ -117,3 +120,32 @@ func (l *localTrustLogger) Write(t reputation.Trust) error {
|
|||
func (*localTrustLogger) Close() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func initReputationService(c *cfg) {
|
||||
// consider sharing this between application components
|
||||
nmSrc := newCachedNetmapStorage(c.cfgNetmap.state, c.cfgNetmap.wrapper)
|
||||
|
||||
c.cfgReputation.localTrustStorage = truststorage.New(truststorage.Prm{})
|
||||
|
||||
trustStorage := &localTrustStorage{
|
||||
log: c.log,
|
||||
storage: c.cfgReputation.localTrustStorage,
|
||||
nmSrc: nmSrc,
|
||||
localKey: crypto.MarshalPublicKey(&c.key.PublicKey),
|
||||
}
|
||||
|
||||
c.cfgReputation.localTrustCtrl = trustcontroller.New(trustcontroller.Prm{
|
||||
LocalTrustSource: trustStorage,
|
||||
LocalTrustTarget: trustStorage,
|
||||
})
|
||||
|
||||
addNewEpochNotificationHandler(c, func(ev event.Event) {
|
||||
var reportPrm trustcontroller.ReportPrm
|
||||
|
||||
// report collected values from previous epoch
|
||||
reportPrm.SetEpoch(ev.(netmap.NewEpoch).EpochNumber() - 1)
|
||||
|
||||
// TODO: implement and use worker pool [neofs-node#440]
|
||||
go c.cfgReputation.localTrustCtrl.Report(reportPrm)
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue