From 4c765378e390d971e59f50aeed664b019ddabb57 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Thu, 25 Jan 2024 11:32:30 +0800 Subject: [PATCH] do not retry if find_thumbnail job fails --- packages/api/src/jobs/find_thumbnail.ts | 4 +++- packages/api/src/services/save_email.ts | 16 +++++++++------- packages/api/src/services/save_page.ts | 8 ++++---- packages/api/src/utils/createTask.ts | 7 +++++-- 4 files changed, 21 insertions(+), 14 deletions(-) diff --git a/packages/api/src/jobs/find_thumbnail.ts b/packages/api/src/jobs/find_thumbnail.ts index 06ed28a3e..2e1231962 100644 --- a/packages/api/src/jobs/find_thumbnail.ts +++ b/packages/api/src/jobs/find_thumbnail.ts @@ -5,6 +5,7 @@ import { findLibraryItemById, updateLibraryItem, } from '../services/library_item' +import { createImageProxyUrl, createThumbnailUrl } from '../utils/imageproxy' import { logger } from '../utils/logger' interface Data { @@ -139,8 +140,9 @@ export const findThumbnail = async (data: Data) => { const thumbnail = item.thumbnail if (thumbnail) { logger.info('thumbnail already set') + const proxyUrl = createThumbnailUrl(thumbnail) // pre-cache thumbnail first if exists - const image = await fetchImage(thumbnail) + const image = await fetchImage(proxyUrl) if (!image) { logger.info('thumbnail image not found') item.thumbnail = undefined diff --git a/packages/api/src/services/save_email.ts b/packages/api/src/services/save_email.ts index 0c0f4f456..c080345ad 100644 --- a/packages/api/src/services/save_email.ts +++ b/packages/api/src/services/save_email.ts @@ -1,5 +1,5 @@ import { LibraryItem, LibraryItemState } from '../entity/library_item' -import { enqueueThumbnailTask } from '../utils/createTask' +import { enqueueThumbnailJob } from '../utils/createTask' import { cleanUrl, generateSlug, @@ -132,12 +132,14 @@ export const saveEmail = async ( await updateReceivedEmail(input.receivedEmailId, 'article', input.userId) - // create a task to update thumbnail and pre-cache all images - try { - const taskId = await enqueueThumbnailTask(input.userId, slug) - logger.info('Created thumbnail task', { taskId }) - } catch (e) { - logger.error('Failed to create thumbnail task', e) + if (!newLibraryItem.thumbnail) { + // create a task to update thumbnail and pre-cache all images + try { + const job = await enqueueThumbnailJob(input.userId, newLibraryItem.id) + logger.info('Created thumbnail job', { taskId: job }) + } catch (e) { + logger.error('Failed to create thumbnail job', e) + } } return newLibraryItem diff --git a/packages/api/src/services/save_page.ts b/packages/api/src/services/save_page.ts index 7cd7b1768..f8fd4340f 100644 --- a/packages/api/src/services/save_page.ts +++ b/packages/api/src/services/save_page.ts @@ -13,7 +13,7 @@ import { SaveResult, } from '../generated/graphql' import { authTrx } from '../repository' -import { enqueueThumbnailTask } from '../utils/createTask' +import { enqueueThumbnailJob } from '../utils/createTask' import { cleanUrl, generateSlug, @@ -170,10 +170,10 @@ export const savePage = async ( if (!isImported && !parseResult.parsedContent?.previewImage) { try { // create a task to update thumbnail and pre-cache all images - const job = await enqueueThumbnailTask(user.id, clientRequestId) - logger.info('Created thumbnail task', { job }) + const job = await enqueueThumbnailJob(user.id, clientRequestId) + logger.info('Created thumbnail job', { job }) } catch (e) { - logger.error('Failed to create thumbnail task', e) + logger.error('Failed to enqueue thumbnail job', e) } } diff --git a/packages/api/src/utils/createTask.ts b/packages/api/src/utils/createTask.ts index 88eb3a2d5..ad97d358b 100644 --- a/packages/api/src/utils/createTask.ts +++ b/packages/api/src/utils/createTask.ts @@ -14,10 +14,12 @@ import { ArticleSavingRequestStatus, CreateLabelInput, } from '../generated/graphql' +import { THUMBNAIL_JOB } from '../jobs/find_thumbnail' import { queueRSSRefreshFeedJob } from '../jobs/rss/refreshAllFeeds' +import { getBackendQueue } from '../queue-processor' import { redisDataSource } from '../redis_data_source' import { signFeatureToken } from '../services/features' -import { generateVerificationToken, OmnivoreAuthorizationHeader } from './auth' +import { OmnivoreAuthorizationHeader } from './auth' import { CreateTaskError } from './errors' import { stringToHash } from './helpers' import { logger } from './logger' @@ -579,7 +581,7 @@ export const enqueueExportToIntegration = async ( return createdTasks[0].name } -export const enqueueThumbnailTask = async ( +export const enqueueThumbnailJob = async ( userId: string, libraryItemId: string ) => { @@ -593,6 +595,7 @@ export const enqueueThumbnailTask = async ( } return queue.add(THUMBNAIL_JOB, payload, { priority: 100, + attempts: 1, }) }