Browse Source

Fix RuleChainMetadata for older Edge versions

- renaming
pull/12843/head
Yevhenii 2 years ago
parent
commit
1675e3aa50
  1. 20
      application/src/main/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtils.java
  2. 10
      application/src/test/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtilsTest.java

20
application/src/main/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtils.java

@ -129,7 +129,7 @@ import java.util.UUID;
@Slf4j @Slf4j
public class EdgeMsgConstructorUtils { public class EdgeMsgConstructorUtils {
public static final Map<EdgeVersion, Map<String, String>> VERSION_TO_IGNORED_PARAM = Map.of( public static final Map<EdgeVersion, Map<String, String>> IGNORED_PARAMS_BY_EDGE_VERSION = Map.of(
EdgeVersion.V_3_8_0, EdgeVersion.V_3_8_0,
Map.of( Map.of(
TbMsgTimeseriesNode.class.getName(), "processingSettings", TbMsgTimeseriesNode.class.getName(), "processingSettings",
@ -144,7 +144,7 @@ public class EdgeMsgConstructorUtils {
) )
); );
public static final Map<EdgeVersion, Set<String>> VERSION_TO_MISSING_NODES = Map.of( public static final Map<EdgeVersion, Set<String>> EXCLUDED_NODES_BY_EDGE_VERSION = Map.of(
EdgeVersion.V_3_7_0, EdgeVersion.V_3_7_0,
Set.of( Set.of(
TbSendRestApiCallReplyNode.class.getName(), TbSendRestApiCallReplyNode.class.getName(),
@ -451,7 +451,7 @@ public class EdgeMsgConstructorUtils {
} }
public static RuleChainMetadataUpdateMsg constructRuleChainMetadataUpdatedMsg(UpdateMsgType msgType, RuleChainMetaData ruleChainMetaData, EdgeVersion edgeVersion) { public static RuleChainMetadataUpdateMsg constructRuleChainMetadataUpdatedMsg(UpdateMsgType msgType, RuleChainMetaData ruleChainMetaData, EdgeVersion edgeVersion) {
String metaData = filterMetadataForOldEdgeVersions(ruleChainMetaData, edgeVersion); String metaData = sanitizeMetadataForLegacyEdgeVersion(ruleChainMetaData, edgeVersion);
return RuleChainMetadataUpdateMsg.newBuilder() return RuleChainMetadataUpdateMsg.newBuilder()
.setMsgType(msgType) .setMsgType(msgType)
@ -459,21 +459,21 @@ public class EdgeMsgConstructorUtils {
.build(); .build();
} }
private static String filterMetadataForOldEdgeVersions(RuleChainMetaData ruleChainMetaData, EdgeVersion edgeVersion) { private static String sanitizeMetadataForLegacyEdgeVersion(RuleChainMetaData ruleChainMetaData, EdgeVersion edgeVersion) {
JsonNode jsonNode = JacksonUtil.valueToTree(ruleChainMetaData); JsonNode jsonNode = JacksonUtil.valueToTree(ruleChainMetaData);
JsonNode nodes = jsonNode.get("nodes"); JsonNode nodes = jsonNode.get("nodes");
changeConfigForOldEdgeVersions(nodes, edgeVersion); updateNodeConfigurationsForLegacyEdge(nodes, edgeVersion);
removeMissingNodeForOldEdge(nodes, edgeVersion); removeExcludedNodesForLegacyEdge(nodes, edgeVersion);
return JacksonUtil.toString(jsonNode); return JacksonUtil.toString(jsonNode);
} }
private static void changeConfigForOldEdgeVersions(JsonNode nodes, EdgeVersion edgeVersion) { private static void updateNodeConfigurationsForLegacyEdge(JsonNode nodes, EdgeVersion edgeVersion) {
nodes.forEach(node -> { nodes.forEach(node -> {
if (node.isObject() && node.has("configuration")) { if (node.isObject() && node.has("configuration")) {
String nodeType = node.get("type").asText(); String nodeType = node.get("type").asText();
Map<String, String> ignoredParams = VERSION_TO_IGNORED_PARAM.get(edgeVersion); Map<String, String> ignoredParams = IGNORED_PARAMS_BY_EDGE_VERSION.get(edgeVersion);
if (ignoredParams != null && ignoredParams.containsKey(nodeType)) { if (ignoredParams != null && ignoredParams.containsKey(nodeType)) {
((ObjectNode) node.get("configuration")).remove(ignoredParams.get(nodeType)); ((ObjectNode) node.get("configuration")).remove(ignoredParams.get(nodeType));
@ -482,13 +482,13 @@ public class EdgeMsgConstructorUtils {
}); });
} }
private static void removeMissingNodeForOldEdge(JsonNode nodes, EdgeVersion edgeVersion) { private static void removeExcludedNodesForLegacyEdge(JsonNode nodes, EdgeVersion edgeVersion) {
Iterator<JsonNode> iterator = nodes.iterator(); Iterator<JsonNode> iterator = nodes.iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
JsonNode node = iterator.next(); JsonNode node = iterator.next();
String type = node.get("type").asText(); String type = node.get("type").asText();
Set<String> missNodes = VERSION_TO_MISSING_NODES.get(edgeVersion); Set<String> missNodes = EXCLUDED_NODES_BY_EDGE_VERSION.get(edgeVersion);
if (missNodes != null && missNodes.contains(type)) { if (missNodes != null && missNodes.contains(type)) {
iterator.remove(); iterator.remove();

10
application/src/test/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtilsTest.java

@ -40,8 +40,8 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static org.thingsboard.server.service.edge.EdgeMsgConstructorUtils.VERSION_TO_IGNORED_PARAM; import static org.thingsboard.server.service.edge.EdgeMsgConstructorUtils.EXCLUDED_NODES_BY_EDGE_VERSION;
import static org.thingsboard.server.service.edge.EdgeMsgConstructorUtils.VERSION_TO_MISSING_NODES; import static org.thingsboard.server.service.edge.EdgeMsgConstructorUtils.IGNORED_PARAMS_BY_EDGE_VERSION;
@Slf4j @Slf4j
public class EdgeMsgConstructorUtilsTest { public class EdgeMsgConstructorUtilsTest {
@ -92,8 +92,8 @@ public class EdgeMsgConstructorUtilsTest {
List<RuleNode> ruleNodes = extractRuleNodesFromUpdateMsg(metaData, edgeVersion); List<RuleNode> ruleNodes = extractRuleNodesFromUpdateMsg(metaData, edgeVersion);
// THEN // THEN
int leftNode = VERSION_TO_MISSING_NODES.containsKey(edgeVersion) ? int leftNode = EXCLUDED_NODES_BY_EDGE_VERSION.containsKey(edgeVersion) ?
CONFIG_TO_MISS_NODE_FOR_OLD_EDGE.size() - VERSION_TO_MISSING_NODES.get(edgeVersion).size() : CONFIG_TO_MISS_NODE_FOR_OLD_EDGE.size() - EXCLUDED_NODES_BY_EDGE_VERSION.get(edgeVersion).size() :
CONFIG_TO_MISS_NODE_FOR_OLD_EDGE.size(); CONFIG_TO_MISS_NODE_FOR_OLD_EDGE.size();
Assert.assertEquals(leftNode, ruleNodes.size()); Assert.assertEquals(leftNode, ruleNodes.size());
@ -136,7 +136,7 @@ public class EdgeMsgConstructorUtilsTest {
ruleNodes.forEach(ruleNode -> { ruleNodes.forEach(ruleNode -> {
int configParamCount = NODE_TO_CONFIG_PARAMS_COUNT.get(ruleNode.getType()); int configParamCount = NODE_TO_CONFIG_PARAMS_COUNT.get(ruleNode.getType());
boolean isOldEdgeVersion = VERSION_TO_IGNORED_PARAM.entrySet().stream() boolean isOldEdgeVersion = IGNORED_PARAMS_BY_EDGE_VERSION.entrySet().stream()
.anyMatch(entry -> entry.getKey().equals(edgeVersion) && .anyMatch(entry -> entry.getKey().equals(edgeVersion) &&
entry.getValue().containsKey(ruleNode.getType())); entry.getValue().containsKey(ruleNode.getType()));
int expectedConfigAmount = isOldEdgeVersion ? configParamCount - 1 : configParamCount; int expectedConfigAmount = isOldEdgeVersion ? configParamCount - 1 : configParamCount;

Loading…
Cancel
Save