From 487d3849b4c07cc1f9e2eb9f2869ae9464b39a6e Mon Sep 17 00:00:00 2001 From: yevhenii Date: Tue, 18 Mar 2025 19:27:57 +0200 Subject: [PATCH] Fix RuleChainMetadata for older Edge versions - refactoring --- .../service/edge/EdgeMsgConstructorUtils.java | 14 +++--- .../edge/rpc/utils/EdgeVersionUtils.java | 9 ++++ .../edge/EdgeMsgConstructorUtilsTest.java | 45 +++++++++---------- 3 files changed, 38 insertions(+), 30 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtils.java b/application/src/main/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtils.java index 61875f1277..85471f6211 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtils.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtils.java @@ -129,7 +129,7 @@ import java.util.UUID; @Slf4j public class EdgeMsgConstructorUtils { - public static final Map NODE_TO_IGNORE_PARAM_FOR_OLD_EDGE_VERSION = Map.of( + public static final Map NODE_TO_IGNORED_PARAM_FOR_OLD_EDGE_VERSION = Map.of( TbMsgTimeseriesNode.class.getName(), "processingSettings", TbMsgAttributesNode.class.getName(), "processingSettings", TbSaveToCustomCassandraTableNode.class.getName(), "defaultTtl" @@ -452,7 +452,7 @@ public class EdgeMsgConstructorUtils { JsonNode jsonNode = JacksonUtil.valueToTree(ruleChainMetaData); JsonNode nodes = jsonNode.get("nodes"); - if (EdgeVersionUtils.isEdgeVersionOlderThan(edgeVersion, EdgeVersion.V_3_8_0)) { + if (EdgeVersionUtils.isEdgeOlderThan_3_8_0(edgeVersion)) { Iterator iterator = nodes.iterator(); while (iterator.hasNext()) { JsonNode node = iterator.next(); @@ -464,7 +464,7 @@ public class EdgeMsgConstructorUtils { } } - if (EdgeVersionUtils.isEdgeVersionOlderThan(edgeVersion, EdgeVersion.V_3_9_0)) { + if (EdgeVersionUtils.isEdgeOlderThan_3_9_0(edgeVersion)) { nodes.forEach(EdgeMsgConstructorUtils::changeRuleNodeConfigForOldEdgeVersion); return JacksonUtil.toString(jsonNode); @@ -475,10 +475,10 @@ public class EdgeMsgConstructorUtils { private static void changeRuleNodeConfigForOldEdgeVersion(JsonNode node) { if (node.isObject()) { - JsonNode configurationNode = node.get("configuration"); - if (configurationNode != null && configurationNode.isObject() && - NODE_TO_IGNORE_PARAM_FOR_OLD_EDGE_VERSION.containsKey(node.get("type").asText())) { - ((ObjectNode) configurationNode).remove(NODE_TO_IGNORE_PARAM_FOR_OLD_EDGE_VERSION.get(node.get("type").asText())); + String nodeType = node.get("type").asText(); + + if (node.isObject() && node.has("configuration") && NODE_TO_IGNORED_PARAM_FOR_OLD_EDGE_VERSION.containsKey(nodeType)) { + ((ObjectNode) node.get("configuration")).remove(NODE_TO_IGNORED_PARAM_FOR_OLD_EDGE_VERSION.get(nodeType)); } } } diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/utils/EdgeVersionUtils.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/utils/EdgeVersionUtils.java index 07e2024e1f..2ae6e91f34 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/utils/EdgeVersionUtils.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/utils/EdgeVersionUtils.java @@ -24,4 +24,13 @@ public final class EdgeVersionUtils { public static boolean isEdgeVersionOlderThan(EdgeVersion currentVersion, EdgeVersion requiredVersion) { return currentVersion.ordinal() < requiredVersion.ordinal(); } + + public static boolean isEdgeOlderThan_3_9_0(EdgeVersion currentVersion) { + return isEdgeVersionOlderThan(currentVersion, EdgeVersion.V_3_9_0); + } + + public static boolean isEdgeOlderThan_3_8_0(EdgeVersion currentVersion) { + return isEdgeVersionOlderThan(currentVersion, EdgeVersion.V_3_8_0); + } + } diff --git a/application/src/test/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtilsTest.java b/application/src/test/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtilsTest.java index 84ccfdb3ee..937a6709c5 100644 --- a/application/src/test/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtilsTest.java +++ b/application/src/test/java/org/thingsboard/server/service/edge/EdgeMsgConstructorUtilsTest.java @@ -33,7 +33,6 @@ import org.thingsboard.rule.engine.telemetry.TbMsgTimeseriesNodeConfiguration; import org.thingsboard.server.common.data.rule.RuleChainMetaData; import org.thingsboard.server.common.data.rule.RuleNode; import org.thingsboard.server.gen.edge.v1.EdgeVersion; -import org.thingsboard.server.gen.edge.v1.RuleChainMetadataUpdateMsg; import org.thingsboard.server.gen.edge.v1.UpdateMsgType; import org.thingsboard.server.service.edge.rpc.utils.EdgeVersionUtils; @@ -43,13 +42,13 @@ import java.util.List; import java.util.Map; import static org.thingsboard.server.service.edge.EdgeMsgConstructorUtils.MISSING_NODES_IN_VERSION_37; -import static org.thingsboard.server.service.edge.EdgeMsgConstructorUtils.NODE_TO_IGNORE_PARAM_FOR_OLD_EDGE_VERSION; +import static org.thingsboard.server.service.edge.EdgeMsgConstructorUtils.NODE_TO_IGNORED_PARAM_FOR_OLD_EDGE_VERSION; @Slf4j public class EdgeMsgConstructorUtilsTest { private static final int CONFIGURATION_VERSION = 5; - public static final List TEST_SUPPORTED_EDGE_VERSIONS = Arrays.asList( + public static final List SUPPORTED_EDGE_VERSIONS_FOR_TESTS = Arrays.asList( EdgeVersion.V_4_0_0, EdgeVersion.V_3_9_0, EdgeVersion.V_3_8_0, EdgeVersion.V_3_7_0 ); @@ -75,12 +74,12 @@ public class EdgeMsgConstructorUtilsTest { // GIVEN RuleChainMetaData metaData = createMetadataWithProblemNodes(CONFIG_TO_NODE_NAME); - TEST_SUPPORTED_EDGE_VERSIONS.forEach(edgeVersion -> { + SUPPORTED_EDGE_VERSIONS_FOR_TESTS.forEach(edgeVersion -> { // WHEN - List ruleNodes = getRuleNodesFromUpdateMsg(metaData, edgeVersion); + List ruleNodes = extractRuleNodesFromUpdateMsg(metaData, edgeVersion); // THEN - validateRuleNodeConfig(ruleNodes, edgeVersion); + assertRuleNodeConfig(ruleNodes, edgeVersion); }); } @@ -89,12 +88,12 @@ public class EdgeMsgConstructorUtilsTest { // GIVEN RuleChainMetaData metaData = createMetadataWithProblemNodes(CONFIG_TO_MISS_NODE_FOR_OLD_EDGE); - TEST_SUPPORTED_EDGE_VERSIONS.forEach(edgeVersion -> { + SUPPORTED_EDGE_VERSIONS_FOR_TESTS.forEach(edgeVersion -> { // WHEN - List ruleNodes = getRuleNodesFromUpdateMsg(metaData, edgeVersion); + List ruleNodes = extractRuleNodesFromUpdateMsg(metaData, edgeVersion); // THEN - boolean isOldEdge = EdgeVersionUtils.isEdgeVersionOlderThan(edgeVersion, EdgeVersion.V_3_8_0); + boolean isOldEdge = EdgeVersionUtils.isEdgeOlderThan_3_8_0(edgeVersion); if (isOldEdge) { Assert.assertTrue("Rule Node must be empty", ruleNodes.isEmpty()); @@ -108,13 +107,13 @@ public class EdgeMsgConstructorUtilsTest { RuleChainMetaData ruleChainMetaData = new RuleChainMetaData(); List ruleNodes = new ArrayList<>(); - nodeMap.entrySet().forEach(configToNodeName -> { + nodeMap.forEach((key, value) -> { RuleNode ruleNode = new RuleNode(); - ruleNode.setName(configToNodeName.getValue()); - ruleNode.setType(configToNodeName.getValue()); + ruleNode.setName(value); + ruleNode.setType(value); ruleNode.setConfigurationVersion(CONFIGURATION_VERSION); - ruleNode.setConfiguration(JacksonUtil.valueToTree(configToNodeName.getKey().defaultConfiguration())); + ruleNode.setConfiguration(JacksonUtil.valueToTree(key.defaultConfiguration())); ruleNodes.add(ruleNode); }); @@ -125,30 +124,30 @@ public class EdgeMsgConstructorUtilsTest { return ruleChainMetaData; } - private List getRuleNodesFromUpdateMsg(RuleChainMetaData metaData, EdgeVersion edgeVersion) { - RuleChainMetadataUpdateMsg ruleChainMetadataUpdateMsg = - EdgeMsgConstructorUtils.constructRuleChainMetadataUpdatedMsg(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, metaData, edgeVersion); + private List extractRuleNodesFromUpdateMsg(RuleChainMetaData metaData, EdgeVersion edgeVersion) { + String ruleChainMetadataUpdateMsg = + EdgeMsgConstructorUtils.constructRuleChainMetadataUpdatedMsg(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, metaData, edgeVersion).getEntity(); - RuleChainMetaData ruleChainMetaData = JacksonUtil.fromString(ruleChainMetadataUpdateMsg.getEntity(), RuleChainMetaData.class, true); + RuleChainMetaData ruleChainMetaData = JacksonUtil.fromString(ruleChainMetadataUpdateMsg, RuleChainMetaData.class, true); Assert.assertNotNull("RuleChainMetaData is null", ruleChainMetaData); return ruleChainMetaData.getNodes(); } - private void validateRuleNodeConfig(List ruleNodes, EdgeVersion edgeVersion) { + private void assertRuleNodeConfig(List ruleNodes, EdgeVersion edgeVersion) { ruleNodes.forEach(ruleNode -> { - int ruleNodeConfigAmount = NODE_TO_CONFIG_PARAMS_COUNT.get(ruleNode.getName()); + int configParamCount = NODE_TO_CONFIG_PARAMS_COUNT.get(ruleNode.getName()); - boolean isOldEdge = EdgeVersionUtils.isEdgeVersionOlderThan(edgeVersion, EdgeVersion.V_3_9_0); - int expectedConfigAmount = isOldEdge ? ruleNodeConfigAmount - 1 : ruleNodeConfigAmount; - boolean includeConfigParam = !isOldEdge; + boolean isLegacyEdgeVersion = EdgeVersionUtils.isEdgeOlderThan_3_9_0(edgeVersion); + int expectedConfigAmount = isLegacyEdgeVersion ? configParamCount - 1 : configParamCount; + boolean includeConfigParam = !isLegacyEdgeVersion; validateParams(ruleNode, expectedConfigAmount, includeConfigParam); }); } private void validateParams(RuleNode ruleNode, int expectedConfigAmount, boolean includeConfigParam) { - String ignoreConfigParam = NODE_TO_IGNORE_PARAM_FOR_OLD_EDGE_VERSION.get(ruleNode.getName()); + String ignoreConfigParam = NODE_TO_IGNORED_PARAM_FOR_OLD_EDGE_VERSION.get(ruleNode.getName()); Assert.assertEquals( String.format("Expected %d config params for ruleNode '%s', but found %d", expectedConfigAmount, ruleNode.getName(), ruleNode.getConfiguration().size()),