adjust clog_checkpoint lock read_prefer
This commit is contained in:
parent
d76fd66d95
commit
4853e91041
2
deps/oblib/src/lib/stat/ob_latch_define.h
vendored
2
deps/oblib/src/lib/stat/ob_latch_define.h
vendored
@ -298,6 +298,8 @@ LATCH_DEF(MEMTABLE_STAT_LOCK, 287, "metmable stat lock", LATCH_FIFO, 2000, 0, ME
|
||||
LATCH_DEF(DEADLOCK_DETECT_LOCK, 288, "deadlock detect lock", LATCH_FIFO, 2000, 0, DEADLOCK_DETECT_LOCK_WAIT, "deadlock detect lock")
|
||||
LATCH_DEF(FREEZE_THREAD_POOL_LOCK, 289, "freeze thread pool lock", LATCH_FIFO, 2000, 0, FREEZE_THREAD_POOL_WAIT, "freeze thread pool lock")
|
||||
LATCH_DEF(DAS_ASYNC_RPC_LOCK, 290, "das wait remote response lock", LATCH_FIFO, 2000, 0, DAS_ASYNC_RPC_LOCK_WAIT, "das wait remote response lock")
|
||||
LATCH_DEF(CLOG_CKPT_RWLOCK, 291, "clog checkpoint rwlock", LATCH_READ_PREFER, 2000, 0, CLOG_CKPT_RWLOCK_WAIT, "clog checkpoint rwlock")
|
||||
|
||||
// LATCH_DEF(TENANT_MGR_TENANT_BUCKET_LOCK, 290, "tenant mgr tenant bucket lock", LATCH_READ_PREFER, INT64_MAX, 0, TENANT_MGR_TENANT_BUCKET_LOCK_WAIT, "tenant mgr tenant bucket lock")
|
||||
LATCH_DEF(SRS_LOCK, 292, "srs lock", LATCH_READ_PREFER, 2000, 0, SRS_LOCK_WAIT, "srs lock")
|
||||
LATCH_DEF(LATCH_END, 99999, "latch end", LATCH_FIFO, 2000, 0, WAIT_EVENT_END, "latch end")
|
||||
|
@ -288,6 +288,7 @@ WAIT_EVENT_DEF(TENANT_MEM_USAGE_LOCK_WAIT, 15244, "latch: tenant memory usage lo
|
||||
WAIT_EVENT_DEF(TX_TABLE_LOCK_WAIT, 15245, "rwlock: tx table lock wait", "address", "number", "tries", CONCURRENCY, "rwlock: tx table lock wait", true)
|
||||
WAIT_EVENT_DEF(MEMTABLE_STAT_LOCK_WAIT, 15246, "spinlock: memtable stat lock wait", "address", "number", "tries", CONCURRENCY, "spinlock: memtable stat lock wait", true)
|
||||
WAIT_EVENT_DEF(DEADLOCK_DETECT_LOCK_WAIT, 15247, "spinlock: deadlock detect lock wait", "address", "number", "tries", CONCURRENCY, "spinlock: deadlock detect lock wait", true)
|
||||
WAIT_EVENT_DEF(CLOG_CKPT_RWLOCK_WAIT, 15248, "rwlock: clog checkpoint rwlock wait", "address", "number", "tries", CONCURRENCY, "rwlock: clog checkpoint rwlock wait", true)
|
||||
//WAIT_EVENT_DEF(BACKUP_DATA_SERVICE_COND_WAIT, 15248, "backup data service condition wait", "address", "", "", CONCURRENCY, "backup data service condition wait", true) used by backup
|
||||
//WAIT_EVENT_DEF(BACKUP_CLEAN_SERVICE_COND_WAIT, 15249, "backup clean service condition wait", "address", "", "", CONCURRENCY, "backup clean service condition wait", true)
|
||||
//WAIT_EVENT_DEF(BACKUP_ARCHIVE_SERVICE_COND_WAIT, 15250, "backup archive service condition wait", "address", "", "", CONCURRENCY, "backup archive service condition wait", true)
|
||||
|
@ -29,7 +29,7 @@ namespace checkpoint
|
||||
{
|
||||
|
||||
ObCheckpointExecutor::ObCheckpointExecutor()
|
||||
: rwlock_(common::ObLatchIds::CLOG_CKPT_LOCK),
|
||||
: rwlock_(common::ObLatchIds::CLOG_CKPT_RWLOCK),
|
||||
update_checkpoint_enabled_(false)
|
||||
{
|
||||
reset();
|
||||
|
@ -421,7 +421,7 @@ SCN ObLSTxService::get_rec_scn()
|
||||
SCN min_rec_scn = SCN::max_scn();
|
||||
int min_rec_scn_common_checkpoint_type_index = 0;
|
||||
char common_checkpoint_type[common::MAX_CHECKPOINT_TYPE_BUF_LENGTH];
|
||||
ObSpinLockGuard guard(lock_);
|
||||
RLockGuard guard(rwlock_);
|
||||
for (int i = 1; i < ObCommonCheckpointType::MAX_BASE_TYPE; i++) {
|
||||
if (OB_NOT_NULL(common_checkpoints_[i])) {
|
||||
SCN rec_scn = common_checkpoints_[i]->get_rec_scn();
|
||||
@ -446,7 +446,7 @@ int ObLSTxService::flush(SCN &recycle_scn)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
int tmp_ret = OB_SUCCESS;
|
||||
ObSpinLockGuard guard(lock_);
|
||||
RLockGuard guard(rwlock_);
|
||||
for (int i = 1; i < ObCommonCheckpointType::MAX_BASE_TYPE; i++) {
|
||||
// only flush the common_checkpoint that whose clog need recycle
|
||||
if (OB_NOT_NULL(common_checkpoints_[i]) && recycle_scn >= common_checkpoints_[i]->get_rec_scn()) {
|
||||
@ -480,7 +480,7 @@ int ObLSTxService::get_common_checkpoint_info(
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
common_checkpoint_array.reset();
|
||||
ObSpinLockGuard guard(lock_);
|
||||
RLockGuard guard(rwlock_);
|
||||
for (int i = 1; i < ObCommonCheckpointType::MAX_BASE_TYPE; i++) {
|
||||
ObCommonCheckpoint *common_checkpoint = common_checkpoints_[i];
|
||||
if (OB_ISNULL(common_checkpoint)) {
|
||||
@ -507,7 +507,7 @@ int ObLSTxService::register_common_checkpoint(const ObCommonCheckpointType &type
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
STORAGE_LOG(WARN, "invalid arguments", K(ret), K(type), K(common_checkpoint));
|
||||
} else {
|
||||
ObSpinLockGuard guard(lock_);
|
||||
WLockGuard guard(rwlock_);
|
||||
if (OB_NOT_NULL(common_checkpoints_[type])) {
|
||||
STORAGE_LOG(WARN, "repeat register common_checkpoint", K(ret), K(type), K(common_checkpoint));
|
||||
} else {
|
||||
@ -527,7 +527,7 @@ int ObLSTxService::unregister_common_checkpoint(const ObCommonCheckpointType &ty
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
STORAGE_LOG(WARN, "invalid arguments", K(ret), K(type), K(common_checkpoint));
|
||||
} else {
|
||||
ObSpinLockGuard guard(lock_);
|
||||
WLockGuard guard(rwlock_);
|
||||
if (OB_ISNULL(common_checkpoints_[type])) {
|
||||
STORAGE_LOG(WARN, "common_checkpoint is null, no need unregister", K(type),
|
||||
K(common_checkpoint));
|
||||
@ -559,7 +559,7 @@ int ObLSTxService::traversal_flush()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
int tmp_ret = OB_SUCCESS;
|
||||
ObSpinLockGuard guard(lock_);
|
||||
RLockGuard guard(rwlock_);
|
||||
for (int i = 1; i < ObCommonCheckpointType::MAX_BASE_TYPE; i++) {
|
||||
if (OB_NOT_NULL(common_checkpoints_[i]) &&
|
||||
OB_SUCCESS != (tmp_ret = common_checkpoints_[i]->flush(SCN::max_scn(), false))) {
|
||||
@ -570,7 +570,7 @@ int ObLSTxService::traversal_flush()
|
||||
}
|
||||
|
||||
void ObLSTxService::reset_() {
|
||||
ObSpinLockGuard guard(lock_);
|
||||
WLockGuard guard(rwlock_);
|
||||
for (int i = 0; i < ObCommonCheckpointType::MAX_BASE_TYPE; i++) {
|
||||
common_checkpoints_[i] = NULL;
|
||||
}
|
||||
|
@ -14,7 +14,7 @@
|
||||
#define OCEANBASE_TRANSACTION_OB_LS_TX_SERVICE
|
||||
|
||||
#include "lib/ob_errno.h"
|
||||
#include "lib/lock/ob_spin_lock.h"
|
||||
#include "lib/lock/ob_spin_rwlock.h" // SpinRWLock
|
||||
#include "share/ob_ls_id.h"
|
||||
#include "storage/checkpoint/ob_common_checkpoint.h"
|
||||
#include "storage/ob_i_store.h"
|
||||
@ -62,7 +62,7 @@ public:
|
||||
ls_id_(),
|
||||
mgr_(NULL),
|
||||
trans_service_(NULL),
|
||||
lock_(common::ObLatchIds::CLOG_CKPT_LOCK) {
|
||||
rwlock_(common::ObLatchIds::CLOG_CKPT_RWLOCK) {
|
||||
reset_();
|
||||
}
|
||||
~ObLSTxService() {}
|
||||
@ -177,7 +177,10 @@ private:
|
||||
|
||||
// responsible for maintenance checkpoint unit that write TRANS_SERVICE_LOG_BASE_TYPE clog
|
||||
checkpoint::ObCommonCheckpoint *common_checkpoints_[checkpoint::ObCommonCheckpointType::MAX_BASE_TYPE];
|
||||
common::ObSpinLock lock_;
|
||||
typedef common::SpinRWLock RWLock;
|
||||
typedef common::SpinRLockGuard RLockGuard;
|
||||
typedef common::SpinWLockGuard WLockGuard;
|
||||
RWLock rwlock_;
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -826,6 +826,8 @@ int ObLockMemtable::flush(SCN recycle_scn,
|
||||
if (OB_EAGAIN != ret && OB_SIZE_OVERFLOW != ret) {
|
||||
LOG_WARN("failed to schedule lock_memtable merge dag", K(ret), K(this));
|
||||
}
|
||||
} else {
|
||||
LOG_INFO("schedule lock_memtable merge_dag successfully", K(ls_id_), K(freeze_scn_));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -648,8 +648,8 @@ int ObOBJLock::get_table_lock_store_info(
|
||||
ObTableLockOpList *op_list = map_[i];
|
||||
if (op_list != NULL) {
|
||||
DLIST_FOREACH(curr, *op_list) {
|
||||
if (curr->lock_op_.commit_scn_ <= freeze_scn
|
||||
&& curr->is_complete_outtrans_lock()) {
|
||||
if (curr->lock_op_.commit_scn_ <= freeze_scn &&
|
||||
(curr->is_complete_outtrans_lock() || curr->is_complete_outtrans_unlock())) {
|
||||
ObTableLockOp store_info;
|
||||
if(OB_FAIL(curr->get_table_lock_store_info(store_info))) {
|
||||
LOG_WARN("get_table_lock_store_info failed", K(ret));
|
||||
|
Loading…
x
Reference in New Issue
Block a user