From 719e871b928a8fbb0cee2c47504c1bd8a7d0b67a Mon Sep 17 00:00:00 2001 From: DengzhiLiu Date: Wed, 15 Feb 2023 11:42:01 +0000 Subject: [PATCH] Reset row flag in get --- .../encoding/ob_micro_block_decoder.cpp | 2 ++ src/storage/blocksstable/ob_row_cache.cpp | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/storage/blocksstable/encoding/ob_micro_block_decoder.cpp b/src/storage/blocksstable/encoding/ob_micro_block_decoder.cpp index 82498405cc..151e0861fb 100644 --- a/src/storage/blocksstable/encoding/ob_micro_block_decoder.cpp +++ b/src/storage/blocksstable/encoding/ob_micro_block_decoder.cpp @@ -774,6 +774,7 @@ int ObEncodeBlockGetReader::locate_row( } if (OB_SUCC(ret)) { + row.row_flag_.reset(); if (found) { row.count_ = request_cnt_; row.row_flag_.set_flag(ObDmlFlag::DF_INSERT); @@ -1398,6 +1399,7 @@ OB_INLINE int ObMicroBlockDecoder::get_row_impl(int64_t index, ObDatumRow &row) } else if (OB_FAIL(decode_cells(index, row_len, row_data, 0, request_cnt_, row.storage_datums_))) { LOG_WARN("decode cells failed", K(ret), K(index), K_(request_cnt)); } else { + row.row_flag_.reset(); row.row_flag_.set_flag(ObDmlFlag::DF_INSERT); row.count_ = request_cnt_; row.mvcc_row_flag_.reset(); diff --git a/src/storage/blocksstable/ob_row_cache.cpp b/src/storage/blocksstable/ob_row_cache.cpp index b29cf8378b..dd23c6def5 100644 --- a/src/storage/blocksstable/ob_row_cache.cpp +++ b/src/storage/blocksstable/ob_row_cache.cpp @@ -166,13 +166,18 @@ int ObRowCacheValue::init(const int64_t start_log_ts, const ObDatumRow &row) { int ret = OB_SUCCESS; - datums_ = row.storage_datums_; - column_cnt_ = row.get_column_count(); - start_log_ts_ = start_log_ts; - flag_ = row.row_flag_; - size_ = sizeof(ObStorageDatum) * column_cnt_; - for (int64_t i = 0; OB_SUCC(ret) && i < column_cnt_; i ++) { - size_ += datums_[i].get_deep_copy_size(); + if (OB_UNLIKELY(!row.row_flag_.is_valid())) { + ret = OB_ERR_UNEXPECTED; + STORAGE_LOG(WARN, "Unexpected row", K(ret), K(row)); + } else { + datums_ = row.storage_datums_; + column_cnt_ = row.get_column_count(); + start_log_ts_ = start_log_ts; + flag_ = row.row_flag_; + size_ = sizeof(ObStorageDatum) * column_cnt_; + for (int64_t i = 0; OB_SUCC(ret) && i < column_cnt_; i ++) { + size_ += datums_[i].get_deep_copy_size(); + } } return ret; }