diff --git a/internal/indexcoord/indexservice.go b/internal/indexcoord/index_coord.go similarity index 96% rename from internal/indexcoord/indexservice.go rename to internal/indexcoord/index_coord.go index f0f71ce28d7415479ebcd6604d58c63e2502e04a..162bb03176dbff960eea972fef432fd0c56add23 100644 --- a/internal/indexcoord/indexservice.go +++ b/internal/indexcoord/index_coord.go @@ -333,25 +333,38 @@ func (i *IndexCoord) BuildIndex(ctx context.Context, req *indexpb.BuildIndexRequ } func (i *IndexCoord) GetIndexStates(ctx context.Context, req *indexpb.GetIndexStatesRequest) (*indexpb.GetIndexStatesResponse, error) { - log.Debug("IndexCoord get index states ...", zap.Int64s("IndexBuildIDs", req.IndexBuildIDs)) - var indexStates []*indexpb.IndexInfo - for _, indexID := range req.IndexBuildIDs { - indexState, err := i.metaTable.GetIndexState(indexID) - if err != nil { - indexState.Reason = err.Error() + var ( + cntNone = 0 + cntUnissued = 0 + cntInprogress = 0 + cntFinished = 0 + cntFailed = 0 + ) + indexStates := i.metaTable.GetIndexStates(req.IndexBuildIDs) + for _, state := range indexStates { + switch state.State { + case commonpb.IndexState_IndexStateNone: + cntNone++ + case commonpb.IndexState_Unissued: + cntUnissued++ + case commonpb.IndexState_InProgress: + cntInprogress++ + case commonpb.IndexState_Finished: + cntFinished++ + case commonpb.IndexState_Failed: + cntFailed++ } - indexStates = append(indexStates, indexState) } + log.Debug("IndexCoord get index states success", + zap.Int("total", len(indexStates)), zap.Int("None", cntNone), zap.Int("Unissued", cntUnissued), + zap.Int("InProgress", cntInprogress), zap.Int("Finished", cntFinished), zap.Int("Failed", cntFailed)) + ret := &indexpb.GetIndexStatesResponse{ Status: &commonpb.Status{ ErrorCode: commonpb.ErrorCode_Success, }, States: indexStates, } - log.Debug("IndexCoord get index states success", - zap.Any("index status", ret.Status), - zap.Any("index states", ret.States)) - return ret, nil } diff --git a/internal/indexcoord/meta_table.go b/internal/indexcoord/meta_table.go index e0dd0c3c525baa5461c91a1d7141e6d0154b307e..87dfa31fa17be595a1bb45e1623771b9e85e0d01 100644 --- a/internal/indexcoord/meta_table.go +++ b/internal/indexcoord/meta_table.go @@ -245,24 +245,28 @@ func (mt *metaTable) MarkIndexAsDeleted(indexID UniqueID) error { return nil } -func (mt *metaTable) GetIndexState(indexBuildID UniqueID) (*indexpb.IndexInfo, error) { +func (mt *metaTable) GetIndexStates(indexBuildIDs []UniqueID) []*indexpb.IndexInfo { mt.lock.Lock() defer mt.lock.Unlock() - ret := &indexpb.IndexInfo{ - IndexBuildID: indexBuildID, - } - meta, ok := mt.indexBuildID2Meta[indexBuildID] - if !ok { - return ret, fmt.Errorf("index not exists with ID = %d", indexBuildID) - } - if meta.indexMeta.MarkDeleted { - return ret, fmt.Errorf("index not exists with ID = %d", indexBuildID) + var indexStates []*indexpb.IndexInfo + for _, id := range indexBuildIDs { + state := &indexpb.IndexInfo{ + IndexBuildID: id, + } + meta, ok := mt.indexBuildID2Meta[id] + if !ok { + state.Reason = fmt.Sprintf("index %d not exists", id) + } else if meta.indexMeta.MarkDeleted { + state.Reason = fmt.Sprintf("index %d has been deleted", id) + } else { + state.State = meta.indexMeta.State + state.IndexID = meta.indexMeta.Req.IndexID + state.IndexName = meta.indexMeta.Req.IndexName + state.Reason = meta.indexMeta.FailReason + } + indexStates = append(indexStates, state) } - ret.IndexID = meta.indexMeta.Req.IndexID - ret.IndexName = meta.indexMeta.Req.IndexName - ret.Reason = meta.indexMeta.FailReason - ret.State = meta.indexMeta.State - return ret, nil + return indexStates } func (mt *metaTable) GetIndexFilePathInfo(indexBuildID UniqueID) (*indexpb.IndexFilePathInfo, error) {