Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Networking] Refactoring Networking Layer for Improved Structure and Maintainability AND Eliminating Redundant Middleware Component #4664

Merged
merged 116 commits into from
Sep 6, 2023
Merged
Show file tree
Hide file tree
Changes from 99 commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
a796c53
renames a method
yhassanzadeh13 Aug 22, 2023
ae3e9d8
develops open protected stream logic
yhassanzadeh13 Aug 22, 2023
df35fca
migrates the logic of stream creation to libp2p
yhassanzadeh13 Aug 23, 2023
da2085c
replaces send direct in network with open protected stream
yhassanzadeh13 Aug 23, 2023
d88a0b5
wip refactoring middleware tests
yhassanzadeh13 Aug 23, 2023
c20fbeb
adds updatable identity provider to network fixtures
yhassanzadeh13 Aug 24, 2023
6c98e30
wip fixes middleware tests
yhassanzadeh13 Aug 24, 2023
cf81e76
fixes tests echo and ping
yhassanzadeh13 Aug 24, 2023
04d7ec1
fixes all tests in middleware test suite
yhassanzadeh13 Aug 24, 2023
b2fadda
cleans up the overlay from middleware
yhassanzadeh13 Aug 25, 2023
b048e99
moves set violation consumer to midddleware logic
yhassanzadeh13 Aug 28, 2023
182d491
fixes TestNetworkPassesReportedMisbehavior
yhassanzadeh13 Aug 28, 2023
3edcba0
removes set slashing violation consumer off the middleware
yhassanzadeh13 Aug 28, 2023
f1a65b8
fixes TestUnicastAuthorization_EjectedPeer
yhassanzadeh13 Aug 28, 2023
c0b9632
fixes TestUnicastAuthorization_EjectedPeer
yhassanzadeh13 Aug 28, 2023
0dd523f
fixes TestUnicastAuthorization_UnknownMsgCode
yhassanzadeh13 Aug 28, 2023
6dae80a
fixes TestUnicastAuthorization_WrongMsgCode
yhassanzadeh13 Aug 28, 2023
c94c1d9
fixes TestUnicastAuthorization_PublicChannel
yhassanzadeh13 Aug 29, 2023
11aed1e
fixes TestUnicastAuthorization_ReceiverHasNoSubscription
yhassanzadeh13 Aug 29, 2023
0c671c9
fixes TestUnicastAuthorization_PublicChannel
yhassanzadeh13 Aug 29, 2023
40874fa
fixes TestUnicastAuthorization_ReceiverHasSubscription
yhassanzadeh13 Aug 29, 2023
143aec5
cleans up middleware from the unicast authorization tests
yhassanzadeh13 Aug 29, 2023
d0cf848
removes send direct from middleware interface
yhassanzadeh13 Aug 29, 2023
1a906fe
fixes TestConnGater
yhassanzadeh13 Aug 29, 2023
75384e7
wip replacing create stream with open protected stream
yhassanzadeh13 Aug 29, 2023
aee14a6
fixes TestStreamClosing
yhassanzadeh13 Aug 29, 2023
6380b6a
fixes TestCrosstalkPreventionOnNetworkKeyChange
yhassanzadeh13 Aug 29, 2023
9c92615
refactors fixtures with open protected stream
yhassanzadeh13 Aug 29, 2023
e9ae29a
fixes TestFindPeerWithDHT
yhassanzadeh13 Aug 29, 2023
8cd91a2
refactors fixtures with open protected stream
yhassanzadeh13 Aug 29, 2023
3aff329
refactors libp2p stream tests
yhassanzadeh13 Aug 29, 2023
832a23a
fixes TestCreateStream_FallBack
yhassanzadeh13 Aug 29, 2023
78aef2c
fixes TestCreateStreamIsConcurrencySafe
yhassanzadeh13 Aug 29, 2023
f1e09dd
fixes TestNoBackoffWhenCreatingStream
yhassanzadeh13 Aug 29, 2023
1264e92
fixes TestCreateStreamTimeoutWithUnresponsiveNode
yhassanzadeh13 Aug 29, 2023
44f22e6
fixes TestCreateStreamIsConcurrent
yhassanzadeh13 Aug 29, 2023
a8e2547
fixes TestCreateStreamIsConcurrent
yhassanzadeh13 Aug 29, 2023
cf07f4d
fixes TestOneToOneCrosstalkPrevention
yhassanzadeh13 Aug 29, 2023
771c92b
fixes testOneToOneMessagingFails
yhassanzadeh13 Aug 29, 2023
1db8652
removes create stream from libp2p interface
yhassanzadeh13 Aug 29, 2023
37af406
adds ID to libp2p node interface
yhassanzadeh13 Aug 29, 2023
c190fb9
replaces Host().ID() with ID()
yhassanzadeh13 Aug 29, 2023
0ab2088
renames add peer
yhassanzadeh13 Aug 29, 2023
67b5cc4
Merge remote-tracking branch 'origin/master' into yahya/6851-refactor…
yhassanzadeh13 Aug 29, 2023
7b204d0
fixes merge issues
yhassanzadeh13 Aug 29, 2023
374408a
fixes merge issues
yhassanzadeh13 Aug 29, 2023
d8c9149
fixes mocks
yhassanzadeh13 Aug 29, 2023
24c7c32
fixes tests
yhassanzadeh13 Aug 29, 2023
c5a1ce2
lint fix
yhassanzadeh13 Aug 29, 2023
e8b0e7b
lint fix
yhassanzadeh13 Aug 29, 2023
f2e8d4e
fixes tests issues
yhassanzadeh13 Aug 29, 2023
cd3aeb7
fixes a test
yhassanzadeh13 Aug 29, 2023
71d0f66
fixes lint issues
yhassanzadeh13 Aug 29, 2023
0c5b76f
fixes lint issue
yhassanzadeh13 Aug 29, 2023
0df643c
fixes lint issues
yhassanzadeh13 Aug 29, 2023
7b05d17
fixes middleware tests
yhassanzadeh13 Aug 30, 2023
d1bdd4f
Revert "fixes middleware tests"
yhassanzadeh13 Aug 30, 2023
141ccb8
moves read subscription to a separate package
yhassanzadeh13 Aug 30, 2023
20abebf
merges middleware with network
yhassanzadeh13 Aug 30, 2023
c64ba46
wires in the network parameters
yhassanzadeh13 Aug 30, 2023
5db1406
removes middleware factory from observer builder
yhassanzadeh13 Aug 30, 2023
4f1916f
refactors all builders with new network
yhassanzadeh13 Aug 30, 2023
b9d3c37
moves network to p2pnet
yhassanzadeh13 Aug 30, 2023
26631ad
fixes all manager tests
yhassanzadeh13 Aug 30, 2023
a962b70
wip
yhassanzadeh13 Aug 30, 2023
cf577b6
fixes TestUnicastRateLimit_Messages
yhassanzadeh13 Aug 30, 2023
2b82487
fixes build issue with access node
yhassanzadeh13 Aug 31, 2023
e1dd46c
re-generates mocks
yhassanzadeh13 Aug 31, 2023
8abea8b
fixes all middleware tests
yhassanzadeh13 Aug 31, 2023
c4f4e4d
fixes BlobServiceTestSuite
yhassanzadeh13 Aug 31, 2023
d64cdeb
fixes all mesh engine tests
yhassanzadeh13 Aug 31, 2023
36f203f
fixes all echo engine tests
yhassanzadeh13 Aug 31, 2023
7a71ed6
fixes all unicast authorization tests
yhassanzadeh13 Aug 31, 2023
5584d0d
deletes middleware package entirely
yhassanzadeh13 Aug 31, 2023
4b1d2cc
lint fix
yhassanzadeh13 Aug 31, 2023
bbde45e
removes middleware keyword
yhassanzadeh13 Aug 31, 2023
f283a97
Merge remote-tracking branch 'origin/master' into yahya/6851-refactor…
yhassanzadeh13 Aug 31, 2023
74d7e84
fixes merge errors
yhassanzadeh13 Aug 31, 2023
2d1cc37
Merge remote-tracking branch 'origin/master' into yahya/6851-refactor…
yhassanzadeh13 Aug 31, 2023
49b6587
fixes the exposable lock with network
yhassanzadeh13 Aug 31, 2023
1f2840e
refactors all slashing violation consumers
yhassanzadeh13 Aug 31, 2023
34dcfc0
fixes TestCreateStream_WithDefaultUnicast
yhassanzadeh13 Aug 31, 2023
5fc0cc3
fixes panic in observer
yhassanzadeh13 Aug 31, 2023
b265179
changes middleware interface to be ready-done-aware instead of a comp…
yhassanzadeh13 Aug 31, 2023
41d4a46
temp; experimentally removing the skipped tests
yhassanzadeh13 Aug 31, 2023
4ee5bd4
Revert "temp; experimentally removing the skipped tests"
yhassanzadeh13 Aug 31, 2023
000c041
Merge branch 'master' into yahya/6851-refactoring-middleware-part-2
yhassanzadeh13 Sep 1, 2023
fdee525
Merge branch 'master' into yahya/6851-refactoring-middleware-part-2
yhassanzadeh13 Sep 1, 2023
3272ab6
Merge branch 'master' into yahya/6851-refactoring-middleware-part-2
yhassanzadeh13 Sep 1, 2023
055c10e
Merge branch 'master' into yahya/6851-refactoring-middleware-part-2
yhassanzadeh13 Sep 1, 2023
54c3f55
removes capturing loop variable from test utils
yhassanzadeh13 Sep 5, 2023
6f28106
Update network/test/network_test.go
yhassanzadeh13 Sep 5, 2023
3dd4578
removes dead comment
yhassanzadeh13 Sep 5, 2023
80668e0
Merge remote-tracking branch 'origin/yahya/6851-refactoring-middlewar…
yhassanzadeh13 Sep 5, 2023
6a1e097
Update network/test/network_test.go
yhassanzadeh13 Sep 5, 2023
24e2b24
ports in the missing parts from master
yhassanzadeh13 Sep 5, 2023
d287a92
Merge remote-tracking branch 'origin/yahya/6851-refactoring-middlewar…
yhassanzadeh13 Sep 5, 2023
352e982
Merge branch 'master' into yahya/6851-refactoring-middleware-part-2
yhassanzadeh13 Sep 5, 2023
8d40d75
Merge branch 'master' into yahya/6851-refactoring-middleware-part-2
yhassanzadeh13 Sep 5, 2023
4bdfa46
Update network/internal/p2pfixtures/fixtures.go
yhassanzadeh13 Sep 6, 2023
7787ca1
Merge branch 'master' into yahya/6851-refactoring-middleware-part-2
yhassanzadeh13 Sep 6, 2023
5a047eb
Update network/p2p/p2pnode/libp2pNode.go
yhassanzadeh13 Sep 6, 2023
5b90375
Merge remote-tracking branch 'origin/master' into yahya/6851-refactor…
yhassanzadeh13 Sep 6, 2023
04e8919
re-generates mocks
yhassanzadeh13 Sep 6, 2023
6eb91a9
moves read subscription to the internal package
yhassanzadeh13 Sep 6, 2023
24cbe58
renames network to engine registry
yhassanzadeh13 Sep 6, 2023
3bcada5
renames
yhassanzadeh13 Sep 6, 2023
c9e10ee
renames adapter to conduit adapter
yhassanzadeh13 Sep 6, 2023
6c01ff5
cleans up middleware and dead codes
yhassanzadeh13 Sep 6, 2023
dbc13f5
Update network/alsp/manager/manager.go
yhassanzadeh13 Sep 6, 2023
717f854
updates documentation of network
yhassanzadeh13 Sep 6, 2023
721e3ad
Merge remote-tracking branch 'origin/yahya/6851-refactoring-middlewar…
yhassanzadeh13 Sep 6, 2023
eb615ba
renames UnderlayNetwork to NetworkUnderlay
yhassanzadeh13 Sep 6, 2023
740673c
Merge branch 'master' into yahya/6851-refactoring-middleware-part-2
yhassanzadeh13 Sep 6, 2023
a662694
renames connect to peer method
yhassanzadeh13 Sep 6, 2023
5c7a8d2
renames middleware to network underlay
yhassanzadeh13 Sep 6, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 33 additions & 73 deletions cmd/access/node_builder/access_node_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,15 @@ import (
"github.com/onflow/flow-go/network/p2p/conduit"
"github.com/onflow/flow-go/network/p2p/connection"
"github.com/onflow/flow-go/network/p2p/dht"
"github.com/onflow/flow-go/network/p2p/middleware"
"github.com/onflow/flow-go/network/p2p/p2pbuilder"
p2pconfig "github.com/onflow/flow-go/network/p2p/p2pbuilder/config"
"github.com/onflow/flow-go/network/p2p/p2pnet"
"github.com/onflow/flow-go/network/p2p/subscription"
"github.com/onflow/flow-go/network/p2p/tracer"
"github.com/onflow/flow-go/network/p2p/translator"
"github.com/onflow/flow-go/network/p2p/unicast/protocols"
relaynet "github.com/onflow/flow-go/network/relay"
"github.com/onflow/flow-go/network/slashing"
"github.com/onflow/flow-go/network/topology"
"github.com/onflow/flow-go/network/validator"
"github.com/onflow/flow-go/state/protocol"
Expand Down Expand Up @@ -791,46 +792,6 @@ func (builder *FlowAccessNodeBuilder) extraFlags() {
})
}

