From 93e8770023a759a951d3f29f8b4e850c6474e3e4 Mon Sep 17 00:00:00 2001 From: ViacheslavKlimov Date: Thu, 8 Jun 2023 18:28:57 +0300 Subject: [PATCH] Don't write to cache on each deduplication --- .../DefaultNotificationDeduplicationService.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/notification/DefaultNotificationDeduplicationService.java b/common/queue/src/main/java/org/thingsboard/server/queue/notification/DefaultNotificationDeduplicationService.java index a233accf71..5284f1f1b4 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/notification/DefaultNotificationDeduplicationService.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/notification/DefaultNotificationDeduplicationService.java @@ -69,8 +69,8 @@ public class DefaultNotificationDeduplicationService implements NotificationDedu } boolean alreadyProcessed = false; + long deduplicationDuration = getDeduplicationDuration(trigger); if (lastProcessedTs != null) { - long deduplicationDuration = getDeduplicationDuration(trigger); long passed = System.currentTimeMillis() - lastProcessedTs; log.trace("Deduplicating trigger {} by key '{}'. Deduplication duration: {} ms, passed: {} ms", trigger.getType(), deduplicationKey, deduplicationDuration, passed); @@ -84,9 +84,12 @@ public class DefaultNotificationDeduplicationService implements NotificationDedu } localCache.put(deduplicationKey, lastProcessedTs); if (!onlyLocalCache) { - Cache externalCache = cacheManager.getCache(CacheConstants.SENT_NOTIFICATIONS_CACHE); - if (externalCache != null) { - externalCache.put(deduplicationKey, lastProcessedTs); + if (!alreadyProcessed || deduplicationDuration == 0) { + // if lastProcessedTs is changed or if deduplicating infinitely (so that cache value not removed by ttl) + Cache externalCache = cacheManager.getCache(CacheConstants.SENT_NOTIFICATIONS_CACHE); + if (externalCache != null) { + externalCache.put(deduplicationKey, lastProcessedTs); + } } } return alreadyProcessed;