diff --git a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/embedded/EmbeddedTimelineService.java b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/embedded/EmbeddedTimelineService.java index feda7d2b18591..9a2173d73deeb 100644 --- a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/embedded/EmbeddedTimelineService.java +++ b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/embedded/EmbeddedTimelineService.java @@ -139,6 +139,7 @@ public FileSystemViewStorageConfig getRemoteFileSystemViewConfig() { .withRemoteTimelineInitialRetryIntervalMs(writeConfig.getClientSpecifiedViewStorageConfig().getRemoteTimelineInitialRetryIntervalMs()) .withRemoteTimelineClientMaxRetryIntervalMs(writeConfig.getClientSpecifiedViewStorageConfig().getRemoteTimelineClientMaxRetryIntervalMs()) .withRemoteTimelineClientRetryExceptions(writeConfig.getClientSpecifiedViewStorageConfig().getRemoteTimelineClientRetryExceptions()) + .withRemoteFileSystemViewFirst(writeConfig.getClientSpecifiedViewStorageConfig().isRemoteViewFirst()) .build(); } diff --git a/hudi-common/src/main/java/org/apache/hudi/common/table/view/FileSystemViewManager.java b/hudi-common/src/main/java/org/apache/hudi/common/table/view/FileSystemViewManager.java index d729cc94d1024..e54362e5007fe 100644 --- a/hudi-common/src/main/java/org/apache/hudi/common/table/view/FileSystemViewManager.java +++ b/hudi-common/src/main/java/org/apache/hudi/common/table/view/FileSystemViewManager.java @@ -260,7 +260,6 @@ public static FileSystemViewManager createViewManager(final HoodieEngineContext return new FileSystemViewManager(context, config, (metaClient, viewConfig) -> createRemoteFileSystemView(conf, viewConfig, metaClient)); case REMOTE_FIRST: - LOG.info("Creating remote first table view"); return new FileSystemViewManager(context, config, (metaClient, viewConfig) -> { RemoteHoodieTableFileSystemView remoteFileSystemView = createRemoteFileSystemView(conf, viewConfig, metaClient); @@ -279,7 +278,13 @@ public static FileSystemViewManager createViewManager(final HoodieEngineContext throw new IllegalArgumentException("Secondary Storage type can only be in-memory or spillable. Was :" + viewConfig.getSecondaryStorageType()); } - return new PriorityBasedFileSystemView(remoteFileSystemView, secondaryView); + if (config.isRemoteViewFirst()) { + LOG.info("Creating remote table view first"); + return new PriorityBasedFileSystemView(remoteFileSystemView, secondaryView); + } else { + LOG.info("Creating secondary table view first"); + return new PriorityBasedFileSystemView(secondaryView, remoteFileSystemView); + } }); default: throw new IllegalArgumentException("Unknown file system view type :" + config.getStorageType()); diff --git a/hudi-common/src/main/java/org/apache/hudi/common/table/view/FileSystemViewStorageConfig.java b/hudi-common/src/main/java/org/apache/hudi/common/table/view/FileSystemViewStorageConfig.java index 038c1d569df3e..ed488c79bae28 100644 --- a/hudi-common/src/main/java/org/apache/hudi/common/table/view/FileSystemViewStorageConfig.java +++ b/hudi-common/src/main/java/org/apache/hudi/common/table/view/FileSystemViewStorageConfig.java @@ -173,6 +173,12 @@ public class FileSystemViewStorageConfig extends HoodieConfig { .withDocumentation("Config to control whether backup needs to be configured if clients were not able to reach" + " timeline service."); + public static final ConfigProperty REMOTE_VIEW_FIRST = ConfigProperty + .key("hoodie.filesystem.view.remote.first") + .defaultValue("true") + .markAdvanced() + .withDocumentation("Controls whether or not the file system view is remote first or secondary first."); + public static FileSystemViewStorageConfig.Builder newBuilder() { return new Builder(); } @@ -274,6 +280,10 @@ public String getRocksdbBasePath() { return getString(ROCKSDB_BASE_PATH); } + public boolean isRemoteViewFirst() { + return getBoolean(REMOTE_VIEW_FIRST); + } + /** * The builder used to build {@link FileSystemViewStorageConfig}. */ @@ -378,6 +388,11 @@ public Builder withEnableBackupForRemoteFileSystemView(boolean enable) { return this; } + public Builder withRemoteFileSystemViewFirst(boolean enable) { + fileSystemViewStorageConfig.setValue(REMOTE_VIEW_FIRST, Boolean.toString(enable)); + return this; + } + public FileSystemViewStorageConfig build() { fileSystemViewStorageConfig.setDefaults(FileSystemViewStorageConfig.class.getName()); // Validations