eth/protocols/snap: generate storage trie from full dirty snap data (#22668)
* eth/protocols/snap: generate storage trie from full dirty snap data * eth/protocols/snap: get rid of some more dead code * eth/protocols/snap: less frequent logs, also log during trie generation * eth/protocols/snap: implement dirty account range stack-hashing * eth/protocols/snap: don't loop on account trie generation * eth/protocols/snap: fix account format in trie * core, eth, ethdb: glue snap packets together, but not chunks * eth/protocols/snap: print completion log for snap phase * eth/protocols/snap: extended tests * eth/protocols/snap: make testcase pass * eth/protocols/snap: fix account stacktrie commit without defer * ethdb: fix key counts on reset * eth/protocols: fix typos * eth/protocols/snap: make better use of delivered data (#44) * eth/protocols/snap: make better use of delivered data * squashme * eth/protocols/snap: reduce chunking * squashme * eth/protocols/snap: reduce chunking further * eth/protocols/snap: break out hash range calculations * eth/protocols/snap: use sort.Search instead of looping * eth/protocols/snap: prevent crash on storage response with no keys * eth/protocols/snap: nitpicks all around * eth/protocols/snap: clear heal need on 1-chunk storage completion * eth/protocols/snap: fix range chunker, add tests Co-authored-by: Péter Szilágyi <peterke@gmail.com> * trie: fix test API error * eth/protocols/snap: fix some further liter issues * eth/protocols/snap: fix accidental batch reuse Co-authored-by: Martin Holst Swende <martin@swende.se>
This commit is contained in:
@ -25,6 +25,9 @@ const IdealBatchSize = 100 * 1024
|
||||
type Batch interface {
|
||||
KeyValueWriter
|
||||
|
||||
// KeyCount retrieves the number of keys queued up for writing.
|
||||
KeyCount() int
|
||||
|
||||
// ValueSize retrieves the amount of data queued up for writing.
|
||||
ValueSize() int
|
||||
|
||||
|
@ -448,6 +448,7 @@ func (db *Database) meter(refresh time.Duration) {
|
||||
type batch struct {
|
||||
db *leveldb.DB
|
||||
b *leveldb.Batch
|
||||
keys int
|
||||
size int
|
||||
}
|
||||
|
||||
@ -461,10 +462,16 @@ func (b *batch) Put(key, value []byte) error {
|
||||
// Delete inserts the a key removal into the batch for later committing.
|
||||
func (b *batch) Delete(key []byte) error {
|
||||
b.b.Delete(key)
|
||||
b.keys++
|
||||
b.size += len(key)
|
||||
return nil
|
||||
}
|
||||
|
||||
// KeyCount retrieves the number of keys queued up for writing.
|
||||
func (b *batch) KeyCount() int {
|
||||
return b.keys
|
||||
}
|
||||
|
||||
// ValueSize retrieves the amount of data queued up for writing.
|
||||
func (b *batch) ValueSize() int {
|
||||
return b.size
|
||||
@ -478,7 +485,7 @@ func (b *batch) Write() error {
|
||||
// Reset resets the batch for reuse.
|
||||
func (b *batch) Reset() {
|
||||
b.b.Reset()
|
||||
b.size = 0
|
||||
b.keys, b.size = 0, 0
|
||||
}
|
||||
|
||||
// Replay replays the batch contents.
|
||||
|
@ -198,6 +198,7 @@ type keyvalue struct {
|
||||
type batch struct {
|
||||
db *Database
|
||||
writes []keyvalue
|
||||
keys int
|
||||
size int
|
||||
}
|
||||
|
||||
@ -211,10 +212,16 @@ func (b *batch) Put(key, value []byte) error {
|
||||
// Delete inserts the a key removal into the batch for later committing.
|
||||
func (b *batch) Delete(key []byte) error {
|
||||
b.writes = append(b.writes, keyvalue{common.CopyBytes(key), nil, true})
|
||||
b.keys++
|
||||
b.size += len(key)
|
||||
return nil
|
||||
}
|
||||
|
||||
// KeyCount retrieves the number of keys queued up for writing.
|
||||
func (b *batch) KeyCount() int {
|
||||
return b.keys
|
||||
}
|
||||
|
||||
// ValueSize retrieves the amount of data queued up for writing.
|
||||
func (b *batch) ValueSize() int {
|
||||
return b.size
|
||||
@ -238,7 +245,7 @@ func (b *batch) Write() error {
|
||||
// Reset resets the batch for reuse.
|
||||
func (b *batch) Reset() {
|
||||
b.writes = b.writes[:0]
|
||||
b.size = 0
|
||||
b.keys, b.size = 0, 0
|
||||
}
|
||||
|
||||
// Replay replays the batch contents.
|
||||
|
Reference in New Issue
Block a user