From 3a97296b700849035937f8a75799203c1ee8efc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wiktor=20Tkaczy=C5=84ski?= Date: Fri, 15 Mar 2024 13:22:32 +0100 Subject: [PATCH] fix: handle exceptions in nextEvents (#281) Previously if we encountered exception there it could result in entire app crashing. --- src/checkpoint.ts | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/checkpoint.ts b/src/checkpoint.ts index 8700b9e..4ff4c8f 100644 --- a/src/checkpoint.ts +++ b/src/checkpoint.ts @@ -335,18 +335,30 @@ export default class Checkpoint { return; } - const toBlock = Math.min(blockNum + BLOCK_PRELOAD, this.prefetchEndBlock); - const checkpoints = await this.networkProvider.getCheckpointsRange(blockNum, toBlock); + let nextBlock = blockNum; + try { + const toBlock = Math.min(blockNum + BLOCK_PRELOAD, this.prefetchEndBlock); + const checkpoints = await this.networkProvider.getCheckpointsRange(blockNum, toBlock); - await this.store.insertCheckpoints(checkpoints); - await this.store.setMetadata(MetadataId.LastPrefetchedBlock, toBlock); + await this.store.insertCheckpoints(checkpoints); + await this.store.setMetadata(MetadataId.LastPrefetchedBlock, toBlock); - this.log.info( - { blockNumber: blockNum, checkpointsLength: checkpoints.length }, - 'checkpoints inserted' - ); + this.log.info( + { blockNumber: blockNum, checkpointsLength: checkpoints.length }, + 'checkpoints inserted' + ); + + nextBlock = blockNum + BLOCK_PRELOAD + 1; + } catch (e) { + this.log.error( + { blockNumber: blockNum, err: e }, + 'error occurred during checkpoint fetching' + ); + + await Promise.delay(10000); + } - this.nextEvents(blockNum + BLOCK_PRELOAD + 1); + this.nextEvents(nextBlock); } private async next(blockNum: number) {