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
3ee91b9f
Unverified
Commit
3ee91b9f
authored
Aug 24, 2020
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
core/state/snapshot: reduce disk layer depth during generation
parent
0f4e7c9b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
18 additions
and
9 deletions
+18
-9
generate.go
core/state/snapshot/generate.go
+10
-8
journal.go
core/state/snapshot/journal.go
+1
-1
snapshot.go
core/state/snapshot/snapshot.go
+7
-0
No files found.
core/state/snapshot/generate.go
View file @
3ee91b9f
...
...
@@ -54,9 +54,11 @@ type generatorStats struct {
// Log creates an contextual log with the given message and the context pulled
// from the internally maintained statistics.
func
(
gs
*
generatorStats
)
Log
(
msg
string
,
marker
[]
byte
)
{
func
(
gs
*
generatorStats
)
Log
(
msg
string
,
root
common
.
Hash
,
marker
[]
byte
)
{
var
ctx
[]
interface
{}
if
root
!=
(
common
.
Hash
{})
{
ctx
=
append
(
ctx
,
[]
interface
{}{
"root"
,
root
}
...
)
}
// Figure out whether we're after or within an account
switch
len
(
marker
)
{
case
common
.
HashLength
:
...
...
@@ -120,7 +122,7 @@ func generateSnapshot(diskdb ethdb.KeyValueStore, triedb *trie.Database, cache i
func
(
dl
*
diskLayer
)
generate
(
stats
*
generatorStats
)
{
// If a database wipe is in operation, wait until it's done
if
stats
.
wiping
!=
nil
{
stats
.
Log
(
"Wiper running, state snapshotting paused"
,
dl
.
genMarker
)
stats
.
Log
(
"Wiper running, state snapshotting paused"
,
common
.
Hash
{},
dl
.
genMarker
)
select
{
// If wiper is done, resume normal mode of operation
case
<-
stats
.
wiping
:
...
...
@@ -137,13 +139,13 @@ func (dl *diskLayer) generate(stats *generatorStats) {
accTrie
,
err
:=
trie
.
NewSecure
(
dl
.
root
,
dl
.
triedb
)
if
err
!=
nil
{
// The account trie is missing (GC), surf the chain until one becomes available
stats
.
Log
(
"Trie missing, state snapshotting paused"
,
dl
.
genMarker
)
stats
.
Log
(
"Trie missing, state snapshotting paused"
,
dl
.
root
,
dl
.
genMarker
)
abort
:=
<-
dl
.
genAbort
abort
<-
stats
return
}
stats
.
Log
(
"Resuming state snapshot generation"
,
dl
.
genMarker
)
stats
.
Log
(
"Resuming state snapshot generation"
,
dl
.
root
,
dl
.
genMarker
)
var
accMarker
[]
byte
if
len
(
dl
.
genMarker
)
>
0
{
// []byte{} is the start, use nil for that
...
...
@@ -192,7 +194,7 @@ func (dl *diskLayer) generate(stats *generatorStats) {
dl
.
lock
.
Unlock
()
}
if
abort
!=
nil
{
stats
.
Log
(
"Aborting state snapshot generation"
,
accountHash
[
:
])
stats
.
Log
(
"Aborting state snapshot generation"
,
dl
.
root
,
accountHash
[
:
])
abort
<-
stats
return
}
...
...
@@ -230,7 +232,7 @@ func (dl *diskLayer) generate(stats *generatorStats) {
dl
.
lock
.
Unlock
()
}
if
abort
!=
nil
{
stats
.
Log
(
"Aborting state snapshot generation"
,
append
(
accountHash
[
:
],
storeIt
.
Key
...
))
stats
.
Log
(
"Aborting state snapshot generation"
,
dl
.
root
,
append
(
accountHash
[
:
],
storeIt
.
Key
...
))
abort
<-
stats
return
}
...
...
@@ -238,7 +240,7 @@ func (dl *diskLayer) generate(stats *generatorStats) {
}
}
if
time
.
Since
(
logged
)
>
8
*
time
.
Second
{
stats
.
Log
(
"Generating state snapshot"
,
accIt
.
Key
)
stats
.
Log
(
"Generating state snapshot"
,
dl
.
root
,
accIt
.
Key
)
logged
=
time
.
Now
()
}
// Some account processed, unmark the marker
...
...
core/state/snapshot/journal.go
View file @
3ee91b9f
...
...
@@ -193,7 +193,7 @@ func (dl *diskLayer) Journal(buffer *bytes.Buffer) (common.Hash, error) {
dl
.
genAbort
<-
abort
if
stats
=
<-
abort
;
stats
!=
nil
{
stats
.
Log
(
"Journalling in-progress snapshot"
,
dl
.
genMarker
)
stats
.
Log
(
"Journalling in-progress snapshot"
,
dl
.
root
,
dl
.
genMarker
)
}
}
// Ensure the layer didn't get stale
...
...
core/state/snapshot/snapshot.go
View file @
3ee91b9f
...
...
@@ -263,6 +263,13 @@ func (t *Tree) Cap(root common.Hash, layers int) error {
if
!
ok
{
return
fmt
.
Errorf
(
"snapshot [%#x] is disk layer"
,
root
)
}
// If the generator is still running, use a more aggressive cap
diff
.
origin
.
lock
.
RLock
()
if
diff
.
origin
.
genMarker
!=
nil
&&
layers
>
8
{
layers
=
8
}
diff
.
origin
.
lock
.
RUnlock
()
// Run the internal capping and discard all stale layers
t
.
lock
.
Lock
()
defer
t
.
lock
.
Unlock
()
...
...
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