From d6ae24e6c167c1b8e6649f0688454a3384679b55 Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 8 Jul 2021 13:26:15 +0800 Subject: [PATCH] Fix purge reset range issue when remain row --- src/storage/ob_multiple_scan_merge_impl.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/storage/ob_multiple_scan_merge_impl.cpp b/src/storage/ob_multiple_scan_merge_impl.cpp index fddde91a01..054acd9d6f 100644 --- a/src/storage/ob_multiple_scan_merge_impl.cpp +++ b/src/storage/ob_multiple_scan_merge_impl.cpp @@ -133,7 +133,6 @@ int ObMultipleScanMergeImpl::reset_range( gap_item.iter_idx_ = idx; gap_item.row_ = &row; int64_t remain_item = 0; - bool compare_result = false; const ObIArray& tables = tables_handle_.get_tables(); const int64_t tables_cnt = tables.count(); const ObScanMergeLoserTreeItem* top_item = nullptr; @@ -145,10 +144,12 @@ int ObMultipleScanMergeImpl::reset_range( STORAGE_LOG(WARN, "item or row is null", K(ret), KP(top_item)); } else { const bool is_memtable = tables.at(tables_cnt - top_item->iter_idx_ - 1)->is_memtable(); - if (top_item->iter_idx_ < idx || - (!is_memtable && - (compare_result = (tree_cmp_(gap_item, *top_item) < 0 || (!include_gap_key && 0 == compare_result))) && - OB_SUCCESS == tree_cmp_.get_error_code())) { + const int64_t tree_ret = tree_cmp_(gap_item, *top_item); + if (top_item->iter_idx_ < idx + || (!is_memtable + // row in sstable is equal to or beyond gap row should be remained + && (tree_ret < 0 || (include_gap_key && 0 == tree_ret)) + && OB_SUCCESS == tree_cmp_.get_error_code())) { items[remain_item++] = *top_item; } if (OB_FAIL(tree_cmp_.get_error_code())) { @@ -167,7 +168,7 @@ int ObMultipleScanMergeImpl::reset_range( "reset range compare", K(*gap_item.row_), K(*top_item->row_), - K(compare_result), + K(tree_ret), K(top_item->iter_idx_), K(idx), K(is_memtable)); -- GitLab