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( const response = this.generateThumbnailProcessor.queueUpRequest(
generateThumbnailHelper.bind(null, this.ffmpeg, file) generateThumbnailHelper.bind(null, this.ffmpeg, file)
); );
try {
const thumbnail = await response.promise; return await response.promise;
if (!thumbnail) { } catch (e) {
throw Error(CustomError.THUMBNAIL_GENERATION_FAILED); 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 { interface RequestQueueItem {
request: (canceller?: RequestCanceller) => Promise<any>; request: (canceller?: RequestCanceller) => Promise<any>;
callback: (response) => void; successCallback: (response: any) => void;
failureCallback: (error: Error) => void;
isCanceled: { status: boolean }; isCanceled: { status: boolean };
canceller: { exec: () => void }; 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({ this.requestQueue.push({
request, request,
callback: resolve, successCallback: resolve,
failureCallback: reject,
isCanceled, isCanceled,
canceller, canceller,
}); });
@ -53,15 +57,15 @@ export default class QueueProcessor<T> {
let response = null; let response = null;
if (queueItem.isCanceled.status) { if (queueItem.isCanceled.status) {
response = null; queueItem.failureCallback(Error(CustomError.REQUEST_CANCELLED));
} else { } else {
try { try {
response = await queueItem.request(queueItem.canceller); response = await queueItem.request(queueItem.canceller);
queueItem.successCallback(response);
} catch (e) { } catch (e) {
response = null; queueItem.failureCallback(e);
} }
} }
queueItem.callback(response);
} }
} }
} }

View file

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