From 295edddc6d81a9870bf78c2186195bdbdec1d789 Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 25 May 2023 04:47:07 +0000 Subject: [PATCH] BUGFIX: ddl only wait trans with a smaller schema version --- src/storage/tablelock/ob_mem_ctx_table_lock.cpp | 4 ++-- src/storage/tablelock/ob_mem_ctx_table_lock.h | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/storage/tablelock/ob_mem_ctx_table_lock.cpp b/src/storage/tablelock/ob_mem_ctx_table_lock.cpp index 1668ef0514..18971cb72c 100644 --- a/src/storage/tablelock/ob_mem_ctx_table_lock.cpp +++ b/src/storage/tablelock/ob_mem_ctx_table_lock.cpp @@ -344,7 +344,7 @@ int ObLockMemCtx::check_modify_schema_elapsed( RDLockGuard guard(list_rwlock_); DLIST_FOREACH(curr, lock_list_) { if (curr->lock_op_.lock_id_ == lock_id && - curr->lock_op_.create_schema_version_ <= schema_version) { + curr->lock_op_.create_schema_version_ < schema_version) { // there is some trans that modify the tablet before schema version // running. ret = OB_EAGAIN; @@ -370,7 +370,7 @@ int ObLockMemCtx::check_modify_time_elapsed( RDLockGuard guard(list_rwlock_); DLIST_FOREACH(curr, lock_list_) { if (curr->lock_op_.lock_id_ == lock_id && - curr->lock_op_.create_timestamp_ <= timestamp) { + curr->lock_op_.create_timestamp_ < timestamp) { // there is some trans that modify the tablet before timestamp // running. ret = OB_EAGAIN; diff --git a/src/storage/tablelock/ob_mem_ctx_table_lock.h b/src/storage/tablelock/ob_mem_ctx_table_lock.h index 498264897a..3064b61df8 100644 --- a/src/storage/tablelock/ob_mem_ctx_table_lock.h +++ b/src/storage/tablelock/ob_mem_ctx_table_lock.h @@ -89,9 +89,11 @@ public: const ObTableLockOpType op_type, bool &is_exist, ObTableLockMode &lock_mode_in_same_trans) const; + // wait all the trans that modify with a smaller schema_version finished. int check_modify_schema_elapsed( const ObLockID &lock_id, const int64_t schema_version); + // wait all the trans that modify with a smaller timestamp finished. int check_modify_time_elapsed( const ObLockID &lock_id, const int64_t timestamp);