Fix Telemetry subscription service.
This commit is contained in:
parent
766a56fa9e
commit
4d6ee559fd
@ -35,18 +35,7 @@ import org.thingsboard.server.common.data.id.EntityId;
|
|||||||
import org.thingsboard.server.common.data.id.EntityIdFactory;
|
import org.thingsboard.server.common.data.id.EntityIdFactory;
|
||||||
import org.thingsboard.server.common.data.id.EntityViewId;
|
import org.thingsboard.server.common.data.id.EntityViewId;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
import org.thingsboard.server.common.data.id.TenantId;
|
||||||
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
|
import org.thingsboard.server.common.data.kv.*;
|
||||||
import org.thingsboard.server.common.data.kv.BaseAttributeKvEntry;
|
|
||||||
import org.thingsboard.server.common.data.kv.BaseReadTsKvQuery;
|
|
||||||
import org.thingsboard.server.common.data.kv.BasicTsKvEntry;
|
|
||||||
import org.thingsboard.server.common.data.kv.BooleanDataEntry;
|
|
||||||
import org.thingsboard.server.common.data.kv.DataType;
|
|
||||||
import org.thingsboard.server.common.data.kv.DoubleDataEntry;
|
|
||||||
import org.thingsboard.server.common.data.kv.KvEntry;
|
|
||||||
import org.thingsboard.server.common.data.kv.LongDataEntry;
|
|
||||||
import org.thingsboard.server.common.data.kv.ReadTsKvQuery;
|
|
||||||
import org.thingsboard.server.common.data.kv.StringDataEntry;
|
|
||||||
import org.thingsboard.server.common.data.kv.TsKvEntry;
|
|
||||||
import org.thingsboard.server.common.msg.cluster.SendToClusterMsg;
|
import org.thingsboard.server.common.msg.cluster.SendToClusterMsg;
|
||||||
import org.thingsboard.server.common.msg.cluster.ServerAddress;
|
import org.thingsboard.server.common.msg.cluster.ServerAddress;
|
||||||
import org.thingsboard.server.dao.attributes.AttributesService;
|
import org.thingsboard.server.dao.attributes.AttributesService;
|
||||||
@ -381,7 +370,7 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio
|
|||||||
|
|
||||||
private void addRemoteWsSubscription(ServerAddress address, String sessionId, Subscription subscription) {
|
private void addRemoteWsSubscription(ServerAddress address, String sessionId, Subscription subscription) {
|
||||||
EntityId entityId = subscription.getEntityId();
|
EntityId entityId = subscription.getEntityId();
|
||||||
log.trace("[{}] Registering remote subscription [{}] for device [{}] to [{}]", sessionId, subscription.getSubscriptionId(), entityId, address);
|
log.trace("[{}] Registering remote subscription [{}] for entity [{}] to [{}]", sessionId, subscription.getSubscriptionId(), entityId, address);
|
||||||
registerSubscription(sessionId, entityId, subscription);
|
registerSubscription(sessionId, entityId, subscription);
|
||||||
if (subscription.getType() == TelemetryFeature.ATTRIBUTES) {
|
if (subscription.getType() == TelemetryFeature.ATTRIBUTES) {
|
||||||
final Map<String, Long> keyStates = subscription.getKeyStates();
|
final Map<String, Long> keyStates = subscription.getKeyStates();
|
||||||
@ -401,17 +390,22 @@ public class DefaultTelemetrySubscriptionService implements TelemetrySubscriptio
|
|||||||
long curTs = System.currentTimeMillis();
|
long curTs = System.currentTimeMillis();
|
||||||
List<ReadTsKvQuery> queries = new ArrayList<>();
|
List<ReadTsKvQuery> queries = new ArrayList<>();
|
||||||
subscription.getKeyStates().entrySet().forEach(e -> {
|
subscription.getKeyStates().entrySet().forEach(e -> {
|
||||||
queries.add(new BaseReadTsKvQuery(e.getKey(), e.getValue() + 1L, curTs));
|
if (curTs > e.getValue()) {
|
||||||
|
queries.add(new BaseReadTsKvQuery(e.getKey(), e.getValue() + 1L, curTs, 0, 1000, Aggregation.NONE));
|
||||||
|
} else {
|
||||||
|
log.debug("[{}] Invalid subscription [{}], entityId [{}] curTs [{}]", sessionId, subscription, entityId, curTs);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
if (!queries.isEmpty()) {
|
||||||
DonAsynchron.withCallback(tsService.findAll(entityId, queries),
|
DonAsynchron.withCallback(tsService.findAll(entityId, queries),
|
||||||
missedUpdates -> {
|
missedUpdates -> {
|
||||||
if (missedUpdates != null && !missedUpdates.isEmpty()) {
|
if (missedUpdates != null && !missedUpdates.isEmpty()) {
|
||||||
tellRemoteSubUpdate(address, sessionId, new SubscriptionUpdate(subscription.getSubscriptionId(), missedUpdates));
|
tellRemoteSubUpdate(address, sessionId, new SubscriptionUpdate(subscription.getSubscriptionId(), missedUpdates));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
e -> log.error("Failed to fetch missed updates.", e),
|
e -> log.error("Failed to fetch missed updates.", e),
|
||||||
tsCallBackExecutor);
|
tsCallBackExecutor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user