From bfc6083c5510f086e99a3c0d24902bbefca8b311 Mon Sep 17 00:00:00 2001 From: obdev Date: Mon, 6 Feb 2023 15:00:21 +0800 Subject: [PATCH] [BUGFIX] fix mysqltest --- src/storage/access/ob_multiple_merge.cpp | 13 ++++++++++++- src/storage/access/ob_multiple_merge.h | 1 + src/storage/lob/ob_lob_locator.cpp | 2 -- src/storage/lob/ob_lob_locator.h | 1 + src/storage/lob/ob_lob_manager.cpp | 3 +++ 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/storage/access/ob_multiple_merge.cpp b/src/storage/access/ob_multiple_merge.cpp index bcb2857518..a2f7e8388c 100644 --- a/src/storage/access/ob_multiple_merge.cpp +++ b/src/storage/access/ob_multiple_merge.cpp @@ -325,6 +325,7 @@ int ObMultipleMerge::get_next_row(ObDatumRow *&row) if (need_padding_) { padding_allocator_.reuse(); } + reuse_lob_locator(); while (OB_SUCC(ret)) { if (access_ctx_->is_limit_end()) { ret = OB_ITER_END; @@ -448,6 +449,7 @@ int ObMultipleMerge::get_next_normal_rows(int64_t &count, int64_t capacity) if (need_padding_) { padding_allocator_.reuse(); } + reuse_lob_locator(); while (OB_SUCC(ret) && !vector_store->is_end()) { bool can_batch = false; if (access_ctx_->is_limit_end()) { @@ -552,6 +554,7 @@ int ObMultipleMerge::get_next_aggregate_row(ObDatumRow *&row) int64_t batch_size = max(1, access_param_->op_->get_batch_size()); access_param_->op_->get_eval_ctx().reuse(batch_size); } + reuse_lob_locator(); while (OB_SUCC(ret) && !agg_row_store->is_end()) { bool can_batch = false; // clear evaluated flag for every row @@ -1298,7 +1301,6 @@ int ObMultipleMerge::read_lob_columns_full_data(blocksstable::ObDatumRow &row) ret = OB_ERR_UNEXPECTED; LOG_WARN("Invalid col count", K(row), KPC(out_cols_param)); } else { - lob_reader_.reuse(); for (int64_t i = 0; OB_SUCC(ret) && i < row.count_; ++i) { blocksstable::ObStorageDatum &datum = row.storage_datums_[i]; if (out_cols_param->at(i)->get_meta_type().is_lob_storage()) { @@ -1375,5 +1377,14 @@ int ObMultipleMerge::fuse_lob_default(ObObj &def_cell, const uint64_t col_id) } return ret; } + +void ObMultipleMerge::reuse_lob_locator() +{ + if (NULL != access_ctx_->lob_locator_helper_) { + access_ctx_->lob_locator_helper_->reuse(); + } + lob_reader_.reuse(); +} + } } diff --git a/src/storage/access/ob_multiple_merge.h b/src/storage/access/ob_multiple_merge.h index fc4e4789e6..a4cdac0a00 100644 --- a/src/storage/access/ob_multiple_merge.h +++ b/src/storage/access/ob_multiple_merge.h @@ -112,6 +112,7 @@ private: int read_lob_columns_full_data(blocksstable::ObDatumRow &row); bool need_read_lob_columns(const blocksstable::ObDatumRow &row); int handle_lob_before_fuse_row(); + void reuse_lob_locator(); void report_tablet_stat(); OB_INLINE int update_and_report_tablet_stat(); diff --git a/src/storage/lob/ob_lob_locator.cpp b/src/storage/lob/ob_lob_locator.cpp index 738b81daaf..ad750b1043 100644 --- a/src/storage/lob/ob_lob_locator.cpp +++ b/src/storage/lob/ob_lob_locator.cpp @@ -171,7 +171,6 @@ int ObLobLocatorHelper::fill_lob_locator(ObDatumRow &row, } else { STORAGE_LOG(DEBUG, "start to fill lob locator", K(row)); //ObLobLocatorHelper is inited, we always cound find a lob cell in projected row - locator_allocator_.reuse(); if (OB_FAIL(build_rowid_obj(row, rowkey_str_, is_projected_row, *col_descs, *out_project, access_param.iter_param_.tablet_id_))) { @@ -236,7 +235,6 @@ int ObLobLocatorHelper::fill_lob_locator_v2(ObDatumRow &row, ret = OB_ERR_UNEXPECTED; LOG_WARN("Invalid col count", K(row), KPC(out_cols_param)); } else { - locator_allocator_.reuse(); if (OB_FAIL(build_rowid_obj(row, rowkey_str_, false, *col_descs, *out_project, access_param.iter_param_.tablet_id_))) { STORAGE_LOG(WARN, "Failed to build rowid obj", K(ret), K(rowkey_str_)); } else { diff --git a/src/storage/lob/ob_lob_locator.h b/src/storage/lob/ob_lob_locator.h index 9990769b5b..3547146102 100644 --- a/src/storage/lob/ob_lob_locator.h +++ b/src/storage/lob/ob_lob_locator.h @@ -27,6 +27,7 @@ public: ObLobLocatorHelper(); virtual ~ObLobLocatorHelper(); void reset(); + void reuse() { locator_allocator_.reuse(); } int init(const ObTableScanParam &scan_param, const ObStoreCtx &ctx, const share::ObLSID &ls_id, diff --git a/src/storage/lob/ob_lob_manager.cpp b/src/storage/lob/ob_lob_manager.cpp index 09911db0f8..6294607ffd 100644 --- a/src/storage/lob/ob_lob_manager.cpp +++ b/src/storage/lob/ob_lob_manager.cpp @@ -481,6 +481,9 @@ int ObLobManager::query_remote(ObLobAccessParam& param, common::ObAddr& dst_addr } } } + if (ret == OB_ITER_END) { + ret = OB_SUCCESS; + } } } } -- GitLab