Skip to content

Commit

Permalink
FEAT: Integrate delegated+staked factory in runType comps
Browse files Browse the repository at this point in the history
  • Loading branch information
mariusmihaic committed Dec 3, 2024
1 parent 8adeea3 commit 0c04227
Show file tree
Hide file tree
Showing 12 changed files with 141 additions and 76 deletions.
30 changes: 13 additions & 17 deletions cmd/sovereignnode/sovereignNodeRunner.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ import (
"github.com/multiversx/mx-chain-go/health"
"github.com/multiversx/mx-chain-go/node"
"github.com/multiversx/mx-chain-go/node/metrics"
trieIteratorsFactory "github.com/multiversx/mx-chain-go/node/trieIterators/factory"
"github.com/multiversx/mx-chain-go/outport"
"github.com/multiversx/mx-chain-go/process"
"github.com/multiversx/mx-chain-go/process/block/sovereign/incomingHeader"
Expand Down Expand Up @@ -794,22 +793,19 @@ func (snr *sovereignNodeRunner) createApiFacade(
log.Debug("creating api resolver structure")

apiResolverArgs := &apiComp.ApiResolverArgs{
Configs: configs.Configs,
CoreComponents: nodeHandler.GetCoreComponents(),
DataComponents: nodeHandler.GetDataComponents(),
StateComponents: nodeHandler.GetStateComponents(),
BootstrapComponents: nodeHandler.GetBootstrapComponents(),
CryptoComponents: nodeHandler.GetCryptoComponents(),
ProcessComponents: nodeHandler.GetProcessComponents(),
StatusCoreComponents: nodeHandler.GetStatusCoreComponents(),
GasScheduleNotifier: gasScheduleNotifier,
Bootstrapper: nodeHandler.GetConsensusComponents().Bootstrapper(),
RunTypeComponents: nodeHandler.GetRunTypeComponents(),
AllowVMQueriesChan: allowVMQueriesChan,
StatusComponents: nodeHandler.GetStatusComponents(),
DelegatedListFactoryHandler: trieIteratorsFactory.NewSovereignDelegatedListProcessorFactory(),
DirectStakedListFactoryHandler: trieIteratorsFactory.NewSovereignDirectStakedListProcessorFactory(),
TotalStakedValueFactoryHandler: trieIteratorsFactory.NewSovereignTotalStakedValueProcessorFactory(),
Configs: configs.Configs,
CoreComponents: nodeHandler.GetCoreComponents(),
DataComponents: nodeHandler.GetDataComponents(),
StateComponents: nodeHandler.GetStateComponents(),
BootstrapComponents: nodeHandler.GetBootstrapComponents(),
CryptoComponents: nodeHandler.GetCryptoComponents(),
ProcessComponents: nodeHandler.GetProcessComponents(),
StatusCoreComponents: nodeHandler.GetStatusCoreComponents(),
GasScheduleNotifier: gasScheduleNotifier,
Bootstrapper: nodeHandler.GetConsensusComponents().Bootstrapper(),
RunTypeComponents: nodeHandler.GetRunTypeComponents(),
AllowVMQueriesChan: allowVMQueriesChan,
StatusComponents: nodeHandler.GetStatusComponents(),
}

apiResolver, err := apiComp.CreateApiResolver(apiResolverArgs)
Expand Down
45 changes: 20 additions & 25 deletions factory/api/apiResolverFactory.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ import (
"github.com/multiversx/mx-chain-go/node/external/timemachine/fee"
"github.com/multiversx/mx-chain-go/node/external/transactionAPI"
"github.com/multiversx/mx-chain-go/node/trieIterators"
trieIteratorsFactory "github.com/multiversx/mx-chain-go/node/trieIterators/factory"
"github.com/multiversx/mx-chain-go/outport/process/alteredaccounts"
"github.com/multiversx/mx-chain-go/process"
"github.com/multiversx/mx-chain-go/process/coordinator"
Expand All @@ -58,23 +57,20 @@ var log = logger.GetOrCreate("factory")

// ApiResolverArgs holds the argument needed to create an API resolver
type ApiResolverArgs struct {
Configs *config.Configs
CoreComponents factory.CoreComponentsHolder
DataComponents factory.DataComponentsHolder
StateComponents factory.StateComponentsHolder
BootstrapComponents factory.BootstrapComponentsHolder
CryptoComponents factory.CryptoComponentsHolder
ProcessComponents factory.ProcessComponentsHolder
StatusCoreComponents factory.StatusCoreComponentsHolder
StatusComponents factory.StatusComponentsHolder
GasScheduleNotifier common.GasScheduleNotifierAPI
Bootstrapper process.Bootstrapper
RunTypeComponents factory.RunTypeComponentsHolder
AllowVMQueriesChan chan struct{}
ProcessingMode common.NodeProcessingMode
DelegatedListFactoryHandler trieIteratorsFactory.DelegatedListProcessorFactoryHandler
DirectStakedListFactoryHandler trieIteratorsFactory.DirectStakedListProcessorFactoryHandler
TotalStakedValueFactoryHandler trieIteratorsFactory.TotalStakedValueProcessorFactoryHandler
Configs *config.Configs
CoreComponents factory.CoreComponentsHolder
DataComponents factory.DataComponentsHolder
StateComponents factory.StateComponentsHolder
BootstrapComponents factory.BootstrapComponentsHolder
CryptoComponents factory.CryptoComponentsHolder
ProcessComponents factory.ProcessComponentsHolder
StatusCoreComponents factory.StatusCoreComponentsHolder
StatusComponents factory.StatusComponentsHolder
GasScheduleNotifier common.GasScheduleNotifierAPI
Bootstrapper process.Bootstrapper
RunTypeComponents factory.RunTypeComponentsHolder
AllowVMQueriesChan chan struct{}
ProcessingMode common.NodeProcessingMode
}

type scQueryServiceArgs struct {
Expand Down Expand Up @@ -123,14 +119,13 @@ type scQueryElementArgs struct {
func CreateApiResolver(args *ApiResolverArgs) (facade.ApiResolver, error) {
apiWorkingDir := filepath.Join(args.Configs.FlagsConfig.WorkingDir, common.TemporaryPath)

// TODO: MX-16228 Move all these 3 below in runTypeComp
if check.IfNilReflect(args.DelegatedListFactoryHandler) {
if check.IfNil(args.RunTypeComponents.DelegatedListFactoryHandler()) {
return nil, factory.ErrNilDelegatedListFactory
}
if check.IfNilReflect(args.DirectStakedListFactoryHandler) {
if check.IfNil(args.RunTypeComponents.DirectStakedListFactoryHandler()) {
return nil, factory.ErrNilDirectStakedListFactory
}
if check.IfNilReflect(args.TotalStakedValueFactoryHandler) {
if check.IfNil(args.RunTypeComponents.TotalStakedValueFactoryHandler()) {
return nil, factory.ErrNilTotalStakedValueFactory
}
if check.IfNil(args.RunTypeComponents.APIRewardsTxHandler()) {
Expand Down Expand Up @@ -217,17 +212,17 @@ func CreateApiResolver(args *ApiResolverArgs) (facade.ApiResolver, error) {
PublicKeyConverter: args.CoreComponents.AddressPubKeyConverter(),
QueryService: scQueryService,
}
totalStakedValueHandler, err := args.TotalStakedValueFactoryHandler.CreateTotalStakedValueProcessorHandler(argsProcessors)
totalStakedValueHandler, err := args.RunTypeComponents.TotalStakedValueFactoryHandler().CreateTotalStakedValueProcessorHandler(argsProcessors)
if err != nil {
return nil, err
}

directStakedListHandler, err := args.DirectStakedListFactoryHandler.CreateDirectStakedListProcessorHandler(argsProcessors)
directStakedListHandler, err := args.RunTypeComponents.DirectStakedListFactoryHandler().CreateDirectStakedListProcessorHandler(argsProcessors)
if err != nil {
return nil, err
}

delegatedListHandler, err := args.DelegatedListFactoryHandler.CreateDelegatedListProcessorHandler(argsProcessors)
delegatedListHandler, err := args.RunTypeComponents.DelegatedListFactoryHandler().CreateDelegatedListProcessorHandler(argsProcessors)
if err != nil {
return nil, err
}
Expand Down
21 changes: 13 additions & 8 deletions factory/api/apiResolverFactory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import (
"github.com/multiversx/mx-chain-go/factory/bootstrap"
"github.com/multiversx/mx-chain-go/factory/mock"
testsMocks "github.com/multiversx/mx-chain-go/integrationTests/mock"
trieIteratorsFactory "github.com/multiversx/mx-chain-go/node/trieIterators/factory"
"github.com/multiversx/mx-chain-go/process"
vmFactory "github.com/multiversx/mx-chain-go/process/factory"
"github.com/multiversx/mx-chain-go/process/sync/disabled"
Expand Down Expand Up @@ -123,10 +122,7 @@ func createMockArgs(t *testing.T) *api.ApiResolverArgs {
StatusComponents: &mainFactoryMocks.StatusComponentsStub{
ManagedPeersMonitorField: &testscommon.ManagedPeersMonitorStub{},
},
RunTypeComponents: componentsMock.GetRunTypeComponents(),
DelegatedListFactoryHandler: trieIteratorsFactory.NewDelegatedListProcessorFactory(),
DirectStakedListFactoryHandler: trieIteratorsFactory.NewDirectStakedListProcessorFactory(),
TotalStakedValueFactoryHandler: trieIteratorsFactory.NewTotalStakedListProcessorFactory(),
RunTypeComponents: componentsMock.GetRunTypeComponents(),
}
}

Expand Down Expand Up @@ -321,7 +317,10 @@ func TestCreateApiResolver(t *testing.T) {
t.Parallel()

args := createMockArgs(t)
args.DelegatedListFactoryHandler = nil
runTypeComps := componentsMock.GetRunTypeComponents()
runTypeCompsStub := componentsMock.GetRunTypeComponentsStub(runTypeComps)
runTypeCompsStub.DelegatedListFactoryField = nil
args.RunTypeComponents = runTypeCompsStub
apiResolver, err := api.CreateApiResolver(args)
require.Equal(t, factoryErrors.ErrNilDelegatedListFactory, err)
require.True(t, check.IfNil(apiResolver))
Expand All @@ -330,7 +329,10 @@ func TestCreateApiResolver(t *testing.T) {
t.Parallel()

args := createMockArgs(t)
args.DirectStakedListFactoryHandler = nil
runTypeComps := componentsMock.GetRunTypeComponents()
runTypeCompsStub := componentsMock.GetRunTypeComponentsStub(runTypeComps)
runTypeCompsStub.DirectStakedListFactoryField = nil
args.RunTypeComponents = runTypeCompsStub
apiResolver, err := api.CreateApiResolver(args)
require.Equal(t, factoryErrors.ErrNilDirectStakedListFactory, err)
require.True(t, check.IfNil(apiResolver))
Expand All @@ -339,7 +341,10 @@ func TestCreateApiResolver(t *testing.T) {
t.Parallel()

args := createMockArgs(t)
args.TotalStakedValueFactoryHandler = nil
runTypeComps := componentsMock.GetRunTypeComponents()
runTypeCompsStub := componentsMock.GetRunTypeComponentsStub(runTypeComps)
runTypeCompsStub.TotalStakedValueFactoryField = nil
args.RunTypeComponents = runTypeCompsStub
apiResolver, err := api.CreateApiResolver(args)
require.Equal(t, factoryErrors.ErrNilTotalStakedValueFactory, err)
require.True(t, check.IfNil(apiResolver))
Expand Down
4 changes: 4 additions & 0 deletions factory/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import (
heartbeatData "github.com/multiversx/mx-chain-go/heartbeat/data"
"github.com/multiversx/mx-chain-go/node/external"
"github.com/multiversx/mx-chain-go/node/external/transactionAPI"
trieIteratorsFactory "github.com/multiversx/mx-chain-go/node/trieIterators/factory"
"github.com/multiversx/mx-chain-go/ntp"
"github.com/multiversx/mx-chain-go/outport"
"github.com/multiversx/mx-chain-go/p2p"
Expand Down Expand Up @@ -644,6 +645,9 @@ type RunTypeComponentsHolder interface {
ValidatorAccountsSyncerFactoryHandler() syncerFactory.ValidatorAccountsSyncerFactoryHandler
ShardRequestersContainerCreatorHandler() storageRequestFactory.ShardRequestersContainerCreatorHandler
APIRewardsTxHandler() transactionAPI.APIRewardTxHandler
DelegatedListFactoryHandler() trieIteratorsFactory.DelegatedListProcessorFactoryHandler
DirectStakedListFactoryHandler() trieIteratorsFactory.DirectStakedListProcessorFactoryHandler
TotalStakedValueFactoryHandler() trieIteratorsFactory.TotalStakedValueProcessorFactoryHandler
Create() error
Close() error
CheckSubcomponents() error
Expand Down
3 changes: 3 additions & 0 deletions factory/processing/processComponents_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1127,6 +1127,9 @@ func getRunTypeComponents(rt runType.RunTypeComponentsHolder) *mainFactoryMocks.
ValidatorAccountsSyncerFactoryHandlerField: rt.ValidatorAccountsSyncerFactoryHandler(),
ShardRequestersContainerCreatorHandlerField: rt.ShardRequestersContainerCreatorHandler(),
APIRewardsTxHandlerField: rt.APIRewardsTxHandler(),
DelegatedListFactoryField: rt.DelegatedListFactoryHandler(),
DirectStakedListFactoryField: rt.DirectStakedListFactoryHandler(),
TotalStakedValueFactoryField: rt.TotalStakedValueFactoryHandler(),
}
}

Expand Down
7 changes: 7 additions & 0 deletions factory/runType/runTypeComponents.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"github.com/multiversx/mx-chain-go/genesis/parsing"
processGenesis "github.com/multiversx/mx-chain-go/genesis/process"
"github.com/multiversx/mx-chain-go/node/external/transactionAPI"
trieIteratorsFactory "github.com/multiversx/mx-chain-go/node/trieIterators/factory"
"github.com/multiversx/mx-chain-go/process"
"github.com/multiversx/mx-chain-go/process/block"
processBlock "github.com/multiversx/mx-chain-go/process/block"
Expand Down Expand Up @@ -124,6 +125,9 @@ type runTypeComponents struct {
validatorAccountsSyncerFactoryHandler syncerFactory.ValidatorAccountsSyncerFactoryHandler
shardRequestersContainerCreatorHandler storageRequestFactory.ShardRequestersContainerCreatorHandler
apiRewardTxHandler transactionAPI.APIRewardTxHandler
delegatedListFactoryHandler trieIteratorsFactory.DelegatedListProcessorFactoryHandler
directStakedListFactoryHandler trieIteratorsFactory.DirectStakedListProcessorFactoryHandler
totalStakedValueFactoryHandler trieIteratorsFactory.TotalStakedValueProcessorFactoryHandler
}

// NewRunTypeComponentsFactory will return a new instance of runTypeComponentsFactory
Expand Down Expand Up @@ -302,6 +306,9 @@ func (rcf *runTypeComponentsFactory) Create() (*runTypeComponents, error) {
validatorAccountsSyncerFactoryHandler: syncerFactory.NewValidatorAccountsSyncerFactory(),
shardRequestersContainerCreatorHandler: storageRequestFactory.NewShardRequestersContainerCreator(),
apiRewardTxHandler: apiRewardTxHandler,
delegatedListFactoryHandler: trieIteratorsFactory.NewDelegatedListProcessorFactory(),
directStakedListFactoryHandler: trieIteratorsFactory.NewDirectStakedListProcessorFactory(),
totalStakedValueFactoryHandler: trieIteratorsFactory.NewTotalStakedListProcessorFactory(),
}, nil
}

Expand Down
37 changes: 37 additions & 0 deletions factory/runType/runTypeComponentsHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"github.com/multiversx/mx-chain-go/genesis/checking"
processComp "github.com/multiversx/mx-chain-go/genesis/process"
"github.com/multiversx/mx-chain-go/node/external/transactionAPI"
trieIteratorsFactory "github.com/multiversx/mx-chain-go/node/trieIterators/factory"
"github.com/multiversx/mx-chain-go/process"
processBlock "github.com/multiversx/mx-chain-go/process/block"
"github.com/multiversx/mx-chain-go/process/block/preprocess"
Expand Down Expand Up @@ -843,6 +844,42 @@ func (mrc *managedRunTypeComponents) APIRewardsTxHandler() transactionAPI.APIRew
return mrc.runTypeComponents.apiRewardTxHandler
}

// DelegatedListFactoryHandler returns delegated list factory handler
func (mrc *managedRunTypeComponents) DelegatedListFactoryHandler() trieIteratorsFactory.DelegatedListProcessorFactoryHandler {
mrc.mutRunTypeComponents.RLock()
defer mrc.mutRunTypeComponents.RUnlock()

if check.IfNil(mrc.runTypeComponents) {
return nil
}

return mrc.runTypeComponents.delegatedListFactoryHandler
}

// DirectStakedListFactoryHandler returns direct staked list factory handler
func (mrc *managedRunTypeComponents) DirectStakedListFactoryHandler() trieIteratorsFactory.DirectStakedListProcessorFactoryHandler {
mrc.mutRunTypeComponents.RLock()
defer mrc.mutRunTypeComponents.RUnlock()

if check.IfNil(mrc.runTypeComponents) {
return nil
}

return mrc.runTypeComponents.directStakedListFactoryHandler
}

// TotalStakedValueFactoryHandler returns total staked value factory handler
func (mrc *managedRunTypeComponents) TotalStakedValueFactoryHandler() trieIteratorsFactory.TotalStakedValueProcessorFactoryHandler {
mrc.mutRunTypeComponents.RLock()
defer mrc.mutRunTypeComponents.RUnlock()

if check.IfNil(mrc.runTypeComponents) {
return nil
}

return mrc.runTypeComponents.totalStakedValueFactoryHandler
}

// IsInterfaceNil returns true if the interface is nil
func (mrc *managedRunTypeComponents) IsInterfaceNil() bool {
return mrc == nil
Expand Down
4 changes: 4 additions & 0 deletions factory/runType/sovereignRunTypeComponents.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/multiversx/mx-chain-go/genesis/parsing"
processComp "github.com/multiversx/mx-chain-go/genesis/process"
"github.com/multiversx/mx-chain-go/node/external/transactionAPI"
trieIteratorsFactory "github.com/multiversx/mx-chain-go/node/trieIterators/factory"
"github.com/multiversx/mx-chain-go/process/block"
"github.com/multiversx/mx-chain-go/process/block/preprocess"
"github.com/multiversx/mx-chain-go/process/block/sovereign"
Expand Down Expand Up @@ -271,5 +272,8 @@ func (rcf *sovereignRunTypeComponentsFactory) Create() (*runTypeComponents, erro
validatorAccountsSyncerFactoryHandler: syncerFactory.NewSovereignValidatorAccountsSyncerFactory(),
shardRequestersContainerCreatorHandler: storageRequestFactory.NewSovereignShardRequestersContainerCreator(),
apiRewardTxHandler: apiRewardTxHandler,
delegatedListFactoryHandler: trieIteratorsFactory.NewSovereignDelegatedListProcessorFactory(),
directStakedListFactoryHandler: trieIteratorsFactory.NewSovereignDirectStakedListProcessorFactory(),
totalStakedValueFactoryHandler: trieIteratorsFactory.NewSovereignTotalStakedValueProcessorFactory(),
}, nil
}
12 changes: 4 additions & 8 deletions node/chainSimulator/components/nodeFacade.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import (
apiComp "github.com/multiversx/mx-chain-go/factory/api"
nodePack "github.com/multiversx/mx-chain-go/node"
"github.com/multiversx/mx-chain-go/node/metrics"
"github.com/multiversx/mx-chain-go/node/trieIterators/factory"
"github.com/multiversx/mx-chain-go/process/mock"

"github.com/multiversx/mx-chain-core-go/core"
Expand Down Expand Up @@ -61,13 +60,10 @@ func (node *testOnlyProcessingNode) createFacade(configs config.Configs, apiInte
return common.NsSynchronized
},
},
AllowVMQueriesChan: allowVMQueriesChan,
StatusComponents: node.StatusComponentsHolder,
ProcessingMode: common.GetNodeProcessingMode(configs.ImportDbConfig),
RunTypeComponents: node.RunTypeComponents,
DelegatedListFactoryHandler: factory.NewDelegatedListProcessorFactory(),
DirectStakedListFactoryHandler: factory.NewDirectStakedListProcessorFactory(),
TotalStakedValueFactoryHandler: factory.NewTotalStakedListProcessorFactory(),
AllowVMQueriesChan: allowVMQueriesChan,
StatusComponents: node.StatusComponentsHolder,
ProcessingMode: common.GetNodeProcessingMode(configs.ImportDbConfig),
RunTypeComponents: node.RunTypeComponents,
}

apiResolver, err := apiComp.CreateApiResolver(apiResolverArgs)
Expand Down
Loading

0 comments on commit 0c04227

Please sign in to comment.