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 54724d5f37aba..753bc11842eaf 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 @@ -180,6 +180,11 @@ public class HoodieTableConfig extends HoodieConfig { public static final String NO_OP_BOOTSTRAP_INDEX_CLASS = NoOpBootstrapIndex.class.getName(); public HoodieTableConfig(FileSystem fs, String metaPath, String payloadClassName) { + this(fs, metaPath, payloadClassName, Option.empty()); + } + + public HoodieTableConfig(FileSystem fs, String metaPath, String payloadClassName, + Option bootstrapIndexClassName) { super(); Path propertyPath = new Path(metaPath, HOODIE_PROPERTIES_FILE); LOG.info("Loading table properties from " + propertyPath); @@ -193,6 +198,11 @@ public HoodieTableConfig(FileSystem fs, String metaPath, String payloadClassName props.store(outputStream, "Properties saved on " + new Date(System.currentTimeMillis())); } } + LOG.error("BOOTSTRAP_INDEX_CLASS_NAME: " + getString(BOOTSTRAP_INDEX_CLASS_NAME)); + if (contains(BOOTSTRAP_INDEX_CLASS_NAME) && bootstrapIndexClassName.isPresent() + && !getString(BOOTSTRAP_INDEX_CLASS_NAME).equals(bootstrapIndexClassName.get())) { + setValue(BOOTSTRAP_INDEX_CLASS_NAME, bootstrapIndexClassName.get()); + } } catch (IOException e) { throw new HoodieIOException("Could not load Hoodie properties from " + propertyPath, e); } 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 f44d28eca6351..3676650ad9d43 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 @@ -102,7 +102,7 @@ public class HoodieTableMetaClient implements Serializable { private HoodieTableMetaClient(Configuration conf, String basePath, boolean loadActiveTimelineOnLoad, ConsistencyGuardConfig consistencyGuardConfig, Option layoutVersion, - String payloadClassName) { + String payloadClassName, Option bootstrapIndexClassName) { LOG.info("Loading HoodieTableMetaClient from " + basePath); this.consistencyGuardConfig = consistencyGuardConfig; this.hadoopConf = new SerializableConfiguration(conf); @@ -112,7 +112,7 @@ private HoodieTableMetaClient(Configuration conf, String basePath, boolean loadA Path metaPathDir = new Path(this.metaPath); this.fs = getFs(); TableNotFoundException.checkTableValidity(fs, basePathDir, metaPathDir); - this.tableConfig = new HoodieTableConfig(fs, metaPath, payloadClassName); + this.tableConfig = new HoodieTableConfig(fs, metaPath, payloadClassName, bootstrapIndexClassName); this.tableType = tableConfig.getTableType(); Option tableConfigVersion = tableConfig.getTimelineLayoutVersion(); if (layoutVersion.isPresent() && tableConfigVersion.isPresent()) { @@ -576,6 +576,7 @@ public static class Builder { private String basePath; private boolean loadActiveTimelineOnLoad = false; private String payloadClassName = null; + private String bootstrapIndexClassName = null; private ConsistencyGuardConfig consistencyGuardConfig = ConsistencyGuardConfig.newBuilder().build(); private Option layoutVersion = Option.of(TimelineLayoutVersion.CURR_LAYOUT_VERSION); @@ -599,6 +600,11 @@ public Builder setPayloadClassName(String payloadClassName) { return this; } + public Builder setBootstrapIndexClassName(String bootstrapIndexClassName) { + this.bootstrapIndexClassName = bootstrapIndexClassName; + return this; + } + public Builder setConsistencyGuardConfig(ConsistencyGuardConfig consistencyGuardConfig) { this.consistencyGuardConfig = consistencyGuardConfig; return this; @@ -612,8 +618,8 @@ public Builder setLayoutVersion(Option layoutVersion) { public HoodieTableMetaClient build() { ValidationUtils.checkArgument(conf != null, "Configuration needs to be set to init HoodieTableMetaClient"); ValidationUtils.checkArgument(basePath != null, "basePath needs to be set to init HoodieTableMetaClient"); - return new HoodieTableMetaClient(conf, basePath, - loadActiveTimelineOnLoad, consistencyGuardConfig, layoutVersion, payloadClassName); + return new HoodieTableMetaClient(conf, basePath, loadActiveTimelineOnLoad, + consistencyGuardConfig, layoutVersion, payloadClassName, Option.ofNullable(bootstrapIndexClassName)); } }