[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:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user