This is an automated email from the ASF dual-hosted git repository.

yihua pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hudi.git


The following commit(s) were added to refs/heads/master by this push:
     new 46c2fdbdb88 [HUDI-6062] Fix irregular enum config (#8564)
46c2fdbdb88 is described below

commit 46c2fdbdb88ff2669c7924cde30c6afdfe7b2330
Author: Jon Vexler <[email protected]>
AuthorDate: Sun Sep 24 14:46:46 2023 -0400

    [HUDI-6062] Fix irregular enum config (#8564)
    
    Co-authored-by: Jonathan Vexler <=>
    Co-authored-by: Y Ethan Guo <[email protected]>
---
 .../apache/hudi/config/HoodieClusteringConfig.java | 46 +++++++---------------
 .../org/apache/hudi/config/HoodieWriteConfig.java  |  3 +-
 .../procedures/RunClusteringProcedure.scala        |  6 +--
 3 files changed, 18 insertions(+), 37 deletions(-)

diff --git 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieClusteringConfig.java
 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieClusteringConfig.java
index 4d1756f4986..e8eea235168 100644
--- 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieClusteringConfig.java
+++ 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieClusteringConfig.java
@@ -26,19 +26,14 @@ import org.apache.hudi.common.config.EnumFieldDescription;
 import org.apache.hudi.common.config.HoodieConfig;
 import org.apache.hudi.common.config.TypedProperties;
 import org.apache.hudi.common.engine.EngineType;
-import org.apache.hudi.common.util.TypeUtils;
 import org.apache.hudi.common.util.ValidationUtils;
-import org.apache.hudi.exception.HoodieException;
 import org.apache.hudi.exception.HoodieNotSupportedException;
 import org.apache.hudi.index.HoodieIndex;
 import org.apache.hudi.table.action.cluster.ClusteringPlanPartitionFilterMode;
 
-import javax.annotation.Nonnull;
-
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
-import java.util.Map;
 import java.util.Properties;
 
 /**
@@ -269,11 +264,10 @@ public class HoodieClusteringConfig extends HoodieConfig {
    */
   public static final ConfigProperty<String> LAYOUT_OPTIMIZE_STRATEGY = 
ConfigProperty
       .key(LAYOUT_OPTIMIZE_PARAM_PREFIX + "strategy")
-      .defaultValue("linear")
+      .defaultValue(LayoutOptimizationStrategy.LINEAR.name())
       .markAdvanced()
       .sinceVersion("0.10.0")
-      .withDocumentation("Determines ordering strategy used in records layout 
optimization. "
-          + "Currently supported strategies are \"linear\", \"z-order\" and 
\"hilbert\" values are supported.");
+      .withDocumentation(LayoutOptimizationStrategy.class);
 
   /**
    * NOTE: This setting only has effect if {@link #LAYOUT_OPTIMIZE_STRATEGY} 
value is set to
@@ -693,7 +687,7 @@ public class HoodieClusteringConfig extends HoodieConfig {
   }
 
   /**
-   * Type of a strategy for building Z-order/Hilbert space-filling curves.
+   * Type of strategy for building Z-order/Hilbert space-filling curves.
    */
   @EnumDescription("This configuration only has effect if 
`hoodie.layout.optimize.strategy` is "
       + "set to either \"z-order\" or \"hilbert\" (i.e. leveraging 
space-filling curves). This "
@@ -723,32 +717,22 @@ public class HoodieClusteringConfig extends HoodieConfig {
   /**
    * Layout optimization strategies such as Z-order/Hilbert space-curves, etc
    */
+  @EnumDescription("Determines ordering strategy for records layout 
optimization.")
   public enum LayoutOptimizationStrategy {
-    LINEAR("linear"),
-    ZORDER("z-order"),
-    HILBERT("hilbert");
-
-    private static final Map<String, LayoutOptimizationStrategy> 
VALUE_TO_ENUM_MAP =
-        TypeUtils.getValueToEnumMap(LayoutOptimizationStrategy.class, e -> 
e.value);
-
-    private final String value;
-
-    LayoutOptimizationStrategy(String value) {
-      this.value = value;
-    }
+    @EnumFieldDescription("Orders records lexicographically")
+    LINEAR,
 
-    @Nonnull
-    public static LayoutOptimizationStrategy fromValue(String value) {
-      LayoutOptimizationStrategy enumValue = VALUE_TO_ENUM_MAP.get(value);
-      if (enumValue == null) {
-        throw new HoodieException(String.format("Invalid value (%s)", value));
-      }
+    @EnumFieldDescription("Orders records along Z-order spatial-curve.")
+    ZORDER,
 
-      return enumValue;
-    }
+    @EnumFieldDescription("Orders records along Hilbert's spatial-curve.")
+    HILBERT
+  }
 
-    public String getValue() {
-      return value;
+  public static LayoutOptimizationStrategy 
resolveLayoutOptimizationStrategy(String cfgVal) {
+    if (cfgVal.equalsIgnoreCase("z-order")) {
+      return LayoutOptimizationStrategy.ZORDER;
     }
+    return LayoutOptimizationStrategy.valueOf(cfgVal.toUpperCase());
   }
 }
diff --git 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieWriteConfig.java
 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieWriteConfig.java
index 705fcd06daa..18473e36272 100644
--- 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieWriteConfig.java
+++ 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieWriteConfig.java
@@ -1736,8 +1736,7 @@ public class HoodieWriteConfig extends HoodieConfig {
   }
 
   public HoodieClusteringConfig.LayoutOptimizationStrategy 
getLayoutOptimizationStrategy() {
-    return HoodieClusteringConfig.LayoutOptimizationStrategy.fromValue(
-        getStringOrDefault(HoodieClusteringConfig.LAYOUT_OPTIMIZE_STRATEGY));
+    return 
HoodieClusteringConfig.resolveLayoutOptimizationStrategy(getStringOrDefault(HoodieClusteringConfig.LAYOUT_OPTIMIZE_STRATEGY));
   }
 
   public HoodieClusteringConfig.SpatialCurveCompositionStrategyType 
getLayoutOptimizationCurveBuildMethod() {
diff --git 
a/hudi-spark-datasource/hudi-spark/src/main/scala/org/apache/spark/sql/hudi/command/procedures/RunClusteringProcedure.scala
 
b/hudi-spark-datasource/hudi-spark/src/main/scala/org/apache/spark/sql/hudi/command/procedures/RunClusteringProcedure.scala
index 4394095d9a7..27f92027a02 100644
--- 
a/hudi-spark-datasource/hudi-spark/src/main/scala/org/apache/spark/sql/hudi/command/procedures/RunClusteringProcedure.scala
+++ 
b/hudi-spark-datasource/hudi-spark/src/main/scala/org/apache/spark/sql/hudi/command/procedures/RunClusteringProcedure.scala
@@ -23,11 +23,9 @@ import 
org.apache.hudi.common.table.timeline.{HoodieActiveTimeline, HoodieTimeli
 import org.apache.hudi.common.table.{HoodieTableMetaClient, 
TableSchemaResolver}
 import org.apache.hudi.common.util.ValidationUtils.checkArgument
 import org.apache.hudi.common.util.{ClusteringUtils, HoodieTimer, Option => 
HOption}
-import org.apache.hudi.config.HoodieClusteringConfig.LayoutOptimizationStrategy
 import org.apache.hudi.config.{HoodieClusteringConfig, HoodieLockConfig}
 import org.apache.hudi.exception.HoodieClusteringException
 import org.apache.hudi.{AvroConversionUtils, HoodieCLIUtils, HoodieFileIndex}
-
 import org.apache.spark.internal.Logging
 import org.apache.spark.sql.HoodieCatalystExpressionUtils.{resolveExpr, 
splitPartitionAndDataPredicates}
 import org.apache.spark.sql.Row
@@ -125,9 +123,9 @@ class RunClusteringProcedure extends BaseProcedure
 
     orderStrategy match {
       case Some(o) =>
-        val strategy = 
LayoutOptimizationStrategy.fromValue(o.asInstanceOf[String])
+        val strategy = 
HoodieClusteringConfig.resolveLayoutOptimizationStrategy(o.asInstanceOf[String])
         confs = confs ++ Map(
-          HoodieClusteringConfig.LAYOUT_OPTIMIZE_STRATEGY.key() -> 
strategy.getValue
+          HoodieClusteringConfig.LAYOUT_OPTIMIZE_STRATEGY.key() -> 
strategy.name()
         )
       case _ =>
         logInfo("No order strategy")

Reply via email to