From 08eed17e665fea06fb6961f4478d17dac9abb7c3 Mon Sep 17 00:00:00 2001 From: Viktor Lofgren Date: Sat, 5 Aug 2023 14:42:16 +0200 Subject: [PATCH] (api-service) Mq endpoint for flushing caches --- .../src/main/java/nu/marginalia/api/ApiService.java | 9 +++++++++ .../main/java/nu/marginalia/api/svc/LicenseService.java | 5 ++++- .../main/java/nu/marginalia/api/svc/ResponseCache.java | 4 ++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/code/services-satellite/api-service/src/main/java/nu/marginalia/api/ApiService.java b/code/services-satellite/api-service/src/main/java/nu/marginalia/api/ApiService.java index 4da8c0f6..aed2006d 100644 --- a/code/services-satellite/api-service/src/main/java/nu/marginalia/api/ApiService.java +++ b/code/services-satellite/api-service/src/main/java/nu/marginalia/api/ApiService.java @@ -11,6 +11,7 @@ import nu.marginalia.model.gson.GsonFactory; import nu.marginalia.search.client.SearchClient; import nu.marginalia.search.client.model.ApiSearchResults; import nu.marginalia.service.server.*; +import nu.marginalia.service.server.mq.MqNotification; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.Marker; @@ -58,6 +59,14 @@ public class ApiService extends Service { Spark.get("/public/api/:key/search/*", this::search, gson::toJson); } + @MqNotification(endpoint = "FLUSH_CACHES") + public void flushCaches(String unusedArg) { + logger.info("Flushing caches"); + + responseCache.flush(); + licenseService.flushCache(); + } + private Object search(Request request, Response response) { String[] args = request.splat(); diff --git a/code/services-satellite/api-service/src/main/java/nu/marginalia/api/svc/LicenseService.java b/code/services-satellite/api-service/src/main/java/nu/marginalia/api/svc/LicenseService.java index f7847a46..7025ae33 100644 --- a/code/services-satellite/api-service/src/main/java/nu/marginalia/api/svc/LicenseService.java +++ b/code/services-satellite/api-service/src/main/java/nu/marginalia/api/svc/LicenseService.java @@ -8,7 +8,6 @@ import nu.marginalia.api.model.ApiLicense; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import spark.Request; import spark.Spark; import java.util.concurrent.ConcurrentHashMap; @@ -57,4 +56,8 @@ public class LicenseService { throw new IllegalStateException("This is unreachable"); } + + public void flushCache() { + licenseCache.clear(); + } } diff --git a/code/services-satellite/api-service/src/main/java/nu/marginalia/api/svc/ResponseCache.java b/code/services-satellite/api-service/src/main/java/nu/marginalia/api/svc/ResponseCache.java index 59c62fe5..032ad9b4 100644 --- a/code/services-satellite/api-service/src/main/java/nu/marginalia/api/svc/ResponseCache.java +++ b/code/services-satellite/api-service/src/main/java/nu/marginalia/api/svc/ResponseCache.java @@ -40,6 +40,10 @@ public class ResponseCache { return license.getKey() + ":" + queryString + ":" + queryParams; } + public void flush() { + cache.invalidateAll(); + } + public void cleanUp() { cache.cleanUp(); }