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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]