mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-22 20:56:42 +00:00
core/rawdb: fill in the missing method
Signed-off-by: jsvisa <delweng@gmail.com>
This commit is contained in:
parent
32884e0b43
commit
6bfd8dff52
4 changed files with 38 additions and 0 deletions
|
|
@ -403,6 +403,10 @@ func (f *chainFreezer) AncientRange(kind string, start, count, maxBytes uint64)
|
|||
return f.ancients.AncientRange(kind, start, count, maxBytes)
|
||||
}
|
||||
|
||||
func (f *chainFreezer) AncientBytes(kind string, item, offset, length uint64) ([]byte, error) {
|
||||
return f.ancients.AncientBytes(kind, item, offset, length)
|
||||
}
|
||||
|
||||
func (f *chainFreezer) ModifyAncients(fn func(ethdb.AncientWriteOp) error) (int64, error) {
|
||||
return f.ancients.ModifyAncients(fn)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -100,6 +100,11 @@ func (db *nofreezedb) AncientRange(kind string, start, max, maxByteSize uint64)
|
|||
return nil, errNotSupported
|
||||
}
|
||||
|
||||
// AncientBytes retrieves a byte range [offset:offset+length] from the specified ancient item.
|
||||
func (db *nofreezedb) AncientBytes(kind string, item, offset, length uint64) ([]byte, error) {
|
||||
return nil, errNotSupported
|
||||
}
|
||||
|
||||
// Ancients returns an error as we don't have a backing chain freezer.
|
||||
func (db *nofreezedb) Ancients() (uint64, error) {
|
||||
return 0, errNotSupported
|
||||
|
|
|
|||
|
|
@ -412,3 +412,26 @@ func (f *MemoryFreezer) Reset() error {
|
|||
func (f *MemoryFreezer) AncientDatadir() (string, error) {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
// AncientBytes retrieves a byte range [offset:offset+length] from the specified ancient item in memory.
|
||||
func (f *MemoryFreezer) AncientBytes(kind string, item, offset, length uint64) ([]byte, error) {
|
||||
f.lock.RLock()
|
||||
defer f.lock.RUnlock()
|
||||
|
||||
table := f.tables[kind]
|
||||
if table == nil {
|
||||
return nil, errUnknownTable
|
||||
}
|
||||
entries, err := table.retrieve(item, 1, 0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(entries) == 0 {
|
||||
return nil, errOutOfBounds
|
||||
}
|
||||
data := entries[0]
|
||||
if offset > uint64(len(data)) || offset+length > uint64(len(data)) {
|
||||
return nil, fmt.Errorf("requested range out of bounds: item size %d, offset %d, length %d", len(data), offset, length)
|
||||
}
|
||||
return data[offset : offset+length], nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,6 +62,12 @@ func (t *table) AncientRange(kind string, start, count, maxBytes uint64) ([][]by
|
|||
return t.db.AncientRange(kind, start, count, maxBytes)
|
||||
}
|
||||
|
||||
// AncientBytes is a noop passthrough that just forwards the request to the underlying
|
||||
// database.
|
||||
func (t *table) AncientBytes(kind string, item, offset, length uint64) ([]byte, error) {
|
||||
return t.db.AncientBytes(kind, item, offset, length)
|
||||
}
|
||||
|
||||
// Ancients is a noop passthrough that just forwards the request to the underlying
|
||||
// database.
|
||||
func (t *table) Ancients() (uint64, error) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue