[HUDI 1308] Harden RFC-15 Implementation based on production testing (#2441)
Addresses leaks, perf degradation observed during testing. These were regressions from the original rfc-15 PoC implementation. * Pass a single instance of HoodieTableMetadata everywhere * Fix tests and add config for enabling metrics - Removed special casing of assumeDatePartitioning inside FSUtils#getAllPartitionPaths() - Consequently, IOException is never thrown and many files had to be adjusted - More diligent handling of open file handles in metadata table - Added config for controlling reuse of connections - Added config for turning off fallback to listing, so we can see tests fail - Changed all ipf listing code to cache/amortize the open/close for better performance - Timelineserver also reuses connections, for better performance - Without timelineserver, when metadata table is opened from executors, reuse is not allowed - HoodieMetadataConfig passed into HoodieTableMetadata#create as argument. - Fix TestHoodieBackedTableMetadata#testSync
This commit is contained in:
@@ -18,7 +18,9 @@
|
||||
|
||||
package org.apache.hudi.timeline.service;
|
||||
|
||||
import org.apache.hudi.common.config.HoodieMetadataConfig;
|
||||
import org.apache.hudi.common.config.SerializableConfiguration;
|
||||
import org.apache.hudi.common.engine.HoodieLocalEngineContext;
|
||||
import org.apache.hudi.common.fs.FSUtils;
|
||||
import org.apache.hudi.common.table.view.FileSystemViewManager;
|
||||
import org.apache.hudi.common.table.view.FileSystemViewStorageConfig;
|
||||
@@ -142,24 +144,28 @@ public class TimelineService {
|
||||
}
|
||||
|
||||
public static FileSystemViewManager buildFileSystemViewManager(Config config, SerializableConfiguration conf) {
|
||||
HoodieLocalEngineContext localEngineContext = new HoodieLocalEngineContext(conf.get());
|
||||
// Just use defaults for now
|
||||
HoodieMetadataConfig metadataConfig = HoodieMetadataConfig.newBuilder().build();
|
||||
|
||||
switch (config.viewStorageType) {
|
||||
case MEMORY:
|
||||
FileSystemViewStorageConfig.Builder inMemConfBuilder = FileSystemViewStorageConfig.newBuilder();
|
||||
inMemConfBuilder.withStorageType(FileSystemViewStorageType.MEMORY);
|
||||
return FileSystemViewManager.createViewManager(conf, inMemConfBuilder.build());
|
||||
return FileSystemViewManager.createViewManager(localEngineContext, metadataConfig, inMemConfBuilder.build());
|
||||
case SPILLABLE_DISK: {
|
||||
FileSystemViewStorageConfig.Builder spillableConfBuilder = FileSystemViewStorageConfig.newBuilder();
|
||||
spillableConfBuilder.withStorageType(FileSystemViewStorageType.SPILLABLE_DISK)
|
||||
.withBaseStoreDir(config.baseStorePathForFileGroups)
|
||||
.withMaxMemoryForView(config.maxViewMemPerTableInMB * 1024 * 1024L)
|
||||
.withMemFractionForPendingCompaction(config.memFractionForCompactionPerTable);
|
||||
return FileSystemViewManager.createViewManager(conf, spillableConfBuilder.build());
|
||||
return FileSystemViewManager.createViewManager(localEngineContext, metadataConfig, spillableConfBuilder.build());
|
||||
}
|
||||
case EMBEDDED_KV_STORE: {
|
||||
FileSystemViewStorageConfig.Builder rocksDBConfBuilder = FileSystemViewStorageConfig.newBuilder();
|
||||
rocksDBConfBuilder.withStorageType(FileSystemViewStorageType.EMBEDDED_KV_STORE)
|
||||
.withRocksDBPath(config.rocksDBPath);
|
||||
return FileSystemViewManager.createViewManager(conf, rocksDBConfBuilder.build());
|
||||
return FileSystemViewManager.createViewManager(localEngineContext, metadataConfig, rocksDBConfBuilder.build());
|
||||
}
|
||||
default:
|
||||
throw new IllegalArgumentException("Invalid view manager storage type :" + config.viewStorageType);
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
|
||||
package org.apache.hudi.timeline.service.functional;
|
||||
|
||||
import org.apache.hudi.common.config.SerializableConfiguration;
|
||||
import org.apache.hudi.common.config.HoodieMetadataConfig;
|
||||
import org.apache.hudi.common.engine.HoodieLocalEngineContext;
|
||||
import org.apache.hudi.common.table.timeline.HoodieTimeline;
|
||||
import org.apache.hudi.common.table.view.FileSystemViewManager;
|
||||
import org.apache.hudi.common.table.view.FileSystemViewStorageConfig;
|
||||
@@ -44,9 +45,12 @@ public class TestRemoteHoodieTableFileSystemView extends TestHoodieTableFileSyst
|
||||
protected SyncableFileSystemView getFileSystemView(HoodieTimeline timeline) {
|
||||
FileSystemViewStorageConfig sConf =
|
||||
FileSystemViewStorageConfig.newBuilder().withStorageType(FileSystemViewStorageType.SPILLABLE_DISK).build();
|
||||
HoodieMetadataConfig metadataConfig = HoodieMetadataConfig.newBuilder().build();
|
||||
HoodieLocalEngineContext localEngineContext = new HoodieLocalEngineContext(metaClient.getHadoopConf());
|
||||
|
||||
try {
|
||||
server = new TimelineService(0,
|
||||
FileSystemViewManager.createViewManager(new SerializableConfiguration(metaClient.getHadoopConf()), sConf));
|
||||
FileSystemViewManager.createViewManager(localEngineContext, metadataConfig, sConf));
|
||||
server.startService();
|
||||
} catch (Exception ex) {
|
||||
throw new RuntimeException(ex);
|
||||
|
||||
Reference in New Issue
Block a user