This is an automated email from the ASF dual-hosted git repository. yihua pushed a commit to branch release-0.13.0 in repository https://gitbox.apache.org/repos/asf/hudi.git
commit 138af1a43b3976242a5a0b099bfdd618d5fc6a17 Author: Sivabalan Narayanan <[email protected]> AuthorDate: Mon Jan 30 20:43:18 2023 -0800 [HUDI-5654] Fixing read of an empty rollback completed meta files from data table timeline w/ metadata reads (#7798) Fixing metadata table to read rollback info even w/ empty rollback completed meta file. --- .../hudi/metadata/HoodieBackedTableMetadata.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) 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 0ab11d65e8b..1ccc14176a1 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.HoodieAvroUtils; 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 @@ public class HoodieBackedTableMetadata extends BaseTableMetadata { */ private List<String> getRollbackedCommits(HoodieInstant instant, HoodieActiveTimeline timeline) { try { + List<String> 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<String> rollbackedCommits = new LinkedList<>();
