Enable optimized S3 tail reads for Iceberg Parquet footers - #15384
Conversation
Greptile SummaryRoutes Iceberg Parquet footer reads through optimized RAPIDS tail and vectored I/O while preserving decrypted Iceberg input files.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains. Important Files Changed
Sequence DiagramsequenceDiagram
participant Reader as GPU Iceberg Reader
participant FileIO as IcebergFileIO
participant Input as IcebergS3InputFile
participant S3 as Amazon S3
Reader->>FileIO: Wrap decrypted InputFile
FileIO->>Input: maybeCreate(inputFile, fileIO)
Reader->>Input: readTail(trailerLength)
Input->>S3: "GET Range bytes=-N"
S3-->>Input: Parquet trailer
Reader->>Input: readVectored(footer range)
Input->>S3: GET footer byte range
S3-->>Reader: Framed Parquet footer
Reviews (10): Last reviewed commit: "Fix build break" | Re-trigger Greptile |
Signed-off-by: Ray Liu <liurenjie2008@gmail.com>
|
NOTE: release/26.08 has been created from main. Please retarget your PR to release/26.08 if it should be included in the release. |
|
blocked by #15360 |
res-life
left a comment
There was a problem hiding this comment.
SHOULD FIX — Remove the redundant delegate field
iceberg/common/src/main/java/org/apache/iceberg/aws/s3/IcebergS3InputFile.java:44
IcebergS3InputFile stores delegate in a private field that is never read. The constructor already passes the same InputFile to IcebergInputFile at line 54, and the superclass stores it for the inherited operations. Remove only the redundant field declaration and constructor assignment; keep the constructor parameter and super(delegate) call.
@@ -41,7 +41,6 @@ public final class IcebergS3InputFile extends IcebergInputFile {
private static final Logger LOG = LoggerFactory.getLogger(IcebergS3InputFile.class);
- private final InputFile delegate;
private final String s3Bucket;
private final String s3Key;
private final IcebergS3Client icebergS3Client;
@@ -52,7 +51,6 @@ public final class IcebergS3InputFile extends IcebergInputFile {
String s3Key,
IcebergS3Client icebergS3Client) {
super(delegate);
- this.delegate = delegate;
this.s3Bucket = s3Bucket;
this.s3Key = s3Key;
this.icebergS3Client = icebergS3Client;|
build |
|
build |
|
build |
|
build |
Description
Fixes #15363
Parquet footer reads through Iceberg currently open and seek an input stream instead of using
RapidsInputFile.readTail. This bypasses the optimized Iceberg S3 suffix-range path and adds an avoidable length/seek round trip.This change:
RapidsInputFile.readTailand the footer body withreadVectored.IcebergS3InputFileanIcebergInputFilesubclass backed by the originalorg.apache.iceberg.io.InputFile, overriding only the S3-specific vectored and tail reads.IcebergFileIO, preserving Iceberg decryption while enabling optimized S3 reads.Testing
mvn -Dbuildver=402 -DskipTests -pl iceberg/iceberg-1-10-x,iceberg/iceberg-1-11-x -am compileParquetScanSuite,ParquetFormatScanSuite, andintegration_tests/src/main/python/iceberg/iceberg_test.py.readTailused an S3 suffix-range GET.Checklists
Documentation
Testing
Performance