Commit 7edcc605e91a8f5b174bb4ccf651a01c1ffd687b

Authored by Andrii Shvaika
1 parent edc99342

Firmware CoAP and transport improvement

@@ -33,6 +33,7 @@ import org.thingsboard.server.common.data.Device; @@ -33,6 +33,7 @@ import org.thingsboard.server.common.data.Device;
33 import org.thingsboard.server.common.data.DeviceProfile; 33 import org.thingsboard.server.common.data.DeviceProfile;
34 import org.thingsboard.server.common.data.EntityType; 34 import org.thingsboard.server.common.data.EntityType;
35 import org.thingsboard.server.common.data.Firmware; 35 import org.thingsboard.server.common.data.Firmware;
  36 +import org.thingsboard.server.common.data.FirmwareInfo;
36 import org.thingsboard.server.common.data.ResourceType; 37 import org.thingsboard.server.common.data.ResourceType;
37 import org.thingsboard.server.common.data.TbResource; 38 import org.thingsboard.server.common.data.TbResource;
38 import org.thingsboard.server.common.data.TenantProfile; 39 import org.thingsboard.server.common.data.TenantProfile;
@@ -471,19 +472,22 @@ public class DefaultTransportApiService implements TransportApiService { @@ -471,19 +472,22 @@ public class DefaultTransportApiService implements TransportApiService {
471 if (firmwareId == null) { 472 if (firmwareId == null) {
472 builder.setResponseStatus(TransportProtos.ResponseStatus.NOT_FOUND); 473 builder.setResponseStatus(TransportProtos.ResponseStatus.NOT_FOUND);
473 } else { 474 } else {
474 - Firmware firmware = firmwareService.findFirmwareById(tenantId, firmwareId); 475 + FirmwareInfo firmwareInfo = firmwareService.findFirmwareInfoById(tenantId, firmwareId);
475 476
476 - if (firmware == null) { 477 + if (firmwareInfo == null) {
477 builder.setResponseStatus(TransportProtos.ResponseStatus.NOT_FOUND); 478 builder.setResponseStatus(TransportProtos.ResponseStatus.NOT_FOUND);
478 } else { 479 } else {
479 builder.setResponseStatus(TransportProtos.ResponseStatus.SUCCESS); 480 builder.setResponseStatus(TransportProtos.ResponseStatus.SUCCESS);
480 builder.setFirmwareIdMSB(firmwareId.getId().getMostSignificantBits()); 481 builder.setFirmwareIdMSB(firmwareId.getId().getMostSignificantBits());
481 builder.setFirmwareIdLSB(firmwareId.getId().getLeastSignificantBits()); 482 builder.setFirmwareIdLSB(firmwareId.getId().getLeastSignificantBits());
482 - builder.setTitle(firmware.getTitle());  
483 - builder.setVersion(firmware.getVersion());  
484 - builder.setFileName(firmware.getFileName());  
485 - builder.setContentType(firmware.getContentType());  
486 - firmwareDataCache.put(firmwareId.toString(), firmware.getData().array()); 483 + builder.setTitle(firmwareInfo.getTitle());
  484 + builder.setVersion(firmwareInfo.getVersion());
  485 + builder.setFileName(firmwareInfo.getFileName());
  486 + builder.setContentType(firmwareInfo.getContentType());
  487 + if (!firmwareDataCache.has(firmwareId.toString())) {
  488 + Firmware firmware = firmwareService.findFirmwareById(tenantId, firmwareId);
  489 + firmwareDataCache.put(firmwareId.toString(), firmware.getData().array());
  490 + }
487 } 491 }
488 } 492 }
489 493
@@ -24,4 +24,9 @@ public interface FirmwareDataCache { @@ -24,4 +24,9 @@ public interface FirmwareDataCache {
24 void put(String key, byte[] value); 24 void put(String key, byte[] value);
25 25
26 void evict(String key); 26 void evict(String key);
  27 +
  28 + default boolean has(String firmwareId) {
  29 + byte[] data = get(firmwareId, 1, 0);
  30 + return data != null && data.length > 0;
  31 + }
27 } 32 }
@@ -20,7 +20,6 @@ import com.google.protobuf.Descriptors; @@ -20,7 +20,6 @@ import com.google.protobuf.Descriptors;
20 import com.google.protobuf.DynamicMessage; 20 import com.google.protobuf.DynamicMessage;
21 import lombok.Data; 21 import lombok.Data;
22 import lombok.extern.slf4j.Slf4j; 22 import lombok.extern.slf4j.Slf4j;
23 -import org.apache.commons.lang3.StringUtils;  
24 import org.eclipse.californium.core.coap.CoAP; 23 import org.eclipse.californium.core.coap.CoAP;
25 import org.eclipse.californium.core.coap.Request; 24 import org.eclipse.californium.core.coap.Request;
26 import org.eclipse.californium.core.coap.Response; 25 import org.eclipse.californium.core.coap.Response;
@@ -34,6 +33,7 @@ import org.thingsboard.server.coapserver.TbCoapDtlsSessionInfo; @@ -34,6 +33,7 @@ import org.thingsboard.server.coapserver.TbCoapDtlsSessionInfo;
34 import org.thingsboard.server.common.data.DataConstants; 33 import org.thingsboard.server.common.data.DataConstants;
35 import org.thingsboard.server.common.data.DeviceProfile; 34 import org.thingsboard.server.common.data.DeviceProfile;
36 import org.thingsboard.server.common.data.DeviceTransportType; 35 import org.thingsboard.server.common.data.DeviceTransportType;
  36 +import org.thingsboard.server.common.data.StringUtils;
37 import org.thingsboard.server.common.data.TransportPayloadType; 37 import org.thingsboard.server.common.data.TransportPayloadType;
38 import org.thingsboard.server.common.data.device.profile.CoapDeviceProfileTransportConfiguration; 38 import org.thingsboard.server.common.data.device.profile.CoapDeviceProfileTransportConfiguration;
39 import org.thingsboard.server.common.data.device.profile.CoapDeviceTypeConfiguration; 39 import org.thingsboard.server.common.data.device.profile.CoapDeviceTypeConfiguration;
@@ -448,7 +448,7 @@ public class CoapTransportResource extends AbstractCoapTransportResource { @@ -448,7 +448,7 @@ public class CoapTransportResource extends AbstractCoapTransportResource {
448 if (msg.getResponseStatus().equals(TransportProtos.ResponseStatus.SUCCESS)) { 448 if (msg.getResponseStatus().equals(TransportProtos.ResponseStatus.SUCCESS)) {
449 if (msg.getTitle().equals(title) && msg.getVersion().equals(version)) { 449 if (msg.getTitle().equals(title) && msg.getVersion().equals(version)) {
450 String firmwareId = new UUID(msg.getFirmwareIdMSB(), msg.getFirmwareIdLSB()).toString(); 450 String firmwareId = new UUID(msg.getFirmwareIdMSB(), msg.getFirmwareIdLSB()).toString();
451 - String strChunkSize = exchange.getQueryParameter("chunkSize"); 451 + String strChunkSize = exchange.getQueryParameter("size");
452 String strChunk = exchange.getQueryParameter("chunk"); 452 String strChunk = exchange.getQueryParameter("chunk");
453 int chunkSize = StringUtils.isEmpty(strChunkSize) ? 0 : Integer.parseInt(strChunkSize); 453 int chunkSize = StringUtils.isEmpty(strChunkSize) ? 0 : Integer.parseInt(strChunkSize);
454 int chunk = StringUtils.isEmpty(strChunk) ? 0 : Integer.parseInt(strChunk); 454 int chunk = StringUtils.isEmpty(strChunk) ? 0 : Integer.parseInt(strChunk);
@@ -539,8 +539,7 @@ public class DefaultTransportService implements TransportService { @@ -539,8 +539,7 @@ public class DefaultTransportService implements TransportService {
539 new TbProtoQueueMsg<>(UUID.randomUUID(), TransportProtos.TransportApiRequestMsg.newBuilder().setFirmwareRequestMsg(msg).build()); 539 new TbProtoQueueMsg<>(UUID.randomUUID(), TransportProtos.TransportApiRequestMsg.newBuilder().setFirmwareRequestMsg(msg).build());
540 540
541 AsyncCallbackTemplate.withCallback(transportApiRequestTemplate.send(protoMsg), response -> { 541 AsyncCallbackTemplate.withCallback(transportApiRequestTemplate.send(protoMsg), response -> {
542 - TransportProtos.GetFirmwareResponseMsg firmwareResponseMsg = response.getValue().getFirmwareResponseMsg();  
543 - callback.onSuccess(firmwareResponseMsg); 542 + callback.onSuccess(response.getValue().getFirmwareResponseMsg());
544 }, callback::onError, transportCallbackExecutor); 543 }, callback::onError, transportCallbackExecutor);
545 } 544 }
546 } 545 }