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

aokolnychyi 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 2fa8c7d86c Core: Add rewritten delete files to write results (#11203)
2fa8c7d86c is described below

commit 2fa8c7d86c72e1869a97b847eb6b31fed2c4abb3
Author: Anton Okolnychyi <[email protected]>
AuthorDate: Wed Sep 25 08:30:06 2024 -0700

    Core: Add rewritten delete files to write results (#11203)
---
 .palantir/revapi.yml                               |  4 ++++
 .../apache/iceberg/io/BasePositionDeltaWriter.java |  1 +
 .../org/apache/iceberg/io/DeleteWriteResult.java   | 18 +++++++++++++++
 .../java/org/apache/iceberg/io/WriteResult.java    | 27 +++++++++++++++++++---
 4 files changed, 47 insertions(+), 3 deletions(-)

diff --git a/.palantir/revapi.yml b/.palantir/revapi.yml
index 9b8017f0be..05ec59226f 100644
--- a/.palantir/revapi.yml
+++ b/.palantir/revapi.yml
@@ -1088,6 +1088,10 @@ acceptedBreaks:
       old: "class org.apache.iceberg.GenericManifestFile"
       new: "class org.apache.iceberg.GenericManifestFile"
       justification: "Serialization across versions is not supported"
+    - code: "java.class.defaultSerializationChanged"
+      old: "class org.apache.iceberg.io.WriteResult"
+      new: "class org.apache.iceberg.io.WriteResult"
+      justification: "Serialization across versions is not supported"
     - code: "java.class.removed"
       old: "enum org.apache.iceberg.BaseMetastoreTableOperations.CommitStatus"
       justification: "Removing deprecated code"
diff --git 
a/core/src/main/java/org/apache/iceberg/io/BasePositionDeltaWriter.java 
b/core/src/main/java/org/apache/iceberg/io/BasePositionDeltaWriter.java
index e098729ba2..859d339bd9 100644
--- a/core/src/main/java/org/apache/iceberg/io/BasePositionDeltaWriter.java
+++ b/core/src/main/java/org/apache/iceberg/io/BasePositionDeltaWriter.java
@@ -81,6 +81,7 @@ public class BasePositionDeltaWriter<T> implements 
PositionDeltaWriter<T> {
         .addDataFiles(dataFiles())
         .addDeleteFiles(deleteWriteResult.deleteFiles())
         .addReferencedDataFiles(deleteWriteResult.referencedDataFiles())
+        .addRewrittenDeleteFiles(deleteWriteResult.rewrittenDeleteFiles())
         .build();
   }
 
diff --git a/core/src/main/java/org/apache/iceberg/io/DeleteWriteResult.java 
b/core/src/main/java/org/apache/iceberg/io/DeleteWriteResult.java
index 5c8768dcf1..98ac76bc80 100644
--- a/core/src/main/java/org/apache/iceberg/io/DeleteWriteResult.java
+++ b/core/src/main/java/org/apache/iceberg/io/DeleteWriteResult.java
@@ -32,25 +32,39 @@ import org.apache.iceberg.util.CharSequenceSet;
 public class DeleteWriteResult {
   private final List<DeleteFile> deleteFiles;
   private final CharSequenceSet referencedDataFiles;
+  private final List<DeleteFile> rewrittenDeleteFiles;
 
   public DeleteWriteResult(DeleteFile deleteFile) {
     this.deleteFiles = Collections.singletonList(deleteFile);
     this.referencedDataFiles = CharSequenceSet.empty();
+    this.rewrittenDeleteFiles = Collections.emptyList();
   }
 
   public DeleteWriteResult(DeleteFile deleteFile, CharSequenceSet 
referencedDataFiles) {
     this.deleteFiles = Collections.singletonList(deleteFile);
     this.referencedDataFiles = referencedDataFiles;
+    this.rewrittenDeleteFiles = Collections.emptyList();
   }
 
   public DeleteWriteResult(List<DeleteFile> deleteFiles) {
     this.deleteFiles = deleteFiles;
     this.referencedDataFiles = CharSequenceSet.empty();
+    this.rewrittenDeleteFiles = Collections.emptyList();
   }
 
   public DeleteWriteResult(List<DeleteFile> deleteFiles, CharSequenceSet 
referencedDataFiles) {
     this.deleteFiles = deleteFiles;
     this.referencedDataFiles = referencedDataFiles;
+    this.rewrittenDeleteFiles = Collections.emptyList();
+  }
+
+  public DeleteWriteResult(
+      List<DeleteFile> deleteFiles,
+      CharSequenceSet referencedDataFiles,
+      List<DeleteFile> rewrittenDeleteFiles) {
+    this.deleteFiles = deleteFiles;
+    this.referencedDataFiles = referencedDataFiles;
+    this.rewrittenDeleteFiles = rewrittenDeleteFiles;
   }
 
   public List<DeleteFile> deleteFiles() {
@@ -64,4 +78,8 @@ public class DeleteWriteResult {
   public boolean referencesDataFiles() {
     return referencedDataFiles != null && !referencedDataFiles.isEmpty();
   }
+
+  public List<DeleteFile> rewrittenDeleteFiles() {
+    return rewrittenDeleteFiles;
+  }
 }
diff --git a/core/src/main/java/org/apache/iceberg/io/WriteResult.java 
b/core/src/main/java/org/apache/iceberg/io/WriteResult.java
index c73b09f46c..39efaec7d3 100644
--- a/core/src/main/java/org/apache/iceberg/io/WriteResult.java
+++ b/core/src/main/java/org/apache/iceberg/io/WriteResult.java
@@ -31,12 +31,17 @@ public class WriteResult implements Serializable {
   private DataFile[] dataFiles;
   private DeleteFile[] deleteFiles;
   private CharSequence[] referencedDataFiles;
+  private DeleteFile[] rewrittenDeleteFiles;
 
   private WriteResult(
-      List<DataFile> dataFiles, List<DeleteFile> deleteFiles, CharSequenceSet 
referencedDataFiles) {
+      List<DataFile> dataFiles,
+      List<DeleteFile> deleteFiles,
+      CharSequenceSet referencedDataFiles,
+      List<DeleteFile> rewrittenDeleteFiles) {
     this.dataFiles = dataFiles.toArray(new DataFile[0]);
     this.deleteFiles = deleteFiles.toArray(new DeleteFile[0]);
     this.referencedDataFiles = referencedDataFiles.toArray(new 
CharSequence[0]);
+    this.rewrittenDeleteFiles = rewrittenDeleteFiles.toArray(new 
DeleteFile[0]);
   }
 
   public DataFile[] dataFiles() {
@@ -51,6 +56,10 @@ public class WriteResult implements Serializable {
     return referencedDataFiles;
   }
 
+  public DeleteFile[] rewrittenDeleteFiles() {
+    return rewrittenDeleteFiles;
+  }
+
   public static Builder builder() {
     return new Builder();
   }
@@ -59,18 +68,20 @@ public class WriteResult implements Serializable {
     private final List<DataFile> dataFiles;
     private final List<DeleteFile> deleteFiles;
     private final CharSequenceSet referencedDataFiles;
+    private final List<DeleteFile> rewrittenDeleteFiles;
 
     private Builder() {
       this.dataFiles = Lists.newArrayList();
       this.deleteFiles = Lists.newArrayList();
       this.referencedDataFiles = CharSequenceSet.empty();
+      this.rewrittenDeleteFiles = Lists.newArrayList();
     }
 
     public Builder add(WriteResult result) {
       addDataFiles(result.dataFiles);
       addDeleteFiles(result.deleteFiles);
       addReferencedDataFiles(result.referencedDataFiles);
-
+      addRewrittenDeleteFiles(result.rewrittenDeleteFiles);
       return this;
     }
 
@@ -109,8 +120,18 @@ public class WriteResult implements Serializable {
       return this;
     }
 
+    public Builder addRewrittenDeleteFiles(DeleteFile... files) {
+      Collections.addAll(rewrittenDeleteFiles, files);
+      return this;
+    }
+
+    public Builder addRewrittenDeleteFiles(Iterable<DeleteFile> files) {
+      Iterables.addAll(rewrittenDeleteFiles, files);
+      return this;
+    }
+
     public WriteResult build() {
-      return new WriteResult(dataFiles, deleteFiles, referencedDataFiles);
+      return new WriteResult(dataFiles, deleteFiles, referencedDataFiles, 
rewrittenDeleteFiles);
     }
   }
 }

Reply via email to