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]