diff --git a/packages/beacon-node/src/chain/archiveStore/utils/archiveBlocks.ts b/packages/beacon-node/src/chain/archiveStore/utils/archiveBlocks.ts index 2c41132e6100..82dbad6a4f4d 100644 --- a/packages/beacon-node/src/chain/archiveStore/utils/archiveBlocks.ts +++ b/packages/beacon-node/src/chain/archiveStore/utils/archiveBlocks.ts @@ -5,7 +5,7 @@ import {IForkChoice} from "@lodestar/fork-choice"; import {ForkSeq, SLOTS_PER_EPOCH} from "@lodestar/params"; import {computeEpochAtSlot, computeStartSlotAtEpoch} from "@lodestar/state-transition"; import {Epoch, RootHex, Slot} from "@lodestar/types"; -import {Logger, fromHex, toRootHex} from "@lodestar/utils"; +import {Logger, fromHex, prettyPrintIndices, toRootHex} from "@lodestar/utils"; import {IBeaconDb} from "../../../db/index.js"; import {BlockArchiveBatchPutBinaryItem} from "../../../db/repositories/index.js"; import {ensureDir, writeIfNotExist} from "../../../util/file.js"; @@ -174,20 +174,21 @@ export async function archiveBlocks( ); const dataColumnSidecarsMinEpoch = currentEpoch - dataColumnSidecarsArchiveWindow; if (dataColumnSidecarsMinEpoch >= config.FULU_FORK_EPOCH) { - const slotsToDelete = ( - await db.dataColumnSidecarArchive.keys({ - lt: db.dataColumnSidecarArchive.getMaxKeyRaw(computeStartSlotAtEpoch(dataColumnSidecarsMinEpoch)), - }) - ).map((p) => p.prefix); - + const prefixedKeys = await db.dataColumnSidecarArchive.keys({ + lt: db.dataColumnSidecarArchive.getMaxKeyRaw(computeStartSlotAtEpoch(dataColumnSidecarsMinEpoch)), + }); + // for each slot there could be multiple dataColumnSidecar, so we need to deduplicate it + const slotsToDelete = [...new Set(prefixedKeys.map(({prefix}) => prefix))].sort((a, b) => a - b); if (slotsToDelete.length > 0) { await db.dataColumnSidecarArchive.deleteMany(slotsToDelete); - logger.verbose(`dataColumnSidecars prune: batchDelete range ${slotsToDelete[0]}..${slotsToDelete.at(-1)}`); + `dataColumnSidecars prune slotRange=${prettyPrintIndices(slotsToDelete)}, numOfSlots=${slotsToDelete.length} totalNumOfSidecars=${prefixedKeys.length}`; } else { logger.verbose(`dataColumnSidecars prune: no entries before epoch ${dataColumnSidecarsMinEpoch}`); } } else { - logger.verbose(`dataColumnSidecars pruning skipped: ${dataColumnSidecarsMinEpoch} is before fulu fork epoch`); + logger.verbose( + `dataColumnSidecars pruning skipped: ${dataColumnSidecarsMinEpoch} is before fulu fork epoch ${config.FULU_FORK_EPOCH}` + ); } } else { logger.verbose("dataColumnSidecars pruning skipped: archiveDataEpochs set to Infinity");