Skip to content

Commit

Permalink
feat: add proving retries
Browse files Browse the repository at this point in the history
  • Loading branch information
alexghr committed May 2, 2024
1 parent b346a2f commit e6dacf7
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,27 @@ describe('MemoryProvingQueue', () => {
await expect(promise).resolves.toEqual(new RootParityInput(proof, vk, publicInputs));
});

it('notifies of errors', async () => {
it('retries failed jobs', async () => {
const inputs = makeBaseParityInputs();
const promise = queue.getBaseParityProof(inputs);
void queue.getBaseParityProof(inputs);

const job = await queue.getProvingJob();
expect(job?.request.inputs).toEqual(inputs);

const error = new Error('test error');

await queue.rejectProvingJob(job!.id, error);
await expect(queue.getProvingJob()).resolves.toEqual(job);
});

it('notifies errors', async () => {
const promise = queue.getBaseParityProof(makeBaseParityInputs());

const error = new Error('test error');
await queue.rejectProvingJob((await queue.getProvingJob())!.id, error);
await queue.rejectProvingJob((await queue.getProvingJob())!.id, error);
await queue.rejectProvingJob((await queue.getProvingJob())!.id, error);

await expect(promise).rejects.toEqual(error);
});
});
21 changes: 19 additions & 2 deletions yarn-project/prover-client/src/prover-pool/memory-proving-queue.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,11 @@ type ProvingJobWithResolvers<T extends ProvingRequest = ProvingRequest> = {
id: string;
request: T;
signal?: AbortSignal;
attempts: number;
} & PromiseWithResolvers<ProvingRequestResult<T['type']>>;

const MAX_RETRIES = 3;

export class MemoryProvingQueue implements CircuitProver, ProvingJobSource {
private jobId = 0;
private log = createDebugLogger('aztec:prover-client:prover-pool:queue');
Expand Down Expand Up @@ -95,7 +98,18 @@ export class MemoryProvingQueue implements CircuitProver, ProvingJobSource {
return Promise.resolve();
}

job.reject(err);
if (job.attempts < MAX_RETRIES) {
job.attempts++;
this.log.warn(
`Job id=${job.id} type=${ProvingRequestType[job.request.type]} failed with error: ${err}. Retry ${
job.attempts
}/${MAX_RETRIES}`,
);
this.queue.put(job);
} else {
this.log.error(`Job id=${job.id} type=${ProvingRequestType[job.request.type]} failed with error: ${err}`);
job.reject(err);
}
return Promise.resolve();
}

Expand All @@ -111,13 +125,16 @@ export class MemoryProvingQueue implements CircuitProver, ProvingJobSource {
promise,
resolve,
reject,
attempts: 1,
};

if (signal) {
signal.addEventListener('abort', () => reject(new AbortedError('Operation has been aborted')));
}

this.log.info(`Adding ${ProvingRequestType[request.type]} proving job to queue`);
this.log.info(
`Adding id=${item.id} type=${ProvingRequestType[request.type]} proving job to queue depth=${this.queue.length()}`,
);
// TODO (alexg) remove the `any`
if (!this.queue.put(item as any)) {
throw new Error();
Expand Down

0 comments on commit e6dacf7

Please sign in to comment.