From 816019e6a3151bb9d8c5d3047b00df22bf4c0077 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Tue, 16 Jan 2024 11:17:21 +0800 Subject: [PATCH 1/3] extend ttl of the saved item cache to 26 hours --- packages/api/src/utils/helpers.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/api/src/utils/helpers.ts b/packages/api/src/utils/helpers.ts index cf179fd35..304553eba 100644 --- a/packages/api/src/utils/helpers.ts +++ b/packages/api/src/utils/helpers.ts @@ -413,9 +413,9 @@ export const setRecentlySavedItemInRedis = async ( userId: string, url: string ) => { - // save the url in redis for 8 hours so rss-feeder won't try to re-save it + // save the url in redis for 26 hours so rss-feeder won't try to re-save it const redisKey = `recent-saved-item:${userId}:${url}` - const ttlInSeconds = 60 * 60 * 8 + const ttlInSeconds = 60 * 60 * 26 try { return redisClient.set(redisKey, 1, { EX: ttlInSeconds, From 5141c2a042c1e76ee3cd78f72ac7eb58b7106303 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Tue, 16 Jan 2024 12:15:21 +0800 Subject: [PATCH 2/3] do not retry saving following items if item is saved --- packages/api/src/repository/index.ts | 21 ++++++++++++++- packages/api/src/routers/svc/following.ts | 32 ++++++++++++++++------- 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/packages/api/src/repository/index.ts b/packages/api/src/repository/index.ts index 973e09434..943dc0dd8 100644 --- a/packages/api/src/repository/index.ts +++ b/packages/api/src/repository/index.ts @@ -1,5 +1,12 @@ import * as httpContext from 'express-http-context2' -import { EntityManager, EntityTarget, QueryBuilder, Repository } from 'typeorm' +import { DatabaseError } from 'pg' +import { + EntityManager, + EntityTarget, + QueryBuilder, + QueryFailedError, + Repository, +} from 'typeorm' import { appDataSource } from '../data_source' import { Claims } from '../resolvers/types' import { SetClaimsRole } from '../utils/dictionary' @@ -106,3 +113,15 @@ export const valuesToRawSql = ( return sql } + +const isQueryFailedError = ( + err: unknown +): err is QueryFailedError & DatabaseError => err instanceof QueryFailedError + +export const isUniqueViolation = (err: unknown): boolean => { + if (isQueryFailedError(err)) { + return err.code === '23505' + } + + return false +} diff --git a/packages/api/src/routers/svc/following.ts b/packages/api/src/routers/svc/following.ts index 261dbf4ee..2251d94e9 100644 --- a/packages/api/src/routers/svc/following.ts +++ b/packages/api/src/routers/svc/following.ts @@ -5,6 +5,7 @@ import { PageType, PreparedDocumentInput, } from '../../generated/graphql' +import { isUniqueViolation } from '../../repository' import { createAndSaveLabelsInLibraryItem } from '../../services/labels' import { createLibraryItem } from '../../services/library_item' import { parsedContentToLibraryItem } from '../../services/save_page' @@ -125,18 +126,29 @@ export function followingServiceRouter() { state: ArticleSavingRequestStatus.ContentNotFetched, }) - const newItem = await createLibraryItem(itemToSave, userId) - logger.info('feed item saved in following') + try { + const newItem = await createLibraryItem(itemToSave, userId) + logger.info('feed item saved in following') - // save RSS label in the item - await createAndSaveLabelsInLibraryItem( - newItem.id, - userId, - [{ name: 'RSS' }], - feedUrl - ) + // save RSS label in the item + await createAndSaveLabelsInLibraryItem( + newItem.id, + userId, + [{ name: 'RSS' }], + feedUrl + ) - logger.info('RSS label added to the item') + logger.info('RSS label added to the item') + } catch (error) { + logger.error('error saving feed item', error) + + if (isUniqueViolation(error)) { + logger.info('feed item already saved') + return res.sendStatus(200) + } + + return res.sendStatus(500) + } return res.sendStatus(200) } From 1e05f7dade6200d0b8fc29fab92b24582746a24a Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Tue, 16 Jan 2024 12:17:07 +0800 Subject: [PATCH 3/3] log error --- packages/api/src/routers/svc/following.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/api/src/routers/svc/following.ts b/packages/api/src/routers/svc/following.ts index 2251d94e9..3e0b0eedb 100644 --- a/packages/api/src/routers/svc/following.ts +++ b/packages/api/src/routers/svc/following.ts @@ -140,13 +140,13 @@ export function followingServiceRouter() { logger.info('RSS label added to the item') } catch (error) { - logger.error('error saving feed item', error) - if (isUniqueViolation(error)) { logger.info('feed item already saved') return res.sendStatus(200) } + logger.error('error saving feed item', error) + return res.sendStatus(500) }