Resend only failed messages and not the entire pack
This commit is contained in:
parent
d79ab8880d
commit
7fa6cbd53f
@ -27,6 +27,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.server.common.data.DataConstants;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
@ -83,7 +84,9 @@ import org.thingsboard.server.service.edge.rpc.fetch.TenantWidgetsBundlesEdgeEve
|
||||
import java.io.Closeable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
@ -108,6 +111,8 @@ public final class EdgeGrpcSession implements Closeable {
|
||||
private final Consumer<EdgeId> sessionCloseListener;
|
||||
private final ObjectMapper mapper;
|
||||
|
||||
private final Map<Integer, DownlinkMsg> pendingMsgsMap;
|
||||
|
||||
private EdgeContextComponent ctx;
|
||||
private Edge edge;
|
||||
private StreamObserver<RequestMsg> inputStream;
|
||||
@ -128,6 +133,7 @@ public final class EdgeGrpcSession implements Closeable {
|
||||
this.sessionCloseListener = sessionCloseListener;
|
||||
this.mapper = mapper;
|
||||
this.syncExecutorService = syncExecutorService;
|
||||
this.pendingMsgsMap = new HashMap<>();
|
||||
initInputStream();
|
||||
}
|
||||
|
||||
@ -214,6 +220,7 @@ public final class EdgeGrpcSession implements Closeable {
|
||||
startProcessingEdgeEvents(new DashboardsEdgeEventFetcher(ctx.getDashboardService()));
|
||||
|
||||
DownlinkMsg syncCompleteDownlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.setSyncCompletedMsg(SyncCompletedMsg.newBuilder().build())
|
||||
.build();
|
||||
sendDownlinkMsgsPack(Collections.singletonList(syncCompleteDownlinkMsg));
|
||||
@ -228,7 +235,9 @@ public final class EdgeGrpcSession implements Closeable {
|
||||
Futures.addCallback(future, new FutureCallback<>() {
|
||||
@Override
|
||||
public void onSuccess(@Nullable List<Void> result) {
|
||||
UplinkResponseMsg uplinkResponseMsg = UplinkResponseMsg.newBuilder().setSuccess(true).build();
|
||||
UplinkResponseMsg uplinkResponseMsg = UplinkResponseMsg.newBuilder()
|
||||
.setUplinkMsgId(uplinkMsg.getUplinkMsgId())
|
||||
.setSuccess(true).build();
|
||||
sendDownlinkMsg(ResponseMsg.newBuilder()
|
||||
.setUplinkResponseMsg(uplinkResponseMsg)
|
||||
.build());
|
||||
@ -236,7 +245,9 @@ public final class EdgeGrpcSession implements Closeable {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable t) {
|
||||
UplinkResponseMsg uplinkResponseMsg = UplinkResponseMsg.newBuilder().setSuccess(false).setErrorMsg(t.getMessage()).build();
|
||||
UplinkResponseMsg uplinkResponseMsg = UplinkResponseMsg.newBuilder()
|
||||
.setUplinkMsgId(uplinkMsg.getUplinkMsgId())
|
||||
.setSuccess(false).setErrorMsg(t.getMessage()).build();
|
||||
sendDownlinkMsg(ResponseMsg.newBuilder()
|
||||
.setUplinkResponseMsg(uplinkResponseMsg)
|
||||
.build());
|
||||
@ -247,6 +258,7 @@ public final class EdgeGrpcSession implements Closeable {
|
||||
private void onDownlinkResponse(DownlinkResponseMsg msg) {
|
||||
try {
|
||||
if (msg.getSuccess()) {
|
||||
pendingMsgsMap.remove(msg.getDownlinkMsgId());
|
||||
log.debug("[{}] Msg has been processed successfully! {}", edge.getRoutingKey(), msg);
|
||||
} else {
|
||||
log.error("[{}] Msg processing failed! Error msg: {}", edge.getRoutingKey(), msg.getErrorMsg());
|
||||
@ -325,17 +337,19 @@ public final class EdgeGrpcSession implements Closeable {
|
||||
|
||||
private boolean sendDownlinkMsgsPack(List<DownlinkMsg> downlinkMsgsPack) throws InterruptedException {
|
||||
boolean success;
|
||||
pendingMsgsMap.clear();
|
||||
downlinkMsgsPack.forEach(msg -> pendingMsgsMap.put(msg.getDownlinkMsgId(), msg));
|
||||
do {
|
||||
log.trace("[{}] [{}] downlink msg(s) are going to be send.", this.sessionId, downlinkMsgsPack.size());
|
||||
latch = new CountDownLatch(downlinkMsgsPack.size());
|
||||
for (DownlinkMsg downlinkMsg : downlinkMsgsPack) {
|
||||
log.trace("[{}] [{}] downlink msg(s) are going to be send.", this.sessionId, pendingMsgsMap.values().size());
|
||||
latch = new CountDownLatch(pendingMsgsMap.values().size());
|
||||
for (DownlinkMsg downlinkMsg : pendingMsgsMap.values()) {
|
||||
sendDownlinkMsg(ResponseMsg.newBuilder()
|
||||
.setDownlinkMsg(downlinkMsg)
|
||||
.build());
|
||||
}
|
||||
success = latch.await(10, TimeUnit.SECONDS);
|
||||
if (!success) {
|
||||
log.warn("[{}] Failed to deliver the batch: {}", this.sessionId, downlinkMsgsPack);
|
||||
log.warn("[{}] Failed to deliver the batch: {}", this.sessionId, pendingMsgsMap.values());
|
||||
}
|
||||
if (isConnected() && !success) {
|
||||
try {
|
||||
@ -383,6 +397,8 @@ public final class EdgeGrpcSession implements Closeable {
|
||||
case RPC_CALL:
|
||||
downlinkMsg = ctx.getDeviceProcessor().processRpcCallMsgToEdge(edgeEvent);
|
||||
break;
|
||||
default:
|
||||
log.warn("[{}][{}] Unsupported action type [{}]", edge.getTenantId(), this.sessionId, edgeEvent.getAction());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("[{}][{}] Exception during converting edge event to downlink msg", edge.getTenantId(), this.sessionId, e);
|
||||
|
||||
@ -18,6 +18,7 @@ package org.thingsboard.server.service.edge.rpc.processor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.AdminSettings;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.gen.edge.AdminSettingsUpdateMsg;
|
||||
import org.thingsboard.server.gen.edge.DownlinkMsg;
|
||||
@ -34,6 +35,7 @@ public class AdminSettingsEdgeProcessor extends BaseEdgeProcessor {
|
||||
AdminSettings adminSettings = mapper.convertValue(edgeEvent.getBody(), AdminSettings.class);
|
||||
AdminSettingsUpdateMsg t = adminSettingsMsgConstructor.constructAdminSettingsUpdateMsg(adminSettings);
|
||||
return DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllAdminSettingsUpdateMsg(Collections.singletonList(t))
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -121,6 +121,7 @@ public class AlarmEdgeProcessor extends BaseEdgeProcessor {
|
||||
Alarm alarm = alarmService.findAlarmByIdAsync(edgeEvent.getTenantId(), alarmId).get();
|
||||
if (alarm != null) {
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllAlarmUpdateMsg(Collections.singletonList(alarmMsgConstructor.constructAlarmUpdatedMsg(edge.getTenantId(), msgType, alarm)))
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@ package org.thingsboard.server.service.edge.rpc.processor;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.asset.Asset;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
@ -50,6 +51,7 @@ public class AssetEdgeProcessor extends BaseEdgeProcessor {
|
||||
AssetUpdateMsg assetUpdateMsg =
|
||||
assetMsgConstructor.constructAssetUpdatedMsg(msgType, asset, customerId);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllAssetUpdateMsg(Collections.singletonList(assetUpdateMsg))
|
||||
.build();
|
||||
}
|
||||
@ -59,6 +61,7 @@ public class AssetEdgeProcessor extends BaseEdgeProcessor {
|
||||
AssetUpdateMsg assetUpdateMsg =
|
||||
assetMsgConstructor.constructAssetDeleteMsg(assetId);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllAssetUpdateMsg(Collections.singletonList(assetUpdateMsg))
|
||||
.build();
|
||||
break;
|
||||
|
||||
@ -18,6 +18,7 @@ package org.thingsboard.server.service.edge.rpc.processor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.Customer;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
@ -53,6 +54,7 @@ public class CustomerEdgeProcessor extends BaseEdgeProcessor {
|
||||
CustomerUpdateMsg customerUpdateMsg =
|
||||
customerMsgConstructor.constructCustomerUpdatedMsg(msgType, customer);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllCustomerUpdateMsg(Collections.singletonList(customerUpdateMsg))
|
||||
.build();
|
||||
}
|
||||
@ -61,6 +63,7 @@ public class CustomerEdgeProcessor extends BaseEdgeProcessor {
|
||||
CustomerUpdateMsg customerUpdateMsg =
|
||||
customerMsgConstructor.constructCustomerDeleteMsg(customerId);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllCustomerUpdateMsg(Collections.singletonList(customerUpdateMsg))
|
||||
.build();
|
||||
break;
|
||||
|
||||
@ -18,6 +18,7 @@ package org.thingsboard.server.service.edge.rpc.processor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.Dashboard;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
@ -53,6 +54,7 @@ public class DashboardEdgeProcessor extends BaseEdgeProcessor {
|
||||
DashboardUpdateMsg dashboardUpdateMsg =
|
||||
dashboardMsgConstructor.constructDashboardUpdatedMsg(msgType, dashboard, customerId);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllDashboardUpdateMsg(Collections.singletonList(dashboardUpdateMsg))
|
||||
.build();
|
||||
}
|
||||
@ -62,6 +64,7 @@ public class DashboardEdgeProcessor extends BaseEdgeProcessor {
|
||||
DashboardUpdateMsg dashboardUpdateMsg =
|
||||
dashboardMsgConstructor.constructDashboardDeleteMsg(dashboardId);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllDashboardUpdateMsg(Collections.singletonList(dashboardUpdateMsg))
|
||||
.build();
|
||||
break;
|
||||
|
||||
@ -24,10 +24,12 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.RandomStringUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.rule.engine.api.RpcError;
|
||||
import org.thingsboard.server.common.data.Customer;
|
||||
import org.thingsboard.server.common.data.DataConstants;
|
||||
import org.thingsboard.server.common.data.Device;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
@ -48,7 +50,6 @@ import org.thingsboard.server.common.msg.TbMsg;
|
||||
import org.thingsboard.server.common.msg.TbMsgDataType;
|
||||
import org.thingsboard.server.common.msg.TbMsgMetaData;
|
||||
import org.thingsboard.server.dao.model.ModelConstants;
|
||||
import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.server.gen.edge.DeviceCredentialsUpdateMsg;
|
||||
import org.thingsboard.server.gen.edge.DeviceRpcCallMsg;
|
||||
import org.thingsboard.server.gen.edge.DeviceUpdateMsg;
|
||||
@ -308,6 +309,7 @@ public class DeviceEdgeProcessor extends BaseEdgeProcessor {
|
||||
DeviceUpdateMsg deviceUpdateMsg =
|
||||
deviceMsgConstructor.constructDeviceUpdatedMsg(msgType, device, customerId, null);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllDeviceUpdateMsg(Collections.singletonList(deviceUpdateMsg))
|
||||
.build();
|
||||
}
|
||||
@ -317,6 +319,7 @@ public class DeviceEdgeProcessor extends BaseEdgeProcessor {
|
||||
DeviceUpdateMsg deviceUpdateMsg =
|
||||
deviceMsgConstructor.constructDeviceDeleteMsg(deviceId);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllDeviceUpdateMsg(Collections.singletonList(deviceUpdateMsg))
|
||||
.build();
|
||||
break;
|
||||
@ -326,6 +329,7 @@ public class DeviceEdgeProcessor extends BaseEdgeProcessor {
|
||||
DeviceCredentialsUpdateMsg deviceCredentialsUpdateMsg =
|
||||
deviceMsgConstructor.constructDeviceCredentialsUpdatedMsg(deviceCredentials);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllDeviceCredentialsUpdateMsg(Collections.singletonList(deviceCredentialsUpdateMsg))
|
||||
.build();
|
||||
}
|
||||
@ -339,6 +343,7 @@ public class DeviceEdgeProcessor extends BaseEdgeProcessor {
|
||||
DeviceRpcCallMsg deviceRpcCallMsg =
|
||||
deviceMsgConstructor.constructDeviceRpcCallMsg(edgeEvent.getEntityId(), edgeEvent.getBody());
|
||||
return DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllDeviceRpcCallMsg(Collections.singletonList(deviceRpcCallMsg))
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@ package org.thingsboard.server.service.edge.rpc.processor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.DeviceProfile;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
import org.thingsboard.server.common.data.id.DeviceProfileId;
|
||||
@ -44,6 +45,7 @@ public class DeviceProfileEdgeProcessor extends BaseEdgeProcessor {
|
||||
DeviceProfileUpdateMsg deviceProfileUpdateMsg =
|
||||
deviceProfileMsgConstructor.constructDeviceProfileUpdatedMsg(msgType, deviceProfile);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllDeviceProfileUpdateMsg(Collections.singletonList(deviceProfileUpdateMsg))
|
||||
.build();
|
||||
}
|
||||
@ -52,6 +54,7 @@ public class DeviceProfileEdgeProcessor extends BaseEdgeProcessor {
|
||||
DeviceProfileUpdateMsg deviceProfileUpdateMsg =
|
||||
deviceProfileMsgConstructor.constructDeviceProfileDeleteMsg(deviceProfileId);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllDeviceProfileUpdateMsg(Collections.singletonList(deviceProfileUpdateMsg))
|
||||
.build();
|
||||
break;
|
||||
|
||||
@ -22,6 +22,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.Device;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
@ -66,6 +67,7 @@ public class EntityEdgeProcessor extends BaseEdgeProcessor {
|
||||
DeviceUpdateMsg d = deviceMsgConstructor
|
||||
.constructDeviceUpdatedMsg(UpdateMsgType.ENTITY_MERGE_RPC_MESSAGE, device, customerId, conflictName);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllDeviceUpdateMsg(Collections.singletonList(d))
|
||||
.build();
|
||||
}
|
||||
@ -81,6 +83,7 @@ public class EntityEdgeProcessor extends BaseEdgeProcessor {
|
||||
.setDeviceIdLSB(deviceId.getId().getLeastSignificantBits())
|
||||
.build();
|
||||
DownlinkMsg.Builder builder = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllDeviceCredentialsRequestMsg(Collections.singletonList(deviceCredentialsRequestMsg));
|
||||
downlinkMsg = builder.build();
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@ package org.thingsboard.server.service.edge.rpc.processor;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.EntityView;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
@ -50,6 +51,7 @@ public class EntityViewEdgeProcessor extends BaseEdgeProcessor {
|
||||
EntityViewUpdateMsg entityViewUpdateMsg =
|
||||
entityViewMsgConstructor.constructEntityViewUpdatedMsg(msgType, entityView, customerId);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllEntityViewUpdateMsg(Collections.singletonList(entityViewUpdateMsg))
|
||||
.build();
|
||||
}
|
||||
@ -59,6 +61,7 @@ public class EntityViewEdgeProcessor extends BaseEdgeProcessor {
|
||||
EntityViewUpdateMsg entityViewUpdateMsg =
|
||||
entityViewMsgConstructor.constructEntityViewDeleteMsg(entityViewId);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllEntityViewUpdateMsg(Collections.singletonList(entityViewUpdateMsg))
|
||||
.build();
|
||||
break;
|
||||
|
||||
@ -20,6 +20,7 @@ import com.google.common.util.concurrent.Futures;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.EntityType;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
@ -119,6 +120,7 @@ public class RelationEdgeProcessor extends BaseEdgeProcessor {
|
||||
EntityRelation entityRelation = mapper.convertValue(edgeEvent.getBody(), EntityRelation.class);
|
||||
RelationUpdateMsg r = relationMsgConstructor.constructRelationUpdatedMsg(msgType, entityRelation);
|
||||
return DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllRelationUpdateMsg(Collections.singletonList(r))
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@ package org.thingsboard.server.service.edge.rpc.processor;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
@ -48,6 +49,7 @@ public class RuleChainEdgeProcessor extends BaseEdgeProcessor {
|
||||
RuleChainUpdateMsg ruleChainUpdateMsg =
|
||||
ruleChainMsgConstructor.constructRuleChainUpdatedMsg(edge.getRootRuleChainId(), msgType, ruleChain);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllRuleChainUpdateMsg(Collections.singletonList(ruleChainUpdateMsg))
|
||||
.build();
|
||||
}
|
||||
@ -55,6 +57,7 @@ public class RuleChainEdgeProcessor extends BaseEdgeProcessor {
|
||||
case DELETED:
|
||||
case UNASSIGNED_FROM_EDGE:
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllRuleChainUpdateMsg(Collections.singletonList(ruleChainMsgConstructor.constructRuleChainDeleteMsg(ruleChainId)))
|
||||
.build();
|
||||
break;
|
||||
@ -72,6 +75,7 @@ public class RuleChainEdgeProcessor extends BaseEdgeProcessor {
|
||||
ruleChainMsgConstructor.constructRuleChainMetadataUpdatedMsg(msgType, ruleChainMetaData);
|
||||
if (ruleChainMetadataUpdateMsg != null) {
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllRuleChainMetadataUpdateMsg(Collections.singletonList(ruleChainMetadataUpdateMsg))
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -31,6 +31,7 @@ import org.thingsboard.rule.engine.api.msg.DeviceAttributesEventNotificationMsg;
|
||||
import org.thingsboard.server.common.data.DataConstants;
|
||||
import org.thingsboard.server.common.data.Device;
|
||||
import org.thingsboard.server.common.data.DeviceProfile;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.EntityType;
|
||||
import org.thingsboard.server.common.data.EntityView;
|
||||
import org.thingsboard.server.common.data.asset.Asset;
|
||||
@ -321,6 +322,7 @@ public class TelemetryEdgeProcessor extends BaseEdgeProcessor {
|
||||
private DownlinkMsg constructEntityDataProtoMsg(EntityId entityId, EdgeEventActionType actionType, JsonElement entityData) {
|
||||
EntityDataProto entityDataProto = entityDataMsgConstructor.constructEntityDataMsg(entityId, actionType, entityData);
|
||||
return DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllEntityData(Collections.singletonList(entityDataProto))
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@ package org.thingsboard.server.service.edge.rpc.processor;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.User;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
@ -46,12 +47,14 @@ public class UserEdgeProcessor extends BaseEdgeProcessor {
|
||||
if (user != null) {
|
||||
CustomerId customerId = getCustomerIdIfEdgeAssignedToCustomer(user, edge);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllUserUpdateMsg(Collections.singletonList(userMsgConstructor.constructUserUpdatedMsg(msgType, user, customerId)))
|
||||
.build();
|
||||
}
|
||||
break;
|
||||
case DELETED:
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllUserUpdateMsg(Collections.singletonList(userMsgConstructor.constructUserDeleteMsg(userId)))
|
||||
.build();
|
||||
break;
|
||||
@ -61,6 +64,7 @@ public class UserEdgeProcessor extends BaseEdgeProcessor {
|
||||
UserCredentialsUpdateMsg userCredentialsUpdateMsg =
|
||||
userMsgConstructor.constructUserCredentialsUpdatedMsg(userCredentialsByUserId);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllUserCredentialsUpdateMsg(Collections.singletonList(userCredentialsUpdateMsg))
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@ package org.thingsboard.server.service.edge.rpc.processor;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
import org.thingsboard.server.common.data.id.WidgetsBundleId;
|
||||
@ -44,6 +45,7 @@ public class WidgetBundleEdgeProcessor extends BaseEdgeProcessor {
|
||||
WidgetsBundleUpdateMsg widgetsBundleUpdateMsg =
|
||||
widgetsBundleMsgConstructor.constructWidgetsBundleUpdateMsg(msgType, widgetsBundle);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllWidgetsBundleUpdateMsg(Collections.singletonList(widgetsBundleUpdateMsg))
|
||||
.build();
|
||||
}
|
||||
@ -52,6 +54,7 @@ public class WidgetBundleEdgeProcessor extends BaseEdgeProcessor {
|
||||
WidgetsBundleUpdateMsg widgetsBundleUpdateMsg =
|
||||
widgetsBundleMsgConstructor.constructWidgetsBundleDeleteMsg(widgetsBundleId);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllWidgetsBundleUpdateMsg(Collections.singletonList(widgetsBundleUpdateMsg))
|
||||
.build();
|
||||
break;
|
||||
|
||||
@ -17,6 +17,7 @@ package org.thingsboard.server.service.edge.rpc.processor;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
import org.thingsboard.server.common.data.id.WidgetTypeId;
|
||||
@ -44,6 +45,7 @@ public class WidgetTypeEdgeProcessor extends BaseEdgeProcessor {
|
||||
WidgetTypeUpdateMsg widgetTypeUpdateMsg =
|
||||
widgetTypeMsgConstructor.constructWidgetTypeUpdateMsg(msgType, widgetType);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllWidgetTypeUpdateMsg(Collections.singletonList(widgetTypeUpdateMsg))
|
||||
.build();
|
||||
}
|
||||
@ -52,6 +54,7 @@ public class WidgetTypeEdgeProcessor extends BaseEdgeProcessor {
|
||||
WidgetTypeUpdateMsg widgetTypeUpdateMsg =
|
||||
widgetTypeMsgConstructor.constructWidgetTypeDeleteMsg(widgetTypeId);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addAllWidgetTypeUpdateMsg(Collections.singletonList(widgetTypeUpdateMsg))
|
||||
.build();
|
||||
break;
|
||||
|
||||
@ -18,6 +18,8 @@ package org.thingsboard.server.common.data;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventType;
|
||||
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
|
||||
@Slf4j
|
||||
public final class EdgeUtils {
|
||||
|
||||
@ -57,4 +59,8 @@ public final class EdgeUtils {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static int nextPositiveInt() {
|
||||
return ThreadLocalRandom.current().nextInt(0, Integer.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -434,11 +434,13 @@ message UplinkMsg {
|
||||
message UplinkResponseMsg {
|
||||
bool success = 1;
|
||||
string errorMsg = 2;
|
||||
int32 uplinkMsgId = 3;
|
||||
}
|
||||
|
||||
message DownlinkResponseMsg {
|
||||
bool success = 1;
|
||||
string errorMsg = 2;
|
||||
int32 downlinkMsgId = 3;
|
||||
}
|
||||
|
||||
message DownlinkMsg {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user