feat: implement audit function with timeout and retry mechanism
This commit is contained in:
@ -2,13 +2,11 @@ import { getOrcaClient } from "@_koii/task-manager/extensions";
|
|||||||
import { middleServerUrl, status } from "../utils/constant";
|
import { middleServerUrl, status } from "../utils/constant";
|
||||||
import { submissionJSONSignatureDecode } from "../utils/submissionJSONSignatureDecode";
|
import { submissionJSONSignatureDecode } from "../utils/submissionJSONSignatureDecode";
|
||||||
// import { status } from '../utils/constant'
|
// import { status } from '../utils/constant'
|
||||||
export async function audit(cid: string, roundNumber: number, submitterKey: string): Promise<boolean | void> {
|
|
||||||
/**
|
const TIMEOUT_MS = 180000; // 3 minutes in milliseconds
|
||||||
* Audit a submission
|
const MAX_RETRIES = 3;
|
||||||
* This function should return true if the submission is correct, false otherwise
|
|
||||||
* The default implementation retrieves the proofs from IPFS
|
async function auditWithTimeout(cid: string, roundNumber: number, submitterKey: string): Promise<boolean | void> {
|
||||||
* and sends them to your container for auditing
|
|
||||||
*/
|
|
||||||
let orcaClient;
|
let orcaClient;
|
||||||
try {
|
try {
|
||||||
orcaClient = await getOrcaClient();
|
orcaClient = await getOrcaClient();
|
||||||
@ -83,3 +81,28 @@ export async function audit(cid: string, roundNumber: number, submitterKey: stri
|
|||||||
console.log("[AUDIT] Cleaning up resources");
|
console.log("[AUDIT] Cleaning up resources");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function audit(cid: string, roundNumber: number, submitterKey: string): Promise<boolean | void> {
|
||||||
|
let retries = 0;
|
||||||
|
|
||||||
|
while (retries < MAX_RETRIES) {
|
||||||
|
try {
|
||||||
|
const result = await Promise.race<boolean | void>([
|
||||||
|
auditWithTimeout(cid, roundNumber, submitterKey),
|
||||||
|
new Promise((_, reject) => setTimeout(() => reject(new Error("Audit timeout")), TIMEOUT_MS)),
|
||||||
|
]);
|
||||||
|
return result;
|
||||||
|
} catch (error) {
|
||||||
|
retries++;
|
||||||
|
console.log(`[AUDIT] Attempt ${retries} failed:`, error);
|
||||||
|
|
||||||
|
if (retries === MAX_RETRIES) {
|
||||||
|
console.log(`[AUDIT] Max retries (${MAX_RETRIES}) reached. Giving up.`);
|
||||||
|
return true; // Return true as a fallback
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait for a short time before retrying
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 5000));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user