diff --git a/src/storage/tablet/ob_tablet.cpp b/src/storage/tablet/ob_tablet.cpp index 6db115b08..1246e2e09 100755 --- a/src/storage/tablet/ob_tablet.cpp +++ b/src/storage/tablet/ob_tablet.cpp @@ -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 &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)) { diff --git a/src/storage/tablet/ob_tablet.h b/src/storage/tablet/ob_tablet.h index 31109dd7e..6578a29cb 100755 --- a/src/storage/tablet/ob_tablet.h +++ b/src/storage/tablet/ob_tablet.h @@ -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 &wrapper) const; - int fetch_autoinc_seq(ObTabletMemberWrapper &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 &wrapper) const; private: // ObTabletDDLKvMgr::MAX_DDL_KV_CNT_IN_STORAGE // Array size is too large, need to shrink it if possible diff --git a/src/storage/tablet/ob_tablet_mds_data.cpp b/src/storage/tablet/ob_tablet_mds_data.cpp index 03d11bda9..a00f6d280 100644 --- a/src/storage/tablet/ob_tablet_mds_data.cpp +++ b/src/storage/tablet/ob_tablet_mds_data.cpp @@ -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; diff --git a/src/storage/tablet/ob_tablet_mds_data.h b/src/storage/tablet/ob_tablet_mds_data.h index 963eeebc7..d3689d348 100644 --- a/src/storage/tablet/ob_tablet_mds_data.h +++ b/src/storage/tablet/ob_tablet_mds_data.h @@ -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, diff --git a/src/storage/tablet/ob_tablet_persister.cpp b/src/storage/tablet/ob_tablet_persister.cpp index 426f48fd7..1a5865b68 100644 --- a/src/storage/tablet/ob_tablet_persister.cpp +++ b/src/storage/tablet/ob_tablet_persister.cpp @@ -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 auto_inc_seq; + ObTabletMemberWrapper 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(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(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)) {