@@ -28,30 +28,36 @@ import (
2828
2929// TODO: These collection is dirty implementation and easy to be broken, we should drop it in the future.
3030type Collection struct {
31- TenantID string
32- DBID int64
33- CollectionID int64
34- Partitions []* Partition
35- Name string
36- DBName string
37- Description string
38- AutoID bool
39- Fields []* Field
40- StructArrayFields []* StructArrayField
41- Functions []* Function
42- VirtualChannelNames []string
43- PhysicalChannelNames []string
44- ShardsNum int32
45- StartPositions []* commonpb.KeyDataPair
46- CreateTime uint64
47- ConsistencyLevel commonpb.ConsistencyLevel
48- Aliases []string // TODO: deprecate this.
49- Properties []* commonpb.KeyValuePair
50- State pb.CollectionState
51- EnableDynamicField bool
52- UpdateTimestamp uint64
53- SchemaVersion int32
54- LastTruncateTimestamps map [string ]uint64
31+ TenantID string
32+ DBID int64
33+ CollectionID int64
34+ Partitions []* Partition
35+ Name string
36+ DBName string
37+ Description string
38+ AutoID bool
39+ Fields []* Field
40+ StructArrayFields []* StructArrayField
41+ Functions []* Function
42+ VirtualChannelNames []string
43+ PhysicalChannelNames []string
44+ ShardsNum int32
45+ StartPositions []* commonpb.KeyDataPair
46+ CreateTime uint64
47+ ConsistencyLevel commonpb.ConsistencyLevel
48+ Aliases []string // TODO: deprecate this.
49+ Properties []* commonpb.KeyValuePair
50+ State pb.CollectionState
51+ EnableDynamicField bool
52+ UpdateTimestamp uint64
53+ SchemaVersion int32
54+ ShardInfos map [string ]* ShardInfo
55+ }
56+
57+ type ShardInfo struct {
58+ PChannelName string // the pchannel name of the shard, it is the same with the physical channel name.
59+ VChannelName string // the vchannel name of the shard, it is the same with the virtual channel name.
60+ LastTruncateTimeTick uint64 // the last truncate time tick of the shard, if the shard is not truncated, the value is 0.
5561}
5662
5763func (c * Collection ) Available () bool {
@@ -60,59 +66,67 @@ func (c *Collection) Available() bool {
6066
6167func (c * Collection ) ShallowClone () * Collection {
6268 return & Collection {
63- TenantID : c .TenantID ,
64- DBID : c .DBID ,
65- CollectionID : c .CollectionID ,
66- Name : c .Name ,
67- DBName : c .DBName ,
68- Description : c .Description ,
69- AutoID : c .AutoID ,
70- Fields : c .Fields ,
71- StructArrayFields : c .StructArrayFields ,
72- Partitions : c .Partitions ,
73- VirtualChannelNames : c .VirtualChannelNames ,
74- PhysicalChannelNames : c .PhysicalChannelNames ,
75- ShardsNum : c .ShardsNum ,
76- ConsistencyLevel : c .ConsistencyLevel ,
77- CreateTime : c .CreateTime ,
78- StartPositions : c .StartPositions ,
79- Aliases : c .Aliases ,
80- Properties : c .Properties ,
81- State : c .State ,
82- EnableDynamicField : c .EnableDynamicField ,
83- Functions : c .Functions ,
84- UpdateTimestamp : c .UpdateTimestamp ,
85- SchemaVersion : c .SchemaVersion ,
86- LastTruncateTimestamps : c . LastTruncateTimestamps ,
69+ TenantID : c .TenantID ,
70+ DBID : c .DBID ,
71+ CollectionID : c .CollectionID ,
72+ Name : c .Name ,
73+ DBName : c .DBName ,
74+ Description : c .Description ,
75+ AutoID : c .AutoID ,
76+ Fields : c .Fields ,
77+ StructArrayFields : c .StructArrayFields ,
78+ Partitions : c .Partitions ,
79+ VirtualChannelNames : c .VirtualChannelNames ,
80+ PhysicalChannelNames : c .PhysicalChannelNames ,
81+ ShardsNum : c .ShardsNum ,
82+ ConsistencyLevel : c .ConsistencyLevel ,
83+ CreateTime : c .CreateTime ,
84+ StartPositions : c .StartPositions ,
85+ Aliases : c .Aliases ,
86+ Properties : c .Properties ,
87+ State : c .State ,
88+ EnableDynamicField : c .EnableDynamicField ,
89+ Functions : c .Functions ,
90+ UpdateTimestamp : c .UpdateTimestamp ,
91+ SchemaVersion : c .SchemaVersion ,
92+ ShardInfos : c . ShardInfos ,
8793 }
8894}
8995
9096func (c * Collection ) Clone () * Collection {
97+ shardInfos := make (map [string ]* ShardInfo , len (c .ShardInfos ))
98+ for channelName , shardInfo := range c .ShardInfos {
99+ shardInfos [channelName ] = & ShardInfo {
100+ VChannelName : channelName ,
101+ PChannelName : shardInfo .PChannelName ,
102+ LastTruncateTimeTick : shardInfo .LastTruncateTimeTick ,
103+ }
104+ }
91105 return & Collection {
92- TenantID : c .TenantID ,
93- DBID : c .DBID ,
94- CollectionID : c .CollectionID ,
95- Name : c .Name ,
96- DBName : c .DBName ,
97- Description : c .Description ,
98- AutoID : c .AutoID ,
99- Fields : CloneFields (c .Fields ),
100- StructArrayFields : CloneStructArrayFields (c .StructArrayFields ),
101- Partitions : ClonePartitions (c .Partitions ),
102- VirtualChannelNames : common .CloneStringList (c .VirtualChannelNames ),
103- PhysicalChannelNames : common .CloneStringList (c .PhysicalChannelNames ),
104- ShardsNum : c .ShardsNum ,
105- ConsistencyLevel : c .ConsistencyLevel ,
106- CreateTime : c .CreateTime ,
107- StartPositions : common .CloneKeyDataPairs (c .StartPositions ),
108- Aliases : common .CloneStringList (c .Aliases ),
109- Properties : common .CloneKeyValuePairs (c .Properties ),
110- State : c .State ,
111- EnableDynamicField : c .EnableDynamicField ,
112- Functions : CloneFunctions (c .Functions ),
113- UpdateTimestamp : c .UpdateTimestamp ,
114- SchemaVersion : c .SchemaVersion ,
115- LastTruncateTimestamps : common . CloneMap ( c . LastTruncateTimestamps ) ,
106+ TenantID : c .TenantID ,
107+ DBID : c .DBID ,
108+ CollectionID : c .CollectionID ,
109+ Name : c .Name ,
110+ DBName : c .DBName ,
111+ Description : c .Description ,
112+ AutoID : c .AutoID ,
113+ Fields : CloneFields (c .Fields ),
114+ StructArrayFields : CloneStructArrayFields (c .StructArrayFields ),
115+ Partitions : ClonePartitions (c .Partitions ),
116+ VirtualChannelNames : common .CloneStringList (c .VirtualChannelNames ),
117+ PhysicalChannelNames : common .CloneStringList (c .PhysicalChannelNames ),
118+ ShardsNum : c .ShardsNum ,
119+ ConsistencyLevel : c .ConsistencyLevel ,
120+ CreateTime : c .CreateTime ,
121+ StartPositions : common .CloneKeyDataPairs (c .StartPositions ),
122+ Aliases : common .CloneStringList (c .Aliases ),
123+ Properties : common .CloneKeyValuePairs (c .Properties ),
124+ State : c .State ,
125+ EnableDynamicField : c .EnableDynamicField ,
126+ Functions : CloneFunctions (c .Functions ),
127+ UpdateTimestamp : c .UpdateTimestamp ,
128+ SchemaVersion : c .SchemaVersion ,
129+ ShardInfos : shardInfos ,
116130 }
117131}
118132
@@ -179,29 +193,45 @@ func UnmarshalCollectionModel(coll *pb.CollectionInfo) *Collection {
179193 PartitionCreatedTimestamp : coll .PartitionCreatedTimestamps [idx ],
180194 }
181195 }
196+ shardInfos := make (map [string ]* ShardInfo , len (coll .VirtualChannelNames ))
197+ for idx , channelName := range coll .VirtualChannelNames {
198+ if len (coll .ShardInfos ) == 0 {
199+ shardInfos [channelName ] = & ShardInfo {
200+ VChannelName : channelName ,
201+ PChannelName : coll .PhysicalChannelNames [idx ],
202+ LastTruncateTimeTick : 0 ,
203+ }
204+ } else {
205+ shardInfos [channelName ] = & ShardInfo {
206+ VChannelName : channelName ,
207+ PChannelName : coll .PhysicalChannelNames [idx ],
208+ LastTruncateTimeTick : coll .ShardInfos [idx ].LastTruncateTimeTick ,
209+ }
210+ }
211+ }
182212
183213 return & Collection {
184- CollectionID : coll .ID ,
185- DBID : coll .DbId ,
186- Name : coll .Schema .Name ,
187- DBName : coll .Schema .DbName ,
188- Description : coll .Schema .Description ,
189- AutoID : coll .Schema .AutoID ,
190- Fields : UnmarshalFieldModels (coll .GetSchema ().GetFields ()),
191- StructArrayFields : UnmarshalStructArrayFieldModels (coll .GetSchema ().GetStructArrayFields ()),
192- Partitions : partitions ,
193- VirtualChannelNames : coll .VirtualChannelNames ,
194- PhysicalChannelNames : coll .PhysicalChannelNames ,
195- ShardsNum : coll .ShardsNum ,
196- ConsistencyLevel : coll .ConsistencyLevel ,
197- CreateTime : coll .CreateTime ,
198- StartPositions : coll .StartPositions ,
199- State : coll .State ,
200- Properties : coll .Properties ,
201- EnableDynamicField : coll .Schema .EnableDynamicField ,
202- UpdateTimestamp : coll .UpdateTimestamp ,
203- SchemaVersion : coll .Schema .Version ,
204- LastTruncateTimestamps : coll . LastTruncateTimestamps ,
214+ CollectionID : coll .ID ,
215+ DBID : coll .DbId ,
216+ Name : coll .Schema .Name ,
217+ DBName : coll .Schema .DbName ,
218+ Description : coll .Schema .Description ,
219+ AutoID : coll .Schema .AutoID ,
220+ Fields : UnmarshalFieldModels (coll .GetSchema ().GetFields ()),
221+ StructArrayFields : UnmarshalStructArrayFieldModels (coll .GetSchema ().GetStructArrayFields ()),
222+ Partitions : partitions ,
223+ VirtualChannelNames : coll .VirtualChannelNames ,
224+ PhysicalChannelNames : coll .PhysicalChannelNames ,
225+ ShardsNum : coll .ShardsNum ,
226+ ConsistencyLevel : coll .ConsistencyLevel ,
227+ CreateTime : coll .CreateTime ,
228+ StartPositions : coll .StartPositions ,
229+ State : coll .State ,
230+ Properties : coll .Properties ,
231+ EnableDynamicField : coll .Schema .EnableDynamicField ,
232+ UpdateTimestamp : coll .UpdateTimestamp ,
233+ SchemaVersion : coll .Schema .Version ,
234+ ShardInfos : shardInfos ,
205235 }
206236}
207237
@@ -265,20 +295,32 @@ func marshalCollectionModelWithConfig(coll *Collection, c *config) *pb.Collectio
265295 collSchema .StructArrayFields = structArrayFields
266296 }
267297
298+ shardInfos := make ([]* pb.CollectionShardInfo , len (coll .ShardInfos ))
299+ for idx , channelName := range coll .VirtualChannelNames {
300+ if shard , ok := coll .ShardInfos [channelName ]; ok {
301+ shardInfos [idx ] = & pb.CollectionShardInfo {
302+ LastTruncateTimeTick : shard .LastTruncateTimeTick ,
303+ }
304+ } else {
305+ shardInfos [idx ] = & pb.CollectionShardInfo {
306+ LastTruncateTimeTick : 0 ,
307+ }
308+ }
309+ }
268310 collectionPb := & pb.CollectionInfo {
269- ID : coll .CollectionID ,
270- DbId : coll .DBID ,
271- Schema : collSchema ,
272- CreateTime : coll .CreateTime ,
273- VirtualChannelNames : coll .VirtualChannelNames ,
274- PhysicalChannelNames : coll .PhysicalChannelNames ,
275- ShardsNum : coll .ShardsNum ,
276- ConsistencyLevel : coll .ConsistencyLevel ,
277- StartPositions : coll .StartPositions ,
278- State : coll .State ,
279- Properties : coll .Properties ,
280- UpdateTimestamp : coll .UpdateTimestamp ,
281- LastTruncateTimestamps : coll . LastTruncateTimestamps ,
311+ ID : coll .CollectionID ,
312+ DbId : coll .DBID ,
313+ Schema : collSchema ,
314+ CreateTime : coll .CreateTime ,
315+ VirtualChannelNames : coll .VirtualChannelNames ,
316+ PhysicalChannelNames : coll .PhysicalChannelNames ,
317+ ShardsNum : coll .ShardsNum ,
318+ ConsistencyLevel : coll .ConsistencyLevel ,
319+ StartPositions : coll .StartPositions ,
320+ State : coll .State ,
321+ Properties : coll .Properties ,
322+ UpdateTimestamp : coll .UpdateTimestamp ,
323+ ShardInfos : shardInfos ,
282324 }
283325
284326 if c .withPartitions {
0 commit comments