Merged in fix/redis-delete (pull request #3271)

feat(redis): include git hash when deleting without fuzzy

* feat(redis): include git hash when deleting without fuzzy

* Refactor


Approved-by: Joakim Jäderberg
This commit is contained in:
Linus Flood
2025-12-02 07:02:52 +00:00
parent 8f7e4b8d06
commit b1ccabb0b6
4 changed files with 40 additions and 8 deletions

View File

@@ -98,7 +98,10 @@ export type DataCache = {
* @param fuzzy If true, does a wildcard delete. *key*
* @returns
*/
deleteKey: (key: string, opts?: { fuzzy?: boolean }) => Promise<void>
deleteKey: (
key: string,
opts?: { fuzzy?: boolean; includeGitHashInKey?: boolean }
) => Promise<void>
/**
* Deletes a key from the cache
@@ -106,5 +109,8 @@ export type DataCache = {
* @param fuzzy If true, does a wildcard delete. *key*
* @returns
*/
deleteKeys: (keys: string[], opts?: { fuzzy?: boolean }) => Promise<void>
deleteKeys: (
keys: string[],
opts?: { fuzzy?: boolean; includeGitHashInKey?: boolean }
) => Promise<void>
}

View File

@@ -4,11 +4,24 @@ import { env } from "../../env/server"
import { safeTry } from "../../utils/safeTry"
import { cacheLogger } from "../logger"
import { getCacheEndpoint } from "./endpoints"
import { generateCacheKey } from "./generateCacheKey"
const API_KEY = env.REDIS_API_KEY ?? ""
export async function deleteKey(key: string, opts?: { fuzzy?: boolean }) {
export async function deleteKey(
key: string,
opts?: { fuzzy?: boolean; includeGitHashInKey?: boolean }
) {
const perf = performance.now()
const endpoint = getCacheEndpoint(key)
let cacheKey: string | undefined = key
if (opts?.includeGitHashInKey) {
cacheKey = generateCacheKey(key, {
includeGitHashInKey: true,
})
}
const endpoint = getCacheEndpoint(cacheKey)
if (opts?.fuzzy) {
endpoint.searchParams.set("fuzzy", "true")
@@ -29,7 +42,7 @@ export async function deleteKey(key: string, opts?: { fuzzy?: boolean }) {
if (response?.status !== 404) {
Sentry.captureException(error ?? new Error("Unable to DELETE cachekey"), {
extra: {
cacheKey: key,
cacheKey: cacheKey,
statusCode: response?.status,
statusText: response?.statusText,
},

View File

@@ -4,12 +4,25 @@ import { env } from "../../env/server"
import { safeTry } from "../../utils/safeTry"
import { cacheLogger } from "../logger"
import { getDeleteMultipleKeysEndpoint } from "./endpoints"
import { generateCacheKey } from "./generateCacheKey"
const API_KEY = env.REDIS_API_KEY ?? ""
export async function deleteKeys(keys: string[], opts?: { fuzzy?: boolean }) {
export async function deleteKeys(
keys: string[],
opts?: { fuzzy?: boolean; includeGitHashInKey?: boolean }
) {
const perf = performance.now()
const endpoint = getDeleteMultipleKeysEndpoint()
let cacheKeys: string[] = keys
if (opts?.includeGitHashInKey) {
cacheKeys = keys.map((key) =>
generateCacheKey(key, {
includeGitHashInKey: true,
})
)
}
const [response, error] = await safeTry(
fetch(endpoint, {
method: "DELETE",
@@ -18,7 +31,7 @@ export async function deleteKeys(keys: string[], opts?: { fuzzy?: boolean }) {
"Content-Type": "application/json",
"x-api-key": API_KEY,
},
body: JSON.stringify({ keys, fuzzy: opts?.fuzzy ?? false }),
body: JSON.stringify({ keys: cacheKeys, fuzzy: opts?.fuzzy ?? false }),
signal: AbortSignal.timeout(10_000),
})
)