Merge pull request #233 from ente-io/queue-processor-update

bubble up error to caller from queue processor
This commit is contained in:
abhinavkgrd 2021-11-15 13:48:53 +05:30 committed by GitHub
commit 43fb4326b9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 11 deletions

View file

@ -33,12 +33,17 @@ class FFmpegService {
const response = this.generateThumbnailProcessor.queueUpRequest(
generateThumbnailHelper.bind(null, this.ffmpeg, file)
);
const thumbnail = await response.promise;
if (!thumbnail) {
throw Error(CustomError.THUMBNAIL_GENERATION_FAILED);
try {
return await response.promise;
} catch (e) {
if (e.message === CustomError.REQUEST_CANCELLED) {
// ignore
return null;
} else {
logError(e, 'ffmpeg thumbnail generation failed');
throw e;
}
}
return thumbnail;
}
}

View file

@ -1,6 +1,9 @@
import { CustomError } from 'utils/common/errorUtil';
interface RequestQueueItem {
request: (canceller?: RequestCanceller) => Promise<any>;
callback: (response) => void;
successCallback: (response: any) => void;
failureCallback: (error: Error) => void;
isCanceled: { status: boolean };
canceller: { exec: () => void };
}
@ -26,10 +29,11 @@ export default class QueueProcessor<T> {
},
};
const promise = new Promise<T>((resolve) => {
const promise = new Promise<T>((resolve, reject) => {
this.requestQueue.push({
request,
callback: resolve,
successCallback: resolve,
failureCallback: reject,
isCanceled,
canceller,
});
@ -53,15 +57,15 @@ export default class QueueProcessor<T> {
let response = null;
if (queueItem.isCanceled.status) {
response = null;
queueItem.failureCallback(Error(CustomError.REQUEST_CANCELLED));
} else {
try {
response = await queueItem.request(queueItem.canceller);
queueItem.successCallback(response);
} catch (e) {
response = null;
}
}
queueItem.callback(response);
queueItem.failureCallback(e);
}
}
}
}
}

View file

@ -28,6 +28,7 @@ export enum CustomError {
FAV_COLLECTION_MISSING = 'favorite collection missing',
INVALID_COLLECTION_OPERATION = 'invalid collection operation',
WAIT_TIME_EXCEEDED = 'thumbnail generation wait time exceeded',
REQUEST_CANCELLED = 'request canceled',
}
function parseUploadError(error: AxiosResponse) {