From f4e79369a0e209b1c0226ce4c688a9388ad749cc Mon Sep 17 00:00:00 2001 From: oceanoverflow Date: Tue, 28 Mar 2023 02:41:43 +0000 Subject: [PATCH] fix parallel external sort defend too strict issue --- src/storage/ob_parallel_external_sort.h | 2 +- .../storage/test_parallel_external_sort.cpp | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/storage/ob_parallel_external_sort.h b/src/storage/ob_parallel_external_sort.h index dcadd2acb..c15b83986 100644 --- a/src/storage/ob_parallel_external_sort.h +++ b/src/storage/ob_parallel_external_sort.h @@ -1889,7 +1889,7 @@ int ObExternalSort::get_next_item(const T *&item) if (OB_SUCC(ret)) { get_count_++; } - if (common::OB_ITER_END == ret && add_count_ != get_count_) { + if (common::OB_ITER_END == ret && is_sorted_ && add_count_ != get_count_) { ret = common::OB_ERR_SYS; STORAGE_LOG(WARN, "add count not match get count", K(ret), K_(add_count), K_(get_count)); } diff --git a/unittest/storage/test_parallel_external_sort.cpp b/unittest/storage/test_parallel_external_sort.cpp index 44d3eae67..ef5d347c7 100644 --- a/unittest/storage/test_parallel_external_sort.cpp +++ b/unittest/storage/test_parallel_external_sort.cpp @@ -951,6 +951,29 @@ TEST_F(TestParallelExternalSort, test_multi_task_sort) test_multi_task_sort(buf_mem_limit, file_buf_size, 10000, task_cnt); } +TEST_F(TestParallelExternalSort, test_get_before_sort) +{ + int ret = OB_SUCCESS; + const int64_t file_buf_size = MACRO_BLOCK_SIZE; + const int64_t buf_mem_limit = 8 * 1024 * 1024L; + typedef ObExternalSort ExternalSort; + ExternalSort external_sort; + ObVectortotal_items; + TestItemCompare compare(ret); + const int64_t expire_timestamp = 0; + ret = external_sort.init(buf_mem_limit, file_buf_size, expire_timestamp, OB_SYS_TENANT_ID, &compare); + ASSERT_EQ(OB_SUCCESS, ret); + ret = generate_items(10, false, total_items); + ASSERT_EQ(OB_SUCCESS, ret); + for (int64_t i = 0; OB_SUCC(ret) && i < total_items.size(); ++i) { + ret = external_sort.add_item(*total_items.at(i)); + ASSERT_EQ(OB_SUCCESS, ret); + } + const TestItem *item = NULL; + ret = external_sort.get_next_item(item); + ASSERT_EQ(OB_ITER_END, ret); +} + } // end namespace common } // end namespace oceanbase