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

vinoyang 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 2791fb9  [HUDI-2423] Separate some config logic from 
HoodieMetricsConfig into HoodieMetricsGraphiteConfig HoodieMetricsJmxConfig 
(#3652)
2791fb9 is described below

commit 2791fb9a964b39ef9aaec83eafd080013186b2eb
Author: liujinhui <[email protected]>
AuthorDate: Thu Sep 16 15:08:10 2021 +0800

    [HUDI-2423] Separate some config logic from HoodieMetricsConfig into 
HoodieMetricsGraphiteConfig HoodieMetricsJmxConfig (#3652)
---
 .../org/apache/hudi/config/HoodieWriteConfig.java  |  29 ++++-
 .../config/{ => metrics}/HoodieMetricsConfig.java  | 112 +----------------
 .../{ => metrics}/HoodieMetricsDatadogConfig.java  |   4 +-
 .../metrics/HoodieMetricsGraphiteConfig.java       | 134 +++++++++++++++++++++
 .../config/metrics/HoodieMetricsJmxConfig.java     | 118 ++++++++++++++++++
 .../HoodieMetricsPrometheusConfig.java             |  45 ++++++-
 .../metadata/HoodieBackedTableMetadataWriter.java  |  22 ++--
 .../datadog/TestHoodieMetricsDatadogConfig.java    |   2 +-
 .../functional/TestHoodieBackedMetadata.java       |   7 +-
 9 files changed, 344 insertions(+), 129 deletions(-)

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 4df7d0d..c871253 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
@@ -40,6 +40,11 @@ import 
org.apache.hudi.common.table.timeline.versioning.TimelineLayoutVersion;
 import org.apache.hudi.common.table.view.FileSystemViewStorageConfig;
 import org.apache.hudi.common.util.ReflectionUtils;
 import org.apache.hudi.common.util.ValidationUtils;
+import org.apache.hudi.config.metrics.HoodieMetricsConfig;
+import org.apache.hudi.config.metrics.HoodieMetricsDatadogConfig;
+import org.apache.hudi.config.metrics.HoodieMetricsGraphiteConfig;
+import org.apache.hudi.config.metrics.HoodieMetricsJmxConfig;
+import org.apache.hudi.config.metrics.HoodieMetricsPrometheusConfig;
 import org.apache.hudi.execution.bulkinsert.BulkInsertSortMode;
 import org.apache.hudi.index.HoodieIndex;
 import org.apache.hudi.keygen.SimpleAvroKeyGenerator;
@@ -1459,23 +1464,23 @@ public class HoodieWriteConfig extends HoodieConfig {
   }
 
   public String getGraphiteServerHost() {
-    return getString(HoodieMetricsConfig.GRAPHITE_SERVER_HOST_NAME);
+    return getString(HoodieMetricsGraphiteConfig.GRAPHITE_SERVER_HOST_NAME);
   }
 
   public int getGraphiteServerPort() {
-    return getInt(HoodieMetricsConfig.GRAPHITE_SERVER_PORT_NUM);
+    return getInt(HoodieMetricsGraphiteConfig.GRAPHITE_SERVER_PORT_NUM);
   }
 
   public String getGraphiteMetricPrefix() {
-    return getString(HoodieMetricsConfig.GRAPHITE_METRIC_PREFIX_VALUE);
+    return getString(HoodieMetricsGraphiteConfig.GRAPHITE_METRIC_PREFIX_VALUE);
   }
 
   public String getJmxHost() {
-    return getString(HoodieMetricsConfig.JMX_HOST_NAME);
+    return getString(HoodieMetricsJmxConfig.JMX_HOST_NAME);
   }
 
   public String getJmxPort() {
-    return getString(HoodieMetricsConfig.JMX_PORT_NUM);
+    return getString(HoodieMetricsJmxConfig.JMX_PORT_NUM);
   }
 
   public int getDatadogReportPeriodSeconds() {
@@ -1777,6 +1782,8 @@ public class HoodieWriteConfig extends HoodieConfig {
     private boolean isMetadataConfigSet = false;
     private boolean isLockConfigSet = false;
     private boolean isPreCommitValidationConfigSet = false;
+    private boolean isMetricsJmxConfigSet = false;
+    private boolean isMetricsGraphiteConfigSet = false;
 
     public Builder withEngineType(EngineType engineType) {
       this.engineType = engineType;
@@ -1931,6 +1938,18 @@ public class HoodieWriteConfig extends HoodieConfig {
       return this;
     }
 
+    public Builder withMetricsJmxConfig(HoodieMetricsJmxConfig 
metricsJmxConfig) {
+      writeConfig.getProps().putAll(metricsJmxConfig.getProps());
+      isMetricsJmxConfigSet = true;
+      return this;
+    }
+
+    public Builder withMetricsGraphiteConfig(HoodieMetricsGraphiteConfig 
mericsGraphiteConfig) {
+      writeConfig.getProps().putAll(mericsGraphiteConfig.getProps());
+      isMetricsGraphiteConfigSet = true;
+      return this;
+    }
+
     public Builder withPreCommitValidatorConfig(HoodiePreCommitValidatorConfig 
validatorConfig) {
       writeConfig.getProps().putAll(validatorConfig.getProps());
       isPreCommitValidationConfigSet = true;
diff --git 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieMetricsConfig.java
 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsConfig.java
similarity index 62%
rename from 
hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieMetricsConfig.java
rename to 
hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsConfig.java
index e1d0b63..60369d7 100644
--- 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieMetricsConfig.java
+++ 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsConfig.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.hudi.config;
+package org.apache.hudi.config.metrics;
 
 import org.apache.hudi.common.config.ConfigClassProperty;
 import org.apache.hudi.common.config.ConfigGroups;
@@ -55,42 +55,6 @@ public class HoodieMetricsConfig extends HoodieConfig {
       .sinceVersion("0.5.0")
       .withDocumentation("Type of metrics reporter.");
 
-  // Graphite
-  public static final String GRAPHITE_PREFIX = METRIC_PREFIX + ".graphite";
-
-  public static final ConfigProperty<String> GRAPHITE_SERVER_HOST_NAME = 
ConfigProperty
-      .key(GRAPHITE_PREFIX + ".host")
-      .defaultValue("localhost")
-      .sinceVersion("0.5.0")
-      .withDocumentation("Graphite host to connect to");
-
-  public static final ConfigProperty<Integer> GRAPHITE_SERVER_PORT_NUM = 
ConfigProperty
-      .key(GRAPHITE_PREFIX + ".port")
-      .defaultValue(4756)
-      .sinceVersion("0.5.0")
-      .withDocumentation("Graphite port to connect to");
-
-  // Jmx
-  public static final String JMX_PREFIX = METRIC_PREFIX + ".jmx";
-
-  public static final ConfigProperty<String> JMX_HOST_NAME = ConfigProperty
-      .key(JMX_PREFIX + ".host")
-      .defaultValue("localhost")
-      .sinceVersion("0.5.1")
-      .withDocumentation("Jmx host to connect to");
-
-  public static final ConfigProperty<Integer> JMX_PORT_NUM = ConfigProperty
-      .key(JMX_PREFIX + ".port")
-      .defaultValue(9889)
-      .sinceVersion("0.5.1")
-      .withDocumentation("Jmx port to connect to");
-
-  public static final ConfigProperty<String> GRAPHITE_METRIC_PREFIX_VALUE = 
ConfigProperty
-      .key(GRAPHITE_PREFIX + ".metric.prefix")
-      .noDefaultValue()
-      .sinceVersion("0.5.1")
-      .withDocumentation("Standard prefix applied to all metrics. This helps 
to add datacenter, environment information for e.g");
-
   // User defined
   public static final ConfigProperty<String> METRICS_REPORTER_CLASS_NAME = 
ConfigProperty
       .key(METRIC_PREFIX + ".reporter.class")
@@ -126,51 +90,6 @@ public class HoodieMetricsConfig extends HoodieConfig {
   @Deprecated
   public static final MetricsReporterType DEFAULT_METRICS_REPORTER_TYPE = 
METRICS_REPORTER_TYPE_VALUE.defaultValue();
   /**
-   * @deprecated Use {@link #GRAPHITE_SERVER_HOST_NAME} and its methods instead
-   */
-  @Deprecated
-  public static final String GRAPHITE_SERVER_HOST = 
GRAPHITE_SERVER_HOST_NAME.key();
-  /**
-   * @deprecated Use {@link #GRAPHITE_SERVER_HOST_NAME} and its methods instead
-   */
-  @Deprecated
-  public static final String DEFAULT_GRAPHITE_SERVER_HOST = 
GRAPHITE_SERVER_HOST_NAME.defaultValue();
-  /**
-   * @deprecated Use {@link #GRAPHITE_SERVER_PORT_NUM} and its methods instead
-   */
-  @Deprecated
-  public static final String GRAPHITE_SERVER_PORT = 
GRAPHITE_SERVER_PORT_NUM.key();
-  /**
-   * @deprecated Use {@link #GRAPHITE_SERVER_PORT_NUM} and its methods instead
-   */
-  @Deprecated
-  public static final int DEFAULT_GRAPHITE_SERVER_PORT = 
GRAPHITE_SERVER_PORT_NUM.defaultValue();
-  /**
-   * @deprecated Use {@link #JMX_HOST_NAME} and its methods instead
-   */
-  @Deprecated
-  public static final String JMX_HOST = JMX_HOST_NAME.key();
-  /**
-   * @deprecated Use {@link #JMX_HOST_NAME} and its methods instead
-   */
-  @Deprecated
-  public static final String DEFAULT_JMX_HOST = JMX_HOST_NAME.defaultValue();
-  /**
-   * @deprecated Use {@link #JMX_PORT_NUM} and its methods instead
-   */
-  @Deprecated
-  public static final String JMX_PORT = JMX_PORT_NUM.key();
-  /**
-   * @deprecated Use {@link #JMX_PORT_NUM} and its methods instead
-   */
-  @Deprecated
-  public static final int DEFAULT_JMX_PORT = JMX_PORT_NUM.defaultValue();
-  /**
-   * @deprecated Use {@link #GRAPHITE_METRIC_PREFIX_VALUE} and its methods 
instead
-   */
-  @Deprecated
-  public static final String GRAPHITE_METRIC_PREFIX = 
GRAPHITE_METRIC_PREFIX_VALUE.key();
-  /**
    * @deprecated Use {@link #METRICS_REPORTER_CLASS_NAME} and its methods 
instead
    */
   @Deprecated
@@ -220,31 +139,6 @@ public class HoodieMetricsConfig extends HoodieConfig {
       return this;
     }
 
-    public Builder toGraphiteHost(String host) {
-      hoodieMetricsConfig.setValue(GRAPHITE_SERVER_HOST_NAME, host);
-      return this;
-    }
-
-    public Builder onGraphitePort(int port) {
-      hoodieMetricsConfig.setValue(GRAPHITE_SERVER_PORT_NUM, 
String.valueOf(port));
-      return this;
-    }
-
-    public Builder toJmxHost(String host) {
-      hoodieMetricsConfig.setValue(JMX_HOST_NAME, host);
-      return this;
-    }
-
-    public Builder onJmxPort(String port) {
-      hoodieMetricsConfig.setValue(JMX_PORT_NUM, port);
-      return this;
-    }
-
-    public Builder usePrefix(String prefix) {
-      hoodieMetricsConfig.setValue(GRAPHITE_METRIC_PREFIX_VALUE, prefix);
-      return this;
-    }
-
     public Builder withReporterClass(String className) {
       hoodieMetricsConfig.setValue(METRICS_REPORTER_CLASS_NAME, className);
       return this;
@@ -267,6 +161,10 @@ public class HoodieMetricsConfig extends HoodieConfig {
               
HoodieMetricsPrometheusConfig.newBuilder().fromProperties(hoodieMetricsConfig.getProps()).build());
       hoodieMetricsConfig.setDefaultOnCondition(reporterType == 
MetricsReporterType.PROMETHEUS,
               
HoodieMetricsPrometheusConfig.newBuilder().fromProperties(hoodieMetricsConfig.getProps()).build());
+      hoodieMetricsConfig.setDefaultOnCondition(reporterType == 
MetricsReporterType.JMX,
+          
HoodieMetricsJmxConfig.newBuilder().fromProperties(hoodieMetricsConfig.getProps()).build());
+      hoodieMetricsConfig.setDefaultOnCondition(reporterType == 
MetricsReporterType.GRAPHITE,
+          
HoodieMetricsGraphiteConfig.newBuilder().fromProperties(hoodieMetricsConfig.getProps()).build());
       return hoodieMetricsConfig;
     }
   }
diff --git 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieMetricsDatadogConfig.java
 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsDatadogConfig.java
similarity index 98%
rename from 
hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieMetricsDatadogConfig.java
rename to 
hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsDatadogConfig.java
index d63cb0f..3fc306b 100644
--- 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieMetricsDatadogConfig.java
+++ 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsDatadogConfig.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.hudi.config;
+package org.apache.hudi.config.metrics;
 
 import org.apache.hudi.common.config.ConfigClassProperty;
 import org.apache.hudi.common.config.ConfigGroups;
@@ -27,7 +27,7 @@ import javax.annotation.concurrent.Immutable;
 
 import java.util.Properties;
 
-import static org.apache.hudi.config.HoodieMetricsConfig.METRIC_PREFIX;
+import static org.apache.hudi.config.metrics.HoodieMetricsConfig.METRIC_PREFIX;
 
 /**
  * Configs for Datadog reporter type.
diff --git 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsGraphiteConfig.java
 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsGraphiteConfig.java
new file mode 100644
index 0000000..12987a7
--- /dev/null
+++ 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsGraphiteConfig.java
@@ -0,0 +1,134 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hudi.config.metrics;
+
+import org.apache.hudi.common.config.ConfigClassProperty;
+import org.apache.hudi.common.config.ConfigGroups;
+import org.apache.hudi.common.config.ConfigProperty;
+import org.apache.hudi.common.config.HoodieConfig;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Properties;
+
+import static org.apache.hudi.config.metrics.HoodieMetricsConfig.METRIC_PREFIX;
+
+/**
+ * Configs for Graphite reporter type.
+ * <p>
+ * {@link org.apache.hudi.metrics.MetricsReporterType#GRAPHITE}
+ */
+@ConfigClassProperty(name = "Metrics Configurations for Graphite",
+    groupName = ConfigGroups.Names.METRICS,
+    description = "Enables reporting on Hudi metrics using Graphite. "
+        + " Hudi publishes metrics on every commit, clean, rollback etc.")
+public class HoodieMetricsGraphiteConfig extends HoodieConfig {
+
+  public static final String GRAPHITE_PREFIX = METRIC_PREFIX + ".graphite";
+
+  public static final ConfigProperty<String> GRAPHITE_SERVER_HOST_NAME = 
ConfigProperty
+      .key(GRAPHITE_PREFIX + ".host")
+      .defaultValue("localhost")
+      .sinceVersion("0.5.0")
+      .withDocumentation("Graphite host to connect to.");
+
+  public static final ConfigProperty<Integer> GRAPHITE_SERVER_PORT_NUM = 
ConfigProperty
+      .key(GRAPHITE_PREFIX + ".port")
+      .defaultValue(4756)
+      .sinceVersion("0.5.0")
+      .withDocumentation("Graphite port to connect to.");
+
+  public static final ConfigProperty<String> GRAPHITE_METRIC_PREFIX_VALUE = 
ConfigProperty
+      .key(GRAPHITE_PREFIX + ".metric.prefix")
+      .noDefaultValue()
+      .sinceVersion("0.5.1")
+      .withDocumentation("Standard prefix applied to all metrics. This helps 
to add datacenter, environment information for e.g");
+
+  /**
+   * @deprecated Use {@link #GRAPHITE_SERVER_HOST_NAME} and its methods instead
+   */
+  @Deprecated
+  public static final String GRAPHITE_SERVER_HOST = 
GRAPHITE_SERVER_HOST_NAME.key();
+  /**
+   * @deprecated Use {@link #GRAPHITE_SERVER_HOST_NAME} and its methods instead
+   */
+  @Deprecated
+  public static final String DEFAULT_GRAPHITE_SERVER_HOST = 
GRAPHITE_SERVER_HOST_NAME.defaultValue();
+  /**
+   * @deprecated Use {@link #GRAPHITE_SERVER_PORT_NUM} and its methods instead
+   */
+  @Deprecated
+  public static final String GRAPHITE_SERVER_PORT = 
GRAPHITE_SERVER_PORT_NUM.key();
+  /**
+   * @deprecated Use {@link #GRAPHITE_SERVER_PORT_NUM} and its methods instead
+   */
+  @Deprecated
+  public static final int DEFAULT_GRAPHITE_SERVER_PORT = 
GRAPHITE_SERVER_PORT_NUM.defaultValue();
+  /**
+   * @deprecated Use {@link #GRAPHITE_METRIC_PREFIX_VALUE} and its methods 
instead
+   */
+  @Deprecated
+  public static final String GRAPHITE_METRIC_PREFIX = 
GRAPHITE_METRIC_PREFIX_VALUE.key();
+
+  private HoodieMetricsGraphiteConfig() {
+    super();
+  }
+
+  public static HoodieMetricsGraphiteConfig.Builder newBuilder() {
+    return new HoodieMetricsGraphiteConfig.Builder();
+  }
+
+  public static class Builder {
+
+    private final HoodieMetricsGraphiteConfig hoodieMetricsGraphiteConfig = 
new HoodieMetricsGraphiteConfig();
+
+    public HoodieMetricsGraphiteConfig.Builder fromFile(File propertiesFile) 
throws IOException {
+      try (FileReader reader = new FileReader(propertiesFile)) {
+        this.hoodieMetricsGraphiteConfig.getProps().load(reader);
+        return this;
+      }
+    }
+
+    public HoodieMetricsGraphiteConfig.Builder fromProperties(Properties 
props) {
+      this.hoodieMetricsGraphiteConfig.getProps().putAll(props);
+      return this;
+    }
+
+    public HoodieMetricsGraphiteConfig.Builder toGraphiteHost(String host) {
+      hoodieMetricsGraphiteConfig.setValue(GRAPHITE_SERVER_HOST_NAME, host);
+      return this;
+    }
+
+    public HoodieMetricsGraphiteConfig.Builder onGraphitePort(int port) {
+      hoodieMetricsGraphiteConfig.setValue(GRAPHITE_SERVER_PORT_NUM, 
String.valueOf(port));
+      return this;
+    }
+
+    public HoodieMetricsGraphiteConfig.Builder usePrefix(String prefix) {
+      hoodieMetricsGraphiteConfig.setValue(GRAPHITE_METRIC_PREFIX_VALUE, 
prefix);
+      return this;
+    }
+
+    public HoodieMetricsGraphiteConfig build() {
+      
hoodieMetricsGraphiteConfig.setDefaults(HoodieMetricsGraphiteConfig.class.getName());
+      return hoodieMetricsGraphiteConfig;
+    }
+  }
+}
diff --git 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsJmxConfig.java
 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsJmxConfig.java
new file mode 100644
index 0000000..e3a57a1
--- /dev/null
+++ 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsJmxConfig.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hudi.config.metrics;
+
+import org.apache.hudi.common.config.ConfigClassProperty;
+import org.apache.hudi.common.config.ConfigGroups;
+import org.apache.hudi.common.config.ConfigProperty;
+import org.apache.hudi.common.config.HoodieConfig;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Properties;
+
+import static org.apache.hudi.config.metrics.HoodieMetricsConfig.METRIC_PREFIX;
+
+/**
+ * Configs for Jmx reporter type.
+ * <p>
+ * {@link org.apache.hudi.metrics.MetricsReporterType#JMX}
+ */
+@ConfigClassProperty(name = "Metrics Configurations for Jmx",
+    groupName = ConfigGroups.Names.METRICS,
+    description = "Enables reporting on Hudi metrics using Jmx. "
+                      + " Hudi publishes metrics on every commit, clean, 
rollback etc.")
+public class HoodieMetricsJmxConfig extends HoodieConfig {
+
+  public static final String JMX_PREFIX = METRIC_PREFIX + ".jmx";
+
+  public static final ConfigProperty<String> JMX_HOST_NAME = ConfigProperty
+      .key(JMX_PREFIX + ".host")
+      .defaultValue("localhost")
+      .sinceVersion("0.5.1")
+      .withDocumentation("Jmx host to connect to");
+
+  public static final ConfigProperty<Integer> JMX_PORT_NUM = ConfigProperty
+      .key(JMX_PREFIX + ".port")
+      .defaultValue(9889)
+      .sinceVersion("0.5.1")
+      .withDocumentation("Jmx port to connect to");
+
+  /**
+   * @deprecated Use {@link #JMX_HOST_NAME} and its methods instead
+   */
+  @Deprecated
+  public static final String JMX_HOST = JMX_HOST_NAME.key();
+  /**
+   * @deprecated Use {@link #JMX_HOST_NAME} and its methods instead
+   */
+  @Deprecated
+  public static final String DEFAULT_JMX_HOST = JMX_HOST_NAME.defaultValue();
+  /**
+   * @deprecated Use {@link #JMX_PORT_NUM} and its methods instead
+   */
+  @Deprecated
+  public static final String JMX_PORT = JMX_PORT_NUM.key();
+  /**
+   * @deprecated Use {@link #JMX_PORT_NUM} and its methods instead
+   */
+  @Deprecated
+  public static final int DEFAULT_JMX_PORT = JMX_PORT_NUM.defaultValue();
+
+  private HoodieMetricsJmxConfig() {
+    super();
+  }
+
+  public static HoodieMetricsJmxConfig.Builder newBuilder() {
+    return new HoodieMetricsJmxConfig.Builder();
+  }
+
+  public static class Builder {
+
+    private final HoodieMetricsJmxConfig hoodieMetricsJmxConfig = new 
HoodieMetricsJmxConfig();
+
+    public HoodieMetricsJmxConfig.Builder fromFile(File propertiesFile) throws 
IOException {
+      try (FileReader reader = new FileReader(propertiesFile)) {
+        this.hoodieMetricsJmxConfig.getProps().load(reader);
+        return this;
+      }
+    }
+
+    public HoodieMetricsJmxConfig.Builder fromProperties(Properties props) {
+      this.hoodieMetricsJmxConfig.getProps().putAll(props);
+      return this;
+    }
+
+    public HoodieMetricsJmxConfig.Builder toJmxHost(String host) {
+      hoodieMetricsJmxConfig.setValue(JMX_HOST_NAME, host);
+      return this;
+    }
+
+    public HoodieMetricsJmxConfig.Builder onJmxPort(String port) {
+      hoodieMetricsJmxConfig.setValue(JMX_PORT_NUM, port);
+      return this;
+    }
+
+    public HoodieMetricsJmxConfig build() {
+      
hoodieMetricsJmxConfig.setDefaults(HoodieMetricsJmxConfig.class.getName());
+      return hoodieMetricsJmxConfig;
+    }
+  }
+}
diff --git 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieMetricsPrometheusConfig.java
 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsPrometheusConfig.java
similarity index 78%
rename from 
hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieMetricsPrometheusConfig.java
rename to 
hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsPrometheusConfig.java
index 9ec2ec6..c04e8aa 100644
--- 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieMetricsPrometheusConfig.java
+++ 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsPrometheusConfig.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
 
-package org.apache.hudi.config;
+package org.apache.hudi.config.metrics;
 
 import org.apache.hudi.common.config.ConfigClassProperty;
 import org.apache.hudi.common.config.ConfigGroups;
@@ -25,8 +25,14 @@ import org.apache.hudi.common.config.HoodieConfig;
 
 import java.util.Properties;
 
-import static org.apache.hudi.config.HoodieMetricsConfig.METRIC_PREFIX;
+import static org.apache.hudi.config.metrics.HoodieMetricsConfig.METRIC_PREFIX;
 
+/**
+ * Configs for Prometheus/Pushgaeway reporter type.
+ * <p>
+ * {@link org.apache.hudi.metrics.MetricsReporterType#PROMETHEUS}
+ * {@link org.apache.hudi.metrics.MetricsReporterType#PROMETHEUS_PUSHGATEWAY}
+ */
 @ConfigClassProperty(name = "Metrics Configurations for Prometheus",
     groupName = ConfigGroups.Names.METRICS,
     description = "Enables reporting on Hudi metrics using Prometheus. "
@@ -174,6 +180,41 @@ public class HoodieMetricsPrometheusConfig extends 
HoodieConfig {
       return this;
     }
 
+    public HoodieMetricsPrometheusConfig.Builder 
withPushgatewayHostName(String hostName) {
+      hoodieMetricsPrometheusConfig.setValue(PUSHGATEWAY_HOST_NAME, 
String.valueOf(hostName));
+      return this;
+    }
+
+    public HoodieMetricsPrometheusConfig.Builder 
withPushgatewayPortNum(Integer pushgatewayPortNum) {
+      hoodieMetricsPrometheusConfig.setValue(PUSHGATEWAY_PORT_NUM, 
String.valueOf(pushgatewayPortNum));
+      return this;
+    }
+
+    public HoodieMetricsPrometheusConfig.Builder 
withPushgatewayReportPeriodInSeconds(String periodTime) {
+      
hoodieMetricsPrometheusConfig.setValue(PUSHGATEWAY_REPORT_PERIOD_IN_SECONDS, 
periodTime);
+      return this;
+    }
+
+    public HoodieMetricsPrometheusConfig.Builder 
withPushgatewayDeleteOnShutdownEnable(boolean deleteOnShutdownEnable) {
+      
hoodieMetricsPrometheusConfig.setValue(PUSHGATEWAY_DELETE_ON_SHUTDOWN_ENABLE, 
String.valueOf(deleteOnShutdownEnable));
+      return this;
+    }
+
+    public HoodieMetricsPrometheusConfig.Builder withPushgatewayJobname(String 
jobname) {
+      hoodieMetricsPrometheusConfig.setValue(PUSHGATEWAY_JOBNAME, jobname);
+      return this;
+    }
+
+    public HoodieMetricsPrometheusConfig.Builder 
withPushgatewayRandomJobnameSuffix(boolean randomJobnameSuffix) {
+      
hoodieMetricsPrometheusConfig.setValue(PUSHGATEWAY_RANDOM_JOBNAME_SUFFIX, 
String.valueOf(randomJobnameSuffix));
+      return this;
+    }
+
+    public HoodieMetricsPrometheusConfig.Builder withPrometheusPortNum(int 
prometheusPortNum) {
+      hoodieMetricsPrometheusConfig.setValue(PROMETHEUS_PORT_NUM, 
String.valueOf(prometheusPortNum));
+      return this;
+    }
+
     public HoodieMetricsPrometheusConfig build() {
       
hoodieMetricsPrometheusConfig.setDefaults(HoodieMetricsPrometheusConfig.class.getName());
       return hoodieMetricsPrometheusConfig;
diff --git 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/metadata/HoodieBackedTableMetadataWriter.java
 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/metadata/HoodieBackedTableMetadataWriter.java
index ab5fa99..f797945 100644
--- 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/metadata/HoodieBackedTableMetadataWriter.java
+++ 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/metadata/HoodieBackedTableMetadataWriter.java
@@ -46,8 +46,10 @@ import org.apache.hudi.common.util.Option;
 import org.apache.hudi.common.util.ValidationUtils;
 import org.apache.hudi.common.util.collection.Pair;
 import org.apache.hudi.config.HoodieCompactionConfig;
-import org.apache.hudi.config.HoodieMetricsConfig;
+import org.apache.hudi.config.metrics.HoodieMetricsConfig;
 import org.apache.hudi.config.HoodieWriteConfig;
+import org.apache.hudi.config.metrics.HoodieMetricsGraphiteConfig;
+import org.apache.hudi.config.metrics.HoodieMetricsJmxConfig;
 import org.apache.hudi.exception.HoodieException;
 import org.apache.hudi.exception.HoodieIOException;
 import org.apache.hudi.exception.HoodieMetadataException;
@@ -175,19 +177,22 @@ public abstract class HoodieBackedTableMetadataWriter 
implements HoodieTableMeta
         .withFinalizeWriteParallelism(parallelism);
 
     if (writeConfig.isMetricsOn()) {
-      HoodieMetricsConfig.Builder metricsConfig = 
HoodieMetricsConfig.newBuilder()
+      builder.withMetricsConfig(HoodieMetricsConfig.newBuilder()
           .withReporterType(writeConfig.getMetricsReporterType().toString())
           .withExecutorMetrics(writeConfig.isExecutorMetricsEnabled())
-          .on(true);
+          .on(true).build());
       switch (writeConfig.getMetricsReporterType()) {
         case GRAPHITE:
-          metricsConfig.onGraphitePort(writeConfig.getGraphiteServerPort())
+          
builder.withMetricsGraphiteConfig(HoodieMetricsGraphiteConfig.newBuilder()
+              .onGraphitePort(writeConfig.getGraphiteServerPort())
               .toGraphiteHost(writeConfig.getGraphiteServerHost())
-              .usePrefix(writeConfig.getGraphiteMetricPrefix());
+              .usePrefix(writeConfig.getGraphiteMetricPrefix()).build());
           break;
         case JMX:
-          metricsConfig.onJmxPort(writeConfig.getJmxPort())
-              .toJmxHost(writeConfig.getJmxHost());
+          builder.withMetricsJmxConfig(HoodieMetricsJmxConfig.newBuilder()
+              .onJmxPort(writeConfig.getJmxPort())
+              .toJmxHost(writeConfig.getJmxHost())
+              .build());
           break;
         case DATADOG:
         case PROMETHEUS:
@@ -198,10 +203,7 @@ public abstract class HoodieBackedTableMetadataWriter 
implements HoodieTableMeta
         default:
           throw new HoodieMetadataException("Unsupported Metrics Reporter type 
" + writeConfig.getMetricsReporterType());
       }
-
-      builder.withMetricsConfig(metricsConfig.build());
     }
-
     return builder.build();
   }
 
diff --git 
a/hudi-client/hudi-client-common/src/test/java/org/apache/hudi/metrics/datadog/TestHoodieMetricsDatadogConfig.java
 
b/hudi-client/hudi-client-common/src/test/java/org/apache/hudi/metrics/datadog/TestHoodieMetricsDatadogConfig.java
index 016e070..aa486e9 100644
--- 
a/hudi-client/hudi-client-common/src/test/java/org/apache/hudi/metrics/datadog/TestHoodieMetricsDatadogConfig.java
+++ 
b/hudi-client/hudi-client-common/src/test/java/org/apache/hudi/metrics/datadog/TestHoodieMetricsDatadogConfig.java
@@ -19,7 +19,7 @@
 
 package org.apache.hudi.metrics.datadog;
 
-import org.apache.hudi.config.HoodieMetricsDatadogConfig;
+import org.apache.hudi.config.metrics.HoodieMetricsDatadogConfig;
 import org.apache.hudi.config.HoodieWriteConfig;
 
 import org.junit.jupiter.api.Test;
diff --git 
a/hudi-client/hudi-spark-client/src/test/java/org/apache/hudi/client/functional/TestHoodieBackedMetadata.java
 
b/hudi-client/hudi-spark-client/src/test/java/org/apache/hudi/client/functional/TestHoodieBackedMetadata.java
index bec7ee4..b091359 100644
--- 
a/hudi-client/hudi-spark-client/src/test/java/org/apache/hudi/client/functional/TestHoodieBackedMetadata.java
+++ 
b/hudi-client/hudi-spark-client/src/test/java/org/apache/hudi/client/functional/TestHoodieBackedMetadata.java
@@ -47,9 +47,10 @@ import org.apache.hudi.common.util.HoodieTimer;
 import org.apache.hudi.common.util.Option;
 import org.apache.hudi.config.HoodieCompactionConfig;
 import org.apache.hudi.config.HoodieIndexConfig;
-import org.apache.hudi.config.HoodieMetricsConfig;
+import org.apache.hudi.config.metrics.HoodieMetricsConfig;
 import org.apache.hudi.config.HoodieStorageConfig;
 import org.apache.hudi.config.HoodieWriteConfig;
+import org.apache.hudi.config.metrics.HoodieMetricsGraphiteConfig;
 import org.apache.hudi.exception.HoodieMetadataException;
 import org.apache.hudi.exception.TableNotFoundException;
 import org.apache.hudi.index.HoodieIndex;
@@ -1305,7 +1306,9 @@ public class TestHoodieBackedMetadata extends 
HoodieClientTestHarness {
             .enable(useFileListingMetadata)
             .enableMetrics(enableMetrics).build())
         .withMetricsConfig(HoodieMetricsConfig.newBuilder().on(enableMetrics)
-            .withExecutorMetrics(true).usePrefix("unit-test").build());
+            .withExecutorMetrics(true).build())
+        .withMetricsGraphiteConfig(HoodieMetricsGraphiteConfig.newBuilder()
+            .usePrefix("unit-test").build());
   }
 
   @Override

Reply via email to