This is an automated email from the ASF dual-hosted git repository.

amoghj pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git


The following commit(s) were added to refs/heads/main by this push:
     new 9454927ddb Core: Improve error handling when parsing view 
representations (#11236)
9454927ddb is described below

commit 9454927ddb62d675d9f78843341a81ff2f3d946f
Author: Eduard Tudenhoefner <[email protected]>
AuthorDate: Mon Sep 30 18:21:56 2024 +0200

    Core: Improve error handling when parsing view representations (#11236)
---
 .../org/apache/iceberg/view/ViewVersionParser.java     | 10 ++++++----
 .../org/apache/iceberg/view/TestViewVersionParser.java | 18 ++++++++++++++++++
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/core/src/main/java/org/apache/iceberg/view/ViewVersionParser.java 
b/core/src/main/java/org/apache/iceberg/view/ViewVersionParser.java
index 2645e40d94..06ee3b2648 100644
--- a/core/src/main/java/org/apache/iceberg/view/ViewVersionParser.java
+++ b/core/src/main/java/org/apache/iceberg/view/ViewVersionParser.java
@@ -84,12 +84,14 @@ public class ViewVersionParser {
     long timestamp = JsonUtil.getLong(TIMESTAMP_MS, node);
     Map<String, String> summary = JsonUtil.getStringMap(SUMMARY, node);
 
-    JsonNode serializedRepresentations = node.get(REPRESENTATIONS);
+    JsonNode serializedRepresentations = JsonUtil.get(REPRESENTATIONS, node);
+    Preconditions.checkArgument(
+        serializedRepresentations.isArray(),
+        "Cannot parse representations from non-array: %s",
+        serializedRepresentations);
     ImmutableList.Builder<ViewRepresentation> representations = 
ImmutableList.builder();
     for (JsonNode serializedRepresentation : serializedRepresentations) {
-      ViewRepresentation representation =
-          ViewRepresentationParser.fromJson(serializedRepresentation);
-      representations.add(representation);
+      
representations.add(ViewRepresentationParser.fromJson(serializedRepresentation));
     }
 
     String defaultCatalog = JsonUtil.getStringOrNull(DEFAULT_CATALOG, node);
diff --git 
a/core/src/test/java/org/apache/iceberg/view/TestViewVersionParser.java 
b/core/src/test/java/org/apache/iceberg/view/TestViewVersionParser.java
index 1d115c04c3..a68b99a679 100644
--- a/core/src/test/java/org/apache/iceberg/view/TestViewVersionParser.java
+++ b/core/src/test/java/org/apache/iceberg/view/TestViewVersionParser.java
@@ -129,4 +129,22 @@ public class TestViewVersionParser {
         .isInstanceOf(IllegalArgumentException.class)
         .hasMessage("Cannot parse missing field: default-namespace");
   }
+
+  @Test
+  public void invalidRepresentations() {
+    String invalidRepresentations =
+        "{\"version-id\":1, \"timestamp-ms\":12345, \"schema-id\":1, 
\"summary\":{\"user\":\"some-user\"}, \"representations\": 23, 
\"default-namespace\":[\"one\",\"two\"]}";
+    assertThatThrownBy(() -> 
ViewVersionParser.fromJson(invalidRepresentations))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot parse representations from non-array: 23");
+  }
+
+  @Test
+  public void missingRepresentations() {
+    String missingRepresentations =
+        "{\"version-id\":1, \"timestamp-ms\":12345, \"schema-id\":1, 
\"summary\":{\"user\":\"some-user\"}, \"default-namespace\":[\"one\",\"two\"]}";
+    assertThatThrownBy(() -> 
ViewVersionParser.fromJson(missingRepresentations))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Cannot parse missing field: representations");
+  }
 }

Reply via email to