Browse Source

Do not push entity updated to edge on device creation from edge

pull/5061/head
Volodymyr Babak 5 years ago
committed by Andrew Shvayka
parent
commit
3bf48f0f5e
  1. 2
      application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/DeviceEdgeProcessor.java
  2. 7
      application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java
  3. 20
      application/src/test/java/org/thingsboard/server/edge/BaseEdgeTest.java
  4. 2
      common/cluster-api/src/main/java/org/thingsboard/server/cluster/TbClusterService.java

2
application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/DeviceEdgeProcessor.java

@ -215,7 +215,7 @@ public class DeviceEdgeProcessor extends BaseEdgeProcessor {
device.setDeviceProfileId(deviceProfileId);
}
Device savedDevice = deviceService.saveDevice(device, false);
tbClusterService.onDeviceUpdated(savedDevice, device);
tbClusterService.onDeviceUpdated(savedDevice, device, false);
if (created) {
DeviceCredentials deviceCredentials = new DeviceCredentials();
deviceCredentials.setDeviceId(new DeviceId(savedDevice.getUuidId()));

7
application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java

@ -385,6 +385,11 @@ public class DefaultTbClusterService implements TbClusterService {
@Override
public void onDeviceUpdated(Device device, Device old) {
onDeviceUpdated(device, old, true);
}
@Override
public void onDeviceUpdated(Device device, Device old, boolean notifyEdge) {
var created = old == null;
broadcastEntityChangeToTransport(device.getTenantId(), device.getId(), device, null);
if (old != null && (!device.getName().equals(old.getName()) || !device.getType().equals(old.getType()))) {
@ -393,7 +398,7 @@ public class DefaultTbClusterService implements TbClusterService {
broadcastEntityStateChangeEvent(device.getTenantId(), device.getId(), created ? ComponentLifecycleEvent.CREATED : ComponentLifecycleEvent.UPDATED);
sendDeviceStateServiceEvent(device.getTenantId(), device.getId(), created, !created, false);
otaPackageStateService.update(device, old);
if (!created) {
if (!created && notifyEdge) {
sendNotificationMsgToEdgeService(device.getTenantId(), null, device.getId(), null, null, EdgeEventActionType.UPDATED);
}
}

20
application/src/test/java/org/thingsboard/server/edge/BaseEdgeTest.java

@ -1568,11 +1568,14 @@ abstract public class BaseEdgeTest extends AbstractControllerTest {
private void sendAttributesRequest() throws Exception {
Device device = findDeviceByName("Edge Device 1");
sendAttributesRequest(device, DataConstants.SERVER_SCOPE, "{\"key1\":\"value1\"}", "key1", "value1");
sendAttributesRequest(device, DataConstants.SHARED_SCOPE, "{\"key2\":\"value2\"}", "key2", "value2");
sendAttributesRequest(device, DataConstants.SERVER_SCOPE, "{\"key1\":\"value1\"}",
"key1", "value1", 2);
sendAttributesRequest(device, DataConstants.SHARED_SCOPE, "{\"key2\":\"value2\"}",
"key2", "value2", 1);
}
private void sendAttributesRequest(Device device, String scope, String attributesDataStr, String expectedKey, String expectedValue) throws Exception {
private void sendAttributesRequest(Device device, String scope, String attributesDataStr, String expectedKey,
String expectedValue, int expectedSize) throws Exception {
JsonNode attributesData = mapper.readTree(attributesDataStr);
doPost("/api/plugins/telemetry/DEVICE/" + device.getId().getId().toString() + "/attributes/" + scope,
@ -1608,10 +1611,13 @@ abstract public class BaseEdgeTest extends AbstractControllerTest {
Assert.assertTrue(latestEntityDataMsg.hasAttributesUpdatedMsg());
TransportProtos.PostAttributeMsg attributesUpdatedMsg = latestEntityDataMsg.getAttributesUpdatedMsg();
Assert.assertEquals(1, attributesUpdatedMsg.getKvCount());
TransportProtos.KeyValueProto keyValueProto = attributesUpdatedMsg.getKv(0);
Assert.assertEquals(expectedKey, keyValueProto.getKey());
Assert.assertEquals(expectedValue, keyValueProto.getStringV());
Assert.assertEquals(expectedSize, attributesUpdatedMsg.getKvList().size());
for (TransportProtos.KeyValueProto keyValueProto : attributesUpdatedMsg.getKvList()) {
if (keyValueProto.getKey().equals(expectedKey)) {
Assert.assertEquals(expectedKey, keyValueProto.getKey());
Assert.assertEquals(expectedValue, keyValueProto.getStringV());
}
}
}
// Utility methods

2
common/cluster-api/src/main/java/org/thingsboard/server/cluster/TbClusterService.java

@ -75,6 +75,8 @@ public interface TbClusterService {
void onDeviceUpdated(Device device, Device old);
void onDeviceUpdated(Device device, Device old, boolean notifyEdge);
void onDeviceDeleted(Device device, TbQueueCallback callback);
void onResourceChange(TbResource resource, TbQueueCallback callback);

Loading…
Cancel
Save