mirror of https://github.com/milvus-io/milvus.git
				
				
				
			enhance: [GoSDK] Add load option for field partial load (#35920)
Related to #35415 Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>pull/35949/head
							parent
							
								
									9da86529a7
								
							
						
					
					
						commit
						69b1eea6f2
					
				| 
						 | 
				
			
			@ -28,15 +28,19 @@ type LoadCollectionOption interface {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
type loadCollectionOption struct {
 | 
			
		||||
	collectionName string
 | 
			
		||||
	interval       time.Duration
 | 
			
		||||
	replicaNum     int
 | 
			
		||||
	collectionName       string
 | 
			
		||||
	interval             time.Duration
 | 
			
		||||
	replicaNum           int
 | 
			
		||||
	loadFields           []string
 | 
			
		||||
	skipLoadDynamicField bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (opt *loadCollectionOption) Request() *milvuspb.LoadCollectionRequest {
 | 
			
		||||
	return &milvuspb.LoadCollectionRequest{
 | 
			
		||||
		CollectionName: opt.collectionName,
 | 
			
		||||
		ReplicaNumber:  int32(opt.replicaNum),
 | 
			
		||||
		CollectionName:       opt.collectionName,
 | 
			
		||||
		ReplicaNumber:        int32(opt.replicaNum),
 | 
			
		||||
		LoadFields:           opt.loadFields,
 | 
			
		||||
		SkipLoadDynamicField: opt.skipLoadDynamicField,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -49,6 +53,16 @@ func (opt *loadCollectionOption) WithReplica(num int) *loadCollectionOption {
 | 
			
		|||
	return opt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (opt *loadCollectionOption) WithLoadFields(loadFields ...string) *loadCollectionOption {
 | 
			
		||||
	opt.loadFields = loadFields
 | 
			
		||||
	return opt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (opt *loadCollectionOption) WithSkipLoadDynamicField(skipFlag bool) *loadCollectionOption {
 | 
			
		||||
	opt.skipLoadDynamicField = skipFlag
 | 
			
		||||
	return opt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewLoadCollectionOption(collectionName string) *loadCollectionOption {
 | 
			
		||||
	return &loadCollectionOption{
 | 
			
		||||
		collectionName: collectionName,
 | 
			
		||||
| 
						 | 
				
			
			@ -65,17 +79,21 @@ type LoadPartitionsOption interface {
 | 
			
		|||
var _ LoadPartitionsOption = (*loadPartitionsOption)(nil)
 | 
			
		||||
 | 
			
		||||
type loadPartitionsOption struct {
 | 
			
		||||
	collectionName string
 | 
			
		||||
	partitionNames []string
 | 
			
		||||
	interval       time.Duration
 | 
			
		||||
	replicaNum     int
 | 
			
		||||
	collectionName       string
 | 
			
		||||
	partitionNames       []string
 | 
			
		||||
	interval             time.Duration
 | 
			
		||||
	replicaNum           int
 | 
			
		||||
	loadFields           []string
 | 
			
		||||
	skipLoadDynamicField bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (opt *loadPartitionsOption) Request() *milvuspb.LoadPartitionsRequest {
 | 
			
		||||
	return &milvuspb.LoadPartitionsRequest{
 | 
			
		||||
		CollectionName: opt.collectionName,
 | 
			
		||||
		PartitionNames: opt.partitionNames,
 | 
			
		||||
		ReplicaNumber:  int32(opt.replicaNum),
 | 
			
		||||
		CollectionName:       opt.collectionName,
 | 
			
		||||
		PartitionNames:       opt.partitionNames,
 | 
			
		||||
		ReplicaNumber:        int32(opt.replicaNum),
 | 
			
		||||
		LoadFields:           opt.loadFields,
 | 
			
		||||
		SkipLoadDynamicField: opt.skipLoadDynamicField,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -83,6 +101,21 @@ func (opt *loadPartitionsOption) CheckInterval() time.Duration {
 | 
			
		|||
	return opt.interval
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (opt *loadPartitionsOption) WithReplica(num int) *loadPartitionsOption {
 | 
			
		||||
	opt.replicaNum = num
 | 
			
		||||
	return opt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (opt *loadPartitionsOption) WithLoadFields(loadFields ...string) *loadPartitionsOption {
 | 
			
		||||
	opt.loadFields = loadFields
 | 
			
		||||
	return opt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (opt *loadPartitionsOption) WithSkipLoadDynamicField(skipFlag bool) *loadPartitionsOption {
 | 
			
		||||
	opt.skipLoadDynamicField = skipFlag
 | 
			
		||||
	return opt
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewLoadPartitionsOption(collectionName string, partitionsNames []string) *loadPartitionsOption {
 | 
			
		||||
	return &loadPartitionsOption{
 | 
			
		||||
		collectionName: collectionName,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ package client
 | 
			
		|||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"math/rand"
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,10 +42,15 @@ func (s *MaintenanceSuite) TestLoadCollection() {
 | 
			
		|||
	defer cancel()
 | 
			
		||||
	s.Run("success", func() {
 | 
			
		||||
		collectionName := fmt.Sprintf("coll_%s", s.randString(6))
 | 
			
		||||
		fieldNames := []string{"id", "part", "vector"}
 | 
			
		||||
		replicaNum := rand.Intn(3) + 1
 | 
			
		||||
 | 
			
		||||
		done := atomic.NewBool(false)
 | 
			
		||||
		s.mock.EXPECT().LoadCollection(mock.Anything, mock.Anything).RunAndReturn(func(ctx context.Context, lcr *milvuspb.LoadCollectionRequest) (*commonpb.Status, error) {
 | 
			
		||||
			s.Equal(collectionName, lcr.GetCollectionName())
 | 
			
		||||
			s.ElementsMatch(fieldNames, lcr.GetLoadFields())
 | 
			
		||||
			s.True(lcr.SkipLoadDynamicField)
 | 
			
		||||
			s.EqualValues(replicaNum, lcr.GetReplicaNumber())
 | 
			
		||||
			return merr.Success(), nil
 | 
			
		||||
		}).Once()
 | 
			
		||||
		s.mock.EXPECT().GetLoadingProgress(mock.Anything, mock.Anything).RunAndReturn(func(ctx context.Context, glpr *milvuspb.GetLoadingProgressRequest) (*milvuspb.GetLoadingProgressResponse, error) {
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +68,10 @@ func (s *MaintenanceSuite) TestLoadCollection() {
 | 
			
		|||
		})
 | 
			
		||||
		defer s.mock.EXPECT().GetLoadingProgress(mock.Anything, mock.Anything).Unset()
 | 
			
		||||
 | 
			
		||||
		task, err := s.client.LoadCollection(ctx, NewLoadCollectionOption(collectionName))
 | 
			
		||||
		task, err := s.client.LoadCollection(ctx, NewLoadCollectionOption(collectionName).
 | 
			
		||||
			WithReplica(replicaNum).
 | 
			
		||||
			WithLoadFields(fieldNames...).
 | 
			
		||||
			WithSkipLoadDynamicField(true))
 | 
			
		||||
		s.NoError(err)
 | 
			
		||||
 | 
			
		||||
		ch := make(chan struct{})
 | 
			
		||||
| 
						 | 
				
			
			@ -103,11 +112,16 @@ func (s *MaintenanceSuite) TestLoadPartitions() {
 | 
			
		|||
	s.Run("success", func() {
 | 
			
		||||
		collectionName := fmt.Sprintf("coll_%s", s.randString(6))
 | 
			
		||||
		partitionName := fmt.Sprintf("part_%s", s.randString(6))
 | 
			
		||||
		fieldNames := []string{"id", "part", "vector"}
 | 
			
		||||
		replicaNum := rand.Intn(3) + 1
 | 
			
		||||
 | 
			
		||||
		done := atomic.NewBool(false)
 | 
			
		||||
		s.mock.EXPECT().LoadPartitions(mock.Anything, mock.Anything).RunAndReturn(func(ctx context.Context, lpr *milvuspb.LoadPartitionsRequest) (*commonpb.Status, error) {
 | 
			
		||||
			s.Equal(collectionName, lpr.GetCollectionName())
 | 
			
		||||
			s.ElementsMatch([]string{partitionName}, lpr.GetPartitionNames())
 | 
			
		||||
			s.ElementsMatch(fieldNames, lpr.GetLoadFields())
 | 
			
		||||
			s.True(lpr.SkipLoadDynamicField)
 | 
			
		||||
			s.EqualValues(replicaNum, lpr.GetReplicaNumber())
 | 
			
		||||
			return merr.Success(), nil
 | 
			
		||||
		}).Once()
 | 
			
		||||
		s.mock.EXPECT().GetLoadingProgress(mock.Anything, mock.Anything).RunAndReturn(func(ctx context.Context, glpr *milvuspb.GetLoadingProgressRequest) (*milvuspb.GetLoadingProgressResponse, error) {
 | 
			
		||||
| 
						 | 
				
			
			@ -126,7 +140,10 @@ func (s *MaintenanceSuite) TestLoadPartitions() {
 | 
			
		|||
		})
 | 
			
		||||
		defer s.mock.EXPECT().GetLoadingProgress(mock.Anything, mock.Anything).Unset()
 | 
			
		||||
 | 
			
		||||
		task, err := s.client.LoadPartitions(ctx, NewLoadPartitionsOption(collectionName, []string{partitionName}))
 | 
			
		||||
		task, err := s.client.LoadPartitions(ctx, NewLoadPartitionsOption(collectionName, []string{partitionName}).
 | 
			
		||||
			WithReplica(replicaNum).
 | 
			
		||||
			WithLoadFields(fieldNames...).
 | 
			
		||||
			WithSkipLoadDynamicField(true))
 | 
			
		||||
		s.NoError(err)
 | 
			
		||||
 | 
			
		||||
		ch := make(chan struct{})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue