From e527111c68c8576396f1fc8f26b2ece2ef4aa5b6 Mon Sep 17 00:00:00 2001 From: obdev Date: Mon, 6 Feb 2023 15:18:41 +0800 Subject: [PATCH] fix lock contetion of direct load --- .../table_load/ob_table_load_coordinator_trans.cpp | 6 +++--- src/observer/table_load/ob_table_load_store_trans.cpp | 10 +++++----- src/observer/table_load/ob_table_load_trans_ctx.cpp | 8 ++++---- src/observer/table_load/ob_table_load_trans_ctx.h | 6 +++--- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/observer/table_load/ob_table_load_coordinator_trans.cpp b/src/observer/table_load/ob_table_load_coordinator_trans.cpp index 62973c16a6..704694e9b5 100644 --- a/src/observer/table_load/ob_table_load_coordinator_trans.cpp +++ b/src/observer/table_load/ob_table_load_coordinator_trans.cpp @@ -106,7 +106,7 @@ int ObTableLoadCoordinatorTrans::get_bucket_writer_for_write( } else if (OB_FAIL(check_trans_status(ObTableLoadTransStatusType::RUNNING))) { LOG_WARN("fail to check trans status", KR(ret)); } else { - ObMutexGuard guard(trans_ctx_->mutex_); + obsys::ObRLockGuard guard(trans_ctx_->rwlock_); if (OB_ISNULL(trans_bucket_writer_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected null bucket writer", KR(ret)); @@ -132,7 +132,7 @@ int ObTableLoadCoordinatorTrans::get_bucket_writer_for_flush( } else if (OB_FAIL(check_trans_status(ObTableLoadTransStatusType::FROZEN))) { LOG_WARN("fail to check trans status", KR(ret)); } else { - ObMutexGuard guard(trans_ctx_->mutex_); + obsys::ObRLockGuard guard(trans_ctx_->rwlock_); if (OB_ISNULL(trans_bucket_writer_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected null bucket writer", KR(ret)); @@ -158,7 +158,7 @@ void ObTableLoadCoordinatorTrans::put_bucket_writer(ObTableLoadTransBucketWriter ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid null bucket writer", KR(ret)); } else { - ObMutexGuard guard(trans_ctx_->mutex_); + obsys::ObRLockGuard guard(trans_ctx_->rwlock_); OB_ASSERT(trans_bucket_writer_ == bucket_writer); } if (OB_SUCC(ret)) { diff --git a/src/observer/table_load/ob_table_load_store_trans.cpp b/src/observer/table_load/ob_table_load_store_trans.cpp index a2b166273c..49a67adb56 100644 --- a/src/observer/table_load/ob_table_load_store_trans.cpp +++ b/src/observer/table_load/ob_table_load_store_trans.cpp @@ -117,7 +117,7 @@ int ObTableLoadStoreTrans::get_store_writer_for_write( } else if (OB_FAIL(check_trans_status(ObTableLoadTransStatusType::RUNNING))) { LOG_WARN("fail to check trans status", KR(ret)); } else { - ObMutexGuard guard(trans_ctx_->mutex_); + obsys::ObRLockGuard guard(trans_ctx_->rwlock_); if (OB_ISNULL(trans_store_writer_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected null store writer", KR(ret)); @@ -143,7 +143,7 @@ int ObTableLoadStoreTrans::get_store_writer_for_flush( } else if (OB_FAIL(check_trans_status(ObTableLoadTransStatusType::FROZEN))) { LOG_WARN("fail to check trans status", KR(ret)); } else { - ObMutexGuard guard(trans_ctx_->mutex_); + obsys::ObRLockGuard guard(trans_ctx_->rwlock_); if (OB_ISNULL(trans_store_writer_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected null store writer", KR(ret)); @@ -170,7 +170,7 @@ int ObTableLoadStoreTrans::get_store_writer_for_clean_up( } else if (OB_FAIL(check_trans_status(ObTableLoadTransStatusType::ABORT))) { LOG_WARN("fail to check trans status", KR(ret)); } else { - ObMutexGuard guard(trans_ctx_->mutex_); + obsys::ObRLockGuard guard(trans_ctx_->rwlock_); if (OB_ISNULL(trans_store_writer_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected null store writer", KR(ret)); @@ -192,7 +192,7 @@ void ObTableLoadStoreTrans::put_store_writer(ObTableLoadTransStoreWriter *store_ ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid null store", KR(ret)); } else { - ObMutexGuard guard(trans_ctx_->mutex_); + obsys::ObRLockGuard guard(trans_ctx_->rwlock_); OB_ASSERT(trans_store_writer_ == store_writer); } if (OB_SUCC(ret)) { @@ -224,7 +224,7 @@ int ObTableLoadStoreTrans::output_store(ObTableLoadTransStore *&trans_store) ret = OB_NOT_INIT; LOG_WARN("ObTableLoadStoreTrans not init", KR(ret), KP(this)); } else { - ObMutexGuard guard(trans_ctx_->mutex_); + obsys::ObWLockGuard guard(trans_ctx_->rwlock_); if (OB_ISNULL(trans_store_) || OB_ISNULL(trans_store_writer_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected null store", KR(ret), KP_(trans_store), KP_(trans_store_writer)); diff --git a/src/observer/table_load/ob_table_load_trans_ctx.cpp b/src/observer/table_load/ob_table_load_trans_ctx.cpp index 5e52a57b2f..7490a0c3ec 100644 --- a/src/observer/table_load/ob_table_load_trans_ctx.cpp +++ b/src/observer/table_load/ob_table_load_trans_ctx.cpp @@ -33,7 +33,7 @@ int ObTableLoadTransCtx::advance_trans_status(ObTableLoadTransStatusType trans_s ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid args", KR(ret), K(trans_status)); } else { - ObMutexGuard guard(mutex_); + obsys::ObWLockGuard guard(rwlock_); if (OB_UNLIKELY(ObTableLoadTransStatusType::ERROR == trans_status_)) { ret = error_code_; LOG_WARN("trans has error", KR(ret)); @@ -60,7 +60,7 @@ int ObTableLoadTransCtx::set_trans_status_error(int error_code) ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid args", KR(ret), K(error_code)); } else { - ObMutexGuard guard(mutex_); + obsys::ObWLockGuard guard(rwlock_); if (OB_UNLIKELY(trans_status_ == ObTableLoadTransStatusType::ABORT)) { ret = OB_TRANS_KILLED; } else if (trans_status_ != ObTableLoadTransStatusType::ERROR) { @@ -74,7 +74,7 @@ int ObTableLoadTransCtx::set_trans_status_error(int error_code) int ObTableLoadTransCtx::set_trans_status_abort() { int ret = OB_SUCCESS; - ObMutexGuard guard(mutex_); + obsys::ObWLockGuard guard(rwlock_); trans_status_ = ObTableLoadTransStatusType::ABORT; return ret; } @@ -82,7 +82,7 @@ int ObTableLoadTransCtx::set_trans_status_abort() int ObTableLoadTransCtx::check_trans_status(ObTableLoadTransStatusType trans_status) const { int ret = OB_SUCCESS; - ObMutexGuard guard(mutex_); + obsys::ObRLockGuard guard(rwlock_); if (OB_UNLIKELY(trans_status != trans_status_)) { if (ObTableLoadTransStatusType::ERROR == trans_status_) { ret = error_code_; diff --git a/src/observer/table_load/ob_table_load_trans_ctx.h b/src/observer/table_load/ob_table_load_trans_ctx.h index 72bfe2c03a..8d76512d3d 100644 --- a/src/observer/table_load/ob_table_load_trans_ctx.h +++ b/src/observer/table_load/ob_table_load_trans_ctx.h @@ -20,12 +20,12 @@ public: ObTableLoadTransCtx(ObTableLoadTableCtx *ctx, const table::ObTableLoadTransId &trans_id); OB_INLINE table::ObTableLoadTransStatusType get_trans_status() const { - lib::ObMutexGuard guard(mutex_); + obsys::ObRLockGuard guard(rwlock_); return trans_status_; } OB_INLINE int get_error_code() const { - lib::ObMutexGuard guard(mutex_); + obsys::ObRLockGuard guard(rwlock_); return error_code_; } int advance_trans_status(table::ObTableLoadTransStatusType trans_status); @@ -36,7 +36,7 @@ public: public: ObTableLoadTableCtx * const ctx_; const table::ObTableLoadTransId trans_id_; - mutable lib::ObMutex mutex_; + mutable obsys::ObRWLock rwlock_; common::ObArenaAllocator allocator_; table::ObTableLoadTransStatusType trans_status_; int error_code_; -- GitLab