Add global mutex for global map (#12071)

Fixes: #12070

Signed-off-by: yangxuan <xuan.yang@zilliz.com>
pull/12077/head
XuanYang-cn 2021-11-18 15:35:12 +08:00 committed by GitHub
parent e225268b8d
commit 7066e75112
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 8 additions and 6 deletions

View File

@ -42,7 +42,10 @@ const (
defaultTotalmemPerNode = 6000000
)
var GlobalSegmentInfos = make(map[UniqueID]*querypb.SegmentInfo)
var (
GlobalSegmentInfos = make(map[UniqueID]*querypb.SegmentInfo)
globalSegInfosMutex sync.RWMutex
)
type queryNodeServerMock struct {
querypb.QueryNodeServer
@ -68,7 +71,6 @@ type queryNodeServerMock struct {
getMetrics func() (*milvuspb.GetMetricsResponse, error)
segmentInfos map[UniqueID]*querypb.SegmentInfo
segmentMu sync.RWMutex
totalMem uint64
}
@ -214,9 +216,9 @@ func (qs *queryNodeServerMock) LoadSegments(ctx context.Context, req *querypb.Lo
MemSize: info.NumOfRows * int64(sizePerRecord),
NumRows: info.NumOfRows,
}
qs.segmentMu.Lock()
globalSegInfosMutex.Lock()
qs.segmentInfos[info.SegmentID] = segmentInfo
qs.segmentMu.Unlock()
globalSegInfosMutex.Unlock()
}
return qs.loadSegment()
@ -236,13 +238,13 @@ func (qs *queryNodeServerMock) ReleaseSegments(ctx context.Context, req *querypb
func (qs *queryNodeServerMock) GetSegmentInfo(ctx context.Context, req *querypb.GetSegmentInfoRequest) (*querypb.GetSegmentInfoResponse, error) {
segmentInfos := make([]*querypb.SegmentInfo, 0)
qs.segmentMu.RLock()
globalSegInfosMutex.RLock()
for _, info := range qs.segmentInfos {
if info.CollectionID == req.CollectionID && info.NodeID == qs.queryNodeID {
segmentInfos = append(segmentInfos, info)
}
}
qs.segmentMu.RUnlock()
globalSegInfosMutex.RUnlock()
res, err := qs.getSegmentInfos()
if err == nil {