diff --git a/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieBackedTableMetadata.java b/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieBackedTableMetadata.java index 0ab11d65e8b61..1ccc14176a14a 100644 --- a/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieBackedTableMetadata.java +++ b/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieBackedTableMetadata.java @@ -22,6 +22,7 @@ import org.apache.hudi.avro.model.HoodieMetadataRecord; import org.apache.hudi.avro.model.HoodieRestoreMetadata; import org.apache.hudi.avro.model.HoodieRollbackMetadata; +import org.apache.hudi.avro.model.HoodieRollbackPlan; import org.apache.hudi.common.config.HoodieCommonConfig; import org.apache.hudi.common.config.HoodieMetadataConfig; import org.apache.hudi.common.data.HoodieData; @@ -563,10 +564,21 @@ private boolean isFullScanAllowedForPartition(String partitionName) { */ private List getRollbackedCommits(HoodieInstant instant, HoodieActiveTimeline timeline) { try { + List commitsToRollback = null; if (instant.getAction().equals(HoodieTimeline.ROLLBACK_ACTION)) { - HoodieRollbackMetadata rollbackMetadata = TimelineMetadataUtils.deserializeHoodieRollbackMetadata( - timeline.getInstantDetails(instant).get()); - return rollbackMetadata.getCommitsRollback(); + try { + HoodieRollbackMetadata rollbackMetadata = TimelineMetadataUtils.deserializeHoodieRollbackMetadata( + timeline.getInstantDetails(instant).get()); + commitsToRollback = rollbackMetadata.getCommitsRollback(); + } catch (IOException e) { + // if file is empty, fetch the commits to rollback from rollback.requested file + HoodieRollbackPlan rollbackPlan = TimelineMetadataUtils.deserializeAvroMetadata( + timeline.readRollbackInfoAsBytes(new HoodieInstant(HoodieInstant.State.REQUESTED, HoodieTimeline.ROLLBACK_ACTION, + instant.getTimestamp())).get(), HoodieRollbackPlan.class); + commitsToRollback = Collections.singletonList(rollbackPlan.getInstantToRollback().getCommitTime()); + LOG.warn("Had to fetch rollback info from requested instant since completed file is empty " + instant.toString()); + } + return commitsToRollback; } List rollbackedCommits = new LinkedList<>();