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);
+ }
}