nsivabalan commented on code in PR #8837: URL: https://github.com/apache/hudi/pull/8837#discussion_r1248170142
########## hudi-client/hudi-client-common/src/main/java/org/apache/hudi/metadata/HoodieBackedTableMetadataWriter.java: ########## @@ -973,52 +973,46 @@ public void update(HoodieRestoreMetadata restoreMetadata, String instantTime) { */ @Override public void update(HoodieRollbackMetadata rollbackMetadata, String instantTime) { - // The commit which is being rolled back on the dataset - final String commitInstantTime = rollbackMetadata.getCommitsRollback().get(0); - // Find the deltacommits since the last compaction - Option<Pair<HoodieTimeline, HoodieInstant>> deltaCommitsInfo = - CompactionUtils.getDeltaCommitsSinceLatestCompaction(metadataMetaClient.getActiveTimeline()); - if (!deltaCommitsInfo.isPresent()) { - LOG.info(String.format("Ignoring rollback of instant %s at %s since there are no deltacommits on MDT", commitInstantTime, instantTime)); - return; - } - - // This could be a compaction or deltacommit instant (See CompactionUtils.getDeltaCommitsSinceLatestCompaction) - HoodieInstant compactionInstant = deltaCommitsInfo.get().getValue(); - HoodieTimeline deltacommitsSinceCompaction = deltaCommitsInfo.get().getKey(); - - // The deltacommit that will be rolled back - HoodieInstant deltaCommitInstant = new HoodieInstant(false, HoodieTimeline.DELTA_COMMIT_ACTION, commitInstantTime); - - // The commit being rolled back should not be older than the latest compaction on the MDT. Compaction on MDT only occurs when all actions - // are completed on the dataset. Hence, this case implies a rollback of completed commit which should actually be handled using restore. - if (compactionInstant.getAction().equals(HoodieTimeline.COMMIT_ACTION)) { - final String compactionInstantTime = compactionInstant.getTimestamp(); - if (HoodieTimeline.LESSER_THAN_OR_EQUALS.test(commitInstantTime, compactionInstantTime)) { - throw new HoodieMetadataException(String.format("Commit being rolled back %s is older than the latest compaction %s. " - + "There are %d deltacommits after this compaction: %s", commitInstantTime, compactionInstantTime, - deltacommitsSinceCompaction.countInstants(), deltacommitsSinceCompaction.getInstants())); + if (initialized && metadata != null) { + // The commit which is being rolled back on the dataset + final String commitInstantTime = rollbackMetadata.getCommitsRollback().get(0); + // Find the deltacommits since the last compaction + Option<Pair<HoodieTimeline, HoodieInstant>> deltaCommitsInfo = + CompactionUtils.getDeltaCommitsSinceLatestCompaction(metadataMetaClient.getActiveTimeline()); + if (!deltaCommitsInfo.isPresent() || deltaCommitsInfo.get().getKey().empty()) { + LOG.info(String.format("Ignoring rollback of instant %s at %s since there are no deltacommits on MDT", commitInstantTime, instantTime)); + return; } - } - if (deltacommitsSinceCompaction.containsInstant(deltaCommitInstant)) { - LOG.info("Rolling back MDT deltacommit " + commitInstantTime); - if (!getWriteClient().rollback(commitInstantTime, instantTime)) { - throw new HoodieMetadataException("Failed to rollback deltacommit at " + commitInstantTime); + // This could be a compaction or deltacommit instant (See CompactionUtils.getDeltaCommitsSinceLatestCompaction) + HoodieInstant compactionInstant = deltaCommitsInfo.get().getValue(); + HoodieTimeline deltacommitsSinceCompaction = deltaCommitsInfo.get().getKey(); + + // The deltacommit that will be rolled back + HoodieInstant deltaCommitInstant = new HoodieInstant(false, HoodieTimeline.DELTA_COMMIT_ACTION, commitInstantTime); + + // The commit being rolled back should not be older than the latest compaction on the MDT. Compaction on MDT only occurs when all actions + // are completed on the dataset. Hence, this case implies a rollback of completed commit which should actually be handled using restore. + if (compactionInstant.getAction().equals(HoodieTimeline.COMMIT_ACTION)) { + final String compactionInstantTime = compactionInstant.getTimestamp(); + if (HoodieTimeline.LESSER_THAN_OR_EQUALS.test(commitInstantTime, compactionInstantTime)) { + throw new HoodieMetadataException(String.format("Commit being rolled back %s is older than the latest compaction %s. " + + "There are %d deltacommits after this compaction: %s", commitInstantTime, compactionInstantTime, + deltacommitsSinceCompaction.countInstants(), deltacommitsSinceCompaction.getInstants())); + } } - } else { - LOG.info(String.format("Ignoring rollback of instant %s at %s since there are no corresponding deltacommits on MDT", - commitInstantTime, instantTime)); - } - // Rollback of MOR table may end up adding a new log file. So we need to check for added files and add them to MDT - if (dataMetaClient.getTableType().equals(HoodieTableType.MERGE_ON_READ)) { Review Comment: @prashantwason : I jammed w/ Sagar and we feel this is not really required. Lets sync up f2f and get it clarified. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@hudi.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org