rahil-c commented on code in PR #13642:
URL: https://github.com/apache/hudi/pull/13642#discussion_r2241064712


##########
hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/upgrade/UpgradeDowngrade.java:
##########
@@ -275,4 +281,98 @@ protected Pair<Map<ConfigProperty, String>, 
List<ConfigProperty>> downgrade(Hood
       throw new HoodieUpgradeDowngradeException(fromVersion.versionCode(), 
toVersion.versionCode(), false);
     }
   }
+
+  protected UpgradeHandler getUpgradeHandlerInstance(HoodieTableVersion 
fromVersion, HoodieTableVersion toVersion) {
+    if (fromVersion == HoodieTableVersion.ZERO && toVersion == 
HoodieTableVersion.ONE) {
+      return new ZeroToOneUpgradeHandler();
+    } else if (fromVersion == HoodieTableVersion.ONE && toVersion == 
HoodieTableVersion.TWO) {
+      return new OneToTwoUpgradeHandler();
+    } else if (fromVersion == HoodieTableVersion.TWO && toVersion == 
HoodieTableVersion.THREE) {
+      return new TwoToThreeUpgradeHandler();
+    } else if (fromVersion == HoodieTableVersion.THREE && toVersion == 
HoodieTableVersion.FOUR) {
+      return new ThreeToFourUpgradeHandler();
+    } else if (fromVersion == HoodieTableVersion.FOUR && toVersion == 
HoodieTableVersion.FIVE) {
+      return new FourToFiveUpgradeHandler();
+    } else if (fromVersion == HoodieTableVersion.FIVE && toVersion == 
HoodieTableVersion.SIX) {
+      return new FiveToSixUpgradeHandler();
+    } else if (fromVersion == HoodieTableVersion.SIX && toVersion == 
HoodieTableVersion.SEVEN) {
+      return new SixToSevenUpgradeHandler();
+    } else if (fromVersion == HoodieTableVersion.SEVEN && toVersion == 
HoodieTableVersion.EIGHT) {
+      return new SevenToEightUpgradeHandler();
+    } else if (fromVersion == HoodieTableVersion.EIGHT && toVersion == 
HoodieTableVersion.NINE) {
+      return new EightToNineUpgradeHandler();
+    } else {
+      throw new HoodieUpgradeDowngradeException(fromVersion.versionCode(), 
toVersion.versionCode(), true);
+    }
+  }
+
+  protected DowngradeHandler getDowngradeHandlerInstance(HoodieTableVersion 
fromVersion, HoodieTableVersion toVersion) {
+    if (fromVersion == HoodieTableVersion.ONE && toVersion == 
HoodieTableVersion.ZERO) {
+      return new OneToZeroDowngradeHandler();
+    } else if (fromVersion == HoodieTableVersion.TWO && toVersion == 
HoodieTableVersion.ONE) {
+      return new TwoToOneDowngradeHandler();
+    } else if (fromVersion == HoodieTableVersion.THREE && toVersion == 
HoodieTableVersion.TWO) {
+      return new ThreeToTwoDowngradeHandler();
+    } else if (fromVersion == HoodieTableVersion.FOUR && toVersion == 
HoodieTableVersion.THREE) {
+      return new FourToThreeDowngradeHandler();
+    } else if (fromVersion == HoodieTableVersion.FIVE && toVersion == 
HoodieTableVersion.FOUR) {
+      return new FiveToFourDowngradeHandler();
+    } else if (fromVersion == HoodieTableVersion.SIX && toVersion == 
HoodieTableVersion.FIVE) {
+      return new SixToFiveDowngradeHandler();
+    } else if (fromVersion == HoodieTableVersion.SEVEN && toVersion == 
HoodieTableVersion.SIX) {
+      return new SevenToSixDowngradeHandler();
+    } else if (fromVersion == HoodieTableVersion.EIGHT && toVersion == 
HoodieTableVersion.SEVEN) {
+      return new EightToSevenDowngradeHandler();
+    } else if (fromVersion == HoodieTableVersion.NINE && toVersion == 
HoodieTableVersion.EIGHT) {
+      return new NineToEightDowngradeHandler();
+    } else {
+      throw new HoodieUpgradeDowngradeException(fromVersion.versionCode(), 
toVersion.versionCode(), false);
+    }
+  }
+
+  /**
+   * Checks if any handlers in the upgrade/downgrade path need rollback and 
compaction and performs it once before starting.
+   * This ensures rollback and compaction happens only when needed and only 
once at the very beginning of the process.
+   *
+   * @param fromVersion the current table version
+   * @param toVersion   the target table version
+   */
+  private void rollbackAndCompactIfNeeded(HoodieTableVersion fromVersion, 
HoodieTableVersion toVersion) {
+    // Check if any handlers in the upgrade/downgrade path need rollback and 
compaction
+    boolean needsRollbackAndCompact = false;
+    if (fromVersion.versionCode() < toVersion.versionCode()) {
+      // Check upgrade handlers
+      HoodieTableVersion checkVersion = fromVersion;
+      while (checkVersion.versionCode() < toVersion.versionCode()) {
+        HoodieTableVersion nextVersion = 
HoodieTableVersion.fromVersionCode(checkVersion.versionCode() + 1);
+        UpgradeHandler handler = getUpgradeHandlerInstance(checkVersion, 
nextVersion);

Review Comment:
   I think i did this originally based on the feedback from here 
https://github.com/rahil-c/hudi/pull/2#discussion_r2234030450 around adding a 
`needsRollbackPendingCommitAndCompact` in each of the specific handlers that 
currently invoke it.
   
   If you do not want this anymore i can switch over to just using the set 
approach idea like you mentioned, since i think that would eliminate alot of 
unnecessary code.
   
   cc @nsivabalan @danny0405 



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to