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
d2d5dbc6
Commit
d2d5dbc6
authored
May 13, 2015
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
eth/downloader: fix active peer shadowing, polish func names
parent
6dec9046
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
16 additions
and
24 deletions
+16
-24
downloader.go
eth/downloader/downloader.go
+10
-18
downloader_test.go
eth/downloader/downloader_test.go
+4
-4
handler.go
eth/handler.go
+2
-2
No files found.
eth/downloader/downloader.go
View file @
d2d5dbc6
...
...
@@ -55,10 +55,9 @@ type hashPack struct {
}
type
Downloader
struct
{
mu
sync
.
RWMutex
queue
*
queue
peers
*
peerSet
activePeer
string
mu
sync
.
RWMutex
queue
*
queue
peers
*
peerSet
// Callbacks
hasBlock
hashCheckFn
...
...
@@ -162,7 +161,6 @@ func (d *Downloader) Has(hash common.Hash) bool {
// syncWithPeer starts a block synchronization based on the hash chain from the
// specified peer and head hash.
func
(
d
*
Downloader
)
syncWithPeer
(
p
*
peer
,
hash
common
.
Hash
)
(
err
error
)
{
d
.
activePeer
=
p
.
id
defer
func
()
{
// reset on error
if
err
!=
nil
{
...
...
@@ -416,32 +414,26 @@ out:
return
nil
}
// Deliver
a chunk to the downloader. This is usually done through the BlocksMsg by
// the protocol handler.
func
(
d
*
Downloader
)
Deliver
Chunk
(
id
string
,
blocks
[]
*
types
.
Block
)
error
{
// Deliver
Blocks injects a new batch of blocks received from a remote node.
//
This is usually invoked through the BlocksMsg by
the protocol handler.
func
(
d
*
Downloader
)
Deliver
Blocks
(
id
string
,
blocks
[]
*
types
.
Block
)
error
{
// Make sure the downloader is active
if
atomic
.
LoadInt32
(
&
d
.
synchronising
)
==
0
{
return
errNoSyncActive
}
d
.
blockCh
<-
blockPack
{
id
,
blocks
}
return
nil
}
func
(
d
*
Downloader
)
AddHashes
(
id
string
,
hashes
[]
common
.
Hash
)
error
{
// DeliverHashes injects a new batch of hashes received from a remote node into
// the download schedule. This is usually invoked through the BlockHashesMsg by
// the protocol handler.
func
(
d
*
Downloader
)
DeliverHashes
(
id
string
,
hashes
[]
common
.
Hash
)
error
{
// Make sure the downloader is active
if
atomic
.
LoadInt32
(
&
d
.
synchronising
)
==
0
{
return
errNoSyncActive
}
// make sure that the hashes that are being added are actually from the peer
// that's the current active peer. hashes that have been received from other
// peers are dropped and ignored.
if
d
.
activePeer
!=
id
{
return
fmt
.
Errorf
(
"received hashes from %s while active peer is %s"
,
id
,
d
.
activePeer
)
}
if
glog
.
V
(
logger
.
Debug
)
&&
len
(
hashes
)
!=
0
{
from
,
to
:=
hashes
[
0
],
hashes
[
len
(
hashes
)
-
1
]
glog
.
V
(
logger
.
Debug
)
.
Infof
(
"adding %d (T=%d) hashes [ %x / %x ] from: %s
\n
"
,
len
(
hashes
),
d
.
queue
.
Pending
(),
from
[
:
4
],
to
[
:
4
],
id
)
...
...
eth/downloader/downloader_test.go
View file @
d2d5dbc6
...
...
@@ -76,7 +76,7 @@ func (dl *downloadTester) getBlock(hash common.Hash) *types.Block {
}
func
(
dl
*
downloadTester
)
getHashes
(
hash
common
.
Hash
)
error
{
dl
.
downloader
.
Add
Hashes
(
dl
.
activePeerId
,
dl
.
hashes
)
dl
.
downloader
.
Deliver
Hashes
(
dl
.
activePeerId
,
dl
.
hashes
)
return
nil
}
...
...
@@ -87,7 +87,7 @@ func (dl *downloadTester) getBlocks(id string) func([]common.Hash) error {
blocks
[
i
]
=
dl
.
blocks
[
hash
]
}
go
dl
.
downloader
.
Deliver
Chunk
(
id
,
blocks
)
go
dl
.
downloader
.
Deliver
Blocks
(
id
,
blocks
)
return
nil
}
...
...
@@ -188,12 +188,12 @@ func TestInactiveDownloader(t *testing.T) {
blocks
:=
createBlocksFromHashSet
(
createHashSet
(
hashes
))
tester
:=
newTester
(
t
,
hashes
,
nil
)
err
:=
tester
.
downloader
.
Add
Hashes
(
"bad peer 001"
,
hashes
)
err
:=
tester
.
downloader
.
Deliver
Hashes
(
"bad peer 001"
,
hashes
)
if
err
!=
errNoSyncActive
{
t
.
Error
(
"expected no sync error, got"
,
err
)
}
err
=
tester
.
downloader
.
Deliver
Chunk
(
"bad peer 001"
,
blocks
)
err
=
tester
.
downloader
.
Deliver
Blocks
(
"bad peer 001"
,
blocks
)
if
err
!=
errNoSyncActive
{
t
.
Error
(
"expected no sync error, got"
,
err
)
}
...
...
eth/handler.go
View file @
d2d5dbc6
...
...
@@ -224,7 +224,7 @@ func (self *ProtocolManager) handleMsg(p *peer) error {
if
err
:=
msgStream
.
Decode
(
&
hashes
);
err
!=
nil
{
break
}
err
:=
self
.
downloader
.
Add
Hashes
(
p
.
id
,
hashes
)
err
:=
self
.
downloader
.
Deliver
Hashes
(
p
.
id
,
hashes
)
if
err
!=
nil
{
glog
.
V
(
logger
.
Debug
)
.
Infoln
(
err
)
}
...
...
@@ -264,7 +264,7 @@ func (self *ProtocolManager) handleMsg(p *peer) error {
glog
.
V
(
logger
.
Detail
)
.
Infoln
(
"Decode error"
,
err
)
blocks
=
nil
}
self
.
downloader
.
Deliver
Chunk
(
p
.
id
,
blocks
)
self
.
downloader
.
Deliver
Blocks
(
p
.
id
,
blocks
)
case
NewBlockMsg
:
var
request
newBlockMsgData
...
...
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