diff --git a/hadoop-ozone/iceberg/src/main/java/org/apache/hadoop/ozone/iceberg/RewriteTablePathOzoneAction.java b/hadoop-ozone/iceberg/src/main/java/org/apache/hadoop/ozone/iceberg/RewriteTablePathOzoneAction.java index 09bea8b4ab14..8edab48c7270 100644 --- a/hadoop-ozone/iceberg/src/main/java/org/apache/hadoop/ozone/iceberg/RewriteTablePathOzoneAction.java +++ b/hadoop-ozone/iceberg/src/main/java/org/apache/hadoop/ozone/iceberg/RewriteTablePathOzoneAction.java @@ -38,6 +38,8 @@ import org.apache.iceberg.actions.ImmutableRewriteTablePath; import org.apache.iceberg.actions.RewriteTablePath; import org.apache.iceberg.util.Pair; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * An implementation of {@link RewriteTablePath} for Apache Ozone backed Iceberg tables. @@ -50,6 +52,9 @@ */ public class RewriteTablePathOzoneAction implements RewriteTablePath { + private static final Logger LOG = + LoggerFactory.getLogger(RewriteTablePathOzoneAction.class); + private String sourcePrefix; private String targetPrefix; private String startVersionName; @@ -129,6 +134,9 @@ private Result doExecute() { } private void validateInputs() { + RewriteTablePathOzoneUtils.checkNonNullNonEmpty(sourcePrefix, "Source prefix"); + RewriteTablePathOzoneUtils.checkNonNullNonEmpty(targetPrefix, "Target prefix"); + if (sourcePrefix.equals(targetPrefix)) { throw new IllegalArgumentException( String.format( @@ -241,7 +249,7 @@ private Set> rewriteVersionFile(TableMetadata metadata, Str Set> result = new HashSet<>(); String stagingPath = RewriteTablePathUtil.stagingPath(versionFilePath, sourcePrefix, stagingDir); - System.out.println("Processing version file " + versionFilePath); + LOG.debug("Processing version file {}", versionFilePath); TableMetadata newTableMetadata = RewriteTablePathUtil.replacePaths(metadata, sourcePrefix, targetPrefix); TableMetadataParser.overwrite(newTableMetadata, table.io().newOutputFile(stagingPath)); diff --git a/hadoop-ozone/iceberg/src/test/java/org/apache/hadoop/ozone/iceberg/TestRewriteTablePathOzoneAction.java b/hadoop-ozone/iceberg/src/test/java/org/apache/hadoop/ozone/iceberg/TestRewriteTablePathOzoneAction.java index 8678fe52301e..da3bded885c2 100644 --- a/hadoop-ozone/iceberg/src/test/java/org/apache/hadoop/ozone/iceberg/TestRewriteTablePathOzoneAction.java +++ b/hadoop-ozone/iceberg/src/test/java/org/apache/hadoop/ozone/iceberg/TestRewriteTablePathOzoneAction.java @@ -18,6 +18,7 @@ package org.apache.hadoop.ozone.iceberg; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.BufferedReader; @@ -188,6 +189,51 @@ void tablePathRewriteForStartAndEndVersionProvided() throws Exception { assertAllInternalPathsRewritten(csvPairs, targetPrefix); } + @Test + void executeRejectsMissingLocationPrefix() { + NullPointerException exception = assertThrows(NullPointerException.class, + () -> new RewriteTablePathOzoneAction(table) + .stagingLocation(stagingDir.toString() + "/") + .execute()); + + assertEquals("Source prefix is null", exception.getMessage()); + } + + @Test + void rewriteLocationPrefixRejectsSameSourceAndTarget() { + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, + () -> new RewriteTablePathOzoneAction(table) + .rewriteLocationPrefix(sourcePrefix, sourcePrefix) + .execute()); + + assertEquals("Source prefix cannot be the same as target prefix (" + + sourcePrefix + ")", exception.getMessage()); + } + + @Test + void startVersionRejectsUnknownVersion() { + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, + () -> new RewriteTablePathOzoneAction(table) + .rewriteLocationPrefix(sourcePrefix, targetPrefix) + .startVersion("missing.metadata.json") + .execute()); + + assertEquals("Cannot find provided version file missing.metadata.json " + + "in metadata log.", exception.getMessage()); + } + + @Test + void endVersionRejectsUnknownVersion() { + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, + () -> new RewriteTablePathOzoneAction(table) + .rewriteLocationPrefix(sourcePrefix, targetPrefix) + .endVersion("missing.metadata.json") + .execute()); + + assertEquals("Cannot find provided version file missing.metadata.json " + + "in metadata log.", exception.getMessage()); + } + /** * For every staged metadata JSON file in the CSV, parses the file and asserts that: * - The table location starts with target