From 6d4ceb0123b03e913391ad4e8149ae181190f4a7 Mon Sep 17 00:00:00 2001 From: Junwang Zhao Date: Mon, 1 Dec 2025 16:45:15 +0800 Subject: [PATCH] chore: remove unnecessary manifest reader/writer test cases The manifest_writer_versions_test.cc and manifest_list_versions_test.cc should be adequate to cover the manifest module. Remove manifest_list_reader_writer_test.cc and manifest_reader_writer_test.cc along with their related .avro files, so we don't need to ship binary files anymore. --- dev/release/rat_exclude_files.txt | 2 - src/iceberg/test/CMakeLists.txt | 2 - .../test/manifest_list_reader_writer_test.cc | 391 ------------------ .../test/manifest_reader_writer_test.cc | 333 --------------- ...df1bc9-830b-4015-aced-c060df36f150-m0.avro | Bin 7207 -> 0 bytes ...357cd7-391f-4df8-aa24-e7e667da8870-m4.avro | Bin 7533 -> 0 bytes ...-ccb6dbcb-0611-48da-be68-bd506ea63188.avro | Bin 4598 -> 0 bytes ...-aeffe099-3bac-4011-bc17-5875210d8dc0.avro | Bin 3951 -> 0 bytes ...-2bccd69e-d642-4816-bba0-261cd9bd0d93.avro | Bin 4628 -> 0 bytes ...-5d690750-8fb4-4cd1-8ae7-85c7b39abe14.avro | Bin 4003 -> 0 bytes ...-eafd2972-f58e-4185-9237-6378f564787e.avro | Bin 3986 -> 0 bytes 11 files changed, 728 deletions(-) delete mode 100644 src/iceberg/test/manifest_list_reader_writer_test.cc delete mode 100644 src/iceberg/test/manifest_reader_writer_test.cc delete mode 100644 src/iceberg/test/resources/2ddf1bc9-830b-4015-aced-c060df36f150-m0.avro delete mode 100644 src/iceberg/test/resources/56357cd7-391f-4df8-aa24-e7e667da8870-m4.avro delete mode 100644 src/iceberg/test/resources/snap-251167482216575399-1-ccb6dbcb-0611-48da-be68-bd506ea63188.avro delete mode 100644 src/iceberg/test/resources/snap-4134160420377642835-1-aeffe099-3bac-4011-bc17-5875210d8dc0.avro delete mode 100644 src/iceberg/test/resources/snap-7412193043800610213-1-2bccd69e-d642-4816-bba0-261cd9bd0d93.avro delete mode 100644 src/iceberg/test/resources/snap-7522296285847100621-1-5d690750-8fb4-4cd1-8ae7-85c7b39abe14.avro delete mode 100644 src/iceberg/test/resources/snap-7532614258660258098-1-eafd2972-f58e-4185-9237-6378f564787e.avro diff --git a/dev/release/rat_exclude_files.txt b/dev/release/rat_exclude_files.txt index a20621cf1..b8a1c098e 100644 --- a/dev/release/rat_exclude_files.txt +++ b/dev/release/rat_exclude_files.txt @@ -23,7 +23,5 @@ dist/** .git/** requirements.txt test/resources/** -*.avro *.json -*.parquet src/iceberg/util/murmurhash3_internal.* diff --git a/src/iceberg/test/CMakeLists.txt b/src/iceberg/test/CMakeLists.txt index 21ccd4d66..af3dfa0fb 100644 --- a/src/iceberg/test/CMakeLists.txt +++ b/src/iceberg/test/CMakeLists.txt @@ -126,9 +126,7 @@ if(ICEBERG_BUILD_BUNDLE) avro_test.cc avro_schema_test.cc avro_stream_test.cc - manifest_list_reader_writer_test.cc manifest_list_versions_test.cc - manifest_reader_writer_test.cc manifest_writer_versions_test.cc test_common.cc) diff --git a/src/iceberg/test/manifest_list_reader_writer_test.cc b/src/iceberg/test/manifest_list_reader_writer_test.cc deleted file mode 100644 index ee6c7d9fe..000000000 --- a/src/iceberg/test/manifest_list_reader_writer_test.cc +++ /dev/null @@ -1,391 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#include -#include - -#include "iceberg/arrow/arrow_fs_file_io_internal.h" -#include "iceberg/avro/avro_register.h" -#include "iceberg/expression/literal.h" -#include "iceberg/manifest/manifest_list.h" -#include "iceberg/manifest/manifest_reader.h" -#include "iceberg/manifest/manifest_writer.h" -#include "iceberg/test/matchers.h" -#include "iceberg/test/temp_file_test_base.h" -#include "iceberg/test/test_common.h" - -namespace iceberg { - -class ManifestListReaderWriterTestBase : public TempFileTestBase { - protected: - static void SetUpTestSuite() { avro::RegisterAll(); } - - void SetUp() override { - TempFileTestBase::SetUp(); - local_fs_ = std::make_shared<::arrow::fs::LocalFileSystem>(); - file_io_ = std::make_shared(local_fs_); - } - - void TestManifestListReading(const std::string& resource_name, - const std::vector& expected_manifest_list) { - std::string path = GetResourcePath(resource_name); - TestManifestListReadingByPath(path, expected_manifest_list); - } - - void TestManifestListReadingByPath( - const std::string& path, const std::vector& expected_manifest_list) { - auto manifest_reader_result = ManifestListReader::Make(path, file_io_); - ASSERT_EQ(manifest_reader_result.has_value(), true); - - auto manifest_reader = std::move(manifest_reader_result.value()); - auto read_result = manifest_reader->Files(); - ASSERT_EQ(read_result.has_value(), true); - ASSERT_EQ(read_result.value().size(), expected_manifest_list.size()); - ASSERT_EQ(read_result.value(), expected_manifest_list); - } - - void TestNonPartitionedManifests(const std::vector& manifest_files) { - for (const auto& manifest : manifest_files) { - ASSERT_EQ(manifest.partition_spec_id, 0); - ASSERT_TRUE(manifest.partitions.empty()); - ASSERT_EQ(manifest.content, ManifestContent::kData); - } - } - - std::shared_ptr<::arrow::fs::LocalFileSystem> local_fs_; - std::shared_ptr file_io_; -}; - -class ManifestListReaderWriterV1Test : public ManifestListReaderWriterTestBase { - protected: - std::vector PreparePartitionedTestData() { - std::vector paths = { - "iceberg-warehouse/db/v1_partition_test/metadata/" - "eafd2972-f58e-4185-9237-6378f564787e-m1.avro", - "iceberg-warehouse/db/v1_partition_test/metadata/" - "eafd2972-f58e-4185-9237-6378f564787e-m0.avro"}; - std::vector file_size = {6185, 6113}; - std::vector snapshot_id = {7532614258660258098, 7532614258660258098}; - - return { - {.manifest_path = paths[0], - .manifest_length = file_size[0], - .partition_spec_id = 0, - .added_snapshot_id = snapshot_id[0], - .added_files_count = 4, - .existing_files_count = 0, - .deleted_files_count = 0, - .added_rows_count = 6, - .existing_rows_count = 0, - .deleted_rows_count = 0, - .partitions = {{.contains_null = false, - .contains_nan = false, - .lower_bound = Literal::String("2022-02-22").Serialize().value(), - .upper_bound = - Literal::String("2022-2-23").Serialize().value()}}}, - - {.manifest_path = paths[1], - .manifest_length = file_size[1], - .partition_spec_id = 0, - .added_snapshot_id = snapshot_id[1], - .added_files_count = 0, - .existing_files_count = 0, - .deleted_files_count = 2, - .added_rows_count = 0, - .existing_rows_count = 0, - .deleted_rows_count = 6, - .partitions = { - {.contains_null = false, - .contains_nan = false, - .lower_bound = Literal::String("2022-2-22").Serialize().value(), - .upper_bound = Literal::String("2022-2-23").Serialize().value()}}}}; - } - - std::vector PrepareComplexTypeTestData() { - std::vector paths = { - "iceberg-warehouse/db/v1_type_test/metadata/" - "aeffe099-3bac-4011-bc17-5875210d8dc0-m1.avro", - "iceberg-warehouse/db/v1_type_test/metadata/" - "aeffe099-3bac-4011-bc17-5875210d8dc0-m0.avro"}; - std::vector file_size = {6498, 6513}; - std::vector snapshot_id = {4134160420377642835, 4134160420377642835}; - - return {{.manifest_path = paths[0], - .manifest_length = file_size[0], - .partition_spec_id = 0, - .added_snapshot_id = snapshot_id[0], - .added_files_count = 1, - .existing_files_count = 0, - .deleted_files_count = 0, - .added_rows_count = 2, - .existing_rows_count = 0, - .deleted_rows_count = 0}, - - {.manifest_path = paths[1], - .manifest_length = file_size[1], - .partition_spec_id = 0, - .added_snapshot_id = snapshot_id[1], - .added_files_count = 0, - .existing_files_count = 0, - .deleted_files_count = 1, - .added_rows_count = 0, - .existing_rows_count = 0, - .deleted_rows_count = 3}}; - } - - std::vector PrepareComplexPartitionedTestData() { - std::vector paths = { - "iceberg-warehouse/db2/v1_complex_partition_test/metadata/" - "5d690750-8fb4-4cd1-8ae7-85c7b39abe14-m0.avro", - "iceberg-warehouse/db2/v1_complex_partition_test/metadata/" - "5d690750-8fb4-4cd1-8ae7-85c7b39abe14-m1.avro"}; - std::vector file_size = {6402, 6318}; - std::vector snapshot_id = {7522296285847100621, 7522296285847100621}; - - std::vector> lower_bounds = { - {0x32, 0x30, 0x32, 0x32, 0x2D, 0x32, 0x2D, 0x32, 0x32}, - {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x32, 0x30, 0x32, 0x32, 0x2D, 0x32, 0x2D, 0x32, 0x32}, - {0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; - - std::vector> upper_bounds = { - {0x32, 0x30, 0x32, 0x32, 0x2D, 0x32, 0x2D, 0x32, 0x34}, - {0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x32, 0x30, 0x32, 0x32, 0x2D, 0x32, 0x2D, 0x32, 0x33}, - {0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; - - return {{.manifest_path = paths[0], - .manifest_length = file_size[0], - .partition_spec_id = 0, - .added_snapshot_id = snapshot_id[0], - .added_files_count = 0, - .existing_files_count = 3, - .deleted_files_count = 1, - .added_rows_count = 0, - .existing_rows_count = 4, - .deleted_rows_count = 2, - .partitions = {{.contains_null = false, - .contains_nan = false, - .lower_bound = lower_bounds[0], - .upper_bound = upper_bounds[0]}, - {.contains_null = false, - .contains_nan = false, - .lower_bound = lower_bounds[1], - .upper_bound = upper_bounds[1]}}}, - - {.manifest_path = paths[1], - .manifest_length = file_size[1], - .partition_spec_id = 0, - .added_snapshot_id = snapshot_id[1], - .added_files_count = 0, - .existing_files_count = 1, - .deleted_files_count = 1, - .added_rows_count = 0, - .existing_rows_count = 1, - .deleted_rows_count = 1, - .partitions = {{.contains_null = false, - .contains_nan = false, - .lower_bound = lower_bounds[2], - .upper_bound = upper_bounds[2]}, - {.contains_null = false, - .contains_nan = false, - .lower_bound = lower_bounds[3], - .upper_bound = upper_bounds[3]}}}}; - } - - void TestWriteManifestList(const std::string& manifest_list_path, - const std::vector& manifest_files) { - auto result = ManifestListWriter::MakeV1Writer(1, 0, manifest_list_path, file_io_); - ASSERT_TRUE(result.has_value()) << result.error().message; - auto writer = std::move(result.value()); - auto status = writer->AddAll(manifest_files); - EXPECT_THAT(status, IsOk()); - status = writer->Close(); - EXPECT_THAT(status, IsOk()); - } -}; - -class ManifestListReaderWriterV2Test : public ManifestListReaderWriterTestBase { - protected: - std::vector PreparePartitionedTestData() { - std::vector manifest_files; - std::string test_dir_prefix = "/tmp/db/db/iceberg_test/metadata/"; - std::vector paths = {"2bccd69e-d642-4816-bba0-261cd9bd0d93-m0.avro", - "9b6ffacd-ef10-4abf-a89c-01c733696796-m0.avro", - "2541e6b5-4923-4bd5-886d-72c6f7228400-m0.avro", - "3118c801-d2e0-4df6-8c7a-7d4eaade32f8-m0.avro"}; - std::vector file_size = {7433, 7431, 7433, 7431}; - std::vector snapshot_id = {7412193043800610213, 5485972788975780755, - 1679468743751242972, 1579605567338877265}; - std::vector> bounds = {{'x', ';', 0x07, 0x00}, - {'(', 0x19, 0x07, 0x00}, - {0xd0, 0xd4, 0x06, 0x00}, - {0xb8, 0xd4, 0x06, 0x00}}; - for (int i = 0; i < 4; ++i) { - ManifestFile manifest_file; - manifest_file.manifest_path = test_dir_prefix + paths[i]; - manifest_file.manifest_length = file_size[i]; - manifest_file.partition_spec_id = 0; - manifest_file.content = ManifestContent::kData; - manifest_file.sequence_number = 4 - i; - manifest_file.min_sequence_number = 4 - i; - manifest_file.added_snapshot_id = snapshot_id[i]; - manifest_file.added_files_count = 1; - manifest_file.existing_files_count = 0; - manifest_file.deleted_files_count = 0; - manifest_file.added_rows_count = 1; - manifest_file.existing_rows_count = 0; - manifest_file.deleted_rows_count = 0; - PartitionFieldSummary partition; - partition.contains_null = false; - partition.contains_nan = false; - partition.lower_bound = bounds[i]; - partition.upper_bound = bounds[i]; - manifest_file.partitions.emplace_back(partition); - manifest_files.emplace_back(manifest_file); - } - return manifest_files; - } - - std::vector PrepareNonPartitionedTestData() { - std::vector manifest_files; - std::string test_dir_prefix = "/tmp/db/db/v2_non_partitioned_test/metadata/"; - - std::vector paths = {"ccb6dbcb-0611-48da-be68-bd506ea63188-m0.avro", - "b89a10c9-a7a8-4526-99c5-5587a4ea7527-m0.avro", - "a74d20fa-c800-4706-9ddb-66be15a5ecb0-m0.avro", - "ae7d5fce-7245-4335-9b57-bc598c595c84-m0.avro"}; - - std::vector file_size = {7169, 7170, 7169, 7170}; - - std::vector snapshot_id = {251167482216575399, 4248697313956014690, - 281757490425433194, 5521202581490753283}; - - for (int i = 0; i < 4; ++i) { - ManifestFile manifest_file; - manifest_file.manifest_path = test_dir_prefix + paths[i]; - manifest_file.manifest_length = file_size[i]; - manifest_file.partition_spec_id = 0; - manifest_file.content = ManifestContent::kData; - manifest_file.sequence_number = 4 - i; - manifest_file.min_sequence_number = 4 - i; - manifest_file.added_snapshot_id = snapshot_id[i]; - manifest_file.added_files_count = 1; - manifest_file.existing_files_count = 0; - manifest_file.deleted_files_count = 0; - manifest_file.added_rows_count = 1; - manifest_file.existing_rows_count = 0; - manifest_file.deleted_rows_count = 0; - // Note: no partitions for non-partitioned test - manifest_files.emplace_back(manifest_file); - } - return manifest_files; - } - - void TestWriteManifestList(const std::string& manifest_list_path, - const std::vector& manifest_files) { - auto result = ManifestListWriter::MakeV2Writer(1, 0, 4, manifest_list_path, file_io_); - ASSERT_TRUE(result.has_value()) << result.error().message; - auto writer = std::move(result.value()); - auto status = writer->AddAll(manifest_files); - EXPECT_THAT(status, IsOk()); - status = writer->Close(); - EXPECT_THAT(status, IsOk()); - } -}; - -// V1 Tests -TEST_F(ManifestListReaderWriterV1Test, PartitionedTest) { - auto expected_manifest_list = PreparePartitionedTestData(); - TestManifestListReading( - "snap-7532614258660258098-1-eafd2972-f58e-4185-9237-6378f564787e.avro", - expected_manifest_list); -} - -TEST_F(ManifestListReaderWriterV1Test, ComplexTypeTest) { - auto expected_manifest_list = PrepareComplexTypeTestData(); - TestManifestListReading( - "snap-4134160420377642835-1-aeffe099-3bac-4011-bc17-5875210d8dc0.avro", - expected_manifest_list); -} - -TEST_F(ManifestListReaderWriterV1Test, ComplexPartitionedTest) { - auto expected_manifest_list = PrepareComplexPartitionedTestData(); - TestManifestListReading( - "snap-7522296285847100621-1-5d690750-8fb4-4cd1-8ae7-85c7b39abe14.avro", - expected_manifest_list); -} - -TEST_F(ManifestListReaderWriterV1Test, WritePartitionedTest) { - auto expected_manifest_list = PreparePartitionedTestData(); - auto write_manifest_list_path = CreateNewTempFilePath(); - TestWriteManifestList(write_manifest_list_path, expected_manifest_list); - TestManifestListReadingByPath(write_manifest_list_path, expected_manifest_list); -} - -TEST_F(ManifestListReaderWriterV1Test, WriteComplexTypeTest) { - auto expected_manifest_list = PrepareComplexTypeTestData(); - auto write_manifest_list_path = CreateNewTempFilePath(); - TestWriteManifestList(write_manifest_list_path, expected_manifest_list); - TestManifestListReadingByPath(write_manifest_list_path, expected_manifest_list); -} - -TEST_F(ManifestListReaderWriterV1Test, WriteComplexPartitionedTest) { - auto expected_manifest_list = PrepareComplexPartitionedTestData(); - auto write_manifest_list_path = CreateNewTempFilePath(); - TestWriteManifestList(write_manifest_list_path, expected_manifest_list); - TestManifestListReadingByPath(write_manifest_list_path, expected_manifest_list); -} - -// V2 Tests -TEST_F(ManifestListReaderWriterV2Test, PartitionedTest) { - auto expected_manifest_list = PreparePartitionedTestData(); - TestManifestListReading( - "snap-7412193043800610213-1-2bccd69e-d642-4816-bba0-261cd9bd0d93.avro", - expected_manifest_list); -} - -TEST_F(ManifestListReaderWriterV2Test, NonPartitionedTest) { - auto expected_manifest_list = PrepareNonPartitionedTestData(); - TestManifestListReading( - "snap-251167482216575399-1-ccb6dbcb-0611-48da-be68-bd506ea63188.avro", - expected_manifest_list); - - // Additional verification: ensure all manifests are truly non-partitioned - TestNonPartitionedManifests(expected_manifest_list); -} - -TEST_F(ManifestListReaderWriterV2Test, WritePartitionedTest) { - auto expected_manifest_list = PreparePartitionedTestData(); - auto write_manifest_list_path = CreateNewTempFilePath(); - TestWriteManifestList(write_manifest_list_path, expected_manifest_list); - TestManifestListReadingByPath(write_manifest_list_path, expected_manifest_list); -} - -TEST_F(ManifestListReaderWriterV2Test, WriteNonPartitionedTest) { - auto expected_manifest_list = PrepareNonPartitionedTestData(); - auto write_manifest_list_path = CreateNewTempFilePath(); - TestWriteManifestList(write_manifest_list_path, expected_manifest_list); - TestManifestListReadingByPath(write_manifest_list_path, expected_manifest_list); - - // Additional verification: ensure all manifests are truly non-partitioned - TestNonPartitionedManifests(expected_manifest_list); -} - -} // namespace iceberg diff --git a/src/iceberg/test/manifest_reader_writer_test.cc b/src/iceberg/test/manifest_reader_writer_test.cc deleted file mode 100644 index b3daaf94e..000000000 --- a/src/iceberg/test/manifest_reader_writer_test.cc +++ /dev/null @@ -1,333 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#include - -#include -#include - -#include "iceberg/arrow/arrow_fs_file_io_internal.h" -#include "iceberg/avro/avro_register.h" -#include "iceberg/manifest/manifest_entry.h" -#include "iceberg/manifest/manifest_list.h" -#include "iceberg/manifest/manifest_reader.h" -#include "iceberg/manifest/manifest_writer.h" -#include "iceberg/partition_spec.h" -#include "iceberg/schema.h" -#include "iceberg/test/matchers.h" -#include "iceberg/test/temp_file_test_base.h" -#include "iceberg/test/test_common.h" -#include "iceberg/transform.h" -#include "iceberg/type.h" - -namespace iceberg { - -class ManifestReaderWriterTestBase : public TempFileTestBase { - protected: - static void SetUpTestSuite() { avro::RegisterAll(); } - - void SetUp() override { - TempFileTestBase::SetUp(); - local_fs_ = std::make_shared<::arrow::fs::LocalFileSystem>(); - file_io_ = std::make_shared(local_fs_); - } - - void TestManifestReading(const std::string& resource_name, - const std::vector& expected_entries, - std::shared_ptr partition_schema = nullptr, - std::optional snapshot_id = std::nullopt) { - std::string path = GetResourcePath(resource_name); - TestManifestReadingByPath(path, expected_entries, partition_schema, snapshot_id); - } - - void TestManifestReadingByPath(const std::string& path, - const std::vector& expected_entries, - std::shared_ptr partition_schema = nullptr, - std::optional snapshot_id = std::nullopt) { - auto manifest_reader_result = ManifestReader::Make(path, file_io_, partition_schema); - ASSERT_TRUE(manifest_reader_result.has_value()) - << manifest_reader_result.error().message; - - auto manifest_reader = std::move(manifest_reader_result.value()); - auto read_result = manifest_reader->Entries(); - ASSERT_TRUE(read_result.has_value()) << read_result.error().message; - ASSERT_EQ(read_result.value().size(), expected_entries.size()); - ASSERT_EQ(read_result.value(), expected_entries); - } - - void TestManifestReadingWithManifestFile( - const ManifestFile& manifest_file, - const std::vector& expected_entries, - std::shared_ptr partition_schema = nullptr) { - auto manifest_reader_result = - ManifestReader::Make(manifest_file, file_io_, partition_schema); - ASSERT_TRUE(manifest_reader_result.has_value()) - << manifest_reader_result.error().message; - - auto manifest_reader = std::move(manifest_reader_result.value()); - auto read_result = manifest_reader->Entries(); - ASSERT_TRUE(read_result.has_value()) << read_result.error().message; - ASSERT_EQ(read_result.value().size(), expected_entries.size()); - ASSERT_EQ(read_result.value(), expected_entries); - } - - std::shared_ptr<::arrow::fs::LocalFileSystem> local_fs_; - std::shared_ptr file_io_; -}; - -class ManifestV1Test : public ManifestReaderWriterTestBase { - protected: - std::vector PreparePartitionedTestData() { - std::vector manifest_entries; - std::string test_dir_prefix = "/tmp/db/db/iceberg_test/data/"; - std::vector paths = { - "order_ts_hour=2021-01-27-00/" - "00000-2-d5ae78b7-4449-45ec-adb7-c0e9c0bdb714-0-00001.parquet", - "order_ts_hour=2024-01-27-00/" - "00000-2-d5ae78b7-4449-45ec-adb7-c0e9c0bdb714-0-00002.parquet", - "order_ts_hour=2023-01-26-00/" - "00000-2-d5ae78b7-4449-45ec-adb7-c0e9c0bdb714-0-00003.parquet", - "order_ts_hour=2021-01-26-00/" - "00000-2-d5ae78b7-4449-45ec-adb7-c0e9c0bdb714-0-00004.parquet"}; - std::vector partitions = {447696, 473976, 465192, 447672}; - - // Note: The precision and scale for decimal literals are chosen arbitrarily here, - // since the lower and upper bounds for decimal values are stored as unscaled int128_t - // values in manifest files. - std::vector>> bounds = { - {{1, Literal::Long(1234).Serialize().value()}, - {2, Literal::Long(5678).Serialize().value()}, - {3, Literal::Decimal(4834, 10, 2).Serialize().value()}, - {4, Literal::Timestamp(1611706223000000LL).Serialize().value()}}, - - {{1, Literal::Long(1234).Serialize().value()}, - {2, Literal::Long(5678).Serialize().value()}, - {3, Literal::Decimal(4835, 10, 2).Serialize().value()}, - {4, Literal::Timestamp(1706314223000000LL).Serialize().value()}}, - - {{1, Literal::Long(123).Serialize().value()}, - {2, Literal::Long(456).Serialize().value()}, - {3, Literal::Decimal(3618, 10, 2).Serialize().value()}, - {4, Literal::Timestamp(1674691823000000LL).Serialize().value()}}, - - {{1, Literal::Long(123).Serialize().value()}, - {2, Literal::Long(456).Serialize().value()}, - {3, Literal::Decimal(3617, 10, 2).Serialize().value()}, - {4, Literal::Timestamp(1611619823000000LL).Serialize().value()}}, - }; - - for (int i = 0; i < 4; ++i) { - ManifestEntry entry; - entry.status = ManifestStatus::kAdded; - entry.snapshot_id = 6387266376565973956; - entry.data_file = std::make_shared(); - entry.data_file->file_path = test_dir_prefix + paths[i]; - entry.data_file->file_format = FileFormatType::kParquet; - entry.data_file->partition.AddValue(Literal::Int(partitions[i])); - entry.data_file->record_count = 1; - entry.data_file->file_size_in_bytes = 1375; - entry.data_file->column_sizes = {{1, 49}, {2, 49}, {3, 49}, {4, 49}}; - entry.data_file->value_counts = {{1, 1}, {2, 1}, {3, 1}, {4, 1}}; - entry.data_file->null_value_counts = {{1, 0}, {2, 0}, {3, 0}, {4, 0}}; - entry.data_file->split_offsets = {4}; - entry.data_file->sort_order_id = 0; - entry.data_file->upper_bounds = bounds[i]; - entry.data_file->lower_bounds = bounds[i]; - manifest_entries.emplace_back(entry); - } - return manifest_entries; - } - - void TestWriteManifest(int64_t snapshot_id, const std::string& manifest_list_path, - std::shared_ptr partition_spec, - const std::vector& manifest_entries, - std::shared_ptr table_schema) { - auto result = - ManifestWriter::MakeV1Writer(snapshot_id, manifest_list_path, file_io_, - std::move(partition_spec), std::move(table_schema)); - ASSERT_TRUE(result.has_value()) << result.error().message; - auto writer = std::move(result.value()); - auto status = writer->AddAll(manifest_entries); - EXPECT_THAT(status, IsOk()); - status = writer->Close(); - EXPECT_THAT(status, IsOk()); - } -}; - -TEST_F(ManifestV1Test, ReadPartitionedTest) { - // TODO(xiao.dong) we need to add more cases for different partition types - SchemaField partition_field(1000, "order_ts_hour", int32(), true); - auto partition_schema = - std::make_shared(std::vector({partition_field})); - auto expected_entries = PreparePartitionedTestData(); - TestManifestReading("56357cd7-391f-4df8-aa24-e7e667da8870-m4.avro", expected_entries, - partition_schema); -} - -TEST_F(ManifestV1Test, WritePartitionedTest) { - SchemaField table_field(1, "order_ts_hour_source", int32(), true); - SchemaField partition_field(1000, "order_ts_hour", int32(), true); - auto table_schema = std::make_shared(std::vector({table_field})); - auto partition_schema = - std::make_shared(std::vector({partition_field})); - auto identity_transform = Transform::Identity(); - std::vector fields{ - PartitionField(1, 1000, "order_ts_hour", identity_transform)}; - ICEBERG_UNWRAP_OR_FAIL(std::shared_ptr partition_spec, - PartitionSpec::Make(*table_schema, 1, fields, false)); - - auto expected_entries = PreparePartitionedTestData(); - auto write_manifest_path = CreateNewTempFilePath(); - TestWriteManifest(1, write_manifest_path, partition_spec, expected_entries, - table_schema); - TestManifestReadingByPath(write_manifest_path, expected_entries, partition_schema, 1); -} - -class ManifestV2Test : public ManifestReaderWriterTestBase { - protected: - std::vector CreateV2TestData( - std::optional sequence_number = std::nullopt, - std::optional partition_spec_id = std::nullopt) { - std::vector manifest_entries; - std::string test_dir_prefix = "/tmp/db/db/v2_manifest_non_partitioned/data/"; - - std::vector paths = { - "00000-0-b0f98903-6d21-45fd-9e0b-afbd4963e365-0-00001.parquet"}; - - std::vector file_sizes = {1344}; - std::vector record_counts = {4}; - - std::vector>> lower_bounds = { - {{1, Literal::Long(1).Serialize().value()}, - {2, Literal::String("record_four").Serialize().value()}, - {3, Literal::String("data_content_1").Serialize().value()}, - {4, Literal::Double(123.45).Serialize().value()}}}; - - std::vector>> upper_bounds = { - {{1, Literal::Long(4).Serialize().value()}, - {2, Literal::String("record_two").Serialize().value()}, - {3, Literal::String("data_content_4").Serialize().value()}, - {4, Literal::Double(456.78).Serialize().value()}}}; - - DataFile data_file{.file_path = test_dir_prefix + paths[0], - .file_format = FileFormatType::kParquet, - .record_count = record_counts[0], - .file_size_in_bytes = file_sizes[0], - .column_sizes = {{1, 56}, {2, 73}, {3, 66}, {4, 67}}, - .value_counts = {{1, 4}, {2, 4}, {3, 4}, {4, 4}}, - .null_value_counts = {{1, 0}, {2, 0}, {3, 0}, {4, 0}}, - .nan_value_counts = {{4, 0}}, - .lower_bounds = lower_bounds[0], - .upper_bounds = upper_bounds[0], - .key_metadata = {}, - .split_offsets = {4}, - .equality_ids = {}, - .sort_order_id = 0, - .first_row_id = std::nullopt, - .referenced_data_file = std::nullopt, - .content_offset = std::nullopt, - .content_size_in_bytes = std::nullopt}; - - if (partition_spec_id.has_value()) { - data_file.partition_spec_id = partition_spec_id.value(); - } - - manifest_entries.emplace_back( - ManifestEntry{.status = ManifestStatus::kAdded, - .snapshot_id = 679879563479918846LL, - .sequence_number = sequence_number, - .file_sequence_number = sequence_number, - .data_file = std::make_shared(data_file)}); - return manifest_entries; - } - - std::vector PrepareNonPartitionedTestData() { - return CreateV2TestData(); - } - - std::vector PrepareMetadataInheritanceTestData() { - return CreateV2TestData(/*sequence_number=*/15, /*partition_spec_id*/ 12); - } - - void TestWriteManifest(int64_t snapshot_id, const std::string& manifest_list_path, - std::shared_ptr partition_spec, - const std::vector& manifest_entries, - std::shared_ptr table_schema) { - auto result = ManifestWriter::MakeV2Writer( - snapshot_id, manifest_list_path, file_io_, std::move(partition_spec), - std::move(table_schema), ManifestContent::kData); - ASSERT_TRUE(result.has_value()) << result.error().message; - auto writer = std::move(result.value()); - auto status = writer->AddAll(manifest_entries); - EXPECT_THAT(status, IsOk()); - status = writer->Close(); - EXPECT_THAT(status, IsOk()); - } -}; - -TEST_F(ManifestV2Test, ReadNonPartitionedTest) { - auto expected_entries = PrepareNonPartitionedTestData(); - TestManifestReading("2ddf1bc9-830b-4015-aced-c060df36f150-m0.avro", expected_entries); -} - -TEST_F(ManifestV2Test, ReadMetadataInheritanceTest) { - std::string path = GetResourcePath("2ddf1bc9-830b-4015-aced-c060df36f150-m0.avro"); - ManifestFile manifest_file{ - .manifest_path = path, - .manifest_length = 100, - .partition_spec_id = 12, - .content = ManifestContent::kData, - .sequence_number = 15, - .added_snapshot_id = 679879563479918846LL, - }; - auto expected_entries = PrepareMetadataInheritanceTestData(); - TestManifestReadingWithManifestFile(manifest_file, expected_entries); -} - -TEST_F(ManifestV2Test, WriteNonPartitionedTest) { - SchemaField table_field(1, "order_ts_hour_source", int32(), true); - SchemaField partition_field(1000, "order_ts_hour", int32(), true); - auto table_schema = std::make_shared(std::vector({table_field})); - auto expected_entries = PrepareNonPartitionedTestData(); - auto write_manifest_path = CreateNewTempFilePath(); - TestWriteManifest(679879563479918846LL, write_manifest_path, - PartitionSpec::Unpartitioned(), expected_entries, table_schema); - TestManifestReadingByPath(write_manifest_path, expected_entries); -} - -TEST_F(ManifestV2Test, WriteInheritancePartitionedTest) { - SchemaField table_field(1, "order_ts_hour_source", int32(), true); - SchemaField partition_field(1000, "order_ts_hour", int32(), true); - auto table_schema = std::make_shared(std::vector({table_field})); - auto expected_entries = PrepareMetadataInheritanceTestData(); - auto write_manifest_path = CreateNewTempFilePath(); - TestWriteManifest(679879563479918846LL, write_manifest_path, - PartitionSpec::Unpartitioned(), expected_entries, table_schema); - ManifestFile manifest_file{ - .manifest_path = write_manifest_path, - .manifest_length = 100, - .partition_spec_id = 12, - .content = ManifestContent::kData, - .sequence_number = 15, - .added_snapshot_id = 679879563479918846LL, - }; - TestManifestReadingWithManifestFile(manifest_file, expected_entries); -} - -} // namespace iceberg diff --git a/src/iceberg/test/resources/2ddf1bc9-830b-4015-aced-c060df36f150-m0.avro b/src/iceberg/test/resources/2ddf1bc9-830b-4015-aced-c060df36f150-m0.avro deleted file mode 100644 index f8e6c1c413118be941de06f4a6f72e9bf886380f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7207 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 diff --git a/src/iceberg/test/resources/snap-251167482216575399-1-ccb6dbcb-0611-48da-be68-bd506ea63188.avro b/src/iceberg/test/resources/snap-251167482216575399-1-ccb6dbcb-0611-48da-be68-bd506ea63188.avro deleted file mode 100644 index d8621c6b319830709dd19ef823311b8c82f6d86e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4598 zcmbVPe~1)S98Xg-EdLO>M67#_q6Bv}v$wl7KfP-ijb5^2XR4)a)eQ)nbldnnb~>o&F;?LZh!9Vo6qO_ zKHp!TS)N%tW^xl;ZyNVoat`I;rRI$SE*6lG6ig%=rXsWmI?Ox2^H5i_$inHYsv+_? zt0GOYgygD?6(jk8(80wptEvde zm?-wPRAOsL@8Z!lgTr27V5k8nKwzoQAfW0XQ^d&f!z}?z9B=`eSasq_TLmPi2{R2` z)iI4aMg9a!76RKs3cv>FF;!e1Z-j%D4ILx*{gMhi*aGiQ3m92|a|rm-CV@Clff%*` zX`X^KR1vw<&QVyX+eW&K(z>0`Ad|%%kR(+)1-w(BCx`R^Dd>R~fQo{go4ZN%RFYyG zS6(Ih)Wx^V=pjV{{KGyi$pnAXGO9R7<%W{BbXc%*1`Z@7c(Kw6Co4Dyv3G|WEMi*) zi&H69S~l#kOg-%A0!SjwBJhuK8i`R35^Yc|Oe)=NkeaBSrIR&)dGWncP)5gH=+;cF zcq@fAjh>2F13G&WILE3fAn`>{6&MwiDiDgxC(9RLR9IhtP*gr&wDX>R7dm(+!RK5(8Y$GPa4IMZZ4C=aC#K+_ z=-@)oNc)@V4CyE~NPSfWZx&Pj$NkX@+_!-H7RVYVfaKb4Z#n{n6Y~qgE)@O;vHMoz z#8U6--WGv$Tb_)D(o*T@r58)t`8*^O!?_BAa*oMa^FAU!-PfUFI*%}P_5rP%FeN*6 z*(?^^txDbl{(B&!8JU`tQi9xMs%rpbLqYOnqP7MxYVzkVx!kNsOp@a5(T+$&ipSbx zZHdGTae`7by;BWA%1QP2cFChU# z5TZ|@_$tf{4PIi&rusAtPxavp2xDOB_2p@pz?Y{QzR1P^oimQLVY+0YX3=p;=dng? zD>+uS&FBNp_0Y-9efxP+G(jtuc@WR=F!sQ#_RYv>UZk1?efV-4JydZ5v0 zt5_h$N|sgWn>grpLP=GfxB+JmyC1;y*d9j4_EXT|G)xw5bpmFF;X3&uF2@VHhNWS# zvMMNZFATIS9YJMk+87e$EK=8w;o{86>}Vv~5l^(YNo|Q(T$G~mgm}wv=T0GZc>Znn zvHQkvIeqe#i8pTDdq!G%;-P6@UWvXq_`uaYOU++~E}q@|$G~UvpWom2+TPBEzs|(( zt?NE?{+)eWlT*jtHRs7mUp;pB3tPWA_r<@jZkl`g>FGbk?UAAA!9CrnBhlOUiPPJE zSb4m8bN}^cXN-UJ0J=CBnfMX{J7%sqc*mgyeRJOx+9s?$y!`B`8=vfW^Y|Kj)1TKy zJ{p|WJ@sb)$jc|+-oI>c%HrK)wjF)$gZ_zI7wx{bU;6IY`6Y8^pBg%U`Nu04{<>Ot zWLG~vI&I2RGsi7%O@5u2@YZ10;^EfqKkvNx&*^i2U%qrbH}LWM!$(f^{r-lv4QwCV jr+oW))6%nd9@zDL^MxDu!%sKtef><=z=OX{DwpFw(Lp(B diff --git a/src/iceberg/test/resources/snap-4134160420377642835-1-aeffe099-3bac-4011-bc17-5875210d8dc0.avro b/src/iceberg/test/resources/snap-4134160420377642835-1-aeffe099-3bac-4011-bc17-5875210d8dc0.avro deleted file mode 100644 index 29584b8ce4f9156da570cf293587e846545c49b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3951 zcmbW3O>Epm6vxwwV}*o@3W6eytcX*J?ET*5Qlu8C5)!B>C?Bnyu{|3*>yO1AXIZL< z3kPy*S4#*?5V4gvbm+OIcEU=+WOE^qnq>u-DS_FmSL9US9?YokzXoSW2g^syj>5 zv0dbE%F*3GihU!%&;>L>5IOH7;P}88Vid7-v%s1ZxDP|@(0uf$k4&AAdE$_>Khb76BCFJ~)gY-~del8xj~1X#f*lCMrt z=y@aE4B{l;wCd}MAG)=R}y? zV{-lFXjii><$-kxXdxG2Qp576yOQoGk84Oc-UqZ<@-^g=fME!Sw5Aw&r1SarNvVW& zwZ(2Nrw}vnF?9S$&n_oZh!F%Xf_-J*)=~{+qt!~q>$$Gh_W*2w08KxmSfL@L~!&d2%5Gi=c(sW zn^GauaS{fDLggh>g)>v3)Ac2EuE~Ro>%2US>%1&a9$`%8<#9~rWohyh>!G3UAq*{u zA*uePCK9jUMZD^p;jo{071;;aK47?kaq87+ZPF3XCbnt@7BZhEUF$-OE-*hJP4aS0 ztJbuJTC1qlX0uVNw5s)sq(wZ4FKweRB93%cyXct6K;dTQ&W~Q?BZru3Y*KqleLLwo zHD}71hfe!<=FTB{H+DiqoR)+_tQN`~ZcY0$rD)R>?$ZUFoC_BEwm?)kf=@unu?ryo z@8AMZ<$zRd?5NM$7Y+2+grp^op7J>6uk{b$BPAr0piNiITbHP&axke>B6bLb7m_+9% zFp16t2$@V+YfzI9IZSaOYvMELYo#ilWJ&Wctio~hQMxIfy?4_ee)IEFAD&(RasSh!gYnw<{`%)DN4vYbXU?r&Ui_i+_;+XF`@f%g@EQ1bl z&E?n{(z|(d&ET+C7#M264G>uBMg&wHqzf2XLAXU=i383<6RU1KDJzfU6k(=;t2(Ap zcalHB{5in3kOHs)98<-m@kTgU+0Zfa-Y=@agU$B;w1ANTIEz3aZ3hsiDGV*d^`Sj1={6&MzjDo_=dPgWqnu&{vuRZ;nT(av|rgWsiHf^KV?K*mn7 zYoTev0{NRXdydRH`n+^FnsG51)O2Vjx^n=kx<#7Q1rBi2hM^&-lL!7#Tw&T|T4ey# z3;y`Zx=l%%N7Dd}6ZAmME*(1UTm>>R4?27&A>dpy94XW*a4IMRZ4C<@ZcO1pk>oD4;|rzSuP|_yH@c@A#;1Fmw?vGBB`H|h4KoBQydr_bI>}E+$PrZ0 zCscf8ZiWUgv1C(y8iuF(a1Mkqu=EDuN-|;Z^(5w#J$Z%$)k^^FjCM(c--iNV#yu?7k7LFE77-8XO)obbN02y=U**yQleyzH{SGAAW6cXziBFM^k>@F-bFa>Bkn0 zeP;dFZ!g*X{=^r|OxCa8V=mtK<43#a$q)OE z{<>|Zm|B_GF+S0|cNU)t9E?=L+EKfgM3&9 zze~TfblKTm=LeUo5AWS{>Ko_G9RqFW1|D)&?OV9#^^?wtylMTuVdKr4N6w@Vj_PVT IpDNYrKc%`mrvLx| diff --git a/src/iceberg/test/resources/snap-7522296285847100621-1-5d690750-8fb4-4cd1-8ae7-85c7b39abe14.avro b/src/iceberg/test/resources/snap-7522296285847100621-1-5d690750-8fb4-4cd1-8ae7-85c7b39abe14.avro deleted file mode 100644 index 590edc1f8cb279bbc9d9cf04e61d3040f5cad052..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4003 zcmbW3PiP!f9LJj&v4P+1|2~_kN$> z`@P@y_kHiw*QSo0fa{L^x~n!&3;M5I6L6=EgayGts_kgPtYEZOPuy_G@F46$D!G>et;e6#pSg2`8Q(OzS-G+@*VN)4bqZKqZZa@rzjpR=R z;(`w)KQ}_5=XDj;_JVxFs;>x^XPRUyJ;ar`_HWRv0J5;t0r7eb>CiK=us}CN*BaHS zkU*iUhKtEP2G^gDb}`zLA6QHPHDn@8YMB3Y7s4I+ais)~^#N^`bPbs#pyR*}ttmz= z()sNBuvDC)Scz{fr4ZG&Ff=Szi7qEnNZqzg1TC^9l*p3fk>1q-v^rrkH=qk3pql{8 z6Rbni8*ah*#ECd82%SEY5HneCWI>@dhMCTA$sgus+vSOVXDwFXq$3g_b zE)eVjy6pf+jvaIXEl_5+O388IwcAes4t7lrmbzEEvjSDKdgzsD_9XPTB_4&2VOsB=@e;^7R2Y)k>e6anwCx(Dyk!AHFD?QUS=bQ zn5w5zdkTF!=sGcF%8`eT`gi2c4*J+L97LR!ghFvGgbCc5_Gd_uMk&mvGdL+1%=B%J zkQstaz=UIGK>pvsIbeJ(TglP z6ZGT&ChX*kfip^s5sP?oL@egiir8`w9erW+zJc8ra4Dw!P7D?jbnnNY(bjz(u-@TAXU z-5kb;McSn&hGpAz%8+?ndSAq;!=w+fWu7aaI%6D|2Tor}YAB32F%Qls4%2AL1#`t` z8coP7c zLQ#|or6WI8&;F_1wP!y4`)K$6PXD`^$J6H@Z13#tZq>H#tlV1O+U+Z~y{`wp_LZWa z9PABNu76Q`PPx9k_H+K2mtn>ByiU-l2|-MVgkWUbw9_P^BjoBm$?pxNJE zyVHcb<}JmXgFWS+R?5T5l4 z{SjQb1bhz}fVf}>TVyofaw;q|3}mRD13O;RC7H09j920nEH-IE0>X{-Uj&kZk0if1 zMq%gmRNeK%e50ywNRDsYbSpc=jimPPvaA4d2=0Ppy@5>V+eBJo8{%t?>r_dh(5IG1 z=skwlUyOD+-clS`O#uyLBSLFf{B)P19mR3A6pr@+YnE&cxg;RQu*+&nP@8r>|9(^| zxLQ(@Tgxa!cO3#P$5Z3Wi4~%`u8p8Ww?qMcuT7N|OGoMPgRS`OHl%`MM?p|;igKQK zo>Dzk$Y`8kcPCeQ;Z)(wNa$>R0iDa~!Nql69L9BCl$Rc1iOh@R5}6mJrKea6b=5W^ z(0~Ne>W^w7^a@_Y%Z`q_ozSc3K9KAKn(b;QUY*>a9r1c-tGa6-{bky-z zF4n7y<(gb6SCv|=ME{l=$_3gYZAccj5%#Df&B_-n9cc(}#_s(1JRdpKRDGSxW z*OfA+9DC@vf5+~O(I>uz5p`M`3MI9Wrf_T4pAkhKr*NOn;bdGe*S7_t%n^J7rW`v5 z^8XGl0E-+Di7mOS$h&g@nNt+;a>1*N@UlK9cqX(xaXsl1jk~#sUggobpr;3LVW(dV zf>Gm)M8wl05;0FE)H#7)IRPlfH;`3z!%dS(ly~ zmT%V?Ll$w_eNm^5l0LzfMXqA%OmJWkIC~|Tp)lseBDk11T%#EmEEJz>G-ZbZA%;vM z(dh|^L?;4-Oh&9VFL^E7IwyK8y~a1G@Y$;>na0dHmFi-t-YCmTrP`<~wTe_}kuap}KtPkJ*174)5IEAFL0KH}0(s_5*eO?$KfYzG|LRzgb)DU+>>J zd_(Q8fBfU&!Fqq#U+X_O+#i0Y8J2VZz}yOsT3QnxwJgIvZke_dm|Ldizp2ufi`sG^Z)(=0wc&dADEbph>wM^Fl