Skip to content

Commit f1a596d

Browse files
committed
add retry function for insert db
1 parent fecc10e commit f1a596d

File tree

2 files changed

+40
-9
lines changed

2 files changed

+40
-9
lines changed

packages/ibc-routing/src/intepreters/handlers/common.handler.ts

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
import { isBase64, parseRpcEvents } from "../../utils/events";
2828
import { unmarshalOraiBridgeRoute } from "../../utils/marshal";
2929
import { decodeIbcMemo } from "../../utils/protobuf";
30+
import { retryFunc } from "../../utils/retry";
3031

3132
// EVM
3233
export const handleQuerySendToCosmosEvm = async (ctx: ContextIntepreter, event: AnyEventObject) => {
@@ -75,7 +76,9 @@ export const handleSendToCosmosEvm = async (ctx: ContextIntepreter, event: AnyEv
7576
// this context data will be used for querying in the next state
7677
ctx.evmChainPrefixOnLeftTraverseOrder = evmChainPrefix;
7778
ctx.evmEventNonce = sendToCosmosData.eventNonce;
78-
await ctx.db.insert(DatabaseEnum.Evm, sendToCosmosData);
79+
await retryFunc(async () => {
80+
await ctx.db.insert(DatabaseEnum.Evm, sendToCosmosData);
81+
});
7982
return Promise.resolve();
8083
};
8184

@@ -198,7 +201,9 @@ export const handleStoreAutoForward = async (ctx: ContextIntepreter, event: AnyE
198201
{ where: { txHash: prevEvmState[0].txHash } }
199202
);
200203
console.log("storeAutoForward:", autoForwardData);
201-
await ctx.db.insert(DatabaseEnum.OraiBridge, autoForwardData);
204+
await retryFunc(async () => {
205+
await ctx.db.insert(DatabaseEnum.OraiBridge, autoForwardData);
206+
});
202207
ctx.oraiBridgeSrcChannel = autoForwardData.srcChannel;
203208
ctx.oraiBridgeDstChannel = autoForwardData.dstChannel;
204209
ctx.oraiBridgeEventNonce = event.data.eventNonce;
@@ -358,7 +363,9 @@ export const handleOnRecvPacketOnOraiBridge = async (ctx: ContextIntepreter, eve
358363
status: StateDBStatus.PENDING
359364
};
360365
console.log("onRecvPacketOnOraiBridge: ", oraiBridgeData);
361-
await ctx.db.insert(DatabaseEnum.OraiBridge, oraiBridgeData);
366+
await retryFunc(async () => {
367+
await ctx.db.insert(DatabaseEnum.OraiBridge, oraiBridgeData);
368+
});
362369
};
363370

364371
// TODO: add query logic here
@@ -527,7 +534,9 @@ export const handleStoreOnBatchSendToEthClaim = async (
527534
status: StateDBStatus.FINISHED
528535
};
529536
console.log("storeOnBatchSendToETHClaim: ", evmStateData);
530-
await ctx.db.insert(DatabaseEnum.Evm, evmStateData);
537+
await retryFunc(async () => {
538+
await ctx.db.insert(DatabaseEnum.Evm, evmStateData);
539+
});
531540
};
532541

533542
// ORAICHAIN
@@ -745,7 +754,9 @@ export const handleStoreOnRecvPacketOraichain = async (
745754
status: nextPacketData.nextPacketSequence != 0 ? StateDBStatus.PENDING : StateDBStatus.FINISHED
746755
};
747756
console.log("storeOnRecvPacketOraichain:", onRecvPacketData);
748-
await ctx.db.insert(DatabaseEnum.Oraichain, onRecvPacketData);
757+
await retryFunc(async () => {
758+
await ctx.db.insert(DatabaseEnum.Oraichain, onRecvPacketData);
759+
});
749760
// now we have verified everything, lets store the result into the db
750761
// TODO: if there's a next state, prepare to return a valid result here
751762
if (nextState || nextPacketData.nextPacketSequence != 0) {
@@ -896,7 +907,9 @@ export const handleStoreOnRecvPacketOraichainReverse = async (
896907
status: StateDBStatus.PENDING
897908
};
898909
console.log("onRecvPacketData", onRecvPacketData);
899-
await ctx.db.insert(DatabaseEnum.Oraichain, onRecvPacketData);
910+
await retryFunc(async () => {
911+
await ctx.db.insert(DatabaseEnum.Oraichain, onRecvPacketData);
912+
});
900913

901914
// no next state, we move to final state of the machine
902915
return Promise.resolve("");
@@ -1065,7 +1078,9 @@ export const handleUpdateOnAcknowledgementOnCosmos = async (
10651078
}
10661079

10671080
console.log("Cosmos data:", cosmosData);
1068-
await ctx.db.insert(DatabaseEnum.Cosmos, cosmosData);
1081+
await retryFunc(async () => {
1082+
await ctx.db.insert(DatabaseEnum.Cosmos, cosmosData);
1083+
});
10691084
};
10701085

10711086
export const handleStoreOnTransferBackToRemoteChain = async (
@@ -1146,7 +1161,9 @@ export const handleStoreOnTransferBackToRemoteChain = async (
11461161
status: StateDBStatus.PENDING
11471162
};
11481163
console.log("storeOnTransferBackToRemoteChain", transferBackToRemoteChainData);
1149-
await ctx.db.insert(DatabaseEnum.Oraichain, transferBackToRemoteChainData);
1164+
await retryFunc(async () => {
1165+
await ctx.db.insert(DatabaseEnum.Oraichain, transferBackToRemoteChainData);
1166+
});
11501167

11511168
// no next state, we move to final state of the machine
11521169
return Promise.resolve("");
@@ -1186,7 +1203,9 @@ export const handleStoreOnIbcTransferFromRemote = async (ctx: ContextIntepreter,
11861203
status: StateDBStatus.PENDING
11871204
};
11881205
console.log("Cosmos Data:", cosmosData);
1189-
await ctx.db.insert(DatabaseEnum.Cosmos, cosmosData);
1206+
await retryFunc(async () => {
1207+
await ctx.db.insert(DatabaseEnum.Cosmos, cosmosData);
1208+
});
11901209

11911210
ctx.cosmosPacketSequence = parseInt(packetSequence.value);
11921211
ctx.cosmosSrcChannel = cosmosData.srcChannel;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { setTimeout } from "timers/promises";
2+
3+
export const retryFunc = async (func: () => Promise<void>, retryTimes: number = 10) => {
4+
for (let i = 0; i < retryTimes; i++) {
5+
try {
6+
await func();
7+
return;
8+
} catch (err) {
9+
await setTimeout(100);
10+
}
11+
}
12+
};

0 commit comments

Comments
 (0)