use nullptr auto_inc_seq for empty_shell
This commit is contained in:
parent
d3f3058ecf
commit
5eb8d4f090
@ -481,7 +481,7 @@ int ObTablet::init(
|
||||
ObTabletCreateDeleteMdsUserData user_data;
|
||||
if (OB_FAIL(user_data.deserialize(data.ptr(), data.length(), pos))) {
|
||||
LOG_WARN("fail to deserialize tablet status cache", K(ret));
|
||||
} else if (OB_FAIL(mds_data_.init(allocator, user_data))) {
|
||||
} else if (OB_FAIL(mds_data_.init_empty_shell(user_data))) {
|
||||
LOG_WARN("failed to init mds data", K(ret), K(user_data));
|
||||
} else if (OB_FAIL(ObTabletObjLoadHelper::alloc_and_new(allocator, table_store_addr_.ptr_))) {
|
||||
LOG_WARN("fail to allocate and new rowkey read info", K(ret));
|
||||
@ -747,8 +747,9 @@ int ObTablet::fetch_autoinc_seq(ObTabletMemberWrapper<ObTabletAutoincSeq> &wrapp
|
||||
} else if (OB_UNLIKELY(!auto_inc_seq_addr.is_valid())) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("invalid auto inc seq addr", K(ret));
|
||||
} else if (auto_inc_seq_addr.is_memory_object()
|
||||
|| auto_inc_seq_addr.is_none_object()) {
|
||||
} else if (auto_inc_seq_addr.is_none_object()) {
|
||||
wrapper.set_member(nullptr); // nullptr for none object
|
||||
} else if (auto_inc_seq_addr.is_memory_object()) {
|
||||
if (OB_ISNULL(auto_inc_seq_addr.get_ptr())) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("auto inc seq addr ptr is null", K(ret), K_(mds_data_.auto_inc_seq));
|
||||
@ -961,7 +962,7 @@ int ObTablet::init_empty_shell(
|
||||
LOG_WARN("old tablet status is not deleted", K(ret), K(user_data.tablet_status_));
|
||||
} else if (OB_FAIL(tablet_meta_.assign(old_tablet.tablet_meta_))) {
|
||||
LOG_WARN("assign old tablet meta to empty shell failed", K(ret), K(old_tablet.tablet_meta_));
|
||||
} else if (OB_FAIL(mds_data_.init(allocator, user_data))) {
|
||||
} else if (OB_FAIL(mds_data_.init_empty_shell(user_data))) {
|
||||
LOG_WARN("failed to init mds data", K(ret), K(user_data));
|
||||
} else if (OB_FAIL(wait_release_memtables_())) {
|
||||
LOG_ERROR("fail to release memtables", K(ret), K(old_tablet));
|
||||
@ -1531,13 +1532,9 @@ int ObTablet::deserialize(
|
||||
if (OB_SUCC(ret)) {
|
||||
ObTabletAutoincSeq *auto_inc_seq = nullptr;
|
||||
if (mds_data_.auto_inc_seq_.addr_.is_none()) {
|
||||
if (OB_FAIL(ObTabletObjLoadHelper::alloc_and_new(allocator, auto_inc_seq))) {
|
||||
LOG_WARN("fail to allocate and new rowkey read info", K(ret));
|
||||
}
|
||||
mds_data_.auto_inc_seq_.ptr_ = nullptr;
|
||||
} else {
|
||||
IO_AND_DESERIALIZE(allocator, mds_data_.auto_inc_seq_.addr_, auto_inc_seq);
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
const int auto_inc_seq_size = auto_inc_seq->get_deep_copy_size();
|
||||
ObIStorageMetaObj *auto_inc_seq_obj = nullptr;
|
||||
if (OB_UNLIKELY(remain < auto_inc_seq_size)) {
|
||||
|
@ -205,7 +205,6 @@ public:
|
||||
// fetch_$member: member may exist in memory or disk, if in memory, get it directly, if in disk,
|
||||
// read from disk then put into kv cache, and return kv cache handle for caller
|
||||
int fetch_table_store(ObTabletMemberWrapper<ObTabletTableStore> &wrapper) const;
|
||||
int fetch_autoinc_seq(ObTabletMemberWrapper<share::ObTabletAutoincSeq> &wrapper) const;
|
||||
int load_storage_schema(
|
||||
common::ObArenaAllocator &allocator,
|
||||
const ObStorageSchema *&storage_schema) const;
|
||||
@ -720,6 +719,7 @@ private:
|
||||
void reset_ddl_memtables();
|
||||
int wait_release_memtables_();
|
||||
int mark_mds_table_switched_to_empty_shell_();
|
||||
int fetch_autoinc_seq(ObTabletMemberWrapper<share::ObTabletAutoincSeq> &wrapper) const;
|
||||
private:
|
||||
// ObTabletDDLKvMgr::MAX_DDL_KV_CNT_IN_STORAGE
|
||||
// Array size is too large, need to shrink it if possible
|
||||
|
@ -424,9 +424,7 @@ int ObTabletMdsData::init_with_update_medium_info(
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTabletMdsData::init(
|
||||
ObArenaAllocator &allocator,
|
||||
const ObTabletCreateDeleteMdsUserData &tablet_status)
|
||||
int ObTabletMdsData::init_empty_shell(const ObTabletCreateDeleteMdsUserData &tablet_status)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
|
||||
@ -435,8 +433,6 @@ int ObTabletMdsData::init(
|
||||
LOG_WARN("init twice", K(ret), K_(is_inited));
|
||||
} else if (OB_FAIL(tablet_status_cache_.assign(tablet_status))) {
|
||||
LOG_WARN("failed to copy", K(ret), K(tablet_status));
|
||||
} else if (OB_FAIL(ObTabletObjLoadHelper::alloc_and_new(allocator, auto_inc_seq_.ptr_))) {
|
||||
LOG_WARN("fail to allocate and new rowkey read info", K(ret));
|
||||
} else {
|
||||
tablet_status_.uncommitted_kv_.addr_.set_none_addr();
|
||||
tablet_status_.committed_kv_.addr_.set_none_addr();
|
||||
@ -444,6 +440,7 @@ int ObTabletMdsData::init(
|
||||
aux_tablet_info_.committed_kv_.addr_.set_none_addr();
|
||||
extra_medium_info_.reset();
|
||||
medium_info_list_.addr_.set_none_addr();
|
||||
auto_inc_seq_.ptr_ = nullptr;
|
||||
auto_inc_seq_.addr_.set_none_addr();
|
||||
|
||||
is_inited_ = true;
|
||||
|
@ -93,9 +93,7 @@ public:
|
||||
int init_with_update_medium_info(
|
||||
common::ObIAllocator &allocator,
|
||||
const ObTabletMdsData &other);
|
||||
int init(
|
||||
ObArenaAllocator &allocator,
|
||||
const ObTabletCreateDeleteMdsUserData &tablet_status);
|
||||
int init_empty_shell(const ObTabletCreateDeleteMdsUserData &tablet_status);
|
||||
int set_tablet_status(
|
||||
ObArenaAllocator *allocator,
|
||||
const ObTabletStatus::Status &tablet_status,
|
||||
|
@ -73,7 +73,7 @@ void ObTabletTransformArg::reset()
|
||||
|
||||
bool ObTabletTransformArg::is_valid() const
|
||||
{
|
||||
return nullptr != auto_inc_seq_ptr_
|
||||
return auto_inc_seq_addr_.is_none() ^ (nullptr != auto_inc_seq_ptr_)
|
||||
&& table_store_addr_.is_none() ^ (nullptr != rowkey_read_info_ptr_)
|
||||
&& tablet_meta_.is_valid()
|
||||
&& table_store_addr_.is_valid()
|
||||
@ -272,7 +272,7 @@ int ObTabletPersister::persist_and_fill_tablet(
|
||||
const ObTabletMeta &tablet_meta = old_tablet.get_tablet_meta();
|
||||
const ObTabletMapKey key(tablet_meta.ls_id_, tablet_meta.tablet_id_);
|
||||
ObTabletPoolType type = ObTabletPoolType::TP_NORMAL;
|
||||
ObTabletMemberWrapper<share::ObTabletAutoincSeq> auto_inc_seq;
|
||||
ObTabletMemberWrapper<share::ObTabletAutoincSeq> auto_inc_seq; // define here to keep auto_inc_seq_ptr safe
|
||||
bool try_smaller_pool = true;
|
||||
|
||||
if (old_tablet.is_empty_shell()) {
|
||||
@ -524,20 +524,24 @@ int ObTabletPersister::transform(
|
||||
|
||||
// auto_inc_seq related
|
||||
if (OB_SUCC(ret)) {
|
||||
LOG_DEBUG("TINY TABLET: tablet + rowkey_read_info + tablet store", KP(buf), K(start_pos), K(remain));
|
||||
ObIStorageMetaObj *auto_inc_obj = nullptr;
|
||||
const int auto_inc_seq_size = arg.auto_inc_seq_ptr_->get_deep_copy_size();
|
||||
if (OB_LIKELY((remain - auto_inc_seq_size) > 0)) {
|
||||
if(CLICK_FAIL(arg.auto_inc_seq_ptr_->deep_copy(buf + start_pos, remain, auto_inc_obj))) {
|
||||
LOG_WARN("fail to deep copy auto inc seq", K(ret), K(arg.auto_inc_seq_ptr_));
|
||||
} else {
|
||||
tiny_tablet->mds_data_.auto_inc_seq_.ptr_ = static_cast<share::ObTabletAutoincSeq *>(auto_inc_obj);
|
||||
remain -= auto_inc_seq_size;
|
||||
start_pos += auto_inc_seq_size;
|
||||
}
|
||||
if (OB_ISNULL(arg.auto_inc_seq_ptr_)) {
|
||||
tiny_tablet->mds_data_.auto_inc_seq_.ptr_ = nullptr;
|
||||
} else {
|
||||
LOG_DEBUG("TINY TABLET: no enough memory for auto inc seq", K(rowkey_read_info_size), K(remain),
|
||||
K(auto_inc_seq_size));
|
||||
LOG_DEBUG("TINY TABLET: tablet + rowkey_read_info + tablet store", KP(buf), K(start_pos), K(remain));
|
||||
ObIStorageMetaObj *auto_inc_obj = nullptr;
|
||||
const int auto_inc_seq_size = arg.auto_inc_seq_ptr_->get_deep_copy_size();
|
||||
if (OB_LIKELY((remain - auto_inc_seq_size) > 0)) {
|
||||
if(CLICK_FAIL(arg.auto_inc_seq_ptr_->deep_copy(buf + start_pos, remain, auto_inc_obj))) {
|
||||
LOG_WARN("fail to deep copy auto inc seq", K(ret), K(arg.auto_inc_seq_ptr_));
|
||||
} else {
|
||||
tiny_tablet->mds_data_.auto_inc_seq_.ptr_ = static_cast<share::ObTabletAutoincSeq *>(auto_inc_obj);
|
||||
remain -= auto_inc_seq_size;
|
||||
start_pos += auto_inc_seq_size;
|
||||
}
|
||||
} else {
|
||||
LOG_DEBUG("TINY TABLET: no enough memory for auto inc seq", K(rowkey_read_info_size), K(remain),
|
||||
K(auto_inc_seq_size));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user