From f74ec5a8eacd49d38d4466ad85772a40745d4865 Mon Sep 17 00:00:00 2001 From: Sameer Kumar Subudhi Date: Sat, 28 Oct 2023 12:37:37 +0200 Subject: [PATCH] :bug: Fix indexTokenBalances --- services/blockchain-indexer/config.js | 7 +++++++ .../shared/indexer/accountBalanceIndex.js | 9 +++------ .../shared/indexer/genesisBlock.js | 16 ++++++++++++++-- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/services/blockchain-indexer/config.js b/services/blockchain-indexer/config.js index d6abc66576..32d313b4a2 100644 --- a/services/blockchain-indexer/config.js +++ b/services/blockchain-indexer/config.js @@ -110,6 +110,13 @@ config.queue = { }, }; +config.set = { + accountBalanceUpdate: { + name: 'AccountBalanceUpdate', + batchSize: 1000, + }, +}; + config.operations = { isDataRetrievalModeEnabled: Boolean( String(process.env.ENABLE_DATA_RETRIEVAL_MODE).toLowerCase() !== 'false', diff --git a/services/blockchain-indexer/shared/indexer/accountBalanceIndex.js b/services/blockchain-indexer/shared/indexer/accountBalanceIndex.js index 48ff5291a0..52ce7ad70c 100644 --- a/services/blockchain-indexer/shared/indexer/accountBalanceIndex.js +++ b/services/blockchain-indexer/shared/indexer/accountBalanceIndex.js @@ -32,9 +32,6 @@ const redis = new Redis(config.endpoints.cache); const MYSQL_ENDPOINT = config.endpoints.mysql; -const ACCOUNTS_BALANCE_UPDATE_SET_NAME = 'AccountsBalanceUpdate'; -const MAX_ACCOUNT_COUNT_IN_ONE_EXECUTION = 1000; // 1e3 - const getAccountBalancesTable = () => getTableInstance(accountBalancesTableSchema, MYSQL_ENDPOINT); const updateAccountBalances = async address => { @@ -53,7 +50,7 @@ const updateAccountBalances = async address => { const scheduleAddressesBalanceUpdate = async addresses => { if (addresses.length) { - redis.sadd(ACCOUNTS_BALANCE_UPDATE_SET_NAME, addresses); + redis.sadd(config.set.accountBalanceUpdate.name, addresses); } }; @@ -79,8 +76,8 @@ const getAddressesFromTokenEvents = events => { const triggerAccountsBalanceUpdate = async () => { const addresses = await redis.spop( - ACCOUNTS_BALANCE_UPDATE_SET_NAME, - MAX_ACCOUNT_COUNT_IN_ONE_EXECUTION, + config.set.accountBalanceUpdate.name, + config.set.accountBalanceUpdate.batchSize, ); try { diff --git a/services/blockchain-indexer/shared/indexer/genesisBlock.js b/services/blockchain-indexer/shared/indexer/genesisBlock.js index 824a323b66..b38475b957 100644 --- a/services/blockchain-indexer/shared/indexer/genesisBlock.js +++ b/services/blockchain-indexer/shared/indexer/genesisBlock.js @@ -18,12 +18,13 @@ const { MySQL: { getTableInstance }, }, Signals, + Logger, } = require('lisk-service-framework'); const { MODULE, MODULE_SUB_STORE, getGenesisHeight } = require('../constants'); const { updateTotalStake, updateTotalSelfStake } = require('./transactionProcessor/pos/stake'); const { requestConnector } = require('../utils/request'); -const { accountBalanceIndexQueue } = require('./accountBalanceIndex'); +const { updateAccountBalances } = require('./accountBalanceIndex'); const { updateTotalLockedAmounts } = require('./utils/blockchainIndex'); const requestAll = require('../utils/requestAll'); @@ -31,6 +32,8 @@ const config = require('../../config'); const commissionsTableSchema = require('../database/schema/commissions'); const { getIndexStats } = require('./indexStatus'); +const logger = Logger(); + const MYSQL_ENDPOINT = config.endpoints.mysql; const getCommissionsTable = () => getTableInstance(commissionsTableSchema, MYSQL_ENDPOINT); @@ -144,7 +147,16 @@ const indexGenesisBlockAssets = async dbTrx => { }; const indexTokenBalances = async () => { - allAccountsAddresses.forEach(async address => accountBalanceIndexQueue.add({ address })); + // eslint-disable-next-line no-restricted-syntax + for (const address of allAccountsAddresses) { + await updateAccountBalances(address).catch(err => { + const errorMessage = `Updating account balance for ${address} failed. Retrying.\nError: ${err.message}.`; + logger.warn(errorMessage); + logger.debug(err.stack); + + allAccountsAddresses.push(address); + }); + } isTokensBalanceIndexed = true; };