diff --git a/internal/querycoordv2/services.go b/internal/querycoordv2/services.go index bf67f7721e..53a4361d5c 100644 --- a/internal/querycoordv2/services.go +++ b/internal/querycoordv2/services.go @@ -913,9 +913,9 @@ func (s *Server) GetShardLeaders(ctx context.Context, req *querypb.GetShardLeade channels := s.targetMgr.GetDmChannelsByCollection(req.GetCollectionID(), meta.CurrentTarget) if len(channels) == 0 { - msg := "failed to get channels" - err := merr.WrapErrCollectionNotLoaded(req.GetCollectionID()) - log.Warn(msg, zap.Error(err)) + err := merr.WrapErrCollectionOnRecovering(req.GetCollectionID(), + "loaded collection do not found any channel in target, may be in recovery") + log.Warn("failed to get channels", zap.Error(err)) resp.Status = merr.Status(err) return resp, nil } diff --git a/pkg/util/merr/errors.go b/pkg/util/merr/errors.go index 630f4d02be..6151b3267d 100644 --- a/pkg/util/merr/errors.go +++ b/pkg/util/merr/errors.go @@ -51,6 +51,7 @@ var ( ErrCollectionNotFullyLoaded = newMilvusError("collection not fully loaded", 103, true) ErrCollectionLoaded = newMilvusError("collection already loaded", 104, false) ErrCollectionIllegalSchema = newMilvusError("illegal collection schema", 105, false) + ErrCollectionOnRecovering = newMilvusError("collection on recovering", 106, true) // Partition related ErrPartitionNotFound = newMilvusError("partition not found", 200, false) diff --git a/pkg/util/merr/errors_test.go b/pkg/util/merr/errors_test.go index 51bc6d854b..67782d1c50 100644 --- a/pkg/util/merr/errors_test.go +++ b/pkg/util/merr/errors_test.go @@ -86,6 +86,7 @@ func (s *ErrSuite) TestWrap() { s.ErrorIs(WrapErrCollectionNotLoaded("test_collection", "failed to query"), ErrCollectionNotLoaded) s.ErrorIs(WrapErrCollectionNotFullyLoaded("test_collection", "failed to query"), ErrCollectionNotFullyLoaded) s.ErrorIs(WrapErrCollectionNotLoaded("test_collection", "failed to alter index %s", "hnsw"), ErrCollectionNotLoaded) + s.ErrorIs(WrapErrCollectionOnRecovering("test_collection", "channel lost %s", "dev"), ErrCollectionOnRecovering) // Partition related s.ErrorIs(WrapErrPartitionNotFound("test_partition", "failed to get partition"), ErrPartitionNotFound) diff --git a/pkg/util/merr/utils.go b/pkg/util/merr/utils.go index 397aa9cbab..b90f13969d 100644 --- a/pkg/util/merr/utils.go +++ b/pkg/util/merr/utils.go @@ -479,6 +479,16 @@ func WrapErrCollectionIllegalSchema(collection string, msgAndArgs ...any) error return err } +// WrapErrCollectionOnRecovering wraps ErrCollectionOnRecovering with collection +func WrapErrCollectionOnRecovering(collection any, msgAndArgs ...any) error { + err := wrapFields(ErrCollectionOnRecovering, value("collection", collection)) + if len(msgAndArgs) > 0 { + msg := msgAndArgs[0].(string) + err = errors.Wrapf(err, msg, msgAndArgs[1:]...) + } + return err +} + func WrapErrAliasNotFound(db any, alias any, msg ...string) error { err := wrapFields(ErrAliasNotFound, value("database", db),