use nullptr auto_inc_seq for empty_shell
This commit is contained in:
@ -481,7 +481,7 @@ int ObTablet::init(
|
|||||||
ObTabletCreateDeleteMdsUserData user_data;
|
ObTabletCreateDeleteMdsUserData user_data;
|
||||||
if (OB_FAIL(user_data.deserialize(data.ptr(), data.length(), pos))) {
|
if (OB_FAIL(user_data.deserialize(data.ptr(), data.length(), pos))) {
|
||||||
LOG_WARN("fail to deserialize tablet status cache", K(ret));
|
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));
|
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_))) {
|
} 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));
|
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())) {
|
} else if (OB_UNLIKELY(!auto_inc_seq_addr.is_valid())) {
|
||||||
ret = OB_INVALID_ARGUMENT;
|
ret = OB_INVALID_ARGUMENT;
|
||||||
LOG_WARN("invalid auto inc seq addr", K(ret));
|
LOG_WARN("invalid auto inc seq addr", K(ret));
|
||||||
} else if (auto_inc_seq_addr.is_memory_object()
|
} else if (auto_inc_seq_addr.is_none_object()) {
|
||||||
|| 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())) {
|
if (OB_ISNULL(auto_inc_seq_addr.get_ptr())) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("auto inc seq addr ptr is null", K(ret), K_(mds_data_.auto_inc_seq));
|
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_));
|
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_))) {
|
} 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_));
|
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));
|
LOG_WARN("failed to init mds data", K(ret), K(user_data));
|
||||||
} else if (OB_FAIL(wait_release_memtables_())) {
|
} else if (OB_FAIL(wait_release_memtables_())) {
|
||||||
LOG_ERROR("fail to release memtables", K(ret), K(old_tablet));
|
LOG_ERROR("fail to release memtables", K(ret), K(old_tablet));
|
||||||
@ -1531,13 +1532,9 @@ int ObTablet::deserialize(
|
|||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
ObTabletAutoincSeq *auto_inc_seq = nullptr;
|
ObTabletAutoincSeq *auto_inc_seq = nullptr;
|
||||||
if (mds_data_.auto_inc_seq_.addr_.is_none()) {
|
if (mds_data_.auto_inc_seq_.addr_.is_none()) {
|
||||||
if (OB_FAIL(ObTabletObjLoadHelper::alloc_and_new(allocator, auto_inc_seq))) {
|
mds_data_.auto_inc_seq_.ptr_ = nullptr;
|
||||||
LOG_WARN("fail to allocate and new rowkey read info", K(ret));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
IO_AND_DESERIALIZE(allocator, mds_data_.auto_inc_seq_.addr_, auto_inc_seq);
|
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();
|
const int auto_inc_seq_size = auto_inc_seq->get_deep_copy_size();
|
||||||
ObIStorageMetaObj *auto_inc_seq_obj = nullptr;
|
ObIStorageMetaObj *auto_inc_seq_obj = nullptr;
|
||||||
if (OB_UNLIKELY(remain < auto_inc_seq_size)) {
|
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,
|
// 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
|
// 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_table_store(ObTabletMemberWrapper<ObTabletTableStore> &wrapper) const;
|
||||||
int fetch_autoinc_seq(ObTabletMemberWrapper<share::ObTabletAutoincSeq> &wrapper) const;
|
|
||||||
int load_storage_schema(
|
int load_storage_schema(
|
||||||
common::ObArenaAllocator &allocator,
|
common::ObArenaAllocator &allocator,
|
||||||
const ObStorageSchema *&storage_schema) const;
|
const ObStorageSchema *&storage_schema) const;
|
||||||
@ -720,6 +719,7 @@ private:
|
|||||||
void reset_ddl_memtables();
|
void reset_ddl_memtables();
|
||||||
int wait_release_memtables_();
|
int wait_release_memtables_();
|
||||||
int mark_mds_table_switched_to_empty_shell_();
|
int mark_mds_table_switched_to_empty_shell_();
|
||||||
|
int fetch_autoinc_seq(ObTabletMemberWrapper<share::ObTabletAutoincSeq> &wrapper) const;
|
||||||
private:
|
private:
|
||||||
// ObTabletDDLKvMgr::MAX_DDL_KV_CNT_IN_STORAGE
|
// ObTabletDDLKvMgr::MAX_DDL_KV_CNT_IN_STORAGE
|
||||||
// Array size is too large, need to shrink it if possible
|
// Array size is too large, need to shrink it if possible
|
||||||
|
@ -424,9 +424,7 @@ int ObTabletMdsData::init_with_update_medium_info(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ObTabletMdsData::init(
|
int ObTabletMdsData::init_empty_shell(const ObTabletCreateDeleteMdsUserData &tablet_status)
|
||||||
ObArenaAllocator &allocator,
|
|
||||||
const ObTabletCreateDeleteMdsUserData &tablet_status)
|
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
|
|
||||||
@ -435,8 +433,6 @@ int ObTabletMdsData::init(
|
|||||||
LOG_WARN("init twice", K(ret), K_(is_inited));
|
LOG_WARN("init twice", K(ret), K_(is_inited));
|
||||||
} else if (OB_FAIL(tablet_status_cache_.assign(tablet_status))) {
|
} else if (OB_FAIL(tablet_status_cache_.assign(tablet_status))) {
|
||||||
LOG_WARN("failed to copy", K(ret), K(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 {
|
} else {
|
||||||
tablet_status_.uncommitted_kv_.addr_.set_none_addr();
|
tablet_status_.uncommitted_kv_.addr_.set_none_addr();
|
||||||
tablet_status_.committed_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();
|
aux_tablet_info_.committed_kv_.addr_.set_none_addr();
|
||||||
extra_medium_info_.reset();
|
extra_medium_info_.reset();
|
||||||
medium_info_list_.addr_.set_none_addr();
|
medium_info_list_.addr_.set_none_addr();
|
||||||
|
auto_inc_seq_.ptr_ = nullptr;
|
||||||
auto_inc_seq_.addr_.set_none_addr();
|
auto_inc_seq_.addr_.set_none_addr();
|
||||||
|
|
||||||
is_inited_ = true;
|
is_inited_ = true;
|
||||||
|
@ -93,9 +93,7 @@ public:
|
|||||||
int init_with_update_medium_info(
|
int init_with_update_medium_info(
|
||||||
common::ObIAllocator &allocator,
|
common::ObIAllocator &allocator,
|
||||||
const ObTabletMdsData &other);
|
const ObTabletMdsData &other);
|
||||||
int init(
|
int init_empty_shell(const ObTabletCreateDeleteMdsUserData &tablet_status);
|
||||||
ObArenaAllocator &allocator,
|
|
||||||
const ObTabletCreateDeleteMdsUserData &tablet_status);
|
|
||||||
int set_tablet_status(
|
int set_tablet_status(
|
||||||
ObArenaAllocator *allocator,
|
ObArenaAllocator *allocator,
|
||||||
const ObTabletStatus::Status &tablet_status,
|
const ObTabletStatus::Status &tablet_status,
|
||||||
|
@ -73,7 +73,7 @@ void ObTabletTransformArg::reset()
|
|||||||
|
|
||||||
bool ObTabletTransformArg::is_valid() const
|
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_)
|
&& table_store_addr_.is_none() ^ (nullptr != rowkey_read_info_ptr_)
|
||||||
&& tablet_meta_.is_valid()
|
&& tablet_meta_.is_valid()
|
||||||
&& table_store_addr_.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 ObTabletMeta &tablet_meta = old_tablet.get_tablet_meta();
|
||||||
const ObTabletMapKey key(tablet_meta.ls_id_, tablet_meta.tablet_id_);
|
const ObTabletMapKey key(tablet_meta.ls_id_, tablet_meta.tablet_id_);
|
||||||
ObTabletPoolType type = ObTabletPoolType::TP_NORMAL;
|
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;
|
bool try_smaller_pool = true;
|
||||||
|
|
||||||
if (old_tablet.is_empty_shell()) {
|
if (old_tablet.is_empty_shell()) {
|
||||||
@ -524,20 +524,24 @@ int ObTabletPersister::transform(
|
|||||||
|
|
||||||
// auto_inc_seq related
|
// auto_inc_seq related
|
||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
LOG_DEBUG("TINY TABLET: tablet + rowkey_read_info + tablet store", KP(buf), K(start_pos), K(remain));
|
if (OB_ISNULL(arg.auto_inc_seq_ptr_)) {
|
||||||
ObIStorageMetaObj *auto_inc_obj = nullptr;
|
tiny_tablet->mds_data_.auto_inc_seq_.ptr_ = 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 {
|
} else {
|
||||||
LOG_DEBUG("TINY TABLET: no enough memory for auto inc seq", K(rowkey_read_info_size), K(remain),
|
LOG_DEBUG("TINY TABLET: tablet + rowkey_read_info + tablet store", KP(buf), K(start_pos), K(remain));
|
||||||
K(auto_inc_seq_size));
|
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)) {
|
if (OB_SUCC(ret)) {
|
||||||
|
Reference in New Issue
Block a user