[scn] fix failure of mittest after refresh feature scn

This commit is contained in:
obdev
2022-11-28 01:46:42 +00:00
committed by ob-robot
parent 49a02f3304
commit 54b64a7263
1898 changed files with 255804 additions and 280809 deletions

View File

@ -15,6 +15,7 @@
#include <string>
#include <pthread.h>
#include "logservice/palf/scn.h"
#define private public
#include "logservice/palf/lsn_allocator.h"
#undef private
@ -74,7 +75,7 @@ void init_size_array()
void init_offset_allocator()
{
LSN start_lsn(0);
EXPECT_EQ(OB_SUCCESS, golbal_lsn_allocator.init(0, 1, start_lsn));
EXPECT_EQ(OB_SUCCESS, golbal_lsn_allocator.init(0, SCN::base_scn(), start_lsn));
}
TEST_F(TestLSNAllocator, test_struct_field_value_upper_bound)
@ -152,43 +153,43 @@ TEST_F(TestLSNAllocator, test_lsn_allocator_init)
{
LSN start_lsn;
int64_t initial_log_id = OB_INVALID_LOG_ID;
int64_t initial_log_ts = OB_INVALID_TIMESTAMP;
EXPECT_EQ(OB_INVALID_ARGUMENT, lsn_allocator_.init(initial_log_id, initial_log_ts, start_lsn));
SCN initial_log_scn;
EXPECT_EQ(OB_INVALID_ARGUMENT, lsn_allocator_.init(initial_log_id, initial_log_scn, start_lsn));
initial_log_id = 0;
EXPECT_EQ(OB_INVALID_ARGUMENT, lsn_allocator_.init(initial_log_id, initial_log_ts, start_lsn));
initial_log_ts = 1;
EXPECT_EQ(OB_INVALID_ARGUMENT, lsn_allocator_.init(initial_log_id, initial_log_ts, start_lsn));
EXPECT_EQ(OB_INVALID_ARGUMENT, lsn_allocator_.init(initial_log_id, initial_log_scn, start_lsn));
initial_log_scn.set_base();
EXPECT_EQ(OB_INVALID_ARGUMENT, lsn_allocator_.init(initial_log_id, initial_log_scn, start_lsn));
start_lsn.val_ = 0;
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.init(initial_log_id, initial_log_ts, start_lsn));
EXPECT_EQ(OB_INIT_TWICE, lsn_allocator_.init(initial_log_id, initial_log_ts, start_lsn));
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.init(initial_log_id, initial_log_scn, start_lsn));
EXPECT_EQ(OB_INIT_TWICE, lsn_allocator_.init(initial_log_id, initial_log_scn, start_lsn));
}
TEST_F(TestLSNAllocator, test_lsn_allocator_alloc_lsn_ts)
TEST_F(TestLSNAllocator, test_lsn_allocator_alloc_lsn_scn)
{
LSN start_lsn;
int64_t initial_log_id = OB_INVALID_LOG_ID;
int64_t initial_log_ts = OB_INVALID_TIMESTAMP;
SCN initial_log_scn = SCN::min_scn();
initial_log_id = 0;
initial_log_ts = 1;
start_lsn.val_ = 0;
int64_t base_ts = 1000;
SCN b_scn;
b_scn.convert_for_lsn_allocator(1000);
int64_t size = 1000000;
LSN lsn;
int64_t log_id;
int64_t log_ts;
SCN log_scn;
bool is_new_log = false;
bool need_gen_padding_entry = false;
int64_t padding_len = 0;
EXPECT_EQ(OB_NOT_INIT, lsn_allocator_.alloc_lsn_ts(base_ts, size, lsn, log_id, log_ts,
EXPECT_EQ(OB_NOT_INIT, lsn_allocator_.alloc_lsn_scn(b_scn, size, lsn, log_id, log_scn,
is_new_log, need_gen_padding_entry, padding_len));
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.init(initial_log_id, initial_log_ts, start_lsn));
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.init(initial_log_id, initial_log_scn, start_lsn));
int64_t invalid_size = 0;
EXPECT_EQ(OB_INVALID_ARGUMENT, lsn_allocator_.alloc_lsn_ts(base_ts, invalid_size, lsn, log_id, log_ts,
EXPECT_EQ(OB_INVALID_ARGUMENT, lsn_allocator_.alloc_lsn_scn(b_scn, invalid_size, lsn, log_id, log_scn,
is_new_log, need_gen_padding_entry, padding_len));
// test alloc_lsn_ts()
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.alloc_lsn_ts(base_ts, size, lsn, log_id, log_ts,
// test alloc_lsn_scn()
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.alloc_lsn_scn(b_scn, size, lsn, log_id, log_scn,
is_new_log, need_gen_padding_entry, padding_len));
EXPECT_EQ(initial_log_id + 1, log_id);
}
@ -197,53 +198,56 @@ TEST_F(TestLSNAllocator, test_lsn_allocator_truncate)
{
LSN start_lsn;
int64_t initial_log_id = OB_INVALID_LOG_ID;
int64_t initial_log_ts = OB_INVALID_TIMESTAMP;
initial_log_id = 0;
initial_log_ts = 1;
SCN initial_log_scn = SCN::min_scn();
start_lsn.val_ = 0;
LSN tmp_lsn;
int64_t tmp_log_id = 9999;
int64_t tmp_log_ts = 55555;
SCN tmp_log_scn;
tmp_log_scn.convert_for_lsn_allocator(55555);
LSN end_lsn;
int64_t end_log_id = OB_INVALID_LOG_ID;
int64_t base_ts = 1000;
SCN b_scn;
b_scn.convert_for_lsn_allocator(1000);
int64_t size = 1000000;
LSN lsn;
int64_t log_id;
int64_t log_ts;
SCN log_scn;
bool is_new_log = false;
bool need_gen_padding_entry = false;
int64_t padding_len = 0;
// test truncate()
SCN scn;
scn.convert_for_lsn_allocator(10);
const int64_t truncate_log_id = 1024;
EXPECT_EQ(OB_NOT_INIT, lsn_allocator_.truncate(tmp_lsn, truncate_log_id, 10));
EXPECT_EQ(OB_NOT_INIT, lsn_allocator_.inc_update_last_log_info(tmp_lsn, tmp_log_id, tmp_log_ts));
EXPECT_EQ(OB_NOT_INIT, lsn_allocator_.truncate(tmp_lsn, truncate_log_id, scn));
EXPECT_EQ(OB_NOT_INIT, lsn_allocator_.inc_update_last_log_info(tmp_lsn, tmp_log_id, tmp_log_scn));
EXPECT_EQ(OB_NOT_INIT, lsn_allocator_.try_freeze_by_time(end_lsn, end_log_id));
EXPECT_EQ(OB_NOT_INIT, lsn_allocator_.get_curr_end_lsn(end_lsn));
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.init(initial_log_id, initial_log_ts, start_lsn));
EXPECT_EQ(OB_INVALID_ARGUMENT, lsn_allocator_.truncate(tmp_lsn, truncate_log_id, 10));
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.init(initial_log_id, initial_log_scn, start_lsn));
EXPECT_EQ(OB_INVALID_ARGUMENT, lsn_allocator_.truncate(tmp_lsn, truncate_log_id, scn));
tmp_lsn.val_ = 100;
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.truncate(tmp_lsn, truncate_log_id, 10));
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.alloc_lsn_ts(base_ts, size, lsn, log_id, log_ts,
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.truncate(tmp_lsn, truncate_log_id, scn));
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.alloc_lsn_scn(b_scn, size, lsn, log_id, log_scn,
is_new_log, need_gen_padding_entry, padding_len));
EXPECT_EQ(truncate_log_id + 1, log_id);
// test truncate()
tmp_lsn.reset();
EXPECT_EQ(OB_INVALID_ARGUMENT, lsn_allocator_.inc_update_last_log_info(tmp_lsn, tmp_log_id, tmp_log_ts));
EXPECT_EQ(OB_INVALID_ARGUMENT, lsn_allocator_.inc_update_last_log_info(tmp_lsn, tmp_log_id, tmp_log_scn));
tmp_lsn.val_ = 10; // no need update
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.inc_update_last_log_info(tmp_lsn, tmp_log_id, tmp_log_ts));
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.alloc_lsn_ts(base_ts, size, lsn, log_id, log_ts,
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.inc_update_last_log_info(tmp_lsn, tmp_log_id, tmp_log_scn));
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.alloc_lsn_scn(b_scn, size, lsn, log_id, log_scn,
is_new_log, need_gen_padding_entry, padding_len));
EXPECT_EQ(truncate_log_id + 1, log_id); // 聚合到上一条日志中
// update success
tmp_lsn.val_ = 10000000;
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.inc_update_last_log_info(tmp_lsn, tmp_log_id, tmp_log_ts));
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.inc_update_last_log_info(tmp_lsn, tmp_log_id, tmp_log_scn));
size = 2 * 1024 * 1024;
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.alloc_lsn_ts(base_ts, size, lsn, log_id, log_ts,
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.alloc_lsn_scn(b_scn, size, lsn, log_id, log_scn,
is_new_log, need_gen_padding_entry, padding_len));
EXPECT_EQ(tmp_log_id + 1, log_id);
@ -251,11 +255,11 @@ TEST_F(TestLSNAllocator, test_lsn_allocator_truncate)
EXPECT_EQ(OB_STATE_NOT_MATCH, lsn_allocator_.try_freeze_by_time(end_lsn, end_log_id));
// 生成一条新的小日志,预期is_need_cut会为false
size = 10;
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.alloc_lsn_ts(base_ts, size, lsn, log_id, log_ts,
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.alloc_lsn_scn(b_scn, size, lsn, log_id, log_scn,
is_new_log, need_gen_padding_entry, padding_len));
EXPECT_EQ(log_id, lsn_allocator_.get_max_log_id());
EXPECT_EQ(log_ts, lsn_allocator_.get_max_log_ts());
EXPECT_EQ(log_scn, lsn_allocator_.get_max_log_scn());
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.get_curr_end_lsn(end_lsn));
LSN old_end_lsn = end_lsn;
EXPECT_EQ(OB_SUCCESS, lsn_allocator_.try_freeze_by_time(end_lsn, end_log_id));
@ -277,16 +281,16 @@ TEST_F(TestLSNAllocator, test_alloc_offset_single_thread)
int64_t idx = rand() % LOG_LOG_CNT;
const int64_t begin_ts = ObTimeUtility::current_time_ns();
for (int i = 0; i < 1000000; i++) {
int64_t base_ts = 1;
SCN b_scn = SCN::base_scn();
int64_t size = log_size_array[idx];
LSN ret_offset;
int64_t ret_log_id;
int64_t ret_log_ts;
SCN ret_log_scn;
bool is_new_log = false;
bool need_gen_padding_entry = false;
int64_t padding_len = 0;
EXPECT_EQ(OB_SUCCESS, golbal_lsn_allocator.alloc_lsn_ts(base_ts, size, ret_offset, ret_log_id, ret_log_ts,
EXPECT_EQ(OB_SUCCESS, golbal_lsn_allocator.alloc_lsn_scn(b_scn, size, ret_offset, ret_log_id, ret_log_scn,
is_new_log, need_gen_padding_entry, padding_len));
}
int64_t cost = ObTimeUtility::current_time_ns() - begin_ts;
@ -298,7 +302,7 @@ TEST_F(TestLSNAllocator, test_alloc_offset_single_thread)
std::cout << "finish test_alloc_offset_single_thread" << std::endl;
}
// 下面测试多线程alloc_lsn_ts的性能
// 下面测试多线程alloc_lsn_scn的性能
class TestThread
{
public:
@ -323,11 +327,11 @@ public:
static void* routine(void *arg) {
TestThread *test_thread = static_cast<TestThread*>(arg);
int64_t base_ts = 1;
SCN scn = SCN::base_scn();
int64_t size = test_thread->log_size_;
LSN ret_offset;
int64_t ret_log_id;
int64_t ret_log_ts;
SCN ret_log_scn;
bool is_new_log = false;
bool need_gen_padding_entry = false;
int64_t padding_len = 0;
@ -336,7 +340,7 @@ public:
const int64_t begin_ts = ObTimeUtility::current_time_ns();
for (int i = 0; i < 1000; i++) {
// size = log_size_array[i % LOG_LOG_CNT];
EXPECT_EQ(OB_SUCCESS, golbal_lsn_allocator.alloc_lsn_ts(base_ts, size, ret_offset, ret_log_id, ret_log_ts,
EXPECT_EQ(OB_SUCCESS, golbal_lsn_allocator.alloc_lsn_scn(scn, size, ret_offset, ret_log_id, ret_log_scn,
is_new_log, need_gen_padding_entry, padding_len));
}
int64_t cost = ObTimeUtility::current_time_ns() - begin_ts;