Fix search failed with nil result (#20304)

Signed-off-by: yah01 <yang.cen@zilliz.com>

Signed-off-by: yah01 <yang.cen@zilliz.com>
pull/20257/head
yah01 2022-11-03 21:15:35 +08:00 committed by GitHub
parent 151e0c42c5
commit e0506352a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 5 deletions

View File

@ -30,9 +30,9 @@ import (
// searchOnSegments performs search on listed segments
// all segment ids are validated before calling this function
func searchOnSegments(ctx context.Context, replica ReplicaInterface, segType segmentType, searchReq *searchRequest, segIDs []UniqueID) ([]*SearchResult, error) {
func searchSegments(ctx context.Context, replica ReplicaInterface, segType segmentType, searchReq *searchRequest, segIDs []UniqueID) ([]*SearchResult, error) {
// results variables
searchResults := make([]*SearchResult, len(segIDs))
resultCh := make(chan *SearchResult, len(segIDs))
errs := make([]error, len(segIDs))
searchLabel := metrics.SealedSegmentLabel
if segType == commonpb.SegmentState_Growing {
@ -57,19 +57,27 @@ func searchOnSegments(ctx context.Context, replica ReplicaInterface, segType seg
tr := timerecord.NewTimeRecorder("searchOnSegments")
searchResult, err := seg.search(searchReq)
errs[i] = err
searchResults[i] = searchResult
resultCh <- searchResult
// update metrics
metrics.QueryNodeSQSegmentLatency.WithLabelValues(fmt.Sprint(Params.QueryNodeCfg.GetNodeID()),
metrics.SearchLabel, searchLabel).Observe(float64(tr.ElapseSpan().Milliseconds()))
}(segID, i)
}
wg.Wait()
close(resultCh)
searchResults := make([]*SearchResult, 0, len(segIDs))
for result := range resultCh {
searchResults = append(searchResults, result)
}
for _, err := range errs {
if err != nil {
deleteSearchResults(searchResults)
return nil, err
}
}
return searchResults, nil
}
@ -86,7 +94,7 @@ func searchHistorical(ctx context.Context, replica ReplicaInterface, searchReq *
if err != nil {
return searchResults, searchSegmentIDs, searchPartIDs, err
}
searchResults, err = searchOnSegments(ctx, replica, segmentTypeSealed, searchReq, searchSegmentIDs)
searchResults, err = searchSegments(ctx, replica, segmentTypeSealed, searchReq, searchSegmentIDs)
return searchResults, searchPartIDs, searchSegmentIDs, err
}
@ -102,6 +110,6 @@ func searchStreaming(ctx context.Context, replica ReplicaInterface, searchReq *s
if err != nil {
return searchResults, searchSegmentIDs, searchPartIDs, err
}
searchResults, err = searchOnSegments(ctx, replica, segmentTypeGrowing, searchReq, searchSegmentIDs)
searchResults, err = searchSegments(ctx, replica, segmentTypeGrowing, searchReq, searchSegmentIDs)
return searchResults, searchPartIDs, searchSegmentIDs, err
}