Merge pull request #9608 from AndriiLandiak/fix/edge-old-version-support
Fix widget type and tenant profile data backward compatibility
This commit is contained in:
commit
b0bfdc535a
@ -641,7 +641,7 @@ public final class EdgeGrpcSession implements Closeable {
|
||||
case WIDGETS_BUNDLE:
|
||||
return ctx.getWidgetBundleProcessor().convertWidgetsBundleEventToDownlink(edgeEvent);
|
||||
case WIDGET_TYPE:
|
||||
return ctx.getWidgetTypeProcessor().convertWidgetTypeEventToDownlink(edgeEvent);
|
||||
return ctx.getWidgetTypeProcessor().convertWidgetTypeEventToDownlink(edgeEvent, this.edgeVersion);
|
||||
case ADMIN_SETTINGS:
|
||||
return ctx.getAdminSettingsProcessor().convertAdminSettingsEventToDownlink(edgeEvent);
|
||||
case OTA_PACKAGE:
|
||||
@ -651,9 +651,9 @@ public final class EdgeGrpcSession implements Closeable {
|
||||
case QUEUE:
|
||||
return ctx.getQueueEdgeProcessor().convertQueueEventToDownlink(edgeEvent);
|
||||
case TENANT:
|
||||
return ctx.getTenantEdgeProcessor().convertTenantEventToDownlink(edgeEvent);
|
||||
return ctx.getTenantEdgeProcessor().convertTenantEventToDownlink(edgeEvent, this.getEdgeVersion());
|
||||
case TENANT_PROFILE:
|
||||
return ctx.getTenantProfileEdgeProcessor().convertTenantProfileEventToDownlink(edgeEvent);
|
||||
return ctx.getTenantProfileEdgeProcessor().convertTenantProfileEventToDownlink(edgeEvent, this.getEdgeVersion());
|
||||
default:
|
||||
log.warn("[{}] Unsupported edge event type [{}]", this.tenantId, edgeEvent);
|
||||
return null;
|
||||
|
||||
@ -19,10 +19,12 @@ import com.google.protobuf.ByteString;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.server.common.data.TenantProfile;
|
||||
import org.thingsboard.server.gen.edge.v1.EdgeVersion;
|
||||
import org.thingsboard.server.gen.edge.v1.TenantProfileUpdateMsg;
|
||||
import org.thingsboard.server.gen.edge.v1.UpdateMsgType;
|
||||
import org.thingsboard.server.queue.util.DataDecodingEncodingService;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
import org.thingsboard.server.service.edge.rpc.utils.EdgeVersionUtils;
|
||||
|
||||
@Component
|
||||
@TbCoreComponent
|
||||
@ -31,7 +33,9 @@ public class TenantProfileMsgConstructor {
|
||||
@Autowired
|
||||
private DataDecodingEncodingService dataDecodingEncodingService;
|
||||
|
||||
public TenantProfileUpdateMsg constructTenantProfileUpdateMsg(UpdateMsgType msgType, TenantProfile tenantProfile) {
|
||||
public TenantProfileUpdateMsg constructTenantProfileUpdateMsg(UpdateMsgType msgType, TenantProfile tenantProfile, EdgeVersion edgeVersion) {
|
||||
ByteString profileData = EdgeVersionUtils.isEdgeVersionOlderThan(edgeVersion, EdgeVersion.V_3_6_1) ?
|
||||
ByteString.empty() : ByteString.copyFrom(dataDecodingEncodingService.encode(tenantProfile.getProfileData()));
|
||||
TenantProfileUpdateMsg.Builder builder = TenantProfileUpdateMsg.newBuilder()
|
||||
.setMsgType(msgType)
|
||||
.setIdMSB(tenantProfile.getId().getId().getMostSignificantBits())
|
||||
@ -39,7 +43,7 @@ public class TenantProfileMsgConstructor {
|
||||
.setName(tenantProfile.getName())
|
||||
.setDefault(tenantProfile.isDefault())
|
||||
.setIsolatedRuleChain(tenantProfile.isIsolatedTbRuleEngine())
|
||||
.setProfileDataBytes(ByteString.copyFrom(dataDecodingEncodingService.encode(tenantProfile.getProfileData())));
|
||||
.setProfileDataBytes(profileData);
|
||||
if (tenantProfile.getDescription() != null) {
|
||||
builder.setDescription(tenantProfile.getDescription());
|
||||
}
|
||||
|
||||
@ -20,9 +20,11 @@ import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.id.WidgetTypeId;
|
||||
import org.thingsboard.server.common.data.widget.WidgetTypeDetails;
|
||||
import org.thingsboard.server.gen.edge.v1.EdgeVersion;
|
||||
import org.thingsboard.server.gen.edge.v1.UpdateMsgType;
|
||||
import org.thingsboard.server.gen.edge.v1.WidgetTypeUpdateMsg;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
import org.thingsboard.server.service.edge.rpc.utils.EdgeVersionUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@ -30,7 +32,7 @@ import java.util.Arrays;
|
||||
@TbCoreComponent
|
||||
public class WidgetTypeMsgConstructor {
|
||||
|
||||
public WidgetTypeUpdateMsg constructWidgetTypeUpdateMsg(UpdateMsgType msgType, WidgetTypeDetails widgetTypeDetails) {
|
||||
public WidgetTypeUpdateMsg constructWidgetTypeUpdateMsg(UpdateMsgType msgType, WidgetTypeDetails widgetTypeDetails, EdgeVersion edgeVersion) {
|
||||
WidgetTypeUpdateMsg.Builder builder = WidgetTypeUpdateMsg.newBuilder()
|
||||
.setMsgType(msgType)
|
||||
.setIdMSB(widgetTypeDetails.getId().getId().getMostSignificantBits())
|
||||
@ -58,7 +60,12 @@ public class WidgetTypeMsgConstructor {
|
||||
builder.setImage(widgetTypeDetails.getImage());
|
||||
}
|
||||
if (widgetTypeDetails.getDescription() != null) {
|
||||
builder.setDescription(widgetTypeDetails.getDescription());
|
||||
if (EdgeVersionUtils.isEdgeVersionOlderThan(edgeVersion, EdgeVersion.V_3_6_0) &&
|
||||
widgetTypeDetails.getDescription().length() > 255) {
|
||||
builder.setDescription(widgetTypeDetails.getDescription().substring(0, 254));
|
||||
} else {
|
||||
builder.setDescription(widgetTypeDetails.getDescription());
|
||||
}
|
||||
}
|
||||
builder.setDeprecated(widgetTypeDetails.isDeprecated());
|
||||
if (widgetTypeDetails.getTags() != null) {
|
||||
|
||||
@ -71,12 +71,12 @@ public class RelationEdgeProcessor extends BaseRelationProcessor {
|
||||
if (relation == null || (relation.getFrom().getEntityType().equals(EntityType.EDGE) || relation.getTo().getEntityType().equals(EntityType.EDGE))) {
|
||||
return Futures.immediateFuture(null);
|
||||
}
|
||||
EdgeId sourceEdgeId = safeGetEdgeId(edgeNotificationMsg.getOriginatorEdgeIdMSB(), edgeNotificationMsg.getOriginatorEdgeIdLSB());
|
||||
EdgeId originatorEdgeId = safeGetEdgeId(edgeNotificationMsg.getOriginatorEdgeIdMSB(), edgeNotificationMsg.getOriginatorEdgeIdLSB());
|
||||
|
||||
Set<EdgeId> uniqueEdgeIds = new HashSet<>();
|
||||
uniqueEdgeIds.addAll(edgeService.findAllRelatedEdgeIds(tenantId, relation.getTo()));
|
||||
uniqueEdgeIds.addAll(edgeService.findAllRelatedEdgeIds(tenantId, relation.getFrom()));
|
||||
uniqueEdgeIds.remove(sourceEdgeId);
|
||||
uniqueEdgeIds.remove(originatorEdgeId);
|
||||
if (uniqueEdgeIds.isEmpty()) {
|
||||
return Futures.immediateFuture(null);
|
||||
}
|
||||
|
||||
@ -24,6 +24,7 @@ import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.gen.edge.v1.DownlinkMsg;
|
||||
import org.thingsboard.server.gen.edge.v1.EdgeVersion;
|
||||
import org.thingsboard.server.gen.edge.v1.TenantProfileUpdateMsg;
|
||||
import org.thingsboard.server.gen.edge.v1.TenantUpdateMsg;
|
||||
import org.thingsboard.server.gen.edge.v1.UpdateMsgType;
|
||||
@ -35,7 +36,7 @@ import org.thingsboard.server.service.edge.rpc.processor.BaseEdgeProcessor;
|
||||
@TbCoreComponent
|
||||
public class TenantEdgeProcessor extends BaseEdgeProcessor {
|
||||
|
||||
public DownlinkMsg convertTenantEventToDownlink(EdgeEvent edgeEvent) {
|
||||
public DownlinkMsg convertTenantEventToDownlink(EdgeEvent edgeEvent, EdgeVersion edgeVersion) {
|
||||
TenantId tenantId = new TenantId(edgeEvent.getEntityId());
|
||||
DownlinkMsg downlinkMsg = null;
|
||||
if (EdgeEventActionType.UPDATED.equals(edgeEvent.getAction())) {
|
||||
@ -44,7 +45,7 @@ public class TenantEdgeProcessor extends BaseEdgeProcessor {
|
||||
UpdateMsgType msgType = getUpdateMsgType(edgeEvent.getAction());
|
||||
TenantUpdateMsg tenantUpdateMsg = tenantMsgConstructor.constructTenantUpdateMsg(msgType, tenant);
|
||||
TenantProfile tenantProfile = tenantProfileService.findTenantProfileById(tenantId, tenant.getTenantProfileId());
|
||||
TenantProfileUpdateMsg tenantProfileUpdateMsg = tenantProfileMsgConstructor.constructTenantProfileUpdateMsg(msgType, tenantProfile);
|
||||
TenantProfileUpdateMsg tenantProfileUpdateMsg = tenantProfileMsgConstructor.constructTenantProfileUpdateMsg(msgType, tenantProfile, edgeVersion);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addTenantUpdateMsg(tenantUpdateMsg)
|
||||
|
||||
@ -23,6 +23,7 @@ import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
import org.thingsboard.server.common.data.id.TenantProfileId;
|
||||
import org.thingsboard.server.gen.edge.v1.DownlinkMsg;
|
||||
import org.thingsboard.server.gen.edge.v1.EdgeVersion;
|
||||
import org.thingsboard.server.gen.edge.v1.TenantProfileUpdateMsg;
|
||||
import org.thingsboard.server.gen.edge.v1.UpdateMsgType;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
@ -33,7 +34,7 @@ import org.thingsboard.server.service.edge.rpc.processor.BaseEdgeProcessor;
|
||||
@TbCoreComponent
|
||||
public class TenantProfileEdgeProcessor extends BaseEdgeProcessor {
|
||||
|
||||
public DownlinkMsg convertTenantProfileEventToDownlink(EdgeEvent edgeEvent) {
|
||||
public DownlinkMsg convertTenantProfileEventToDownlink(EdgeEvent edgeEvent, EdgeVersion edgeVersion) {
|
||||
TenantProfileId tenantProfileId = new TenantProfileId(edgeEvent.getEntityId());
|
||||
DownlinkMsg downlinkMsg = null;
|
||||
if (EdgeEventActionType.UPDATED.equals(edgeEvent.getAction())) {
|
||||
@ -41,7 +42,7 @@ public class TenantProfileEdgeProcessor extends BaseEdgeProcessor {
|
||||
if (tenantProfile != null) {
|
||||
UpdateMsgType msgType = getUpdateMsgType(edgeEvent.getAction());
|
||||
TenantProfileUpdateMsg tenantProfileUpdateMsg =
|
||||
tenantProfileMsgConstructor.constructTenantProfileUpdateMsg(msgType, tenantProfile);
|
||||
tenantProfileMsgConstructor.constructTenantProfileUpdateMsg(msgType, tenantProfile, edgeVersion);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addTenantProfileUpdateMsg(tenantProfileUpdateMsg)
|
||||
|
||||
@ -22,6 +22,7 @@ import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.id.WidgetTypeId;
|
||||
import org.thingsboard.server.common.data.widget.WidgetTypeDetails;
|
||||
import org.thingsboard.server.gen.edge.v1.DownlinkMsg;
|
||||
import org.thingsboard.server.gen.edge.v1.EdgeVersion;
|
||||
import org.thingsboard.server.gen.edge.v1.UpdateMsgType;
|
||||
import org.thingsboard.server.gen.edge.v1.WidgetTypeUpdateMsg;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
@ -32,7 +33,7 @@ import org.thingsboard.server.service.edge.rpc.processor.BaseEdgeProcessor;
|
||||
@TbCoreComponent
|
||||
public class WidgetTypeEdgeProcessor extends BaseEdgeProcessor {
|
||||
|
||||
public DownlinkMsg convertWidgetTypeEventToDownlink(EdgeEvent edgeEvent) {
|
||||
public DownlinkMsg convertWidgetTypeEventToDownlink(EdgeEvent edgeEvent, EdgeVersion edgeVersion) {
|
||||
WidgetTypeId widgetTypeId = new WidgetTypeId(edgeEvent.getEntityId());
|
||||
DownlinkMsg downlinkMsg = null;
|
||||
switch (edgeEvent.getAction()) {
|
||||
@ -42,7 +43,7 @@ public class WidgetTypeEdgeProcessor extends BaseEdgeProcessor {
|
||||
if (widgetTypeDetails != null) {
|
||||
UpdateMsgType msgType = getUpdateMsgType(edgeEvent.getAction());
|
||||
WidgetTypeUpdateMsg widgetTypeUpdateMsg =
|
||||
widgetTypeMsgConstructor.constructWidgetTypeUpdateMsg(msgType, widgetTypeDetails);
|
||||
widgetTypeMsgConstructor.constructWidgetTypeUpdateMsg(msgType, widgetTypeDetails, edgeVersion);
|
||||
downlinkMsg = DownlinkMsg.newBuilder()
|
||||
.setDownlinkMsgId(EdgeUtils.nextPositiveInt())
|
||||
.addWidgetTypeUpdateMsg(widgetTypeUpdateMsg)
|
||||
|
||||
@ -21,16 +21,7 @@ import org.thingsboard.server.gen.edge.v1.EdgeVersion;
|
||||
@Slf4j
|
||||
public final class EdgeVersionUtils {
|
||||
|
||||
public static boolean isEdgeProtoDeprecated(EdgeVersion edgeVersion) {
|
||||
switch (edgeVersion) {
|
||||
case V_3_3_0:
|
||||
case V_3_3_3:
|
||||
case V_3_4_0:
|
||||
case V_3_6_0:
|
||||
return true;
|
||||
case V_3_6_1:
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
public static boolean isEdgeVersionOlderThan(EdgeVersion currentVersion, EdgeVersion requiredVersion) {
|
||||
return currentVersion.ordinal() < requiredVersion.ordinal();
|
||||
}
|
||||
}
|
||||
|
||||
@ -249,7 +249,7 @@ abstract public class AbstractEdgeTest extends AbstractControllerTest {
|
||||
validateMsgsCnt(RuleChainMetadataUpdateMsg.class, 1);
|
||||
validateRuleChainMetadataUpdates(ruleChainUUID);
|
||||
|
||||
// 4 messages ('general', 'mail', 'connectivity', 'jwt)
|
||||
// 4 messages ('general', 'mail', 'connectivity', 'jwt')
|
||||
validateMsgsCnt(AdminSettingsUpdateMsg.class, 4);
|
||||
validateAdminSettings(4);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user