mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-25 06:06:44 +00:00
triedb/pathdb: get rid of min field
This commit is contained in:
parent
03d507dc37
commit
297cebdd38
3 changed files with 21 additions and 22 deletions
|
|
@ -37,7 +37,6 @@ func parseIndex(blob []byte) ([]*indexBlockDesc, error) {
|
||||||
}
|
}
|
||||||
var (
|
var (
|
||||||
lastID uint32
|
lastID uint32
|
||||||
lastMax uint64
|
|
||||||
descList []*indexBlockDesc
|
descList []*indexBlockDesc
|
||||||
)
|
)
|
||||||
for i := 0; i < len(blob)/indexBlockDescSize; i++ {
|
for i := 0; i < len(blob)/indexBlockDescSize; i++ {
|
||||||
|
|
@ -46,19 +45,23 @@ func parseIndex(blob []byte) ([]*indexBlockDesc, error) {
|
||||||
if desc.empty() {
|
if desc.empty() {
|
||||||
return nil, errors.New("empty state history index block")
|
return nil, errors.New("empty state history index block")
|
||||||
}
|
}
|
||||||
if desc.min > desc.max {
|
|
||||||
return nil, fmt.Errorf("indexBlockDesc: min %d > max %d", desc.min, desc.max)
|
|
||||||
}
|
|
||||||
if lastID != 0 {
|
if lastID != 0 {
|
||||||
if lastID+1 != desc.id {
|
if lastID+1 != desc.id {
|
||||||
return nil, fmt.Errorf("index block id is out of order, last-id: %d, this-id: %d", lastID, desc.id)
|
return nil, fmt.Errorf("index block id is out of order, last-id: %d, this-id: %d", lastID, desc.id)
|
||||||
}
|
}
|
||||||
if desc.min <= lastMax {
|
// Theoretically, order should be validated between consecutive index blocks,
|
||||||
|
// ensuring that elements within them are strictly ordered. However, since
|
||||||
|
// tracking the minimum element in each block has non-trivial storage overhead,
|
||||||
|
// this check is optimistically omitted.
|
||||||
|
//
|
||||||
|
// TODO(rjl493456442) the minimal element can be resolved from the index block,
|
||||||
|
// evaluate the check cost (mostly IO overhead).
|
||||||
|
|
||||||
|
/* if desc.min <= lastMax {
|
||||||
return nil, fmt.Errorf("index block range is out of order, last-max: %d, this-min: %d", lastMax, desc.min)
|
return nil, fmt.Errorf("index block range is out of order, last-max: %d, this-min: %d", lastMax, desc.min)
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
lastID = desc.id
|
lastID = desc.id
|
||||||
lastMax = desc.max
|
|
||||||
descList = append(descList, &desc)
|
descList = append(descList, &desc)
|
||||||
}
|
}
|
||||||
return descList, nil
|
return descList, nil
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
indexBlockDescSize = 22 // The size of index block descriptor
|
indexBlockDescSize = 14 // The size of index block descriptor
|
||||||
indexBlockEntriesCap = 4096 // The maximum number of entries can be grouped in a block
|
indexBlockEntriesCap = 4096 // The maximum number of entries can be grouped in a block
|
||||||
indexBlockRestartLen = 256 // The restart interval length of index block
|
indexBlockRestartLen = 256 // The restart interval length of index block
|
||||||
historyIndexBatch = 65536 // The number of state histories for constructing or deleting indexes together
|
historyIndexBatch = 65536 // The number of state histories for constructing or deleting indexes together
|
||||||
|
|
@ -35,7 +35,6 @@ const (
|
||||||
// list of state mutation records associated with a specific state (either an
|
// list of state mutation records associated with a specific state (either an
|
||||||
// account or a storage slot).
|
// account or a storage slot).
|
||||||
type indexBlockDesc struct {
|
type indexBlockDesc struct {
|
||||||
min uint64 // The minimum state ID retained within the block
|
|
||||||
max uint64 // The maximum state ID retained within the block
|
max uint64 // The maximum state ID retained within the block
|
||||||
entries uint16 // The number of state mutation records retained within the block
|
entries uint16 // The number of state mutation records retained within the block
|
||||||
id uint32 // The id of the index block
|
id uint32 // The id of the index block
|
||||||
|
|
@ -59,19 +58,17 @@ func (d *indexBlockDesc) full() bool {
|
||||||
// encode packs index block descriptor into byte stream.
|
// encode packs index block descriptor into byte stream.
|
||||||
func (d *indexBlockDesc) encode() []byte {
|
func (d *indexBlockDesc) encode() []byte {
|
||||||
var buf [indexBlockDescSize]byte
|
var buf [indexBlockDescSize]byte
|
||||||
binary.BigEndian.PutUint64(buf[:8], d.min)
|
binary.BigEndian.PutUint64(buf[0:8], d.max)
|
||||||
binary.BigEndian.PutUint64(buf[8:16], d.max)
|
binary.BigEndian.PutUint16(buf[8:10], d.entries)
|
||||||
binary.BigEndian.PutUint16(buf[16:18], d.entries)
|
binary.BigEndian.PutUint32(buf[10:14], d.id)
|
||||||
binary.BigEndian.PutUint32(buf[18:22], d.id)
|
|
||||||
return buf[:]
|
return buf[:]
|
||||||
}
|
}
|
||||||
|
|
||||||
// decode unpacks index block descriptor from byte stream.
|
// decode unpacks index block descriptor from byte stream.
|
||||||
func (d *indexBlockDesc) decode(blob []byte) {
|
func (d *indexBlockDesc) decode(blob []byte) {
|
||||||
d.min = binary.BigEndian.Uint64(blob[:8])
|
d.max = binary.BigEndian.Uint64(blob[:8])
|
||||||
d.max = binary.BigEndian.Uint64(blob[8:16])
|
d.entries = binary.BigEndian.Uint16(blob[8:10])
|
||||||
d.entries = binary.BigEndian.Uint16(blob[16:18])
|
d.id = binary.BigEndian.Uint32(blob[10:14])
|
||||||
d.id = binary.BigEndian.Uint32(blob[18:22])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseIndexBlock parses the index block with the supplied byte stream.
|
// parseIndexBlock parses the index block with the supplied byte stream.
|
||||||
|
|
@ -287,9 +284,9 @@ func (b *blockWriter) append(id uint64) error {
|
||||||
b.desc.entries++
|
b.desc.entries++
|
||||||
|
|
||||||
// The state history ID must be greater than 0.
|
// The state history ID must be greater than 0.
|
||||||
if b.desc.min == 0 {
|
//if b.desc.min == 0 {
|
||||||
b.desc.min = id
|
// b.desc.min = id
|
||||||
}
|
//}
|
||||||
b.desc.max = id
|
b.desc.max = id
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
@ -357,7 +354,7 @@ func (b *blockWriter) pop(id uint64) error {
|
||||||
}
|
}
|
||||||
// If there is only one entry left, the entire block should be reset
|
// If there is only one entry left, the entire block should be reset
|
||||||
if b.desc.entries == 1 {
|
if b.desc.entries == 1 {
|
||||||
b.desc.min = 0
|
//b.desc.min = 0
|
||||||
b.desc.max = 0
|
b.desc.max = 0
|
||||||
b.desc.entries = 0
|
b.desc.entries = 0
|
||||||
b.restarts = nil
|
b.restarts = nil
|
||||||
|
|
|
||||||
|
|
@ -155,7 +155,6 @@ func TestBlcokWriterDeleteWithData(t *testing.T) {
|
||||||
// Re-construct the block writer with data
|
// Re-construct the block writer with data
|
||||||
desc := &indexBlockDesc{
|
desc := &indexBlockDesc{
|
||||||
id: 0,
|
id: 0,
|
||||||
min: 1,
|
|
||||||
max: 20,
|
max: 20,
|
||||||
entries: 5,
|
entries: 5,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue