Compare commits

...
Author SHA1 Message Date
Dominik Sokal b4b20d5978 handle invalid build jobs in better way 2019-10-24 12:33:24 +02:00
4 changed files with 28 additions and 11 deletions

No files matched your search

+1 -1
View File
@@ -61,4 +61,4 @@ async function cleanup(ctx: IContext) {
}
const getTemporaryDirs = (ctx: IContext) =>
Object.values(pick(ctx, ['appDir', 'provisioningProfileDir']));
Object.values(pick(ctx, ['appDir', 'provisioningProfileDir'])) as string[];
+23 -9
View File
@@ -55,20 +55,34 @@ export async function getJob() {
async function processJob(jobData: any) {
const receiptHandle = jobData.ReceiptHandle;
const { priority } = jobData;
let timeoutId;
try {
const rawJob = JSON.parse(jobData.Body);
timeoutId = failAfterMaxJobTime(priority, receiptHandle, rawJob);
const job = await sanitizeJob(rawJob);
let rawJob;
let job;
try {
rawJob = JSON.parse(jobData.Body);
timeoutId = failAfterMaxJobTime(priority, receiptHandle, rawJob);
logger.info(
{ buildJobId: rawJob.id, messageId: jobData.MessageId },
`Processing job with priority=${priority.slice(0, priority.length - 8)} timestamp=${Date.now()}`,
);
job = await sanitizeJob(rawJob);
} catch (err) {
logger.error({ err, ...rawJob && { buildJobId: rawJob.id } }, 'The build job is invalid');
// send message only if we've managed to parse the job json
if (rawJob) {
await sqs.sendMessage(rawJob.id, BUILD.JOB_STATES.ERRORED, {
turtleVersion,
buildDuration: 0,
reason: 'The build job is invalid',
});
}
throw err;
}
setCurrentJobId(job.id);
const pingerHandle = sqs.changeMessageVisibilityRecurring(priority, jobData.ReceiptHandle, job.id);
logger.info(
`Doing job MessageId=${jobData.MessageId} BuildId=${job.id} `
+ `Priority=${priority.slice(0, priority.length - 8)} ${Date.now()}`,
);
const cancelled = await redis.checkIfCancelled(job.id);
if (cancelled) {
logger.info('The job has been cancelled');
+1 -1
View File
@@ -55,7 +55,7 @@ async function main() {
try {
await doJob();
} catch (err) {
logger.error({ err }, 'Failed to do a job');
logger.error({ err }, 'Failed to process a job');
}
}
}
+3
View File
@@ -2,6 +2,9 @@ import * as schemas from 'turtle/jobsSchemas';
export async function sanitizeJob(job: any) {
const schema = (schemas as any)[job.platform];
if (!schema) {
throw new Error(`Unsupported platform: ${job.platform}`);
}
const { error, value } = schema.validate(job, { stripUnknown: true });
if (error) {
throw error;