[scn] fix implement of convert_for_tx
This commit is contained in:
parent
cda6fed9b5
commit
57241dad38
@ -354,7 +354,7 @@ int SCN::convert_for_tx(int64_t val)
|
||||
int ret = OB_SUCCESS;
|
||||
if (INT64_MAX == val) {
|
||||
val_ = OB_MAX_SCN_TS_NS;
|
||||
} else if (OB_UNLIKELY(OB_MAX_SCN_TS_NS < val || OB_MIN_SCN_TS_NS > val)) {
|
||||
} else if (OB_UNLIKELY(val < 0 || OB_MAX_SCN_TS_NS < val)) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
PALF_LOG(ERROR, "invalid argument", K(val), K(lbt()));
|
||||
} else {
|
||||
@ -366,10 +366,10 @@ int SCN::convert_for_tx(int64_t val)
|
||||
int64_t SCN::get_val_for_tx() const
|
||||
{
|
||||
int64_t result_val = 0;
|
||||
if (OB_MAX_SCN_TS_NS == ts_ns_) {
|
||||
result_val = INT64_MAX;
|
||||
} else if (!is_valid()) {
|
||||
if (!is_valid()) {
|
||||
PALF_LOG(ERROR, "invalid SCN", K(val_));
|
||||
} else if (OB_MAX_SCN_TS_NS == ts_ns_) {
|
||||
result_val = INT64_MAX;
|
||||
} else {
|
||||
result_val = ts_ns_;
|
||||
}
|
||||
|
@ -30,6 +30,5 @@ ob_unittest(test_log_config_mgr)
|
||||
ob_unittest(test_clear_up_tmp_files)
|
||||
ob_unittest(test_log_dir_match)
|
||||
ob_unittest(test_server_log_block_mgr)
|
||||
log_unittest(test_scn)
|
||||
log_unittest(test_role_change_handler)
|
||||
log_unittest(test_log_mode_mgr)
|
||||
|
@ -55,6 +55,7 @@ ob_unittest(test_ob_future)
|
||||
ob_unittest(test_qsync_lock lock/test_qsync_lock.cpp)
|
||||
ob_unittest(test_ob_occam_time_guard)
|
||||
ob_unittest(test_cluster_version)
|
||||
ob_unittest(test_scn)
|
||||
|
||||
add_subdirectory(allocator)
|
||||
add_subdirectory(auto_increment)
|
||||
|
@ -110,6 +110,46 @@ TEST(TestSCN, test_scn)
|
||||
EXPECT_EQ(4611686018427387903, scn_max.get_val_for_inner_table_field());
|
||||
EXPECT_EQ(1, scn_base.get_val_for_inner_table_field());
|
||||
|
||||
//test get_val_for_tx() and get_val_for_tx()
|
||||
//
|
||||
scn1.reset();
|
||||
scn2.reset();
|
||||
EXPECT_EQ(OB_INVALID_ARGUMENT, scn1.convert_for_tx(-1));
|
||||
EXPECT_EQ(OB_INVALID_ARGUMENT, scn1.convert_for_tx(INT64_MAX-1));
|
||||
EXPECT_EQ(OB_INVALID_ARGUMENT, scn1.convert_for_tx(4611686018427387904));
|
||||
EXPECT_EQ(OB_SUCCESS, scn1.convert_for_tx(4611686018427387903));
|
||||
EXPECT_TRUE(scn1.is_max());
|
||||
EXPECT_EQ(INT64_MAX, scn1.get_val_for_tx());
|
||||
scn1.reset();
|
||||
EXPECT_EQ(OB_SUCCESS, scn1.convert_for_tx(INT64_MAX));
|
||||
EXPECT_TRUE(scn1.is_max());
|
||||
EXPECT_EQ(INT64_MAX, scn1.get_val_for_tx());
|
||||
|
||||
EXPECT_EQ(OB_SUCCESS, scn1.convert_for_tx(0));
|
||||
EXPECT_TRUE(scn1.is_min());
|
||||
EXPECT_EQ(0, scn1.get_val_for_tx());
|
||||
|
||||
EXPECT_EQ(OB_SUCCESS, scn1.convert_for_tx(1));
|
||||
EXPECT_TRUE(scn1 == SCN::base_scn());
|
||||
EXPECT_EQ(1, scn1.get_val_for_tx());
|
||||
|
||||
EXPECT_TRUE(scn1.is_valid());
|
||||
scn1.reset();
|
||||
EXPECT_EQ(OB_INVALID_ARGUMENT, scn1.convert_for_inner_table_field(-1));
|
||||
EXPECT_FALSE(scn1.is_valid());
|
||||
scn1.reset();
|
||||
EXPECT_EQ(OB_INVALID_ARGUMENT, scn1.convert_for_inner_table_field(4611686018427387904));
|
||||
EXPECT_FALSE(scn1.is_valid());
|
||||
EXPECT_EQ(OB_SUCCESS, scn1.convert_for_inner_table_field(4611686018427387903));
|
||||
EXPECT_TRUE(scn1.is_valid());
|
||||
EXPECT_EQ(4611686018427387903, scn1.get_val_for_inner_table_field());
|
||||
EXPECT_EQ(OB_SUCCESS, scn1.convert_for_inner_table_field(100000));
|
||||
EXPECT_TRUE(scn1.is_valid());
|
||||
EXPECT_EQ(OB_SUCCESS, scn2.convert_for_inner_table_field(90000));
|
||||
EXPECT_TRUE(scn2.is_valid());
|
||||
|
||||
|
||||
|
||||
// Test operator <
|
||||
EXPECT_FALSE(scn1 == scn2);
|
||||
EXPECT_TRUE(scn1 == scn3);
|
Loading…
x
Reference in New Issue
Block a user