diff --git a/src/storage/CMakeLists.txt b/src/storage/CMakeLists.txt index ca0122f590..32376ce743 100755 --- a/src/storage/CMakeLists.txt +++ b/src/storage/CMakeLists.txt @@ -504,6 +504,7 @@ ob_set_subtarget(ob_storage compaction compaction/ob_tenant_freeze_info_mgr.cpp compaction/ob_tenant_tablet_scheduler.cpp compaction/ob_schedule_dag_func.cpp + compaction/ob_extra_medium_info.cpp compaction/ob_medium_compaction_func.cpp compaction/ob_medium_compaction_mgr.cpp compaction/ob_medium_compaction_info.cpp diff --git a/src/storage/compaction/ob_extra_medium_info.cpp b/src/storage/compaction/ob_extra_medium_info.cpp new file mode 100644 index 0000000000..157960e995 --- /dev/null +++ b/src/storage/compaction/ob_extra_medium_info.cpp @@ -0,0 +1,94 @@ +/** + * Copyright (c) 2021 OceanBase + * OceanBase CE is licensed under Mulan PubL v2. + * You can use this software according to the terms and conditions of the Mulan PubL v2. + * You may obtain a copy of Mulan PubL v2 at: + * http://license.coscl.org.cn/MulanPubL-2.0 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PubL v2 for more details. + */ + +#include "storage/compaction/ob_extra_medium_info.h" +#include "lib/oblog/ob_log_module.h" +#include "lib/utility/ob_macro_utils.h" + +using namespace oceanbase::common; + +namespace oceanbase +{ +namespace compaction +{ +ObExtraMediumInfo::ObExtraMediumInfo() + : compat_(MEDIUM_LIST_VERSION), + last_compaction_type_(0), + wait_check_flag_(0), + reserved_(0), + last_medium_scn_(0) +{ +} + +ObExtraMediumInfo::ObExtraMediumInfo(const ObExtraMediumInfo &other) +{ + if (this != &other) { + compat_ = other.compat_; + last_compaction_type_ = other.last_compaction_type_; + wait_check_flag_ = other.wait_check_flag_; + reserved_ = other.reserved_; + last_medium_scn_ = other.last_medium_scn_; + } +} + +ObExtraMediumInfo &ObExtraMediumInfo::operator=(const ObExtraMediumInfo &other) +{ + if (this != &other) { + compat_ = other.compat_; + last_compaction_type_ = other.last_compaction_type_; + wait_check_flag_ = other.wait_check_flag_; + reserved_ = other.reserved_; + last_medium_scn_ = other.last_medium_scn_; + } + return *this; +} + +void ObExtraMediumInfo::reset() +{ + compat_ = MEDIUM_LIST_VERSION; + last_compaction_type_ = 0; + wait_check_flag_ = 0; + reserved_ = 0; + last_medium_scn_ = 0; +} + +int ObExtraMediumInfo::serialize(char *buf, const int64_t buf_len, int64_t &pos) const +{ + int ret = OB_SUCCESS; + LST_DO_CODE(OB_UNIS_ENCODE, + info_, + last_medium_scn_); + + return ret; +} + +int ObExtraMediumInfo::deserialize(const char *buf, const int64_t data_len, int64_t &pos) +{ + int ret = OB_SUCCESS; + LST_DO_CODE(OB_UNIS_DECODE, + info_, + last_medium_scn_); + + return ret; +} + +int64_t ObExtraMediumInfo::get_serialize_size() const +{ + int64_t len = 0; + LST_DO_CODE(OB_UNIS_ADD_LEN, + info_, + last_medium_scn_); + + return len; +} +} // namespace compaction +} // namespace oceanbase \ No newline at end of file diff --git a/src/storage/compaction/ob_extra_medium_info.h b/src/storage/compaction/ob_extra_medium_info.h new file mode 100644 index 0000000000..dede4b9e83 --- /dev/null +++ b/src/storage/compaction/ob_extra_medium_info.h @@ -0,0 +1,62 @@ +/** + * Copyright (c) 2021 OceanBase + * OceanBase CE is licensed under Mulan PubL v2. + * You can use this software according to the terms and conditions of the Mulan PubL v2. + * You may obtain a copy of Mulan PubL v2 at: + * http://license.coscl.org.cn/MulanPubL-2.0 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PubL v2 for more details. + */ + +#ifndef OCEANBASE_COMPACTION_OB_EXTRA_MEDIUM_INFO +#define OCEANBASE_COMPACTION_OB_EXTRA_MEDIUM_INFO + +#include +#include "lib/utility/ob_print_utils.h" + +namespace oceanbase +{ +namespace compaction +{ +class ObExtraMediumInfo +{ +public: + ObExtraMediumInfo(); + ~ObExtraMediumInfo() = default; + ObExtraMediumInfo(const ObExtraMediumInfo &other); + ObExtraMediumInfo &operator=(const ObExtraMediumInfo &other); +public: + void reset(); + + int serialize(char *buf, const int64_t buf_len, int64_t &pos) const; + int deserialize(const char *buf, const int64_t data_len, int64_t &pos); + int64_t get_serialize_size() const; + + TO_STRING_KV(K_(info), + K_(compat), + K_(last_compaction_type), + K_(wait_check_flag), + K_(last_medium_scn)); +public: + static constexpr int64_t MEDIUM_LIST_VERSION = 1; + static constexpr int32_t MEDIUM_LIST_INFO_RESERVED_BITS = 51; +public: + union + { + uint64_t info_; + struct + { + uint64_t compat_ : 8; + uint64_t last_compaction_type_ : 4; // check inner_table when last_compaction is major + uint64_t wait_check_flag_ : 1; // true: need check finish, false: no need check + uint64_t reserved_ : MEDIUM_LIST_INFO_RESERVED_BITS; + }; + }; + int64_t last_medium_scn_; +}; +} // namespace compaction +} // namespace oceanbase + +#endif // OCEANBASE_COMPACTION_OB_EXTRA_MEDIUM_INFO diff --git a/src/storage/compaction/ob_medium_compaction_mgr.cpp b/src/storage/compaction/ob_medium_compaction_mgr.cpp index 84f4d477bc..dfa7d009b2 100644 --- a/src/storage/compaction/ob_medium_compaction_mgr.cpp +++ b/src/storage/compaction/ob_medium_compaction_mgr.cpp @@ -24,6 +24,7 @@ namespace oceanbase { using namespace storage; +using namespace common; namespace compaction { @@ -404,11 +405,8 @@ int ObTabletMediumCompactionInfoRecorder::submit_log( ObMediumCompactionInfoList::ObMediumCompactionInfoList() : is_inited_(false), allocator_(nullptr), - compat_(MEDIUM_LIST_VERSION), - last_compaction_type_(0), - wait_check_flag_(0), - reserved_(0), - last_medium_scn_(0) + extra_info_(), + medium_info_list_() { } @@ -424,7 +422,6 @@ int ObMediumCompactionInfoList::init(common::ObIAllocator &allocator) ret = OB_INIT_TWICE; LOG_WARN("init twice", K(ret)); } else { - compat_ = MEDIUM_LIST_VERSION; allocator_ = &allocator; is_inited_ = true; } @@ -445,7 +442,6 @@ int ObMediumCompactionInfoList::init( } else { allocator_ = &allocator; set_basic_info(*input_list); - compat_ = MEDIUM_LIST_VERSION; is_inited_ = true; } return ret; @@ -453,7 +449,7 @@ int ObMediumCompactionInfoList::init( int ObMediumCompactionInfoList::init( common::ObIAllocator &allocator, - const ObTaletExtraMediumInfo &extra_medium_info, + const ObExtraMediumInfo &extra_medium_info, const ObTabletDumpedMediumInfo &medium_info_list) { int ret = OB_SUCCESS; @@ -497,10 +493,7 @@ int ObMediumCompactionInfoList::init( if (OB_FAIL(ret)) { reset(); } else { - compat_ = MEDIUM_LIST_VERSION; - last_compaction_type_ = extra_medium_info.last_compaction_type_; - last_medium_scn_ = extra_medium_info.last_medium_scn_; - wait_check_flag_ = extra_medium_info.wait_check_flag_; + extra_info_ = extra_medium_info; is_inited_ = true; } } @@ -522,10 +515,9 @@ void ObMediumCompactionInfoList::reset() if (OB_NOT_NULL(allocator_)) { reset_list(); } - is_inited_ = false; - info_ = 0; - last_medium_scn_ = 0; + extra_info_.reset(); allocator_ = nullptr; + is_inited_ = false; } int ObMediumCompactionInfoList::serialize(char *buf, const int64_t buf_len, int64_t &pos) const @@ -539,12 +531,10 @@ int ObMediumCompactionInfoList::serialize(char *buf, const int64_t buf_len, int6 } else if (OB_UNLIKELY(!is_valid())) { ret = OB_ERR_UNEXPECTED; LOG_WARN("medium info list is invalid", K(ret), KPC(this)); - } else if (OB_FAIL(serialization::encode_vi64(buf, buf_len, new_pos, info_))) { - STORAGE_LOG(WARN, "failed to serialize info", K(ret), K(buf_len), K(pos)); - } else if (OB_FAIL(serialization::encode_vi64(buf, buf_len, new_pos, last_medium_scn_))) { - STORAGE_LOG(WARN, "failed to serialize wait_check_medium_scn", K(ret), K(buf_len), K(pos)); + } else if (OB_FAIL(extra_info_.serialize(buf, buf_len, new_pos))) { + LOG_WARN("failed to serialize extra info", K(ret), K(buf_len), K(pos)); } else if (OB_FAIL(serialization::encode_vi64(buf, buf_len, new_pos, medium_info_list_.get_size()))) { - LOG_WARN("failed to serialize medium status", K(ret), K(buf_len)); + LOG_WARN("failed to serialize medium info list count", K(ret), K(buf_len)); } else { DLIST_FOREACH_X(info, medium_info_list_, OB_SUCC(ret)) { if (OB_FAIL(static_cast(info)->serialize(buf, buf_len, new_pos))) { @@ -569,6 +559,7 @@ int ObMediumCompactionInfoList::deserialize( int ret = OB_SUCCESS; int64_t new_pos = pos; int64_t deserialize_info = 0; + int64_t last_medium_scn = 0; int64_t list_count = 0; if (IS_INIT) { ret = OB_INIT_TWICE; @@ -577,7 +568,7 @@ int ObMediumCompactionInfoList::deserialize( ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid args", K(ret), K(buf), K(data_len), K(pos)); } else if (OB_FAIL(serialization::decode_vi64(buf, data_len, new_pos, &deserialize_info))) { - LOG_WARN("failed to deserialize cur medium snapshot", K(ret), K(data_len)); + LOG_WARN("failed to deserialize info", K(ret), K(data_len)); } else if (0 == deserialize_info) { if (OB_FAIL(serialization::decode_vi64(buf, data_len, new_pos, &list_count))) { LOG_WARN("failed to deserialize list count", K(ret), K(data_len)); @@ -585,10 +576,11 @@ int ObMediumCompactionInfoList::deserialize( ret = OB_ERR_UNEXPECTED; LOG_WARN("list count should be zero in old version medium list", K(ret), K(list_count)); } - } else if (FALSE_IT(info_ = deserialize_info)) { + } else if (FALSE_IT(extra_info_.info_ = deserialize_info)) { } else if (FALSE_IT(allocator_ = &allocator)) { // set allocator to call reset() when deserialize failed - } else if (OB_FAIL(serialization::decode_vi64(buf, data_len, new_pos, &last_medium_scn_))) { - LOG_WARN("failed to deserialize wait_check_medium_scn", K(ret), K(data_len)); + } else if (OB_FAIL(serialization::decode_vi64(buf, data_len, new_pos, &last_medium_scn))) { + LOG_WARN("failed to deserialize last medium scn", K(ret), K(data_len)); + } else if (FALSE_IT(extra_info_.last_medium_scn_ = last_medium_scn)) { } else if (OB_FAIL(serialization::decode_vi64(buf, data_len, new_pos, &list_count))) { LOG_WARN("failed to deserialize list count", K(ret), K(data_len)); } else if (OB_UNLIKELY(list_count < 0)) { @@ -624,7 +616,7 @@ int ObMediumCompactionInfoList::deserialize( ret = OB_ERR_UNEXPECTED; LOG_WARN("medium info list is invalid", K(ret), KPC(this)); } else { - compat_ = MEDIUM_LIST_VERSION; + extra_info_.compat_ = ObExtraMediumInfo::MEDIUM_LIST_VERSION; is_inited_ = true; pos = new_pos; } @@ -634,8 +626,7 @@ int ObMediumCompactionInfoList::deserialize( int64_t ObMediumCompactionInfoList::get_serialize_size() const { int64_t len = 0; - len += serialization::encoded_length_vi64(info_); - len += serialization::encoded_length_vi64(last_medium_scn_); + len += extra_info_.get_serialize_size(); len += serialization::encoded_length_vi64(medium_info_list_.get_size()); DLIST_FOREACH_NORET(info, medium_info_list_){ len += static_cast(info)->get_serialize_size(); @@ -650,7 +641,7 @@ void ObMediumCompactionInfoList::gene_info( // do nothing } else { J_OBJ_START(); - J_KV("size", size(), K_(last_compaction_type), K_(wait_check_flag), K_(last_medium_scn)); + J_KV(K_(extra_info), "size", size()); J_COMMA(); BUF_PRINTF("info_list"); J_COLON(); diff --git a/src/storage/compaction/ob_medium_compaction_mgr.h b/src/storage/compaction/ob_medium_compaction_mgr.h index 59a05899b6..bcad827d33 100644 --- a/src/storage/compaction/ob_medium_compaction_mgr.h +++ b/src/storage/compaction/ob_medium_compaction_mgr.h @@ -19,13 +19,13 @@ #include "storage/meta_mem/ob_tablet_handle.h" #include "storage/compaction/ob_partition_merge_policy.h" #include "storage/compaction/ob_medium_compaction_info.h" +#include "storage/compaction/ob_extra_medium_info.h" namespace oceanbase { namespace storage { class ObTablet; -class ObTaletExtraMediumInfo; class ObTabletDumpedMediumInfo; } namespace compaction @@ -100,7 +100,7 @@ public: int init( common::ObIAllocator &allocator, - const ObTaletExtraMediumInfo &extra_medium_info, + const ObExtraMediumInfo &extra_medium_info, const ObTabletDumpedMediumInfo &medium_info_list); void reset(); @@ -112,8 +112,8 @@ public: return inner_is_valid(); } OB_INLINE const MediumInfoList &get_list() const { return medium_info_list_; } - OB_INLINE int64_t get_wait_check_medium_scn() const { return wait_check_flag_ ? last_medium_scn_ : 0; } - OB_INLINE bool need_check_finish() const { return wait_check_flag_; } + OB_INLINE int64_t get_wait_check_medium_scn() const { return extra_info_.wait_check_flag_ ? extra_info_.last_medium_scn_ : 0; } + OB_INLINE bool need_check_finish() const { return extra_info_.wait_check_flag_; } // check status on serialized medium list OB_INLINE bool could_schedule_next_round() const { @@ -122,15 +122,15 @@ public: const ObMediumCompactionInfo *get_next_schedule_medium_info(const int64_t last_major_snapshot) const; OB_INLINE ObMediumCompactionInfo::ObCompactionType get_last_compaction_type() const { - return (ObMediumCompactionInfo::ObCompactionType)last_compaction_type_; + return static_cast(extra_info_.last_compaction_type_); } OB_INLINE int64_t get_last_compaction_scn() const { - return last_medium_scn_; + return extra_info_.last_medium_scn_; } OB_INLINE uint64_t get_union_info() const { - return info_; + return extra_info_.info_; } // serialize & deserialize @@ -147,42 +147,26 @@ public: const ObMediumCompactionInfo &medium_info, const ObITable *last_major_sstable, const bool force_check); - TO_STRING_KV(K_(is_inited), K_(info), K_(last_compaction_type), K_(wait_check_flag), K_(last_medium_scn), - "list_size", size(), K_(medium_info_list)); + TO_STRING_KV(K_(is_inited), K_(extra_info), "list_size", size(), K_(medium_info_list)); private: void reset_list(); OB_INLINE bool inner_is_valid() const { - return last_compaction_type_ < ObMediumCompactionInfo::COMPACTION_TYPE_MAX - && last_medium_scn_ >= 0 && size() >= 0; + return extra_info_.last_compaction_type_ < ObMediumCompactionInfo::COMPACTION_TYPE_MAX + && extra_info_.last_medium_scn_ >= 0 && size() >= 0; } OB_INLINE void set_basic_info(const ObMediumCompactionInfoList &input_list) { - last_compaction_type_ = input_list.last_compaction_type_; - last_medium_scn_ = input_list.last_medium_scn_; - wait_check_flag_ = input_list.wait_check_flag_; + extra_info_ = input_list.extra_info_; } -private: - static const int64_t MEDIUM_LIST_VERSION = 1; - static const int32_t MEDIUM_LIST_INFO_RESERVED_BITS = 51; private: bool is_inited_; common::ObIAllocator *allocator_; - // need serialize - union { - uint64_t info_; - struct { - uint64_t compat_ : 8; - uint64_t last_compaction_type_ : 4; // check inner_table when last_compaction is major - uint64_t wait_check_flag_ : 1; // true: need check finish, false: don't need check - uint64_t reserved_ : MEDIUM_LIST_INFO_RESERVED_BITS; - }; - }; - int64_t last_medium_scn_; // record last finish medium_scn + ObExtraMediumInfo extra_info_; MediumInfoList medium_info_list_; // need for compat, will not store any MediumCompactionInfo after 4.2 }; diff --git a/src/storage/tablet/ob_tablet.cpp b/src/storage/tablet/ob_tablet.cpp index e3af278d85..5b601b2b30 100755 --- a/src/storage/tablet/ob_tablet.cpp +++ b/src/storage/tablet/ob_tablet.cpp @@ -31,16 +31,18 @@ #include "share/schema/ob_table_schema.h" #include "share/schema/ob_tenant_schema_service.h" #include "share/ob_tablet_autoincrement_service.h" -#include "storage/access/ob_dml_param.h" #include "storage/ob_dml_running_ctx.h" #include "storage/ob_i_store.h" #include "storage/ob_i_table.h" #include "storage/ob_row_reshape.h" #include "storage/ob_sync_tablet_seq_clog.h" #include "storage/ob_storage_schema.h" +#include "storage/ob_tenant_tablet_stat_mgr.h" +#include "storage/access/ob_dml_param.h" #include "storage/blocksstable/ob_sstable.h" #include "storage/blocksstable/ob_sstable_sec_meta_iterator.h" #include "storage/blocksstable/ob_storage_cache_suite.h" +#include "storage/compaction/ob_extra_medium_info.h" #include "storage/compaction/ob_tenant_freeze_info_mgr.h" #include "storage/compaction/ob_tenant_tablet_scheduler.h" #include "storage/memtable/ob_memtable.h" @@ -60,15 +62,13 @@ #include "storage/tablet/ob_tablet_create_delete_helper.h" #include "storage/tablet/ob_tablet_memtable_mgr.h" #include "storage/tablet/ob_tablet_ddl_info.h" +#include "storage/tablet/ob_tablet_medium_info_reader.h" #include "storage/tablet/ob_tablet_mds_node_dump_operator.h" #include "storage/tablet/ob_tablet_create_delete_mds_user_data.h" #include "storage/tablet/ob_tablet_binding_mds_user_data.h" #include "storage/tx/ob_trans_part_ctx.h" #include "storage/tx/ob_trans_service.h" #include "storage/tx_storage/ob_ls_service.h" -#include "storage/ob_tenant_tablet_stat_mgr.h" -#include "storage/blocksstable/ob_storage_cache_suite.h" -#include "storage/tablet/ob_tablet_medium_info_reader.h" namespace oceanbase { @@ -5506,7 +5506,7 @@ int ObTablet::set_initial_state(const bool initial_state) int ObTablet::load_medium_info_list( common::ObArenaAllocator &allocator, const ObTabletComplexAddr &complex_addr, - const ObTaletExtraMediumInfo &extra_info, + const compaction::ObExtraMediumInfo &extra_info, compaction::ObMediumCompactionInfoList &medium_info_list) { int ret = OB_SUCCESS; diff --git a/src/storage/tablet/ob_tablet.h b/src/storage/tablet/ob_tablet.h index e9b2b7513e..a7e7b8f41d 100755 --- a/src/storage/tablet/ob_tablet.h +++ b/src/storage/tablet/ob_tablet.h @@ -70,6 +70,12 @@ namespace blocksstable { class ObSSTable; } + +namespace compaction +{ +class ObExtraMediumInfo; +} + namespace transaction { class ObTransID; @@ -631,7 +637,7 @@ private: static int load_medium_info_list( common::ObArenaAllocator &allocator, const ObTabletComplexAddr &complex_addr, - const ObTaletExtraMediumInfo &extra_info, + const compaction::ObExtraMediumInfo &extra_info, compaction::ObMediumCompactionInfoList &medium_info_list); int set_initial_state(const bool initial_state); diff --git a/src/storage/tablet/ob_tablet_full_medium_info.cpp b/src/storage/tablet/ob_tablet_full_medium_info.cpp index 1a7bdeaf2d..d87f6e0c3d 100644 --- a/src/storage/tablet/ob_tablet_full_medium_info.cpp +++ b/src/storage/tablet/ob_tablet_full_medium_info.cpp @@ -22,55 +22,6 @@ namespace oceanbase { namespace storage { -ObTaletExtraMediumInfo::ObTaletExtraMediumInfo() - : compat_(MEDIUM_LIST_VERSION), - last_compaction_type_(0), - wait_check_flag_(0), - reserved_(0), - last_medium_scn_(0) -{ -} - -void ObTaletExtraMediumInfo::reset() -{ - compat_ = MEDIUM_LIST_VERSION; - last_compaction_type_ = 0; - wait_check_flag_ = 0; - reserved_ = 0; - last_medium_scn_ = 0; -} - -int ObTaletExtraMediumInfo::serialize(char *buf, const int64_t buf_len, int64_t &pos) const -{ - int ret = OB_SUCCESS; - LST_DO_CODE(OB_UNIS_ENCODE, - info_, - last_medium_scn_); - - return ret; -} - -int ObTaletExtraMediumInfo::deserialize(const char *buf, const int64_t data_len, int64_t &pos) -{ - int ret = OB_SUCCESS; - LST_DO_CODE(OB_UNIS_DECODE, - info_, - last_medium_scn_); - - return ret; -} - -int64_t ObTaletExtraMediumInfo::get_serialize_size() const -{ - int64_t len = 0; - LST_DO_CODE(OB_UNIS_ADD_LEN, - info_, - last_medium_scn_); - - return len; -} - - ObTabletFullMediumInfo::ObTabletFullMediumInfo() : extra_medium_info_(), medium_info_list_() diff --git a/src/storage/tablet/ob_tablet_full_medium_info.h b/src/storage/tablet/ob_tablet_full_medium_info.h index 23e84b4a7e..cb3ce09822 100644 --- a/src/storage/tablet/ob_tablet_full_medium_info.h +++ b/src/storage/tablet/ob_tablet_full_medium_info.h @@ -16,6 +16,7 @@ #include #include "lib/utility/ob_print_utils.h" #include "storage/compaction/ob_compaction_util.h" +#include "storage/compaction/ob_extra_medium_info.h" #include "storage/tablet/ob_tablet_dumped_medium_info.h" namespace oceanbase @@ -27,41 +28,6 @@ class ObIAllocator; namespace storage { -class ObTaletExtraMediumInfo -{ -public: - ObTaletExtraMediumInfo(); - ~ObTaletExtraMediumInfo() = default; -public: - void reset(); - - int serialize(char *buf, const int64_t buf_len, int64_t &pos) const; - int deserialize(const char *buf, const int64_t data_len, int64_t &pos); - int64_t get_serialize_size() const; - - TO_STRING_KV(K_(info), - K_(compat), - K_(last_compaction_type), - K_(wait_check_flag), - K_(last_medium_scn)); -private: - static const int64_t MEDIUM_LIST_VERSION = 1; - static const int32_t MEDIUM_LIST_INFO_RESERVED_BITS = 51; -public: - union - { - uint64_t info_; - struct - { - uint64_t compat_ : 8; - uint64_t last_compaction_type_ : 4; // check inner_table when last_compaction is major - uint64_t wait_check_flag_ : 1; // true: need check finish, false: don't need check - uint64_t reserved_ : MEDIUM_LIST_INFO_RESERVED_BITS; - }; - }; - int64_t last_medium_scn_; -}; - class ObTabletFullMediumInfo { public: @@ -79,7 +45,7 @@ public: TO_STRING_KV(K_(extra_medium_info), K_(medium_info_list)); public: - ObTaletExtraMediumInfo extra_medium_info_; + compaction::ObExtraMediumInfo extra_medium_info_; ObTabletDumpedMediumInfo medium_info_list_; }; } // namespace storage diff --git a/src/storage/tablet/ob_tablet_mds_data.cpp b/src/storage/tablet/ob_tablet_mds_data.cpp index 693a21ae62..849bedd326 100644 --- a/src/storage/tablet/ob_tablet_mds_data.cpp +++ b/src/storage/tablet/ob_tablet_mds_data.cpp @@ -17,6 +17,7 @@ #include "lib/utility/ob_macro_utils.h" #include "storage/blocksstable/ob_storage_cache_suite.h" #include "storage/compaction/ob_medium_compaction_mgr.h" +#include "storage/compaction/ob_extra_medium_info.h" #include "storage/tablet/ob_tablet_full_memory_mds_data.h" #include "storage/tablet/ob_tablet_obj_load_helper.h" #include "ob_i_tablet_mds_interface.h" @@ -529,7 +530,7 @@ int ObTabletMdsData::do_init( int ObTabletMdsData::init_medium_info_list( common::ObIAllocator &allocator, const ObTabletDumpedMediumInfo *old_medium_info_list, - const ObTaletExtraMediumInfo &old_extra_medium_info, + const compaction::ObExtraMediumInfo &old_extra_medium_info, const int64_t finish_medium_scn, const ObMergeType merge_type) { @@ -570,7 +571,7 @@ int ObTabletMdsData::init_medium_info_list( common::ObIAllocator &allocator, const ObTabletDumpedMediumInfo *old_medium_info_list, const ObTabletFullMediumInfo &full_memory_medium_info_list, - const ObTaletExtraMediumInfo &old_extra_medium_info, + const compaction::ObExtraMediumInfo &old_extra_medium_info, const int64_t finish_medium_scn) { int ret = OB_SUCCESS; @@ -625,7 +626,7 @@ int ObTabletMdsData::init_medium_info_list( int ObTabletMdsData::init_with_update_medium_info( common::ObIAllocator &allocator, const ObTabletDumpedMediumInfo *old_medium_info_list, - const ObTaletExtraMediumInfo &old_extra_medium_info) + const compaction::ObExtraMediumInfo &old_extra_medium_info) { int ret = OB_SUCCESS; const int64_t finish_medium_scn = old_extra_medium_info.last_medium_scn_; diff --git a/src/storage/tablet/ob_tablet_mds_data.h b/src/storage/tablet/ob_tablet_mds_data.h index 2a5d5c4f8a..ce70144333 100644 --- a/src/storage/tablet/ob_tablet_mds_data.h +++ b/src/storage/tablet/ob_tablet_mds_data.h @@ -35,6 +35,7 @@ namespace compaction class ObMediumCompactionInfoKey; class ObMediumCompactionInfo; class ObMediumCompactionInfoList; +class ObExtraMediumInfo; } namespace storage @@ -168,19 +169,19 @@ private: int init_medium_info_list( common::ObIAllocator &allocator, const ObTabletDumpedMediumInfo *old_medium_info_list, - const ObTaletExtraMediumInfo &old_extra_medium_info, + const compaction::ObExtraMediumInfo &old_extra_medium_info, const int64_t finish_medium_scn = 0, const ObMergeType merge_type = ObMergeType::MERGE_TYPE_MAX); int init_medium_info_list( common::ObIAllocator &allocator, const ObTabletDumpedMediumInfo *old_medium_info_list, const ObTabletFullMediumInfo &full_memory_medium_info_list, - const ObTaletExtraMediumInfo &old_extra_medium_info, + const compaction::ObExtraMediumInfo &old_extra_medium_info, const int64_t finish_medium_scn); int init_with_update_medium_info( common::ObIAllocator &allocator, const ObTabletDumpedMediumInfo *old_medium_info_list, - const ObTaletExtraMediumInfo &old_extra_medium_info); + const compaction::ObExtraMediumInfo &old_extra_medium_info); static int fuse_mds_dump_node( common::ObIAllocator &allocator, const ObTabletComplexAddr &mds_table_data, @@ -226,7 +227,7 @@ public: ObTabletMdsDumpStruct tablet_status_; ObTabletMdsDumpStruct aux_tablet_info_; - ObTaletExtraMediumInfo extra_medium_info_; + compaction::ObExtraMediumInfo extra_medium_info_; ObTabletComplexAddr medium_info_list_; ObTabletComplexAddr auto_inc_seq_; diff --git a/src/storage/tablet/ob_tablet_persister.h b/src/storage/tablet/ob_tablet_persister.h index 52bfa13614..64d22fa9a6 100644 --- a/src/storage/tablet/ob_tablet_persister.h +++ b/src/storage/tablet/ob_tablet_persister.h @@ -14,6 +14,7 @@ #define OCEANBASE_STORAGE_OB_TABLET_PERSIST_H_ #include "lib/allocator/page_arena.h" +#include "storage/compaction/ob_extra_medium_info.h" #include "storage/meta_mem/ob_tenant_meta_mem_mgr.h" #include "storage/tablet/ob_tablet.h" #include "storage/blockstore/ob_shared_block_reader_writer.h" @@ -57,7 +58,7 @@ public: ObMetaDiskAddr tablet_status_committed_kv_addr_; ObMetaDiskAddr aux_tablet_info_uncommitted_kv_addr_; ObMetaDiskAddr aux_tablet_info_committed_kv_addr_; - ObTaletExtraMediumInfo extra_medium_info_; + compaction::ObExtraMediumInfo extra_medium_info_; ObMetaDiskAddr medium_info_list_addr_; ObMetaDiskAddr auto_inc_seq_addr_; ObTabletCreateDeleteMdsUserData tablet_status_cache_;