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

Reply via email to