From a3755cf4097b91b6fc6771803df5ce9606bc927e Mon Sep 17 00:00:00 2001 From: SimFG Date: Wed, 5 Mar 2025 11:08:13 +0800 Subject: [PATCH] fix: improve error handling and unit tests for InitMetaCache function (#40322) - issue: #40320 Signed-off-by: SimFG --- internal/datacoord/task_scheduler_test.go | 2 +- internal/proxy/meta_cache.go | 2 +- internal/proxy/meta_cache_test.go | 36 +++++++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/internal/datacoord/task_scheduler_test.go b/internal/datacoord/task_scheduler_test.go index 5b4c52d07c..6bcf4f1bc5 100644 --- a/internal/datacoord/task_scheduler_test.go +++ b/internal/datacoord/task_scheduler_test.go @@ -19,7 +19,6 @@ package datacoord import ( "context" "fmt" - "go.uber.org/zap" "sync" "testing" "time" @@ -27,6 +26,7 @@ import ( "github.com/cockroachdb/errors" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/suite" + "go.uber.org/zap" "google.golang.org/grpc" "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" diff --git a/internal/proxy/meta_cache.go b/internal/proxy/meta_cache.go index 7abe1d18ce..a48a2a9948 100644 --- a/internal/proxy/meta_cache.go +++ b/internal/proxy/meta_cache.go @@ -361,7 +361,7 @@ func InitMetaCache(ctx context.Context, rootCoord types.RootCoordClient, queryCo // The privilege info is a little more. And to get this info, the query operation of involving multiple table queries is required. resp, err := rootCoord.ListPolicy(ctx, &internalpb.ListPolicyRequest{}) - if err != nil { + if err = merr.CheckRPCCall(resp, err); err != nil { log.Error("fail to init meta cache", zap.Error(err)) return err } diff --git a/internal/proxy/meta_cache_test.go b/internal/proxy/meta_cache_test.go index ab69646cee..059b401d5e 100644 --- a/internal/proxy/meta_cache_test.go +++ b/internal/proxy/meta_cache_test.go @@ -385,6 +385,42 @@ func TestMetaCacheGetCollectionWithUpdate(t *testing.T) { }) } +func TestMetaCache_InitCache(t *testing.T) { + t.Run("success", func(t *testing.T) { + ctx := context.Background() + rootCoord := mocks.NewMockRootCoordClient(t) + queryCoord := mocks.NewMockQueryCoordClient(t) + queryCoord.EXPECT().ShowCollections(mock.Anything, mock.Anything).Return(&querypb.ShowCollectionsResponse{}, nil).Maybe() + rootCoord.EXPECT().ListPolicy(mock.Anything, mock.Anything, mock.Anything).Return(&internalpb.ListPolicyResponse{Status: merr.Success()}, nil).Once() + mgr := newShardClientMgr() + err := InitMetaCache(ctx, rootCoord, queryCoord, mgr) + assert.NoError(t, err) + }) + + t.Run("failed to list policy", func(t *testing.T) { + ctx := context.Background() + rootCoord := mocks.NewMockRootCoordClient(t) + queryCoord := mocks.NewMockQueryCoordClient(t) + rootCoord.EXPECT().ListPolicy(mock.Anything, mock.Anything, mock.Anything).Return( + &internalpb.ListPolicyResponse{Status: merr.Status(errors.New("mock list policy error"))}, + nil).Once() + mgr := newShardClientMgr() + err := InitMetaCache(ctx, rootCoord, queryCoord, mgr) + assert.Error(t, err) + }) + + t.Run("rpc error", func(t *testing.T) { + ctx := context.Background() + rootCoord := mocks.NewMockRootCoordClient(t) + queryCoord := mocks.NewMockQueryCoordClient(t) + rootCoord.EXPECT().ListPolicy(mock.Anything, mock.Anything, mock.Anything).Return( + nil, errors.New("mock list policy rpc errorr")).Once() + mgr := newShardClientMgr() + err := InitMetaCache(ctx, rootCoord, queryCoord, mgr) + assert.Error(t, err) + }) +} + func TestMetaCache_GetCollectionName(t *testing.T) { ctx := context.Background() rootCoord := &MockRootCoordClientInterface{}