From c3be3a9a15c953fd13191a2e93d779f3c5d7d6ca Mon Sep 17 00:00:00 2001 From: Leonardo <leomilho@gmail.com> Date: Wed, 19 Feb 2025 17:47:29 +0100 Subject: [PATCH] feat: allow to skip cache --- src/readers/queryService.ts | 40 +++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/readers/queryService.ts b/src/readers/queryService.ts index db856dd..1f5fe97 100644 --- a/src/readers/queryService.ts +++ b/src/readers/queryService.ts @@ -13,31 +13,33 @@ import { Neo4jConnection } from 'ts-common/neo4j'; import type { QueryCypher } from '../utils/cypher/converter/queryConverter'; async function cacheCheck(cacheKey: string): Promise<GraphQueryResultMetaFromBackend | undefined> { - if (QUERY_CACHE_DURATION === '') { - log.info('Query cache disabled, skipping cache check'); - } else { - log.debug('Checking cache for query, with cache ttl', QUERY_CACHE_DURATION, 'seconds'); - const cached = await redis.client.get(cacheKey); - if (cached) { - log.info('Cache hit for query'); - const buf = Buffer.from(cached, 'base64'); - const inflated = Bun.gunzipSync(new Uint8Array(buf)); - const dec = new TextDecoder(); - const cachedMessage = JSON.parse(dec.decode(inflated)) as GraphQueryResultMetaFromBackend; - return cachedMessage; - } + log.debug('Checking cache for query, with cache ttl', QUERY_CACHE_DURATION, 'seconds'); + const cached = await redis.client.get(cacheKey); + if (cached) { + log.info('Cache hit for query'); + const buf = Buffer.from(cached, 'base64'); + const inflated = Bun.gunzipSync(new Uint8Array(buf)); + const dec = new TextDecoder(); + const cachedMessage = JSON.parse(dec.decode(inflated)) as GraphQueryResultMetaFromBackend; + return cachedMessage; } } -export const queryService = async (db: DbConnection, cypher: QueryCypher): Promise<GraphQueryResultMetaFromBackend> => { +export const queryService = async (db: DbConnection, cypher: QueryCypher, useCached: boolean): Promise<GraphQueryResultMetaFromBackend> => { let index = 0; const disambiguatedQuery = cypher.query.replace(/\d{13}/g, () => (index++).toString()); const cacheKey = Bun.hash(JSON.stringify({ db: db, query: disambiguatedQuery })).toString(); - const cachedMessage = await cacheCheck(cacheKey); - if (cachedMessage) { - log.debug('Cache hit for query', disambiguatedQuery); - return cachedMessage; + if (QUERY_CACHE_DURATION === '') { + log.info('Query cache disabled, skipping cache check'); + } else if (!useCached) { + log.info('Skipping cache check for query due to parameter', useCached); + } else { + const cachedMessage = await cacheCheck(cacheKey); + if (cachedMessage) { + log.debug('Cache hit for query', disambiguatedQuery); + return cachedMessage; + } } // TODO: only neo4j is supported for now @@ -176,7 +178,7 @@ export const queryServiceReader = async (frontendPublisher: RabbitMqBroker, mlPu for (let i = 0; i < ss.dbConnections.length; i++) { try { - const result = await queryService(ss.dbConnections[i], cypher); + const result = await queryService(ss.dbConnections[i], cypher, message.useCached); // Cache nodeCounts such that we can display differentiation for each query await ums.updateQuery(headers.message.sessionData.userID, message.saveStateID, { -- GitLab