diff --git a/src/storage/ddl/ob_tablet_ddl_kv.h b/src/storage/ddl/ob_tablet_ddl_kv.h index 986c9f31f..d0ef32821 100644 --- a/src/storage/ddl/ob_tablet_ddl_kv.h +++ b/src/storage/ddl/ob_tablet_ddl_kv.h @@ -129,6 +129,7 @@ public: share::SCN get_min_scn() const { return min_scn_; } share::SCN get_freeze_scn() const { return freeze_scn_; } share::SCN get_ddl_start_scn() const { return ddl_start_scn_; } + share::SCN get_start_scn() const { return last_freezed_scn_; } int64_t get_macro_block_cnt() const { return block_meta_tree_.get_macro_block_cnt(); } void inc_pending_cnt(); // used by ddl kv pending guard void dec_pending_cnt(); diff --git a/src/storage/ddl/ob_tablet_ddl_kv_mgr.cpp b/src/storage/ddl/ob_tablet_ddl_kv_mgr.cpp index 4e9ecc5dd..e1d197eef 100644 --- a/src/storage/ddl/ob_tablet_ddl_kv_mgr.cpp +++ b/src/storage/ddl/ob_tablet_ddl_kv_mgr.cpp @@ -955,13 +955,13 @@ void ObTabletDDLKvMgr::try_get_ddl_kv_unlock(const SCN &scn, ObTableHandleV2 &kv int ret = OB_SUCCESS; kv_handle.reset(); if (get_count() > 0) { - for (int64_t i = tail_ - 1; OB_SUCC(ret) && i >= head_ && !kv_handle.is_valid(); ++i) { + for (int64_t i = tail_ - 1; OB_SUCC(ret) && i >= head_ && !kv_handle.is_valid(); --i) { ObTableHandleV2 &tmp_kv_handle = ddl_kv_handles_[get_idx(i)]; ObDDLKV *tmp_kv = static_cast(tmp_kv_handle.get_table()); if (OB_ISNULL(tmp_kv)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("ddl kv is null", K(ret), K(ls_id_), K(tablet_id_), KP(tmp_kv), K(i), K(head_), K(tail_)); - } else if (scn <= tmp_kv->get_freeze_scn()) { + } else if (scn > tmp_kv->get_start_scn() && scn <= tmp_kv->get_freeze_scn()) { kv_handle = tmp_kv_handle; break; }