This is an automated email from the ASF dual-hosted git repository.

dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git

commit b77441e055079b9b5d3be1fd6dffe6d2e313288b
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


Reply via email to