From c4c90e3978bc9cf278f83b4377229f0dd6c74737 Mon Sep 17 00:00:00 2001 From: Y Ethan Guo Date: Wed, 27 Jul 2022 10:11:47 -0700 Subject: [PATCH 1/2] [HUDI-4469] Improve metadata table based file listing --- .../org/apache/hudi/metadata/HoodieMetadataFileSystemView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataFileSystemView.java b/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataFileSystemView.java index d3b569ceb623a..ab5b5f6b4db82 100644 --- a/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataFileSystemView.java +++ b/hudi-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataFileSystemView.java @@ -51,7 +51,7 @@ public HoodieMetadataFileSystemView(HoodieEngineContext engineContext, HoodieMetadataConfig metadataConfig) { super(metaClient, visibleActiveTimeline); this.tableMetadata = HoodieTableMetadata.create(engineContext, metadataConfig, metaClient.getBasePath(), - FileSystemViewStorageConfig.SPILLABLE_DIR.defaultValue()); + FileSystemViewStorageConfig.SPILLABLE_DIR.defaultValue(), true); } /** From 966c658b0e6e8dcfc329003452dc5000d7292799 Mon Sep 17 00:00:00 2001 From: Y Ethan Guo Date: Wed, 27 Jul 2022 11:48:21 -0700 Subject: [PATCH 2/2] Add tests for reusing metadata readers --- .../TestHoodieBackedTableMetadata.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/hudi-client/hudi-spark-client/src/test/java/org/apache/hudi/client/functional/TestHoodieBackedTableMetadata.java b/hudi-client/hudi-spark-client/src/test/java/org/apache/hudi/client/functional/TestHoodieBackedTableMetadata.java index e19c8fc1a2ee5..f029bbe33b2a3 100644 --- a/hudi-client/hudi-spark-client/src/test/java/org/apache/hudi/client/functional/TestHoodieBackedTableMetadata.java +++ b/hudi-client/hudi-spark-client/src/test/java/org/apache/hudi/client/functional/TestHoodieBackedTableMetadata.java @@ -18,12 +18,6 @@ package org.apache.hudi.client.functional; -import org.apache.avro.Schema; -import org.apache.avro.generic.GenericRecord; -import org.apache.avro.generic.IndexedRecord; -import org.apache.hadoop.fs.FileStatus; -import org.apache.hadoop.fs.Path; -import org.apache.hadoop.hbase.io.hfile.CacheConfig; import org.apache.hudi.avro.HoodieAvroUtils; import org.apache.hudi.avro.model.HoodieMetadataRecord; import org.apache.hudi.common.config.HoodieMetadataConfig; @@ -51,13 +45,20 @@ import org.apache.hudi.metadata.MetadataPartitionType; import org.apache.hudi.table.HoodieSparkTable; import org.apache.hudi.table.HoodieTable; + +import org.apache.avro.Schema; +import org.apache.avro.generic.GenericRecord; +import org.apache.avro.generic.IndexedRecord; +import org.apache.hadoop.fs.FileStatus; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.hbase.io.hfile.CacheConfig; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.apache.parquet.avro.AvroSchemaConverter; import org.apache.parquet.schema.MessageType; -import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; +import org.junit.jupiter.params.provider.ValueSource; import java.io.IOException; import java.util.ArrayList; @@ -81,23 +82,26 @@ public class TestHoodieBackedTableMetadata extends TestHoodieMetadataBase { private static final Logger LOG = LogManager.getLogger(TestHoodieBackedTableMetadata.class); - @Test - public void testTableOperations() throws Exception { + @ParameterizedTest + @ValueSource(booleans = {true, false}) + public void testTableOperations(boolean reuseReaders) throws Exception { HoodieTableType tableType = HoodieTableType.COPY_ON_WRITE; init(tableType); doWriteInsertAndUpsert(testTable); // trigger an upsert doWriteOperation(testTable, "0000003"); - verifyBaseMetadataTable(); + verifyBaseMetadataTable(reuseReaders); } private void doWriteInsertAndUpsert(HoodieTestTable testTable) throws Exception { doWriteInsertAndUpsert(testTable, "0000001", "0000002", false); } - private void verifyBaseMetadataTable() throws IOException { - HoodieBackedTableMetadata tableMetadata = new HoodieBackedTableMetadata(context, writeConfig.getMetadataConfig(), writeConfig.getBasePath(), writeConfig.getSpillableMapBasePath(), false); + private void verifyBaseMetadataTable(boolean reuseMetadataReaders) throws IOException { + HoodieBackedTableMetadata tableMetadata = new HoodieBackedTableMetadata( + context, writeConfig.getMetadataConfig(), writeConfig.getBasePath(), + writeConfig.getSpillableMapBasePath(), reuseMetadataReaders); assertTrue(tableMetadata.enabled()); List fsPartitionPaths = testTable.getAllPartitionPaths(); List fsPartitions = new ArrayList<>();