diff --git a/be/src/runtime/cache/result_node.cpp b/be/src/runtime/cache/result_node.cpp index 7813458e85..6924baec40 100644 --- a/be/src/runtime/cache/result_node.cpp +++ b/be/src/runtime/cache/result_node.cpp @@ -167,14 +167,19 @@ PCacheStatus ResultNode::fetch_partition(const PFetchCacheRequest* request, request->params(param_idx).partition_key() > (*part_it)->get_partition_key()) { part_it++; } - while (param_idx < request->params_size() && - request->params(param_idx).partition_key() < (*part_it)->get_partition_key()) { - param_idx++; - } - if (request->params(param_idx).partition_key() == (*part_it)->get_partition_key()) { - find = true; + if (part_it != _partition_list.end()) { + while (param_idx < request->params_size() && + request->params(param_idx).partition_key() < (*part_it)->get_partition_key()) { + param_idx++; + } + if (param_idx < request->params_size()) { + if (request->params(param_idx).partition_key() == (*part_it)->get_partition_key()) { + find = true; + } + } } } + if (find) { #ifdef PARTITION_CACHE_DEV LOG(INFO) << "Find! Param index : " << param_idx diff --git a/be/test/runtime/cache/partition_cache_test.cpp b/be/test/runtime/cache/partition_cache_test.cpp index e370a786a7..4d650201fd 100644 --- a/be/test/runtime/cache/partition_cache_test.cpp +++ b/be/test/runtime/cache/partition_cache_test.cpp @@ -192,6 +192,42 @@ TEST_F(PartitionCacheTest, fetch_range_data) { clear(); } +TEST_F(PartitionCacheTest, fetch_invalid_right_range) { + init_default(); + init_batch_data(1, 1, 3); + + set_sql_key(_fetch_request->mutable_sql_key(), 1, 1); + PCacheParam* p1 = _fetch_request->add_params(); + p1->set_partition_key(4); + p1->set_last_version(4); + p1->set_last_version_time(4); + PCacheParam* p2 = _fetch_request->add_params(); + p2->set_partition_key(5); + p2->set_last_version(5); + p2->set_last_version_time(5); + _cache->fetch(_fetch_request, _fetch_result); + + ASSERT_TRUE(_fetch_result->status() == PCacheStatus::NO_PARTITION_KEY); + ASSERT_EQ(_fetch_result->values_size(), 0); + clear(); +} + +TEST_F(PartitionCacheTest, fetch_invalid_left_range) { + init_default(); + init_batch_data(1, 1, 3); + + set_sql_key(_fetch_request->mutable_sql_key(), 1, 1); + PCacheParam* p1 = _fetch_request->add_params(); + p1->set_partition_key(0); + p1->set_last_version(0); + p1->set_last_version_time(0); + _cache->fetch(_fetch_request, _fetch_result); + + ASSERT_TRUE(_fetch_result->status() == PCacheStatus::NO_PARTITION_KEY); + ASSERT_EQ(_fetch_result->values_size(), 0); + clear(); +} + TEST_F(PartitionCacheTest, fetch_invalid_key_range) { init_default(); init_batch_data(1, 2, 1);