diff --git a/beacon-chain/db/kv/blocks.go b/beacon-chain/db/kv/blocks.go index afc7ef19e0e4..9162af4831b7 100644 --- a/beacon-chain/db/kv/blocks.go +++ b/beacon-chain/db/kv/blocks.go @@ -456,6 +456,18 @@ func (s *Store) DeleteHistoricalDataBeforeSlot(ctx context.Context, cutoffSlot p return nil } + // Remove the child from its parent's index before deleting the block itself. + // This keeps the parentRoot -> [children] index consistent during pruning. + if enc := tx.Bucket(blocksBucket).Get(sr.root[:]); enc != nil { + blk, uerr := unmarshalBlock(ctx, enc) + if uerr != nil { + return uerr + } + if derr := s.deleteMatchingParentIndex(tx, blk.Block().ParentRoot(), sr.root); derr != nil { + return derr + } + } + // Delete block if err = s.deleteBlock(tx, sr.root[:]); err != nil { return err diff --git a/changelog/Galoretka_db-kv-prune-parent-index-cleanup.md b/changelog/Galoretka_db-kv-prune-parent-index-cleanup.md new file mode 100644 index 000000000000..f1939d304c0c --- /dev/null +++ b/changelog/Galoretka_db-kv-prune-parent-index-cleanup.md @@ -0,0 +1,3 @@ +### Fixed + +- Remove pruned blocks from parent index during historical deletion