Skip to content

Commit

Permalink
feat: allow blob archival for bigger time periods (#6393)
Browse files Browse the repository at this point in the history
* feat: allow blob archival for bigger time periods

* fix spellcheck and spellings

* change cli flag and desc
  • Loading branch information
g11tech committed Feb 16, 2024
1 parent 0e01efd commit 6a68b1e
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 13 deletions.
31 changes: 19 additions & 12 deletions packages/beacon-node/src/chain/archiver/archiveBlocks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ export async function archiveBlocks(
lightclientServer: LightClientServer,
logger: Logger,
finalizedCheckpoint: CheckpointHex,
currentEpoch: Epoch
currentEpoch: Epoch,
archiveBlobEpochs?: number
): Promise<void> {
// Use fork choice to determine the blocks to archive and delete
// getAllAncestorBlocks response includes the finalized block, so it's also moved to the cold db
Expand Down Expand Up @@ -81,19 +82,25 @@ export async function archiveBlocks(
}

// Delete expired blobs
// Keep only `[max(GENESIS_EPOCH, current_epoch - MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS), current_epoch]`
// Keep only `[current_epoch - max(MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS, archiveBlobEpochs)]
// if archiveBlobEpochs set to Infinity do not prune`
if (finalizedPostDeneb) {
const blobSidecarsMinEpoch = currentEpoch - config.MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS;
if (blobSidecarsMinEpoch >= config.DENEB_FORK_EPOCH) {
const slotsToDelete = await db.blobSidecarsArchive.keys({lt: computeStartSlotAtEpoch(blobSidecarsMinEpoch)});
if (slotsToDelete.length > 0) {
await db.blobSidecarsArchive.batchDelete(slotsToDelete);
logger.verbose(
`blobSidecars prune: batchDelete range ${slotsToDelete[0]}..${slotsToDelete[slotsToDelete.length - 1]}`
);
} else {
logger.verbose(`blobSidecars prune: no entries before epoch ${blobSidecarsMinEpoch}`);
if (archiveBlobEpochs !== Infinity) {
const blobsArchiveWindow = Math.max(config.MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS, archiveBlobEpochs ?? 0);
const blobSidecarsMinEpoch = currentEpoch - blobsArchiveWindow;
if (blobSidecarsMinEpoch >= config.DENEB_FORK_EPOCH) {
const slotsToDelete = await db.blobSidecarsArchive.keys({lt: computeStartSlotAtEpoch(blobSidecarsMinEpoch)});
if (slotsToDelete.length > 0) {
await db.blobSidecarsArchive.batchDelete(slotsToDelete);
logger.verbose(
`blobSidecars prune: batchDelete range ${slotsToDelete[0]}..${slotsToDelete[slotsToDelete.length - 1]}`
);
} else {
logger.verbose(`blobSidecars prune: no entries before epoch ${blobSidecarsMinEpoch}`);
}
}
} else {
logger.verbose("blobSidecars pruning skipped: archiveBlobEpochs set to Infinity");
}
}

Expand Down
6 changes: 5 additions & 1 deletion packages/beacon-node/src/chain/archiver/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ const PROCESS_FINALIZED_CHECKPOINT_QUEUE_LEN = 256;

export type ArchiverOpts = StatesArchiverOpts & {
disableArchiveOnCheckpoint?: boolean;
archiveBlobEpochs?: number;
};

type ProposalStats = {
Expand All @@ -37,6 +38,7 @@ export class Archiver {

private prevFinalized: CheckpointWithHex;
private readonly statesArchiver: StatesArchiver;
private archiveBlobEpochs?: number;

constructor(
private readonly db: IBeaconDb,
Expand All @@ -45,6 +47,7 @@ export class Archiver {
signal: AbortSignal,
opts: ArchiverOpts
) {
this.archiveBlobEpochs = opts.archiveBlobEpochs;
this.statesArchiver = new StatesArchiver(chain.regen, db, logger, opts);
this.prevFinalized = chain.forkChoice.getFinalizedCheckpoint();
this.jobQueue = new JobItemQueue<[CheckpointWithHex], void>(this.processFinalizedCheckpoint, {
Expand Down Expand Up @@ -96,7 +99,8 @@ export class Archiver {
this.chain.lightClientServer,
this.logger,
finalized,
this.chain.clock.currentEpoch
this.chain.clock.currentEpoch,
this.archiveBlobEpochs
);
this.prevFinalized = finalized;

Expand Down
1 change: 1 addition & 0 deletions packages/beacon-node/src/chain/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export type IChainOptions = BlockProcessOpts &
trustedSetup?: string;
broadcastValidationStrictness?: string;
minSameMessageSignatureSetsToBatch: number;
archiveBlobEpochs?: number;
};

export type BlockProcessOpts = {
Expand Down
8 changes: 8 additions & 0 deletions packages/cli/src/options/beaconNodeOptions/chain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ export type ChainArgs = {
broadcastValidationStrictness?: string;
"chain.minSameMessageSignatureSetsToBatch"?: number;
"chain.maxShufflingCacheEpochs"?: number;
"chain.archiveBlobEpochs"?: number;
};

export function parseArgs(args: ChainArgs): IBeaconNodeOptions["chain"] {
Expand Down Expand Up @@ -53,6 +54,7 @@ export function parseArgs(args: ChainArgs): IBeaconNodeOptions["chain"] {
minSameMessageSignatureSetsToBatch:
args["chain.minSameMessageSignatureSetsToBatch"] ?? defaultOptions.chain.minSameMessageSignatureSetsToBatch,
maxShufflingCacheEpochs: args["chain.maxShufflingCacheEpochs"] ?? defaultOptions.chain.maxShufflingCacheEpochs,
archiveBlobEpochs: args["chain.archiveBlobEpochs"],
};
}

Expand Down Expand Up @@ -212,4 +214,10 @@ Will double processing times. Use only for debugging purposes.",
default: defaultOptions.chain.maxShufflingCacheEpochs,
group: "chain",
},

"chain.archiveBlobEpochs": {
description: "Number of epochs to retain finalized blobs (minimum of MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS)",
type: "number",
group: "chain",
},
};
2 changes: 2 additions & 0 deletions packages/cli/test/unit/options/beaconNodeOptions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ describe("options / beaconNodeOptions", () => {
"chain.trustedSetup": "",
"chain.minSameMessageSignatureSetsToBatch": 32,
"chain.maxShufflingCacheEpochs": 100,
"chain.archiveBlobEpochs": 10000,
emitPayloadAttributes: false,

eth1: true,
Expand Down Expand Up @@ -139,6 +140,7 @@ describe("options / beaconNodeOptions", () => {
trustedSetup: "",
minSameMessageSignatureSetsToBatch: 32,
maxShufflingCacheEpochs: 100,
archiveBlobEpochs: 10000,
},
eth1: {
enabled: true,
Expand Down

0 comments on commit 6a68b1e

Please sign in to comment.