Fix notification deduplication service (ConcurrentModificationException for deduplicationDurations map)

This commit is contained in:
ViacheslavKlimov 2024-05-06 12:22:26 +03:00
parent 85f2047c8b
commit f23061a9ae

View File

@ -29,9 +29,8 @@ import org.thingsboard.server.common.data.notification.rule.trigger.Notification
import org.thingsboard.server.common.data.notification.rule.trigger.config.NotificationRuleTriggerType; import org.thingsboard.server.common.data.notification.rule.trigger.config.NotificationRuleTriggerType;
import org.thingsboard.server.queue.util.PropertyUtils; import org.thingsboard.server.queue.util.PropertyUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;
import static org.springframework.util.ConcurrentReferenceHashMap.ReferenceType.SOFT; import static org.springframework.util.ConcurrentReferenceHashMap.ReferenceType.SOFT;
@ -41,7 +40,7 @@ import static org.springframework.util.ConcurrentReferenceHashMap.ReferenceType.
@Slf4j @Slf4j
public class DefaultNotificationDeduplicationService implements NotificationDeduplicationService { public class DefaultNotificationDeduplicationService implements NotificationDeduplicationService {
private Map<NotificationRuleTriggerType, Long> deduplicationDurations; private ConcurrentMap<NotificationRuleTriggerType, Long> deduplicationDurations;
@Autowired(required = false) @Autowired(required = false)
private CacheManager cacheManager; private CacheManager cacheManager;
@ -116,7 +115,7 @@ public class DefaultNotificationDeduplicationService implements NotificationDedu
@Autowired @Autowired
public void setDeduplicationDurations(@Value("${notification_system.rules.deduplication_durations:}") public void setDeduplicationDurations(@Value("${notification_system.rules.deduplication_durations:}")
String deduplicationDurationsStr) { String deduplicationDurationsStr) {
this.deduplicationDurations = new HashMap<>(); this.deduplicationDurations = new ConcurrentHashMap<>();
PropertyUtils.getProps(deduplicationDurationsStr).forEach((triggerType, duration) -> { PropertyUtils.getProps(deduplicationDurationsStr).forEach((triggerType, duration) -> {
this.deduplicationDurations.put(NotificationRuleTriggerType.valueOf(triggerType), Long.parseLong(duration)); this.deduplicationDurations.put(NotificationRuleTriggerType.valueOf(triggerType), Long.parseLong(duration));
}); });