mirror of
https://github.com/Unleash/unleash.git
synced 2025-01-31 00:16:47 +01:00
chore: job-service handle exceptions (#6818)
## About the changes This allows failed functions to record that they've failed when wrapped with a job.
This commit is contained in:
parent
02b3805ca6
commit
e6ec78fdac
@ -8,6 +8,8 @@ let store: JobStore;
|
|||||||
const config = createTestConfig();
|
const config = createTestConfig();
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
db = await dbInit('job_service_serial', config.getLogger);
|
db = await dbInit('job_service_serial', config.getLogger);
|
||||||
|
// @ts-ignore setMuteError is not part of getLogger interface
|
||||||
|
config.getLogger.setMuteError(true);
|
||||||
store = new JobStore(db.rawDatabase, config);
|
store = new JobStore(db.rawDatabase, config);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -36,6 +38,7 @@ test('Only executes job once within time period', async () => {
|
|||||||
const jobs = await store.getAll();
|
const jobs = await store.getAll();
|
||||||
expect(jobs).toHaveLength(1);
|
expect(jobs).toHaveLength(1);
|
||||||
expect(jobs.every((j) => j.finishedAt !== null)).toBe(true);
|
expect(jobs.every((j) => j.finishedAt !== null)).toBe(true);
|
||||||
|
expect(jobs.every((j) => j.stage === 'completed')).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Will execute jobs with different keys', async () => {
|
test('Will execute jobs with different keys', async () => {
|
||||||
@ -65,4 +68,22 @@ test('Will execute jobs with different keys', async () => {
|
|||||||
const jobs = await store.getAll();
|
const jobs = await store.getAll();
|
||||||
expect(jobs).toHaveLength(2);
|
expect(jobs).toHaveLength(2);
|
||||||
expect(jobs.every((j) => j.finishedAt !== null)).toBe(true);
|
expect(jobs.every((j) => j.finishedAt !== null)).toBe(true);
|
||||||
|
expect(jobs.every((j) => j.stage === 'completed')).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('When the provided function fails we record the failure', async () => {
|
||||||
|
const service = new JobService(store, config.getLogger);
|
||||||
|
const faultyJob = service.singleInstance(
|
||||||
|
'will-fail',
|
||||||
|
async () => {
|
||||||
|
throw new Error('fail');
|
||||||
|
},
|
||||||
|
60,
|
||||||
|
);
|
||||||
|
await faultyJob();
|
||||||
|
await faultyJob();
|
||||||
|
const jobs = await store.getAll();
|
||||||
|
expect(jobs).toHaveLength(1);
|
||||||
|
expect(jobs.every((j) => j.finishedAt !== null)).toBe(true);
|
||||||
|
expect(jobs.every((j) => j.stage === 'failed')).toBe(true);
|
||||||
});
|
});
|
||||||
|
@ -45,12 +45,18 @@ export class JobService {
|
|||||||
from: subMinutes(bucket, bucketSizeInMinutes),
|
from: subMinutes(bucket, bucketSizeInMinutes),
|
||||||
to: bucket,
|
to: bucket,
|
||||||
};
|
};
|
||||||
return fn(range);
|
const response = await fn(range);
|
||||||
} finally {
|
|
||||||
await this.jobStore.update(name, bucket, {
|
await this.jobStore.update(name, bucket, {
|
||||||
stage: 'completed',
|
stage: 'completed',
|
||||||
finishedAt: new Date(),
|
finishedAt: new Date(),
|
||||||
});
|
});
|
||||||
|
return response;
|
||||||
|
} catch (err) {
|
||||||
|
this.logger.error(`Failed to execute job ${name}`, err);
|
||||||
|
await this.jobStore.update(name, bucket, {
|
||||||
|
stage: 'failed',
|
||||||
|
finishedAt: new Date(),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user