diff --git a/app/lib/blockchain/DuniterBlockchain.ts b/app/lib/blockchain/DuniterBlockchain.ts index 08015ba1bdbb3ea9e4233120fff4bf195178f032..1d68dd89f053981da44a860752b4da7c2bfc9f6c 100644 --- a/app/lib/blockchain/DuniterBlockchain.ts +++ b/app/lib/blockchain/DuniterBlockchain.ts @@ -239,13 +239,7 @@ export class DuniterBlockchain { await this.updateWallets(indexes.sindex, indexes.dividends, dal) if (trim) { - const TAIL = await dal.bindexDAL.tail(); - const MAX_BINDEX_SIZE = requiredBindexSizeForTail(TAIL, conf) - const currentSize = indexes.HEAD.number - TAIL.number + 1 - if (currentSize > MAX_BINDEX_SIZE) { - await dal.archiveBlocks() - await dal.trimIndexes(indexes.HEAD.number - MAX_BINDEX_SIZE); - } + await DuniterBlockchain.trimIndexes(dal, indexes.HEAD, conf) } const dbb = DBBlock.fromBlockDTO(block) @@ -573,6 +567,15 @@ export class DuniterBlockchain { throw err; } } + + public static async trimIndexes(dal: FileDAL, HEAD: { number: number }, conf: ConfDTO) { + const TAIL = await dal.bindexDAL.tail(); + const MAX_BINDEX_SIZE = requiredBindexSizeForTail(TAIL, conf) + const currentSize = HEAD.number - TAIL.number + 1 + if (currentSize > MAX_BINDEX_SIZE) { + await dal.trimIndexes(HEAD.number - MAX_BINDEX_SIZE); + } + } } export function requiredBindexSizeForTail(TAIL: { issuersCount: number, issuersFrame: number }, conf: { medianTimeBlocks: number, dtDiffEval: number, forksize: number }) { diff --git a/app/modules/dump.ts b/app/modules/dump.ts index 30d3364997bf0be6b4165e5dc5d8f3d0baae7c5f..d90a6d16589f8a9664d0570494a41517bcb22d97 100644 --- a/app/modules/dump.ts +++ b/app/modules/dump.ts @@ -76,6 +76,18 @@ module.exports = { // Save DB await server.disconnect(); } + }, { + name: 'trim-indexes', + desc: 'Force trimming of indexes', + logs: true, + preventIfRunning: true, + + onConfiguredExecute: async (server:Server) => { + await server.dal.init(server.conf) + await server.BlockchainService.trimIndexes() + // Save DB + await server.disconnect(); + } }, { name: 'dump [what] [name] [cond]', desc: 'Dumps data of the blockchain.', diff --git a/app/service/BlockchainService.ts b/app/service/BlockchainService.ts index ccd46bd069ebd7d0574e5a5fd0f7658aa149210b..e159bed2758990bd5f749ad1ddd652e19912e160 100644 --- a/app/service/BlockchainService.ts +++ b/app/service/BlockchainService.ts @@ -459,4 +459,10 @@ export class BlockchainService extends FIFOService { return this.dal.getBlocksBetween(from, from + count - 1); } + async trimIndexes() { + const HEAD = await this.dal.getCurrentBlockOrNull() + if (HEAD) { + return DuniterBlockchain.trimIndexes(this.dal, HEAD, this.conf) + } + } }