Skip to content

Commit c211798

Browse files
authored
Merge pull request #20678 from karalabe/broadcast-sqrt-proper
eth: don't enforce minimum broadcast, fix broadcast test
2 parents 1c4c486 + 36a1e0b commit c211798

File tree

2 files changed

+20
-44
lines changed

2 files changed

+20
-44
lines changed

eth/handler.go

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,6 @@ const (
5050
// txChanSize is the size of channel listening to NewTxsEvent.
5151
// The number is referenced from the size of tx pool.
5252
txChanSize = 4096
53-
54-
// minimim number of peers to broadcast entire blocks and transactions too.
55-
minBroadcastPeers = 4
5653
)
5754

5855
var (
@@ -830,14 +827,7 @@ func (pm *ProtocolManager) BroadcastBlock(block *types.Block, propagate bool) {
830827
return
831828
}
832829
// Send the block to a subset of our peers
833-
transferLen := int(math.Sqrt(float64(len(peers))))
834-
if transferLen < minBroadcastPeers {
835-
transferLen = minBroadcastPeers
836-
}
837-
if transferLen > len(peers) {
838-
transferLen = len(peers)
839-
}
840-
transfer := peers[:transferLen]
830+
transfer := peers[:int(math.Sqrt(float64(len(peers))))]
841831
for _, peer := range transfer {
842832
peer.AsyncSendNewBlock(block, td)
843833
}
@@ -866,14 +856,7 @@ func (pm *ProtocolManager) BroadcastTransactions(txs types.Transactions, propaga
866856
peers := pm.peers.PeersWithoutTx(tx.Hash())
867857

868858
// Send the block to a subset of our peers
869-
transferLen := int(math.Sqrt(float64(len(peers))))
870-
if transferLen < minBroadcastPeers {
871-
transferLen = minBroadcastPeers
872-
}
873-
if transferLen > len(peers) {
874-
transferLen = len(peers)
875-
}
876-
transfer := peers[:transferLen]
859+
transfer := peers[:int(math.Sqrt(float64(len(peers))))]
877860
for _, peer := range transfer {
878861
txset[peer] = append(txset[peer], tx.Hash())
879862
}

eth/handler_test.go

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -554,12 +554,12 @@ func TestBroadcastBlock(t *testing.T) {
554554
broadcastExpected int
555555
}{
556556
{1, 1},
557-
{2, 2},
558-
{3, 3},
559-
{4, 4},
560-
{5, 4},
561-
{9, 4},
562-
{12, 4},
557+
{2, 1},
558+
{3, 1},
559+
{4, 2},
560+
{5, 2},
561+
{9, 3},
562+
{12, 3},
563563
{16, 4},
564564
{26, 5},
565565
{100, 10},
@@ -592,6 +592,7 @@ func testBroadcastBlock(t *testing.T, totalPeers, broadcastExpected int) {
592592
for i := 0; i < totalPeers; i++ {
593593
peer, _ := newTestPeer(fmt.Sprintf("peer %d", i), eth63, pm, true)
594594
defer peer.close()
595+
595596
peers = append(peers, peer)
596597
}
597598
chain, _ := core.GenerateChain(gspec.Config, genesis, ethash.NewFaker(), db, 1, func(i int, gen *core.BlockGen) {})
@@ -608,31 +609,23 @@ func testBroadcastBlock(t *testing.T, totalPeers, broadcastExpected int) {
608609
}
609610
}(peer)
610611
}
611-
timeout := time.After(2 * time.Second)
612-
var receivedCount int
613-
outer:
612+
var received int
614613
for {
615614
select {
616-
case err = <-errCh:
617-
break outer
618615
case <-doneCh:
619-
receivedCount++
620-
if receivedCount == totalPeers {
621-
break outer
616+
received++
617+
618+
case <-time.After(100 * time.Millisecond):
619+
if received != broadcastExpected {
620+
t.Errorf("broadcast count mismatch: have %d, want %d", received, broadcastExpected)
622621
}
623-
case <-timeout:
624-
break outer
622+
return
623+
624+
case err = <-errCh:
625+
t.Fatalf("broadcast failed: %v", err)
625626
}
626627
}
627-
for _, peer := range peers {
628-
peer.app.Close()
629-
}
630-
if err != nil {
631-
t.Errorf("error matching block by peer: %v", err)
632-
}
633-
if receivedCount != broadcastExpected {
634-
t.Errorf("block broadcast to %d peers, expected %d", receivedCount, broadcastExpected)
635-
}
628+
636629
}
637630

638631
// Tests that a propagated malformed block (uncles or transactions don't match

0 commit comments

Comments
 (0)