Skip to content

Commit 90c2b7b

Browse files
authored
chore: stop prover node swallowing start prover job errors (#13676)
1 parent 8e2a3c9 commit 90c2b7b

File tree

3 files changed

+30
-5
lines changed

3 files changed

+30
-5
lines changed

yarn-project/prover-node/src/monitors/epoch-monitor.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ describe('EpochMonitor', () => {
2626
provenBlockNumber = 0;
2727

2828
handler = mock<EpochMonitorHandler>();
29+
// Default triggering proving jobs is successful
30+
handler.handleEpochReadyToProve.mockResolvedValue(true);
31+
2932
l2BlockSource = mock<L2BlockSource>({
3033
isEpochComplete(epochNumber) {
3134
return Promise.resolve(epochNumber <= lastEpochComplete);
@@ -87,6 +90,23 @@ describe('EpochMonitor', () => {
8790
expect(handler.handleEpochReadyToProve).not.toHaveBeenCalled();
8891
});
8992

93+
it('does not update the latest epoch number if proving was unable to start', async () => {
94+
provenBlockNumber = 4;
95+
blockToSlot[5] = 32n;
96+
lastEpochComplete = 3n;
97+
98+
handler.handleEpochReadyToProve.mockResolvedValue(false);
99+
100+
await epochMonitor.work();
101+
expect(handler.handleEpochReadyToProve).toHaveBeenCalledWith(3n);
102+
expect(handler.handleEpochReadyToProve).toHaveBeenCalledTimes(1);
103+
104+
// It will be called again with the same epoch number
105+
await epochMonitor.work();
106+
expect(handler.handleEpochReadyToProve).toHaveBeenCalledWith(3n);
107+
expect(handler.handleEpochReadyToProve).toHaveBeenCalledTimes(2);
108+
});
109+
90110
it('does not trigger epoch sync if epoch is already processed', async () => {
91111
provenBlockNumber = 4;
92112
blockToSlot[5] = 32n;

yarn-project/prover-node/src/monitors/epoch-monitor.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
} from '@aztec/telemetry-client';
1212

1313
export interface EpochMonitorHandler {
14-
handleEpochReadyToProve(epochNumber: bigint): Promise<void>;
14+
handleEpochReadyToProve(epochNumber: bigint): Promise<boolean>;
1515
}
1616

1717
/**
@@ -71,6 +71,7 @@ export class EpochMonitor implements Traceable {
7171
@trackSpan('EpochMonitor.work')
7272
public async work() {
7373
const { epochToProve, blockNumber, slotNumber } = await this.getEpochNumberToProve();
74+
this.log.debug(`Epoch to prove: ${epochToProve}`, { blockNumber, slotNumber });
7475
if (epochToProve === undefined) {
7576
this.log.trace(`Next block to prove ${blockNumber} not yet mined`, { blockNumber });
7677
return;
@@ -87,8 +88,9 @@ export class EpochMonitor implements Traceable {
8788
}
8889

8990
this.log.debug(`Epoch ${epochToProve} is ready to be proven`);
90-
await this.handler?.handleEpochReadyToProve(epochToProve);
91-
this.latestEpochNumber = epochToProve;
91+
if (await this.handler?.handleEpochReadyToProve(epochToProve)) {
92+
this.latestEpochNumber = epochToProve;
93+
}
9294
}
9395

9496
private async getEpochNumberToProve() {

yarn-project/prover-node/src/prover-node.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,9 @@ export class ProverNode implements EpochMonitorHandler, ProverNodeApi, Traceable
123123
/**
124124
* Handles an epoch being completed by starting a proof for it if there are no active jobs for it.
125125
* @param epochNumber - The epoch number that was just completed.
126+
* @returns false if there is an error, true otherwise
126127
*/
127-
async handleEpochReadyToProve(epochNumber: bigint): Promise<void> {
128+
async handleEpochReadyToProve(epochNumber: bigint): Promise<boolean> {
128129
try {
129130
this.log.debug(`Running jobs as ${epochNumber} is ready to prove`, {
130131
jobs: Array.from(this.jobs.values()).map(job => `${job.getEpochNumber()}:${job.getId()}`),
@@ -134,15 +135,17 @@ export class ProverNode implements EpochMonitorHandler, ProverNodeApi, Traceable
134135
this.log.warn(`Not starting proof for ${epochNumber} since there are active jobs for the epoch`, {
135136
activeJobs: activeJobs.map(job => job.uuid),
136137
});
137-
return;
138+
return true;
138139
}
139140
await this.startProof(epochNumber);
141+
return true;
140142
} catch (err) {
141143
if (err instanceof EmptyEpochError) {
142144
this.log.info(`Not starting proof for ${epochNumber} since no blocks were found`);
143145
} else {
144146
this.log.error(`Error handling epoch completed`, err);
145147
}
148+
return false;
146149
}
147150
}
148151

0 commit comments

Comments
 (0)