forked from TrueCloudLab/frostfs-node
[#168] node: Refactor reputation service
Resolve funlen linter for initReputationService function Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
1f929fdd57
commit
ed28ce24cd
1 changed files with 154 additions and 126 deletions
|
@ -33,7 +33,6 @@ import (
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
// nolint: funlen
|
|
||||||
func initReputationService(c *cfg) {
|
func initReputationService(c *cfg) {
|
||||||
wrap, err := repClient.NewFromMorph(c.cfgMorph.client, c.cfgReputation.scriptHash, 0, repClient.TryNotary())
|
wrap, err := repClient.NewFromMorph(c.cfgMorph.client, c.cfgReputation.scriptHash, 0, repClient.TryNotary())
|
||||||
fatalOnErr(err)
|
fatalOnErr(err)
|
||||||
|
@ -50,26 +49,7 @@ func initReputationService(c *cfg) {
|
||||||
daughterStorage := daughters.New(daughters.Prm{})
|
daughterStorage := daughters.New(daughters.Prm{})
|
||||||
consumerStorage := consumerstorage.New(consumerstorage.Prm{})
|
consumerStorage := consumerstorage.New(consumerstorage.Prm{})
|
||||||
|
|
||||||
// storing received daughter(of current node) trusts as a manager
|
|
||||||
daughterStorageWriterProvider := &intermediatereputation.DaughterStorageWriterProvider{
|
|
||||||
Log: c.log,
|
|
||||||
Storage: daughterStorage,
|
|
||||||
}
|
|
||||||
|
|
||||||
consumerStorageWriterProvider := &intermediatereputation.ConsumerStorageWriterProvider{
|
|
||||||
Log: c.log,
|
|
||||||
Storage: consumerStorage,
|
|
||||||
}
|
|
||||||
|
|
||||||
localTrustLogger := &logger.Logger{Logger: c.log.With(zap.String("trust_type", "local"))}
|
localTrustLogger := &logger.Logger{Logger: c.log.With(zap.String("trust_type", "local"))}
|
||||||
intermediateTrustLogger := &logger.Logger{Logger: c.log.With(zap.String("trust_type", "intermediate"))}
|
|
||||||
|
|
||||||
localTrustStorage := &localreputation.TrustStorage{
|
|
||||||
Log: localTrustLogger,
|
|
||||||
Storage: c.cfgReputation.localTrustStorage,
|
|
||||||
NmSrc: nmSrc,
|
|
||||||
LocalKey: localKey,
|
|
||||||
}
|
|
||||||
|
|
||||||
managerBuilder := reputationcommon.NewManagerBuilder(
|
managerBuilder := reputationcommon.NewManagerBuilder(
|
||||||
reputationcommon.ManagersPrm{
|
reputationcommon.ManagersPrm{
|
||||||
|
@ -85,116 +65,15 @@ func initReputationService(c *cfg) {
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
intermediateRouteBuilder := intermediateroutes.New(
|
localTrustRouter := createLocalTrustRouter(c, localRouteBuilder, localTrustLogger, daughterStorage)
|
||||||
intermediateroutes.Prm{
|
|
||||||
ManagerBuilder: managerBuilder,
|
|
||||||
Log: intermediateTrustLogger,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
remoteLocalTrustProvider := common.NewRemoteTrustProvider(
|
intermediateTrustRouter := createIntermediateTrustRouter(c, consumerStorage, managerBuilder)
|
||||||
common.RemoteProviderPrm{
|
|
||||||
NetmapKeys: c,
|
|
||||||
DeadEndProvider: daughterStorageWriterProvider,
|
|
||||||
ClientCache: c.bgClientCache,
|
|
||||||
WriterProvider: localreputation.NewRemoteProvider(
|
|
||||||
localreputation.RemoteProviderPrm{
|
|
||||||
Key: &c.key.PrivateKey,
|
|
||||||
Log: localTrustLogger,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
Log: localTrustLogger,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
remoteIntermediateTrustProvider := common.NewRemoteTrustProvider(
|
eigenTrustController := createEigenTrustController(c, intermediateTrustRouter, localKey, wrap, daughterStorage, consumerStorage)
|
||||||
common.RemoteProviderPrm{
|
|
||||||
NetmapKeys: c,
|
|
||||||
DeadEndProvider: consumerStorageWriterProvider,
|
|
||||||
ClientCache: c.bgClientCache,
|
|
||||||
WriterProvider: intermediatereputation.NewRemoteProvider(
|
|
||||||
intermediatereputation.RemoteProviderPrm{
|
|
||||||
Key: &c.key.PrivateKey,
|
|
||||||
Log: intermediateTrustLogger,
|
|
||||||
},
|
|
||||||
),
|
|
||||||
Log: intermediateTrustLogger,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
localTrustRouter := reputationrouter.New(
|
c.cfgReputation.localTrustCtrl = createLocalTrustController(c, localTrustLogger, localKey, localTrustRouter)
|
||||||
reputationrouter.Prm{
|
|
||||||
LocalServerInfo: c,
|
|
||||||
RemoteWriterProvider: remoteLocalTrustProvider,
|
|
||||||
Builder: localRouteBuilder,
|
|
||||||
},
|
|
||||||
reputationrouter.WithLogger(localTrustLogger))
|
|
||||||
|
|
||||||
intermediateTrustRouter := reputationrouter.New(
|
addReputationReportHandler(c)
|
||||||
reputationrouter.Prm{
|
|
||||||
LocalServerInfo: c,
|
|
||||||
RemoteWriterProvider: remoteIntermediateTrustProvider,
|
|
||||||
Builder: intermediateRouteBuilder,
|
|
||||||
},
|
|
||||||
reputationrouter.WithLogger(intermediateTrustLogger),
|
|
||||||
)
|
|
||||||
|
|
||||||
eigenTrustCalculator := eigentrustcalc.New(
|
|
||||||
eigentrustcalc.Prm{
|
|
||||||
AlphaProvider: c.cfgNetmap.wrapper,
|
|
||||||
InitialTrustSource: intermediatereputation.InitialTrustSource{
|
|
||||||
NetMap: nmSrc,
|
|
||||||
},
|
|
||||||
IntermediateValueTarget: intermediateTrustRouter,
|
|
||||||
WorkerPool: c.cfgReputation.workerPool,
|
|
||||||
FinalResultTarget: intermediatereputation.NewFinalWriterProvider(
|
|
||||||
intermediatereputation.FinalWriterProviderPrm{
|
|
||||||
PrivatKey: &c.key.PrivateKey,
|
|
||||||
PubKey: localKey,
|
|
||||||
Client: wrap,
|
|
||||||
},
|
|
||||||
intermediatereputation.FinalWriterWithLogger(c.log),
|
|
||||||
),
|
|
||||||
DaughterTrustSource: &intermediatereputation.DaughterTrustIteratorProvider{
|
|
||||||
DaughterStorage: daughterStorage,
|
|
||||||
ConsumerStorage: consumerStorage,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
eigentrustcalc.WithLogger(c.log),
|
|
||||||
)
|
|
||||||
|
|
||||||
eigenTrustController := eigentrustctrl.New(
|
|
||||||
eigentrustctrl.Prm{
|
|
||||||
DaughtersTrustCalculator: &intermediatereputation.DaughtersTrustCalculator{
|
|
||||||
Calculator: eigenTrustCalculator,
|
|
||||||
},
|
|
||||||
IterationsProvider: c.cfgNetmap.wrapper,
|
|
||||||
WorkerPool: c.cfgReputation.workerPool,
|
|
||||||
},
|
|
||||||
eigentrustctrl.WithLogger(c.log),
|
|
||||||
)
|
|
||||||
|
|
||||||
c.cfgReputation.localTrustCtrl = localtrustcontroller.New(
|
|
||||||
localtrustcontroller.Prm{
|
|
||||||
LocalTrustSource: localTrustStorage,
|
|
||||||
LocalTrustTarget: localTrustRouter,
|
|
||||||
},
|
|
||||||
localtrustcontroller.WithLogger(c.log),
|
|
||||||
)
|
|
||||||
|
|
||||||
addNewEpochAsyncNotificationHandler(
|
|
||||||
c,
|
|
||||||
func(ev event.Event) {
|
|
||||||
c.log.Debug("start reporting reputation on new epoch event")
|
|
||||||
|
|
||||||
var reportPrm localtrustcontroller.ReportPrm
|
|
||||||
|
|
||||||
// report collected values from previous epoch
|
|
||||||
reportPrm.SetEpoch(ev.(netmap.NewEpoch).EpochNumber() - 1)
|
|
||||||
|
|
||||||
c.cfgReputation.localTrustCtrl.Report(reportPrm)
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
server := grpcreputation.New(
|
server := grpcreputation.New(
|
||||||
reputationrpc.NewSignService(
|
reputationrpc.NewSignService(
|
||||||
|
@ -219,6 +98,26 @@ func initReputationService(c *cfg) {
|
||||||
// initialize eigen trust block timer
|
// initialize eigen trust block timer
|
||||||
newEigenTrustIterTimer(c)
|
newEigenTrustIterTimer(c)
|
||||||
|
|
||||||
|
addEigenTrustEpochHandler(c, eigenTrustController)
|
||||||
|
}
|
||||||
|
|
||||||
|
func addReputationReportHandler(c *cfg) {
|
||||||
|
addNewEpochAsyncNotificationHandler(
|
||||||
|
c,
|
||||||
|
func(ev event.Event) {
|
||||||
|
c.log.Debug("start reporting reputation on new epoch event")
|
||||||
|
|
||||||
|
var reportPrm localtrustcontroller.ReportPrm
|
||||||
|
|
||||||
|
// report collected values from previous epoch
|
||||||
|
reportPrm.SetEpoch(ev.(netmap.NewEpoch).EpochNumber() - 1)
|
||||||
|
|
||||||
|
c.cfgReputation.localTrustCtrl.Report(reportPrm)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func addEigenTrustEpochHandler(c *cfg, eigenTrustController *eigentrustctrl.Controller) {
|
||||||
addNewEpochAsyncNotificationHandler(
|
addNewEpochAsyncNotificationHandler(
|
||||||
c,
|
c,
|
||||||
func(e event.Event) {
|
func(e event.Event) {
|
||||||
|
@ -255,6 +154,135 @@ func initReputationService(c *cfg) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createLocalTrustRouter(c *cfg, localRouteBuilder *localroutes.Builder, localTrustLogger *logger.Logger, daughterStorage *daughters.Storage) *reputationrouter.Router {
|
||||||
|
// storing received daughter(of current node) trusts as a manager
|
||||||
|
daughterStorageWriterProvider := &intermediatereputation.DaughterStorageWriterProvider{
|
||||||
|
Log: c.log,
|
||||||
|
Storage: daughterStorage,
|
||||||
|
}
|
||||||
|
|
||||||
|
remoteLocalTrustProvider := common.NewRemoteTrustProvider(
|
||||||
|
common.RemoteProviderPrm{
|
||||||
|
NetmapKeys: c,
|
||||||
|
DeadEndProvider: daughterStorageWriterProvider,
|
||||||
|
ClientCache: c.bgClientCache,
|
||||||
|
WriterProvider: localreputation.NewRemoteProvider(
|
||||||
|
localreputation.RemoteProviderPrm{
|
||||||
|
Key: &c.key.PrivateKey,
|
||||||
|
Log: localTrustLogger,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
Log: localTrustLogger,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
localTrustRouter := reputationrouter.New(
|
||||||
|
reputationrouter.Prm{
|
||||||
|
LocalServerInfo: c,
|
||||||
|
RemoteWriterProvider: remoteLocalTrustProvider,
|
||||||
|
Builder: localRouteBuilder,
|
||||||
|
},
|
||||||
|
reputationrouter.WithLogger(localTrustLogger))
|
||||||
|
return localTrustRouter
|
||||||
|
}
|
||||||
|
|
||||||
|
func createIntermediateTrustRouter(c *cfg, consumerStorage *consumerstorage.Storage, managerBuilder reputationcommon.ManagerBuilder) *reputationrouter.Router {
|
||||||
|
intermediateTrustLogger := &logger.Logger{Logger: c.log.With(zap.String("trust_type", "intermediate"))}
|
||||||
|
|
||||||
|
consumerStorageWriterProvider := &intermediatereputation.ConsumerStorageWriterProvider{
|
||||||
|
Log: c.log,
|
||||||
|
Storage: consumerStorage,
|
||||||
|
}
|
||||||
|
|
||||||
|
remoteIntermediateTrustProvider := common.NewRemoteTrustProvider(
|
||||||
|
common.RemoteProviderPrm{
|
||||||
|
NetmapKeys: c,
|
||||||
|
DeadEndProvider: consumerStorageWriterProvider,
|
||||||
|
ClientCache: c.bgClientCache,
|
||||||
|
WriterProvider: intermediatereputation.NewRemoteProvider(
|
||||||
|
intermediatereputation.RemoteProviderPrm{
|
||||||
|
Key: &c.key.PrivateKey,
|
||||||
|
Log: intermediateTrustLogger,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
Log: intermediateTrustLogger,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
intermediateRouteBuilder := intermediateroutes.New(
|
||||||
|
intermediateroutes.Prm{
|
||||||
|
ManagerBuilder: managerBuilder,
|
||||||
|
Log: intermediateTrustLogger,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
intermediateTrustRouter := reputationrouter.New(
|
||||||
|
reputationrouter.Prm{
|
||||||
|
LocalServerInfo: c,
|
||||||
|
RemoteWriterProvider: remoteIntermediateTrustProvider,
|
||||||
|
Builder: intermediateRouteBuilder,
|
||||||
|
},
|
||||||
|
reputationrouter.WithLogger(intermediateTrustLogger),
|
||||||
|
)
|
||||||
|
return intermediateTrustRouter
|
||||||
|
}
|
||||||
|
|
||||||
|
func createEigenTrustController(c *cfg, intermediateTrustRouter *reputationrouter.Router, localKey []byte, wrap *repClient.Client,
|
||||||
|
daughterStorage *daughters.Storage, consumerStorage *consumerstorage.Storage) *eigentrustctrl.Controller {
|
||||||
|
eigenTrustCalculator := eigentrustcalc.New(
|
||||||
|
eigentrustcalc.Prm{
|
||||||
|
AlphaProvider: c.cfgNetmap.wrapper,
|
||||||
|
InitialTrustSource: intermediatereputation.InitialTrustSource{
|
||||||
|
NetMap: c.netMapSource,
|
||||||
|
},
|
||||||
|
IntermediateValueTarget: intermediateTrustRouter,
|
||||||
|
WorkerPool: c.cfgReputation.workerPool,
|
||||||
|
FinalResultTarget: intermediatereputation.NewFinalWriterProvider(
|
||||||
|
intermediatereputation.FinalWriterProviderPrm{
|
||||||
|
PrivatKey: &c.key.PrivateKey,
|
||||||
|
PubKey: localKey,
|
||||||
|
Client: wrap,
|
||||||
|
},
|
||||||
|
intermediatereputation.FinalWriterWithLogger(c.log),
|
||||||
|
),
|
||||||
|
DaughterTrustSource: &intermediatereputation.DaughterTrustIteratorProvider{
|
||||||
|
DaughterStorage: daughterStorage,
|
||||||
|
ConsumerStorage: consumerStorage,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
eigentrustcalc.WithLogger(c.log),
|
||||||
|
)
|
||||||
|
|
||||||
|
eigenTrustController := eigentrustctrl.New(
|
||||||
|
eigentrustctrl.Prm{
|
||||||
|
DaughtersTrustCalculator: &intermediatereputation.DaughtersTrustCalculator{
|
||||||
|
Calculator: eigenTrustCalculator,
|
||||||
|
},
|
||||||
|
IterationsProvider: c.cfgNetmap.wrapper,
|
||||||
|
WorkerPool: c.cfgReputation.workerPool,
|
||||||
|
},
|
||||||
|
eigentrustctrl.WithLogger(c.log),
|
||||||
|
)
|
||||||
|
return eigenTrustController
|
||||||
|
}
|
||||||
|
|
||||||
|
func createLocalTrustController(c *cfg, localTrustLogger *logger.Logger, localKey []byte, localTrustRouter *reputationrouter.Router) *localtrustcontroller.Controller {
|
||||||
|
localTrustStorage := &localreputation.TrustStorage{
|
||||||
|
Log: localTrustLogger,
|
||||||
|
Storage: c.cfgReputation.localTrustStorage,
|
||||||
|
NmSrc: c.netMapSource,
|
||||||
|
LocalKey: localKey,
|
||||||
|
}
|
||||||
|
|
||||||
|
return localtrustcontroller.New(
|
||||||
|
localtrustcontroller.Prm{
|
||||||
|
LocalTrustSource: localTrustStorage,
|
||||||
|
LocalTrustTarget: localTrustRouter,
|
||||||
|
},
|
||||||
|
localtrustcontroller.WithLogger(c.log),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
type reputationServer struct {
|
type reputationServer struct {
|
||||||
*cfg
|
*cfg
|
||||||
log *logger.Logger
|
log *logger.Logger
|
||||||
|
|
Loading…
Reference in a new issue