diff --git a/application/src/main/java/org/thingsboard/server/service/subscription/DefaultTbLocalSubscriptionService.java b/application/src/main/java/org/thingsboard/server/service/subscription/DefaultTbLocalSubscriptionService.java index bd2ae08474..9e08e0359b 100644 --- a/application/src/main/java/org/thingsboard/server/service/subscription/DefaultTbLocalSubscriptionService.java +++ b/application/src/main/java/org/thingsboard/server/service/subscription/DefaultTbLocalSubscriptionService.java @@ -227,7 +227,7 @@ public class DefaultTbLocalSubscriptionService implements TbLocalSubscriptionSer onSubEventCallback(tenantId, entityId.getId(), seqNumber, entityUpdatesInfo, callback); } - public void onSubEventCallback(TenantId tenantId, UUID entityId, int seqNumber, TbEntityUpdatesInfo entityUpdatesInfo, TbCallback callback) { + private void onSubEventCallback(TenantId tenantId, UUID entityId, int seqNumber, TbEntityUpdatesInfo entityUpdatesInfo, TbCallback callback) { log.debug("[{}][{}][{}] Processing sub event callback: {}.", tenantId, entityId, seqNumber, entityUpdatesInfo); entityUpdates.put(entityId, entityUpdatesInfo); Set> pendingSubs = null; diff --git a/application/src/main/java/org/thingsboard/server/service/subscription/TbAlarmsSubscription.java b/application/src/main/java/org/thingsboard/server/service/subscription/TbAlarmsSubscription.java index a9ab7797b7..a1d0aec29f 100644 --- a/application/src/main/java/org/thingsboard/server/service/subscription/TbAlarmsSubscription.java +++ b/application/src/main/java/org/thingsboard/server/service/subscription/TbAlarmsSubscription.java @@ -36,8 +36,12 @@ public class TbAlarmsSubscription extends TbSubscription subscription : subs) { - if (subscription.getType() != sub.getType()) { - continue; // skip unchanged types - } switch (subscription.getType()) { case NOTIFICATIONS: case NOTIFICATIONS_COUNT: @@ -175,7 +151,6 @@ public class TbEntityLocalSubsInfo { var attrSub = (TbAttributeSubscription) subscription; if (!newState.attrAllKeys && attrSub.isAllKeys()) { newState.attrAllKeys = true; - newState.attrKeys = null; continue; } if (newState.attrKeys == null) { @@ -188,7 +163,6 @@ public class TbEntityLocalSubsInfo { var tsSub = (TbTimeSeriesSubscription) subscription; if (!newState.tsAllKeys && tsSub.isAllKeys()) { newState.tsAllKeys = true; - newState.tsKeys = null; continue; } if (newState.tsKeys == null) { diff --git a/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscription.java b/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscription.java index 68c042ea51..6d210befc0 100644 --- a/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscription.java +++ b/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscription.java @@ -15,25 +15,40 @@ */ package org.thingsboard.server.service.subscription; +import lombok.AllArgsConstructor; import lombok.Data; -import lombok.EqualsAndHashCode; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; +import java.util.Objects; import java.util.function.BiConsumer; @Data -@EqualsAndHashCode(cacheStrategy = EqualsAndHashCode.CacheStrategy.LAZY, doNotUseGetters = true) +@AllArgsConstructor public abstract class TbSubscription { - @EqualsAndHashCode.Exclude private final String serviceId; private final String sessionId; private final int subscriptionId; private final TenantId tenantId; private final EntityId entityId; private final TbSubscriptionType type; - @EqualsAndHashCode.Exclude private final BiConsumer, T> updateProcessor; + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TbSubscription that = (TbSubscription) o; + return subscriptionId == that.subscriptionId && + sessionId.equals(that.sessionId) && + tenantId.equals(that.tenantId) && + entityId.equals(that.entityId) && + type == that.type; + } + + @Override + public int hashCode() { + return Objects.hash(sessionId, subscriptionId, tenantId, entityId, type); + } } diff --git a/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionUtils.java b/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionUtils.java index 3d0037caba..f5572a9a5c 100644 --- a/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionUtils.java +++ b/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionUtils.java @@ -109,9 +109,8 @@ public class TbSubscriptionUtils { .type(event); if (!ComponentLifecycleEvent.DELETED.equals(event)) { builder.info(new TbSubscriptionsInfo(proto.getNotifications(), proto.getAlarms(), - proto.getTsAllKeys(), proto.getAttrAllKeys(), - proto.getTsKeysCount() > 0 ? new HashSet<>(proto.getTsKeysList()) : null, - proto.getAttrKeysCount() > 0 ? new HashSet<>(proto.getAttrKeysList()) : null, + proto.getTsAllKeys(), proto.getTsKeysCount() > 0 ? new HashSet<>(proto.getTsKeysList()) : null, + proto.getAttrAllKeys(), proto.getAttrKeysCount() > 0 ? new HashSet<>(proto.getAttrKeysList()) : null, proto.getSeqNumber())); } return builder.build(); diff --git a/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionsInfo.java b/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionsInfo.java index 7430d2e386..48464d5297 100644 --- a/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionsInfo.java +++ b/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionsInfo.java @@ -27,17 +27,16 @@ import java.util.Set; */ @RequiredArgsConstructor @AllArgsConstructor -@EqualsAndHashCode +@EqualsAndHashCode(exclude = {"seqNumber"}) @ToString public class TbSubscriptionsInfo { protected boolean notifications; protected boolean alarms; protected boolean tsAllKeys; - protected boolean attrAllKeys; // primitives first for equals performance protected Set tsKeys; + protected boolean attrAllKeys; protected Set attrKeys; - @EqualsAndHashCode.Exclude protected int seqNumber; public boolean isEmpty() { @@ -49,7 +48,7 @@ public class TbSubscriptionsInfo { } protected TbSubscriptionsInfo copy(int seqNumber) { - return new TbSubscriptionsInfo(notifications, alarms, tsAllKeys, attrAllKeys, tsKeys, attrKeys, seqNumber); + return new TbSubscriptionsInfo(notifications, alarms, tsAllKeys, tsKeys, attrAllKeys, attrKeys, seqNumber); } } diff --git a/application/src/main/java/org/thingsboard/server/service/subscription/TbTimeSeriesSubscription.java b/application/src/main/java/org/thingsboard/server/service/subscription/TbTimeSeriesSubscription.java index 0fc9a80122..10a24106ad 100644 --- a/application/src/main/java/org/thingsboard/server/service/subscription/TbTimeSeriesSubscription.java +++ b/application/src/main/java/org/thingsboard/server/service/subscription/TbTimeSeriesSubscription.java @@ -53,8 +53,12 @@ public class TbTimeSeriesSubscription extends TbSubscription extends TbSubscription super(serviceId, sessionId, subscriptionId, tenantId, entityId, type, updateProcessor); } - @Override - protected boolean canEqual(final Object other) { - return other instanceof AbstractNotificationSubscription; - } - } diff --git a/application/src/main/java/org/thingsboard/server/service/ws/notification/sub/NotificationsCountSubscription.java b/application/src/main/java/org/thingsboard/server/service/ws/notification/sub/NotificationsCountSubscription.java index 491acedb1e..171416a63d 100644 --- a/application/src/main/java/org/thingsboard/server/service/ws/notification/sub/NotificationsCountSubscription.java +++ b/application/src/main/java/org/thingsboard/server/service/ws/notification/sub/NotificationsCountSubscription.java @@ -34,11 +34,6 @@ public class NotificationsCountSubscription extends AbstractNotificationSubscrip super(serviceId, sessionId, subscriptionId, tenantId, entityId, TbSubscriptionType.NOTIFICATIONS_COUNT, updateProcessor); } - @Override - protected boolean canEqual(final Object other) { - return other instanceof NotificationsCountSubscription; - } - public UnreadNotificationsCountUpdate createUpdate() { return UnreadNotificationsCountUpdate.builder() .cmdId(getSubscriptionId()) diff --git a/application/src/main/java/org/thingsboard/server/service/ws/notification/sub/NotificationsSubscription.java b/application/src/main/java/org/thingsboard/server/service/ws/notification/sub/NotificationsSubscription.java index 867f48b72e..8306e7f95c 100644 --- a/application/src/main/java/org/thingsboard/server/service/ws/notification/sub/NotificationsSubscription.java +++ b/application/src/main/java/org/thingsboard/server/service/ws/notification/sub/NotificationsSubscription.java @@ -47,11 +47,6 @@ public class NotificationsSubscription extends AbstractNotificationSubscription< this.limit = limit; } - @Override - protected boolean canEqual(final Object other) { - return other instanceof NotificationsSubscription; - } - public UnreadNotificationsUpdate createFullUpdate() { return UnreadNotificationsUpdate.builder() .cmdId(getSubscriptionId())