[FEAT MERGE] log4100 branch

Co-authored-by: tino247 <tino247@126.com>
Co-authored-by: BinChenn <binchenn.bc@gmail.com>
Co-authored-by: HaHaJeff <jeffzhouhhh@gmail.com>
This commit is contained in:
obdev
2023-01-28 18:17:31 +08:00
committed by ob-robot
parent a269ffe6be
commit 50024b39cd
772 changed files with 60275 additions and 11301 deletions

View File

@ -10,6 +10,7 @@
* See the Mulan PubL v2 for more details.
*/
#define OB_TX_LOG_TEST
#include <gtest/gtest.h>
#define private public
#include "storage/tx/ob_tx_log.h"
@ -665,6 +666,136 @@ TEST_F(TestObTxLog, TestComapt)
}
void test_big_commit_info_log(int64_t log_size)
{
ObTxLogBlock fill_block;
ObTxLogBlock replay_block;
ObTxBigSegmentBuf fill_big_segment;
ObTxBigSegmentBuf replay_big_segment;
ObLSArray TEST_LS_ARRAY;
TEST_LS_ARRAY.push_back(LSKey());
ObRedoLSNArray TEST_BIG_REDO_LSN_ARRAY;
for (int i = 0; i < log_size / sizeof(palf::LSN); i++) {
TEST_BIG_REDO_LSN_ARRAY.push_back(palf::LSN(i));
}
EXPECT_EQ(TEST_BIG_REDO_LSN_ARRAY.count(), log_size / sizeof(palf::LSN));
ObTxCommitInfoLog fill_commit_state(TEST_ADDR, TEST_LS_ARRAY, TEST_LS_KEY, TEST_IS_SUB2PC,
TEST_IS_DUP, TEST_CAN_ELR, TEST_TRACE_ID_STR, TEST_TRCE_INFO,
TEST_LOG_OFFSET, TEST_BIG_REDO_LSN_ARRAY, TEST_LS_ARRAY,
TEST_CLUSTER_VERSION, TEST_XID);
ObTxLogBlockHeader fill_block_header(TEST_ORG_CLUSTER_ID, TEST_LOG_ENTRY_NO,
ObTransID(TEST_TX_ID));
ASSERT_EQ(OB_SUCCESS, fill_block.init(TEST_TX_ID, fill_block_header));
ASSERT_EQ(OB_LOG_TOO_LARGE, fill_block.add_new_log(fill_commit_state, &fill_big_segment));
const char *submit_buf = nullptr;
int64_t submit_buf_len = 0;
uint64_t part_count = 0;
ObTxLogHeader log_type_header;
int ret = OB_SUCCESS;
while (OB_SUCC(ret)
&& OB_EAGAIN
== (ret = (fill_block.acquire_segment_log_buf(submit_buf, submit_buf_len,
fill_block_header,
ObTxLogType::TX_COMMIT_INFO_LOG)))) {
share::SCN tmp_scn;
EXPECT_EQ(OB_SUCCESS, tmp_scn.convert_for_inner_table_field(part_count));
if (OB_FAIL(fill_block.set_prev_big_segment_scn(tmp_scn))) {
TRANS_LOG(WARN, "set prev big segment scn failed", K(ret), K(part_count));
} else {
replay_block.reset();
TxID id = 0;
ObTxLogBlockHeader replay_block_header;
ASSERT_EQ(OB_SUCCESS,
replay_block.init_with_header(submit_buf, submit_buf_len, id, replay_block_header));
if (OB_FAIL(replay_block.get_next_log(log_type_header, &replay_big_segment))) {
TRANS_LOG(WARN, "get next log failed", K(ret), K(part_count));
EXPECT_EQ(OB_LOG_TOO_LARGE, ret);
EXPECT_EQ(ObTxLogType::TX_BIG_SEGMENT_LOG, log_type_header.get_tx_log_type());
ret = OB_SUCCESS;
}
TRANS_LOG(INFO, "collect one part from fill_big_segment", K(ret), K(part_count),
K(log_type_header), K(replay_big_segment));
}
part_count++;
}
// EXPECT_EQ(ObTxLogType::TX_COMMIT_INFO_LOG, log_type_header.get_tx_log_type());
if (OB_ITER_END == ret) {
replay_block.reset();
TxID id = 0;
ObTxLogBlockHeader replay_block_header;
ASSERT_EQ(OB_SUCCESS,
replay_block.init_with_header(submit_buf, submit_buf_len, id, replay_block_header));
if (OB_FAIL(replay_block.get_next_log(log_type_header, &replay_big_segment))) {
TRANS_LOG(WARN, "get next log failed", K(ret), K(part_count));
}
EXPECT_EQ(OB_SUCCESS, ret);
EXPECT_EQ(ObTxLogType::TX_COMMIT_INFO_LOG, log_type_header.get_tx_log_type());
TRANS_LOG(INFO, "collect one part from fill_big_segment", K(ret), K(part_count),
K(log_type_header), K(replay_big_segment));
part_count++;
}
int64_t TOTAL_PART_COUNT =
fill_commit_state.get_serialize_size() / common::OB_MAX_LOG_ALLOWED_SIZE;
if (fill_commit_state.get_serialize_size() % common::OB_MAX_LOG_ALLOWED_SIZE > 0) {
TOTAL_PART_COUNT++;
}
TRANS_LOG(INFO, "TOTAL PART COUNT", K(TOTAL_PART_COUNT), K(part_count));
EXPECT_EQ(TOTAL_PART_COUNT, part_count);
ObTxCommitInfoLogTempRef commit_state_temp_ref;
ObTxCommitInfoLog replay_commit_state(commit_state_temp_ref);
EXPECT_EQ(OB_SUCCESS, replay_block.deserialize_log_body(replay_commit_state));
int64_t fill_member_cnt = 0;
int64_t replay_member_cnt = 0;
fill_member_cnt = replay_member_cnt = 0;
fill_member_cnt = fill_commit_state.compat_bytes_.total_obj_cnt_;
EXPECT_EQ(fill_commit_state.get_scheduler(), replay_commit_state.get_scheduler());
replay_member_cnt++;
EXPECT_EQ(fill_commit_state.get_participants().count(),
replay_commit_state.get_participants().count());
replay_member_cnt++;
EXPECT_EQ(fill_commit_state.get_upstream(), replay_commit_state.get_upstream());
replay_member_cnt++;
EXPECT_EQ(fill_commit_state.is_sub2pc(), replay_commit_state.is_sub2pc());
replay_member_cnt++;
EXPECT_EQ(fill_commit_state.is_dup_tx(), replay_commit_state.is_dup_tx());
replay_member_cnt++;
EXPECT_EQ(fill_commit_state.is_elr(), replay_commit_state.is_elr());
replay_member_cnt++;
EXPECT_EQ(fill_commit_state.get_incremental_participants().count(),
replay_commit_state.get_incremental_participants().count());
replay_member_cnt++;
EXPECT_EQ(fill_commit_state.get_cluster_version(), replay_commit_state.get_cluster_version());
replay_member_cnt++;
EXPECT_EQ(fill_commit_state.get_app_trace_id().length(),
replay_commit_state.get_app_trace_id().length());
replay_member_cnt++;
EXPECT_EQ(fill_commit_state.get_app_trace_info().length(),
replay_commit_state.get_app_trace_info().length());
replay_member_cnt++;
EXPECT_EQ(fill_commit_state.get_prev_record_lsn(), replay_commit_state.get_prev_record_lsn());
replay_member_cnt++;
EXPECT_EQ(fill_commit_state.get_redo_lsns().count(), replay_commit_state.get_redo_lsns().count());
replay_member_cnt++;
EXPECT_EQ(fill_commit_state.get_xid(), replay_commit_state.get_xid());
replay_member_cnt++;
EXPECT_EQ(replay_member_cnt, fill_member_cnt);
}
TEST_F(TestObTxLog, test_big_segment_log)
{
test_big_commit_info_log(2*1024*1024);
test_big_commit_info_log(10*1024*1024);
}
} // namespace unittest
} // namespace oceanbase