This is an automated email from the ASF dual-hosted git repository.
blue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/master by this push:
new 49fb12e66e Core: Use unknown report type for forward-compatibility
(#7145)
49fb12e66e is described below
commit 49fb12e66e865c0b0e1dcabb68cd9ebf1e9989b1
Author: Eduard Tudenhöfner <[email protected]>
AuthorDate: Mon Mar 20 16:36:44 2023 +0100
Core: Use unknown report type for forward-compatibility (#7145)
---
.../rest/requests/ReportMetricsRequest.java | 15 ++++++---
.../rest/requests/ReportMetricsRequestParser.java | 2 +-
.../requests/TestReportMetricsRequestParser.java | 37 +++++++++++++++-------
3 files changed, 37 insertions(+), 17 deletions(-)
diff --git
a/core/src/main/java/org/apache/iceberg/rest/requests/ReportMetricsRequest.java
b/core/src/main/java/org/apache/iceberg/rest/requests/ReportMetricsRequest.java
index c85a6e9add..01f04f0e20 100644
---
a/core/src/main/java/org/apache/iceberg/rest/requests/ReportMetricsRequest.java
+++
b/core/src/main/java/org/apache/iceberg/rest/requests/ReportMetricsRequest.java
@@ -30,6 +30,7 @@ import org.immutables.value.Value;
public interface ReportMetricsRequest extends RESTRequest {
enum ReportType {
+ UNKNOWN,
SCAN_REPORT,
COMMIT_REPORT;
@@ -38,7 +39,7 @@ public interface ReportMetricsRequest extends RESTRequest {
try {
return ReportType.valueOf(reportType.toUpperCase(Locale.ENGLISH));
} catch (IllegalArgumentException e) {
- throw new IllegalArgumentException(String.format("Invalid report type:
%s", reportType), e);
+ return UNKNOWN;
}
}
}
@@ -54,16 +55,20 @@ public interface ReportMetricsRequest extends RESTRequest {
}
static ReportMetricsRequest of(MetricsReport report) {
- ReportType reportType = null;
+ ReportType reportType = ReportType.UNKNOWN;
if (report instanceof ScanReport) {
reportType = ReportType.SCAN_REPORT;
} else if (report instanceof CommitReport) {
reportType = ReportType.COMMIT_REPORT;
}
- Preconditions.checkArgument(
- null != reportType, "Unsupported report type: %s",
report.getClass().getName());
-
return
ImmutableReportMetricsRequest.builder().reportType(reportType).report(report).build();
}
+
+ static ReportMetricsRequest unknown() {
+ return ImmutableReportMetricsRequest.builder()
+ .reportType(ReportType.UNKNOWN)
+ .report(new MetricsReport() {})
+ .build();
+ }
}
diff --git
a/core/src/main/java/org/apache/iceberg/rest/requests/ReportMetricsRequestParser.java
b/core/src/main/java/org/apache/iceberg/rest/requests/ReportMetricsRequestParser.java
index e6d98cdac3..9bfdc4a8e0 100644
---
a/core/src/main/java/org/apache/iceberg/rest/requests/ReportMetricsRequestParser.java
+++
b/core/src/main/java/org/apache/iceberg/rest/requests/ReportMetricsRequestParser.java
@@ -94,6 +94,6 @@ public class ReportMetricsRequestParser {
.build();
}
- throw new IllegalArgumentException(String.format("Cannot build metrics
request from %s", json));
+ return ReportMetricsRequest.unknown();
}
}
diff --git
a/core/src/test/java/org/apache/iceberg/rest/requests/TestReportMetricsRequestParser.java
b/core/src/test/java/org/apache/iceberg/rest/requests/TestReportMetricsRequestParser.java
index 70a219e791..465714b173 100644
---
a/core/src/test/java/org/apache/iceberg/rest/requests/TestReportMetricsRequestParser.java
+++
b/core/src/test/java/org/apache/iceberg/rest/requests/TestReportMetricsRequestParser.java
@@ -67,19 +67,34 @@ public class TestReportMetricsRequestParser {
@Test
public void invalidReportType() {
- Assertions.assertThatThrownBy(
- () ->
ReportMetricsRequestParser.fromJson("{\"report-type\":\"invalid\"}"))
- .isInstanceOf(IllegalArgumentException.class)
- .hasMessage("Invalid report type: invalid");
+ Assertions.assertThat(
+
ReportMetricsRequestParser.fromJson("{\"report-type\":\"invalid\"}").reportType())
+ .isEqualTo(ReportMetricsRequest.unknown().reportType());
- Assertions.assertThatThrownBy(
- () ->
- ReportMetricsRequestParser.fromJson(
+ Assertions.assertThat(
+ ReportMetricsRequestParser.fromJson(
ReportMetricsRequestParser.toJson(
- ReportMetricsRequest.of(new MetricsReport() {}))))
- .isInstanceOf(IllegalArgumentException.class)
- .hasMessage(
- "Unsupported report type:
org.apache.iceberg.rest.requests.TestReportMetricsRequestParser$1");
+ ReportMetricsRequest.of(new MetricsReport() {})))
+ .reportType())
+ .isEqualTo(ReportMetricsRequest.unknown().reportType());
+
+ // this is simulating a newer client sending a request to server running
an older version (not
+ // knowing the new report type). this should not fail parsing on the server
+ String json =
+ "{\n"
+ + " \"report-type\" : \"new-report-type\",\n"
+ + " \"table-name\" : \"roundTripTableName\",\n"
+ + " \"snapshot-id\" : 23,\n"
+ + " \"filter\" : true,\n"
+ + " \"schema-id\" : 4,\n"
+ + " \"projected-field-ids\" : [ 1, 2, 3 ],\n"
+ + " \"projected-field-names\" : [ \"c1\", \"c2\", \"c3\" ],\n"
+ + " \"metrics\" : { }\n"
+ + "}";
+
+ ReportMetricsRequest request = ReportMetricsRequestParser.fromJson(json);
+ Assertions.assertThat(request.reportType())
+ .isEqualTo(ReportMetricsRequest.unknown().reportType());
}
@Test