Skip to content

Commit

Permalink
Merge pull request #5135 from multiversx/fixes-outport-refactor
Browse files Browse the repository at this point in the history
Fixes outport refactor
  • Loading branch information
miiu96 authored Mar 31, 2023
2 parents d7c1e24 + 74dc1e4 commit ee0e9d2
Show file tree
Hide file tree
Showing 10 changed files with 149 additions and 60 deletions.
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ require (
github.com/google/gops v0.3.18
github.com/gorilla/websocket v1.5.0
github.com/mitchellh/mapstructure v1.5.0
github.com/multiversx/mx-chain-core-go v1.2.1-0.20230322093158-35195fa155c0
github.com/multiversx/mx-chain-core-go v1.2.1-0.20230330105824-932a718276f6
github.com/multiversx/mx-chain-crypto-go v1.2.5
github.com/multiversx/mx-chain-es-indexer-go v1.4.1-0.20230322095713-a82089993c0d
github.com/multiversx/mx-chain-es-indexer-go v1.4.1-0.20230331083741-0fd8a2156e96
github.com/multiversx/mx-chain-logger-go v1.0.11
github.com/multiversx/mx-chain-p2p-go v1.0.13
github.com/multiversx/mx-chain-storage-go v1.0.7
Expand Down
9 changes: 5 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -612,12 +612,13 @@ github.com/multiversx/concurrent-map v0.1.4/go.mod h1:8cWFRJDOrWHOTNSqgYCUvwT7c7
github.com/multiversx/mx-chain-core-go v1.1.30/go.mod h1:8gGEQv6BWuuJwhd25qqhCOZbBSv9mk+hLeKvinSaSMk=
github.com/multiversx/mx-chain-core-go v1.1.31/go.mod h1:8gGEQv6BWuuJwhd25qqhCOZbBSv9mk+hLeKvinSaSMk=
github.com/multiversx/mx-chain-core-go v1.2.0/go.mod h1:8gGEQv6BWuuJwhd25qqhCOZbBSv9mk+hLeKvinSaSMk=
github.com/multiversx/mx-chain-core-go v1.2.1-0.20230322093158-35195fa155c0 h1:Hr0bAMUJigh5xGFm2qoKKglEtpIXckxCLjCDBUYv1DM=
github.com/multiversx/mx-chain-core-go v1.2.1-0.20230322093158-35195fa155c0/go.mod h1:8gGEQv6BWuuJwhd25qqhCOZbBSv9mk+hLeKvinSaSMk=
github.com/multiversx/mx-chain-core-go v1.2.1-0.20230329082847-b78e96c3ad5a/go.mod h1:/lovncjwo+pXQ7IAERwNzwCifeH7SAWk0DGqjorX2bc=
github.com/multiversx/mx-chain-core-go v1.2.1-0.20230330105824-932a718276f6 h1:4Nv0uxJbfSZ1fqWcQEYyQ1SdAAluDEbHjTi0X8ZFXFs=
github.com/multiversx/mx-chain-core-go v1.2.1-0.20230330105824-932a718276f6/go.mod h1:/lovncjwo+pXQ7IAERwNzwCifeH7SAWk0DGqjorX2bc=
github.com/multiversx/mx-chain-crypto-go v1.2.5 h1:tuq3BUNMhKud5DQbZi9DiVAAHUXypizy8zPH0NpTGZk=
github.com/multiversx/mx-chain-crypto-go v1.2.5/go.mod h1:teqhNyWEqfMPgNn8sgWXlgtJ1a36jGCnhs/tRpXW6r4=
github.com/multiversx/mx-chain-es-indexer-go v1.4.1-0.20230322095713-a82089993c0d h1:PDkG7SrzIsyRo5PLI68vlBM85PiQhWHhpafW7VCzhgM=
github.com/multiversx/mx-chain-es-indexer-go v1.4.1-0.20230322095713-a82089993c0d/go.mod h1:iDLxzwUi9CGzzEbFRi4TgYvmhsp21qNj5eqMgT32d2M=
github.com/multiversx/mx-chain-es-indexer-go v1.4.1-0.20230331083741-0fd8a2156e96 h1:okIfLr+NqX04eHNp9k97KuLhpYfLJOjmGZaOia9xcGg=
github.com/multiversx/mx-chain-es-indexer-go v1.4.1-0.20230331083741-0fd8a2156e96/go.mod h1:Y6jgeoMBpDCtm7lurtChhgPyhpQ0GF5OruW/tl/++JI=
github.com/multiversx/mx-chain-logger-go v1.0.11 h1:DFsHa+sc5fKwhDR50I8uBM99RTDTEW68ESyr5ALRDwE=
github.com/multiversx/mx-chain-logger-go v1.0.11/go.mod h1:1srDkP0DQucWQ+rYfaq0BX2qLnULsUdRPADpYUTM6dA=
github.com/multiversx/mx-chain-p2p-go v1.0.13 h1:woIlYkDFCKYyJQ5urDcOzz8HUFGsSEhTfUXDDxNI2zM=
Expand Down
29 changes: 27 additions & 2 deletions outport/factory/notifierFactory.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package factory
import (
"github.com/multiversx/mx-chain-core-go/core"
"github.com/multiversx/mx-chain-core-go/core/check"
"github.com/multiversx/mx-chain-core-go/data/block"
"github.com/multiversx/mx-chain-core-go/marshal"
"github.com/multiversx/mx-chain-go/outport"
"github.com/multiversx/mx-chain-go/outport/notifier"
Expand Down Expand Up @@ -37,9 +38,15 @@ func CreateEventNotifier(args *EventNotifierFactoryArgs) (outport.Driver, error)
return nil, err
}

blockContainer, err := createBlockCreatorsContainer()
if err != nil {
return nil, err
}

notifierArgs := notifier.ArgsEventNotifier{
HttpClient: httpClient,
Marshaller: args.Marshaller,
HttpClient: httpClient,
Marshaller: args.Marshaller,
BlockContainer: blockContainer,
}

return notifier.NewEventNotifier(notifierArgs)
Expand All @@ -52,3 +59,21 @@ func checkInputArgs(args *EventNotifierFactoryArgs) error {

return nil
}

func createBlockCreatorsContainer() (notifier.BlockContainerHandler, error) {
container := block.NewEmptyBlockCreatorsContainer()
err := container.Add(core.ShardHeaderV1, block.NewEmptyHeaderCreator())
if err != nil {
return nil, err
}
err = container.Add(core.ShardHeaderV2, block.NewEmptyHeaderV2Creator())
if err != nil {
return nil, err
}
err = container.Add(core.MetaHeader, block.NewEmptyMetaBlockCreator())
if err != nil {
return nil, err
}

return container, nil
}
10 changes: 2 additions & 8 deletions outport/notifier/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@ import (
"errors"
)

// ErrNilTransactionsPool signals that a nil transactions pool was provided
var ErrNilTransactionsPool = errors.New("nil transactions pool")

// ErrInvalidValue signals that an invalid value has been provided
var ErrInvalidValue = errors.New("invalid value")

Expand All @@ -16,8 +13,5 @@ var ErrNilHTTPClientWrapper = errors.New("nil http client wrapper")
// ErrNilMarshaller signals that a nil marshaller has been provided
var ErrNilMarshaller = errors.New("nil marshaller")

// ErrNilPubKeyConverter signals that a nil pubkey converter has been provided
var ErrNilPubKeyConverter = errors.New("nil pub key converter")

// ErrNilHasher is raised when a valid hasher is expected but nil used
var ErrNilHasher = errors.New("hasher is nil")
// ErrNilBlockContainerHandler signals that a nil block container handler has been provided
var ErrNilBlockContainerHandler = errors.New("nil bock container handler")
32 changes: 24 additions & 8 deletions outport/notifier/eventNotifier.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import (

"github.com/multiversx/mx-chain-core-go/core"
"github.com/multiversx/mx-chain-core-go/core/check"
"github.com/multiversx/mx-chain-core-go/core/unmarshal"
"github.com/multiversx/mx-chain-core-go/data"
"github.com/multiversx/mx-chain-core-go/data/block"
"github.com/multiversx/mx-chain-core-go/data/outport"
"github.com/multiversx/mx-chain-core-go/marshal"
logger "github.com/multiversx/mx-chain-logger-go"
Expand All @@ -29,14 +30,16 @@ type RevertBlock struct {
}

type eventNotifier struct {
httpClient httpClientHandler
marshalizer marshal.Marshalizer
httpClient httpClientHandler
marshalizer marshal.Marshalizer
blockContainer BlockContainerHandler
}

// ArgsEventNotifier defines the arguments needed for event notifier creation
type ArgsEventNotifier struct {
HttpClient httpClientHandler
Marshaller marshal.Marshalizer
HttpClient httpClientHandler
Marshaller marshal.Marshalizer
BlockContainer BlockContainerHandler
}

// NewEventNotifier creates a new instance of the eventNotifier
Expand All @@ -48,8 +51,9 @@ func NewEventNotifier(args ArgsEventNotifier) (*eventNotifier, error) {
}

return &eventNotifier{
httpClient: args.HttpClient,
marshalizer: args.Marshaller,
httpClient: args.HttpClient,
marshalizer: args.Marshaller,
blockContainer: args.BlockContainer,
}, nil
}

Expand All @@ -60,6 +64,9 @@ func checkEventNotifierArgs(args ArgsEventNotifier) error {
if check.IfNil(args.Marshaller) {
return ErrNilMarshaller
}
if check.IfNilReflect(args.BlockContainer) {
return ErrNilBlockContainerHandler
}

return nil
}
Expand All @@ -78,7 +85,7 @@ func (en *eventNotifier) SaveBlock(args *outport.OutportBlock) error {

// RevertIndexedBlock converts revert data in order to be pushed to subscribers
func (en *eventNotifier) RevertIndexedBlock(blockData *outport.BlockData) error {
headerHandler, err := unmarshal.GetHeaderFromBytes(en.marshalizer, core.HeaderType(blockData.HeaderType), blockData.HeaderBytes)
headerHandler, err := en.getHeaderFromBytes(core.HeaderType(blockData.HeaderType), blockData.HeaderBytes)
if err != nil {
return err
}
Expand Down Expand Up @@ -142,3 +149,12 @@ func (en *eventNotifier) IsInterfaceNil() bool {
func (en *eventNotifier) Close() error {
return nil
}

func (en *eventNotifier) getHeaderFromBytes(headerType core.HeaderType, headerBytes []byte) (header data.HeaderHandler, err error) {
creator, err := en.blockContainer.Get(headerType)
if err != nil {
return nil, err
}

return block.GetHeaderFromBytes(en.marshalizer, creator, headerBytes)
}
22 changes: 20 additions & 2 deletions outport/notifier/eventNotifier_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,16 @@ import (
"github.com/multiversx/mx-chain-go/outport/mock"
"github.com/multiversx/mx-chain-go/outport/notifier"
"github.com/multiversx/mx-chain-go/testscommon"
outportStub "github.com/multiversx/mx-chain-go/testscommon/outport"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func createMockEventNotifierArgs() notifier.ArgsEventNotifier {
return notifier.ArgsEventNotifier{
HttpClient: &mock.HTTPClientStub{},
Marshaller: &testscommon.MarshalizerMock{},
HttpClient: &mock.HTTPClientStub{},
Marshaller: &testscommon.MarshalizerMock{},
BlockContainer: &outportStub.BlockContainerStub{},
}
}

Expand Down Expand Up @@ -47,6 +49,17 @@ func TestNewEventNotifier(t *testing.T) {
require.Equal(t, notifier.ErrNilMarshaller, err)
})

t.Run("nil block container", func(t *testing.T) {
t.Parallel()

args := createMockEventNotifierArgs()
args.BlockContainer = nil

en, err := notifier.NewEventNotifier(args)
require.Nil(t, en)
require.Equal(t, notifier.ErrNilBlockContainerHandler, err)
})

t.Run("should work", func(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -123,6 +136,11 @@ func TestRevertIndexedBlock(t *testing.T) {
return nil
},
}
args.BlockContainer = &outportStub.BlockContainerStub{
GetCalled: func(headerType core.HeaderType) (block.EmptyBlockCreator, error) {
return block.NewEmptyHeaderCreator(), nil
},
}

en, _ := notifier.NewEventNotifier(args)

Expand Down
10 changes: 10 additions & 0 deletions outport/notifier/interface.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
package notifier

import (
"github.com/multiversx/mx-chain-core-go/core"
"github.com/multiversx/mx-chain-core-go/data/block"
)

type httpClientHandler interface {
Post(route string, payload interface{}) error
IsInterfaceNil() bool
}

// BlockContainerHandler defines what a block container should be able to do
type BlockContainerHandler interface {
Get(headerType core.HeaderType) (block.EmptyBlockCreator, error)
}
20 changes: 12 additions & 8 deletions outport/process/executionOrder/transactionsExecutionOrder.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ func (s *sorter) getInvalidTxsExecutedInCurrentBlock(scheduledMbsFromPreviousBlo
for _, hash := range mb.TxHashes {
_, found := allScheduledTxs[string(hash)]
if found {
scheduledExecutedInvalidTxsHashesPrevBlock = append(scheduledExecutedInvalidTxsHashesPrevBlock, string(hash))
scheduledExecutedInvalidTxsHashesPrevBlock = append(scheduledExecutedInvalidTxsHashesPrevBlock, hex.EncodeToString(hash))
continue
}
invalidTxHashes = append(invalidTxHashes, hash)
Expand Down Expand Up @@ -249,9 +249,10 @@ func getRewardsTxsFromMe(pool *outport.TransactionPool, blockBody *block.Body, h
func extractTxsFromMap(txsHashes [][]byte, txs map[string]*outport.TxInfo) ([]data.TxWithExecutionOrderHandler, error) {
result := make([]data.TxWithExecutionOrderHandler, 0, len(txsHashes))
for _, txHash := range txsHashes {
tx, found := txs[string(txHash)]
txHashHex := hex.EncodeToString(txHash)
tx, found := txs[txHashHex]
if !found {
return nil, fmt.Errorf("cannot find transaction in pool, txHash: %s", hex.EncodeToString(txHash))
return nil, fmt.Errorf("cannot find transaction in pool, txHash: %s", txHashHex)
}
result = append(result, tx)
}
Expand All @@ -262,9 +263,10 @@ func extractTxsFromMap(txsHashes [][]byte, txs map[string]*outport.TxInfo) ([]da
func extractSCRsFromMap(txsHashes [][]byte, scrs map[string]*outport.SCRInfo) ([]data.TxWithExecutionOrderHandler, error) {
result := make([]data.TxWithExecutionOrderHandler, 0, len(txsHashes))
for _, txHash := range txsHashes {
scr, found := scrs[string(txHash)]
txHashHex := hex.EncodeToString(txHash)
scr, found := scrs[txHashHex]
if !found {
return nil, fmt.Errorf("cannot find scr in pool, txHash: %s", hex.EncodeToString(txHash))
return nil, fmt.Errorf("cannot find scr in pool, txHash: %s", txHashHex)
}
result = append(result, scr)
}
Expand All @@ -275,9 +277,10 @@ func extractSCRsFromMap(txsHashes [][]byte, scrs map[string]*outport.SCRInfo) ([
func extractRewardsFromMap(txsHashes [][]byte, rewards map[string]*outport.RewardInfo) ([]data.TxWithExecutionOrderHandler, error) {
result := make([]data.TxWithExecutionOrderHandler, 0, len(txsHashes))
for _, txHash := range txsHashes {
reward, found := rewards[string(txHash)]
txHashHex := hex.EncodeToString(txHash)
reward, found := rewards[txHashHex]
if !found {
return nil, fmt.Errorf("cannot find reward in pool, txHash: %s", hex.EncodeToString(txHash))
return nil, fmt.Errorf("cannot find reward in pool, txHash: %s", txHashHex)
}
result = append(result, reward)
}
Expand All @@ -299,7 +302,8 @@ func extractExecutedTxHashes(mbIndex int, mbTxHashes [][]byte, header data.Heade

func extractAndPutScrsToDestinationMap(scrsHashes [][]byte, scrsMap map[string]*outport.SCRInfo, destinationMap map[string]data.TxWithExecutionOrderHandler) {
for _, scrHash := range scrsHashes {
scr, found := scrsMap[string(scrHash)]
scrHashHex := hex.EncodeToString(scrHash)
scr, found := scrsMap[scrHashHex]
if !found {
continue
}
Expand Down
Loading

0 comments on commit ee0e9d2

Please sign in to comment.