erigon-pulse/cl/persistence/raw_block_saver.go
Giulio rebuffo c477281362
Caplin: Parallel historical states reconstruction (#8817)
What does this PR do:
* Optional Backfilling and Caplin Archive Node
* Create antiquary for historical states
* Fixed gaps of chain gap related to the Head of the chain and anchor of
the chain.
* Added basic reader object to Read the Historical state
2023-12-06 10:48:36 +01:00

53 lines
1.5 KiB
Go

package persistence
import (
"context"
"io"
"os"
"sync"
libcommon "github.com/ledgerwatch/erigon-lib/common"
"github.com/ledgerwatch/erigon/cl/clparams"
"github.com/spf13/afero"
"go.uber.org/zap/buffer"
)
var bPool = sync.Pool{
New: func() interface{} {
return &buffer.Buffer{}
},
}
type aferoRawBeaconBlockChain struct {
fs afero.Fs
cfg *clparams.BeaconChainConfig
}
func NewAferoRawBlockSaver(fs afero.Fs, cfg *clparams.BeaconChainConfig) RawBeaconBlockChain {
return aferoRawBeaconBlockChain{
fs: fs,
cfg: cfg,
}
}
func AferoRawBeaconBlockChainFromOsPath(cfg *clparams.BeaconChainConfig, path string) (RawBeaconBlockChain, afero.Fs) {
dataDirFs := afero.NewBasePathFs(afero.NewOsFs(), path)
return NewAferoRawBlockSaver(dataDirFs, cfg), dataDirFs
}
func (a aferoRawBeaconBlockChain) BlockWriter(ctx context.Context, slot uint64, blockRoot libcommon.Hash) (io.WriteCloser, error) {
folderPath, path := rootToPaths(slot, blockRoot, a.cfg)
_ = a.fs.MkdirAll(folderPath, 0o755)
return a.fs.OpenFile(path, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0o755)
}
func (a aferoRawBeaconBlockChain) BlockReader(ctx context.Context, slot uint64, blockRoot libcommon.Hash) (io.ReadCloser, error) {
_, path := rootToPaths(slot, blockRoot, a.cfg)
return a.fs.OpenFile(path, os.O_RDONLY, 0o755)
}
func (a aferoRawBeaconBlockChain) DeleteBlock(ctx context.Context, slot uint64, blockRoot libcommon.Hash) error {
_, path := rootToPaths(slot, blockRoot, a.cfg)
return a.fs.Remove(path)
}