feat: implement audit function with timeout and retry mechanism

This commit is contained in:
2025-05-07 03:58:14 -03:00
parent 7def96c8e6
commit 70b10d32bf

View File

@ -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));
}
}
}