2021-04-19 11:30:19 +08:00
|
|
|
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
|
|
|
|
//
|
|
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
|
|
|
|
// with the License. You may obtain a copy of the License at
|
|
|
|
//
|
|
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
//
|
|
|
|
// Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
|
|
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
|
|
// or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
|
|
|
2021-04-02 13:48:25 +08:00
|
|
|
package msgstream
|
2021-01-20 17:34:50 +08:00
|
|
|
|
|
|
|
import (
|
2021-03-05 10:15:27 +08:00
|
|
|
"errors"
|
2021-06-02 19:18:33 +08:00
|
|
|
"strconv"
|
2021-03-05 10:15:27 +08:00
|
|
|
|
2021-04-22 14:45:57 +08:00
|
|
|
"github.com/milvus-io/milvus/internal/proto/commonpb"
|
|
|
|
"github.com/milvus-io/milvus/internal/proto/internalpb"
|
2021-01-20 17:34:50 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
func InsertRepackFunc(tsMsgs []TsMsg, hashKeys [][]int32) (map[int32]*MsgPack, error) {
|
|
|
|
result := make(map[int32]*MsgPack)
|
|
|
|
for i, request := range tsMsgs {
|
2021-03-10 14:45:35 +08:00
|
|
|
if request.Type() != commonpb.MsgType_Insert {
|
2021-01-20 17:34:50 +08:00
|
|
|
return nil, errors.New("msg's must be Insert")
|
|
|
|
}
|
2021-04-02 13:48:25 +08:00
|
|
|
insertRequest := request.(*InsertMsg)
|
2021-01-20 17:34:50 +08:00
|
|
|
keys := hashKeys[i]
|
|
|
|
|
|
|
|
timestampLen := len(insertRequest.Timestamps)
|
|
|
|
rowIDLen := len(insertRequest.RowIDs)
|
|
|
|
rowDataLen := len(insertRequest.RowData)
|
|
|
|
keysLen := len(keys)
|
|
|
|
|
|
|
|
if keysLen != timestampLen || keysLen != rowIDLen || keysLen != rowDataLen {
|
|
|
|
return nil, errors.New("the length of hashValue, timestamps, rowIDs, RowData are not equal")
|
|
|
|
}
|
|
|
|
for index, key := range keys {
|
|
|
|
_, ok := result[key]
|
|
|
|
if !ok {
|
|
|
|
msgPack := MsgPack{}
|
|
|
|
result[key] = &msgPack
|
|
|
|
}
|
|
|
|
|
2021-03-12 14:22:09 +08:00
|
|
|
sliceRequest := internalpb.InsertRequest{
|
2021-01-20 17:34:50 +08:00
|
|
|
Base: &commonpb.MsgBase{
|
2021-03-10 14:45:35 +08:00
|
|
|
MsgType: commonpb.MsgType_Insert,
|
2021-01-20 17:34:50 +08:00
|
|
|
MsgID: insertRequest.Base.MsgID,
|
|
|
|
Timestamp: insertRequest.Timestamps[index],
|
|
|
|
SourceID: insertRequest.Base.SourceID,
|
|
|
|
},
|
2021-02-09 17:09:26 +08:00
|
|
|
DbID: insertRequest.DbID,
|
|
|
|
CollectionID: insertRequest.CollectionID,
|
|
|
|
PartitionID: insertRequest.PartitionID,
|
2021-01-20 17:34:50 +08:00
|
|
|
CollectionName: insertRequest.CollectionName,
|
|
|
|
PartitionName: insertRequest.PartitionName,
|
|
|
|
SegmentID: insertRequest.SegmentID,
|
|
|
|
ChannelID: insertRequest.ChannelID,
|
|
|
|
Timestamps: []uint64{insertRequest.Timestamps[index]},
|
|
|
|
RowIDs: []int64{insertRequest.RowIDs[index]},
|
|
|
|
RowData: []*commonpb.Blob{insertRequest.RowData[index]},
|
|
|
|
}
|
|
|
|
|
2021-04-02 13:48:25 +08:00
|
|
|
insertMsg := &InsertMsg{
|
2021-03-25 14:41:46 +08:00
|
|
|
BaseMsg: BaseMsg{
|
|
|
|
Ctx: request.TraceCtx(),
|
|
|
|
},
|
2021-01-20 17:34:50 +08:00
|
|
|
InsertRequest: sliceRequest,
|
|
|
|
}
|
|
|
|
result[key].Msgs = append(result[key].Msgs, insertMsg)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return result, nil
|
|
|
|
}
|
|
|
|
|
2021-09-24 15:21:55 +08:00
|
|
|
//func DeleteRepackFunc(tsMsgs []TsMsg, hashKeys [][]int32) (map[int32]*MsgPack, error) {
|
|
|
|
// result := make(map[int32]*MsgPack)
|
|
|
|
// for i, request := range tsMsgs {
|
|
|
|
// if request.Type() != commonpb.MsgType_Delete {
|
|
|
|
// return nil, errors.New("msg's must be Delete")
|
|
|
|
// }
|
|
|
|
// deleteRequest := request.(*DeleteMsg)
|
|
|
|
// keys := hashKeys[i]
|
|
|
|
//
|
|
|
|
// timestampLen := len(deleteRequest.Timestamps)
|
|
|
|
// primaryKeysLen := len(deleteRequest.PrimaryKeys)
|
|
|
|
// keysLen := len(keys)
|
|
|
|
//
|
|
|
|
// if keysLen != timestampLen || keysLen != primaryKeysLen {
|
|
|
|
// return nil, errors.New("the length of hashValue, timestamps, primaryKeys are not equal")
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// for index, key := range keys {
|
|
|
|
// _, ok := result[key]
|
|
|
|
// if !ok {
|
|
|
|
// msgPack := MsgPack{}
|
|
|
|
// result[key] = &msgPack
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// sliceRequest := internalpb.DeleteRequest{
|
|
|
|
// Base: &commonpb.MsgBase{
|
|
|
|
// MsgType: commonpb.MsgType_Delete,
|
|
|
|
// MsgID: deleteRequest.Base.MsgID,
|
|
|
|
// Timestamp: deleteRequest.Timestamps[index],
|
|
|
|
// SourceID: deleteRequest.Base.SourceID,
|
|
|
|
// },
|
|
|
|
// CollectionName: deleteRequest.CollectionName,
|
|
|
|
// ChannelID: deleteRequest.ChannelID,
|
|
|
|
// Timestamps: []uint64{deleteRequest.Timestamps[index]},
|
|
|
|
// PrimaryKeys: []int64{deleteRequest.PrimaryKeys[index]},
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// deleteMsg := &DeleteMsg{
|
|
|
|
// BaseMsg: BaseMsg{
|
|
|
|
// Ctx: request.TraceCtx(),
|
|
|
|
// },
|
|
|
|
// DeleteRequest: sliceRequest,
|
|
|
|
// }
|
|
|
|
// result[key].Msgs = append(result[key].Msgs, deleteMsg)
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// return result, nil
|
|
|
|
//}
|
2021-01-20 17:34:50 +08:00
|
|
|
|
|
|
|
func DefaultRepackFunc(tsMsgs []TsMsg, hashKeys [][]int32) (map[int32]*MsgPack, error) {
|
|
|
|
result := make(map[int32]*MsgPack)
|
|
|
|
for i, request := range tsMsgs {
|
|
|
|
keys := hashKeys[i]
|
|
|
|
if len(keys) != 1 {
|
2021-06-02 19:18:33 +08:00
|
|
|
return nil, errors.New("len(msg.hashValue) must equal 1, but it is: " + strconv.Itoa(len(keys)))
|
2021-01-20 17:34:50 +08:00
|
|
|
}
|
|
|
|
key := keys[0]
|
|
|
|
_, ok := result[key]
|
|
|
|
if !ok {
|
|
|
|
msgPack := MsgPack{}
|
|
|
|
result[key] = &msgPack
|
|
|
|
}
|
|
|
|
result[key].Msgs = append(result[key].Msgs, request)
|
|
|
|
}
|
|
|
|
return result, nil
|
|
|
|
}
|