diff --git a/pkg/core/region.go b/pkg/core/region.go index 0aff9ac5e2fb..63f1ec4067ed 100644 --- a/pkg/core/region.go +++ b/pkg/core/region.go @@ -1371,23 +1371,23 @@ func (r *RegionsInfo) GetStoreRegions(storeID uint64) []*RegionInfo { // SubTreeRegionType is the type of sub tree region. type SubTreeRegionType int -var ( +const ( // AllInSubTree is all sub trees. - AllInSubTree SubTreeRegionType = 0 + AllInSubTree SubTreeRegionType = iota // LeaderInSubTree is the leader sub tree. - LeaderInSubTree SubTreeRegionType = 1 + LeaderInSubTree // FollowerInSubTree is the follower sub tree. - FollowerInSubTree SubTreeRegionType = 2 + FollowerInSubTree // LearnerInSubTree is the learner sub tree. - LearnerInSubTree SubTreeRegionType = 3 + LearnerInSubTree // WitnessInSubTree is the witness sub tree. - WitnessInSubTree SubTreeRegionType = 4 + WitnessInSubTree // PendingPeerInSubTree is the pending peer sub tree. - PendingPeerInSubTree SubTreeRegionType = 5 + PendingPeerInSubTree ) // GetStoreRegions gets all RegionInfo with a given storeID -func (r *RegionsInfo) GetStoreRegionsByTypeInSubTree(storeID uint64, typ SubTreeRegionType) []*RegionInfo { +func (r *RegionsInfo) GetStoreRegionsByTypeInSubTree(storeID uint64, typ SubTreeRegionType) ([]*RegionInfo, err) { r.st.RLock() var regions []*RegionInfo switch typ { @@ -1413,10 +1413,13 @@ func (r *RegionsInfo) GetStoreRegionsByTypeInSubTree(storeID uint64, typ SubTree } case AllInSubTree: r.st.RUnlock() - return r.GetStoreRegions(storeID) + return r.GetStoreRegions(storeID), nil + default: + return nil, errors.Errorf("unknown sub tree region type %v", typ) } + r.st.RUnlock() - return regions + return regions, nil } // GetStoreLeaderRegionSize get total size of store's leader regions diff --git a/server/api/region.go b/server/api/region.go index dc466bd33c70..2f1d07988c4c 100644 --- a/server/api/region.go +++ b/server/api/region.go @@ -223,7 +223,11 @@ func (h *regionsHandler) GetStoreRegions(w http.ResponseWriter, r *http.Request) if err != nil { typID = int(core.AllInSubTree) } - regions := rc.GetStoreRegionsByTypeInSubTree(uint64(id), core.SubTreeRegionType(typID)) + regions, err := rc.GetStoreRegionsByTypeInSubTree(uint64(id), core.SubTreeRegionType(typID)) + if err != nil { + h.rd.JSON(w, http.StatusBadRequest, err.Error()) + return + } b, err := response.MarshalRegionsInfoJSON(r.Context(), regions) if err != nil { h.rd.JSON(w, http.StatusInternalServerError, err.Error())