forked from cerc-io/plugeth
ethdb/pebble: fix range compaction (#26771)
* ethdb/pebble: fix range compaction * ethdb/pebble: add comment
This commit is contained in:
parent
2ea48f8a22
commit
98b0ea62b5
@ -20,6 +20,7 @@
|
|||||||
package pebble
|
package pebble
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"runtime"
|
"runtime"
|
||||||
"sync"
|
"sync"
|
||||||
@ -361,6 +362,17 @@ func (d *Database) Stat(property string) (string, error) {
|
|||||||
// is treated as a key after all keys in the data store. If both is nil then it
|
// is treated as a key after all keys in the data store. If both is nil then it
|
||||||
// will compact entire data store.
|
// will compact entire data store.
|
||||||
func (d *Database) Compact(start []byte, limit []byte) error {
|
func (d *Database) Compact(start []byte, limit []byte) error {
|
||||||
|
// There is no special flag to represent the end of key range
|
||||||
|
// in pebble(nil in leveldb). Use an ugly hack to construct a
|
||||||
|
// large key to represent it.
|
||||||
|
// Note any prefixed database entry will be smaller than this
|
||||||
|
// flag, as for trie nodes we need the 32 byte 0xff because
|
||||||
|
// there might be a shared prefix starting with a number of
|
||||||
|
// 0xff-s, so 32 ensures than only a hash collision could touch it.
|
||||||
|
// https://github.com/cockroachdb/pebble/issues/2359#issuecomment-1443995833
|
||||||
|
if limit == nil {
|
||||||
|
limit = bytes.Repeat([]byte{0xff}, 32)
|
||||||
|
}
|
||||||
return d.db.Compact(start, limit, true) // Parallelization is preferred
|
return d.db.Compact(start, limit, true) // Parallelization is preferred
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user