diff --git a/backend/src/services/super-admin/invalidate-cache-queue.ts b/backend/src/services/super-admin/invalidate-cache-queue.ts index d93df0052..0ac195343 100644 --- a/backend/src/services/super-admin/invalidate-cache-queue.ts +++ b/backend/src/services/super-admin/invalidate-cache-queue.ts @@ -1,5 +1,4 @@ import { TKeyStoreFactory } from "@app/keystore/keystore"; -import { delay } from "@app/lib/delay"; import { logger } from "@app/lib/logger"; import { QueueJobs, QueueName, TQueueServiceFactory } from "@app/queue"; @@ -19,14 +18,6 @@ export const invalidateCacheQueueFactory = ({ queueService, keyStore }: TInvalid type: CacheType; }; }) => { - // Cancel existing jobs if any - try { - console.log("stopping job"); - await queueService.clearQueue(QueueName.InvalidateCache); - } catch (err) { - logger.warn(err, "Failed to clear queue"); - } - await queueService.queue(QueueName.InvalidateCache, QueueJobs.InvalidateCache, dto, { removeOnComplete: true, removeOnFail: true, @@ -40,15 +31,11 @@ export const invalidateCacheQueueFactory = ({ queueService, keyStore }: TInvalid data: { type } } = job.data; - await keyStore.setItemWithExpiry("invalidating-cache", 3600, "true"); // 1 hour max (in case the job somehow silently fails) - - console.log("STARTING JOB"); + await keyStore.setItemWithExpiry("invalidating-cache", 1800, "true"); // 30 minutes max (in case the job somehow silently fails) if (type === CacheType.ALL || type === CacheType.SECRETS) await keyStore.deleteItems({ pattern: "secret-manager:*" }); - // await delay(12000); // TODO(andrey): Remove. It's for debug - await keyStore.deleteItem("invalidating-cache"); } catch (err) { logger.error(err, "Failed to invalidate cache"); diff --git a/frontend/src/pages/admin/OverviewPage/components/CachingPanel.tsx b/frontend/src/pages/admin/OverviewPage/components/CachingPanel.tsx index f8b8f43b8..49d6d9107 100644 --- a/frontend/src/pages/admin/OverviewPage/components/CachingPanel.tsx +++ b/frontend/src/pages/admin/OverviewPage/components/CachingPanel.tsx @@ -16,7 +16,7 @@ export const CachingPanel = () => { useGetInvalidatingCacheStatus(); const { membership } = useOrgPermission(); - const wasInvalidating = useRef(false); + const ignoreInitial = useRef(true); const [type, setType] = useState(null); const [buttonsDisabled, setButtonsDisabled] = useState(false); @@ -47,8 +47,6 @@ export const CachingPanel = () => { try { await invalidateCache({ type }); - wasInvalidating.current = true; - createNotification({ text: `Began invalidating ${type} cache`, type: "success" @@ -98,10 +96,18 @@ export const CachingPanel = () => { }; }, [isInvalidating]); + // Helper to ignore the initial useEffect calls for isInvalidating useEffect(() => { - if (isInvalidating === false && wasInvalidating.current) { + const timer = setTimeout(() => { + ignoreInitial.current = false; + }, 1000); + + return () => clearTimeout(timer); + }, []); + + useEffect(() => { + if (!ignoreInitial.current && isInvalidating === false) { success(); - wasInvalidating.current = false; if (pollingRef.current) clearInterval(pollingRef.current); if (timeoutRef.current) clearTimeout(timeoutRef.current);