From 8dc06e53a8c5c1337b3dc6262f76addeab47c01c Mon Sep 17 00:00:00 2001 From: Volodymyr Babak Date: Wed, 26 Jan 2022 17:18:12 +0200 Subject: [PATCH] Moved update of edge on device actor to tb cluster service --- .../server/controller/DeviceController.java | 6 ------ .../service/queue/DefaultTbClusterService.java | 16 ++++++++++++++++ .../server/common/data/id/EdgeId.java | 10 ++++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/DeviceController.java b/application/src/main/java/org/thingsboard/server/controller/DeviceController.java index 3106ede042..ec2b70048c 100644 --- a/application/src/main/java/org/thingsboard/server/controller/DeviceController.java +++ b/application/src/main/java/org/thingsboard/server/controller/DeviceController.java @@ -875,9 +875,6 @@ public class DeviceController extends BaseController { Device savedDevice = checkNotNull(deviceService.assignDeviceToEdge(getCurrentUser().getTenantId(), deviceId, edgeId)); - tbClusterService.pushMsgToCore(new DeviceEdgeUpdateMsg(savedDevice.getTenantId(), - savedDevice.getId(), edgeId), null); - logEntityAction(deviceId, savedDevice, savedDevice.getCustomerId(), ActionType.ASSIGNED_TO_EDGE, null, strDeviceId, strEdgeId, edge.getName()); @@ -918,9 +915,6 @@ public class DeviceController extends BaseController { Device savedDevice = checkNotNull(deviceService.unassignDeviceFromEdge(getCurrentUser().getTenantId(), deviceId, edgeId)); - tbClusterService.pushMsgToCore(new DeviceEdgeUpdateMsg(savedDevice.getTenantId(), - savedDevice.getId(), null), null); - logEntityAction(deviceId, device, device.getCustomerId(), ActionType.UNASSIGNED_FROM_EDGE, null, strDeviceId, strEdgeId, edge.getName()); diff --git a/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java b/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java index 471e97f567..4344507dd9 100644 --- a/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java +++ b/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java @@ -21,6 +21,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import org.thingsboard.rule.engine.api.msg.DeviceEdgeUpdateMsg; import org.thingsboard.rule.engine.api.msg.DeviceNameOrTypeUpdateMsg; import org.thingsboard.server.cluster.TbClusterService; import org.thingsboard.server.common.data.EdgeUtils; @@ -455,6 +456,21 @@ public class DefaultTbClusterService implements TbClusterService { TransportProtos.EdgeNotificationMsgProto msg = builder.build(); log.trace("[{}] sending notification to edge service {}", tenantId.getId(), msg); pushMsgToCore(tenantId, entityId != null ? entityId : tenantId, TransportProtos.ToCoreMsg.newBuilder().setEdgeNotificationMsg(msg).build(), null); + + if (entityId != null && EntityType.DEVICE.equals(entityId.getEntityType())) { + pushDeviceUpdateMessage(tenantId, edgeId, entityId, action); + } } + private void pushDeviceUpdateMessage(TenantId tenantId, EdgeId edgeId, EntityId entityId, EdgeEventActionType action) { + log.trace("{} Going to send edge update notification for device actor, device id {}, edge id {}", tenantId, entityId, edgeId); + switch (action) { + case ASSIGNED_TO_EDGE: + pushMsgToCore(new DeviceEdgeUpdateMsg(tenantId, new DeviceId(entityId.getId()), edgeId), null); + break; + case UNASSIGNED_FROM_EDGE: + pushMsgToCore(new DeviceEdgeUpdateMsg(tenantId, new DeviceId(entityId.getId()), null), null); + break; + } + } } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/id/EdgeId.java b/common/data/src/main/java/org/thingsboard/server/common/data/id/EdgeId.java index ff975059a1..ef5d5ce78e 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/id/EdgeId.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/id/EdgeId.java @@ -19,6 +19,8 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.annotations.ApiModelProperty; +import org.springframework.util.ConcurrentReferenceHashMap; +import org.springframework.util.ConcurrentReferenceHashMap.ReferenceType; import org.thingsboard.server.common.data.EntityType; import java.util.UUID; @@ -27,6 +29,9 @@ public class EdgeId extends UUIDBased implements EntityId { private static final long serialVersionUID = 1L; + @JsonIgnore + static final ConcurrentReferenceHashMap edges = new ConcurrentReferenceHashMap<>(16, ReferenceType.SOFT); + @JsonCreator public EdgeId(@JsonProperty("id") UUID id) { super(id); @@ -41,4 +46,9 @@ public class EdgeId extends UUIDBased implements EntityId { public EntityType getEntityType() { return EntityType.EDGE; } + + @JsonCreator + public static EdgeId fromUUID(@JsonProperty("id") UUID id) { + return edges.computeIfAbsent(id, EdgeId::new); + } }