Skip to content
This repository was archived by the owner on Jun 11, 2024. It is now read-only.

Commit 4379e3e

Browse files
committed
Optimize implementation
1 parent 60cdb3c commit 4379e3e

File tree

1 file changed

+40
-3
lines changed

1 file changed

+40
-3
lines changed

services/blockchain-indexer/shared/indexer/genesisBlock.js

+40-3
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ const getAccountBalancesTable = () => getTableInstance(accountBalancesTableSchem
4848
const getCommissionsTable = () => getTableInstance(commissionsTableSchema, MYSQL_ENDPOINT);
4949

5050
let intervalTimeout;
51+
const genesisAccountBalances = [];
5152

5253
const getGenesisAssetIntervalTimeout = () => intervalTimeout;
5354

@@ -67,14 +68,13 @@ const indexTokenModuleAssets = async dbTrx => {
6768
const userSubStoreInfos = tokenModuleData[MODULE_SUB_STORE.TOKEN.USER];
6869
const tokenIDLockedAmountChangeMap = {};
6970

70-
const accountBalancesTable = await getAccountBalancesTable();
7171
// eslint-disable-next-line no-restricted-syntax
7272
for (const userInfo of userSubStoreInfos) {
7373
const { address, availableBalance: balance, tokenID } = userInfo;
7474

75-
// Index account balance
75+
// Add entry to index the genesis account's balance
7676
const accountBalanceEntry = { address, tokenID, balance };
77-
await accountBalancesTable.upsert(accountBalanceEntry, dbTrx);
77+
genesisAccountBalances.push(accountBalanceEntry);
7878

7979
// eslint-disable-next-line no-restricted-syntax
8080
for (const lockedBalance of userInfo.lockedBalances) {
@@ -210,6 +210,43 @@ const indexGenesisBlockAssets = async dbTrx => {
210210
logger.info('Finished indexing all the genesis assets.');
211211
};
212212

213+
let indexedGenesisAccountBalances;
214+
const interval = setInterval(async () => {
215+
try {
216+
if (genesisAccountBalances.length) {
217+
if (indexedGenesisAccountBalances === false) return;
218+
} else {
219+
if (indexedGenesisAccountBalances === true) clearInterval(interval);
220+
return;
221+
}
222+
indexedGenesisAccountBalances = false;
223+
224+
logger.info('Started indexing genesis account balances.');
225+
let numEntries = 0;
226+
const accountBalancesTable = await getAccountBalancesTable();
227+
while (genesisAccountBalances.length) {
228+
const accountBalanceEntry = genesisAccountBalances.shift();
229+
await accountBalancesTable
230+
.upsert(accountBalanceEntry)
231+
.then(() => {
232+
numEntries++;
233+
})
234+
.catch(err => {
235+
numEntries--;
236+
genesisAccountBalances.push(accountBalanceEntry);
237+
logger.warn(
238+
`Updating account balance for ${accountBalanceEntry.address} failed. Will retry.\nError: ${err.message}`,
239+
);
240+
});
241+
}
242+
243+
indexedGenesisAccountBalances = true;
244+
logger.info(`Finished indexing genesis account balances. Added ${numEntries} entries.`);
245+
} catch (_) {
246+
// No actions required
247+
}
248+
}, 5 * 60 * 1000);
249+
213250
module.exports = {
214251
getGenesisAssetIntervalTimeout,
215252
indexGenesisBlockAssets,

0 commit comments

Comments
 (0)