diff --git a/src/storage/access/ob_multiple_merge.cpp b/src/storage/access/ob_multiple_merge.cpp index bef3769dda..c1a837173a 100644 --- a/src/storage/access/ob_multiple_merge.cpp +++ b/src/storage/access/ob_multiple_merge.cpp @@ -1326,10 +1326,14 @@ int ObMultipleMerge::prepare_tables_from_iterator(ObTableStoreIterator &table_it ++memtable_cnt; if (table_ptr->is_direct_load_memtable()) { ObDDLMemtable *ddl_memtable = nullptr; - if (OB_FAIL((static_cast(table_ptr)->get_ddl_memtable(0, ddl_memtable)))) { - LOG_WARN("fail to get ddl memtable but ignore the failure, return nullpoint", K(ret)); - } else if (OB_ISNULL(ddl_memtable)) { - continue; + if (OB_FAIL((static_cast(table_ptr)->get_first_ddl_memtable(ddl_memtable)))) { + if (ret == OB_ENTRY_NOT_EXIST) { + // memtable is null, ignore the ddl_kv + ret = OB_SUCCESS; + continue; + } else { + LOG_WARN("fail to get ddl memtable", K(ret)); + } } else { target_table_ptr = ddl_memtable; } diff --git a/src/storage/ddl/ob_tablet_ddl_kv.cpp b/src/storage/ddl/ob_tablet_ddl_kv.cpp index 2cd40f8bb0..12efc6d352 100644 --- a/src/storage/ddl/ob_tablet_ddl_kv.cpp +++ b/src/storage/ddl/ob_tablet_ddl_kv.cpp @@ -1011,6 +1011,11 @@ int ObDDLKV::get_ddl_memtable(const int64_t cg_idx, ObDDLMemtable *&ddl_memtable return ret; } +int ObDDLKV::get_first_ddl_memtable(ObDDLMemtable *&ddl_memtable) +{ + return get_ddl_memtable(0, ddl_memtable); +} + int ObDDLKV::set_macro_block( ObTablet &tablet, const ObDDLMacroBlock ¯o_block, diff --git a/src/storage/ddl/ob_tablet_ddl_kv.h b/src/storage/ddl/ob_tablet_ddl_kv.h index d72bc4dd96..21d025a538 100644 --- a/src/storage/ddl/ob_tablet_ddl_kv.h +++ b/src/storage/ddl/ob_tablet_ddl_kv.h @@ -322,6 +322,7 @@ public: int64_t get_macro_block_cnt() const { return macro_block_count_; } int create_ddl_memtable(ObTablet &tablet, const ObITable::TableKey &table_key, ObDDLMemtable *&ddl_memtable); int get_ddl_memtable(const int64_t cg_idx, ObDDLMemtable *&ddl_memtable); + int get_first_ddl_memtable(ObDDLMemtable *&ddl_memtable); ObIArray &get_ddl_memtables() { return ddl_memtables_; } void inc_pending_cnt(); // used by ddl kv pending guard void dec_pending_cnt();