Implement beacon db pruner (#14687)

* implement weak subjectivity pruner

* fix goimports

* add delete before slot method to database

* add method to interface

* update changelog

* add flags

* wire pruner

* align pruner with backfill service

* rename db method

* fix imports

* delete block slot indices

* check for backfill and initial sync

* add tests

* fix imports

* Update beacon-chain/db/kv/blocks.go

Co-authored-by: Radosław Kapka <rkapka@wp.pl>

* Update cmd/beacon-chain/flags/base.go

Co-authored-by: Preston Van Loon <pvanloon@offchainlabs.com>

* Update beacon-chain/db/pruner/pruner.go

Co-authored-by: Radosław Kapka <rkapka@wp.pl>

* cleanup

* fix buildkite

* initialise atomic bool

* delete data from remaining buckets

* fix build

* fix build

* address review comments

* add test for blockParentRootIndicesBucket

* fix changelog

* fix build

* address kasey's comments

* fix build

* add trace span to blockRootsBySlotRange

---------

Co-authored-by: Radosław Kapka <rkapka@wp.pl>
Co-authored-by: Preston Van Loon <pvanloon@offchainlabs.com>
This commit is contained in:
Dhruv Bodani
2025-01-28 22:25:50 +05:30
committed by GitHub
parent 9cf6b93356
commit 4a9c60f75f
15 changed files with 776 additions and 53 deletions

View File

@@ -29,6 +29,7 @@ import (
"github.com/prysmaticlabs/prysm/v5/beacon-chain/db"
"github.com/prysmaticlabs/prysm/v5/beacon-chain/db/filesystem"
"github.com/prysmaticlabs/prysm/v5/beacon-chain/db/kv"
"github.com/prysmaticlabs/prysm/v5/beacon-chain/db/pruner"
"github.com/prysmaticlabs/prysm/v5/beacon-chain/db/slasherkv"
"github.com/prysmaticlabs/prysm/v5/beacon-chain/execution"
"github.com/prysmaticlabs/prysm/v5/beacon-chain/forkchoice"
@@ -369,6 +370,13 @@ func registerServices(cliCtx *cli.Context, beacon *BeaconNode, synchronizer *sta
}
}
if cliCtx.Bool(flags.BeaconDBPruning.Name) {
log.Debugln("Registering Pruner Service")
if err := beacon.registerPrunerService(cliCtx); err != nil {
return errors.Wrap(err, "could not register pruner service")
}
}
return nil
}
@@ -1089,6 +1097,34 @@ func (b *BeaconNode) registerBuilderService(cliCtx *cli.Context) error {
return b.services.RegisterService(svc)
}
func (b *BeaconNode) registerPrunerService(cliCtx *cli.Context) error {
genesisTimeUnix := params.BeaconConfig().MinGenesisTime + params.BeaconConfig().GenesisDelay
var backfillService *backfill.Service
if err := b.services.FetchService(&backfillService); err != nil {
return err
}
var opts []pruner.ServiceOption
if cliCtx.IsSet(flags.PrunerRetentionEpochs.Name) {
uv := cliCtx.Uint64(flags.PrunerRetentionEpochs.Name)
opts = append(opts, pruner.WithRetentionPeriod(primitives.Epoch(uv)))
}
p, err := pruner.New(
cliCtx.Context,
b.db,
genesisTimeUnix,
initSyncWaiter(cliCtx.Context, b.initialSyncComplete),
backfillService.WaitForCompletion,
opts...,
)
if err != nil {
return err
}
return b.services.RegisterService(p)
}
func (b *BeaconNode) RegisterBackfillService(cliCtx *cli.Context, bfs *backfill.Store) error {
pa := peers.NewAssigner(b.fetchP2P().Peers(), b.forkChoicer)
bf, err := backfill.NewService(cliCtx.Context, bfs, b.BlobStorage, b.clockWaiter, b.fetchP2P(), pa, b.BackfillOpts...)