From 55f276da457e36ccad05b49108cada5b198f089e Mon Sep 17 00:00:00 2001 From: nischit Date: Tue, 28 Apr 2026 07:30:54 +0545 Subject: [PATCH] reorg loop fix --- internal/libs/clickhouse.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/internal/libs/clickhouse.go b/internal/libs/clickhouse.go index 1e1aab8..63baaea 100644 --- a/internal/libs/clickhouse.go +++ b/internal/libs/clickhouse.go @@ -180,7 +180,7 @@ func GetBlockHeadersForReorgCheck(chainId uint64, startBlockNumber uint64, endBl length := endBlockNumber - startBlockNumber + 1 blocksRaw := make([]*common.Block, length) - query := fmt.Sprintf("SELECT chain_id, block_number, hash, parent_hash FROM %s.blocks WHERE chain_id = %d AND block_number BETWEEN %d AND %d order by block_number", + query := fmt.Sprintf("SELECT chain_id, block_number, hash, parent_hash FROM %s.blocks FINAL WHERE chain_id = %d AND block_number BETWEEN %d AND %d order by block_number", config.Cfg.CommitterClickhouseDatabase, chainId, startBlockNumber, @@ -414,8 +414,10 @@ func GetTransactionMismatchRangeFromClickHouseV2(chainId uint64, startBlockNumbe } // Aggregate transaction counts per block from the transactions table. + // FINAL collapses ReplacingMergeTree duplicates per primary key so that + // stale (pre-reorg) rows and tombstones don't inflate the count. query := fmt.Sprintf( - "SELECT block_number, count() AS tx_count FROM %s.transactions WHERE chain_id = %d AND block_number BETWEEN %d AND %d GROUP BY block_number ORDER BY block_number", + "SELECT block_number, count() AS tx_count FROM %s.transactions FINAL WHERE chain_id = %d AND block_number BETWEEN %d AND %d GROUP BY block_number ORDER BY block_number", config.Cfg.CommitterClickhouseDatabase, chainId, startBlockNumber, @@ -491,8 +493,10 @@ func GetLogsMismatchRangeFromClickHouseV2(chainId uint64, startBlockNumber uint6 } // Aggregate log counts and max log_index per block from the logs table. + // FINAL collapses ReplacingMergeTree duplicates per primary key so that + // stale (pre-reorg) rows and tombstones don't inflate the count. query := fmt.Sprintf( - "SELECT block_number, count() AS log_count, max(log_index) AS max_log_index FROM %s.logs WHERE chain_id = %d AND block_number BETWEEN %d AND %d GROUP BY block_number ORDER BY block_number", + "SELECT block_number, count() AS log_count, max(log_index) AS max_log_index FROM %s.logs FINAL WHERE chain_id = %d AND block_number BETWEEN %d AND %d GROUP BY block_number ORDER BY block_number", config.Cfg.CommitterClickhouseDatabase, chainId, startBlockNumber, @@ -560,7 +564,7 @@ func getBlocksFromV2(chainId uint64, startBlockNumber uint64, endBlockNumber uin length := endBlockNumber - startBlockNumber + 1 blocksRaw := make([]common.Block, length) - query := fmt.Sprintf("SELECT %s FROM %s.blocks WHERE chain_id = %d AND block_number BETWEEN %d AND %d order by block_number", + query := fmt.Sprintf("SELECT %s FROM %s.blocks FINAL WHERE chain_id = %d AND block_number BETWEEN %d AND %d order by block_number", strings.Join(defaultBlockFields, ", "), config.Cfg.CommitterClickhouseDatabase, chainId,