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.setDeviceProfileId(deviceProfileId);
} }
Device savedDevice = deviceService.saveDevice(device, false); Device savedDevice = deviceService.saveDevice(device, false);
tbClusterService.onDeviceUpdated(savedDevice, device); tbClusterService.onDeviceUpdated(savedDevice, device, false);
if (created) { if (created) {
DeviceCredentials deviceCredentials = new DeviceCredentials(); DeviceCredentials deviceCredentials = new DeviceCredentials();
deviceCredentials.setDeviceId(new DeviceId(savedDevice.getUuidId())); 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 @Override
public void onDeviceUpdated(Device device, Device old) { 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; var created = old == null;
broadcastEntityChangeToTransport(device.getTenantId(), device.getId(), device, null); broadcastEntityChangeToTransport(device.getTenantId(), device.getId(), device, null);
if (old != null && (!device.getName().equals(old.getName()) || !device.getType().equals(old.getType()))) { 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); broadcastEntityStateChangeEvent(device.getTenantId(), device.getId(), created ? ComponentLifecycleEvent.CREATED : ComponentLifecycleEvent.UPDATED);
sendDeviceStateServiceEvent(device.getTenantId(), device.getId(), created, !created, false); sendDeviceStateServiceEvent(device.getTenantId(), device.getId(), created, !created, false);
otaPackageStateService.update(device, old); otaPackageStateService.update(device, old);
if (!created) { if (!created && notifyEdge) {
sendNotificationMsgToEdgeService(device.getTenantId(), null, device.getId(), null, null, EdgeEventActionType.UPDATED); 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 { private void sendAttributesRequest() throws Exception {
Device device = findDeviceByName("Edge Device 1"); Device device = findDeviceByName("Edge Device 1");
sendAttributesRequest(device, DataConstants.SERVER_SCOPE, "{\"key1\":\"value1\"}", "key1", "value1"); sendAttributesRequest(device, DataConstants.SERVER_SCOPE, "{\"key1\":\"value1\"}",
sendAttributesRequest(device, DataConstants.SHARED_SCOPE, "{\"key2\":\"value2\"}", "key2", "value2"); "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); JsonNode attributesData = mapper.readTree(attributesDataStr);
doPost("/api/plugins/telemetry/DEVICE/" + device.getId().getId().toString() + "/attributes/" + scope, 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()); Assert.assertTrue(latestEntityDataMsg.hasAttributesUpdatedMsg());
TransportProtos.PostAttributeMsg attributesUpdatedMsg = latestEntityDataMsg.getAttributesUpdatedMsg(); TransportProtos.PostAttributeMsg attributesUpdatedMsg = latestEntityDataMsg.getAttributesUpdatedMsg();
Assert.assertEquals(1, attributesUpdatedMsg.getKvCount()); Assert.assertEquals(expectedSize, attributesUpdatedMsg.getKvList().size());
TransportProtos.KeyValueProto keyValueProto = attributesUpdatedMsg.getKv(0); for (TransportProtos.KeyValueProto keyValueProto : attributesUpdatedMsg.getKvList()) {
Assert.assertEquals(expectedKey, keyValueProto.getKey()); if (keyValueProto.getKey().equals(expectedKey)) {
Assert.assertEquals(expectedValue, keyValueProto.getStringV()); Assert.assertEquals(expectedKey, keyValueProto.getKey());
Assert.assertEquals(expectedValue, keyValueProto.getStringV());
}
}
} }
// Utility methods // 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);
void onDeviceUpdated(Device device, Device old, boolean notifyEdge);
void onDeviceDeleted(Device device, TbQueueCallback callback); void onDeviceDeleted(Device device, TbQueueCallback callback);
void onResourceChange(TbResource resource, TbQueueCallback callback); void onResourceChange(TbResource resource, TbQueueCallback callback);

Loading…
Cancel
Save