Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
c2117982
Unverified
Commit
c2117982
authored
Feb 17, 2020
by
Péter Szilágyi
Committed by
GitHub
Feb 17, 2020
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #20678 from karalabe/broadcast-sqrt-proper
eth: don't enforce minimum broadcast, fix broadcast test
parents
1c4c486a
36a1e0b6
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
20 additions
and
44 deletions
+20
-44
handler.go
eth/handler.go
+2
-19
handler_test.go
eth/handler_test.go
+18
-25
No files found.
eth/handler.go
View file @
c2117982
...
...
@@ -50,9 +50,6 @@ const (
// txChanSize is the size of channel listening to NewTxsEvent.
// The number is referenced from the size of tx pool.
txChanSize
=
4096
// minimim number of peers to broadcast entire blocks and transactions too.
minBroadcastPeers
=
4
)
var
(
...
...
@@ -830,14 +827,7 @@ func (pm *ProtocolManager) BroadcastBlock(block *types.Block, propagate bool) {
return
}
// Send the block to a subset of our peers
transferLen
:=
int
(
math
.
Sqrt
(
float64
(
len
(
peers
))))
if
transferLen
<
minBroadcastPeers
{
transferLen
=
minBroadcastPeers
}
if
transferLen
>
len
(
peers
)
{
transferLen
=
len
(
peers
)
}
transfer
:=
peers
[
:
transferLen
]
transfer
:=
peers
[
:
int
(
math
.
Sqrt
(
float64
(
len
(
peers
))))]
for
_
,
peer
:=
range
transfer
{
peer
.
AsyncSendNewBlock
(
block
,
td
)
}
...
...
@@ -866,14 +856,7 @@ func (pm *ProtocolManager) BroadcastTransactions(txs types.Transactions, propaga
peers
:=
pm
.
peers
.
PeersWithoutTx
(
tx
.
Hash
())
// Send the block to a subset of our peers
transferLen
:=
int
(
math
.
Sqrt
(
float64
(
len
(
peers
))))
if
transferLen
<
minBroadcastPeers
{
transferLen
=
minBroadcastPeers
}
if
transferLen
>
len
(
peers
)
{
transferLen
=
len
(
peers
)
}
transfer
:=
peers
[
:
transferLen
]
transfer
:=
peers
[
:
int
(
math
.
Sqrt
(
float64
(
len
(
peers
))))]
for
_
,
peer
:=
range
transfer
{
txset
[
peer
]
=
append
(
txset
[
peer
],
tx
.
Hash
())
}
...
...
eth/handler_test.go
View file @
c2117982
...
...
@@ -554,12 +554,12 @@ func TestBroadcastBlock(t *testing.T) {
broadcastExpected
int
}{
{
1
,
1
},
{
2
,
2
},
{
3
,
3
},
{
4
,
4
},
{
5
,
4
},
{
9
,
4
},
{
12
,
4
},
{
2
,
1
},
{
3
,
1
},
{
4
,
2
},
{
5
,
2
},
{
9
,
3
},
{
12
,
3
},
{
16
,
4
},
{
26
,
5
},
{
100
,
10
},
...
...
@@ -592,6 +592,7 @@ func testBroadcastBlock(t *testing.T, totalPeers, broadcastExpected int) {
for
i
:=
0
;
i
<
totalPeers
;
i
++
{
peer
,
_
:=
newTestPeer
(
fmt
.
Sprintf
(
"peer %d"
,
i
),
eth63
,
pm
,
true
)
defer
peer
.
close
()
peers
=
append
(
peers
,
peer
)
}
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) {
}
}(
peer
)
}
timeout
:=
time
.
After
(
2
*
time
.
Second
)
var
receivedCount
int
outer
:
var
received
int
for
{
select
{
case
err
=
<-
errCh
:
break
outer
case
<-
doneCh
:
receivedCount
++
if
receivedCount
==
totalPeers
{
break
outer
received
++
case
<-
time
.
After
(
100
*
time
.
Millisecond
)
:
if
received
!=
broadcastExpected
{
t
.
Errorf
(
"broadcast count mismatch: have %d, want %d"
,
received
,
broadcastExpected
)
}
case
<-
timeout
:
break
outer
return
case
err
=
<-
errCh
:
t
.
Fatalf
(
"broadcast failed: %v"
,
err
)
}
}
for
_
,
peer
:=
range
peers
{
peer
.
app
.
Close
()
}
if
err
!=
nil
{
t
.
Errorf
(
"error matching block by peer: %v"
,
err
)
}
if
receivedCount
!=
broadcastExpected
{
t
.
Errorf
(
"block broadcast to %d peers, expected %d"
,
receivedCount
,
broadcastExpected
)
}
}
// Tests that a propagated malformed block (uncles or transactions don't match
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment