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
b40c796f
Commit
b40c796f
authored
Jun 03, 2015
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
eth/downloader: preallocate the block cache
parent
1d7bf3d3
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
14 additions
and
21 deletions
+14
-21
downloader.go
eth/downloader/downloader.go
+4
-4
downloader_test.go
eth/downloader/downloader_test.go
+1
-1
queue.go
eth/downloader/queue.go
+9
-16
No files found.
eth/downloader/downloader.go
View file @
b40c796f
...
...
@@ -341,12 +341,12 @@ func (d *Downloader) fetchHashes(p *peer, h common.Hash) error {
active
.
getHashes
(
head
)
continue
}
// We're done,
allocat
e the download cache and proceed pulling the blocks
// We're done,
prepar
e the download cache and proceed pulling the blocks
offset
:=
0
if
block
:=
d
.
getBlock
(
head
);
block
!=
nil
{
offset
=
int
(
block
.
NumberU64
()
+
1
)
}
d
.
queue
.
Alloc
(
offset
)
d
.
queue
.
Prepare
(
offset
)
finished
=
true
case
blockPack
:=
<-
d
.
blockCh
:
...
...
@@ -504,7 +504,7 @@ out:
}
// Get a possible chunk. If nil is returned no chunk
// could be returned due to no hashes available.
request
:=
d
.
queue
.
Reserve
(
peer
)
request
:=
d
.
queue
.
Reserve
(
peer
,
peer
.
Capacity
()
)
if
request
==
nil
{
continue
}
...
...
@@ -551,7 +551,7 @@ func (d *Downloader) banBlocks(peerId string, head common.Hash) error {
if
peer
==
nil
{
return
nil
}
request
:=
d
.
queue
.
Reserve
(
peer
)
request
:=
d
.
queue
.
Reserve
(
peer
,
MaxBlockFetch
)
if
request
==
nil
{
return
nil
}
...
...
eth/downloader/downloader_test.go
View file @
b40c796f
...
...
@@ -186,7 +186,7 @@ func TestSynchronisation(t *testing.T) {
if
err
:=
tester
.
sync
(
"peer"
,
hashes
[
0
]);
err
!=
nil
{
t
.
Fatalf
(
"failed to synchronise blocks: %v"
,
err
)
}
if
queued
:=
len
(
tester
.
downloader
.
queue
.
block
Cache
);
queued
!=
targetBlocks
{
if
queued
:=
len
(
tester
.
downloader
.
queue
.
block
Pool
);
queued
!=
targetBlocks
{
t
.
Fatalf
(
"synchronised block mismatch: have %v, want %v"
,
queued
,
targetBlocks
)
}
}
...
...
eth/downloader/queue.go
View file @
b40c796f
...
...
@@ -50,10 +50,11 @@ type queue struct {
// newQueue creates a new download queue for scheduling block retrieval.
func
newQueue
()
*
queue
{
return
&
queue
{
hashPool
:
make
(
map
[
common
.
Hash
]
int
),
hashQueue
:
prque
.
New
(),
pendPool
:
make
(
map
[
string
]
*
fetchRequest
),
blockPool
:
make
(
map
[
common
.
Hash
]
int
),
hashPool
:
make
(
map
[
common
.
Hash
]
int
),
hashQueue
:
prque
.
New
(),
pendPool
:
make
(
map
[
string
]
*
fetchRequest
),
blockPool
:
make
(
map
[
common
.
Hash
]
int
),
blockCache
:
make
([]
*
Block
,
blockCacheLimit
),
}
}
...
...
@@ -70,7 +71,7 @@ func (q *queue) Reset() {
q
.
blockPool
=
make
(
map
[
common
.
Hash
]
int
)
q
.
blockOffset
=
0
q
.
blockCache
=
nil
q
.
blockCache
=
make
([]
*
Block
,
blockCacheLimit
)
}
// Size retrieves the number of hashes in the queue, returning separately for
...
...
@@ -208,7 +209,7 @@ func (q *queue) TakeBlocks() []*Block {
// Reserve reserves a set of hashes for the given peer, skipping any previously
// failed download.
func
(
q
*
queue
)
Reserve
(
p
*
peer
)
*
fetchRequest
{
func
(
q
*
queue
)
Reserve
(
p
*
peer
,
count
int
)
*
fetchRequest
{
q
.
lock
.
Lock
()
defer
q
.
lock
.
Unlock
()
...
...
@@ -345,20 +346,12 @@ func (q *queue) Deliver(id string, blocks []*types.Block) (err error) {
return
nil
}
// Alloc ensures that the block cache is the correct size, given a starting
// offset, and a memory cap.
func
(
q
*
queue
)
Alloc
(
offset
int
)
{
// Prepare configures the block cache offset to allow accepting inbound blocks.
func
(
q
*
queue
)
Prepare
(
offset
int
)
{
q
.
lock
.
Lock
()
defer
q
.
lock
.
Unlock
()
if
q
.
blockOffset
<
offset
{
q
.
blockOffset
=
offset
}
size
:=
len
(
q
.
hashPool
)
if
size
>
blockCacheLimit
{
size
=
blockCacheLimit
}
if
len
(
q
.
blockCache
)
<
size
{
q
.
blockCache
=
append
(
q
.
blockCache
,
make
([]
*
Block
,
size
-
len
(
q
.
blockCache
))
...
)
}
}
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