diff --git a/mittest/mtlenv/storage/blocksstable/ob_index_block_data_prepare.h b/mittest/mtlenv/storage/blocksstable/ob_index_block_data_prepare.h index 6c56d8831b..48306de839 100644 --- a/mittest/mtlenv/storage/blocksstable/ob_index_block_data_prepare.h +++ b/mittest/mtlenv/storage/blocksstable/ob_index_block_data_prepare.h @@ -438,7 +438,7 @@ void TestIndexBlockDataPrepare::prepare_data() ObIndexTreeRootBlockDesc root_desc; root_desc = res.root_desc_; ASSERT_TRUE(root_desc.is_valid()); - ObRowStoreType root_row_store_type = root_desc.row_type_; + ObRowStoreType root_row_store_type = res.root_row_store_type_; char *root_buf = nullptr; int64_t root_size = 0; diff --git a/src/storage/blocksstable/ob_index_block_builder.cpp b/src/storage/blocksstable/ob_index_block_builder.cpp index 9df90f92c6..9608beed4e 100644 --- a/src/storage/blocksstable/ob_index_block_builder.cpp +++ b/src/storage/blocksstable/ob_index_block_builder.cpp @@ -28,83 +28,11 @@ using namespace common; using namespace storage; namespace blocksstable { - -DEFINE_SERIALIZE(ObIndexTreeRootBlockDesc) -{ - int ret = OB_SUCCESS; - int64_t new_pos = pos; - const int64_t serialize_size = get_serialize_size(); - if (OB_ISNULL(buf) || OB_UNLIKELY(buf_len <= 0 || pos < 0 || serialize_size > buf_len - pos)) { - ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", K(ret), KP(buf), K(buf_len), K(pos), K(serialize_size)); - } else if (OB_FAIL(serialization::encode_vi64(buf, buf_len, new_pos, UNIS_VERSION))) { - STORAGE_LOG(WARN, "fail to serialize UNIS_VSERSION", K(ret), K(buf_len), K(new_pos)); - } else if (OB_FAIL(addr_.serialize(buf, buf_len, new_pos))) { - STORAGE_LOG(WARN, "failed to serialize addr", K(ret), K(buf_len), K(new_pos)); - } else if (OB_FAIL(serialization::encode_i8(buf, buf_len, new_pos, row_type_))) { - STORAGE_LOG(WARN, "failed to serialize row_type", K(ret), K(buf_len), K(new_pos)); - } else if (OB_FAIL(serialization::encode_i64(buf, buf_len, new_pos, height_))) { - STORAGE_LOG(WARN, "failed to serialize height", K(ret), K(buf_len), K(new_pos)); - } else if (addr_.is_memory() - && OB_FAIL(serialization::encode_vstr(buf, buf_len, new_pos, buf_, addr_.size()))) { - STORAGE_LOG(WARN, "failed to serialize buf_", K(ret), K(buf_len), K(new_pos), K(addr_)); - } else { - pos = new_pos; - } - return ret; -} - -DEFINE_DESERIALIZE(ObIndexTreeRootBlockDesc) -{ - int ret = OB_SUCCESS; - int64_t len = 0; - int64_t version = 0; - int64_t new_pos = pos; - if (OB_ISNULL(buf) || OB_UNLIKELY(data_len <= 0 || pos < 0)) { - ret = OB_INVALID_ARGUMENT; - STORAGE_LOG(WARN, "invalid argument", K(ret), KP(buf), K(data_len), K(pos)); - } else if (OB_FAIL(serialization::decode_vi64(buf, data_len, new_pos, &version))) { - STORAGE_LOG(WARN, "deserialize version failed.", KR(ret), K(data_len), K(new_pos)); - } else if (version != UNIS_VERSION) { - ret = OB_VERSION_NOT_MATCH; - STORAGE_LOG(WARN, "deserialize version failed.", KR(ret), K(version)); - } else if (OB_FAIL(addr_.deserialize(buf, data_len, new_pos))) { - STORAGE_LOG(WARN, "failed to deserialize addr", K(ret), K(data_len), K(new_pos)); - } else if (OB_FAIL(serialization::decode_i8(buf, data_len, new_pos, (int8_t *)(&row_type_)))) { - STORAGE_LOG(WARN, "failed to deserialize row_type", K(ret), K(data_len), K(new_pos)); - } else if (OB_FAIL(serialization::decode_i64(buf, data_len, new_pos, &height_))) { - STORAGE_LOG(WARN, "failed to deserialize height", K(ret), K(data_len), K(new_pos)); - } else if (addr_.is_memory()) { - buf_ = const_cast(serialization::decode_vstr(buf, data_len, new_pos, &len)); - if (OB_ISNULL(buf_)) { - ret = OB_ERROR; - STORAGE_LOG(WARN, "failed to deserialize buf_", K(ret), K(data_len), K(new_pos), K(addr_), K(buf_), K(buf), K(len)); - } - } - if (OB_SUCC(ret)) { - pos = new_pos; - } - return ret; -} - -DEFINE_GET_SERIALIZE_SIZE(ObIndexTreeRootBlockDesc) -{ - int64_t serialize_size = addr_.get_serialize_size() - + serialization::encoded_length_i8(row_type_) - + serialization::encoded_length_i64(height_) - + serialization::encoded_length_vi64(UNIS_VERSION); - if (addr_.is_memory()) { - serialize_size += serialization::encoded_length_vstr(addr_.size()); - } - return serialize_size; -} - bool ObIndexTreeRootBlockDesc::is_valid() const { return is_empty() || (addr_.is_valid() && (is_mem_type() ? (buf_ != nullptr) : (buf_ == nullptr)) - && row_type_ < common::ObRowStoreType::MAX_ROW_STORE && height_ > 0); } @@ -112,7 +40,6 @@ void ObIndexTreeRootBlockDesc::set_empty() { addr_.set_none_addr(); buf_ = nullptr; - row_type_ = FLAT_ROW_STORE; height_ = 0; is_meta_root_ = false; } @@ -147,7 +74,8 @@ ObSSTableMergeRes::ObSSTableMergeRes() encrypt_id_(0), master_key_id_(0), nested_offset_(0), - nested_size_(0) + nested_size_(0), + root_row_store_type_(ObRowStoreType::MAX_ROW_STORE) { MEMSET(encrypt_key_, 0, share::OB_MAX_TABLESPACE_ENCRYPT_KEY_LENGTH); } @@ -175,9 +103,25 @@ void ObSSTableMergeRes::reset() } } other_block_ids_.destroy(); + index_blocks_cnt_ = 0; + data_blocks_cnt_ = 0; micro_block_cnt_ = 0; - nested_size_ = 0; + data_column_cnt_ = 0; + row_count_ = 0; + max_merged_trans_version_ = 0; + contain_uncommitted_row_ = false; + occupy_size_ = 0; + original_size_ = 0; + data_checksum_ = 0; + use_old_macro_block_count_ = 0; + data_column_checksums_.reset(); + data_default_column_rows_cnt_.reset(); + compressor_type_ = ObCompressorType::INVALID_COMPRESSOR; + encrypt_id_ = 0; + master_key_id_ = 0; nested_offset_ = 0; + nested_size_ = 0; + root_row_store_type_ = ObRowStoreType::MAX_ROW_STORE; } bool ObSSTableMergeRes::is_valid() const @@ -189,7 +133,8 @@ bool ObSSTableMergeRes::is_valid() const && micro_block_cnt_ >= 0 && data_column_cnt_ > 0 && nested_offset_ >= 0 - && nested_size_ >= 0; + && nested_size_ >= 0 + && root_row_store_type_ < ObRowStoreType::MAX_ROW_STORE; } int ObSSTableMergeRes::assign(const ObSSTableMergeRes &src) @@ -219,6 +164,7 @@ int ObSSTableMergeRes::assign(const ObSSTableMergeRes &src) master_key_id_ = src.master_key_id_; nested_size_ = src.nested_size_; nested_offset_ = src.nested_offset_; + root_row_store_type_ = src.root_row_store_type_; MEMCPY(encrypt_key_, src.encrypt_key_, sizeof(encrypt_key_)); if (OB_FAIL(data_block_ids_.reserve(src.data_block_ids_.count()))) { @@ -915,6 +861,7 @@ int ObSSTableIndexBuilder::close(const int64_t column_cnt, ObSSTableMergeRes &re } if (OB_SUCC(ret) && OB_LIKELY(!is_closed_)) { + res.root_row_store_type_ = index_store_desc_.row_store_type_; res.compressor_type_ = index_store_desc_.compressor_type_; res.encrypt_id_ = index_store_desc_.encrypt_id_; MEMCPY(res.encrypt_key_, index_store_desc_.encrypt_key_, @@ -1309,7 +1256,6 @@ int ObBaseIndexBlockBuilder::close(ObIAllocator &allocator, ObIndexTreeInfo &tre STORAGE_LOG(WARN, "unexpected null root builder", K(ret), K(root_builder)); } else { ObMetaDiskAddr &root_addr = desc.addr_; - desc.row_type_ = index_store_desc_->row_store_type_; desc.height_ = root_builder->level_ + 1; ObMicroBlockDesc micro_block_desc; ObIMicroBlockWriter *micro_writer = root_builder->micro_writer_; @@ -2301,7 +2247,6 @@ int ObMetaIndexBlockBuilder::build_single_node_tree( { int ret = OB_SUCCESS; ObMetaDiskAddr &root_addr = block_desc.addr_; - block_desc.row_type_ = index_store_desc_->row_store_type_; block_desc.height_ = 1; char *&root_buf = block_desc.buf_; const int64_t buf_size = micro_block_desc.buf_size_ + micro_block_desc.header_->header_size_; diff --git a/src/storage/blocksstable/ob_index_block_builder.h b/src/storage/blocksstable/ob_index_block_builder.h index 170c735278..8bdd1a7594 100644 --- a/src/storage/blocksstable/ob_index_block_builder.h +++ b/src/storage/blocksstable/ob_index_block_builder.h @@ -126,12 +126,10 @@ public: struct ObIndexTreeRootBlockDesc final { - OB_UNIS_VERSION(1); public: ObIndexTreeRootBlockDesc() :addr_(), buf_(nullptr), - row_type_(common::ObRowStoreType::MAX_ROW_STORE), height_(0), is_meta_root_(false) {} ~ObIndexTreeRootBlockDesc() = default; @@ -140,11 +138,10 @@ public: void set_empty(); bool is_mem_type() const { return addr_.is_memory(); } bool is_file_type() const { return addr_.is_file(); } - TO_STRING_KV(K_(addr), KP_(buf), K_(row_type), K_(height)); + TO_STRING_KV(K_(addr), KP_(buf), K_(height), K_(is_meta_root)); public: storage::ObMetaDiskAddr addr_; char *buf_; - ObRowStoreType row_type_; int64_t height_; bool is_meta_root_; }; @@ -201,8 +198,8 @@ public: K_(data_column_cnt), K_(data_column_checksums), K_(data_default_column_rows_cnt), K_(row_count), K_(max_merged_trans_version), K_(contain_uncommitted_row), K_(occupy_size), K_(original_size), K_(data_checksum), K_(use_old_macro_block_count), - K_(compressor_type), K_(encrypt_id), - K_(master_key_id), KPHEX_(encrypt_key, sizeof(encrypt_key_))); + K_(compressor_type), K_(root_row_store_type), K_(nested_offset), K_(nested_size), + K_(encrypt_id), K_(master_key_id), KPHEX_(encrypt_key, sizeof(encrypt_key_))); public: ObIndexTreeRootBlockDesc root_desc_; ObIndexTreeRootBlockDesc data_root_desc_; @@ -226,6 +223,7 @@ public: int64_t master_key_id_; int64_t nested_offset_; int64_t nested_size_; + ObRowStoreType root_row_store_type_; char encrypt_key_[share::OB_MAX_TABLESPACE_ENCRYPT_KEY_LENGTH]; DISALLOW_COPY_AND_ASSIGN(ObSSTableMergeRes); }; diff --git a/src/storage/blocksstable/ob_shared_macro_block_manager.cpp b/src/storage/blocksstable/ob_shared_macro_block_manager.cpp index a33f85fa27..6e12ef8719 100644 --- a/src/storage/blocksstable/ob_shared_macro_block_manager.cpp +++ b/src/storage/blocksstable/ob_shared_macro_block_manager.cpp @@ -643,7 +643,7 @@ int ObSharedMacroBlockMgr::create_new_sstable( param.root_block_addr_, param.root_block_data_); ObSSTableMergeRes::fill_addr_and_data(res.data_root_desc_, param.data_block_macro_meta_addr_, param.data_block_macro_meta_); - param.root_row_store_type_ = res.root_desc_.row_type_; + param.root_row_store_type_ = res.root_row_store_type_; param.data_index_tree_height_ = res.root_desc_.height_; param.index_blocks_cnt_ = res.index_blocks_cnt_; param.data_blocks_cnt_ = res.data_blocks_cnt_; diff --git a/src/storage/compaction/ob_tablet_merge_ctx.cpp b/src/storage/compaction/ob_tablet_merge_ctx.cpp index 2d81b4fc26..2f00e51147 100644 --- a/src/storage/compaction/ob_tablet_merge_ctx.cpp +++ b/src/storage/compaction/ob_tablet_merge_ctx.cpp @@ -220,7 +220,7 @@ int ObTabletMergeInfo::build_create_sstable_param(const ObTabletMergeCtx &ctx, ObSSTableMergeRes::fill_addr_and_data(res.data_root_desc_, param.data_block_macro_meta_addr_, param.data_block_macro_meta_); param.is_meta_root_ = res.data_root_desc_.is_meta_root_; - param.root_row_store_type_ = res.root_desc_.row_type_; + param.root_row_store_type_ = res.root_row_store_type_; param.data_index_tree_height_ = res.root_desc_.height_; param.index_blocks_cnt_ = res.index_blocks_cnt_; param.data_blocks_cnt_ = res.data_blocks_cnt_; diff --git a/src/storage/ddl/ob_ddl_merge_task.cpp b/src/storage/ddl/ob_ddl_merge_task.cpp index d234052682..c2957f0356 100644 --- a/src/storage/ddl/ob_ddl_merge_task.cpp +++ b/src/storage/ddl/ob_ddl_merge_task.cpp @@ -677,7 +677,7 @@ int ObTabletDDLUtil::create_ddl_sstable(ObSSTableIndexBuilder *sstable_index_bui ObSSTableMergeRes::fill_addr_and_data(res.data_root_desc_, param.data_block_macro_meta_addr_, param.data_block_macro_meta_); param.is_meta_root_ = res.data_root_desc_.is_meta_root_; - param.root_row_store_type_ = res.root_desc_.row_type_; + param.root_row_store_type_ = res.root_row_store_type_; param.data_index_tree_height_ = res.root_desc_.height_; param.index_blocks_cnt_ = res.index_blocks_cnt_; param.data_blocks_cnt_ = res.data_blocks_cnt_; diff --git a/src/storage/high_availability/ob_physical_copy_task.cpp b/src/storage/high_availability/ob_physical_copy_task.cpp index 6bde355a70..aab8390cb2 100644 --- a/src/storage/high_availability/ob_physical_copy_task.cpp +++ b/src/storage/high_availability/ob_physical_copy_task.cpp @@ -952,7 +952,7 @@ int ObPhysicalCopyFinishTask::build_create_sstable_param_( ObSSTableMergeRes::fill_addr_and_data(res.data_root_desc_, param.data_block_macro_meta_addr_, param.data_block_macro_meta_); param.is_meta_root_ = res.data_root_desc_.is_meta_root_; - param.root_row_store_type_ = res.root_desc_.row_type_; + param.root_row_store_type_ = res.root_row_store_type_; param.data_index_tree_height_ = res.root_desc_.height_; param.index_blocks_cnt_ = res.index_blocks_cnt_; param.data_blocks_cnt_ = res.data_blocks_cnt_; diff --git a/unittest/storage/blocksstable/ob_multi_version_sstable_test.h b/unittest/storage/blocksstable/ob_multi_version_sstable_test.h index c513f1f474..12f47f81ee 100644 --- a/unittest/storage/blocksstable/ob_multi_version_sstable_test.h +++ b/unittest/storage/blocksstable/ob_multi_version_sstable_test.h @@ -537,7 +537,7 @@ void ObMultiVersionSSTableTest::prepare_data_end( ObSSTableMergeRes::fill_addr_and_data(res.data_root_desc_, param.data_block_macro_meta_addr_, param.data_block_macro_meta_); param.is_meta_root_ = res.data_root_desc_.is_meta_root_; - param.root_row_store_type_ = res.root_desc_.row_type_; + param.root_row_store_type_ = res.root_row_store_type_; param.data_index_tree_height_ = res.root_desc_.height_; param.index_blocks_cnt_ = res.index_blocks_cnt_; param.data_blocks_cnt_ = res.data_blocks_cnt_;