diff --git a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/action/rollback/RollbackUtils.java b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/action/rollback/RollbackUtils.java index bfbe577f9..4c1c3e21f 100644 --- a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/action/rollback/RollbackUtils.java +++ b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/action/rollback/RollbackUtils.java @@ -112,6 +112,9 @@ public class RollbackUtils { String commit = instantToRollback.getTimestamp(); HoodieWriteConfig config = table.getConfig(); List partitions = FSUtils.getAllPartitionPaths(context, config.getMetadataConfig(), table.getMetaClient().getBasePath()); + if (partitions.isEmpty()) { + return new ArrayList<>(); + } int sparkPartitions = Math.max(Math.min(partitions.size(), config.getRollbackParallelism()), 1); context.setJobStatus(RollbackUtils.class.getSimpleName(), "Generate all rollback requests"); return context.flatMap(partitions, partitionPath -> { diff --git a/hudi-client/hudi-spark-client/src/test/java/org/apache/hudi/table/action/rollback/TestMergeOnReadRollbackActionExecutor.java b/hudi-client/hudi-spark-client/src/test/java/org/apache/hudi/table/action/rollback/TestMergeOnReadRollbackActionExecutor.java index f64ce8be7..69d6dbac8 100644 --- a/hudi-client/hudi-spark-client/src/test/java/org/apache/hudi/table/action/rollback/TestMergeOnReadRollbackActionExecutor.java +++ b/hudi-client/hudi-spark-client/src/test/java/org/apache/hudi/table/action/rollback/TestMergeOnReadRollbackActionExecutor.java @@ -19,6 +19,7 @@ package org.apache.hudi.table.action.rollback; import org.apache.hudi.avro.model.HoodieRollbackPartitionMetadata; +import org.apache.hudi.client.SparkRDDWriteClient; import org.apache.hudi.common.model.FileSlice; import org.apache.hudi.common.model.HoodieFileGroup; import org.apache.hudi.common.model.HoodieLogFile; @@ -155,4 +156,19 @@ public class TestMergeOnReadRollbackActionExecutor extends HoodieClientRollbackT true); }); } + + /** + * Test Cases for rollbacking when has not base file. + */ + @Test + public void testRollbackWhenFirstCommitFail() throws Exception { + + HoodieWriteConfig config = HoodieWriteConfig.newBuilder().withPath(basePath).build(); + + try (SparkRDDWriteClient client = getHoodieWriteClient(config)) { + client.startCommitWithTime("001"); + client.insert(jsc.emptyRDD(), "001"); + client.rollback("001"); + } + } }