From 1649aa8e09638dfd515cd1bd460e17855b01db57 Mon Sep 17 00:00:00 2001 From: Huy Hoang Date: Fri, 4 Sep 2020 21:36:59 +0700 Subject: [PATCH 1/2] Fix duplicate ObjectId keys --- src/cache.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cache.js b/src/cache.js index 819304b..b6e93f5 100644 --- a/src/cache.js +++ b/src/cache.js @@ -1,7 +1,7 @@ import DataLoader from 'dataloader' import { getCollection, isModel } from './helpers' - +import { ObjectId } from 'bson' // https://github.com/graphql/dataloader#batch-function const orderDocs = ids => docs => { const idMap = {} @@ -29,14 +29,15 @@ export const createCachingMethods = ({ collection, model, cache }) => { const methods = { findOneById: async (id, { ttl } = {}) => { - const key = cachePrefix + id + const _id = id instanceof ObjectId ? id.toHexString() : id + const key = cachePrefix + _id const cacheDoc = await cache.get(key) if (cacheDoc) { return JSON.parse(cacheDoc) } - const doc = await loader.load(id) + const doc = await loader.load(_id) if (Number.isInteger(ttl)) { // https://github.com/apollographql/apollo-server/tree/master/packages/apollo-server-caching#apollo-server-caching cache.set(key, JSON.stringify(doc), { ttl }) From 25f4a33ce14a113531caaca7d3f9add45bb77fb4 Mon Sep 17 00:00:00 2001 From: Huy Hoang Date: Fri, 4 Sep 2020 21:52:09 +0700 Subject: [PATCH 2/2] Fix can't delete ObjectId lead to memory leak --- src/cache.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cache.js b/src/cache.js index b6e93f5..953f445 100644 --- a/src/cache.js +++ b/src/cache.js @@ -49,8 +49,9 @@ export const createCachingMethods = ({ collection, model, cache }) => { return Promise.all(ids.map(id => methods.findOneById(id, { ttl }))) }, deleteFromCacheById: async id => { - loader.clear(id) - await cache.delete(cachePrefix + id) + const _id = id instanceof ObjectId ? id.toHexString() : id + loader.clear(_id) + await cache.delete(cachePrefix + _id) } }