Skip to content

Commit 71bb025

Browse files
committed
[test] Assert file_size propagation in iceberg delete file FE/BE tests
1 parent ac67fc4 commit 71bb025

4 files changed

Lines changed: 10 additions & 15 deletions

File tree

be/test/format/table/iceberg/iceberg_delete_file_reader_helper_test.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,9 @@ TEST(IcebergDeleteFileReaderHelperTest, BuildDeleteFileRange) {
219219
EXPECT_EQ(range.start_offset, 0);
220220
EXPECT_EQ(range.size, -1);
221221
EXPECT_EQ(range.file_size, -1);
222+
223+
auto range2 = build_iceberg_delete_file_range("s3://bucket/delete.parquet", 1024);
224+
EXPECT_EQ(range2.file_size, 1024);
222225
}
223226

224227
TEST(IcebergDeleteFileReaderHelperTest, IsDeletionVector) {

be/test/format_v2/table/iceberg_reader_test.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5019,10 +5019,6 @@ TEST(IcebergV2ReaderTest, DataFileIsMarkedImmutableForPageCache) {
50195019
EXPECT_TRUE(reader.current_data_file_is_immutable());
50205020
}
50215021

5022-
// E2E: Verify file_size from FE thrift propagates through the full reader chain.
5023-
// Data file: 3 rows (id=1,2,3). Equality delete: delete id=2.
5024-
// With file_size set on TIcebergDeleteFileDesc, the reader should use it
5025-
// instead of falling back to stat, and return correct results (id=1,3).
50265022
TEST(IcebergV2ReaderTest, IcebergEqualityDeleteFileSizePropagatedToReader) {
50275023
const auto test_dir =
50285024
std::filesystem::temp_directory_path() / "doris_iceberg_eq_delete_file_size_test";
@@ -5080,9 +5076,6 @@ TEST(IcebergV2ReaderTest, IcebergEqualityDeleteFileSizePropagatedToReader) {
50805076
std::filesystem::remove_all(test_dir);
50815077
}
50825078

5083-
// E2E: Verify that when file_size is not set (thrift optional defaults to 0),
5084-
// build_iceberg_delete_file_range converts 0 to -1, and FileFactory falls back
5085-
// to stat. The reader should still return correct results.
50865079
TEST(IcebergV2ReaderTest, IcebergEqualityDeleteFileSizeUnknownFallsBackToStat) {
50875080
const auto test_dir =
50885081
std::filesystem::temp_directory_path() / "doris_iceberg_eq_delete_no_file_size_test";
@@ -5094,13 +5087,11 @@ TEST(IcebergV2ReaderTest, IcebergEqualityDeleteFileSizeUnknownFallsBackToStat) {
50945087
write_int_pair_parquet_file(file_path, {1, 2, 3}, {10, 20, 30}, {"one", "two", "three"});
50955088
write_iceberg_equality_delete_parquet_file(delete_file_path, 0, 2);
50965089

5097-
// Construct delete file WITHOUT file_size (simulating FE not setting it)
50985090
TIcebergDeleteFileDesc delete_file;
50995091
delete_file.__set_content(2);
51005092
delete_file.__set_path(delete_file_path);
51015093
delete_file.__set_field_ids({0});
51025094
delete_file.__set_file_format(TFileFormatType::FORMAT_PARQUET);
5103-
// file_size intentionally not set — thrift defaults to 0
51045095

51055096
std::vector<ColumnDefinition> projected_columns;
51065097
projected_columns.push_back(make_table_column(0, "id", std::make_shared<DataTypeInt32>()));

fe/fe-connector/fe-connector-iceberg/src/test/java/org/apache/doris/connector/iceberg/IcebergScanPlanProviderTest.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4200,14 +4200,11 @@ public void deleteFile(String path) {
42004200

42014201
@Test
42024202
public void deleteFileSizePropagatedFromIcebergManifest() {
4203-
// E2E: iceberg DeleteFile.fileSizeInBytes (482) → IcebergScanPlanProvider →
4204-
// IcebergScanRange.DeleteFile.fileSize → toThrift → TIcebergDeleteFileDesc.file_size
42054203
Table table = createTable("t_filesize", SCHEMA, PartitionSpec.unpartitioned(),
42064204
Collections.singletonMap("format-version", "2"));
42074205
table.newAppend()
42084206
.appendFile(dataFile(table.spec(), "s3://b/db/t_filesize/f1.parquet", 512, null, null))
42094207
.commit();
4210-
// Position delete with fileSizeInBytes=128 (rewritableDeleteDescs includes position deletes)
42114208
DeleteFile posDelete = FileMetadata.deleteFileBuilder(table.spec())
42124209
.ofPositionDeletes()
42134210
.withPath("s3://b/db/t_filesize/pos-delete.parquet")
@@ -4227,9 +4224,6 @@ public void deleteFileSizePropagatedFromIcebergManifest() {
42274224
Assertions.assertEquals(1, ranges.size());
42284225
IcebergScanRange range = (IcebergScanRange) ranges.get(0);
42294226

4230-
// Use rewritableDeleteDescs() (returns TIcebergDeleteFileDesc via toThrift)
4231-
// to verify file_size propagated from iceberg manifest → DeleteFile → toThrift.
4232-
// Note: equality deletes are excluded from rewritableDeleteDescs, so use position delete instead.
42334227
List<TIcebergDeleteFileDesc> descs = range.rewritableDeleteDescs();
42344228
Assertions.assertFalse(descs.isEmpty());
42354229
TIcebergDeleteFileDesc desc = descs.get(0);

fe/fe-connector/fe-connector-iceberg/src/test/java/org/apache/doris/connector/iceberg/IcebergScanRangeTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,9 @@ public void populateRangeParamsV2EmitsPositionDeleteFile() {
207207
Assertions.assertEquals(10L, d.getPositionLowerBound());
208208
Assertions.assertTrue(d.isSetPositionUpperBound());
209209
Assertions.assertEquals(99L, d.getPositionUpperBound());
210+
// file_size is propagated from DeleteFile to TIcebergDeleteFileDesc.
211+
Assertions.assertTrue(d.isSetFileSize());
212+
Assertions.assertEquals(100L, d.getFileSize());
210213
// A position delete carries neither equality field-ids nor a deletion-vector blob ref.
211214
Assertions.assertFalse(d.isSetFieldIds());
212215
Assertions.assertFalse(d.isSetContentOffset());
@@ -255,13 +258,17 @@ public void populateRangeParamsV2EmitsDeletionVectorAndEqualityDelete() {
255258
Assertions.assertEquals(64L, dvDesc.getContentSizeInBytes());
256259
Assertions.assertEquals(5L, dvDesc.getPositionLowerBound());
257260
Assertions.assertEquals(42L, dvDesc.getPositionUpperBound());
261+
Assertions.assertTrue(dvDesc.isSetFileSize());
262+
Assertions.assertEquals(100L, dvDesc.getFileSize());
258263

259264
TIcebergDeleteFileDesc eqDesc = deletes.get(1);
260265
Assertions.assertEquals(2, eqDesc.getContent());
261266
Assertions.assertEquals(Arrays.asList(3, 7), eqDesc.getFieldIds());
262267
Assertions.assertEquals(TFileFormatType.FORMAT_PARQUET, eqDesc.getFileFormat());
263268
Assertions.assertFalse(eqDesc.isSetContentOffset());
264269
Assertions.assertFalse(eqDesc.isSetPositionLowerBound());
270+
Assertions.assertTrue(eqDesc.isSetFileSize());
271+
Assertions.assertEquals(100L, eqDesc.getFileSize());
265272
}
266273

267274
@Test

0 commit comments

Comments
 (0)