diff --git a/p2p/config/config.go b/p2p/config/config.go index 69f37aa..5d64dbd 100644 --- a/p2p/config/config.go +++ b/p2p/config/config.go @@ -5,6 +5,15 @@ type P2PConfig struct { Node NodeConfig KadDhtPeerDiscovery KadDhtPeerDiscoveryConfig Sharding ShardingConfig + Gossip GossipConfig +} + +// GossipConfig holds the configuration for the gossip peering +type GossipConfig struct { + UseDefaultConfig bool + OptimalPeersNum int + MinimumPeersNum int + MaximumPeersNum int } // NodeConfig will hold basic p2p settings diff --git a/p2p/integrationTests/peerConnections/peerConnections_test.go b/p2p/integrationTests/peerConnections/peerConnections_test.go index 5e53551..7589057 100644 --- a/p2p/integrationTests/peerConnections/peerConnections_test.go +++ b/p2p/integrationTests/peerConnections/peerConnections_test.go @@ -44,6 +44,9 @@ func createBaseArgs() libp2p.ArgsNetworkMessenger { Sharding: config.ShardingConfig{ Type: p2p.NilListSharder, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, }, SyncTimer: &mock.SyncTimerStub{}, PreferredPeersHolder: &mock.PeersHolderStub{}, @@ -81,6 +84,9 @@ func createBaseArgsForTCPWithKey(key crypto.PrivateKey) libp2p.ArgsNetworkMessen Sharding: config.ShardingConfig{ Type: p2p.NilListSharder, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, }, SyncTimer: &mock.SyncTimerStub{}, PreferredPeersHolder: &mock.PeersHolderStub{}, diff --git a/p2p/integrationTests/peerDisconnecting/peerDisconnecting_test.go b/p2p/integrationTests/peerDisconnecting/peerDisconnecting_test.go index dbcf8a9..5429f3d 100644 --- a/p2p/integrationTests/peerDisconnecting/peerDisconnecting_test.go +++ b/p2p/integrationTests/peerDisconnecting/peerDisconnecting_test.go @@ -37,6 +37,9 @@ func createDefaultConfig() config.P2PConfig { InitialPeerList: nil, BucketSize: 100, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, } } diff --git a/p2p/integrationTests/testCommon.go b/p2p/integrationTests/testCommon.go index c2cc694..adb61bc 100644 --- a/p2p/integrationTests/testCommon.go +++ b/p2p/integrationTests/testCommon.go @@ -47,6 +47,9 @@ func createP2PConfig(initialPeerList []string) config.P2PConfig { Sharding: config.ShardingConfig{ Type: p2p.NilListSharder, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, } } @@ -181,6 +184,9 @@ func createP2PConfigWithNoDiscovery() config.P2PConfig { Sharding: config.ShardingConfig{ Type: p2p.NilListSharder, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, } } diff --git a/p2p/libp2p/goroutines/goroutines_test.go b/p2p/libp2p/goroutines/goroutines_test.go index 5eb4479..e9f7c2d 100644 --- a/p2p/libp2p/goroutines/goroutines_test.go +++ b/p2p/libp2p/goroutines/goroutines_test.go @@ -53,6 +53,9 @@ func createDefaultConfig() config.P2PConfig { InitialPeerList: nil, BucketSize: 100, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, } } diff --git a/p2p/libp2p/issues_test.go b/p2p/libp2p/issues_test.go index 59da7ad..e025501 100644 --- a/p2p/libp2p/issues_test.go +++ b/p2p/libp2p/issues_test.go @@ -34,6 +34,9 @@ func createMessenger() p2p.Messenger { Sharding: config.ShardingConfig{ Type: p2p.NilListSharder, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, }, SyncTimer: &libp2p.LocalSyncTimer{}, PreferredPeersHolder: &mock.PeersHolderStub{}, diff --git a/p2p/libp2p/netMessenger.go b/p2p/libp2p/netMessenger.go index 703798e..43a4cf2 100644 --- a/p2p/libp2p/netMessenger.go +++ b/p2p/libp2p/netMessenger.go @@ -331,7 +331,7 @@ func addComponentsToNode( peersRatingHandler := args.PeersRatingHandler marshaller := args.Marshaller - pubSub, err := p2pNode.createPubSub(messageSigning) + pubSub, err := p2pNode.createPubSub(messageSigning, args.P2pConfig.Gossip) if err != nil { return err } @@ -431,7 +431,10 @@ func (netMes *networkMessenger) validateSeeders(seeders []string) error { return nil } -func (netMes *networkMessenger) createPubSub(messageSigning messageSigningConfig) (PubSub, error) { +func (netMes *networkMessenger) createPubSub( + messageSigning messageSigningConfig, + gossipConfig config.GossipConfig, +) (PubSub, error) { optsPS := make([]pubsub.Option, 0) if messageSigning == withoutMessageSigning { netMes.log.Warn("signature verification is turned off in network messenger instance. NOT recommended in production environment") @@ -439,6 +442,19 @@ func (netMes *networkMessenger) createPubSub(messageSigning messageSigningConfig } optsPS = append(optsPS, pubsub.WithMaxMessageSize(pubSubMaxMessageSize)) + gossipSubParams := pubsub.DefaultGossipSubParams() + if !gossipConfig.UseDefaultConfig { + netMes.log.Warn("node is not running with the default gossip parameters", + "D", gossipConfig.OptimalPeersNum, + "Dhi", gossipConfig.MaximumPeersNum, + "Dlo", gossipConfig.MinimumPeersNum) + + gossipSubParams.D = gossipConfig.OptimalPeersNum + gossipSubParams.Dhi = gossipConfig.MaximumPeersNum + gossipSubParams.Dlo = gossipConfig.MinimumPeersNum + } + + optsPS = append(optsPS, pubsub.WithGossipSubParams(gossipSubParams)) return pubsub.NewGossipSub(netMes.ctx, netMes.p2pHost, optsPS...) } diff --git a/p2p/libp2p/netMessenger_test.go b/p2p/libp2p/netMessenger_test.go index 6d300dc..78bd014 100644 --- a/p2p/libp2p/netMessenger_test.go +++ b/p2p/libp2p/netMessenger_test.go @@ -133,6 +133,9 @@ func createMockNetworkArgs() libp2p.ArgsNetworkMessenger { Sharding: config.ShardingConfig{ Type: p2p.NilListSharder, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, }, SyncTimer: &libp2p.LocalSyncTimer{}, PreferredPeersHolder: &mock.PeersHolderStub{}, @@ -1132,6 +1135,9 @@ func TestLibp2pMessenger_SendDirectWithRealMessengersShouldWork(t *testing.T) { Sharding: config.ShardingConfig{ Type: p2p.NilListSharder, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, }, SyncTimer: &libp2p.LocalSyncTimer{}, PreferredPeersHolder: &mock.PeersHolderStub{}, @@ -1208,6 +1214,9 @@ func TestLibp2pMessenger_SendDirectWithRealMessengersWithoutSignatureShouldWork( Sharding: config.ShardingConfig{ Type: p2p.NilListSharder, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, }, SyncTimer: &libp2p.LocalSyncTimer{}, PreferredPeersHolder: &mock.PeersHolderStub{}, @@ -1449,6 +1458,9 @@ func TestNetworkMessenger_PreventReprocessingShouldWork(t *testing.T) { Sharding: config.ShardingConfig{ Type: p2p.NilListSharder, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, }, SyncTimer: &libp2p.LocalSyncTimer{}, PreferredPeersHolder: &mock.PeersHolderStub{}, @@ -1519,6 +1531,9 @@ func TestNetworkMessenger_PubsubCallbackNotMessageNotValidShouldNotCallHandler(t Sharding: config.ShardingConfig{ Type: p2p.NilListSharder, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, }, SyncTimer: &libp2p.LocalSyncTimer{}, PreferredPeersHolder: &mock.PeersHolderStub{}, @@ -1597,6 +1612,9 @@ func TestNetworkMessenger_PubsubCallbackReturnsFalseIfHandlerErrors(t *testing.T Sharding: config.ShardingConfig{ Type: p2p.NilListSharder, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, }, SyncTimer: &libp2p.LocalSyncTimer{}, PreferredPeersHolder: &mock.PeersHolderStub{}, @@ -1664,6 +1682,9 @@ func TestNetworkMessenger_UnJoinAllTopicsShouldWork(t *testing.T) { Sharding: config.ShardingConfig{ Type: p2p.NilListSharder, }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, }, SyncTimer: &libp2p.LocalSyncTimer{}, PreferredPeersHolder: &mock.PeersHolderStub{}, @@ -1889,6 +1910,9 @@ func TestNetworkMessenger_Bootstrap(t *testing.T) { MaxSeeders: 0, Type: "NilListSharder", }, + Gossip: config.GossipConfig{ + UseDefaultConfig: true, + }, }, SyncTimer: &mock.SyncTimerStub{}, PeersRatingHandler: &mock.PeersRatingHandlerStub{},