refine err msg about no available node in replica (#24256)

Signed-off-by: Wei Liu <wei.liu@zilliz.com>
pull/24288/head
wei liu 2023-05-22 11:59:26 +08:00 committed by GitHub
parent 7e9ef36de4
commit 8965ea2a08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 41 additions and 4 deletions

View File

@ -809,13 +809,23 @@ func (s *Server) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasReque
} }
for _, replica := range replicas { for _, replica := range replicas {
info, err := s.fillReplicaInfo(replica, req.GetWithShardNodes()) msg := "failed to get replica info"
if err != nil { if len(replica.GetNodes()) == 0 {
msg := "failed to get replica info" err := merr.WrapErrNoAvailableNodeInReplica(replica.ID)
log.Warn(msg, log.Warn(msg,
zap.Int64("replica", replica.GetID()), zap.Int64("replica", replica.GetID()),
zap.Error(err)) zap.Error(err))
resp.Status = utils.WrapStatus(commonpb.ErrorCode_MetaFailed, msg, err) resp.Status = utils.WrapStatus(commonpb.ErrorCode_MetaFailed, msg, err)
break
}
info, err := s.fillReplicaInfo(replica, req.GetWithShardNodes())
if err != nil {
log.Warn(msg,
zap.Int64("replica", replica.GetID()),
zap.Error(err))
resp.Status = utils.WrapStatus(commonpb.ErrorCode_MetaFailed, msg, err)
break
} }
resp.Replicas = append(resp.Replicas, info) resp.Replicas = append(resp.Replicas, info)
} }

View File

@ -1404,6 +1404,24 @@ func (suite *ServiceSuite) TestGetReplicas() {
suite.Equal(resp.GetStatus().GetCode(), merr.Code(merr.ErrServiceNotReady)) suite.Equal(resp.GetStatus().GetCode(), merr.Code(merr.ErrServiceNotReady))
} }
func (suite *ServiceSuite) TestGetReplicasFailed() {
suite.loadAll()
ctx := context.Background()
server := suite.server
suite.meta.ReplicaManager.Put(utils.CreateTestReplica(100001, 100000, []int64{}))
suite.meta.ReplicaManager.Put(utils.CreateTestReplica(100002, 100000, []int64{1}))
req := &milvuspb.GetReplicasRequest{
CollectionID: 100000,
WithShardNodes: true,
}
resp, err := server.GetReplicas(ctx, req)
suite.NoError(err)
suite.Equal(commonpb.ErrorCode_MetaFailed, resp.GetStatus().GetErrorCode())
suite.EqualValues(resp.GetStatus().GetReason(), "failed to get replica info, err=replica=100001: no available node in replica")
}
func (suite *ServiceSuite) TestCheckHealth() { func (suite *ServiceSuite) TestCheckHealth() {
ctx := context.Background() ctx := context.Background()
server := suite.server server := suite.server

View File

@ -67,7 +67,8 @@ var (
ErrResourceGroupNotFound = newMilvusError("resource group not found", 300, false) ErrResourceGroupNotFound = newMilvusError("resource group not found", 300, false)
// Replica related // Replica related
ErrReplicaNotFound = newMilvusError("replica not found", 400, false) ErrReplicaNotFound = newMilvusError("replica not found", 400, false)
ErrNoAvailableNodeInReplica = newMilvusError("no available node in replica", 401, false)
// Channel related // Channel related
ErrChannelNotFound = newMilvusError("channel not found", 500, false) ErrChannelNotFound = newMilvusError("channel not found", 500, false)

View File

@ -220,6 +220,14 @@ func WrapErrReplicaNotFound(id int64, msg ...string) error {
return err return err
} }
func WrapErrNoAvailableNodeInReplica(id int64, msg ...string) error {
err := wrapWithField(ErrNoAvailableNodeInReplica, "replica", id)
if len(msg) > 0 {
err = errors.Wrap(err, strings.Join(msg, "; "))
}
return err
}
// Channel related // Channel related
func WrapErrChannelNotFound(name string, msg ...string) error { func WrapErrChannelNotFound(name string, msg ...string) error {
err := wrapWithField(ErrChannelNotFound, "channel", name) err := wrapWithField(ErrChannelNotFound, "channel", name)