steveloughran commented on code in PR #8196:
URL: https://github.com/apache/hadoop/pull/8196#discussion_r2728501000
##########
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/diskbalancer/planner/NodePlan.java:
##########
@@ -151,20 +154,56 @@ public void setPort(int port) {
}
/**
- * Parses a Json string and converts to NodePlan.
+ * Parses a JSON string and converts to NodePlan.
*
- * @param json - Json String
+ * @param json - JSON String
* @return NodePlan
* @throws IOException
*/
public static NodePlan parseJson(String json) throws IOException {
- return READER.readValue(json);
+ JsonNode tree = READER.readTree(json);
+ checkNodes(tree);
+ return READER.readValue(tree);
}
/**
- * Returns a Json representation of NodePlan.
+ * Iterate through the tree structure beginning at the input `node`. This
includes
+ * checking arrays and within JSON object structures (allowing for nested
structures)
*
- * @return - json String
+ * @param node a node representing the root of tree structure
+ * @throws IOException if any unexpected `@class` values are found - this is
the
+ * pre-existing exception type exposed by the calling code
+ */
+ private static void checkNodes(JsonNode node) throws IOException {
+ if (node == null) {
+ return;
+ }
+
+ // Check Node and Recurse into child nodes
+ if (node.isObject()) {
+ Iterator<Map.Entry<String, JsonNode>> fieldsIterator = node.fields();
+ while (fieldsIterator.hasNext()) {
+ Map.Entry<String, JsonNode> entry = fieldsIterator.next();
+ if ("@class".equals(entry.getKey())) {
+ String textValue = entry.getValue().asText();
+ if (textValue != null && !textValue.isBlank() &&
+ !textValue.startsWith("org.apache.hadoop.hdfs.server")) {
Review Comment:
making it configurable is extra complexity and risk. remove it, and if
someone can see a need, then it can be considered.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]