diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f9211a456..d1490b978b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,17 @@ # Changelog Please mark all change in change log and use the issue from GitHub +# Milvus 0.10.5 (TBD) +## Bug +- \#4378 Multi-threads to call load_collection() and search() cause Milvus hang -# Milvus 0.10.4 (TBD) +## Feature + +## Improvement + +## Task + +# Milvus 0.10.4 (2020-12-02) ## Bug - \#3626 Fix server crash when searching with IVF_PQ on GPU - \#3903 The performance of IVF_SQ8H in 0.10.3 is degraded diff --git a/core/src/server/delivery/strategy/SearchReqStrategy.cpp b/core/src/server/delivery/strategy/SearchReqStrategy.cpp index 0b66ca7b57..d8cda3dc9a 100644 --- a/core/src/server/delivery/strategy/SearchReqStrategy.cpp +++ b/core/src/server/delivery/strategy/SearchReqStrategy.cpp @@ -34,10 +34,13 @@ SearchReqStrategy::ReScheduleQueue(const BaseRequestPtr& request, std::queueGetRequestType() != BaseRequest::kSearch) { std::string msg = "search strategy can only handle search request"; LOG_SERVER_ERROR_ << msg; - return Status(SERVER_UNSUPPORTED_ERROR, msg); + + // directly put request to queue if the request is not a search request + queue.push(request); + return Status::OK(); } - // if config set to 0, neve combine + // if config set to 0, never combine, directly put request to queue if (search_combine_nq_ <= 0) { queue.push(request); return Status::OK(); @@ -50,30 +53,31 @@ SearchReqStrategy::ReScheduleQueue(const BaseRequestPtr& request, std::queueGetRequestType() == BaseRequest::kSearch) { SearchRequestPtr last_search_req = std::static_pointer_cast(last_req); if (SearchCombineRequest::CanCombine(last_search_req, new_search_req, search_combine_nq_)) { - // combine request + // combine requests, create a SearchCombineRequest to hold them SearchCombineRequestPtr combine_request = std::make_shared(search_combine_nq_); combine_request->Combine(last_search_req); combine_request->Combine(new_search_req); queue.back() = combine_request; // replace the last request to combine request LOG_SERVER_DEBUG_ << "Combine 2 search request"; } else { - // directly put to queue + // directly put request to queue since the two search requests have different parameters queue.push(request); } } else if (last_req->GetRequestType() == BaseRequest::kSearchCombine) { SearchCombineRequestPtr combine_req = std::static_pointer_cast(last_req); if (combine_req->CanCombine(new_search_req)) { - // combine request + // combine requests, the last request is a SearchCombineRequest combine_req->Combine(new_search_req); LOG_SERVER_DEBUG_ << "Combine more search request"; } else { - // directly put to queue + // directly put request to queue since the two search requests have different parameters queue.push(request); } } else { - std::string msg = "unsupported request type for search strategy"; - LOG_SERVER_ERROR_ << msg; - return Status(SERVER_UNSUPPORTED_ERROR, msg); + // the search queue could contains PreloadRequest/GetEntityByID/ReloadSegment request + // if the last request is not SearchRequest/SearchCombineRequest, we can't do combination + // directly put request to queue + queue.push(request); } return Status::OK();