[FEAT MERGE] MySQL lock functions and DMBS_LOCK.RELEASE

This commit is contained in:
YangEfei
2024-04-16 17:16:58 +00:00
committed by ob-robot
parent 0d6f3a8316
commit 7a78d20312
105 changed files with 8447 additions and 2566 deletions

View File

@ -295,11 +295,10 @@ TEST_F(ObTableLockServiceTest, lock_table)
{
LOG_INFO("ObTableLockServiceTest::lock_table");
int ret = OB_SUCCESS;
ObTableLockOwnerID OWNER_ONE(1);
ObTableLockOwnerID OWNER_TWO(2);
ObTableLockOwnerID out_trans_owner_1(ObTableLockOwnerID::get_owner_by_value(1));
ObTableLockOwnerID out_trans_owner_2(ObTableLockOwnerID::get_owner_by_value(2));
uint64_t table_id = 0;
ObTableLockMode lock_mode = EXCLUSIVE;
ObTableLockOwnerID lock_owner(0);
share::ObTenantSwitchGuard tenant_guard;
ret = tenant_guard.switch_to(OB_SYS_TENANT_ID);
@ -311,7 +310,7 @@ TEST_F(ObTableLockServiceTest, lock_table)
get_table_id("t_one_part", table_id);
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_SUCCESS, ret);
// 1.2 lock multi part table
@ -319,7 +318,7 @@ TEST_F(ObTableLockServiceTest, lock_table)
get_table_id("t_multi_part", table_id);
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_TWO);
out_trans_owner_2);
ASSERT_EQ(OB_SUCCESS, ret);
// 2. UNLOCK TABLE
@ -328,14 +327,14 @@ TEST_F(ObTableLockServiceTest, lock_table)
get_table_id("t_one_part", table_id);
ret = MTL(ObTableLockService*)->unlock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_SUCCESS, ret);
// 2.2 unlock multi part table
LOG_INFO("ObTableLockServiceTest::lock_table 2.2");
get_table_id("t_multi_part", table_id);
ret = MTL(ObTableLockService*)->unlock_table(table_id,
lock_mode,
OWNER_TWO);
out_trans_owner_2);
ASSERT_EQ(OB_SUCCESS, ret);
// 3. UNLOCK NOT EXIST LOCK
@ -344,23 +343,23 @@ TEST_F(ObTableLockServiceTest, lock_table)
get_table_id("t_one_part", table_id);
ret = MTL(ObTableLockService*)->unlock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_OBJ_LOCK_NOT_EXIST, ret);
// 3.2 check unlock with no lock of the specified owner
LOG_INFO("ObTableLockServiceTest::lock_table 3.2");
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_SUCCESS, ret);
ret = MTL(ObTableLockService*)->unlock_table(table_id,
lock_mode,
OWNER_TWO);
out_trans_owner_2);
ASSERT_EQ(OB_OBJ_LOCK_NOT_EXIST, ret);
// 3.3 check unlock with no lock of specified lock mode
LOG_INFO("ObTableLockServiceTest::lock_table 3.3");
ret = MTL(ObTableLockService*)->unlock_table(table_id,
SHARE,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_OBJ_LOCK_NOT_EXIST, ret);
// 4. LOCK TWICE
@ -368,11 +367,11 @@ TEST_F(ObTableLockServiceTest, lock_table)
get_table_id("t_one_part", table_id);
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_SUCCESS, ret);
ret = MTL(ObTableLockService*)->unlock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_SUCCESS, ret);
}
@ -389,8 +388,8 @@ TEST_F(ObTableLockServiceTest, lock_part)
uint64_t table_id = 0;
ObSEArray<ObObjectID, 1> part_ids;
ObTableLockMode lock_mode = ROW_EXCLUSIVE;
ObTableLockOwnerID OWNER_ONE(1);
ObTableLockOwnerID OWNER_TWO(2);
ObTableLockOwnerID out_trans_owner_1(ObTableLockOwnerID::get_owner_by_value(1));
ObTableLockOwnerID out_trans_owner_2(ObTableLockOwnerID::get_owner_by_value(2));
ObLockPartitionRequest lock_arg;
ObUnLockPartitionRequest unlock_arg;
@ -416,7 +415,7 @@ TEST_F(ObTableLockServiceTest, lock_part)
get_table_part_ids(table_id, part_ids);
lock_mode = ROW_EXCLUSIVE;
lock_arg.owner_id_ = OWNER_ONE;
lock_arg.owner_id_ = out_trans_owner_1;
lock_arg.lock_mode_ = lock_mode;
lock_arg.op_type_ = OUT_TRANS_LOCK;
lock_arg.timeout_us_ = 0;
@ -433,7 +432,7 @@ TEST_F(ObTableLockServiceTest, lock_part)
lock_mode = SHARE;
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_TWO);
out_trans_owner_2);
ASSERT_EQ(OB_EAGAIN, ret);
// 2. COMMIT
@ -449,7 +448,7 @@ TEST_F(ObTableLockServiceTest, lock_part)
lock_mode = SHARE;
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_TWO);
out_trans_owner_2);
ASSERT_EQ(OB_EAGAIN, ret);
// 4. UNLOCK
@ -462,7 +461,7 @@ TEST_F(ObTableLockServiceTest, lock_part)
get_table_part_ids(table_id, part_ids);
lock_mode = ROW_EXCLUSIVE;
unlock_arg.owner_id_ = OWNER_ONE;
unlock_arg.owner_id_ = out_trans_owner_1;
unlock_arg.lock_mode_ = lock_mode;
unlock_arg.op_type_ = OUT_TRANS_UNLOCK;
unlock_arg.timeout_us_ = 0;
@ -485,11 +484,11 @@ TEST_F(ObTableLockServiceTest, lock_part)
lock_mode = SHARE;
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_TWO);
out_trans_owner_2);
ASSERT_EQ(OB_SUCCESS, ret);
ret = MTL(ObTableLockService*)->unlock_table(table_id,
lock_mode,
OWNER_TWO);
out_trans_owner_2);
ASSERT_EQ(OB_SUCCESS, ret);
}
@ -502,11 +501,10 @@ TEST_F(ObTableLockServiceTest, lock_tablet)
// 2.1 unlock tablet of one part table
// 2.2 unlock tablet of multi part table
int ret = OB_SUCCESS;
ObTableLockOwnerID OWNER_ONE(1);
ObTableLockOwnerID OWNER_TWO(2);
ObTableLockOwnerID out_trans_owner_1(ObTableLockOwnerID::get_owner_by_value(1));
ObTableLockOwnerID out_trans_owner_2(ObTableLockOwnerID::get_owner_by_value(2));
uint64_t table_id = 0;
ObTableLockMode lock_mode = EXCLUSIVE;
ObTableLockOwnerID lock_owner(0);
share::ObTenantSwitchGuard tenant_guard;
ObTabletIDArray tablet_list;
@ -521,7 +519,7 @@ TEST_F(ObTableLockServiceTest, lock_tablet)
ret = MTL(ObTableLockService*)->lock_tablet(table_id,
tablet_list[0],
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_SUCCESS, ret);
// 1.2 lock multi part table
@ -531,7 +529,7 @@ TEST_F(ObTableLockServiceTest, lock_tablet)
ret = MTL(ObTableLockService*)->lock_tablet(table_id,
tablet_list[0],
lock_mode,
OWNER_TWO);
out_trans_owner_2);
ASSERT_EQ(OB_SUCCESS, ret);
// 2. UNLOCK TABLE
@ -542,7 +540,7 @@ TEST_F(ObTableLockServiceTest, lock_tablet)
ret = MTL(ObTableLockService*)->unlock_tablet(table_id,
tablet_list[0],
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_SUCCESS, ret);
// 2.2 unlock multi part table
LOG_INFO("ObTableLockServiceTest::lock_tablet 2.2");
@ -551,7 +549,7 @@ TEST_F(ObTableLockServiceTest, lock_tablet)
ret = MTL(ObTableLockService*)->unlock_tablet(table_id,
tablet_list[0],
lock_mode,
OWNER_TWO);
out_trans_owner_2);
ASSERT_EQ(OB_SUCCESS, ret);
// 3. UNLOCK NOT EXIST LOCK
@ -562,26 +560,26 @@ TEST_F(ObTableLockServiceTest, lock_tablet)
ret = MTL(ObTableLockService*)->unlock_tablet(table_id,
tablet_list[0],
lock_mode,
OWNER_ONE);
out_trans_owner_2);
ASSERT_EQ(OB_OBJ_LOCK_NOT_EXIST, ret);
// 3.2 check unlock with no lock of the specified owner
LOG_INFO("ObTableLockServiceTest::lock_tablet 3.2");
ret = MTL(ObTableLockService*)->lock_tablet(table_id,
tablet_list[0],
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_SUCCESS, ret);
ret = MTL(ObTableLockService*)->unlock_tablet(table_id,
tablet_list[0],
lock_mode,
OWNER_TWO);
out_trans_owner_2);
ASSERT_EQ(OB_OBJ_LOCK_NOT_EXIST, ret);
// 3.3 check unlock with no lock of specified lock mode
LOG_INFO("ObTableLockServiceTest::lock_tablet 3.3");
ret = MTL(ObTableLockService*)->unlock_tablet(table_id,
tablet_list[0],
SHARE,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_OBJ_LOCK_NOT_EXIST, ret);
// 4. LOCK TWICE
@ -591,12 +589,12 @@ TEST_F(ObTableLockServiceTest, lock_tablet)
ret = MTL(ObTableLockService*)->lock_tablet(table_id,
tablet_list[0],
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_SUCCESS, ret);
ret = MTL(ObTableLockService*)->unlock_tablet(table_id,
tablet_list[0],
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_SUCCESS, ret);
}
@ -613,7 +611,8 @@ TEST_F(ObTableLockServiceTest, in_trans_lock_table)
ObTransService *txs = nullptr;
uint64_t table_id = 0;
ObTableLockMode lock_mode = ROW_EXCLUSIVE;
ObTableLockOwnerID OWNER_ONE(1);
ObTableLockOwnerID in_trans_owner(ObTableLockOwnerID::default_owner());
ObTableLockOwnerID out_trans_owner(ObTableLockOwnerID::get_owner_by_value(1));
ObLockTableRequest lock_arg;
tx_param.access_mode_ = ObTxAccessMode::RW;
@ -635,7 +634,7 @@ TEST_F(ObTableLockServiceTest, in_trans_lock_table)
get_table_id("t_one_part", table_id);
lock_mode = ROW_EXCLUSIVE;
lock_arg.table_id_ = table_id;
lock_arg.owner_id_ = 0;
lock_arg.owner_id_ = in_trans_owner;
lock_arg.lock_mode_ = lock_mode;
lock_arg.op_type_ = IN_TRANS_COMMON_LOCK;
lock_arg.timeout_us_ = 0;
@ -649,7 +648,7 @@ TEST_F(ObTableLockServiceTest, in_trans_lock_table)
LOG_INFO("ObTableLockServiceTest::in_trans_lock_table 1.2");
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner);
ASSERT_EQ(OB_EAGAIN, ret);
// 2. LOCK MULTI PART TABLE
// 2.1 lock multi part table
@ -658,7 +657,7 @@ TEST_F(ObTableLockServiceTest, in_trans_lock_table)
get_table_id("t_multi_part", table_id);
lock_mode = ROW_EXCLUSIVE;
lock_arg.table_id_ = table_id;
lock_arg.owner_id_ = 0;
lock_arg.owner_id_ = in_trans_owner;
lock_arg.lock_mode_ = lock_mode;
lock_arg.op_type_ = IN_TRANS_COMMON_LOCK;
lock_arg.timeout_us_ = 0;
@ -672,7 +671,7 @@ TEST_F(ObTableLockServiceTest, in_trans_lock_table)
lock_mode = SHARE;
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner);
ASSERT_EQ(OB_EAGAIN, ret);
// 3. CLEAN
LOG_INFO("ObTableLockServiceTest::in_trans_lock_table 3");
@ -695,8 +694,9 @@ TEST_F(ObTableLockServiceTest, lock_out_trans_after_in_trans)
ObTransService *txs = nullptr;
uint64_t table_id = 0;
ObTableLockMode lock_mode = ROW_EXCLUSIVE;
ObTableLockOwnerID OWNER_ONE(1);
ObTableLockOwnerID DEFAULT_OWNER_ID(0);
ObTableLockOwnerID out_trans_owner_1(ObTableLockOwnerID::get_owner_by_value(1));
ObTableLockOwnerID out_trans_owner_2(ObTableLockOwnerID::get_owner_by_value(2));
ObTableLockOwnerID in_trans_owner(ObTableLockOwnerID::default_owner());
ObLockTableRequest lock_arg;
tx_param.access_mode_ = ObTxAccessMode::RW;
@ -719,7 +719,7 @@ TEST_F(ObTableLockServiceTest, lock_out_trans_after_in_trans)
get_table_id("t_one_part", table_id);
lock_mode = ROW_EXCLUSIVE;
lock_arg.table_id_ = table_id;
lock_arg.owner_id_ = 0;
lock_arg.owner_id_ = in_trans_owner;
lock_arg.lock_mode_ = lock_mode;
lock_arg.op_type_ = IN_TRANS_COMMON_LOCK;
lock_arg.timeout_us_ = 0;
@ -733,7 +733,7 @@ TEST_F(ObTableLockServiceTest, lock_out_trans_after_in_trans)
LOG_INFO("ObTableLockServiceTest::lock_out_trans_after_in_trans 1.2");
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_EAGAIN, ret);
// 1.3. commit lock
@ -749,7 +749,7 @@ TEST_F(ObTableLockServiceTest, lock_out_trans_after_in_trans)
LOG_INFO("ObTableLockServiceTest::lock_out_trans_after_in_trans 1.4");
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_SUCCESS, ret);
// 1.5 unlock check lock
@ -757,7 +757,7 @@ TEST_F(ObTableLockServiceTest, lock_out_trans_after_in_trans)
LOG_INFO("ObTableLockServiceTest::lock_out_trans_after_in_trans 1.4");
ret = MTL(ObTableLockService*)->unlock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner_1);
ASSERT_EQ(OB_SUCCESS, ret);
// 2. BOTH OUT_TRANS AND IN_TRANS
@ -767,7 +767,7 @@ TEST_F(ObTableLockServiceTest, lock_out_trans_after_in_trans)
get_table_id("t_one_part", table_id);
lock_mode = ROW_EXCLUSIVE;
lock_arg.table_id_ = table_id;
lock_arg.owner_id_ = 0;
lock_arg.owner_id_ = in_trans_owner;
lock_arg.lock_mode_ = lock_mode;
lock_arg.op_type_ = IN_TRANS_COMMON_LOCK;
lock_arg.timeout_us_ = 0;
@ -781,7 +781,7 @@ TEST_F(ObTableLockServiceTest, lock_out_trans_after_in_trans)
LOG_INFO("ObTableLockServiceTest::lock_out_trans_after_in_trans 2.2");
lock_mode = ROW_EXCLUSIVE;
lock_arg.table_id_ = table_id;
lock_arg.owner_id_ = 0;
lock_arg.owner_id_ = out_trans_owner_1;
lock_arg.lock_mode_ = lock_mode;
lock_arg.op_type_ = OUT_TRANS_LOCK;
lock_arg.timeout_us_ = 0;
@ -796,7 +796,7 @@ TEST_F(ObTableLockServiceTest, lock_out_trans_after_in_trans)
LOG_INFO("ObTableLockServiceTest::lock_out_trans_after_in_trans 2.3");
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner_2);
ASSERT_EQ(OB_EAGAIN, ret);
// 2.4 commit lock
@ -812,7 +812,7 @@ TEST_F(ObTableLockServiceTest, lock_out_trans_after_in_trans)
LOG_INFO("ObTableLockServiceTest::lock_out_trans_after_in_trans 2.5");
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner_2);
ASSERT_EQ(OB_EAGAIN, ret);
// 2.6 unlock out_trans lock
@ -820,7 +820,7 @@ TEST_F(ObTableLockServiceTest, lock_out_trans_after_in_trans)
LOG_INFO("ObTableLockServiceTest::lock_out_trans_after_in_trans 2.6");
ret = MTL(ObTableLockService*)->unlock_table(table_id,
lock_mode,
DEFAULT_OWNER_ID);
out_trans_owner_1);
ASSERT_EQ(OB_SUCCESS, ret);
// 2.7 recheck after unlock
@ -828,7 +828,7 @@ TEST_F(ObTableLockServiceTest, lock_out_trans_after_in_trans)
LOG_INFO("ObTableLockServiceTest::lock_out_trans_after_in_trans 2.7");
ret = MTL(ObTableLockService*)->lock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner_2);
ASSERT_EQ(OB_SUCCESS, ret);
// 2.8 unlock check lock
@ -836,7 +836,7 @@ TEST_F(ObTableLockServiceTest, lock_out_trans_after_in_trans)
LOG_INFO("ObTableLockServiceTest::lock_out_trans_after_in_trans 2.8");
ret = MTL(ObTableLockService*)->unlock_table(table_id,
lock_mode,
OWNER_ONE);
out_trans_owner_2);
ASSERT_EQ(OB_SUCCESS, ret);
}
@ -851,8 +851,9 @@ TEST_F(ObTableLockServiceTest, in_trans_lock_obj)
ObTransService *txs = nullptr;
uint64_t obj_id1 = 1010;
ObTableLockMode lock_mode1 = SHARE;
ObTableLockOwnerID OWNER_ONE(1);
ObTableLockOwnerID OWNER_ONE;
ObLockObjRequest lock_arg;
OWNER_ONE.convert_from_value(1);
tx_param.access_mode_ = ObTxAccessMode::RW;
tx_param.isolation_ = ObTxIsolationLevel::RC;