diff --git a/cpp/src/db/DB.h b/cpp/src/db/DB.h index 0a84ffd7ff..282e762717 100644 --- a/cpp/src/db/DB.h +++ b/cpp/src/db/DB.h @@ -33,14 +33,14 @@ public: virtual Status InsertVectors(const std::string& table_id_, uint64_t n, const float* vectors, IDNumbers& vector_ids_) = 0; - virtual Status Query(const std::string& table_id, uint64_t k, uint64_t nq, + virtual Status Query(const std::string& table_id, uint64_t k, uint64_t nq, uint64_t nprobe, const float* vectors, QueryResults& results) = 0; - virtual Status Query(const std::string& table_id, uint64_t k, uint64_t nq, + virtual Status Query(const std::string& table_id, uint64_t k, uint64_t nq, uint64_t nprobe, const float* vectors, const meta::DatesT& dates, QueryResults& results) = 0; virtual Status Query(const std::string& table_id, const std::vector& file_ids, - uint64_t k, uint64_t nq, const float* vectors, + uint64_t k, uint64_t nq, uint64_t nprobe, const float* vectors, const meta::DatesT& dates, QueryResults& results) = 0; virtual Status Size(uint64_t& result) = 0; diff --git a/cpp/src/db/DBImpl.cpp b/cpp/src/db/DBImpl.cpp index 1b6630ef84..ddee622669 100644 --- a/cpp/src/db/DBImpl.cpp +++ b/cpp/src/db/DBImpl.cpp @@ -189,11 +189,11 @@ Status DBImpl::InsertVectors(const std::string& table_id_, } -Status DBImpl::Query(const std::string &table_id, uint64_t k, uint64_t nq, +Status DBImpl::Query(const std::string &table_id, uint64_t k, uint64_t nq, uint64_t nprobe, const float *vectors, QueryResults &results) { auto start_time = METRICS_NOW_TIME; meta::DatesT dates = {meta::Meta::GetDate()}; - Status result = Query(table_id, k, nq, vectors, dates, results); + Status result = Query(table_id, k, nq, nprobe, vectors, dates, results); auto end_time = METRICS_NOW_TIME; auto total_time = METRICS_MICROSECONDS(start_time,end_time); @@ -202,7 +202,7 @@ Status DBImpl::Query(const std::string &table_id, uint64_t k, uint64_t nq, return result; } -Status DBImpl::Query(const std::string& table_id, uint64_t k, uint64_t nq, +Status DBImpl::Query(const std::string& table_id, uint64_t k, uint64_t nq, uint64_t nprobe, const float* vectors, const meta::DatesT& dates, QueryResults& results) { ENGINE_LOG_DEBUG << "Query by vectors"; @@ -219,13 +219,13 @@ Status DBImpl::Query(const std::string& table_id, uint64_t k, uint64_t nq, } cache::CpuCacheMgr::GetInstance()->PrintInfo(); //print cache info before query - status = QueryAsync(table_id, file_id_array, k, nq, vectors, dates, results); + status = QueryAsync(table_id, file_id_array, k, nq, nprobe, vectors, dates, results); cache::CpuCacheMgr::GetInstance()->PrintInfo(); //print cache info after query return status; } Status DBImpl::Query(const std::string& table_id, const std::vector& file_ids, - uint64_t k, uint64_t nq, const float* vectors, + uint64_t k, uint64_t nq, uint64_t nprobe, const float* vectors, const meta::DatesT& dates, QueryResults& results) { ENGINE_LOG_DEBUG << "Query by file ids"; @@ -256,20 +256,20 @@ Status DBImpl::Query(const std::string& table_id, const std::vector } cache::CpuCacheMgr::GetInstance()->PrintInfo(); //print cache info before query - status = QueryAsync(table_id, file_id_array, k, nq, vectors, dates, results); + status = QueryAsync(table_id, file_id_array, k, nq, nprobe, vectors, dates, results); cache::CpuCacheMgr::GetInstance()->PrintInfo(); //print cache info after query return status; } Status DBImpl::QueryAsync(const std::string& table_id, const meta::TableFilesSchema& files, - uint64_t k, uint64_t nq, const float* vectors, + uint64_t k, uint64_t nq, uint64_t nprobe, const float* vectors, const meta::DatesT& dates, QueryResults& results) { auto start_time = METRICS_NOW_TIME; server::TimeRecorder rc(""); //step 1: get files to search ENGINE_LOG_DEBUG << "Engine query begin, index file count:" << files.size() << " date range count:" << dates.size(); - SearchContextPtr context = std::make_shared(k, nq, vectors); + SearchContextPtr context = std::make_shared(k, nq, nprobe, vectors); for (auto &file : files) { TableFileSchemaPtr file_ptr = std::make_shared(file); context->AddIndexFile(file_ptr); diff --git a/cpp/src/db/DBImpl.h b/cpp/src/db/DBImpl.h index 969b7b0509..4aa7ac07bf 100644 --- a/cpp/src/db/DBImpl.h +++ b/cpp/src/db/DBImpl.h @@ -61,12 +61,18 @@ class DBImpl : public DB { InsertVectors(const std::string &table_id, uint64_t n, const float *vectors, IDNumbers &vector_ids) override; Status - Query(const std::string &table_id, uint64_t k, uint64_t nq, const float *vectors, QueryResults &results) override; + Query(const std::string &table_id, + uint64_t k, + uint64_t nq, + uint64_t nprobe, + const float *vectors, + QueryResults &results) override; Status Query(const std::string &table_id, uint64_t k, uint64_t nq, + uint64_t nprobe, const float *vectors, const meta::DatesT &dates, QueryResults &results) override; @@ -76,6 +82,7 @@ class DBImpl : public DB { const std::vector &file_ids, uint64_t k, uint64_t nq, + uint64_t nprobe, const float *vectors, const meta::DatesT &dates, QueryResults &results) override; @@ -94,6 +101,7 @@ class DBImpl : public DB { const meta::TableFilesSchema &files, uint64_t k, uint64_t nq, + uint64_t nprobe, const float *vectors, const meta::DatesT &dates, QueryResults &results); diff --git a/cpp/src/db/engine/ExecutionEngine.h b/cpp/src/db/engine/ExecutionEngine.h index a122231a1d..88be75aeb9 100644 --- a/cpp/src/db/engine/ExecutionEngine.h +++ b/cpp/src/db/engine/ExecutionEngine.h @@ -51,6 +51,7 @@ public: virtual Status Search(long n, const float *data, long k, + long nprobe, float *distances, long *labels) const = 0; diff --git a/cpp/src/db/engine/ExecutionEngineImpl.cpp b/cpp/src/db/engine/ExecutionEngineImpl.cpp index 037c52cf5c..dd38369832 100644 --- a/cpp/src/db/engine/ExecutionEngineImpl.cpp +++ b/cpp/src/db/engine/ExecutionEngineImpl.cpp @@ -228,10 +228,11 @@ ExecutionEngineImpl::BuildIndex(const std::string &location) { Status ExecutionEngineImpl::Search(long n, const float *data, long k, + long nprobe, float *distances, long *labels) const { - ENGINE_LOG_DEBUG << "Search Params: [k] " << k << " [nprobe] " << nprobe_; - auto ec = index_->Search(n, data, distances, labels, Config::object{{"k", k}, {"nprobe", nprobe_}}); + ENGINE_LOG_DEBUG << "Search Params: [k] " << k << " [nprobe] " << nprobe; + auto ec = index_->Search(n, data, distances, labels, Config::object{{"k", k}, {"nprobe", nprobe}}); if (ec != server::KNOWHERE_SUCCESS) { ENGINE_LOG_ERROR << "Search error"; return Status::Error("Search: Search Error"); @@ -256,7 +257,6 @@ Status ExecutionEngineImpl::Init() { case EngineType::FAISS_IVFSQ8: case EngineType::FAISS_IVFFLAT: { ConfigNode engine_config = config.GetConfig(CONFIG_ENGINE); - nprobe_ = engine_config.GetInt32Value(CONFIG_NPROBE, 1); nlist_ = engine_config.GetInt32Value(CONFIG_NLIST, 16384); break; } diff --git a/cpp/src/db/engine/ExecutionEngineImpl.h b/cpp/src/db/engine/ExecutionEngineImpl.h index cb50af238b..948719310c 100644 --- a/cpp/src/db/engine/ExecutionEngineImpl.h +++ b/cpp/src/db/engine/ExecutionEngineImpl.h @@ -51,6 +51,7 @@ public: Status Search(long n, const float *data, long k, + long nprobe, float *distances, long *labels) const override; @@ -73,7 +74,6 @@ protected: int64_t dim; std::string location_; - size_t nprobe_ = 0; size_t nlist_ = 0; int64_t gpu_num = 0; }; diff --git a/cpp/src/db/scheduler/context/SearchContext.cpp b/cpp/src/db/scheduler/context/SearchContext.cpp index 599686b5f4..87009f0a6b 100644 --- a/cpp/src/db/scheduler/context/SearchContext.cpp +++ b/cpp/src/db/scheduler/context/SearchContext.cpp @@ -13,10 +13,11 @@ namespace zilliz { namespace milvus { namespace engine { -SearchContext::SearchContext(uint64_t topk, uint64_t nq, const float* vectors) +SearchContext::SearchContext(uint64_t topk, uint64_t nq, uint64_t nprobe, const float* vectors) : IScheduleContext(ScheduleContextType::kSearch), topk_(topk), nq_(nq), + nprobe_(nprobe), vectors_(vectors) { //use current time to identify this context std::chrono::system_clock::time_point tp = std::chrono::system_clock::now(); diff --git a/cpp/src/db/scheduler/context/SearchContext.h b/cpp/src/db/scheduler/context/SearchContext.h index 466fc435b4..9ca03e0830 100644 --- a/cpp/src/db/scheduler/context/SearchContext.h +++ b/cpp/src/db/scheduler/context/SearchContext.h @@ -21,12 +21,13 @@ using TableFileSchemaPtr = std::shared_ptr; class SearchContext : public IScheduleContext { public: - SearchContext(uint64_t topk, uint64_t nq, const float* vectors); + SearchContext(uint64_t topk, uint64_t nq, uint64_t nprobe, const float* vectors); bool AddIndexFile(TableFileSchemaPtr& index_file); uint64_t topk() const { return topk_; } uint64_t nq() const { return nq_; } + uint64_t nprobe() const { return nprobe_; } const float* vectors() const { return vectors_; } using Id2IndexMap = std::unordered_map; @@ -53,6 +54,7 @@ public: private: uint64_t topk_ = 0; uint64_t nq_ = 0; + uint64_t nprobe_ = 10; const float* vectors_ = nullptr; Id2IndexMap map_index_files_; diff --git a/cpp/src/db/scheduler/task/SearchTask.cpp b/cpp/src/db/scheduler/task/SearchTask.cpp index 79baeeafe9..fd9d679d5e 100644 --- a/cpp/src/db/scheduler/task/SearchTask.cpp +++ b/cpp/src/db/scheduler/task/SearchTask.cpp @@ -109,12 +109,13 @@ std::shared_ptr SearchTask::Execute() { for(auto& context : search_contexts_) { //step 1: allocate memory auto inner_k = context->topk(); + auto nprobe = context->nprobe(); output_ids.resize(inner_k*context->nq()); output_distence.resize(inner_k*context->nq()); try { //step 2: search - index_engine_->Search(context->nq(), context->vectors(), inner_k, output_distence.data(), + index_engine_->Search(context->nq(), context->vectors(), inner_k, nprobe, output_distence.data(), output_ids.data()); double span = rc.RecordSection("do search for context:" + context->Identity()); diff --git a/cpp/src/sdk/examples/grpcsimple/src/ClientTest.cpp b/cpp/src/sdk/examples/grpcsimple/src/ClientTest.cpp index ba009c0d94..583a917897 100644 --- a/cpp/src/sdk/examples/grpcsimple/src/ClientTest.cpp +++ b/cpp/src/sdk/examples/grpcsimple/src/ClientTest.cpp @@ -5,6 +5,7 @@ ******************************************************************************/ #include "ClientTest.h" #include "MilvusApi.h" +#include "cache/CpuCacheMgr.h" #include #include @@ -23,7 +24,7 @@ namespace { constexpr int64_t NQ = 10; constexpr int64_t TOP_K = 10; constexpr int64_t SEARCH_TARGET = 5000; //change this value, result is different - constexpr int64_t ADD_VECTOR_LOOP = 5; + constexpr int64_t ADD_VECTOR_LOOP = 1; constexpr int64_t SECONDS_EACH_HOUR = 3600; #define BLOCK_SPLITER std::cout << "===========================================" << std::endl; @@ -174,7 +175,7 @@ namespace { std::vector topk_query_result_array; { TimeRecorder rc(phase_name); - Status stat = conn->Search(TABLE_NAME, record_array, query_range_array, TOP_K, topk_query_result_array); + Status stat = conn->Search(TABLE_NAME, record_array, query_range_array, TOP_K, 10, topk_query_result_array); std::cout << "SearchVector function call status: " << stat.ToString() << std::endl; } @@ -316,6 +317,11 @@ ClientTest::Test(const std::string& address, const std::string& port) { // std::cout << "BuildIndex function call status: " << stat.ToString() << std::endl; } + {//preload table + Status stat = conn->PreloadTable(TABLE_NAME); + std::cout << "PreloadTable function call status: " << stat.ToString() << std::endl; + } + {//search vectors after build index finish DoSearch(conn, search_record_array, "Search after build index finish"); } diff --git a/cpp/src/sdk/grpc/ClientProxy.cpp b/cpp/src/sdk/grpc/ClientProxy.cpp index f107a2694a..898f1c9528 100644 --- a/cpp/src/sdk/grpc/ClientProxy.cpp +++ b/cpp/src/sdk/grpc/ClientProxy.cpp @@ -210,12 +210,14 @@ ClientProxy::Search(const std::string &table_name, const std::vector &query_record_array, const std::vector &query_range_array, int64_t topk, + int64_t nprobe, std::vector &topk_query_result_array) { try { //step 1: convert vectors data ::milvus::grpc::SearchParam search_param; search_param.set_table_name(table_name); search_param.set_topk(topk); + search_param.set_nprobe(nprobe); for (auto &record : query_record_array) { ::milvus::grpc::RowRecord *row_record = search_param.add_query_record_array(); for (auto &rec : record.data) { diff --git a/cpp/src/sdk/grpc/ClientProxy.h b/cpp/src/sdk/grpc/ClientProxy.h index c6da983bcc..f6a39f0445 100644 --- a/cpp/src/sdk/grpc/ClientProxy.h +++ b/cpp/src/sdk/grpc/ClientProxy.h @@ -47,6 +47,7 @@ public: const std::vector &query_record_array, const std::vector &query_range_array, int64_t topk, + int64_t nprobe, std::vector &topk_query_result_array) override; virtual Status diff --git a/cpp/src/sdk/include/MilvusApi.h b/cpp/src/sdk/include/MilvusApi.h index 22c6d23c8a..cb261743e1 100644 --- a/cpp/src/sdk/include/MilvusApi.h +++ b/cpp/src/sdk/include/MilvusApi.h @@ -247,6 +247,7 @@ class Connection { const std::vector &query_record_array, const std::vector &query_range_array, int64_t topk, + int64_t nprobe, std::vector &topk_query_result_array) = 0; /** diff --git a/cpp/src/sdk/interface/ConnectionImpl.cpp b/cpp/src/sdk/interface/ConnectionImpl.cpp index a0e4943197..b496d1c104 100644 --- a/cpp/src/sdk/interface/ConnectionImpl.cpp +++ b/cpp/src/sdk/interface/ConnectionImpl.cpp @@ -83,9 +83,10 @@ ConnectionImpl::Search(const std::string &table_name, const std::vector &query_record_array, const std::vector &query_range_array, int64_t topk, + int64_t nprobe, std::vector &topk_query_result_array) { return client_proxy_->Search(table_name, query_record_array, query_range_array, topk, - topk_query_result_array); + nprobe, topk_query_result_array); } Status @@ -121,7 +122,7 @@ ConnectionImpl::DeleteByRange(Range &range, Status ConnectionImpl::PreloadTable(const std::string &table_name) const { - + return client_proxy_->PreloadTable(table_name); } IndexParam diff --git a/cpp/src/sdk/interface/ConnectionImpl.h b/cpp/src/sdk/interface/ConnectionImpl.h index fa2c3d8497..24be6060ba 100644 --- a/cpp/src/sdk/interface/ConnectionImpl.h +++ b/cpp/src/sdk/interface/ConnectionImpl.h @@ -53,6 +53,7 @@ public: const std::vector &query_record_array, const std::vector &query_range_array, int64_t topk, + int64_t nprobe, std::vector &topk_query_result_array) override; virtual Status diff --git a/cpp/src/server/grpc_impl/GrpcRequestTask.cpp b/cpp/src/server/grpc_impl/GrpcRequestTask.cpp index 545c3cde9b..6d2842a34b 100644 --- a/cpp/src/server/grpc_impl/GrpcRequestTask.cpp +++ b/cpp/src/server/grpc_impl/GrpcRequestTask.cpp @@ -510,12 +510,17 @@ SearchTask::OnExecute() { return SetError(res, "Invalid table name: " + table_name_); } - int top_k_ = search_param_.topk(); + int64_t top_k_ = search_param_.topk(); if (top_k_ <= 0 || top_k_ > 1024) { - return SetError(SERVER_INVALID_TOPK, "Invalid topk: " + std::to_string( - top_k_)); + return SetError(SERVER_INVALID_TOPK, "Invalid topk: " + std::to_string(top_k_)); } + + int64_t nprobe = search_param_.nprobe(); + if (nprobe <= 0) { + return SetError(SERVER_INVALID_NPROBE, "Invalid nprobe: " + std::to_string(nprobe)); + } + if (search_param_.query_record_array().empty()) { return SetError(SERVER_INVALID_ROWRECORD_ARRAY, "Row record array is empty"); } @@ -584,11 +589,11 @@ SearchTask::OnExecute() { auto record_count = (uint64_t) search_param_.query_record_array().size(); if (file_id_array_.empty()) { - stat = DBWrapper::DB()->Query(table_name_, (size_t) top_k_, record_count, vec_f.data(), + stat = DBWrapper::DB()->Query(table_name_, (size_t) top_k_, record_count, nprobe, vec_f.data(), dates, results); } else { - stat = DBWrapper::DB()->Query(table_name_, file_id_array_, - (size_t) top_k_, record_count, vec_f.data(), dates, results); + stat = DBWrapper::DB()->Query(table_name_, file_id_array_, (size_t) top_k_, + record_count, nprobe, vec_f.data(), dates, results); } rc.ElapseFromBegin("search vectors from engine"); diff --git a/cpp/src/utils/Error.h b/cpp/src/utils/Error.h index 0866d82955..c264e60b08 100644 --- a/cpp/src/utils/Error.h +++ b/cpp/src/utils/Error.h @@ -50,6 +50,8 @@ constexpr ServerError SERVER_ILLEGAL_VECTOR_ID = ToGlobalServerErrorCode(109); constexpr ServerError SERVER_ILLEGAL_SEARCH_RESULT = ToGlobalServerErrorCode(110); constexpr ServerError SERVER_CACHE_ERROR = ToGlobalServerErrorCode(111); constexpr ServerError SERVER_WRITE_ERROR = ToGlobalServerErrorCode(112); +constexpr ServerError SERVER_INVALID_NPROBE = ToGlobalServerErrorCode(113); + constexpr ServerError SERVER_LICENSE_FILE_NOT_EXIST = ToGlobalServerErrorCode(500); constexpr ServerError SERVER_LICENSE_VALIDATION_FAIL = ToGlobalServerErrorCode(501); diff --git a/cpp/unittest/db/db_tests.cpp b/cpp/unittest/db/db_tests.cpp index 229484b1cd..8b36d2efbd 100644 --- a/cpp/unittest/db/db_tests.cpp +++ b/cpp/unittest/db/db_tests.cpp @@ -8,6 +8,7 @@ #include "db/DBImpl.h" #include "db/meta/MetaConsts.h" #include "db/Factories.h" +#include "cache/CpuCacheMgr.h" #include #include @@ -128,7 +129,7 @@ TEST_F(DBTest, DB_TEST) { prev_count = count; START_TIMER; - stat = db_->Query(TABLE_NAME, k, qb, qxb.data(), results); + stat = db_->Query(TABLE_NAME, k, qb, 10, qxb.data(), results); ss << "Search " << j << " With Size " << count/engine::meta::M << " M"; STOP_TIMER(ss.str()); @@ -211,7 +212,7 @@ TEST_F(DBTest, SEARCH_TEST) { { engine::QueryResults results; - stat = db_->Query(TABLE_NAME, k, nq, xq.data(), results); + stat = db_->Query(TABLE_NAME, k, nq, 10, xq.data(), results); ASSERT_STATS(stat); } @@ -219,13 +220,46 @@ TEST_F(DBTest, SEARCH_TEST) { engine::meta::DatesT dates; std::vector file_ids = {"4", "5", "6"}; engine::QueryResults results; - stat = db_->Query(TABLE_NAME, file_ids, k, nq, xq.data(), dates, results); + stat = db_->Query(TABLE_NAME, file_ids, k, nq, 10, xq.data(), dates, results); ASSERT_STATS(stat); } // TODO(linxj): add groundTruth assert }; +TEST_F(DBTest, PRELOADTABLE_TEST) { + engine::meta::TableSchema table_info = BuildTableSchema(); + engine::Status stat = db_->CreateTable(table_info); + + engine::meta::TableSchema table_info_get; + table_info_get.table_id_ = TABLE_NAME; + stat = db_->DescribeTable(table_info_get); + ASSERT_STATS(stat); + ASSERT_EQ(table_info_get.dimension_, TABLE_DIM); + + engine::IDNumbers vector_ids; + engine::IDNumbers target_ids; + + int64_t nb = 100000; + std::vector xb; + BuildVectors(nb, xb); + + int loop = 5; + + for (auto i=0; iInsertVectors(TABLE_NAME, nb, xb.data(), target_ids); + ASSERT_EQ(target_ids.size(), nb); + } + db_->BuildIndex(TABLE_NAME); + + int64_t prev_cache_usage = cache::CpuCacheMgr::GetInstance()->CacheUsage(); + stat = db_->PreloadTable(TABLE_NAME); + ASSERT_STATS(stat); + int64_t cur_cache_usage = cache::CpuCacheMgr::GetInstance()->CacheUsage(); + ASSERT_TRUE(prev_cache_usage < cur_cache_usage); + +} + TEST_F(DBTest2, ARHIVE_DISK_CHECK) { engine::meta::TableSchema table_info = BuildTableSchema(); @@ -309,4 +343,4 @@ TEST_F(DBTest2, DELETE_TEST) { db_->HasTable(TABLE_NAME, has_table); ASSERT_FALSE(has_table); -}; +}; \ No newline at end of file diff --git a/cpp/unittest/db/mem_test.cpp b/cpp/unittest/db/mem_test.cpp index dc0b9aa77b..1976822e76 100644 --- a/cpp/unittest/db/mem_test.cpp +++ b/cpp/unittest/db/mem_test.cpp @@ -243,7 +243,7 @@ TEST_F(NewMemManagerTest, SERIAL_INSERT_SEARCH_TEST) { for (auto &pair : search_vectors) { auto &search = pair.second; engine::QueryResults results; - stat = db_->Query(TABLE_NAME, k, 1, search.data(), results); + stat = db_->Query(TABLE_NAME, k, 1, 10, search.data(), results); ASSERT_EQ(results[0][0].first, pair.first); ASSERT_LT(results[0][0].second, 0.00001); } @@ -332,7 +332,7 @@ TEST_F(NewMemManagerTest, CONCURRENT_INSERT_SEARCH_TEST) { prev_count = count; START_TIMER; - stat = db_->Query(TABLE_NAME, k, qb, qxb.data(), results); + stat = db_->Query(TABLE_NAME, k, qb, 10, qxb.data(), results); ss << "Search " << j << " With Size " << count / engine::meta::M << " M"; STOP_TIMER(ss.str()); diff --git a/cpp/unittest/db/mysql_db_test.cpp b/cpp/unittest/db/mysql_db_test.cpp index 462721f186..78adf9f0f5 100644 --- a/cpp/unittest/db/mysql_db_test.cpp +++ b/cpp/unittest/db/mysql_db_test.cpp @@ -90,7 +90,7 @@ TEST_F(DISABLED_MySQLDBTest, DB_TEST) { prev_count = count; START_TIMER; - stat = db_->Query(TABLE_NAME, k, qb, qxb.data(), results); + stat = db_->Query(TABLE_NAME, k, qb, 10, qxb.data(), results); ss << "Search " << j << " With Size " << count/engine::meta::M << " M"; STOP_TIMER(ss.str()); @@ -190,7 +190,7 @@ TEST_F(DISABLED_MySQLDBTest, SEARCH_TEST) { sleep(2); // wait until build index finish engine::QueryResults results; - stat = db_->Query(TABLE_NAME, k, nq, xq.data(), results); + stat = db_->Query(TABLE_NAME, k, nq, 10, xq.data(), results); ASSERT_STATS(stat); delete db_; diff --git a/cpp/unittest/db/scheduler_test.cpp b/cpp/unittest/db/scheduler_test.cpp index 01a7057e00..0937ef197a 100644 --- a/cpp/unittest/db/scheduler_test.cpp +++ b/cpp/unittest/db/scheduler_test.cpp @@ -38,7 +38,7 @@ TEST(DBSchedulerTest, TASK_QUEUE_TEST) { ASSERT_EQ(ptr, nullptr); ASSERT_TRUE(queue.Empty()); - engine::SearchContextPtr context_ptr = std::make_shared(1, 1, nullptr); + engine::SearchContextPtr context_ptr = std::make_shared(1, 1, 10, nullptr); for(size_t i = 0; i < 10; i++) { auto file = CreateTabileFileStruct(i, "tbl"); context_ptr->AddIndexFile(file); @@ -69,7 +69,7 @@ TEST(DBSchedulerTest, SEARCH_SCHEDULER_TEST) { task_list.push_back(task_ptr); } - engine::SearchContextPtr context_ptr = std::make_shared(1, 1, nullptr); + engine::SearchContextPtr context_ptr = std::make_shared(1, 1, 10, nullptr); for(size_t i = 0; i < 20; i++) { auto file = CreateTabileFileStruct(i, "tbl"); context_ptr->AddIndexFile(file);