This is an automated email from the ASF dual-hosted git repository.
codope 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 e05e758e55e [HUDI-8541] Change to relative paths for the index defs
json (#12309)
e05e758e55e is described below
commit e05e758e55edeeb046fa5c63136280f5a2602aaa
Author: Lokesh Jain <[email protected]>
AuthorDate: Fri Nov 22 14:20:12 2024 +0530
[HUDI-8541] Change to relative paths for the index defs json (#12309)
---
.../action/index/functional/BaseHoodieIndexClient.java | 6 ++++--
.../org/apache/hudi/common/table/HoodieTableConfig.java | 8 ++++----
.../apache/hudi/common/table/HoodieTableMetaClient.java | 15 ++++++++-------
.../hudi/common/table/TestHoodieTableMetaClient.java | 2 +-
.../main/java/org/apache/hudi/HoodieSparkIndexClient.java | 2 +-
.../spark/sql/hudi/command/index/TestSecondaryIndex.scala | 5 ++++-
6 files changed, 22 insertions(+), 16 deletions(-)
diff --git
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/action/index/functional/BaseHoodieIndexClient.java
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/action/index/functional/BaseHoodieIndexClient.java
index 0a3113ce6b8..786b36a823f 100644
---
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/action/index/functional/BaseHoodieIndexClient.java
+++
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/action/index/functional/BaseHoodieIndexClient.java
@@ -19,8 +19,10 @@
package org.apache.hudi.table.action.index.functional;
+import org.apache.hudi.common.fs.FSUtils;
import org.apache.hudi.common.table.HoodieTableConfig;
import org.apache.hudi.common.table.HoodieTableMetaClient;
+import org.apache.hudi.storage.StoragePath;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,8 +49,8 @@ public abstract class BaseHoodieIndexClient {
metaClient.buildIndexDefinition(indexName, indexType, columns, options);
// update table config if necessary
String indexMetaPath = metaClient.getIndexDefinitionPath();
- if
(!metaClient.getTableConfig().getProps().containsKey(HoodieTableConfig.INDEX_DEFINITION_PATH)
|| !metaClient.getTableConfig().getIndexDefinitionPath().isPresent()) {
-
metaClient.getTableConfig().setValue(HoodieTableConfig.INDEX_DEFINITION_PATH,
indexMetaPath);
+ if
(!metaClient.getTableConfig().getProps().containsKey(HoodieTableConfig.RELATIVE_INDEX_DEFINITION_PATH)
|| !metaClient.getTableConfig().getRelativeIndexDefinitionPath().isPresent()) {
+
metaClient.getTableConfig().setValue(HoodieTableConfig.RELATIVE_INDEX_DEFINITION_PATH,
FSUtils.getRelativePartitionPath(metaClient.getBasePath(), new
StoragePath(indexMetaPath)));
HoodieTableConfig.update(metaClient.getStorage(),
metaClient.getMetaPath(), metaClient.getTableConfig().getProps());
}
}
diff --git
a/hudi-common/src/main/java/org/apache/hudi/common/table/HoodieTableConfig.java
b/hudi-common/src/main/java/org/apache/hudi/common/table/HoodieTableConfig.java
index 9a0773eedd7..0f9749e9407 100644
---
a/hudi-common/src/main/java/org/apache/hudi/common/table/HoodieTableConfig.java
+++
b/hudi-common/src/main/java/org/apache/hudi/common/table/HoodieTableConfig.java
@@ -331,11 +331,11 @@ public class HoodieTableConfig extends HoodieConfig {
.sinceVersion("0.13.0")
.withDocumentation("The metadata of secondary indexes");
- public static final ConfigProperty<String> INDEX_DEFINITION_PATH =
ConfigProperty
+ public static final ConfigProperty<String> RELATIVE_INDEX_DEFINITION_PATH =
ConfigProperty
.key("hoodie.table.index.defs.path")
.noDefaultValue()
.sinceVersion("1.0.0")
- .withDocumentation("Absolute path where the index definitions are
stored");
+ .withDocumentation("Relative path to table base path where the index
definitions are stored");
private static final String TABLE_CHECKSUM_FORMAT = "%s.%s"; //
<database_name>.<table_name>
@@ -970,8 +970,8 @@ public class HoodieTableConfig extends HoodieConfig {
/**
* @returns the index definition path.
*/
- public Option<String> getIndexDefinitionPath() {
- return Option.ofNullable(getString(INDEX_DEFINITION_PATH));
+ public Option<String> getRelativeIndexDefinitionPath() {
+ return Option.ofNullable(getString(RELATIVE_INDEX_DEFINITION_PATH));
}
/**
diff --git
a/hudi-common/src/main/java/org/apache/hudi/common/table/HoodieTableMetaClient.java
b/hudi-common/src/main/java/org/apache/hudi/common/table/HoodieTableMetaClient.java
index 288005ea2b3..442d0d81be6 100644
---
a/hudi-common/src/main/java/org/apache/hudi/common/table/HoodieTableMetaClient.java
+++
b/hudi-common/src/main/java/org/apache/hudi/common/table/HoodieTableMetaClient.java
@@ -196,7 +196,8 @@ public class HoodieTableMetaClient implements Serializable {
}
public String getIndexDefinitionPath() {
- return tableConfig.getIndexDefinitionPath()
+ return tableConfig.getRelativeIndexDefinitionPath()
+ .map(definitionPath -> new StoragePath(basePath,
definitionPath).toString())
.orElseGet(() -> metaPath + StoragePath.SEPARATOR +
HoodieTableMetaClient.INDEX_DEFINITION_FOLDER_NAME
+ StoragePath.SEPARATOR +
HoodieTableMetaClient.INDEX_DEFINITION_FILE_NAME);
}
@@ -254,14 +255,14 @@ public class HoodieTableMetaClient implements
Serializable {
if (indexMetadataOpt.isPresent() &&
!indexMetadataOpt.get().getIndexDefinitions().isEmpty()) {
return indexMetadataOpt;
}
- if (tableConfig.getIndexDefinitionPath().isPresent() &&
StringUtils.nonEmpty(tableConfig.getIndexDefinitionPath().get())) {
+ if (tableConfig.getRelativeIndexDefinitionPath().isPresent() &&
StringUtils.nonEmpty(tableConfig.getRelativeIndexDefinitionPath().get())) {
StoragePath indexDefinitionPath =
- new StoragePath(tableConfig.getIndexDefinitionPath().get());
+ new StoragePath(basePath,
tableConfig.getRelativeIndexDefinitionPath().get());
try {
return Option.of(HoodieIndexMetadata.fromJson(
new String(FileIOUtils.readDataFromPath(storage,
indexDefinitionPath).get())));
} catch (IOException e) {
- throw new HoodieIOException("Could not load functional index metadata
at path: " + tableConfig.getIndexDefinitionPath().get(), e);
+ throw new HoodieIOException("Could not load functional index metadata
at path: " + tableConfig.getRelativeIndexDefinitionPath().get(), e);
}
}
return Option.empty();
@@ -1302,8 +1303,8 @@ public class HoodieTableMetaClient implements
Serializable {
if
(hoodieConfig.contains(HoodieTableConfig.MULTIPLE_BASE_FILE_FORMATS_ENABLE)) {
setMultipleBaseFileFormatsEnabled(hoodieConfig.getBoolean(HoodieTableConfig.MULTIPLE_BASE_FILE_FORMATS_ENABLE));
}
- if (hoodieConfig.contains(HoodieTableConfig.INDEX_DEFINITION_PATH)) {
-
setIndexDefinitionPath(hoodieConfig.getString(HoodieTableConfig.INDEX_DEFINITION_PATH));
+ if
(hoodieConfig.contains(HoodieTableConfig.RELATIVE_INDEX_DEFINITION_PATH)) {
+
setIndexDefinitionPath(hoodieConfig.getString(HoodieTableConfig.RELATIVE_INDEX_DEFINITION_PATH));
}
return this;
}
@@ -1420,7 +1421,7 @@ public class HoodieTableMetaClient implements
Serializable {
tableConfig.setValue(HoodieTableConfig.MULTIPLE_BASE_FILE_FORMATS_ENABLE,
Boolean.toString(multipleBaseFileFormatsEnabled));
}
if (null != indexDefinitionPath) {
- tableConfig.setValue(HoodieTableConfig.INDEX_DEFINITION_PATH,
indexDefinitionPath);
+ tableConfig.setValue(HoodieTableConfig.RELATIVE_INDEX_DEFINITION_PATH,
indexDefinitionPath);
}
return tableConfig.getProps();
}
diff --git
a/hudi-hadoop-common/src/test/java/org/apache/hudi/common/table/TestHoodieTableMetaClient.java
b/hudi-hadoop-common/src/test/java/org/apache/hudi/common/table/TestHoodieTableMetaClient.java
index db28066ebaa..171230a3dda 100644
---
a/hudi-hadoop-common/src/test/java/org/apache/hudi/common/table/TestHoodieTableMetaClient.java
+++
b/hudi-hadoop-common/src/test/java/org/apache/hudi/common/table/TestHoodieTableMetaClient.java
@@ -240,7 +240,7 @@ public class TestHoodieTableMetaClient extends
HoodieCommonTestHarness {
assertEquals(metaClient.getMetaPath() + "/.index_defs/index.json",
metaClient.getIndexDefinitionPath());
String randomDefinitionPath = "/a/b/c";
-
metaClient.getTableConfig().setValue(HoodieTableConfig.INDEX_DEFINITION_PATH.key(),
"/a/b/c");
+
metaClient.getTableConfig().setValue(HoodieTableConfig.RELATIVE_INDEX_DEFINITION_PATH.key(),
"/a/b/c");
assertEquals(randomDefinitionPath, metaClient.getIndexDefinitionPath());
}
}
diff --git
a/hudi-spark-datasource/hudi-spark-common/src/main/java/org/apache/hudi/HoodieSparkIndexClient.java
b/hudi-spark-datasource/hudi-spark-common/src/main/java/org/apache/hudi/HoodieSparkIndexClient.java
index 2637ce3d45d..c2eb464463d 100644
---
a/hudi-spark-datasource/hudi-spark-common/src/main/java/org/apache/hudi/HoodieSparkIndexClient.java
+++
b/hudi-spark-datasource/hudi-spark-common/src/main/java/org/apache/hudi/HoodieSparkIndexClient.java
@@ -94,7 +94,7 @@ public class HoodieSparkIndexClient extends
BaseHoodieIndexClient {
throw new HoodieMetadataIndexException("Not eligible for indexing: " +
indexType + ", indexName: " + userIndexName);
}
- if (!metaClient.getTableConfig().getIndexDefinitionPath().isPresent()
+ if
(!metaClient.getTableConfig().getRelativeIndexDefinitionPath().isPresent()
|| !metaClient.getIndexMetadata().isPresent()
||
!metaClient.getIndexMetadata().get().getIndexDefinitions().containsKey(fullIndexName))
{
LOG.info("Index definition is not present. Registering the index first");
diff --git
a/hudi-spark-datasource/hudi-spark/src/test/scala/org/apache/spark/sql/hudi/command/index/TestSecondaryIndex.scala
b/hudi-spark-datasource/hudi-spark/src/test/scala/org/apache/spark/sql/hudi/command/index/TestSecondaryIndex.scala
index d0ce0dd0e72..99c1a53a009 100644
---
a/hudi-spark-datasource/hudi-spark/src/test/scala/org/apache/spark/sql/hudi/command/index/TestSecondaryIndex.scala
+++
b/hudi-spark-datasource/hudi-spark/src/test/scala/org/apache/spark/sql/hudi/command/index/TestSecondaryIndex.scala
@@ -31,7 +31,7 @@ import
org.apache.hudi.metadata.HoodieMetadataPayload.SECONDARY_INDEX_RECORD_KEY
import org.apache.hudi.metadata.SecondaryIndexKeyUtils
import org.apache.spark.sql.SaveMode
import org.apache.spark.sql.hudi.common.HoodieSparkSqlTestBase
-import org.junit.jupiter.api.Assertions.assertTrue
+import org.junit.jupiter.api.Assertions.{assertFalse, assertTrue}
import java.util.concurrent.atomic.AtomicInteger
import scala.collection.JavaConverters._
@@ -130,7 +130,10 @@ class TestSecondaryIndex extends HoodieSparkSqlTestBase {
.setBasePath(basePath)
.setConf(HoodieTestUtils.getDefaultStorageConf)
.build()
+
assertFalse(metaClient.getTableConfig.getRelativeIndexDefinitionPath.get().contains(metaClient.getBasePath))
+
assertTrue(metaClient.getIndexDefinitionPath.contains(metaClient.getBasePath.toString))
val indexDefinition =
metaClient.getIndexMetadata.get().getIndexDefinitions.values().stream().findFirst().get()
+
metaClient.getTableConfig.setMetadataPartitionState(metaClient,
indexDefinition.getIndexName, false)
checkAnswer(s"drop index idx_price on $tableName")()
checkAnswer(s"show indexes from $tableName")(