This is an automated email from the ASF dual-hosted git repository. dataroaring pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new d1af5d5cd24 [fix](ut) repair segcompaction ut (#38165) d1af5d5cd24 is described below commit d1af5d5cd245add33f530ab880db09939cdb1009 Author: zhannngchen <48427519+zhannngc...@users.noreply.github.com> AuthorDate: Sat Jul 20 19:43:47 2024 +0800 [fix](ut) repair segcompaction ut (#38165) SegcompactionTest is disabled by #16068 due to some code clean up, it needs to be repaired --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- be/test/CMakeLists.txt | 1 - be/test/olap/segcompaction_test.cpp | 518 +++++++++++++++++------------------- 2 files changed, 246 insertions(+), 273 deletions(-) diff --git a/be/test/CMakeLists.txt b/be/test/CMakeLists.txt index c119af01e88..5a37267a937 100644 --- a/be/test/CMakeLists.txt +++ b/be/test/CMakeLists.txt @@ -46,7 +46,6 @@ list(REMOVE_ITEM UT_FILES ${CMAKE_CURRENT_SOURCE_DIR}/olap/rowset/segment_v2/frame_of_reference_page_test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/olap/rowset/segment_v2/plain_page_test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/olap/rowset/segment_v2/rle_page_test.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/olap/segcompaction_test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/runtime/decimal_value_test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/runtime/result_buffer_mgr_test.cpp ${CMAKE_CURRENT_SOURCE_DIR}/util/decompress_test.cpp diff --git a/be/test/olap/segcompaction_test.cpp b/be/test/olap/segcompaction_test.cpp index f612694e7e3..468b24784af 100644 --- a/be/test/olap/segcompaction_test.cpp +++ b/be/test/olap/segcompaction_test.cpp @@ -23,7 +23,6 @@ #include <vector> #include "common/config.h" -#include "env/env_posix.h" #include "gen_cpp/AgentService_types.h" #include "gen_cpp/olap_file.pb.h" #include "io/fs/local_file_system.h" @@ -47,14 +46,12 @@ namespace doris { using namespace ErrorCode; static const uint32_t MAX_PATH_LEN = 1024; -static std::unique_ptr<StorageEngine> l_engine; +static StorageEngine* l_engine; static const std::string lTestDir = "./data_test/data/segcompaction_test"; class SegCompactionTest : public testing::Test { public: - SegCompactionTest() : _data_dir(std::make_unique<DataDir>(lTestDir)) { - _data_dir->update_capacity(); - } + SegCompactionTest() = default; void SetUp() { config::enable_segcompaction = true; @@ -76,20 +73,24 @@ public: doris::EngineOptions options; options.store_paths = paths; - Status s = doris::StorageEngine::open(options, &l_engine); + + auto engine = std::make_unique<StorageEngine>(options); + l_engine = engine.get(); + ExecEnv::GetInstance()->set_storage_engine(std::move(engine)); + + Status s = l_engine->open(); EXPECT_TRUE(s.ok()) << s.to_string(); - ExecEnv* exec_env = doris::ExecEnv::GetInstance(); + _data_dir = std::make_unique<DataDir>(*l_engine, lTestDir); + static_cast<void>(_data_dir->update_capacity()); EXPECT_TRUE(io::global_local_filesystem()->create_directory(lTestDir).ok()); - l_engine->start_bg_threads(); + s = l_engine->start_bg_threads(); + EXPECT_TRUE(s.ok()) << s.to_string(); } - void TearDown() { - l_engine.reset(); - config::enable_segcompaction = false; - } + void TearDown() { config::enable_segcompaction = false; } protected: OlapReaderStatistics _stats; @@ -122,7 +123,8 @@ protected: } // (k1 int, k2 varchar(20), k3 int) keys (k1, k2) - void create_tablet_schema(TabletSchemaSPtr tablet_schema, KeysType keystype) { + void create_tablet_schema(TabletSchemaSPtr tablet_schema, KeysType keystype, + int num_value_col = 1) { TabletSchemaPB tablet_schema_pb; tablet_schema_pb.set_keys_type(keystype); tablet_schema_pb.set_num_short_key_columns(2); @@ -152,15 +154,18 @@ protected: column_2->set_is_nullable(true); column_2->set_is_bf_column(false); - ColumnPB* column_3 = tablet_schema_pb.add_column(); - column_3->set_unique_id(3); - column_3->set_name("v1"); - column_3->set_type("INT"); - column_3->set_length(4); - column_3->set_is_key(false); - column_3->set_is_nullable(false); - column_3->set_is_bf_column(false); - column_3->set_aggregation("SUM"); + for (int i = 1; i <= num_value_col; i++) { + ColumnPB* v_column = tablet_schema_pb.add_column(); + v_column->set_unique_id(2 + i); + v_column->set_name(fmt::format("v{}", i)); + v_column->set_type("INT"); + v_column->set_length(4); + v_column->set_is_key(false); + v_column->set_is_nullable(false); + v_column->set_is_bf_column(false); + v_column->set_default_value(std::to_string(i * 10)); + v_column->set_aggregation("SUM"); + } tablet_schema->init_from_pb(tablet_schema_pb); } @@ -176,7 +181,7 @@ protected: rowset_writer_context->tablet_schema_hash = 1111; rowset_writer_context->partition_id = 10; rowset_writer_context->rowset_type = BETA_ROWSET; - rowset_writer_context->rowset_dir = lTestDir; + rowset_writer_context->tablet_path = lTestDir; rowset_writer_context->rowset_state = VISIBLE; rowset_writer_context->tablet_schema = tablet_schema; rowset_writer_context->version.first = 10; @@ -192,16 +197,11 @@ protected: l_engine->create_tablet(req, &profile); rowset_writer_context->tablet = l_engine->tablet_manager()->get_tablet(TTabletId tablet_id); #endif - std::shared_ptr<DataDir> data_dir = std::make_shared<DataDir>(lTestDir); TabletMetaSharedPtr tablet_meta = std::make_shared<TabletMeta>(); tablet_meta->_tablet_id = 1; - tablet_meta->set_partition_id(10000); + static_cast<void>(tablet_meta->set_partition_id(10000)); tablet_meta->_schema = tablet_schema; - auto tablet = std::make_shared<Tablet>(*l_engine, tablet_meta, data_dir.get(), "test_str"); - char* tmp_str = (char*)malloc(20); - strncpy(tmp_str, "test_tablet_name", 20); - - tablet->_full_name = tmp_str; + auto tablet = std::make_shared<Tablet>(*l_engine, tablet_meta, _data_dir.get(), "test_str"); // tablet->key rowset_writer_context->tablet = tablet; } @@ -237,29 +237,28 @@ TEST_F(SegCompactionTest, SegCompactionThenRead) { RowsetWriterContext writer_context; create_rowset_writer_context(10047, tablet_schema, &writer_context); - std::unique_ptr<RowsetWriter> rowset_writer; - s = RowsetFactory::create_rowset_writer(writer_context, false, &rowset_writer); + auto res = RowsetFactory::create_rowset_writer(*l_engine, writer_context, false); + EXPECT_TRUE(res.has_value()) << res.error(); + auto rowset_writer = std::move(res).value(); EXPECT_EQ(Status::OK(), s); - RowCursor input_row; - input_row.init(tablet_schema); - // for segment "i", row "rid" // k1 := rid*10 + i // k2 := k1 * 10 // k3 := rid for (int i = 0; i < num_segments; ++i) { - vectorized::Arena arena; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); for (int rid = 0; rid < rows_per_segment; ++rid) { uint32_t k1 = rid * 100 + i; uint32_t k2 = i; uint32_t k3 = rid; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); } + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -281,7 +280,7 @@ TEST_F(SegCompactionTest, SegCompactionThenRead) { RowsetReaderContext reader_context; reader_context.tablet_schema = tablet_schema; // use this type to avoid cache from other ut - reader_context.reader_type = READER_CUMULATIVE_COMPACTION; + reader_context.reader_type = ReaderType::READER_CUMULATIVE_COMPACTION; reader_context.need_ordered_result = true; std::vector<uint32_t> return_columns = {0, 1, 2}; reader_context.return_columns = &return_columns; @@ -321,6 +320,7 @@ TEST_F(SegCompactionTest, SegCompactionThenRead) { } EXPECT_EQ(Status::Error<END_OF_FILE>(""), s); EXPECT_EQ(rowset->rowset_meta()->num_rows(), num_rows_read); + EXPECT_EQ(num_rows_read, num_segments * rows_per_segment); EXPECT_TRUE(rowset_reader->get_segment_num_rows(&segment_num_rows).ok()); size_t total_num_rows = 0; for (const auto& i : segment_num_rows) { @@ -345,13 +345,11 @@ TEST_F(SegCompactionTest, SegCompactionInterleaveWithBig_ooooOOoOooooooooO) { RowsetWriterContext writer_context; create_rowset_writer_context(10048, tablet_schema, &writer_context); - std::unique_ptr<RowsetWriter> rowset_writer; - s = RowsetFactory::create_rowset_writer(writer_context, false, &rowset_writer); + auto res = RowsetFactory::create_rowset_writer(*l_engine, writer_context, false); + EXPECT_TRUE(res.has_value()) << res.error(); + auto rowset_writer = std::move(res).value(); EXPECT_EQ(Status::OK(), s); - RowCursor input_row; - input_row.init(tablet_schema); - // for segment "i", row "rid" // k1 := rid*10 + i // k2 := k1 * 10 @@ -359,85 +357,90 @@ TEST_F(SegCompactionTest, SegCompactionInterleaveWithBig_ooooOOoOooooooooO) { int num_segments = 4; uint32_t rows_per_segment = 4096; for (int i = 0; i < num_segments; ++i) { - vectorized::Arena arena; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); for (int rid = 0; rid < rows_per_segment; ++rid) { uint32_t k1 = rid * 100 + i; uint32_t k2 = i; uint32_t k3 = rid; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); } + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); } num_segments = 2; rows_per_segment = 6400; for (int i = 0; i < num_segments; ++i) { - vectorized::Arena arena; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); for (int rid = 0; rid < rows_per_segment; ++rid) { uint32_t k1 = rid * 100 + i; uint32_t k2 = i; uint32_t k3 = rid; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); } + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); } num_segments = 1; rows_per_segment = 4096; for (int i = 0; i < num_segments; ++i) { - vectorized::Arena arena; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); for (int rid = 0; rid < rows_per_segment; ++rid) { uint32_t k1 = rid * 100 + i; uint32_t k2 = i; uint32_t k3 = rid; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); } + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); } num_segments = 1; rows_per_segment = 6400; for (int i = 0; i < num_segments; ++i) { - vectorized::Arena arena; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); for (int rid = 0; rid < rows_per_segment; ++rid) { uint32_t k1 = rid * 100 + i; uint32_t k2 = i; uint32_t k3 = rid; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); } + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); } num_segments = 8; rows_per_segment = 4096; for (int i = 0; i < num_segments; ++i) { - vectorized::Arena arena; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); for (int rid = 0; rid < rows_per_segment; ++rid) { uint32_t k1 = rid * 100 + i; uint32_t k2 = i; uint32_t k3 = rid; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); } + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -445,17 +448,18 @@ TEST_F(SegCompactionTest, SegCompactionInterleaveWithBig_ooooOOoOooooooooO) { num_segments = 1; rows_per_segment = 6400; for (int i = 0; i < num_segments; ++i) { - vectorized::Arena arena; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); for (int rid = 0; rid < rows_per_segment; ++rid) { uint32_t k1 = rid * 100 + i; uint32_t k2 = i; uint32_t k3 = rid; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); } + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -489,13 +493,11 @@ TEST_F(SegCompactionTest, SegCompactionInterleaveWithBig_OoOoO) { RowsetWriterContext writer_context; create_rowset_writer_context(10049, tablet_schema, &writer_context); - std::unique_ptr<RowsetWriter> rowset_writer; - s = RowsetFactory::create_rowset_writer(writer_context, false, &rowset_writer); + auto res = RowsetFactory::create_rowset_writer(*l_engine, writer_context, false); + EXPECT_TRUE(res.has_value()) << res.error(); + auto rowset_writer = std::move(res).value(); EXPECT_EQ(Status::OK(), s); - RowCursor input_row; - input_row.init(tablet_schema); - // for segment "i", row "rid" // k1 := rid*10 + i // k2 := k1 * 10 @@ -503,85 +505,90 @@ TEST_F(SegCompactionTest, SegCompactionInterleaveWithBig_OoOoO) { int num_segments = 1; uint32_t rows_per_segment = 6400; for (int i = 0; i < num_segments; ++i) { - vectorized::Arena arena; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); for (int rid = 0; rid < rows_per_segment; ++rid) { uint32_t k1 = rid * 100 + i; uint32_t k2 = i; uint32_t k3 = rid; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); } + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); } num_segments = 1; rows_per_segment = 4096; for (int i = 0; i < num_segments; ++i) { - vectorized::Arena arena; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); for (int rid = 0; rid < rows_per_segment; ++rid) { uint32_t k1 = rid * 100 + i; uint32_t k2 = i; uint32_t k3 = rid; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); } + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); } num_segments = 1; rows_per_segment = 6400; for (int i = 0; i < num_segments; ++i) { - vectorized::Arena arena; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); for (int rid = 0; rid < rows_per_segment; ++rid) { uint32_t k1 = rid * 100 + i; uint32_t k2 = i; uint32_t k3 = rid; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); } + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); } num_segments = 1; rows_per_segment = 4096; for (int i = 0; i < num_segments; ++i) { - vectorized::Arena arena; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); for (int rid = 0; rid < rows_per_segment; ++rid) { uint32_t k1 = rid * 100 + i; uint32_t k2 = i; uint32_t k3 = rid; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); } + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); } num_segments = 1; rows_per_segment = 6400; for (int i = 0; i < num_segments; ++i) { - vectorized::Arena arena; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); for (int rid = 0; rid < rows_per_segment; ++rid) { uint32_t k1 = rid * 100 + i; uint32_t k2 = i; uint32_t k3 = rid; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); } + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -613,71 +620,62 @@ TEST_F(SegCompactionTest, SegCompactionThenReadUniqueTableSmall) { RowsetWriterContext writer_context; create_rowset_writer_context(10051, tablet_schema, &writer_context); - std::unique_ptr<RowsetWriter> rowset_writer; - s = RowsetFactory::create_rowset_writer(writer_context, false, &rowset_writer); + auto res = RowsetFactory::create_rowset_writer(*l_engine, writer_context, false); + EXPECT_TRUE(res.has_value()) << res.error(); + auto rowset_writer = std::move(res).value(); EXPECT_EQ(Status::OK(), s); - RowCursor input_row; - input_row.init(tablet_schema); - - vectorized::Arena arena; uint32_t k1 = 0; uint32_t k2 = 0; uint32_t k3 = 0; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); // segment#0 k1 = k2 = 1; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 4; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 6; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); // segment#1 k1 = k2 = 2; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 4; k3 = 2; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 6; k3 = 2; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -685,28 +683,24 @@ TEST_F(SegCompactionTest, SegCompactionThenReadUniqueTableSmall) { // segment#2 k1 = k2 = 3; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 6; k3 = 3; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 9; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -714,28 +708,24 @@ TEST_F(SegCompactionTest, SegCompactionThenReadUniqueTableSmall) { // segment#3 k1 = k2 = 4; k3 = 3; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 9; k3 = 2; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 12; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -743,12 +733,12 @@ TEST_F(SegCompactionTest, SegCompactionThenReadUniqueTableSmall) { // segment#4 k1 = k2 = 25; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -756,12 +746,12 @@ TEST_F(SegCompactionTest, SegCompactionThenReadUniqueTableSmall) { // segment#5 k1 = k2 = 26; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -779,7 +769,7 @@ TEST_F(SegCompactionTest, SegCompactionThenReadUniqueTableSmall) { RowsetReaderContext reader_context; reader_context.tablet_schema = tablet_schema; // use this type to avoid cache from other ut - reader_context.reader_type = READER_CUMULATIVE_COMPACTION; + reader_context.reader_type = ReaderType::READER_CUMULATIVE_COMPACTION; reader_context.need_ordered_result = true; std::vector<uint32_t> return_columns = {0, 1, 2}; reader_context.return_columns = &return_columns; @@ -847,71 +837,63 @@ TEST_F(SegCompactionTest, SegCompactionThenReadAggTableSmall) { RowsetWriterContext writer_context; create_rowset_writer_context(10052, tablet_schema, &writer_context); - std::unique_ptr<RowsetWriter> rowset_writer; - s = RowsetFactory::create_rowset_writer(writer_context, false, &rowset_writer); + auto res = RowsetFactory::create_rowset_writer(*l_engine, writer_context, false); + EXPECT_TRUE(res.has_value()) << res.error(); + auto rowset_writer = std::move(res).value(); EXPECT_EQ(Status::OK(), s); - RowCursor input_row; - input_row.init(tablet_schema); - - vectorized::Arena arena; uint32_t k1 = 0; uint32_t k2 = 0; uint32_t k3 = 0; + vectorized::Block block = tablet_schema->create_block(); + auto columns = block.mutate_columns(); + // segment#0 k1 = k2 = 1; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 4; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 6; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); // segment#1 k1 = k2 = 2; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 4; k3 = 2; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 6; k3 = 2; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -919,28 +901,24 @@ TEST_F(SegCompactionTest, SegCompactionThenReadAggTableSmall) { // segment#2 k1 = k2 = 3; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 6; k3 = 3; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 9; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -948,28 +926,24 @@ TEST_F(SegCompactionTest, SegCompactionThenReadAggTableSmall) { // segment#3 k1 = k2 = 4; k3 = 3; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 9; k3 = 2; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); k1 = k2 = 12; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -977,12 +951,12 @@ TEST_F(SegCompactionTest, SegCompactionThenReadAggTableSmall) { // segment#4 k1 = k2 = 25; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -990,12 +964,12 @@ TEST_F(SegCompactionTest, SegCompactionThenReadAggTableSmall) { // segment#5 k1 = k2 = 26; k3 = 1; - input_row.set_field_content(0, reinterpret_cast<char*>(&k1), &arena); - input_row.set_field_content(1, reinterpret_cast<char*>(&k2), &arena); - input_row.set_field_content(2, reinterpret_cast<char*>(&k3), &arena); - s = rowset_writer->add_row(input_row); - EXPECT_EQ(Status::OK(), s); + columns[0]->insert_data((const char*)&k1, sizeof(k1)); + columns[1]->insert_data((const char*)&k2, sizeof(k2)); + columns[2]->insert_data((const char*)&k3, sizeof(k3)); + s = rowset_writer->add_block(&block); + EXPECT_TRUE(s.ok()); s = rowset_writer->flush(); EXPECT_EQ(Status::OK(), s); sleep(1); @@ -1013,7 +987,7 @@ TEST_F(SegCompactionTest, SegCompactionThenReadAggTableSmall) { RowsetReaderContext reader_context; reader_context.tablet_schema = tablet_schema; // use this type to avoid cache from other ut - reader_context.reader_type = READER_CUMULATIVE_COMPACTION; + reader_context.reader_type = ReaderType::READER_CUMULATIVE_COMPACTION; reader_context.need_ordered_result = true; std::vector<uint32_t> return_columns = {0, 1, 2}; reader_context.return_columns = &return_columns; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org