Fix sw accum_checksum rollback bug.
This commit is contained in:
@ -32,6 +32,98 @@ using namespace palf;
|
||||
namespace unittest
|
||||
{
|
||||
|
||||
TEST(TestLogGroupEntryHeader, test_group_entry_header_wrap_checksum)
|
||||
{
|
||||
const int64_t BUFSIZE = 1 << 21;
|
||||
LogGroupEntryHeader header;
|
||||
LogEntryHeader log_entry_header;
|
||||
int64_t group_entry_header_size = header.get_serialize_size();
|
||||
int64_t log_entry_header_size = log_entry_header.get_serialize_size();
|
||||
int64_t total_header_size = group_entry_header_size + log_entry_header_size;
|
||||
char buf[BUFSIZE];
|
||||
char ptr[BUFSIZE] = "helloworld";
|
||||
// 数据部分
|
||||
memcpy(buf + total_header_size, ptr, strlen(ptr));
|
||||
|
||||
bool is_padding_log = false;
|
||||
const char *data = buf + total_header_size;
|
||||
int64_t data_len = strlen(ptr);
|
||||
memcpy(buf + total_header_size + data_len + log_entry_header_size, ptr, strlen(ptr));
|
||||
int64_t min_timestamp = 0;
|
||||
share::SCN max_scn = share::SCN::min_scn();
|
||||
int64_t log_id = 1;
|
||||
LSN committed_lsn;
|
||||
committed_lsn.val_ = 1;
|
||||
int64_t proposal_id = 1;
|
||||
int64_t log_checksum = 0;
|
||||
|
||||
// test LogEntry and LogEntryHeader
|
||||
EXPECT_EQ(OB_SUCCESS, log_entry_header.generate_header(data, data_len, share::SCN::base_scn()));
|
||||
int64_t tmp_pos = 0, new_pos = 0;
|
||||
EXPECT_EQ(OB_SUCCESS,
|
||||
log_entry_header.serialize(buf + group_entry_header_size, BUFSIZE, tmp_pos));
|
||||
EXPECT_EQ(tmp_pos, log_entry_header_size);
|
||||
EXPECT_EQ(OB_SUCCESS,
|
||||
log_entry_header.serialize(buf + total_header_size + data_len, BUFSIZE, new_pos));
|
||||
EXPECT_EQ(new_pos, log_entry_header_size);
|
||||
// test LogGroupEntryHeader and LogEntry
|
||||
LogWriteBuf write_buf;
|
||||
|
||||
int64_t group_log_data_len = 0;
|
||||
int64_t group_log_len = group_entry_header_size + (log_entry_header_size + data_len);
|
||||
for (int64_t sub_val = 1; sub_val < group_log_len; ++sub_val) {
|
||||
write_buf.reset();
|
||||
EXPECT_EQ(OB_SUCCESS, write_buf.push_back(buf, sub_val));
|
||||
EXPECT_EQ(OB_SUCCESS, write_buf.push_back(buf + sub_val, group_log_len - sub_val));
|
||||
group_log_data_len = group_log_len - group_entry_header_size;
|
||||
PALF_LOG(INFO, "before group_header generate", K(group_log_data_len), K(write_buf), K(sub_val));
|
||||
EXPECT_EQ(OB_SUCCESS,
|
||||
header.generate(false, is_padding_log, write_buf, group_log_data_len,
|
||||
max_scn, log_id, committed_lsn, proposal_id, log_checksum));
|
||||
}
|
||||
|
||||
is_padding_log = true;
|
||||
for (int64_t sub_val = 1; sub_val < group_log_len; ++sub_val) {
|
||||
write_buf.reset();
|
||||
EXPECT_EQ(OB_SUCCESS, write_buf.push_back(buf, sub_val));
|
||||
EXPECT_EQ(OB_SUCCESS, write_buf.push_back(buf + sub_val, group_log_len - sub_val));
|
||||
group_log_data_len = group_log_len - group_entry_header_size;
|
||||
PALF_LOG(INFO, "before group_header generate", K(group_log_data_len), K(write_buf), K(sub_val));
|
||||
EXPECT_EQ(OB_SUCCESS,
|
||||
header.generate(false, is_padding_log, write_buf, group_log_data_len,
|
||||
max_scn, log_id, committed_lsn, proposal_id, log_checksum));
|
||||
}
|
||||
|
||||
group_log_len = group_entry_header_size + 2 * (log_entry_header_size + data_len);
|
||||
for (int64_t sub_val = 1; sub_val < group_log_len; ++sub_val) {
|
||||
write_buf.reset();
|
||||
EXPECT_EQ(OB_SUCCESS, write_buf.push_back(buf, sub_val));
|
||||
EXPECT_EQ(OB_SUCCESS, write_buf.push_back(buf + sub_val, group_log_len - sub_val));
|
||||
group_log_data_len = group_log_len - group_entry_header_size;
|
||||
PALF_LOG(INFO, "before group_header generate", K(group_log_data_len), K(write_buf), K(sub_val));
|
||||
EXPECT_EQ(OB_SUCCESS,
|
||||
header.generate(false, is_padding_log, write_buf, group_log_data_len,
|
||||
max_scn, log_id, committed_lsn, proposal_id, log_checksum));
|
||||
}
|
||||
|
||||
is_padding_log = true;
|
||||
for (int64_t sub_val = 1; sub_val < group_log_len; ++sub_val) {
|
||||
write_buf.reset();
|
||||
EXPECT_EQ(OB_SUCCESS, write_buf.push_back(buf, sub_val));
|
||||
EXPECT_EQ(OB_SUCCESS, write_buf.push_back(buf + sub_val, group_log_len - sub_val));
|
||||
group_log_data_len = group_log_len - group_entry_header_size;
|
||||
PALF_LOG(INFO, "before group_header generate", K(group_log_data_len), K(write_buf), K(sub_val));
|
||||
EXPECT_EQ(OB_SUCCESS,
|
||||
header.generate(false, is_padding_log, write_buf, group_log_data_len,
|
||||
max_scn, log_id, committed_lsn, proposal_id, log_checksum));
|
||||
}
|
||||
|
||||
is_padding_log = true;
|
||||
EXPECT_EQ(OB_SUCCESS,
|
||||
header.generate(false, is_padding_log, write_buf, group_log_data_len,
|
||||
max_scn, log_id, committed_lsn, proposal_id, log_checksum));
|
||||
}
|
||||
|
||||
TEST(TestLogGroupEntryHeader, test_log_group_entry_header)
|
||||
{
|
||||
const int64_t BUFSIZE = 1 << 21;
|
||||
@ -78,8 +170,6 @@ TEST(TestLogGroupEntryHeader, test_log_group_entry_header)
|
||||
max_scn, log_id, committed_lsn, proposal_id, log_checksum));
|
||||
max_scn.set_base();
|
||||
int64_t defalut_acc = 10;
|
||||
header.update_accumulated_checksum(defalut_acc);
|
||||
header.update_header_checksum();
|
||||
min_timestamp = 1;
|
||||
EXPECT_EQ(OB_SUCCESS,
|
||||
header.generate(false, is_padding_log, write_buf, data_len + log_entry_header_size,
|
||||
@ -92,8 +182,6 @@ TEST(TestLogGroupEntryHeader, test_log_group_entry_header)
|
||||
EXPECT_EQ(data_len + log_entry_header_size, header.get_data_len());
|
||||
EXPECT_EQ(max_scn, header.get_max_scn());
|
||||
EXPECT_EQ(log_id, header.get_log_id());
|
||||
EXPECT_EQ(proposal_id, header.get_log_proposal_id());
|
||||
EXPECT_EQ(committed_lsn, header.get_committed_end_lsn());
|
||||
int64_t pos = 0;
|
||||
EXPECT_EQ(OB_SUCCESS, header.serialize(buf, BUFSIZE, pos));
|
||||
EXPECT_EQ(pos, header.get_serialize_size());
|
||||
|
||||
Reference in New Issue
Block a user