patch 4.0

This commit is contained in:
wangzelin.wzl
2022-10-24 10:34:53 +08:00
parent 4ad6e00ec3
commit 93a1074b0c
10533 changed files with 2588271 additions and 2299373 deletions

View File

@ -21,12 +21,14 @@
#include <gtest/gtest.h>
#include <thread>
namespace oceanbase {
namespace unittest {
namespace oceanbase
{
namespace unittest
{
using namespace oceanbase::common;
using namespace oceanbase::keybtree;
using namespace oceanbase::memtable;
using ObQueryEngineIterator = ObQueryEngine::Iterator<TScanHandle>;
using ObQueryEngineIterator = ObQueryEngine::Iterator<BtreeIterator>;
TEST(TestObQueryEngine, get_and_set_table_index_node)
{
@ -35,11 +37,10 @@ TEST(TestObQueryEngine, get_and_set_table_index_node)
constexpr int64_t THREAD_COUNT = 20;
ObModAllocator allocator;
ObQueryEngine qe(allocator);
ObQueryEngine::TableIndexNode* table_index_nodes[TABLE_COUNT_LIMIT];
ObQueryEngine::TableIndex *table_index = nullptr;
uint64_t counter = 0;
int ret = OB_SUCCESS;
memset(table_index_nodes, 0, sizeof(table_index_nodes));
ret = qe.init(1);
EXPECT_EQ(OB_SUCCESS, ret);
@ -47,23 +48,15 @@ TEST(TestObQueryEngine, get_and_set_table_index_node)
for (int64_t i = 0; i < THREAD_COUNT; ++i) {
threads[i] = std::thread([&]() {
int ret = OB_SUCCESS;
ObQueryEngine::TableIndexNode* tmp_ptr = nullptr;
for (int64_t j = 0; j < TABLE_COUNT_LIMIT; ++j) {
if (OB_FAIL(qe.get_table_index_node(j, tmp_ptr))) {
EXPECT_EQ(OB_TABLE_NOT_EXIST, ret);
ret = qe.set_table_index_node(j, 1, tmp_ptr);
}
// select or update must succeed.
EXPECT_EQ(OB_SUCCESS, ret);
EXPECT_TRUE(OB_NOT_NULL(tmp_ptr));
if (ATOMIC_BCAS(table_index_nodes + j, nullptr, tmp_ptr)) {
// if update address successfully, then counter it.
ATOMIC_INC(&counter);
} else {
// else it must be equal with old_val.
EXPECT_EQ(ATOMIC_LOAD(table_index_nodes + j), tmp_ptr);
}
tmp_ptr = nullptr;
ObQueryEngine::TableIndex *tmp_ptr = nullptr;
if (OB_FAIL(qe.set_table_index(i, tmp_ptr))) {
TRANS_LOG(WARN, "", KR(ret));
} else {
ATOMIC_AAF(&counter, 1);
ObQueryEngine::TableIndex *cmp_ptr = nullptr;
EXPECT_NE(nullptr, tmp_ptr);
EXPECT_EQ(OB_SUCCESS, qe.get_table_index(cmp_ptr));
EXPECT_EQ(tmp_ptr, cmp_ptr);
}
});
}
@ -72,7 +65,7 @@ TEST(TestObQueryEngine, get_and_set_table_index_node)
threads[i].join();
}
EXPECT_EQ(counter, TABLE_COUNT_LIMIT);
EXPECT_EQ(counter, THREAD_COUNT);
}
TEST(TestObQueryEngine, smoke_test)
@ -82,28 +75,30 @@ TEST(TestObQueryEngine, smoke_test)
int ret = OB_SUCCESS;
ObModAllocator allocator;
ObQueryEngine qe(allocator);
ObMemtableKey* mtk[R_COUNT];
ObMemtableKey *mtk[R_COUNT];
ObMvccTransNode tdn[R_COUNT];
ObMvccRow mtv[R_COUNT];
auto init_mtv = [&](ObMvccRow& mtv, ObMvccTransNode& node) { mtv.list_head_ = &node; };
auto test_set_and_get = [&](ObMemtableKey* mtk, ObMvccRow& mtv) {
auto init_mtv = [&](ObMvccRow &mtv, ObMvccTransNode &node) {
mtv.list_head_ = &node;
};
auto test_set_and_get = [&](ObMemtableKey *mtk, ObMvccRow &mtv) {
int ret = OB_SUCCESS;
ret = qe.set(mtk, &mtv);
EXPECT_EQ(OB_SUCCESS, ret);
ObMemtableKey t;
ObMvccRow* v = nullptr;
ObMvccRow *v = nullptr;
ret = qe.get(mtk, v, &t);
EXPECT_EQ(OB_SUCCESS, ret);
EXPECT_EQ(v, &mtv);
};
auto test_ensure = [&](ObMemtableKey* mtk, ObMvccRow& mtv) {
auto test_ensure = [&](ObMemtableKey *mtk, ObMvccRow &mtv) {
int ret = OB_SUCCESS;
ret = qe.ensure(mtk, &mtv);
EXPECT_EQ(OB_SUCCESS, ret);
};
auto test_scan = [&](int64_t start, bool include_start, int64_t end, bool include_end) {
ObIQueryEngineIterator* iter = nullptr;
ObIQueryEngineIterator *iter = nullptr;
ret = qe.scan(mtk[start], !include_start, mtk[end], !include_end, 1, iter);
bool skip_purge_memtable = false;
EXPECT_EQ(OB_SUCCESS, ret);
@ -118,7 +113,7 @@ TEST(TestObQueryEngine, smoke_test)
for (int64_t i = (include_start ? start : (start - 1)); i >= (include_end ? end : (end + 1)); i--) {
ret = iter->next(skip_purge_memtable);
EXPECT_EQ(OB_SUCCESS, ret);
assert(0 == mtk[i]->compare(*iter->get_key()));
assert(0 == mtk[i]->compare(*iter->get_key()));
EXPECT_EQ(&mtv[i], iter->get_value());
}
}
@ -132,12 +127,12 @@ TEST(TestObQueryEngine, smoke_test)
ret = qe.init(1);
EXPECT_EQ(OB_SUCCESS, ret);
INIT_MTK(allocator, mtk[0], 1000, V("aaaa", 4), I(1024), N("1234567890.01234567890"));
INIT_MTK(allocator, mtk[1], 1000, V("aaaa", 4), I(1024), N("1234567890.01234567891"));
INIT_MTK(allocator, mtk[2], 1000, V("aaaa", 4), I(2048), N("1234567890.01234567890"));
INIT_MTK(allocator, mtk[3], 1000, V("aaaa", 4), I(2048), N("1234567890.01234567891"));
INIT_MTK(allocator, mtk[4], 1000, V("bbbb", 4), I(2048), N("1234567890.01234567890"));
INIT_MTK(allocator, mtk[5], 1000, V("bbbb", 4), I(2048), N("1234567890.01234567891"));
INIT_MTK(allocator, mtk[0], V("aaaa", 4), I(1024), N("1234567890.01234567890"));
INIT_MTK(allocator, mtk[1], V("aaaa", 4), I(1024), N("1234567890.01234567891"));
INIT_MTK(allocator, mtk[2], V("aaaa", 4), I(2048), N("1234567890.01234567890"));
INIT_MTK(allocator, mtk[3], V("aaaa", 4), I(2048), N("1234567890.01234567891"));
INIT_MTK(allocator, mtk[4], V("bbbb", 4), I(2048), N("1234567890.01234567890"));
INIT_MTK(allocator, mtk[5], V("bbbb", 4), I(2048), N("1234567890.01234567891"));
init_mtv(mtv[0], tdn[0]);
init_mtv(mtv[1], tdn[1]);
@ -167,45 +162,45 @@ TEST(TestObQueryEngine, smoke_test)
EXPECT_EQ(R_COUNT, qe.btree_size());
test_scan(0, true, 5, true);
test_scan(0, true, 5, true);
test_scan(0, false, 5, true);
test_scan(0, true, 5, false);
test_scan(0, true, 5, false);
test_scan(0, false, 5, false);
test_scan(5, true, 0, true);
test_scan(5, true, 0, true);
test_scan(5, false, 0, true);
test_scan(5, true, 0, false);
test_scan(5, true, 0, false);
test_scan(5, false, 0, false);
test_scan(1, true, 4, true);
test_scan(1, true, 4, true);
test_scan(1, false, 4, true);
test_scan(1, true, 4, false);
test_scan(1, true, 4, false);
test_scan(1, false, 4, false);
test_scan(4, true, 1, true);
test_scan(4, true, 1, true);
test_scan(4, false, 1, true);
test_scan(4, true, 1, false);
test_scan(4, true, 1, false);
test_scan(4, false, 1, false);
test_scan(0, true, 0, true);
test_scan(1, true, 1, true);
test_scan(2, true, 2, true);
test_scan(3, true, 3, true);
test_scan(4, true, 4, true);
test_scan(5, true, 5, true);
test_scan(0, true, 0, true);
test_scan(1, true, 1, true);
test_scan(2, true, 2, true);
test_scan(3, true, 3, true);
test_scan(4, true, 4, true);
test_scan(5, true, 5, true);
test_scan(0, false, 0, false);
test_scan(1, false, 1, false);
test_scan(2, false, 2, false);
test_scan(3, false, 3, false);
test_scan(4, false, 4, false);
test_scan(5, false, 5, false);
test_scan(0, false, 0, false);
test_scan(1, false, 1, false);
test_scan(2, false, 2, false);
test_scan(3, false, 3, false);
test_scan(4, false, 4, false);
test_scan(5, false, 5, false);
}
} // namespace unittest
} // namespace oceanbase
}
}
int main(int argc, char** argv)
int main(int argc, char **argv)
{
oceanbase::common::ObLogger::get_logger().set_file_name("test_query_engine.log", true);
oceanbase::common::ObLogger::get_logger().set_log_level("INFO");