forked from TrueCloudLab/frostfs-node
[#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"
|
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/network"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/services/control"
|
"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"
|
tokenStorage "github.com/nspcc-dev/neofs-node/pkg/services/session/storage"
|
||||||
"github.com/nspcc-dev/neofs-node/pkg/services/util/response"
|
"github.com/nspcc-dev/neofs-node/pkg/services/util/response"
|
||||||
util2 "github.com/nspcc-dev/neofs-node/pkg/util"
|
util2 "github.com/nspcc-dev/neofs-node/pkg/util"
|
||||||
|
@ -200,6 +202,8 @@ type cfg struct {
|
||||||
healthStatus *atomic.Int32
|
healthStatus *atomic.Int32
|
||||||
|
|
||||||
closers []func()
|
closers []func()
|
||||||
|
|
||||||
|
cfgReputation cfgReputation
|
||||||
}
|
}
|
||||||
|
|
||||||
type cfgGRPC struct {
|
type cfgGRPC struct {
|
||||||
|
@ -287,6 +291,12 @@ type cfgControlService struct {
|
||||||
server *grpc.Server
|
server *grpc.Server
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type cfgReputation struct {
|
||||||
|
localTrustStorage *truststorage.Storage
|
||||||
|
|
||||||
|
localTrustCtrl *trustcontroller.Controller
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
_ BootstrapType = iota
|
_ BootstrapType = iota
|
||||||
StorageNode
|
StorageNode
|
||||||
|
|
|
@ -46,6 +46,7 @@ func initApp(c *cfg) {
|
||||||
initAccountingService(c)
|
initAccountingService(c)
|
||||||
initContainerService(c)
|
initContainerService(c)
|
||||||
initSessionService(c)
|
initSessionService(c)
|
||||||
|
initReputationService(c)
|
||||||
initObjectService(c)
|
initObjectService(c)
|
||||||
initProfiler(c)
|
initProfiler(c)
|
||||||
initMetrics(c)
|
initMetrics(c)
|
||||||
|
|
|
@ -4,7 +4,10 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
|
||||||
|
crypto "github.com/nspcc-dev/neofs-crypto"
|
||||||
netmapcore "github.com/nspcc-dev/neofs-node/pkg/core/netmap"
|
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"
|
"github.com/nspcc-dev/neofs-node/pkg/services/reputation"
|
||||||
trustcontroller "github.com/nspcc-dev/neofs-node/pkg/services/reputation/local/controller"
|
trustcontroller "github.com/nspcc-dev/neofs-node/pkg/services/reputation/local/controller"
|
||||||
truststorage "github.com/nspcc-dev/neofs-node/pkg/services/reputation/local/storage"
|
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 {
|
func (*localTrustLogger) Close() error {
|
||||||
return nil
|
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