// initNetwork creates the network.Network implementation with the given metrics, middleware, initial list of network
// participants and topology used to choose peers from the list of participants. The list of participants can later be
// updated by calling network.SetIDs.
func (builder *FlowAccessNodeBuilder) initNetwork(nodeID module.Local,
networkMetrics module.NetworkCoreMetrics,
middleware network.Middleware,
topology network.Topology,
receiveCache *netcache.ReceiveCache,
) (*p2p.Network, error) {
// creates network instance
net, err := p2p.NewNetwork(&p2p.NetworkConfig{
Logger: builder.Logger,
Codec: cborcodec.NewCodec(),
Me: nodeID,
MiddlewareFactory: func() (network.Middleware, error) { return builder.Middleware, nil },
Topology: topology,
SubscriptionManager: subscription.NewChannelSubscriptionManager(middleware),
Metrics: networkMetrics,
IdentityProvider: builder.IdentityProvider,
ReceiveCache: receiveCache,
ConduitFactory: conduit.NewDefaultConduitFactory(),
SporkId: builder.SporkID,
AlspCfg: &alspmgr.MisbehaviorReportManagerConfig{
Logger: builder.Logger,
SpamRecordCacheSize: builder.FlowConfig.NetworkConfig.AlspConfig.SpamRecordCacheSize,
SpamReportQueueSize: builder.FlowConfig.NetworkConfig.AlspConfig.SpamReportQueueSize,
DisablePenalty: builder.FlowConfig.NetworkConfig.AlspConfig.DisablePenalty,
HeartBeatInterval: builder.FlowConfig.NetworkConfig.AlspConfig.HearBeatInterval,
AlspMetrics: builder.Metrics.Network,
NetworkType: network.PublicNetwork,
HeroCacheMetricsFactory: builder.HeroCacheMetricsFactory(),
},
})
if err != nil {
return nil, fmt.Errorf("could not initialize network: %w", err)
}

return net, nil
}

