mirror of https://github.com/status-im/go-waku.git
chore: add artificial delay to peer-exchange (#1038)
This commit is contained in:
parent
d65a836bb6
commit
0bdd3590f7
|
@ -317,24 +317,7 @@ func (d *DiscoveryV5) Iterate(ctx context.Context, iterator enode.Iterator, onNo
|
||||||
defer iterator.Close()
|
defer iterator.Close()
|
||||||
|
|
||||||
peerCnt := 0
|
peerCnt := 0
|
||||||
for {
|
for DelayedHasNext(ctx, iterator, &peerCnt) {
|
||||||
|
|
||||||
if !delayedHasNext(ctx, iterator) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
peerCnt++
|
|
||||||
if peerCnt == bucketSize { // Delay every bucketSize peers discovered
|
|
||||||
peerCnt = 0
|
|
||||||
t := time.NewTimer(delayBetweenDiscoveredPeerCnt)
|
|
||||||
select {
|
|
||||||
case <-ctx.Done():
|
|
||||||
return
|
|
||||||
case <-t.C:
|
|
||||||
t.Stop()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_, addresses, err := wenr.Multiaddress(iterator.Node())
|
_, addresses, err := wenr.Multiaddress(iterator.Node())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.metrics.RecordError(peerInfoFailure)
|
d.metrics.RecordError(peerInfoFailure)
|
||||||
|
@ -364,7 +347,7 @@ func (d *DiscoveryV5) Iterate(ctx context.Context, iterator enode.Iterator, onNo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func delayedHasNext(ctx context.Context, iterator enode.Iterator) bool {
|
func DelayedHasNext(ctx context.Context, iterator enode.Iterator, peerCnt *int) bool {
|
||||||
// Delay if .Next() is too fast
|
// Delay if .Next() is too fast
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
hasNext := iterator.Next()
|
hasNext := iterator.Next()
|
||||||
|
@ -383,6 +366,18 @@ func delayedHasNext(ctx context.Context, iterator enode.Iterator) bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*peerCnt++
|
||||||
|
if *peerCnt == bucketSize { // Delay every bucketSize peers discovered
|
||||||
|
*peerCnt = 0
|
||||||
|
t := time.NewTimer(delayBetweenDiscoveredPeerCnt)
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
return false
|
||||||
|
case <-t.C:
|
||||||
|
t.Stop()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -144,7 +144,8 @@ func (wakuPX *WakuPeerExchange) iterate(ctx context.Context) error {
|
||||||
// Closing iterator
|
// Closing iterator
|
||||||
defer iterator.Close()
|
defer iterator.Close()
|
||||||
|
|
||||||
for iterator.Next() {
|
peerCnt := 0
|
||||||
|
for discv5.DelayedHasNext(ctx, iterator, &peerCnt) {
|
||||||
_, addresses, err := enr.Multiaddress(iterator.Node())
|
_, addresses, err := enr.Multiaddress(iterator.Node())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wakuPX.log.Error("extracting multiaddrs from enr", zap.Error(err))
|
wakuPX.log.Error("extracting multiaddrs from enr", zap.Error(err))
|
||||||
|
@ -183,12 +184,15 @@ func (wakuPX *WakuPeerExchange) runPeerExchangeDiscv5Loop(ctx context.Context) {
|
||||||
err := wakuPX.iterate(ctx)
|
err := wakuPX.iterate(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wakuPX.log.Debug("iterating peer exchange", zap.Error(err))
|
wakuPX.log.Debug("iterating peer exchange", zap.Error(err))
|
||||||
time.Sleep(2 * time.Second)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t := time.NewTimer(5 * time.Second)
|
||||||
select {
|
select {
|
||||||
|
case <-t.C:
|
||||||
|
t.Stop()
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
|
t.Stop()
|
||||||
return
|
return
|
||||||
default:
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,8 +57,6 @@ func TestRetrieveProvidePeerExchangePeers(t *testing.T) {
|
||||||
err = d2.Start(context.Background())
|
err = d2.Start(context.Background())
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
time.Sleep(3 * time.Second) // Wait some time for peers to be discovered
|
|
||||||
|
|
||||||
// mount peer exchange
|
// mount peer exchange
|
||||||
pxPeerConn1 := discv5.NewTestPeerDiscoverer()
|
pxPeerConn1 := discv5.NewTestPeerDiscoverer()
|
||||||
px1, err := NewWakuPeerExchange(d1, pxPeerConn1, nil, prometheus.DefaultRegisterer, utils.Logger())
|
px1, err := NewWakuPeerExchange(d1, pxPeerConn1, nil, prometheus.DefaultRegisterer, utils.Logger())
|
||||||
|
@ -80,6 +78,8 @@ func TestRetrieveProvidePeerExchangePeers(t *testing.T) {
|
||||||
err = host3.Peerstore().AddProtocols(host1.ID(), PeerExchangeID_v20alpha1)
|
err = host3.Peerstore().AddProtocols(host1.ID(), PeerExchangeID_v20alpha1)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
time.Sleep(3 * time.Second) // Wait some time for peers to be discovered
|
||||||
|
|
||||||
err = px3.Request(context.Background(), 1, WithPeer(host1.ID()))
|
err = px3.Request(context.Background(), 1, WithPeer(host1.ID()))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue