This is an automated email from the ASF dual-hosted git repository.
Fokko 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 b505f93581 Build: Bump Parquet 1.18.1 (#18347)
b505f93581 is described below
commit b505f935813a8ac845cb5693620ab1def19ed2d7
Author: Yuya Ebihara <[email protected]>
AuthorDate: Mon Oct 12 22:13:27 2026 +0900
Build: Bump Parquet 1.18.1 (#18347)
Co-authored-by: Fokko Driesprong <[email protected]>
---
.../trivyignore/kafka-connect-runtime.trivyignore | 11 ++-----
.../iceberg/data/TestMetricsRowGroupFilter.java | 12 ++++---
flink/v1.20/flink-runtime/runtime-deps.txt | 16 ++++-----
flink/v2.2/flink-runtime/runtime-deps.txt | 16 ++++-----
flink/v2.3/flink-runtime/runtime-deps.txt | 16 ++++-----
gradle/libs.versions.toml | 2 +-
.../kafka-connect-runtime/runtime-deps.txt | 16 ++++-----
.../apache/iceberg/parquet/TestVariantMetrics.java | 38 ++++++++++++++++------
spark/v3.5/spark-runtime/runtime-deps.txt | 16 ++++-----
spark/v4.0/spark-runtime/runtime-deps.txt | 16 ++++-----
spark/v4.1/spark-runtime/runtime-deps.txt | 16 ++++-----
spark/v4.2/spark-runtime/runtime-deps.txt | 16 ++++-----
12 files changed, 104 insertions(+), 87 deletions(-)
diff --git a/.github/trivyignore/kafka-connect-runtime.trivyignore
b/.github/trivyignore/kafka-connect-runtime.trivyignore
index 28875f76ab..8ad78bfa17 100644
--- a/.github/trivyignore/kafka-connect-runtime.trivyignore
+++ b/.github/trivyignore/kafka-connect-runtime.trivyignore
@@ -21,7 +21,7 @@
# aligned to the project version (2.22.x). The remaining findings come from
# parquet-jackson, which ships its own shaded copy of jackson-core /
# jackson-databind (relocated under shaded.parquet.*). That copy cannot be
-# upgraded independently of Apache Parquet, and 1.17.1 still bundles
+# upgraded independently of Apache Parquet, and 1.18.1 still bundles
# vulnerable versions.
#
# jackson-databind CVEs shaded into parquet-jackson, only fixed in jackson
@@ -31,13 +31,8 @@ CVE-2026-54513
# jackson-core CVE shaded into parquet-jackson, only fixed in jackson
# >= 2.18.8 / 2.21.4 / 2.22.1.
CVE-2026-68494
-# jackson-databind CVE shaded into parquet-jackson 1.17.1, only fixed in
-# jackson >= 2.18.10 / 2.21.6 / 2.22.2. Resolved once Apache Parquet is
-# bumped to 1.18.1 (apache/iceberg#17321).
-CVE-2026-68497
-# jackson-databind CVEs shaded into parquet-jackson 1.17.1, only fixed in
-# jackson >= 2.18.11 / 2.21.7 / 2.22.3. Resolved once Apache Parquet is
-# bumped to 1.18.1 (apache/iceberg#17321).
+# jackson-databind CVEs shaded into parquet-jackson 1.18.1 (jackson 2.22.2),
+# only fixed in jackson >= 2.18.11 / 2.21.7 / 2.22.3.
CVE-2026-91776
CVE-2026-91777
# jackson-core CVEs shaded into parquet-jackson 1.17.1, only fixed in jackson
diff --git
a/data/src/test/java/org/apache/iceberg/data/TestMetricsRowGroupFilter.java
b/data/src/test/java/org/apache/iceberg/data/TestMetricsRowGroupFilter.java
index edb01d7e77..5572b68697 100644
--- a/data/src/test/java/org/apache/iceberg/data/TestMetricsRowGroupFilter.java
+++ b/data/src/test/java/org/apache/iceberg/data/TestMetricsRowGroupFilter.java
@@ -200,7 +200,9 @@ public class TestMetricsRowGroupFilter {
record.setField("_id", INT_MIN_VALUE + i); // min=30, max=79,
num-nulls=0
record.setField(
"_no_stats_parquet",
- TOO_LONG_FOR_STATS_PARQUET); // value longer than 4k will produce
no stats
+ (i % 10 == 0)
+ ? null
+ : TOO_LONG_FOR_STATS_PARQUET); // value longer than 4k will
produce no stats
// in Parquet, but will produce stats for ORC
record.setField("_required", "req"); // required, always non-null
record.setField("_all_nulls", null); // never non-null
@@ -240,7 +242,9 @@ public class TestMetricsRowGroupFilter {
builder.setField("_id", INT_MIN_VALUE + i); // min=30, max=79,
num-nulls=0
builder.setField(
"_no_stats_parquet",
- TOO_LONG_FOR_STATS_PARQUET); // value longer than 4k will produce no
stats
+ (i % 10 == 0)
+ ? null
+ : TOO_LONG_FOR_STATS_PARQUET); // value longer than 4k will
produce no stats
// in Parquet
builder.setField("_required", "req"); // required, always non-null
builder.setField("_all_nulls", null); // never non-null
@@ -341,7 +345,7 @@ public class TestMetricsRowGroupFilter {
shouldRead = shouldRead(lessThan("some_nans", 3.0));
assertThat(shouldRead).isTrue();
- shouldRead = shouldRead(lessThanOrEqual("some_nans", 1.0));
+ shouldRead = shouldRead(lessThanOrEqual("some_nans", 2.0));
assertThat(shouldRead).isTrue();
shouldRead = shouldRead(equal("some_nans", 2.0));
@@ -361,7 +365,7 @@ public class TestMetricsRowGroupFilter {
shouldRead = shouldRead(lessThan("some_double_nans", 3.0));
assertThat(shouldRead).as("Should read: column with some nans contains
target value").isTrue();
- shouldRead = shouldRead(lessThanOrEqual("some_double_nans", 1.0));
+ shouldRead = shouldRead(lessThanOrEqual("some_double_nans", 2.0));
assertThat(shouldRead).as("Should read: column with some nans contains
target value").isTrue();
shouldRead = shouldRead(equal("some_double_nans", 2.0));
diff --git a/flink/v1.20/flink-runtime/runtime-deps.txt
b/flink/v1.20/flink-runtime/runtime-deps.txt
index 14a1433940..3e11acbc27 100644
--- a/flink/v1.20/flink-runtime/runtime-deps.txt
+++ b/flink/v1.20/flink-runtime/runtime-deps.txt
@@ -14,14 +14,14 @@ org.apache.httpcomponents.core5:httpcore5-h2:5.4
org.apache.httpcomponents.core5:httpcore5:5.4
org.apache.orc:orc-core:1.9
org.apache.orc:orc-shims:1.9
-org.apache.parquet:parquet-avro:1.17
-org.apache.parquet:parquet-column:1.17
-org.apache.parquet:parquet-common:1.17
-org.apache.parquet:parquet-encoding:1.17
-org.apache.parquet:parquet-format-structures:1.17
-org.apache.parquet:parquet-hadoop:1.17
-org.apache.parquet:parquet-jackson:1.17
-org.apache.parquet:parquet-variant:1.17
+org.apache.parquet:parquet-avro:1.18
+org.apache.parquet:parquet-column:1.18
+org.apache.parquet:parquet-common:1.18
+org.apache.parquet:parquet-encoding:1.18
+org.apache.parquet:parquet-format-structures:1.18
+org.apache.parquet:parquet-hadoop:1.18
+org.apache.parquet:parquet-jackson:1.18
+org.apache.parquet:parquet-variant:1.18
org.eclipse.microprofile.openapi:microprofile-openapi-api:4.1
org.jspecify:jspecify:1.0
org.locationtech.jts:jts-core:1.20
diff --git a/flink/v2.2/flink-runtime/runtime-deps.txt
b/flink/v2.2/flink-runtime/runtime-deps.txt
index 14a1433940..3e11acbc27 100644
--- a/flink/v2.2/flink-runtime/runtime-deps.txt
+++ b/flink/v2.2/flink-runtime/runtime-deps.txt
@@ -14,14 +14,14 @@ org.apache.httpcomponents.core5:httpcore5-h2:5.4
org.apache.httpcomponents.core5:httpcore5:5.4
org.apache.orc:orc-core:1.9
org.apache.orc:orc-shims:1.9
-org.apache.parquet:parquet-avro:1.17
-org.apache.parquet:parquet-column:1.17
-org.apache.parquet:parquet-common:1.17
-org.apache.parquet:parquet-encoding:1.17
-org.apache.parquet:parquet-format-structures:1.17
-org.apache.parquet:parquet-hadoop:1.17
-org.apache.parquet:parquet-jackson:1.17
-org.apache.parquet:parquet-variant:1.17
+org.apache.parquet:parquet-avro:1.18
+org.apache.parquet:parquet-column:1.18
+org.apache.parquet:parquet-common:1.18
+org.apache.parquet:parquet-encoding:1.18
+org.apache.parquet:parquet-format-structures:1.18
+org.apache.parquet:parquet-hadoop:1.18
+org.apache.parquet:parquet-jackson:1.18
+org.apache.parquet:parquet-variant:1.18
org.eclipse.microprofile.openapi:microprofile-openapi-api:4.1
org.jspecify:jspecify:1.0
org.locationtech.jts:jts-core:1.20
diff --git a/flink/v2.3/flink-runtime/runtime-deps.txt
b/flink/v2.3/flink-runtime/runtime-deps.txt
index 14a1433940..3e11acbc27 100644
--- a/flink/v2.3/flink-runtime/runtime-deps.txt
+++ b/flink/v2.3/flink-runtime/runtime-deps.txt
@@ -14,14 +14,14 @@ org.apache.httpcomponents.core5:httpcore5-h2:5.4
org.apache.httpcomponents.core5:httpcore5:5.4
org.apache.orc:orc-core:1.9
org.apache.orc:orc-shims:1.9
-org.apache.parquet:parquet-avro:1.17
-org.apache.parquet:parquet-column:1.17
-org.apache.parquet:parquet-common:1.17
-org.apache.parquet:parquet-encoding:1.17
-org.apache.parquet:parquet-format-structures:1.17
-org.apache.parquet:parquet-hadoop:1.17
-org.apache.parquet:parquet-jackson:1.17
-org.apache.parquet:parquet-variant:1.17
+org.apache.parquet:parquet-avro:1.18
+org.apache.parquet:parquet-column:1.18
+org.apache.parquet:parquet-common:1.18
+org.apache.parquet:parquet-encoding:1.18
+org.apache.parquet:parquet-format-structures:1.18
+org.apache.parquet:parquet-hadoop:1.18
+org.apache.parquet:parquet-jackson:1.18
+org.apache.parquet:parquet-variant:1.18
org.eclipse.microprofile.openapi:microprofile-openapi-api:4.1
org.jspecify:jspecify:1.0
org.locationtech.jts:jts-core:1.20
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index bd518821a3..532d4ca14c 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -82,7 +82,7 @@ nessie = "0.108.8"
netty-buffer = "4.2.18.Final"
object-client-bundle = "3.3.2"
orc = "1.9.9"
-parquet = "1.17.1"
+parquet = "1.18.1"
roaringbitmap = "1.6.23"
scala-collection-compat = "2.14.0"
slf4j = "2.0.18"
diff --git a/kafka-connect/kafka-connect-runtime/runtime-deps.txt
b/kafka-connect/kafka-connect-runtime/runtime-deps.txt
index 1417e49614..b12a84a77e 100644
--- a/kafka-connect/kafka-connect-runtime/runtime-deps.txt
+++ b/kafka-connect/kafka-connect-runtime/runtime-deps.txt
@@ -174,14 +174,14 @@ org.apache.httpcomponents:httpclient:4.5
org.apache.httpcomponents:httpcore:4.4
org.apache.orc:orc-core:1.9
org.apache.orc:orc-shims:1.9
-org.apache.parquet:parquet-avro:1.17
-org.apache.parquet:parquet-column:1.17
-org.apache.parquet:parquet-common:1.17
-org.apache.parquet:parquet-encoding:1.17
-org.apache.parquet:parquet-format-structures:1.17
-org.apache.parquet:parquet-hadoop:1.17
-org.apache.parquet:parquet-jackson:1.17
-org.apache.parquet:parquet-variant:1.17
+org.apache.parquet:parquet-avro:1.18
+org.apache.parquet:parquet-column:1.18
+org.apache.parquet:parquet-common:1.18
+org.apache.parquet:parquet-encoding:1.18
+org.apache.parquet:parquet-format-structures:1.18
+org.apache.parquet:parquet-hadoop:1.18
+org.apache.parquet:parquet-jackson:1.18
+org.apache.parquet:parquet-variant:1.18
org.bouncycastle:bcprov-jdk18on:1.86
org.checkerframework:checker-compat-qual:2.5
org.checkerframework:checker-qual:3.49
diff --git
a/parquet/src/test/java/org/apache/iceberg/parquet/TestVariantMetrics.java
b/parquet/src/test/java/org/apache/iceberg/parquet/TestVariantMetrics.java
index 202e6362eb..d6ef5b8e48 100644
--- a/parquet/src/test/java/org/apache/iceberg/parquet/TestVariantMetrics.java
+++ b/parquet/src/test/java/org/apache/iceberg/parquet/TestVariantMetrics.java
@@ -583,12 +583,21 @@ public class TestVariantMetrics {
assertThat(metrics.nullValueCounts()).isEqualTo(Map.of(1, 0L, 2, 0L));
assertThat(metrics.nanValueCounts()).isEqualTo(Map.of());
- assertThat(metrics.lowerBounds())
- .isEqualTo(Map.of(1, Conversions.toByteBuffer(Type.TypeID.LONG, 0L)));
- assertThat(metrics.upperBounds())
- .isEqualTo(Map.of(1, Conversions.toByteBuffer(Type.TypeID.LONG, 1L)));
+ // NaN is ignored when computing the shredded value bounds, so both bounds
are the float value
+ assertThat(metrics.lowerBounds().get(1))
+ .isEqualTo(Conversions.toByteBuffer(Type.TypeID.LONG, 0L));
+ assertThat(metrics.lowerBounds().get(2))
+ .extracting(b -> Variant.from(b).value().asObject().get(ROOT_FIELD))
+ .isEqualTo(Variants.of(1.0F));
+ assertThat(metrics.upperBounds().get(1))
+ .isEqualTo(Conversions.toByteBuffer(Type.TypeID.LONG, 1L));
+ assertThat(metrics.upperBounds().get(2))
+ .extracting(b -> Variant.from(b).value().asObject().get(ROOT_FIELD))
+ .isEqualTo(Variants.of(1.0F));
- assertThat(metrics).extracting("originalTypes").isEqualTo(Map.of(1,
Types.LongType.get()));
+ assertThat(metrics)
+ .extracting("originalTypes")
+ .isEqualTo(Map.of(1, Types.LongType.get(), 2,
Types.VariantType.get()));
}
@Test
@@ -605,12 +614,21 @@ public class TestVariantMetrics {
assertThat(metrics.nullValueCounts()).isEqualTo(Map.of(1, 0L, 2, 0L));
assertThat(metrics.nanValueCounts()).isEqualTo(Map.of());
- assertThat(metrics.lowerBounds())
- .isEqualTo(Map.of(1, Conversions.toByteBuffer(Type.TypeID.LONG, 0L)));
- assertThat(metrics.upperBounds())
- .isEqualTo(Map.of(1, Conversions.toByteBuffer(Type.TypeID.LONG, 1L)));
+ // NaN is ignored when computing the shredded value bounds, so both bounds
are the double value
+ assertThat(metrics.lowerBounds().get(1))
+ .isEqualTo(Conversions.toByteBuffer(Type.TypeID.LONG, 0L));
+ assertThat(metrics.lowerBounds().get(2))
+ .extracting(b -> Variant.from(b).value().asObject().get(ROOT_FIELD))
+ .isEqualTo(Variants.of(1.0D));
+ assertThat(metrics.upperBounds().get(1))
+ .isEqualTo(Conversions.toByteBuffer(Type.TypeID.LONG, 1L));
+ assertThat(metrics.upperBounds().get(2))
+ .extracting(b -> Variant.from(b).value().asObject().get(ROOT_FIELD))
+ .isEqualTo(Variants.of(1.0D));
- assertThat(metrics).extracting("originalTypes").isEqualTo(Map.of(1,
Types.LongType.get()));
+ assertThat(metrics)
+ .extracting("originalTypes")
+ .isEqualTo(Map.of(1, Types.LongType.get(), 2,
Types.VariantType.get()));
}
@Test
diff --git a/spark/v3.5/spark-runtime/runtime-deps.txt
b/spark/v3.5/spark-runtime/runtime-deps.txt
index cff470571f..a468f48b05 100644
--- a/spark/v3.5/spark-runtime/runtime-deps.txt
+++ b/spark/v3.5/spark-runtime/runtime-deps.txt
@@ -21,14 +21,14 @@ org.apache.httpcomponents.core5:httpcore5-h2:5.4
org.apache.httpcomponents.core5:httpcore5:5.4
org.apache.orc:orc-core:1.9
org.apache.orc:orc-shims:1.9
-org.apache.parquet:parquet-avro:1.17
-org.apache.parquet:parquet-column:1.17
-org.apache.parquet:parquet-common:1.17
-org.apache.parquet:parquet-encoding:1.17
-org.apache.parquet:parquet-format-structures:1.17
-org.apache.parquet:parquet-hadoop:1.17
-org.apache.parquet:parquet-jackson:1.17
-org.apache.parquet:parquet-variant:1.17
+org.apache.parquet:parquet-avro:1.18
+org.apache.parquet:parquet-column:1.18
+org.apache.parquet:parquet-common:1.18
+org.apache.parquet:parquet-encoding:1.18
+org.apache.parquet:parquet-format-structures:1.18
+org.apache.parquet:parquet-hadoop:1.18
+org.apache.parquet:parquet-jackson:1.18
+org.apache.parquet:parquet-variant:1.18
org.eclipse.collections:eclipse-collections-api:11.1
org.eclipse.collections:eclipse-collections:11.1
org.eclipse.microprofile.openapi:microprofile-openapi-api:4.1
diff --git a/spark/v4.0/spark-runtime/runtime-deps.txt
b/spark/v4.0/spark-runtime/runtime-deps.txt
index cff470571f..a468f48b05 100644
--- a/spark/v4.0/spark-runtime/runtime-deps.txt
+++ b/spark/v4.0/spark-runtime/runtime-deps.txt
@@ -21,14 +21,14 @@ org.apache.httpcomponents.core5:httpcore5-h2:5.4
org.apache.httpcomponents.core5:httpcore5:5.4
org.apache.orc:orc-core:1.9
org.apache.orc:orc-shims:1.9
-org.apache.parquet:parquet-avro:1.17
-org.apache.parquet:parquet-column:1.17
-org.apache.parquet:parquet-common:1.17
-org.apache.parquet:parquet-encoding:1.17
-org.apache.parquet:parquet-format-structures:1.17
-org.apache.parquet:parquet-hadoop:1.17
-org.apache.parquet:parquet-jackson:1.17
-org.apache.parquet:parquet-variant:1.17
+org.apache.parquet:parquet-avro:1.18
+org.apache.parquet:parquet-column:1.18
+org.apache.parquet:parquet-common:1.18
+org.apache.parquet:parquet-encoding:1.18
+org.apache.parquet:parquet-format-structures:1.18
+org.apache.parquet:parquet-hadoop:1.18
+org.apache.parquet:parquet-jackson:1.18
+org.apache.parquet:parquet-variant:1.18
org.eclipse.collections:eclipse-collections-api:11.1
org.eclipse.collections:eclipse-collections:11.1
org.eclipse.microprofile.openapi:microprofile-openapi-api:4.1
diff --git a/spark/v4.1/spark-runtime/runtime-deps.txt
b/spark/v4.1/spark-runtime/runtime-deps.txt
index 844f4bf4e2..44e2c15693 100644
--- a/spark/v4.1/spark-runtime/runtime-deps.txt
+++ b/spark/v4.1/spark-runtime/runtime-deps.txt
@@ -21,14 +21,14 @@ org.apache.httpcomponents.core5:httpcore5-h2:5.4
org.apache.httpcomponents.core5:httpcore5:5.4
org.apache.orc:orc-core:1.9
org.apache.orc:orc-shims:1.9
-org.apache.parquet:parquet-avro:1.17
-org.apache.parquet:parquet-column:1.17
-org.apache.parquet:parquet-common:1.17
-org.apache.parquet:parquet-encoding:1.17
-org.apache.parquet:parquet-format-structures:1.17
-org.apache.parquet:parquet-hadoop:1.17
-org.apache.parquet:parquet-jackson:1.17
-org.apache.parquet:parquet-variant:1.17
+org.apache.parquet:parquet-avro:1.18
+org.apache.parquet:parquet-column:1.18
+org.apache.parquet:parquet-common:1.18
+org.apache.parquet:parquet-encoding:1.18
+org.apache.parquet:parquet-format-structures:1.18
+org.apache.parquet:parquet-hadoop:1.18
+org.apache.parquet:parquet-jackson:1.18
+org.apache.parquet:parquet-variant:1.18
org.eclipse.collections:eclipse-collections-api:11.1
org.eclipse.collections:eclipse-collections:11.1
org.eclipse.microprofile.openapi:microprofile-openapi-api:4.1
diff --git a/spark/v4.2/spark-runtime/runtime-deps.txt
b/spark/v4.2/spark-runtime/runtime-deps.txt
index 844f4bf4e2..44e2c15693 100644
--- a/spark/v4.2/spark-runtime/runtime-deps.txt
+++ b/spark/v4.2/spark-runtime/runtime-deps.txt
@@ -21,14 +21,14 @@ org.apache.httpcomponents.core5:httpcore5-h2:5.4
org.apache.httpcomponents.core5:httpcore5:5.4
org.apache.orc:orc-core:1.9
org.apache.orc:orc-shims:1.9
-org.apache.parquet:parquet-avro:1.17
-org.apache.parquet:parquet-column:1.17
-org.apache.parquet:parquet-common:1.17
-org.apache.parquet:parquet-encoding:1.17
-org.apache.parquet:parquet-format-structures:1.17
-org.apache.parquet:parquet-hadoop:1.17
-org.apache.parquet:parquet-jackson:1.17
-org.apache.parquet:parquet-variant:1.17
+org.apache.parquet:parquet-avro:1.18
+org.apache.parquet:parquet-column:1.18
+org.apache.parquet:parquet-common:1.18
+org.apache.parquet:parquet-encoding:1.18
+org.apache.parquet:parquet-format-structures:1.18
+org.apache.parquet:parquet-hadoop:1.18
+org.apache.parquet:parquet-jackson:1.18
+org.apache.parquet:parquet-variant:1.18
org.eclipse.collections:eclipse-collections-api:11.1
org.eclipse.collections:eclipse-collections:11.1
org.eclipse.microprofile.openapi:microprofile-openapi-api:4.1