func publicNetworkMsgValidators(log zerolog.Logger, idProvider module.IdentityProvider, selfID flow.Identifier) []network.MessageValidator {
return []network.MessageValidator{
// filter out messages sent by this node itself
Expand Down Expand Up @@ -876,7 +837,7 @@ func (builder *FlowAccessNodeBuilder) InitIDProviders() {
filter.And(
filter.HasRole(flow.RoleConsensus),
filter.Not(filter.HasNodeID(node.Me.NodeID())),
p2p.NotEjectedFilter,
p2pnet.NotEjectedFilter,
),
builder.IdentityProvider,
)
Expand Down Expand Up @@ -1284,11 +1245,6 @@ func (builder *FlowAccessNodeBuilder) enqueuePublicNetworkInit() {
}).
Component("public network", func(node *cmd.NodeConfig) (module.ReadyDoneAware, error) {
msgValidators := publicNetworkMsgValidators(node.Logger.With().Bool("public", true).Logger(), node.IdentityProvider, builder.NodeID)

middleware := builder.initMiddleware(builder.NodeID, builder.PublicNetworkConfig.Metrics, publicLibp2pNode, msgValidators...)

// topology returns empty list since peers are not known upfront
top := topology.EmptyTopology{}
receiveCache := netcache.NewHeroReceiveCache(builder.FlowConfig.NetworkConfig.NetworkReceivedMessageCacheSize,
builder.Logger,
metrics.NetworkReceiveCacheMetricsFactory(builder.HeroCacheMetricsFactory(), network.PublicNetwork))
Expand All @@ -1298,11 +1254,39 @@ func (builder *FlowAccessNodeBuilder) enqueuePublicNetworkInit() {
return nil, fmt.Errorf("could not register networking receive cache metric: %w", err)
}

net, err := builder.initNetwork(builder.Me, builder.PublicNetworkConfig.Metrics, middleware, top, receiveCache)
net, err := p2pnet.NewNetwork(&p2pnet.NetworkConfig{
Logger: builder.Logger.With().Str("module", "public-network").Logger(),
Libp2pNode: publicLibp2pNode,
Codec: cborcodec.NewCodec(),
Me: builder.Me,
Topology: topology.EmptyTopology{}, // topology returns empty list since peers are not known upfront
Metrics: builder.PublicNetworkConfig.Metrics,
BitSwapMetrics: builder.Metrics.Bitswap,
IdentityProvider: builder.IdentityProvider,
ReceiveCache: receiveCache,
ConduitFactory: conduit.NewDefaultConduitFactory(),
SporkId: builder.SporkID,
UnicastMessageTimeout: p2pnet.DefaultUnicastTimeout,
IdentityTranslator: builder.IDTranslator,
AlspCfg: &alspmgr.MisbehaviorReportManagerConfig{
Logger: builder.Logger,
SpamRecordCacheSize: builder.FlowConfig.NetworkConfig.AlspConfig.SpamRecordCacheSize,
SpamReportQueueSize: builder.FlowConfig.NetworkConfig.AlspConfig.SpamReportQueueSize,
DisablePenalty: builder.FlowConfig.NetworkConfig.AlspConfig.DisablePenalty,
HeartBeatInterval: builder.FlowConfig.NetworkConfig.AlspConfig.HearBeatInterval,
AlspMetrics: builder.Metrics.Network,
NetworkType: network.PublicNetwork,
HeroCacheMetricsFactory: builder.HeroCacheMetricsFactory(),
},
SlashingViolationConsumerFactory: func(adapter network.Adapter) network.ViolationsConsumer {
return slashing.NewSlashingViolationsConsumer(builder.Logger, builder.Metrics.Network, adapter)
},
}, p2pnet.WithMessageValidators(msgValidators...))
if err != nil {
return nil, err
return nil, fmt.Errorf("could not initialize network: %w", err)
}

builder.Middleware = net
builder.AccessNodeConfig.PublicNetworkConfig.Network = net

node.Logger.Info().Msgf("network will run on address: %s", builder.PublicNetworkConfig.BindAddress)
Expand Down Expand Up @@ -1402,27 +1386,3 @@ func (builder *FlowAccessNodeBuilder) initPublicLibp2pNode(networkKey crypto.Pri

return libp2pNode, nil
}

// initMiddleware creates the network.Middleware implementation with the libp2p factory function, metrics, peer update
// interval, and validators. The network.Middleware is then passed into the initNetwork function.
func (builder *FlowAccessNodeBuilder) initMiddleware(nodeID flow.Identifier,
networkMetrics module.NetworkSecurityMetrics,
libp2pNode p2p.LibP2PNode,
validators ...network.MessageValidator,
) network.Middleware {
logger := builder.Logger.With().Bool("staked", false).Logger()
mw := middleware.NewMiddleware(&middleware.Config{
Logger: logger,
Libp2pNode: libp2pNode,
FlowId: nodeID,
BitSwapMetrics: builder.Metrics.Bitswap,
SporkId: builder.SporkID,
UnicastMessageTimeout: middleware.DefaultUnicastTimeout,
IdTranslator: builder.IDTranslator,
Codec: builder.CodecFactory(),
},
middleware.WithMessageValidators(validators...), // use default identifier provider
)
builder.Middleware = mw
return builder.Middleware
}
2 changes: 1 addition & 1 deletion cmd/node_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,8 @@ type NodeConfig struct {
ProtocolEvents *events.Distributor
State protocol.State
Resolver madns.BasicResolver
Middleware network.Middleware
Network network.Network
Middleware network.Middleware
ConduitFactory network.ConduitFactory
PingService network.PingService
MsgValidators []network.MessageValidator
Expand Down
102 changes: 32 additions & 70 deletions cmd/observer/node_builder/observer_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,21 +52,21 @@ import (
alspmgr "github.com/onflow/flow-go/network/alsp/manager"
netcache "github.com/onflow/flow-go/network/cache"
"github.com/onflow/flow-go/network/channels"
cborcodec "github.com/onflow/flow-go/network/codec/cbor"
"github.com/onflow/flow-go/network/converter"
"github.com/onflow/flow-go/network/p2p"
"github.com/onflow/flow-go/network/p2p/cache"
"github.com/onflow/flow-go/network/p2p/conduit"
p2pdht "github.com/onflow/flow-go/network/p2p/dht"
"github.com/onflow/flow-go/network/p2p/keyutils"
"github.com/onflow/flow-go/network/p2p/middleware"
"github.com/onflow/flow-go/network/p2p/p2pbuilder"
p2pconfig "github.com/onflow/flow-go/network/p2p/p2pbuilder/config"
"github.com/onflow/flow-go/network/p2p/p2pnet"
"github.com/onflow/flow-go/network/p2p/subscription"
"github.com/onflow/flow-go/network/p2p/tracer"
"github.com/onflow/flow-go/network/p2p/translator"
"github.com/onflow/flow-go/network/p2p/unicast/protocols"
"github.com/onflow/flow-go/network/p2p/utils"
"github.com/onflow/flow-go/network/slashing"
"github.com/onflow/flow-go/network/validator"
stateprotocol "github.com/onflow/flow-go/state/protocol"
badgerState "github.com/onflow/flow-go/state/protocol/badger"
Expand Down Expand Up @@ -483,45 +483,6 @@ func (builder *ObserverServiceBuilder) extraFlags() {
})
}

// initNetwork creates the network.Network implementation with the given metrics, middleware, initial list of network
// participants and topology used to choose peers from the list of participants. The list of participants can later be
// updated by calling network.SetIDs.
func (builder *ObserverServiceBuilder) initNetwork(nodeID module.Local,
networkMetrics module.NetworkCoreMetrics,
middleware network.Middleware,
topology network.Topology,
receiveCache *netcache.ReceiveCache,
) (*p2p.Network, error) {
net, err := p2p.NewNetwork(&p2p.NetworkConfig{
Logger: builder.Logger,
Codec: cborcodec.NewCodec(),
Me: nodeID,
MiddlewareFactory: func() (network.Middleware, error) { return builder.Middleware, nil },
Topology: topology,
SubscriptionManager: subscription.NewChannelSubscriptionManager(middleware),
Metrics: networkMetrics,
IdentityProvider: builder.IdentityProvider,
ReceiveCache: receiveCache,
ConduitFactory: conduit.NewDefaultConduitFactory(),
SporkId: builder.SporkID,
AlspCfg: &alspmgr.MisbehaviorReportManagerConfig{
Logger: builder.Logger,
SpamRecordCacheSize: builder.FlowConfig.NetworkConfig.AlspConfig.SpamRecordCacheSize,
SpamReportQueueSize: builder.FlowConfig.NetworkConfig.AlspConfig.SpamReportQueueSize,
DisablePenalty: builder.FlowConfig.NetworkConfig.AlspConfig.DisablePenalty,
HeartBeatInterval: builder.FlowConfig.NetworkConfig.AlspConfig.HearBeatInterval,
AlspMetrics: builder.Metrics.Network,
HeroCacheMetricsFactory: builder.HeroCacheMetricsFactory(),
NetworkType: network.PublicNetwork,
},
})
if err != nil {
return nil, fmt.Errorf("could not initialize network: %w", err)
}

return net, nil
}

func publicNetworkMsgValidators(log zerolog.Logger, idProvider module.IdentityProvider, selfID flow.Identifier) []network.MessageValidator {
return []network.MessageValidator{
// filter out messages sent by this node itself
Expand Down Expand Up @@ -839,16 +800,39 @@ func (builder *ObserverServiceBuilder) enqueuePublicNetworkInit() {
return nil, fmt.Errorf("could not register networking receive cache metric: %w", err)
}

msgValidators := publicNetworkMsgValidators(node.Logger, node.IdentityProvider, node.NodeID)

builder.initMiddleware(node.NodeID, publicLibp2pNode, msgValidators...)

// topology is nil since it is automatically managed by libp2p
net, err := builder.initNetwork(builder.Me, builder.Metrics.Network, builder.Middleware, nil, receiveCache)
net, err := p2pnet.NewNetwork(&p2pnet.NetworkConfig{
Copy link
Contributor

@gomisha gomisha Sep 6, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
net, err := p2pnet.NewNetwork(&p2pnet.NetworkConfig{
net, err := p2pnet.NewEngineNetwork(&p2pnet.EngineNetworkConfig{

Copy link
Contributor Author

@yhassanzadeh13 yhassanzadeh13 Sep 6, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The network serves as a comprehensive layer that integrates three interfaces within Flow. Renaming it as NewNetworkEngine would misrepresent its function, implying it's merely an engine component rather than an all-encompassing networking layer: 717f854

Logger: builder.Logger.With().Str("component", "public-network").Logger(),
Codec: builder.CodecFactory(),
Me: builder.Me,
Topology: nil, // topology is nil since it is managed by libp2p; //TODO: can we set empty topology?
Libp2pNode: publicLibp2pNode,
Metrics: builder.Metrics.Network,
BitSwapMetrics: builder.Metrics.Bitswap,
IdentityProvider: builder.IdentityProvider,
ReceiveCache: receiveCache,
ConduitFactory: conduit.NewDefaultConduitFactory(),
SporkId: builder.SporkID,
UnicastMessageTimeout: p2pnet.DefaultUnicastTimeout,
IdentityTranslator: builder.IDTranslator,
AlspCfg: &alspmgr.MisbehaviorReportManagerConfig{
Logger: builder.Logger,
SpamRecordCacheSize: builder.FlowConfig.NetworkConfig.AlspConfig.SpamRecordCacheSize,
SpamReportQueueSize: builder.FlowConfig.NetworkConfig.AlspConfig.SpamReportQueueSize,
DisablePenalty: builder.FlowConfig.NetworkConfig.AlspConfig.DisablePenalty,
HeartBeatInterval: builder.FlowConfig.NetworkConfig.AlspConfig.HearBeatInterval,
AlspMetrics: builder.Metrics.Network,
HeroCacheMetricsFactory: builder.HeroCacheMetricsFactory(),
NetworkType: network.PublicNetwork,
},
SlashingViolationConsumerFactory: func(adapter network.Adapter) network.ViolationsConsumer {
return slashing.NewSlashingViolationsConsumer(builder.Logger, builder.Metrics.Network, adapter)
},
}, p2pnet.WithMessageValidators(publicNetworkMsgValidators(node.Logger, node.IdentityProvider, node.NodeID)...))
if err != nil {
return nil, err
return nil, fmt.Errorf("could not initialize network: %w", err)
}

builder.Middleware = net
builder.Network = converter.NewNetwork(net, channels.SyncCommittee, channels.PublicSyncCommittee)

builder.Logger.Info().Msgf("network will run on address: %s", builder.BindAddr)
Expand Down Expand Up @@ -1032,28 +1016,6 @@ func (builder *ObserverServiceBuilder) enqueueRPCServer() {
})
}

// initMiddleware creates the network.Middleware implementation with the libp2p factory function, metrics, peer update
// interval, and validators. The network.Middleware is then passed into the initNetwork function.
func (builder *ObserverServiceBuilder) initMiddleware(nodeID flow.Identifier,
libp2pNode p2p.LibP2PNode,
validators ...network.MessageValidator,
) network.Middleware {
mw := middleware.NewMiddleware(&middleware.Config{
Logger: builder.Logger,
Libp2pNode: libp2pNode,
FlowId: nodeID,
BitSwapMetrics: builder.Metrics.Bitswap,
SporkId: builder.SporkID,
UnicastMessageTimeout: middleware.DefaultUnicastTimeout,
IdTranslator: builder.IDTranslator,
Codec: builder.CodecFactory(),
},
middleware.WithMessageValidators(validators...), // use default identifier provider
)
builder.Middleware = mw
return builder.Middleware
}

func loadNetworkingKey(path string) (crypto.PrivateKey, error) {
data, err := io.ReadFile(path)
if err != nil {
Expand Down
Loading
Loading