diff --git a/internal/proxy/impl.go b/internal/proxy/impl.go index 4036489318..352ee50abf 100644 --- a/internal/proxy/impl.go +++ b/internal/proxy/impl.go @@ -4041,15 +4041,18 @@ func (node *Proxy) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasReq req.CollectionID, _ = globalMetaCache.GetCollectionID(ctx, req.GetCollectionName()) } - resp, err := node.queryCoord.GetReplicas(ctx, req) + r, err := node.queryCoord.GetReplicas(ctx, req) if err != nil { - log.Error("Failed to get replicas from Query Coordinator", zap.Error(err)) - resp.Status.ErrorCode = commonpb.ErrorCode_UnexpectedError - resp.Status.Reason = err.Error() + log.Warn("Failed to get replicas from Query Coordinator", + zap.Error(err)) + resp.Status = &commonpb.Status{ + ErrorCode: commonpb.ErrorCode_UnexpectedError, + Reason: err.Error(), + } return resp, nil } - log.Info("received get replicas response", zap.Any("resp", resp), zap.Error(err)) - return resp, nil + log.Debug("received get replicas response", zap.String("resp", r.String())) + return r, nil } // GetCompactionState gets the compaction state of multiple segments diff --git a/internal/proxy/impl_test.go b/internal/proxy/impl_test.go index 976f95a15d..42a0d6d1b9 100644 --- a/internal/proxy/impl_test.go +++ b/internal/proxy/impl_test.go @@ -30,6 +30,7 @@ import ( "github.com/milvus-io/milvus/internal/mocks" "github.com/milvus-io/milvus/internal/proto/datapb" "github.com/milvus-io/milvus/internal/proto/proxypb" + "github.com/milvus-io/milvus/internal/types" "github.com/milvus-io/milvus/internal/util/dependency" "github.com/milvus-io/milvus/internal/util/sessionutil" "github.com/milvus-io/milvus/internal/util/typeutil" @@ -473,3 +474,51 @@ func TestProxy_GetFlushAllState(t *testing.T) { assert.Equal(t, resp.GetStatus().GetErrorCode(), commonpb.ErrorCode_UnexpectedError) }) } + +func TestProxy_GetReplicas(t *testing.T) { + factory := dependency.NewDefaultFactory(true) + ctx := context.Background() + + node, err := NewProxy(ctx, factory) + assert.NoError(t, err) + node.stateCode.Store(commonpb.StateCode_Healthy) + node.tsoAllocator = ×tampAllocator{ + tso: newMockTimestampAllocatorInterface(), + } + mockQC := types.NewMockQueryCoord(t) + mockRC := mocks.NewRootCoord(t) + node.queryCoord = mockQC + node.rootCoord = mockRC + + // set expectations + successStatus := &commonpb.Status{ErrorCode: commonpb.ErrorCode_Success} + t.Run("success", func(t *testing.T) { + mockQC.EXPECT().GetReplicas(mock.Anything, mock.AnythingOfType("*milvuspb.GetReplicasRequest")).Return(&milvuspb.GetReplicasResponse{Status: successStatus}, nil) + resp, err := node.GetReplicas(ctx, &milvuspb.GetReplicasRequest{ + CollectionID: 1000, + }) + assert.NoError(t, err) + assert.Equal(t, resp.GetStatus().GetErrorCode(), commonpb.ErrorCode_Success) + }) + + t.Run("proxy_not_healthy", func(t *testing.T) { + node.stateCode.Store(commonpb.StateCode_Abnormal) + resp, err := node.GetReplicas(ctx, &milvuspb.GetReplicasRequest{ + CollectionID: 1000, + }) + assert.NoError(t, err) + assert.Equal(t, resp.GetStatus().GetErrorCode(), commonpb.ErrorCode_UnexpectedError) + node.stateCode.Store(commonpb.StateCode_Healthy) + }) + + t.Run("QueryCoordClient_returnsError", func(t *testing.T) { + mockQC.ExpectedCalls = nil + mockQC.EXPECT().GetReplicas(mock.Anything, mock.AnythingOfType("*milvuspb.GetReplicasRequest")).Return(nil, errors.New("mocked")) + + resp, err := node.GetReplicas(ctx, &milvuspb.GetReplicasRequest{ + CollectionID: 1000, + }) + assert.NoError(t, err) + assert.Equal(t, resp.GetStatus().GetErrorCode(), commonpb.ErrorCode_UnexpectedError) + }) +}