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

huaxingao 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 e822643ef0 Core: Fix rewriting delete manifests in 
RewriteTablePathUtil (#15155)
e822643ef0 is described below

commit e822643ef06e8164c5d2314321b1278620b2ff97
Author: wobu <[email protected]>
AuthorDate: Tue Mar 17 01:23:53 2026 +0100

    Core: Fix rewriting delete manifests in RewriteTablePathUtil (#15155)
---
 .../org/apache/iceberg/RewriteTablePathUtil.java   |  2 +-
 .../apache/iceberg/TestRewriteTablePathUtil.java   | 38 +++++++++++++++++++++-
 2 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/core/src/main/java/org/apache/iceberg/RewriteTablePathUtil.java 
b/core/src/main/java/org/apache/iceberg/RewriteTablePathUtil.java
index f42c50ac56..435f791292 100644
--- a/core/src/main/java/org/apache/iceberg/RewriteTablePathUtil.java
+++ b/core/src/main/java/org/apache/iceberg/RewriteTablePathUtil.java
@@ -465,7 +465,7 @@ public class RewriteTablePathUtil {
                       stagingPath(file.location(), sourcePrefix, 
stagingLocation),
                       posDeleteFile.location()));
         }
-        result.toRewrite().add(file);
+        result.toRewrite().add(file.copy());
         return result;
       case EQUALITY_DELETES:
         DeleteFile eqDeleteFile = newEqualityDeleteEntry(file, spec, 
sourcePrefix, targetPrefix);
diff --git 
a/core/src/test/java/org/apache/iceberg/TestRewriteTablePathUtil.java 
b/core/src/test/java/org/apache/iceberg/TestRewriteTablePathUtil.java
index c88d237666..bedd8dd66d 100644
--- a/core/src/test/java/org/apache/iceberg/TestRewriteTablePathUtil.java
+++ b/core/src/test/java/org/apache/iceberg/TestRewriteTablePathUtil.java
@@ -20,10 +20,16 @@ package org.apache.iceberg;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.assertj.core.api.Assumptions.assumeThat;
 
+import java.io.IOException;
+import java.util.Set;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestTemplate;
+import org.junit.jupiter.api.extension.ExtendWith;
 
-public class TestRewriteTablePathUtil {
+@ExtendWith(ParameterizedTestExtension.class)
+public class TestRewriteTablePathUtil extends TestBase {
 
   @Test
   public void testStagingPathPreservesDirectoryStructure() {
@@ -245,4 +251,34 @@ public class TestRewriteTablePathUtil {
     // No separator (just filename)
     
assertThat(RewriteTablePathUtil.fileName("file.parquet")).isEqualTo("file.parquet");
   }
+
+  @TestTemplate
+  public void testRewritingMultiplePositionDeleteEntriesWithinManifestFile() 
throws IOException {
+    assumeThat(formatVersion)
+        .as("Delete files only work for format version 2")
+        .isGreaterThanOrEqualTo(2);
+
+    String sourcePrefix = "/path/to/";
+    String stagingDir = "/staging/";
+    String targetPrefix = "/path/new/";
+
+    ManifestFile manifest =
+        writeDeleteManifest(formatVersion, 1000L, FILE_A_DELETES, 
FILE_B_DELETES);
+
+    RewriteTablePathUtil.RewriteResult<DeleteFile> deleteFileRewriteResult =
+        RewriteTablePathUtil.rewriteDeleteManifest(
+            manifest,
+            Set.of(1000L),
+            Files.localOutput(
+                FileFormat.AVRO.addExtension(
+                    temp.resolve("junit" + 
System.nanoTime()).toFile().toString())),
+            table.io(),
+            formatVersion,
+            table.specs(),
+            sourcePrefix,
+            targetPrefix,
+            stagingDir);
+
+    assertThat(deleteFileRewriteResult.toRewrite()).hasSize(2);
+  }
 }

Reply via email to