add ObExtraMediumInfo and remove redundant code

This commit is contained in:
hiddenbomb
2023-08-09 13:42:32 +00:00
committed by ob-robot
parent 71dcb98637
commit 10ecdcc717
12 changed files with 213 additions and 155 deletions

View File

@ -504,6 +504,7 @@ ob_set_subtarget(ob_storage compaction
compaction/ob_tenant_freeze_info_mgr.cpp compaction/ob_tenant_freeze_info_mgr.cpp
compaction/ob_tenant_tablet_scheduler.cpp compaction/ob_tenant_tablet_scheduler.cpp
compaction/ob_schedule_dag_func.cpp compaction/ob_schedule_dag_func.cpp
compaction/ob_extra_medium_info.cpp
compaction/ob_medium_compaction_func.cpp compaction/ob_medium_compaction_func.cpp
compaction/ob_medium_compaction_mgr.cpp compaction/ob_medium_compaction_mgr.cpp
compaction/ob_medium_compaction_info.cpp compaction/ob_medium_compaction_info.cpp

View File

@ -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

View File

@ -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 <stdint.h>
#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

View File

@ -24,6 +24,7 @@
namespace oceanbase namespace oceanbase
{ {
using namespace storage; using namespace storage;
using namespace common;
namespace compaction namespace compaction
{ {
@ -404,11 +405,8 @@ int ObTabletMediumCompactionInfoRecorder::submit_log(
ObMediumCompactionInfoList::ObMediumCompactionInfoList() ObMediumCompactionInfoList::ObMediumCompactionInfoList()
: is_inited_(false), : is_inited_(false),
allocator_(nullptr), allocator_(nullptr),
compat_(MEDIUM_LIST_VERSION), extra_info_(),
last_compaction_type_(0), medium_info_list_()
wait_check_flag_(0),
reserved_(0),
last_medium_scn_(0)
{ {
} }
@ -424,7 +422,6 @@ int ObMediumCompactionInfoList::init(common::ObIAllocator &allocator)
ret = OB_INIT_TWICE; ret = OB_INIT_TWICE;
LOG_WARN("init twice", K(ret)); LOG_WARN("init twice", K(ret));
} else { } else {
compat_ = MEDIUM_LIST_VERSION;
allocator_ = &allocator; allocator_ = &allocator;
is_inited_ = true; is_inited_ = true;
} }
@ -445,7 +442,6 @@ int ObMediumCompactionInfoList::init(
} else { } else {
allocator_ = &allocator; allocator_ = &allocator;
set_basic_info(*input_list); set_basic_info(*input_list);
compat_ = MEDIUM_LIST_VERSION;
is_inited_ = true; is_inited_ = true;
} }
return ret; return ret;
@ -453,7 +449,7 @@ int ObMediumCompactionInfoList::init(
int ObMediumCompactionInfoList::init( int ObMediumCompactionInfoList::init(
common::ObIAllocator &allocator, common::ObIAllocator &allocator,
const ObTaletExtraMediumInfo &extra_medium_info, const ObExtraMediumInfo &extra_medium_info,
const ObTabletDumpedMediumInfo &medium_info_list) const ObTabletDumpedMediumInfo &medium_info_list)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
@ -497,10 +493,7 @@ int ObMediumCompactionInfoList::init(
if (OB_FAIL(ret)) { if (OB_FAIL(ret)) {
reset(); reset();
} else { } else {
compat_ = MEDIUM_LIST_VERSION; extra_info_ = extra_medium_info;
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_;
is_inited_ = true; is_inited_ = true;
} }
} }
@ -522,10 +515,9 @@ void ObMediumCompactionInfoList::reset()
if (OB_NOT_NULL(allocator_)) { if (OB_NOT_NULL(allocator_)) {
reset_list(); reset_list();
} }
is_inited_ = false; extra_info_.reset();
info_ = 0;
last_medium_scn_ = 0;
allocator_ = nullptr; allocator_ = nullptr;
is_inited_ = false;
} }
int ObMediumCompactionInfoList::serialize(char *buf, const int64_t buf_len, int64_t &pos) const 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())) { } else if (OB_UNLIKELY(!is_valid())) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("medium info list is invalid", K(ret), KPC(this)); LOG_WARN("medium info list is invalid", K(ret), KPC(this));
} else if (OB_FAIL(serialization::encode_vi64(buf, buf_len, new_pos, info_))) { } else if (OB_FAIL(extra_info_.serialize(buf, buf_len, new_pos))) {
STORAGE_LOG(WARN, "failed to serialize info", K(ret), K(buf_len), K(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, last_medium_scn_))) {
STORAGE_LOG(WARN, "failed to serialize wait_check_medium_scn", K(ret), K(buf_len), K(pos));
} else if (OB_FAIL(serialization::encode_vi64(buf, buf_len, new_pos, medium_info_list_.get_size()))) { } 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 { } else {
DLIST_FOREACH_X(info, medium_info_list_, OB_SUCC(ret)) { DLIST_FOREACH_X(info, medium_info_list_, OB_SUCC(ret)) {
if (OB_FAIL(static_cast<const ObMediumCompactionInfo *>(info)->serialize(buf, buf_len, new_pos))) { if (OB_FAIL(static_cast<const ObMediumCompactionInfo *>(info)->serialize(buf, buf_len, new_pos))) {
@ -569,6 +559,7 @@ int ObMediumCompactionInfoList::deserialize(
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
int64_t new_pos = pos; int64_t new_pos = pos;
int64_t deserialize_info = 0; int64_t deserialize_info = 0;
int64_t last_medium_scn = 0;
int64_t list_count = 0; int64_t list_count = 0;
if (IS_INIT) { if (IS_INIT) {
ret = OB_INIT_TWICE; ret = OB_INIT_TWICE;
@ -577,7 +568,7 @@ int ObMediumCompactionInfoList::deserialize(
ret = OB_INVALID_ARGUMENT; ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid args", K(ret), K(buf), K(data_len), K(pos)); 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))) { } 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) { } else if (0 == deserialize_info) {
if (OB_FAIL(serialization::decode_vi64(buf, data_len, new_pos, &list_count))) { 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)); LOG_WARN("failed to deserialize list count", K(ret), K(data_len));
@ -585,10 +576,11 @@ int ObMediumCompactionInfoList::deserialize(
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("list count should be zero in old version medium list", K(ret), K(list_count)); 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 (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_))) { } 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)); 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))) { } 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)); LOG_WARN("failed to deserialize list count", K(ret), K(data_len));
} else if (OB_UNLIKELY(list_count < 0)) { } else if (OB_UNLIKELY(list_count < 0)) {
@ -624,7 +616,7 @@ int ObMediumCompactionInfoList::deserialize(
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("medium info list is invalid", K(ret), KPC(this)); LOG_WARN("medium info list is invalid", K(ret), KPC(this));
} else { } else {
compat_ = MEDIUM_LIST_VERSION; extra_info_.compat_ = ObExtraMediumInfo::MEDIUM_LIST_VERSION;
is_inited_ = true; is_inited_ = true;
pos = new_pos; pos = new_pos;
} }
@ -634,8 +626,7 @@ int ObMediumCompactionInfoList::deserialize(
int64_t ObMediumCompactionInfoList::get_serialize_size() const int64_t ObMediumCompactionInfoList::get_serialize_size() const
{ {
int64_t len = 0; int64_t len = 0;
len += serialization::encoded_length_vi64(info_); len += extra_info_.get_serialize_size();
len += serialization::encoded_length_vi64(last_medium_scn_);
len += serialization::encoded_length_vi64(medium_info_list_.get_size()); len += serialization::encoded_length_vi64(medium_info_list_.get_size());
DLIST_FOREACH_NORET(info, medium_info_list_){ DLIST_FOREACH_NORET(info, medium_info_list_){
len += static_cast<const ObMediumCompactionInfo *>(info)->get_serialize_size(); len += static_cast<const ObMediumCompactionInfo *>(info)->get_serialize_size();
@ -650,7 +641,7 @@ void ObMediumCompactionInfoList::gene_info(
// do nothing // do nothing
} else { } else {
J_OBJ_START(); 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(); J_COMMA();
BUF_PRINTF("info_list"); BUF_PRINTF("info_list");
J_COLON(); J_COLON();

View File

@ -19,13 +19,13 @@
#include "storage/meta_mem/ob_tablet_handle.h" #include "storage/meta_mem/ob_tablet_handle.h"
#include "storage/compaction/ob_partition_merge_policy.h" #include "storage/compaction/ob_partition_merge_policy.h"
#include "storage/compaction/ob_medium_compaction_info.h" #include "storage/compaction/ob_medium_compaction_info.h"
#include "storage/compaction/ob_extra_medium_info.h"
namespace oceanbase namespace oceanbase
{ {
namespace storage namespace storage
{ {
class ObTablet; class ObTablet;
class ObTaletExtraMediumInfo;
class ObTabletDumpedMediumInfo; class ObTabletDumpedMediumInfo;
} }
namespace compaction namespace compaction
@ -100,7 +100,7 @@ public:
int init( int init(
common::ObIAllocator &allocator, common::ObIAllocator &allocator,
const ObTaletExtraMediumInfo &extra_medium_info, const ObExtraMediumInfo &extra_medium_info,
const ObTabletDumpedMediumInfo &medium_info_list); const ObTabletDumpedMediumInfo &medium_info_list);
void reset(); void reset();
@ -112,8 +112,8 @@ public:
return inner_is_valid(); return inner_is_valid();
} }
OB_INLINE const MediumInfoList &get_list() const { return medium_info_list_; } 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 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 wait_check_flag_; } OB_INLINE bool need_check_finish() const { return extra_info_.wait_check_flag_; }
// check status on serialized medium list // check status on serialized medium list
OB_INLINE bool could_schedule_next_round() const 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; const ObMediumCompactionInfo *get_next_schedule_medium_info(const int64_t last_major_snapshot) const;
OB_INLINE ObMediumCompactionInfo::ObCompactionType get_last_compaction_type() const OB_INLINE ObMediumCompactionInfo::ObCompactionType get_last_compaction_type() const
{ {
return (ObMediumCompactionInfo::ObCompactionType)last_compaction_type_; return static_cast<ObMediumCompactionInfo::ObCompactionType>(extra_info_.last_compaction_type_);
} }
OB_INLINE int64_t get_last_compaction_scn() const 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 OB_INLINE uint64_t get_union_info() const
{ {
return info_; return extra_info_.info_;
} }
// serialize & deserialize // serialize & deserialize
@ -147,42 +147,26 @@ public:
const ObMediumCompactionInfo &medium_info, const ObMediumCompactionInfo &medium_info,
const ObITable *last_major_sstable, const ObITable *last_major_sstable,
const bool force_check); const bool force_check);
TO_STRING_KV(K_(is_inited), K_(info), K_(last_compaction_type), K_(wait_check_flag), K_(last_medium_scn), TO_STRING_KV(K_(is_inited), K_(extra_info), "list_size", size(), K_(medium_info_list));
"list_size", size(), K_(medium_info_list));
private: private:
void reset_list(); void reset_list();
OB_INLINE bool inner_is_valid() const OB_INLINE bool inner_is_valid() const
{ {
return last_compaction_type_ < ObMediumCompactionInfo::COMPACTION_TYPE_MAX return extra_info_.last_compaction_type_ < ObMediumCompactionInfo::COMPACTION_TYPE_MAX
&& last_medium_scn_ >= 0 && size() >= 0; && extra_info_.last_medium_scn_ >= 0 && size() >= 0;
} }
OB_INLINE void set_basic_info(const ObMediumCompactionInfoList &input_list) OB_INLINE void set_basic_info(const ObMediumCompactionInfoList &input_list)
{ {
last_compaction_type_ = input_list.last_compaction_type_; extra_info_ = input_list.extra_info_;
last_medium_scn_ = input_list.last_medium_scn_;
wait_check_flag_ = input_list.wait_check_flag_;
} }
private:
static const int64_t MEDIUM_LIST_VERSION = 1;
static const int32_t MEDIUM_LIST_INFO_RESERVED_BITS = 51;
private: private:
bool is_inited_; bool is_inited_;
common::ObIAllocator *allocator_; common::ObIAllocator *allocator_;
// need serialize ObExtraMediumInfo extra_info_;
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
MediumInfoList medium_info_list_; // need for compat, will not store any MediumCompactionInfo after 4.2 MediumInfoList medium_info_list_; // need for compat, will not store any MediumCompactionInfo after 4.2
}; };

View File

@ -31,16 +31,18 @@
#include "share/schema/ob_table_schema.h" #include "share/schema/ob_table_schema.h"
#include "share/schema/ob_tenant_schema_service.h" #include "share/schema/ob_tenant_schema_service.h"
#include "share/ob_tablet_autoincrement_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_dml_running_ctx.h"
#include "storage/ob_i_store.h" #include "storage/ob_i_store.h"
#include "storage/ob_i_table.h" #include "storage/ob_i_table.h"
#include "storage/ob_row_reshape.h" #include "storage/ob_row_reshape.h"
#include "storage/ob_sync_tablet_seq_clog.h" #include "storage/ob_sync_tablet_seq_clog.h"
#include "storage/ob_storage_schema.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.h"
#include "storage/blocksstable/ob_sstable_sec_meta_iterator.h" #include "storage/blocksstable/ob_sstable_sec_meta_iterator.h"
#include "storage/blocksstable/ob_storage_cache_suite.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_freeze_info_mgr.h"
#include "storage/compaction/ob_tenant_tablet_scheduler.h" #include "storage/compaction/ob_tenant_tablet_scheduler.h"
#include "storage/memtable/ob_memtable.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_create_delete_helper.h"
#include "storage/tablet/ob_tablet_memtable_mgr.h" #include "storage/tablet/ob_tablet_memtable_mgr.h"
#include "storage/tablet/ob_tablet_ddl_info.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_mds_node_dump_operator.h"
#include "storage/tablet/ob_tablet_create_delete_mds_user_data.h" #include "storage/tablet/ob_tablet_create_delete_mds_user_data.h"
#include "storage/tablet/ob_tablet_binding_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_part_ctx.h"
#include "storage/tx/ob_trans_service.h" #include "storage/tx/ob_trans_service.h"
#include "storage/tx_storage/ob_ls_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 namespace oceanbase
{ {
@ -5506,7 +5506,7 @@ int ObTablet::set_initial_state(const bool initial_state)
int ObTablet::load_medium_info_list( int ObTablet::load_medium_info_list(
common::ObArenaAllocator &allocator, common::ObArenaAllocator &allocator,
const ObTabletComplexAddr<oceanbase::storage::ObTabletDumpedMediumInfo> &complex_addr, const ObTabletComplexAddr<oceanbase::storage::ObTabletDumpedMediumInfo> &complex_addr,
const ObTaletExtraMediumInfo &extra_info, const compaction::ObExtraMediumInfo &extra_info,
compaction::ObMediumCompactionInfoList &medium_info_list) compaction::ObMediumCompactionInfoList &medium_info_list)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;

View File

@ -70,6 +70,12 @@ namespace blocksstable
{ {
class ObSSTable; class ObSSTable;
} }
namespace compaction
{
class ObExtraMediumInfo;
}
namespace transaction namespace transaction
{ {
class ObTransID; class ObTransID;
@ -631,7 +637,7 @@ private:
static int load_medium_info_list( static int load_medium_info_list(
common::ObArenaAllocator &allocator, common::ObArenaAllocator &allocator,
const ObTabletComplexAddr<oceanbase::storage::ObTabletDumpedMediumInfo> &complex_addr, const ObTabletComplexAddr<oceanbase::storage::ObTabletDumpedMediumInfo> &complex_addr,
const ObTaletExtraMediumInfo &extra_info, const compaction::ObExtraMediumInfo &extra_info,
compaction::ObMediumCompactionInfoList &medium_info_list); compaction::ObMediumCompactionInfoList &medium_info_list);
int set_initial_state(const bool initial_state); int set_initial_state(const bool initial_state);

View File

@ -22,55 +22,6 @@ namespace oceanbase
{ {
namespace storage 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() ObTabletFullMediumInfo::ObTabletFullMediumInfo()
: extra_medium_info_(), : extra_medium_info_(),
medium_info_list_() medium_info_list_()

View File

@ -16,6 +16,7 @@
#include <stdint.h> #include <stdint.h>
#include "lib/utility/ob_print_utils.h" #include "lib/utility/ob_print_utils.h"
#include "storage/compaction/ob_compaction_util.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" #include "storage/tablet/ob_tablet_dumped_medium_info.h"
namespace oceanbase namespace oceanbase
@ -27,41 +28,6 @@ class ObIAllocator;
namespace storage 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 class ObTabletFullMediumInfo
{ {
public: public:
@ -79,7 +45,7 @@ public:
TO_STRING_KV(K_(extra_medium_info), K_(medium_info_list)); TO_STRING_KV(K_(extra_medium_info), K_(medium_info_list));
public: public:
ObTaletExtraMediumInfo extra_medium_info_; compaction::ObExtraMediumInfo extra_medium_info_;
ObTabletDumpedMediumInfo medium_info_list_; ObTabletDumpedMediumInfo medium_info_list_;
}; };
} // namespace storage } // namespace storage

View File

@ -17,6 +17,7 @@
#include "lib/utility/ob_macro_utils.h" #include "lib/utility/ob_macro_utils.h"
#include "storage/blocksstable/ob_storage_cache_suite.h" #include "storage/blocksstable/ob_storage_cache_suite.h"
#include "storage/compaction/ob_medium_compaction_mgr.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_full_memory_mds_data.h"
#include "storage/tablet/ob_tablet_obj_load_helper.h" #include "storage/tablet/ob_tablet_obj_load_helper.h"
#include "ob_i_tablet_mds_interface.h" #include "ob_i_tablet_mds_interface.h"
@ -529,7 +530,7 @@ int ObTabletMdsData::do_init(
int ObTabletMdsData::init_medium_info_list( int ObTabletMdsData::init_medium_info_list(
common::ObIAllocator &allocator, common::ObIAllocator &allocator,
const ObTabletDumpedMediumInfo *old_medium_info_list, 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 int64_t finish_medium_scn,
const ObMergeType merge_type) const ObMergeType merge_type)
{ {
@ -570,7 +571,7 @@ int ObTabletMdsData::init_medium_info_list(
common::ObIAllocator &allocator, common::ObIAllocator &allocator,
const ObTabletDumpedMediumInfo *old_medium_info_list, const ObTabletDumpedMediumInfo *old_medium_info_list,
const ObTabletFullMediumInfo &full_memory_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) const int64_t finish_medium_scn)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
@ -625,7 +626,7 @@ int ObTabletMdsData::init_medium_info_list(
int ObTabletMdsData::init_with_update_medium_info( int ObTabletMdsData::init_with_update_medium_info(
common::ObIAllocator &allocator, common::ObIAllocator &allocator,
const ObTabletDumpedMediumInfo *old_medium_info_list, const ObTabletDumpedMediumInfo *old_medium_info_list,
const ObTaletExtraMediumInfo &old_extra_medium_info) const compaction::ObExtraMediumInfo &old_extra_medium_info)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
const int64_t finish_medium_scn = old_extra_medium_info.last_medium_scn_; const int64_t finish_medium_scn = old_extra_medium_info.last_medium_scn_;

View File

@ -35,6 +35,7 @@ namespace compaction
class ObMediumCompactionInfoKey; class ObMediumCompactionInfoKey;
class ObMediumCompactionInfo; class ObMediumCompactionInfo;
class ObMediumCompactionInfoList; class ObMediumCompactionInfoList;
class ObExtraMediumInfo;
} }
namespace storage namespace storage
@ -168,19 +169,19 @@ private:
int init_medium_info_list( int init_medium_info_list(
common::ObIAllocator &allocator, common::ObIAllocator &allocator,
const ObTabletDumpedMediumInfo *old_medium_info_list, 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 int64_t finish_medium_scn = 0,
const ObMergeType merge_type = ObMergeType::MERGE_TYPE_MAX); const ObMergeType merge_type = ObMergeType::MERGE_TYPE_MAX);
int init_medium_info_list( int init_medium_info_list(
common::ObIAllocator &allocator, common::ObIAllocator &allocator,
const ObTabletDumpedMediumInfo *old_medium_info_list, const ObTabletDumpedMediumInfo *old_medium_info_list,
const ObTabletFullMediumInfo &full_memory_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); const int64_t finish_medium_scn);
int init_with_update_medium_info( int init_with_update_medium_info(
common::ObIAllocator &allocator, common::ObIAllocator &allocator,
const ObTabletDumpedMediumInfo *old_medium_info_list, 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( static int fuse_mds_dump_node(
common::ObIAllocator &allocator, common::ObIAllocator &allocator,
const ObTabletComplexAddr<mds::MdsDumpKV> &mds_table_data, const ObTabletComplexAddr<mds::MdsDumpKV> &mds_table_data,
@ -226,7 +227,7 @@ public:
ObTabletMdsDumpStruct tablet_status_; ObTabletMdsDumpStruct tablet_status_;
ObTabletMdsDumpStruct aux_tablet_info_; ObTabletMdsDumpStruct aux_tablet_info_;
ObTaletExtraMediumInfo extra_medium_info_; compaction::ObExtraMediumInfo extra_medium_info_;
ObTabletComplexAddr<ObTabletDumpedMediumInfo> medium_info_list_; ObTabletComplexAddr<ObTabletDumpedMediumInfo> medium_info_list_;
ObTabletComplexAddr<share::ObTabletAutoincSeq> auto_inc_seq_; ObTabletComplexAddr<share::ObTabletAutoincSeq> auto_inc_seq_;

View File

@ -14,6 +14,7 @@
#define OCEANBASE_STORAGE_OB_TABLET_PERSIST_H_ #define OCEANBASE_STORAGE_OB_TABLET_PERSIST_H_
#include "lib/allocator/page_arena.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/meta_mem/ob_tenant_meta_mem_mgr.h"
#include "storage/tablet/ob_tablet.h" #include "storage/tablet/ob_tablet.h"
#include "storage/blockstore/ob_shared_block_reader_writer.h" #include "storage/blockstore/ob_shared_block_reader_writer.h"
@ -57,7 +58,7 @@ public:
ObMetaDiskAddr tablet_status_committed_kv_addr_; ObMetaDiskAddr tablet_status_committed_kv_addr_;
ObMetaDiskAddr aux_tablet_info_uncommitted_kv_addr_; ObMetaDiskAddr aux_tablet_info_uncommitted_kv_addr_;
ObMetaDiskAddr aux_tablet_info_committed_kv_addr_; ObMetaDiskAddr aux_tablet_info_committed_kv_addr_;
ObTaletExtraMediumInfo extra_medium_info_; compaction::ObExtraMediumInfo extra_medium_info_;
ObMetaDiskAddr medium_info_list_addr_; ObMetaDiskAddr medium_info_list_addr_;
ObMetaDiskAddr auto_inc_seq_addr_; ObMetaDiskAddr auto_inc_seq_addr_;
ObTabletCreateDeleteMdsUserData tablet_status_cache_; ObTabletCreateDeleteMdsUserData tablet_status_cache_;