@@ -39,6 +39,11 @@ class MergeFunctionWrapper;
3939} // namespace paimon
4040
4141namespace paimon ::test {
42+ struct ReaderResult {
43+ std::vector<int64_t > sequence_numbers;
44+ std::vector<int8_t > row_kind_values;
45+ };
46+
4247class WriteBufferTest : public ::testing::Test {
4348 public:
4449 void SetUp () override {
@@ -69,6 +74,18 @@ class WriteBufferTest : public ::testing::Test {
6974 return batch;
7075 }
7176
77+ Result<ReaderResult> ReadReaderResult (KeyValueRecordReader* reader) const {
78+ PAIMON_ASSIGN_OR_RAISE (auto iterator, reader->NextBatch ());
79+
80+ ReaderResult result;
81+ while (iterator->HasNext ()) {
82+ PAIMON_ASSIGN_OR_RAISE (KeyValue key_value, iterator->Next ());
83+ result.sequence_numbers .push_back (key_value.sequence_number );
84+ result.row_kind_values .push_back (key_value.value_kind ->ToByteValue ());
85+ }
86+ return result;
87+ }
88+
7289 protected:
7390 std::shared_ptr<MemoryPool> pool_;
7491 std::vector<DataField> value_fields_;
@@ -100,32 +117,23 @@ TEST_F(WriteBufferTest, TestFlushResetsStateAndAdvancesSequenceNumber) {
100117 ASSERT_GT (write_buffer.GetMemoryUsage (), 0 );
101118
102119 int64_t last_sequence_number = 10 ;
103- ASSERT_OK_AND_ASSIGN (auto readers, write_buffer.Flush (&last_sequence_number));
120+ ASSERT_OK_AND_ASSIGN (auto readers, write_buffer.DrainToReaders (&last_sequence_number));
104121
105122 ASSERT_EQ (readers.size (), 2 );
106123 ASSERT_TRUE (write_buffer.IsEmpty ());
107124 ASSERT_EQ (write_buffer.GetMemoryUsage (), 0 );
108125 ASSERT_EQ (last_sequence_number, 13 );
109126
110- ASSERT_OK_AND_ASSIGN (auto first_iterator, readers[0 ]->NextBatch ());
111- ASSERT_TRUE (first_iterator);
112- ASSERT_TRUE (first_iterator->HasNext ());
113- ASSERT_OK_AND_ASSIGN (KeyValue first, first_iterator->Next ());
114- ASSERT_EQ (first.sequence_number , 10 );
115- ASSERT_EQ (first.value_kind ->ToByteValue (), RowKind::Insert ()->ToByteValue ());
116- ASSERT_TRUE (first_iterator->HasNext ());
117- ASSERT_OK_AND_ASSIGN (KeyValue second, first_iterator->Next ());
118- ASSERT_EQ (second.sequence_number , 11 );
119- ASSERT_EQ (second.value_kind ->ToByteValue (), RowKind::Insert ()->ToByteValue ());
120- ASSERT_FALSE (first_iterator->HasNext ());
121-
122- ASSERT_OK_AND_ASSIGN (auto second_iterator, readers[1 ]->NextBatch ());
123- ASSERT_TRUE (second_iterator);
124- ASSERT_TRUE (second_iterator->HasNext ());
125- ASSERT_OK_AND_ASSIGN (KeyValue third, second_iterator->Next ());
126- ASSERT_EQ (third.sequence_number , 12 );
127- ASSERT_EQ (third.value_kind ->ToByteValue (), RowKind::Insert ()->ToByteValue ());
128- ASSERT_FALSE (second_iterator->HasNext ());
127+ ASSERT_OK_AND_ASSIGN (auto first_result, ReadReaderResult (readers[0 ].get ()));
128+ ASSERT_EQ (first_result.sequence_numbers , (std::vector<int64_t >{10 , 11 }));
129+ ASSERT_EQ (
130+ first_result.row_kind_values ,
131+ (std::vector<int8_t >{RowKind::Insert ()->ToByteValue (), RowKind::Insert ()->ToByteValue ()}));
132+
133+ ASSERT_OK_AND_ASSIGN (auto second_result, ReadReaderResult (readers[1 ].get ()));
134+ ASSERT_EQ (second_result.sequence_numbers , (std::vector<int64_t >{12 }));
135+ ASSERT_EQ (second_result.row_kind_values ,
136+ (std::vector<int8_t >{RowKind::Insert ()->ToByteValue ()}));
129137}
130138
131139TEST_F (WriteBufferTest, TestFlushPreservesRowKinds) {
@@ -150,26 +158,17 @@ TEST_F(WriteBufferTest, TestFlushPreservesRowKinds) {
150158 ASSERT_OK (write_buffer.Write (CreateBatch (array, row_kinds)));
151159
152160 int64_t last_sequence_number = 0 ;
153- ASSERT_OK_AND_ASSIGN (auto readers, write_buffer.Flush (&last_sequence_number));
161+ ASSERT_OK_AND_ASSIGN (auto readers, write_buffer.DrainToReaders (&last_sequence_number));
154162 ASSERT_EQ (readers.size (), 1 );
155163 ASSERT_EQ (last_sequence_number, 4 );
156164
157- ASSERT_OK_AND_ASSIGN (auto iterator, readers[0 ]->NextBatch ());
158- ASSERT_TRUE (iterator);
159-
160- std::vector<int8_t > actual_row_kind_values;
161- std::vector<int64_t > actual_sequence_numbers;
162- while (iterator->HasNext ()) {
163- ASSERT_OK_AND_ASSIGN (KeyValue key_value, iterator->Next ());
164- actual_row_kind_values.push_back (key_value.value_kind ->ToByteValue ());
165- actual_sequence_numbers.push_back (key_value.sequence_number );
166- }
165+ ASSERT_OK_AND_ASSIGN (auto reader_result, ReadReaderResult (readers[0 ].get ()));
167166
168- ASSERT_EQ (actual_row_kind_values ,
167+ ASSERT_EQ (reader_result. row_kind_values ,
169168 (std::vector<int8_t >{
170169 RowKind::Insert ()->ToByteValue (), RowKind::UpdateBefore ()->ToByteValue (),
171170 RowKind::UpdateAfter ()->ToByteValue (), RowKind::Delete ()->ToByteValue ()}));
172- ASSERT_EQ (actual_sequence_numbers , (std::vector<int64_t >{0 , 1 , 2 , 3 }));
171+ ASSERT_EQ (reader_result. sequence_numbers , (std::vector<int64_t >{0 , 1 , 2 , 3 }));
173172}
174173
175174TEST_F (WriteBufferTest, TestEstimateMemoryUse) {
0 commit comments