[CP] Bugfix: clustered index micro block re-wrote in different format
This commit is contained in:
parent
e4c2dcd570
commit
d325ae35f9
@ -461,13 +461,23 @@ int ObClusteredIndexBlockWriter::make_clustered_index_micro_block_with_rewrite(
|
||||
} else if (OB_FAIL(idx_row_parser.init(rowkey_column_count, row))) {
|
||||
LOG_WARN("fail to init idx row parser", K(ret), K(rowkey_column_count));
|
||||
} else {
|
||||
// TODO(baichangmin): data_store_desc or other ObDataStoreDesc?
|
||||
ObIndexBlockRowDesc clustered_row_desc(*data_store_desc_);
|
||||
// Actually, we only need `row_store_type` and `static_desc` from data store desc.
|
||||
ObStaticDataStoreDesc rewrite_static_desc;
|
||||
ObDataStoreDesc rewrite_data_store_desc;
|
||||
if (OB_FAIL(rewrite_static_desc.assign(*(data_store_desc_->static_desc_)))) {
|
||||
LOG_WARN("fail to assign static desc for rewrite desc", K(ret), KPC(data_store_desc_->static_desc_));
|
||||
} else if (OB_FAIL(rewrite_data_store_desc.shallow_copy(*data_store_desc_))) {
|
||||
LOG_WARN("fail to shallow copy for rewrite desc", K(ret), KPC(data_store_desc_));
|
||||
} else {
|
||||
rewrite_data_store_desc.static_desc_ = &rewrite_static_desc;
|
||||
}
|
||||
ObIndexBlockRowDesc clustered_row_desc(rewrite_data_store_desc);
|
||||
|
||||
// The following code needs to consider compatibility.
|
||||
int64_t agg_row_size = 0;
|
||||
const ObIndexBlockRowHeader *idx_row_header = nullptr;
|
||||
if (OB_FAIL(idx_row_parser.get_header(idx_row_header))) {
|
||||
if (OB_FAIL(ret)) {
|
||||
} else if (OB_FAIL(idx_row_parser.get_header(idx_row_header))) {
|
||||
LOG_WARN("fail to get idx row header", K(ret));
|
||||
} else if (!idx_row_header->is_major_node() || !idx_row_header->is_pre_aggregated()) {
|
||||
clustered_row_desc.serialized_agg_row_buf_ = nullptr;
|
||||
@ -480,6 +490,20 @@ int ObClusteredIndexBlockWriter::make_clustered_index_micro_block_with_rewrite(
|
||||
} else if (OB_FAIL(clustered_row_desc.row_key_.assign(row.storage_datums_, rowkey_column_count))) {
|
||||
LOG_WARN("fail to assign rowkey to row_desc", K(ret), K(row), K(rowkey_column_count));
|
||||
} else {
|
||||
// The following items need to remain consistent with meta_to_row_desc.
|
||||
rewrite_data_store_desc.row_store_type_ = idx_row_header->get_row_store_type();
|
||||
rewrite_data_store_desc.static_desc_->compressor_type_ = idx_row_header->get_compressor_type();
|
||||
rewrite_data_store_desc.static_desc_->master_key_id_ = idx_row_header->get_master_key_id();
|
||||
rewrite_data_store_desc.static_desc_->encrypt_id_ = idx_row_header->get_encrypt_id();
|
||||
MEMCPY(rewrite_data_store_desc.static_desc_->encrypt_key_,
|
||||
idx_row_header->get_encrypt_key(),
|
||||
sizeof(rewrite_data_store_desc.static_desc_->encrypt_key_));
|
||||
rewrite_data_store_desc.static_desc_->schema_version_ = idx_row_header->get_schema_version();
|
||||
if (idx_row_header->is_data_index() && !idx_row_header->is_major_node()) {
|
||||
// Snapshot version should use data's value.
|
||||
rewrite_data_store_desc.static_desc_->end_scn_.convert_for_tx(idx_row_parser.get_snapshot_version());
|
||||
}
|
||||
|
||||
clustered_row_desc.is_serialized_agg_row_ = true;
|
||||
clustered_row_desc.row_offset_ = idx_row_parser.get_row_offset();
|
||||
clustered_row_desc.is_secondary_meta_ = false;
|
||||
@ -575,11 +599,22 @@ int ObClusteredIndexBlockWriter::make_clustered_index_micro_block_with_reuse(
|
||||
ObArenaAllocator row_key_allocator("MakeClustRK", MTL_ID());
|
||||
while (OB_SUCC(ret)) {
|
||||
row_key_allocator.reuse();
|
||||
ObIndexBlockRowDesc clustered_row_desc(*data_store_desc_);
|
||||
if (OB_FAIL(index_block_row_scanner.get_next(
|
||||
index_info,
|
||||
false /* is_multi_check */,
|
||||
false /* is_sorted_multi_get */))) {
|
||||
// Actually, we only need `row_store_type` and `static_desc` from data store desc.
|
||||
ObStaticDataStoreDesc reuse_static_desc;
|
||||
ObDataStoreDesc reuse_data_store_desc;
|
||||
if (OB_FAIL(reuse_static_desc.assign(*(data_store_desc_->static_desc_)))) {
|
||||
LOG_WARN("fail to assign static desc for rewrite desc", K(ret), KPC(data_store_desc_->static_desc_));
|
||||
} else if (OB_FAIL(reuse_data_store_desc.shallow_copy(*data_store_desc_))) {
|
||||
LOG_WARN("fail to shallow copy for rewrite desc", K(ret), KPC(data_store_desc_));
|
||||
} else {
|
||||
reuse_data_store_desc.static_desc_ = &reuse_static_desc;
|
||||
}
|
||||
ObIndexBlockRowDesc clustered_row_desc(reuse_data_store_desc);
|
||||
|
||||
if (OB_FAIL(ret)) {
|
||||
} else if (OB_FAIL(index_block_row_scanner.get_next(index_info,
|
||||
false /* is_multi_check */,
|
||||
false /* is_sorted_multi_get */))) {
|
||||
if (OB_ITER_END == ret) {
|
||||
ret = OB_SUCCESS;
|
||||
break;
|
||||
@ -597,6 +632,20 @@ int ObClusteredIndexBlockWriter::make_clustered_index_micro_block_with_reuse(
|
||||
clustered_row_desc.serialized_agg_row_buf_ = index_info.agg_row_buf_;
|
||||
}
|
||||
|
||||
// The following items need to remain consistent with meta_to_row_desc.
|
||||
reuse_data_store_desc.row_store_type_ = idx_row_header->get_row_store_type();
|
||||
reuse_data_store_desc.static_desc_->compressor_type_ = idx_row_header->get_compressor_type();
|
||||
reuse_data_store_desc.static_desc_->master_key_id_ = idx_row_header->get_master_key_id();
|
||||
reuse_data_store_desc.static_desc_->encrypt_id_ = idx_row_header->get_encrypt_id();
|
||||
MEMCPY(reuse_data_store_desc.static_desc_->encrypt_key_,
|
||||
idx_row_header->get_encrypt_key(),
|
||||
sizeof(reuse_data_store_desc.static_desc_->encrypt_key_));
|
||||
reuse_data_store_desc.static_desc_->schema_version_ = idx_row_header->get_schema_version();
|
||||
if (idx_row_header->is_data_index() && !idx_row_header->is_major_node()) {
|
||||
// Snapshot version should use data's value.
|
||||
reuse_data_store_desc.static_desc_->end_scn_.convert_for_tx(index_info.minor_meta_info_->snapshot_version_);
|
||||
}
|
||||
|
||||
// Reuse, no need to change macro_id.
|
||||
clustered_row_desc.macro_id_ = idx_row_header->get_macro_id();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user