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 3a8f12c318f9 [HUDI-9749] Pass correct base path key to metrics of sync
tool (#13764)
3a8f12c318f9 is described below
commit 3a8f12c318f9c003b7ed43d2cc53887c8038cfde
Author: Lin Liu <[email protected]>
AuthorDate: Tue Aug 26 10:43:42 2025 -0700
[HUDI-9749] Pass correct base path key to metrics of sync tool (#13764)
---
.../hudi/common/config/HoodieCommonConfig.java | 2 +
.../hudi/config/metrics/HoodieMetricsConfig.java | 10 ++++-
.../config/metrics/TestHoodieMetricsConfig.java | 48 ++++++++++++++++++++++
.../hudi/gcp/bigquery/TestBigQuerySyncTool.java | 3 +-
.../hudi/sync/datahub/TestDataHubSyncTool.java | 3 +-
.../apache/hudi/sync/common/HoodieSyncConfig.java | 3 +-
.../hudi/sync/common/TestHoodieSyncTool.java | 3 +-
7 files changed, 67 insertions(+), 5 deletions(-)
diff --git
a/hudi-common/src/main/java/org/apache/hudi/common/config/HoodieCommonConfig.java
b/hudi-common/src/main/java/org/apache/hudi/common/config/HoodieCommonConfig.java
index 7f9098bd7cf3..e488324af341 100644
---
a/hudi-common/src/main/java/org/apache/hudi/common/config/HoodieCommonConfig.java
+++
b/hudi-common/src/main/java/org/apache/hudi/common/config/HoodieCommonConfig.java
@@ -38,6 +38,8 @@ import static
org.apache.hudi.common.util.ConfigUtils.enumNames;
description = "The following set of configurations are common across
Hudi.")
public class HoodieCommonConfig extends HoodieConfig {
+ public static final String META_SYNC_BASE_PATH_KEY =
"hoodie.datasource.meta.sync.base.path";
+
public static final ConfigProperty<String> BASE_PATH = ConfigProperty
.key("hoodie.base.path")
.noDefaultValue()
diff --git
a/hudi-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsConfig.java
b/hudi-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsConfig.java
index d869070a39ca..7b9230218881 100644
---
a/hudi-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsConfig.java
+++
b/hudi-common/src/main/java/org/apache/hudi/config/metrics/HoodieMetricsConfig.java
@@ -41,6 +41,8 @@ import java.util.Properties;
import java.util.function.Supplier;
import java.util.stream.Collectors;
+import static
org.apache.hudi.common.config.HoodieCommonConfig.META_SYNC_BASE_PATH_KEY;
+
/**
* Fetch the configurations used by the Metrics system.
*/
@@ -168,7 +170,13 @@ public class HoodieMetricsConfig extends HoodieConfig {
* base properties.
*/
public String getBasePath() {
- return getString(HoodieCommonConfig.BASE_PATH);
+ // First search default base path key.
+ String basePathKey = getString(HoodieCommonConfig.BASE_PATH);
+ // This works when initialized in a meta-sync tool.
+ if (basePathKey == null) {
+ return getString(META_SYNC_BASE_PATH_KEY);
+ }
+ return basePathKey;
}
/**
diff --git
a/hudi-common/src/test/java/org/apache/hudi/config/metrics/TestHoodieMetricsConfig.java
b/hudi-common/src/test/java/org/apache/hudi/config/metrics/TestHoodieMetricsConfig.java
new file mode 100644
index 000000000000..f8cac40195f2
--- /dev/null
+++
b/hudi-common/src/test/java/org/apache/hudi/config/metrics/TestHoodieMetricsConfig.java
@@ -0,0 +1,48 @@
+/*
+ * 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.junit.jupiter.api.Test;
+
+import static
org.apache.hudi.common.config.HoodieCommonConfig.META_SYNC_BASE_PATH_KEY;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+class TestHoodieMetricsConfig {
+ @Test
+ void testReturnsBasePathWhenSetViaBuilder() {
+ HoodieMetricsConfig config = HoodieMetricsConfig.newBuilder()
+ .withPath("primary/base/path")
+ .build();
+ assertEquals("primary/base/path", config.getBasePath());
+ }
+
+ @Test
+ void testReturnsMetaSyncPathWhenBasePathIsNotSet() {
+ HoodieMetricsConfig config = HoodieMetricsConfig.newBuilder().build();
+ config.setValue(META_SYNC_BASE_PATH_KEY, "base/path/set/during/sync");
+ assertEquals("base/path/set/during/sync", config.getBasePath());
+ }
+
+ @Test
+ void testReturnsNullWhenNeitherBasePathNorMetaSyncIsSet() {
+ HoodieMetricsConfig config = HoodieMetricsConfig.newBuilder().build();
+ assertNull(config.getBasePath());
+ }
+}
diff --git
a/hudi-gcp/src/test/java/org/apache/hudi/gcp/bigquery/TestBigQuerySyncTool.java
b/hudi-gcp/src/test/java/org/apache/hudi/gcp/bigquery/TestBigQuerySyncTool.java
index 9fd7d2fb5b99..f7f442ac008a 100644
---
a/hudi-gcp/src/test/java/org/apache/hudi/gcp/bigquery/TestBigQuerySyncTool.java
+++
b/hudi-gcp/src/test/java/org/apache/hudi/gcp/bigquery/TestBigQuerySyncTool.java
@@ -44,6 +44,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Properties;
+import static
org.apache.hudi.common.config.HoodieCommonConfig.META_SYNC_BASE_PATH_KEY;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -188,7 +189,7 @@ public class TestBigQuerySyncTool extends
HoodieCommonTestHarness {
TypedProperties typedProperties = new TypedProperties();
String location = "us-central1";
typedProperties.setProperty("hoodie.gcp.bigquery.sync.dataset_location",
location);
- typedProperties.setProperty("hoodie.datasource.meta.sync.base.path",
metaClient.getBasePath().toString());
+ typedProperties.setProperty(META_SYNC_BASE_PATH_KEY,
metaClient.getBasePath().toString());
try (MockedStatic<BigQueryOptions> mockedStatic =
mockStatic(BigQueryOptions.class)) {
BigQueryOptions.Builder builder = mock(BigQueryOptions.Builder.class);
BigQueryOptions.Builder builderWithLocation =
mock(BigQueryOptions.Builder.class);
diff --git
a/hudi-sync/hudi-datahub-sync/src/test/java/org/apache/hudi/sync/datahub/TestDataHubSyncTool.java
b/hudi-sync/hudi-datahub-sync/src/test/java/org/apache/hudi/sync/datahub/TestDataHubSyncTool.java
index ca5d7564a058..a62a27cd114b 100644
---
a/hudi-sync/hudi-datahub-sync/src/test/java/org/apache/hudi/sync/datahub/TestDataHubSyncTool.java
+++
b/hudi-sync/hudi-datahub-sync/src/test/java/org/apache/hudi/sync/datahub/TestDataHubSyncTool.java
@@ -30,6 +30,7 @@ import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.junit.jupiter.api.Test;
+import static
org.apache.hudi.common.config.HoodieCommonConfig.META_SYNC_BASE_PATH_KEY;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
@@ -57,7 +58,7 @@ class TestDataHubSyncTool extends HoodieCommonTestHarness {
void validatePropsConstructor() throws Exception {
initMetaClient();
TypedProperties typedProperties = new TypedProperties();
- typedProperties.setProperty("hoodie.datasource.meta.sync.base.path",
metaClient.getBasePath().toString());
+ typedProperties.setProperty(META_SYNC_BASE_PATH_KEY,
metaClient.getBasePath().toString());
assertDoesNotThrow(() -> {
HoodieSyncTool syncTool = new DataHubSyncTool(typedProperties);
syncTool.close();
diff --git
a/hudi-sync/hudi-sync-common/src/main/java/org/apache/hudi/sync/common/HoodieSyncConfig.java
b/hudi-sync/hudi-sync-common/src/main/java/org/apache/hudi/sync/common/HoodieSyncConfig.java
index d5e7f3dfae97..7fd76ef52390 100644
---
a/hudi-sync/hudi-sync-common/src/main/java/org/apache/hudi/sync/common/HoodieSyncConfig.java
+++
b/hudi-sync/hudi-sync-common/src/main/java/org/apache/hudi/sync/common/HoodieSyncConfig.java
@@ -46,6 +46,7 @@ import java.util.Properties;
import java.util.stream.Collectors;
import static org.apache.hudi.common.config.HoodieCommonConfig.BASE_PATH;
+import static
org.apache.hudi.common.config.HoodieCommonConfig.META_SYNC_BASE_PATH_KEY;
import static
org.apache.hudi.common.config.HoodieMetadataConfig.DEFAULT_METADATA_ENABLE_FOR_READERS;
import static org.apache.hudi.common.table.HoodieTableConfig.BASE_FILE_FORMAT;
import static org.apache.hudi.common.table.HoodieTableConfig.DATABASE_NAME;
@@ -67,7 +68,7 @@ public class HoodieSyncConfig extends HoodieConfig {
private static final Logger LOG =
LoggerFactory.getLogger(HoodieSyncConfig.class);
public static final ConfigProperty<String> META_SYNC_BASE_PATH =
ConfigProperty
- .key("hoodie.datasource.meta.sync.base.path")
+ .key(META_SYNC_BASE_PATH_KEY)
.defaultValue("")
.markAdvanced()
.withDocumentation("Base path of the hoodie table to sync");
diff --git
a/hudi-sync/hudi-sync-common/src/test/java/org/apache/hudi/sync/common/TestHoodieSyncTool.java
b/hudi-sync/hudi-sync-common/src/test/java/org/apache/hudi/sync/common/TestHoodieSyncTool.java
index 93876312550d..692c9b65e92f 100644
---
a/hudi-sync/hudi-sync-common/src/test/java/org/apache/hudi/sync/common/TestHoodieSyncTool.java
+++
b/hudi-sync/hudi-sync-common/src/test/java/org/apache/hudi/sync/common/TestHoodieSyncTool.java
@@ -25,6 +25,7 @@ import
org.apache.hudi.common.testutils.HoodieCommonTestHarness;
import org.apache.hadoop.conf.Configuration;
import org.junit.jupiter.api.Test;
+import static
org.apache.hudi.common.config.HoodieCommonConfig.META_SYNC_BASE_PATH_KEY;
import static org.junit.jupiter.api.Assertions.assertEquals;
class TestHoodieSyncTool extends HoodieCommonTestHarness {
@@ -32,7 +33,7 @@ class TestHoodieSyncTool extends HoodieCommonTestHarness {
void testBuildMetaClient() throws Exception {
initMetaClient();
TypedProperties properties = new TypedProperties();
- properties.put("hoodie.datasource.meta.sync.base.path",
metaClient.getBasePath().toString());
+ properties.put(META_SYNC_BASE_PATH_KEY,
metaClient.getBasePath().toString());
HoodieSyncConfig syncConfig = new HoodieSyncConfig(properties, new
Configuration());
HoodieTableMetaClient actual = HoodieSyncTool.buildMetaClient(syncConfig);
assertEquals(actual.getBasePath(), metaClient.getBasePath());