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
e1b4acfb
Unverified
Commit
e1b4acfb
authored
Nov 01, 2016
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
eth/downloader: clear pending requests when switching trie root
parent
8ecee175
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
18 additions
and
9 deletions
+18
-9
queue.go
eth/downloader/queue.go
+18
-9
No files found.
eth/downloader/queue.go
View file @
e1b4acfb
...
@@ -362,20 +362,20 @@ func (q *queue) Schedule(headers []*types.Header, from uint64) []*types.Header {
...
@@ -362,20 +362,20 @@ func (q *queue) Schedule(headers []*types.Header, from uint64) []*types.Header {
// Make sure chain order is honoured and preserved throughout
// Make sure chain order is honoured and preserved throughout
hash
:=
header
.
Hash
()
hash
:=
header
.
Hash
()
if
header
.
Number
==
nil
||
header
.
Number
.
Uint64
()
!=
from
{
if
header
.
Number
==
nil
||
header
.
Number
.
Uint64
()
!=
from
{
glog
.
V
(
logger
.
Warn
)
.
Infof
(
"Header #%v [%x] broke chain ordering, expected %d"
,
header
.
Number
,
hash
[
:
4
],
from
)
glog
.
V
(
logger
.
Warn
)
.
Infof
(
"Header #%v [%x
…
] broke chain ordering, expected %d"
,
header
.
Number
,
hash
[
:
4
],
from
)
break
break
}
}
if
q
.
headerHead
!=
(
common
.
Hash
{})
&&
q
.
headerHead
!=
header
.
ParentHash
{
if
q
.
headerHead
!=
(
common
.
Hash
{})
&&
q
.
headerHead
!=
header
.
ParentHash
{
glog
.
V
(
logger
.
Warn
)
.
Infof
(
"Header #%v [%x] broke chain ancestry"
,
header
.
Number
,
hash
[
:
4
])
glog
.
V
(
logger
.
Warn
)
.
Infof
(
"Header #%v [%x
…
] broke chain ancestry"
,
header
.
Number
,
hash
[
:
4
])
break
break
}
}
// Make sure no duplicate requests are executed
// Make sure no duplicate requests are executed
if
_
,
ok
:=
q
.
blockTaskPool
[
hash
];
ok
{
if
_
,
ok
:=
q
.
blockTaskPool
[
hash
];
ok
{
glog
.
V
(
logger
.
Warn
)
.
Infof
(
"Header #%d [%x] already scheduled for block fetch"
,
header
.
Number
.
Uint64
(),
hash
[
:
4
])
glog
.
V
(
logger
.
Warn
)
.
Infof
(
"Header #%d [%x
…
] already scheduled for block fetch"
,
header
.
Number
.
Uint64
(),
hash
[
:
4
])
continue
continue
}
}
if
_
,
ok
:=
q
.
receiptTaskPool
[
hash
];
ok
{
if
_
,
ok
:=
q
.
receiptTaskPool
[
hash
];
ok
{
glog
.
V
(
logger
.
Warn
)
.
Infof
(
"Header #%d [%x] already scheduled for receipt fetch"
,
header
.
Number
.
Uint64
(),
hash
[
:
4
])
glog
.
V
(
logger
.
Warn
)
.
Infof
(
"Header #%d [%x
…
] already scheduled for receipt fetch"
,
header
.
Number
.
Uint64
(),
hash
[
:
4
])
continue
continue
}
}
// Queue the header for content retrieval
// Queue the header for content retrieval
...
@@ -388,7 +388,16 @@ func (q *queue) Schedule(headers []*types.Header, from uint64) []*types.Header {
...
@@ -388,7 +388,16 @@ func (q *queue) Schedule(headers []*types.Header, from uint64) []*types.Header {
q
.
receiptTaskQueue
.
Push
(
header
,
-
float32
(
header
.
Number
.
Uint64
()))
q
.
receiptTaskQueue
.
Push
(
header
,
-
float32
(
header
.
Number
.
Uint64
()))
}
}
if
q
.
mode
==
FastSync
&&
header
.
Number
.
Uint64
()
==
q
.
fastSyncPivot
{
if
q
.
mode
==
FastSync
&&
header
.
Number
.
Uint64
()
==
q
.
fastSyncPivot
{
// Pivoting point of the fast sync, retrieve the state tries
// Pivoting point of the fast sync, switch the state retrieval to this
glog
.
V
(
logger
.
Debug
)
.
Infof
(
"Switching state downloads to %d [%x…]"
,
header
.
Number
.
Uint64
(),
header
.
Hash
()
.
Bytes
()[
:
4
])
q
.
stateTaskIndex
=
0
q
.
stateTaskPool
=
make
(
map
[
common
.
Hash
]
int
)
q
.
stateTaskQueue
.
Reset
()
for
_
,
req
:=
range
q
.
statePendPool
{
req
.
Hashes
=
make
(
map
[
common
.
Hash
]
int
)
// Make sure executing requests fail, but don't disappear
}
q
.
stateSchedLock
.
Lock
()
q
.
stateSchedLock
.
Lock
()
q
.
stateScheduler
=
state
.
NewStateSync
(
header
.
Root
,
q
.
stateDatabase
)
q
.
stateScheduler
=
state
.
NewStateSync
(
header
.
Root
,
q
.
stateDatabase
)
q
.
stateSchedLock
.
Unlock
()
q
.
stateSchedLock
.
Unlock
()
...
@@ -866,10 +875,10 @@ func (q *queue) DeliverHeaders(id string, headers []*types.Header, headerProcCh
...
@@ -866,10 +875,10 @@ func (q *queue) DeliverHeaders(id string, headers []*types.Header, headerProcCh
accepted
:=
len
(
headers
)
==
MaxHeaderFetch
accepted
:=
len
(
headers
)
==
MaxHeaderFetch
if
accepted
{
if
accepted
{
if
headers
[
0
]
.
Number
.
Uint64
()
!=
request
.
From
{
if
headers
[
0
]
.
Number
.
Uint64
()
!=
request
.
From
{
glog
.
V
(
logger
.
Detail
)
.
Infof
(
"Peer %s: first header #%v [%x] broke chain ordering, expected %d"
,
id
,
headers
[
0
]
.
Number
,
headers
[
0
]
.
Hash
()
.
Bytes
()[
:
4
],
request
.
From
)
glog
.
V
(
logger
.
Detail
)
.
Infof
(
"Peer %s: first header #%v [%x
…
] broke chain ordering, expected %d"
,
id
,
headers
[
0
]
.
Number
,
headers
[
0
]
.
Hash
()
.
Bytes
()[
:
4
],
request
.
From
)
accepted
=
false
accepted
=
false
}
else
if
headers
[
len
(
headers
)
-
1
]
.
Hash
()
!=
target
{
}
else
if
headers
[
len
(
headers
)
-
1
]
.
Hash
()
!=
target
{
glog
.
V
(
logger
.
Detail
)
.
Infof
(
"Peer %s: last header #%v [%x] broke skeleton structure, expected %x"
,
id
,
headers
[
len
(
headers
)
-
1
]
.
Number
,
headers
[
len
(
headers
)
-
1
]
.
Hash
()
.
Bytes
()[
:
4
],
target
[
:
4
])
glog
.
V
(
logger
.
Detail
)
.
Infof
(
"Peer %s: last header #%v [%x
…
] broke skeleton structure, expected %x"
,
id
,
headers
[
len
(
headers
)
-
1
]
.
Number
,
headers
[
len
(
headers
)
-
1
]
.
Hash
()
.
Bytes
()[
:
4
],
target
[
:
4
])
accepted
=
false
accepted
=
false
}
}
}
}
...
@@ -877,12 +886,12 @@ func (q *queue) DeliverHeaders(id string, headers []*types.Header, headerProcCh
...
@@ -877,12 +886,12 @@ func (q *queue) DeliverHeaders(id string, headers []*types.Header, headerProcCh
for
i
,
header
:=
range
headers
[
1
:
]
{
for
i
,
header
:=
range
headers
[
1
:
]
{
hash
:=
header
.
Hash
()
hash
:=
header
.
Hash
()
if
want
:=
request
.
From
+
1
+
uint64
(
i
);
header
.
Number
.
Uint64
()
!=
want
{
if
want
:=
request
.
From
+
1
+
uint64
(
i
);
header
.
Number
.
Uint64
()
!=
want
{
glog
.
V
(
logger
.
Warn
)
.
Infof
(
"Peer %s: header #%v [%x] broke chain ordering, expected %d"
,
id
,
header
.
Number
,
hash
[
:
4
],
want
)
glog
.
V
(
logger
.
Warn
)
.
Infof
(
"Peer %s: header #%v [%x
…
] broke chain ordering, expected %d"
,
id
,
header
.
Number
,
hash
[
:
4
],
want
)
accepted
=
false
accepted
=
false
break
break
}
}
if
headers
[
i
]
.
Hash
()
!=
header
.
ParentHash
{
if
headers
[
i
]
.
Hash
()
!=
header
.
ParentHash
{
glog
.
V
(
logger
.
Warn
)
.
Infof
(
"Peer %s: header #%v [%x] broke chain ancestry"
,
id
,
header
.
Number
,
hash
[
:
4
])
glog
.
V
(
logger
.
Warn
)
.
Infof
(
"Peer %s: header #%v [%x
…
] broke chain ancestry"
,
id
,
header
.
Number
,
hash
[
:
4
])
accepted
=
false
accepted
=
false
break
break
}
}
...
...
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