[FEAT MERGE] ddl parallel truncate table

Co-authored-by: obdev <obdev@oceanbase.com>
Co-authored-by: obdev <obdev@oceanbase.com>
Co-authored-by: obdev <obdev@oceanbase.com>
Co-authored-by: obdev <obdev@oceanbase.com>
Co-authored-by: obdev <obdev@oceanbase.com>
This commit is contained in:
obdev
2023-01-28 13:37:56 +08:00
committed by ob-robot
parent a13f63478a
commit b2607a0ccf
77 changed files with 5485 additions and 783 deletions

View File

@ -211,17 +211,120 @@ int ObInnerSqlRpcP::process_lock_table(sqlclient::ObISQLConnection *conn,
{
int ret = OB_SUCCESS;
observer::ObInnerSQLConnection *inner_conn = static_cast<observer::ObInnerSQLConnection *>(conn);
ObInTransLockTableRequest lock_arg;
int64_t pos = 0;
if (GET_MIN_CLUSTER_VERSION() <= CLUSTER_VERSION_4_0_0_0) {
ObInTransLockTableRequest lock_arg;
if (OB_FAIL(lock_arg.deserialize(arg.get_inner_sql().ptr(), arg.get_inner_sql().length(), pos))) {
LOG_WARN("deserialize multi source data str failed", K(ret), K(arg), K(pos));
} else {
ObLockTableRequest tmp_arg;
tmp_arg.owner_id_ = 0;
tmp_arg.lock_mode_ = lock_arg.lock_mode_;
tmp_arg.op_type_ = IN_TRANS_COMMON_LOCK;
tmp_arg.timeout_us_ = lock_arg.timeout_us_;
tmp_arg.table_id_ = lock_arg.table_id_;
if (OB_FAIL(inner_conn->lock_table(arg.get_tenant_id(),
tmp_arg))) {
LOG_WARN("lock table failed", K(ret), K(arg.get_tenant_id()), K(tmp_arg));
}
}
} else {
ObLockTableRequest lock_arg;
if (OB_FAIL(lock_arg.deserialize(arg.get_inner_sql().ptr(), arg.get_inner_sql().length(), pos))) {
LOG_WARN("deserialize multi source data str failed", K(ret), K(arg), K(pos));
} else if (OB_FAIL(inner_conn->lock_table(arg.get_tenant_id(),
lock_arg))) {
LOG_WARN("lock table failed", K(ret), K(arg.get_tenant_id()), K(lock_arg));
}
}
return ret;
}
int ObInnerSqlRpcP::process_unlock_table(sqlclient::ObISQLConnection *conn,
const ObInnerSQLTransmitArg &arg)
{
int ret = OB_SUCCESS;
observer::ObInnerSQLConnection *inner_conn = static_cast<observer::ObInnerSQLConnection *>(conn);
ObUnLockTableRequest lock_arg;
int64_t pos = 0;
if (OB_FAIL(lock_arg.deserialize(arg.get_inner_sql().ptr(),
arg.get_inner_sql().length(), pos))) {
LOG_WARN("deserialize multi source data str failed", K(ret), K(arg), K(pos));
} else if (OB_FAIL(inner_conn->unlock_table(arg.get_tenant_id(),
lock_arg))) {
LOG_WARN("unlock table failed", K(ret), K(arg.get_tenant_id()),
K(lock_arg));
}
return ret;
}
int ObInnerSqlRpcP::process_lock_partition(sqlclient::ObISQLConnection *conn,
const ObInnerSQLTransmitArg &arg)
{
int ret = OB_SUCCESS;
observer::ObInnerSQLConnection *inner_conn = static_cast<observer::ObInnerSQLConnection *>(conn);
ObLockPartitionRequest lock_arg;
int64_t pos = 0;
if (OB_FAIL(lock_arg.deserialize(arg.get_inner_sql().ptr(), arg.get_inner_sql().length(), pos))) {
LOG_WARN("deserialize multi source data str failed", K(ret), K(arg), K(pos));
} else if (OB_FAIL(inner_conn->lock_table(
arg.get_tenant_id(),
lock_arg.table_id_,
lock_arg.lock_mode_,
lock_arg.timeout_us_))) {
LOG_WARN("lock table failed", K(ret), K(arg.get_tenant_id()), K(lock_arg));
} else if (OB_FAIL(inner_conn->lock_partition(arg.get_tenant_id(), lock_arg))) {
LOG_WARN("lock partition failed", K(ret), K(arg.get_tenant_id()), K(lock_arg));
}
return ret;
}
int ObInnerSqlRpcP::process_unlock_partition(sqlclient::ObISQLConnection *conn,
const ObInnerSQLTransmitArg &arg)
{
int ret = OB_SUCCESS;
observer::ObInnerSQLConnection *inner_conn = static_cast<observer::ObInnerSQLConnection *>(conn);
ObUnLockPartitionRequest lock_arg;
int64_t pos = 0;
if (OB_FAIL(lock_arg.deserialize(arg.get_inner_sql().ptr(), arg.get_inner_sql().length(), pos))) {
LOG_WARN("deserialize multi source data str failed", K(ret), K(arg), K(pos));
} else if (OB_FAIL(inner_conn->unlock_partition(arg.get_tenant_id(), lock_arg))) {
LOG_WARN("unlock partition failed", K(ret), K(arg.get_tenant_id()), K(lock_arg));
}
return ret;
}
int ObInnerSqlRpcP::process_lock_subpartition(sqlclient::ObISQLConnection *conn,
const ObInnerSQLTransmitArg &arg)
{
int ret = OB_SUCCESS;
observer::ObInnerSQLConnection *inner_conn = static_cast<observer::ObInnerSQLConnection *>(conn);
ObLockPartitionRequest lock_arg;
int64_t pos = 0;
if (OB_FAIL(lock_arg.deserialize(arg.get_inner_sql().ptr(), arg.get_inner_sql().length(), pos))) {
LOG_WARN("deserialize multi source data str failed", K(ret), K(arg), K(pos));
} else if (OB_FAIL(inner_conn->lock_subpartition(arg.get_tenant_id(), lock_arg))) {
LOG_WARN("lock subpartition failed", K(ret), K(arg.get_tenant_id()), K(lock_arg));
}
return ret;
}
int ObInnerSqlRpcP::process_unlock_subpartition(sqlclient::ObISQLConnection *conn,
const ObInnerSQLTransmitArg &arg)
{
int ret = OB_SUCCESS;
observer::ObInnerSQLConnection *inner_conn = static_cast<observer::ObInnerSQLConnection *>(conn);
ObUnLockPartitionRequest lock_arg;
int64_t pos = 0;
if (OB_FAIL(lock_arg.deserialize(arg.get_inner_sql().ptr(), arg.get_inner_sql().length(), pos))) {
LOG_WARN("deserialize multi source data str failed", K(ret), K(arg), K(pos));
} else if (OB_FAIL(inner_conn->unlock_subpartition(arg.get_tenant_id(), lock_arg))) {
LOG_WARN("unlock subpartition failed", K(ret), K(arg.get_tenant_id()), K(lock_arg));
}
return ret;
@ -232,18 +335,48 @@ int ObInnerSqlRpcP::process_lock_tablet(sqlclient::ObISQLConnection *conn,
{
int ret = OB_SUCCESS;
observer::ObInnerSQLConnection *inner_conn = static_cast<observer::ObInnerSQLConnection *>(conn);
ObInTransLockTabletRequest lock_arg;
int64_t pos = 0;
if (GET_MIN_CLUSTER_VERSION() <= CLUSTER_VERSION_4_0_0_0) {
ObInTransLockTabletRequest lock_arg;
if (OB_FAIL(lock_arg.deserialize(arg.get_inner_sql().ptr(), arg.get_inner_sql().length(), pos))) {
LOG_WARN("deserialize multi source data str failed", K(ret), K(arg), K(pos));
} else {
ObLockTabletRequest tmp_arg;
tmp_arg.owner_id_ = 0;
tmp_arg.lock_mode_ = lock_arg.lock_mode_;
tmp_arg.op_type_ = IN_TRANS_COMMON_LOCK;
tmp_arg.timeout_us_ = lock_arg.timeout_us_;
tmp_arg.table_id_ = lock_arg.table_id_;
tmp_arg.tablet_id_ = lock_arg.tablet_id_;
if (OB_FAIL(inner_conn->lock_tablet(arg.get_tenant_id(), tmp_arg))) {
LOG_WARN("lock tablet failed", K(ret), K(arg.get_tenant_id()), K(tmp_arg));
}
}
} else {
ObLockTabletRequest lock_arg;
if (OB_FAIL(lock_arg.deserialize(arg.get_inner_sql().ptr(), arg.get_inner_sql().length(), pos))) {
LOG_WARN("deserialize multi source data str failed", K(ret), K(arg), K(pos));
} else if (OB_FAIL(inner_conn->lock_tablet(arg.get_tenant_id(), lock_arg))) {
LOG_WARN("lock tablet failed", K(ret), K(arg.get_tenant_id()), K(lock_arg));
}
}
return ret;
}
int ObInnerSqlRpcP::process_unlock_tablet(sqlclient::ObISQLConnection *conn,
const ObInnerSQLTransmitArg &arg)
{
int ret = OB_SUCCESS;
observer::ObInnerSQLConnection *inner_conn = static_cast<observer::ObInnerSQLConnection *>(conn);
ObUnLockTabletRequest lock_arg;
int64_t pos = 0;
if (OB_FAIL(lock_arg.deserialize(arg.get_inner_sql().ptr(), arg.get_inner_sql().length(), pos))) {
LOG_WARN("deserialize multi source data str failed", K(ret), K(arg), K(pos));
} else if (OB_FAIL(inner_conn->lock_tablet(
arg.get_tenant_id(),
lock_arg.table_id_,
lock_arg.tablet_id_,
lock_arg.lock_mode_,
lock_arg.timeout_us_))) {
LOG_WARN("lock tablet failed", K(ret), K(arg.get_tenant_id()), K(lock_arg));
} else if (OB_FAIL(inner_conn->unlock_tablet(arg.get_tenant_id(), lock_arg))) {
LOG_WARN("unlock tablet failed", K(ret), K(arg.get_tenant_id()), K(lock_arg));
}
return ret;
@ -304,6 +437,40 @@ void ObInnerSqlRpcP::cleanup_tmp_session(
ObActiveSessionGuard::setup_default_ash(); // enforce cleanup for future RPC cases
}
int ObInnerSqlRpcP::process_lock_obj(sqlclient::ObISQLConnection *conn,
const ObInnerSQLTransmitArg &arg)
{
int ret = OB_SUCCESS;
observer::ObInnerSQLConnection *inner_conn = static_cast<observer::ObInnerSQLConnection *>(conn);
ObLockObjRequest lock_arg;
int64_t pos = 0;
if (OB_FAIL(lock_arg.deserialize(arg.get_inner_sql().ptr(), arg.get_inner_sql().length(), pos))) {
LOG_WARN("deserialize multi source data str failed", K(ret), K(arg), K(pos));
} else if (OB_FAIL(inner_conn->lock_obj(arg.get_tenant_id(), lock_arg))) {
LOG_WARN("lock object failed", K(ret), K(arg.get_tenant_id()), K(lock_arg));
}
return ret;
}
int ObInnerSqlRpcP::process_unlock_obj(sqlclient::ObISQLConnection *conn,
const ObInnerSQLTransmitArg &arg)
{
int ret = OB_SUCCESS;
observer::ObInnerSQLConnection *inner_conn = static_cast<observer::ObInnerSQLConnection *>(conn);
ObUnLockObjRequest lock_arg;
int64_t pos = 0;
if (OB_FAIL(lock_arg.deserialize(arg.get_inner_sql().ptr(), arg.get_inner_sql().length(), pos))) {
LOG_WARN("deserialize multi source data str failed", K(ret), K(arg), K(pos));
} else if (OB_FAIL(inner_conn->unlock_obj(arg.get_tenant_id(), lock_arg))) {
LOG_WARN("unlock object failed", K(ret), K(arg.get_tenant_id()), K(lock_arg));
}
return ret;
}
int ObInnerSqlRpcP::process()
{
int ret = OB_SUCCESS;
@ -435,9 +602,57 @@ int ObInnerSqlRpcP::process()
}
break;
}
case ObInnerSQLTransmitArg::OPERATION_TYPE_UNLOCK_TABLE: {
if (OB_FAIL(process_unlock_table(conn, transmit_arg))) {
LOG_WARN("process unlock table failed", K(ret));
}
break;
}
case ObInnerSQLTransmitArg::OPERATION_TYPE_LOCK_TABLET: {
if (OB_FAIL(process_lock_tablet(conn, transmit_arg))) {
LOG_WARN("process lock tableet failed", K(ret));
LOG_WARN("process lock tablet failed", K(ret));
}
break;
}
case ObInnerSQLTransmitArg::OPERATION_TYPE_UNLOCK_TABLET: {
if (OB_FAIL(process_unlock_tablet(conn, transmit_arg))) {
LOG_WARN("process unlock tablet failed", K(ret));
}
break;
}
case ObInnerSQLTransmitArg::OPERATION_TYPE_LOCK_OBJ: {
if (OB_FAIL(process_lock_obj(conn, transmit_arg))) {
LOG_WARN("process lock obj failed", K(ret));
}
break;
}
case ObInnerSQLTransmitArg::OPERATION_TYPE_UNLOCK_OBJ: {
if (OB_FAIL(process_unlock_obj(conn, transmit_arg))) {
LOG_WARN("process unlock obj failed", K(ret));
}
break;
}
case ObInnerSQLTransmitArg::OPERATION_TYPE_LOCK_PART: {
if (OB_FAIL(process_lock_partition(conn, transmit_arg))) {
LOG_WARN("process lock partition failed", K(ret));
}
break;
}
case ObInnerSQLTransmitArg::OPERATION_TYPE_UNLOCK_PART: {
if (OB_FAIL(process_unlock_partition(conn, transmit_arg))) {
LOG_WARN("process unlock partition failed", K(ret));
}
break;
}
case ObInnerSQLTransmitArg::OPERATION_TYPE_LOCK_SUBPART: {
if (OB_FAIL(process_lock_subpartition(conn, transmit_arg))) {
LOG_WARN("process lock subpartition failed", K(ret));
}
break;
}
case ObInnerSQLTransmitArg::OPERATION_TYPE_UNLOCK_SUBPART: {
if (OB_FAIL(process_unlock_subpartition(conn, transmit_arg))) {
LOG_WARN("process unlock subpartition failed", K(ret));
}
break;
}