add search option to ignore ignore segment (#21994)

Signed-off-by: aoiasd <zhicheng.yue@zilliz.com>
pull/22347/head
aoiasd 2023-02-22 17:31:46 +08:00 committed by GitHub
parent 7a4dfcc72b
commit cc5d72a9f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 365 additions and 233 deletions

View File

@ -171,6 +171,7 @@ message SearchRequest {
int64 nq = 14;
int64 topk = 15;
string metricType = 16;
bool ignoreGrowing = 17; // Optional
}
message SearchResults {
@ -201,6 +202,7 @@ message RetrieveRequest {
uint64 guarantee_timestamp = 9;
uint64 timeout_timestamp = 10;
int64 limit = 11; // Optional
bool ignoreGrowing = 12;
}
message RetrieveResults {

View File

@ -1321,6 +1321,7 @@ type SearchRequest struct {
Nq int64 `protobuf:"varint,14,opt,name=nq,proto3" json:"nq,omitempty"`
Topk int64 `protobuf:"varint,15,opt,name=topk,proto3" json:"topk,omitempty"`
MetricType string `protobuf:"bytes,16,opt,name=metricType,proto3" json:"metricType,omitempty"`
IgnoreGrowing bool `protobuf:"varint,17,opt,name=ignoreGrowing,proto3" json:"ignoreGrowing,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -1463,6 +1464,13 @@ func (m *SearchRequest) GetMetricType() string {
return ""
}
func (m *SearchRequest) GetIgnoreGrowing() bool {
if m != nil {
return m.IgnoreGrowing
}
return false
}
type SearchResults struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
Status *commonpb.Status `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
@ -1603,6 +1611,7 @@ type RetrieveRequest struct {
GuaranteeTimestamp uint64 `protobuf:"varint,9,opt,name=guarantee_timestamp,json=guaranteeTimestamp,proto3" json:"guarantee_timestamp,omitempty"`
TimeoutTimestamp uint64 `protobuf:"varint,10,opt,name=timeout_timestamp,json=timeoutTimestamp,proto3" json:"timeout_timestamp,omitempty"`
Limit int64 `protobuf:"varint,11,opt,name=limit,proto3" json:"limit,omitempty"`
IgnoreGrowing bool `protobuf:"varint,12,opt,name=ignoreGrowing,proto3" json:"ignoreGrowing,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -1710,6 +1719,13 @@ func (m *RetrieveRequest) GetLimit() int64 {
return 0
}
func (m *RetrieveRequest) GetIgnoreGrowing() bool {
if m != nil {
return m.IgnoreGrowing
}
return false
}
type RetrieveResults struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
Status *commonpb.Status `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"`
@ -2655,143 +2671,144 @@ func init() {
func init() { proto.RegisterFile("internal.proto", fileDescriptor_41f4a519b878ee3b) }
var fileDescriptor_41f4a519b878ee3b = []byte{
// 2194 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x6f, 0xdb, 0xc8,
0x15, 0x5f, 0x8a, 0x92, 0x25, 0x3d, 0xc9, 0x0a, 0x3d, 0x71, 0xb2, 0x8c, 0x93, 0x6c, 0x1c, 0xf6,
0xcb, 0x4d, 0xba, 0x49, 0xea, 0xdd, 0x4d, 0x0a, 0xb4, 0xe8, 0x22, 0xb6, 0xb2, 0x81, 0x11, 0x3b,
0x75, 0xe8, 0x20, 0x40, 0x7b, 0x21, 0x46, 0xe2, 0x58, 0x9a, 0x86, 0xe4, 0x30, 0x33, 0x43, 0x3b,
0xca, 0xa9, 0x87, 0x9e, 0xba, 0x68, 0x6f, 0xbd, 0x14, 0x68, 0xcf, 0x45, 0x81, 0x02, 0xbd, 0xed,
0xb1, 0x40, 0x4f, 0x3d, 0xf5, 0xd4, 0xbf, 0xa6, 0xe8, 0xa1, 0x98, 0x19, 0x92, 0xfa, 0xb0, 0xe2,
0xd8, 0x0e, 0x76, 0x37, 0x05, 0xf6, 0xc6, 0x79, 0xef, 0xcd, 0xd7, 0xef, 0xfd, 0xde, 0xe3, 0x7b,
0x24, 0x74, 0x68, 0x22, 0x09, 0x4f, 0x70, 0x74, 0x2b, 0xe5, 0x4c, 0x32, 0x74, 0x21, 0xa6, 0xd1,
0x41, 0x26, 0xcc, 0xe8, 0x56, 0xa1, 0x5c, 0x69, 0xf7, 0x59, 0x1c, 0xb3, 0xc4, 0x88, 0x57, 0xda,
0xa2, 0x3f, 0x24, 0x31, 0x36, 0x23, 0xef, 0x32, 0x5c, 0x7a, 0x48, 0xe4, 0x53, 0x1a, 0x93, 0xa7,
0xb4, 0xff, 0x7c, 0x73, 0x88, 0x93, 0x84, 0x44, 0x3e, 0x79, 0x91, 0x11, 0x21, 0xbd, 0xab, 0x70,
0xf9, 0x21, 0x91, 0x7b, 0x12, 0x4b, 0x2a, 0x24, 0xed, 0x8b, 0x19, 0xf5, 0x05, 0x38, 0xff, 0x90,
0xc8, 0x6e, 0x38, 0x23, 0x7e, 0x06, 0x8d, 0xc7, 0x2c, 0x24, 0x5b, 0xc9, 0x3e, 0x43, 0x77, 0xa1,
0x8e, 0xc3, 0x90, 0x13, 0x21, 0x5c, 0x6b, 0xd5, 0x5a, 0x6b, 0xad, 0x5f, 0xb9, 0x35, 0x75, 0xc6,
0xfc, 0x64, 0xf7, 0x8d, 0x8d, 0x5f, 0x18, 0x23, 0x04, 0x55, 0xce, 0x22, 0xe2, 0x56, 0x56, 0xad,
0xb5, 0xa6, 0xaf, 0x9f, 0xbd, 0x5f, 0x02, 0x6c, 0x25, 0x54, 0xee, 0x62, 0x8e, 0x63, 0x81, 0x2e,
0xc2, 0x42, 0xa2, 0x76, 0xe9, 0xea, 0x85, 0x6d, 0x3f, 0x1f, 0xa1, 0x2e, 0xb4, 0x85, 0xc4, 0x5c,
0x06, 0xa9, 0xb6, 0x73, 0x2b, 0xab, 0xf6, 0x5a, 0x6b, 0xfd, 0xfa, 0xdc, 0x6d, 0x1f, 0x91, 0xd1,
0x33, 0x1c, 0x65, 0x64, 0x17, 0x53, 0xee, 0xb7, 0xf4, 0x34, 0xb3, 0xba, 0xf7, 0x73, 0x80, 0x3d,
0xc9, 0x69, 0x32, 0xd8, 0xa6, 0x42, 0xaa, 0xbd, 0x0e, 0x94, 0x9d, 0xba, 0x84, 0xbd, 0xd6, 0xf4,
0xf3, 0x11, 0xfa, 0x08, 0x16, 0x84, 0xc4, 0x32, 0x13, 0xfa, 0x9c, 0xad, 0xf5, 0xcb, 0x73, 0x77,
0xd9, 0xd3, 0x26, 0x7e, 0x6e, 0xea, 0x7d, 0x0a, 0xad, 0x02, 0xee, 0x1d, 0x31, 0x40, 0x77, 0xa0,
0xda, 0xc3, 0x82, 0x1c, 0x0b, 0xcf, 0x8e, 0x18, 0x6c, 0x60, 0x41, 0x7c, 0x6d, 0xe9, 0xfd, 0xb5,
0x02, 0xcb, 0x53, 0x6e, 0xc9, 0x81, 0x3f, 0xfd, 0x52, 0x0a, 0xe6, 0xb0, 0xb7, 0xd5, 0xd5, 0xc7,
0xb7, 0x7d, 0xfd, 0x8c, 0x3c, 0x68, 0xf7, 0x59, 0x14, 0x91, 0xbe, 0xa4, 0x2c, 0xd9, 0xea, 0xba,
0xb6, 0xd6, 0x4d, 0xc9, 0x94, 0x4d, 0x8a, 0xb9, 0xa4, 0x66, 0x28, 0xdc, 0xea, 0xaa, 0xad, 0x6c,
0x26, 0x65, 0xe8, 0xfb, 0xe0, 0x48, 0x8e, 0x0f, 0x48, 0x14, 0x48, 0x1a, 0x13, 0x21, 0x71, 0x9c,
0xba, 0xb5, 0x55, 0x6b, 0xad, 0xea, 0x9f, 0x33, 0xf2, 0xa7, 0x85, 0x18, 0xdd, 0x86, 0xf3, 0x83,
0x0c, 0x73, 0x9c, 0x48, 0x42, 0x26, 0xac, 0x17, 0xb4, 0x35, 0x2a, 0x55, 0xe3, 0x09, 0x37, 0x61,
0x49, 0x99, 0xb1, 0x4c, 0x4e, 0x98, 0xd7, 0xb5, 0xb9, 0x93, 0x2b, 0x4a, 0x63, 0xef, 0x0b, 0x0b,
0x2e, 0xcc, 0xe0, 0x25, 0x52, 0x96, 0x08, 0x72, 0x06, 0xc0, 0xce, 0xe2, 0x71, 0x74, 0x0f, 0x6a,
0xea, 0x49, 0xb8, 0xf6, 0x49, 0xb9, 0x68, 0xec, 0xbd, 0xdf, 0xd8, 0xf0, 0xfe, 0x26, 0x27, 0x58,
0x92, 0xcd, 0x12, 0xfd, 0xb3, 0x3b, 0xfb, 0x7d, 0xa8, 0x87, 0xbd, 0x20, 0xc1, 0x71, 0x11, 0x56,
0x0b, 0x61, 0xef, 0x31, 0x8e, 0x09, 0xfa, 0x2e, 0x74, 0xc6, 0xde, 0x55, 0x12, 0xed, 0xf3, 0xa6,
0x3f, 0x23, 0x45, 0xdf, 0x86, 0xc5, 0xd2, 0xc3, 0xda, 0xac, 0xaa, 0xcd, 0xa6, 0x85, 0x25, 0xa7,
0x6a, 0xc7, 0x70, 0x6a, 0x61, 0x0e, 0xa7, 0x56, 0xa1, 0x35, 0xc1, 0x1f, 0xed, 0x4d, 0xdb, 0x9f,
0x14, 0xa9, 0x30, 0x34, 0xb9, 0xcb, 0x6d, 0xac, 0x5a, 0x6b, 0x6d, 0x3f, 0x1f, 0xa1, 0x3b, 0x70,
0xfe, 0x80, 0x72, 0x99, 0xe1, 0x28, 0xcf, 0x44, 0xea, 0x1c, 0xc2, 0x6d, 0xea, 0x58, 0x9d, 0xa7,
0x42, 0xeb, 0xb0, 0x9c, 0x0e, 0x47, 0x82, 0xf6, 0x67, 0xa6, 0x80, 0x9e, 0x32, 0x57, 0xe7, 0xfd,
0xc3, 0x82, 0x0b, 0x5d, 0xce, 0xd2, 0x77, 0xc2, 0x15, 0x05, 0xc8, 0xd5, 0x63, 0x40, 0xae, 0x1d,
0x05, 0xd9, 0xfb, 0x6d, 0x05, 0x2e, 0x1a, 0x46, 0xed, 0x16, 0xc0, 0x7e, 0x09, 0xb7, 0xf8, 0x1e,
0x9c, 0x1b, 0xef, 0x6a, 0x0c, 0xe6, 0x5f, 0xe3, 0x3b, 0xd0, 0x29, 0x1d, 0x6c, 0xec, 0xbe, 0x5a,
0x4a, 0x79, 0x9f, 0x57, 0x60, 0x59, 0x39, 0xf5, 0x1b, 0x34, 0x14, 0x1a, 0x7f, 0xb2, 0x00, 0x19,
0x76, 0xdc, 0x8f, 0x28, 0x16, 0x5f, 0x27, 0x16, 0xcb, 0x50, 0xc3, 0xea, 0x0c, 0x39, 0x04, 0x66,
0xe0, 0x09, 0x70, 0x94, 0xb7, 0xbe, 0xac, 0xd3, 0x95, 0x9b, 0xda, 0x93, 0x9b, 0xfe, 0xd1, 0x82,
0xa5, 0xfb, 0x91, 0x24, 0xfc, 0x1d, 0x05, 0xe5, 0xef, 0x95, 0xc2, 0x6b, 0x5b, 0x49, 0x48, 0x5e,
0x7e, 0x9d, 0x07, 0xbc, 0x0a, 0xb0, 0x4f, 0x49, 0x14, 0x4e, 0xb2, 0xb7, 0xa9, 0x25, 0x6f, 0xc5,
0x5c, 0x17, 0xea, 0x7a, 0x91, 0x92, 0xb5, 0xc5, 0x50, 0x55, 0x7b, 0xe4, 0xa5, 0xe4, 0xb8, 0xa8,
0xf6, 0x1a, 0x27, 0xae, 0xf6, 0xf4, 0xb4, 0xbc, 0xda, 0xfb, 0x57, 0x15, 0x16, 0xb7, 0x12, 0x41,
0xb8, 0x3c, 0x3b, 0x78, 0x57, 0xa0, 0x29, 0x86, 0x98, 0xeb, 0x8b, 0xe6, 0xf0, 0x8d, 0x05, 0x93,
0xd0, 0xda, 0x6f, 0x82, 0xb6, 0x7a, 0xc2, 0xe4, 0x50, 0x3b, 0x2e, 0x39, 0x2c, 0x1c, 0x03, 0x71,
0xfd, 0xcd, 0xc9, 0xa1, 0x71, 0xf4, 0xed, 0xab, 0x2e, 0x48, 0x06, 0x31, 0x49, 0xe4, 0x56, 0xd7,
0x6d, 0x6a, 0xfd, 0x58, 0x80, 0x3e, 0x00, 0x28, 0x2b, 0x31, 0xf3, 0x1e, 0xad, 0xfa, 0x13, 0x12,
0xf5, 0xee, 0xe6, 0xec, 0x50, 0xd5, 0x8a, 0x2d, 0x5d, 0x2b, 0xe6, 0x23, 0xf4, 0x31, 0x34, 0x38,
0x3b, 0x0c, 0x42, 0x2c, 0xb1, 0xdb, 0xd6, 0xce, 0xbb, 0x34, 0x17, 0xec, 0x8d, 0x88, 0xf5, 0xfc,
0x3a, 0x67, 0x87, 0x5d, 0x2c, 0x31, 0xfa, 0x14, 0x5a, 0x9a, 0x01, 0xc2, 0x4c, 0x5c, 0xd4, 0x13,
0x3f, 0x98, 0x9e, 0x98, 0xb7, 0x39, 0x9f, 0x29, 0x3b, 0x35, 0xc9, 0x37, 0xd4, 0x14, 0x7a, 0x81,
0x4b, 0xd0, 0x48, 0xb2, 0x38, 0xe0, 0xec, 0x50, 0xb8, 0x1d, 0x5d, 0x37, 0xd6, 0x93, 0x2c, 0xf6,
0xd9, 0xa1, 0x40, 0x1b, 0x50, 0x3f, 0x20, 0x5c, 0x50, 0x96, 0xb8, 0xe7, 0x56, 0xad, 0xb5, 0xce,
0xfa, 0xda, 0xad, 0xb9, 0x6d, 0xd5, 0x2d, 0xc3, 0x18, 0xb5, 0xdc, 0x33, 0x63, 0xef, 0x17, 0x13,
0xbd, 0x7f, 0x57, 0x61, 0x71, 0x8f, 0x60, 0xde, 0x1f, 0x9e, 0x9d, 0x50, 0xcb, 0x50, 0xe3, 0xe4,
0x45, 0x59, 0x9c, 0x9b, 0x41, 0xe9, 0x5f, 0xfb, 0x18, 0xff, 0x56, 0x4f, 0x50, 0xb1, 0xd7, 0xe6,
0x54, 0xec, 0x0e, 0xd8, 0xa1, 0x88, 0x34, 0x75, 0x9a, 0xbe, 0x7a, 0x54, 0x75, 0x76, 0x1a, 0xe1,
0x3e, 0x19, 0xb2, 0x28, 0x24, 0x3c, 0x18, 0x70, 0x96, 0x99, 0x3a, 0xbb, 0xed, 0x3b, 0x13, 0x8a,
0x87, 0x4a, 0x8e, 0xee, 0x41, 0x23, 0x14, 0x51, 0x20, 0x47, 0x29, 0xd1, 0xfc, 0xe9, 0xbc, 0xe6,
0x9a, 0x5d, 0x11, 0x3d, 0x1d, 0xa5, 0xc4, 0xaf, 0x87, 0xe6, 0x01, 0xdd, 0x81, 0x65, 0x41, 0x38,
0xc5, 0x11, 0x7d, 0x45, 0xc2, 0x80, 0xbc, 0x4c, 0x79, 0x90, 0x46, 0x38, 0xd1, 0x24, 0x6b, 0xfb,
0x68, 0xac, 0x7b, 0xf0, 0x32, 0xe5, 0xbb, 0x11, 0x4e, 0xd0, 0x1a, 0x38, 0x2c, 0x93, 0x69, 0x26,
0x83, 0x9c, 0x06, 0x34, 0xd4, 0x9c, 0xb3, 0xfd, 0x8e, 0x91, 0x6b, 0xaf, 0x8b, 0xad, 0x70, 0x6e,
0x17, 0xd2, 0x3a, 0x55, 0x17, 0xd2, 0x3e, 0x5d, 0x17, 0xb2, 0x38, 0xbf, 0x0b, 0x41, 0x1d, 0xa8,
0x24, 0x2f, 0x34, 0xd7, 0x6c, 0xbf, 0x92, 0xbc, 0x50, 0x8e, 0x94, 0x2c, 0x7d, 0xae, 0x39, 0x66,
0xfb, 0xfa, 0x59, 0x05, 0x51, 0x4c, 0x24, 0xa7, 0x7d, 0x05, 0x8b, 0xeb, 0x68, 0x3f, 0x4c, 0x48,
0xbc, 0xff, 0xda, 0x63, 0x5a, 0x89, 0x2c, 0x92, 0xe2, 0xab, 0xea, 0x60, 0x4a, 0x2e, 0xda, 0x93,
0x5c, 0xbc, 0x06, 0x2d, 0x73, 0x38, 0xe3, 0xf3, 0xea, 0xec, 0x79, 0x95, 0x81, 0x8a, 0xb2, 0x17,
0x19, 0xe1, 0x94, 0x88, 0x3c, 0xed, 0x43, 0x92, 0xc5, 0x4f, 0x8c, 0x04, 0x9d, 0x87, 0x9a, 0x64,
0x69, 0xf0, 0xbc, 0x48, 0x57, 0x92, 0xa5, 0x8f, 0xd0, 0x4f, 0x60, 0x45, 0x10, 0x1c, 0x91, 0x30,
0x28, 0xd3, 0x8b, 0x08, 0x84, 0xbe, 0x36, 0x09, 0xdd, 0xba, 0x76, 0xb3, 0x6b, 0x2c, 0xf6, 0x4a,
0x83, 0xbd, 0x5c, 0xaf, 0xbc, 0xd8, 0x37, 0x65, 0xfb, 0xd4, 0xb4, 0x86, 0xae, 0xec, 0xd1, 0x58,
0x55, 0x4e, 0xf8, 0x11, 0xb8, 0x83, 0x88, 0xf5, 0x70, 0x14, 0x1c, 0xd9, 0x55, 0xb7, 0x10, 0xb6,
0x7f, 0xd1, 0xe8, 0xf7, 0x66, 0xb6, 0x54, 0xd7, 0x13, 0x11, 0xed, 0x93, 0x30, 0xe8, 0x45, 0xac,
0xe7, 0x82, 0xa6, 0x2b, 0x18, 0x91, 0xca, 0x57, 0x8a, 0xa6, 0xb9, 0x81, 0x82, 0xa1, 0xcf, 0xb2,
0x44, 0x6a, 0xf2, 0xd9, 0x7e, 0xc7, 0xc8, 0x1f, 0x67, 0xf1, 0xa6, 0x92, 0xa2, 0x6f, 0xc1, 0x62,
0x6e, 0xc9, 0xf6, 0xf7, 0x05, 0x91, 0x9a, 0x75, 0xb6, 0xdf, 0x36, 0xc2, 0x9f, 0x69, 0x99, 0xf7,
0x37, 0x1b, 0xce, 0xf9, 0x0a, 0x5d, 0x72, 0x40, 0xfe, 0x9f, 0xf2, 0xca, 0xeb, 0xe2, 0x7b, 0xe1,
0x54, 0xf1, 0x5d, 0x3f, 0x71, 0x7c, 0x37, 0x4e, 0x15, 0xdf, 0xcd, 0xd3, 0xc5, 0x37, 0xbc, 0x26,
0xbe, 0x97, 0xa1, 0x16, 0xd1, 0x98, 0x16, 0x0e, 0x36, 0x03, 0xef, 0xcf, 0x53, 0x2e, 0x7b, 0x07,
0x62, 0xf6, 0x06, 0xd8, 0x34, 0x34, 0x05, 0x64, 0x6b, 0xdd, 0x9d, 0xfb, 0xc6, 0xdc, 0xea, 0x0a,
0x5f, 0x19, 0xcd, 0xbe, 0x65, 0x6b, 0xa7, 0x7e, 0xcb, 0xfe, 0x14, 0x2e, 0x1f, 0x8d, 0x64, 0x9e,
0xc3, 0x11, 0xba, 0x0b, 0xda, 0xa3, 0x97, 0x66, 0x43, 0xb9, 0xc0, 0x2b, 0x44, 0x3f, 0x84, 0xe5,
0x89, 0x58, 0x1e, 0x4f, 0xac, 0x9b, 0xce, 0x7e, 0xac, 0x1b, 0x4f, 0x39, 0x2e, 0x9a, 0x1b, 0xc7,
0x45, 0xb3, 0xf7, 0x4f, 0x1b, 0x16, 0xbb, 0x24, 0x22, 0x92, 0x7c, 0x53, 0x04, 0xbe, 0xb6, 0x08,
0xfc, 0x01, 0x20, 0x9a, 0xc8, 0xbb, 0x1f, 0x07, 0x29, 0xa7, 0x31, 0xe6, 0xa3, 0xe0, 0x39, 0x19,
0x15, 0x69, 0xd2, 0xd1, 0x9a, 0x5d, 0xa3, 0x78, 0x44, 0x46, 0xe2, 0x8d, 0x45, 0xe1, 0x64, 0x15,
0x66, 0xc2, 0xa6, 0xac, 0xc2, 0x7e, 0x0c, 0xed, 0xa9, 0x2d, 0xda, 0x6f, 0x20, 0x6c, 0x2b, 0x1d,
0xef, 0xeb, 0xfd, 0xc7, 0x82, 0xe6, 0x36, 0xc3, 0xa1, 0xee, 0x87, 0xce, 0xe8, 0xc6, 0xb2, 0xd4,
0xad, 0xcc, 0x96, 0xba, 0x57, 0x60, 0xdc, 0xd2, 0xe4, 0x8e, 0x9c, 0xe8, 0x71, 0x26, 0x7a, 0x95,
0xea, 0x74, 0xaf, 0x72, 0x0d, 0x5a, 0x54, 0x1d, 0x28, 0x48, 0xb1, 0x1c, 0x9a, 0x4c, 0xd9, 0xf4,
0x41, 0x8b, 0x76, 0x95, 0x44, 0x35, 0x33, 0x85, 0x81, 0x6e, 0x66, 0x16, 0x4e, 0xdc, 0xcc, 0xe4,
0x8b, 0xe8, 0x66, 0xe6, 0xd7, 0x16, 0x80, 0xbe, 0xb8, 0xca, 0x07, 0x47, 0x17, 0xb5, 0xce, 0xb2,
0xa8, 0x4a, 0xe1, 0xda, 0x53, 0x24, 0xc2, 0x72, 0x1c, 0x54, 0x22, 0x07, 0x07, 0x29, 0xaf, 0x19,
0x55, 0x1e, 0x50, 0xc2, 0xfb, 0x9d, 0x05, 0xa0, 0xb3, 0x82, 0x39, 0xc6, 0x2c, 0xfd, 0xac, 0xe3,
0xdb, 0xbc, 0xca, 0x34, 0x74, 0x1b, 0x05, 0x74, 0xc7, 0x7c, 0x47, 0x9d, 0xa8, 0xcb, 0x8b, 0xcb,
0xe7, 0xe8, 0xea, 0x67, 0xef, 0xf7, 0x16, 0xb4, 0xf3, 0xd3, 0x99, 0x23, 0x4d, 0x79, 0xd9, 0x9a,
0xf5, 0xb2, 0x2e, 0x6e, 0x62, 0xc6, 0x47, 0x81, 0xa0, 0xaf, 0x48, 0x7e, 0x20, 0x30, 0xa2, 0x3d,
0xfa, 0x8a, 0x4c, 0x91, 0xd7, 0x9e, 0x26, 0xef, 0x4d, 0x58, 0xe2, 0xa4, 0x4f, 0x12, 0x19, 0x8d,
0x82, 0x98, 0x85, 0x74, 0x9f, 0x92, 0x50, 0xb3, 0xa1, 0xe1, 0x3b, 0x85, 0x62, 0x27, 0x97, 0x7b,
0xbf, 0xb2, 0xa0, 0xb5, 0x23, 0x06, 0xbb, 0x4c, 0xe8, 0x20, 0x43, 0xd7, 0xa1, 0x9d, 0x27, 0x36,
0x13, 0xe1, 0x96, 0x66, 0x58, 0xab, 0x3f, 0xfe, 0x16, 0xa9, 0x52, 0x7b, 0x2c, 0x06, 0x39, 0x4c,
0x6d, 0xdf, 0x0c, 0xd0, 0x0a, 0x34, 0x62, 0x31, 0xd0, 0xb5, 0x78, 0x4e, 0xcb, 0x72, 0xac, 0xee,
0x3a, 0x7e, 0x85, 0x55, 0xf5, 0x2b, 0x6c, 0x2c, 0xf0, 0xbe, 0xb0, 0x00, 0xe5, 0xdf, 0x3a, 0xdf,
0xea, 0xd7, 0x84, 0xf6, 0xf2, 0xe4, 0xf7, 0xd4, 0x8a, 0xe6, 0xf8, 0x94, 0x6c, 0x26, 0x29, 0xd8,
0x47, 0x92, 0xc2, 0x4d, 0x58, 0x0a, 0xc9, 0x3e, 0xce, 0xa2, 0xc9, 0xb7, 0xae, 0x39, 0xb2, 0x93,
0x2b, 0xa6, 0xbe, 0xed, 0x77, 0x36, 0x39, 0x09, 0x49, 0x22, 0x29, 0x8e, 0xf4, 0x2f, 0xa7, 0x15,
0x68, 0x64, 0x42, 0x31, 0xa1, 0xc4, 0xae, 0x1c, 0xa3, 0x0f, 0x01, 0x91, 0xa4, 0xcf, 0x47, 0xa9,
0x22, 0x71, 0x8a, 0x85, 0x38, 0x64, 0x3c, 0xcc, 0x13, 0xf5, 0x52, 0xa9, 0xd9, 0xcd, 0x15, 0xaa,
0x69, 0x95, 0x24, 0xc1, 0x89, 0x2c, 0xf2, 0xb5, 0x19, 0x29, 0xd7, 0x53, 0x11, 0x88, 0x2c, 0x25,
0x3c, 0x77, 0x6b, 0x9d, 0x8a, 0x3d, 0x35, 0x54, 0xa9, 0x5c, 0x0c, 0xf1, 0xfa, 0x27, 0x77, 0xc7,
0xcb, 0x9b, 0x14, 0xdd, 0x31, 0xe2, 0x62, 0x6d, 0xef, 0x01, 0x2c, 0x6d, 0x53, 0x21, 0x77, 0x59,
0x44, 0xfb, 0xa3, 0x33, 0xbf, 0x71, 0xbc, 0xcf, 0x2d, 0x40, 0x93, 0xeb, 0xe4, 0x7f, 0x36, 0xc6,
0x15, 0x83, 0x75, 0xf2, 0x8a, 0xe1, 0x3a, 0xb4, 0x53, 0xbd, 0x4c, 0x40, 0x93, 0x7d, 0x56, 0x78,
0xaf, 0x65, 0x64, 0x0a, 0x5b, 0x81, 0xae, 0x02, 0x28, 0x30, 0x03, 0xce, 0x22, 0x62, 0x9c, 0xd7,
0xf4, 0x9b, 0x4a, 0xe2, 0x2b, 0x81, 0x37, 0x80, 0x4b, 0x7b, 0x43, 0x76, 0xb8, 0xc9, 0x92, 0x7d,
0x3a, 0xc8, 0x38, 0x56, 0x84, 0x7e, 0x8b, 0x2f, 0x66, 0x2e, 0xd4, 0x53, 0x2c, 0x55, 0x58, 0xe7,
0x3e, 0x2a, 0x86, 0xde, 0x1f, 0x2c, 0x58, 0x99, 0xb7, 0xd3, 0xdb, 0x5c, 0xff, 0x21, 0x2c, 0xf6,
0xcd, 0x72, 0x66, 0xb5, 0x93, 0xff, 0x3a, 0x9c, 0x9e, 0xe7, 0x3d, 0x80, 0xaa, 0x8f, 0x25, 0x41,
0xb7, 0xa1, 0xc2, 0xa5, 0x3e, 0x41, 0x67, 0xfd, 0xda, 0x6b, 0x92, 0x95, 0x32, 0xd4, 0xdd, 0x70,
0x85, 0x4b, 0xd4, 0x06, 0x8b, 0xeb, 0x9b, 0x5a, 0xbe, 0xc5, 0x6f, 0xac, 0xc3, 0xd2, 0x91, 0x4f,
0x0c, 0xa8, 0x0d, 0x0d, 0x9f, 0x1d, 0x2a, 0x8c, 0x42, 0xe7, 0x3d, 0x74, 0x0e, 0x5a, 0x9b, 0x2c,
0xca, 0xe2, 0xc4, 0x08, 0xac, 0x1b, 0x7f, 0xb1, 0xa0, 0x51, 0x2c, 0x89, 0x96, 0x60, 0xb1, 0xdb,
0xdd, 0x1e, 0xff, 0xaf, 0x70, 0xde, 0x43, 0x0e, 0xb4, 0xbb, 0xdd, 0xed, 0xf2, 0x6b, 0xb7, 0x63,
0xa9, 0x05, 0xbb, 0xdd, 0x6d, 0x9d, 0x33, 0x9d, 0x4a, 0x3e, 0xfa, 0x2c, 0xca, 0xc4, 0xd0, 0xb1,
0xcb, 0x05, 0xe2, 0x14, 0x9b, 0x05, 0xaa, 0x68, 0x11, 0x9a, 0xdd, 0x9d, 0x6d, 0x73, 0x2e, 0xa7,
0x96, 0x0f, 0x4d, 0xd9, 0xe4, 0x2c, 0xa8, 0xf3, 0x74, 0x77, 0xb6, 0x37, 0xb2, 0xe8, 0xb9, 0x7a,
0xfd, 0x3a, 0x75, 0xad, 0x7f, 0xb2, 0x6d, 0x7a, 0x2d, 0xa7, 0xa1, 0x97, 0x7f, 0xb2, 0xad, 0xba,
0xbf, 0x91, 0xd3, 0xdc, 0xb8, 0xf7, 0x8b, 0x4f, 0x06, 0x54, 0x0e, 0xb3, 0x9e, 0x02, 0xf5, 0xb6,
0xc1, 0xe7, 0x43, 0xca, 0xf2, 0xa7, 0xdb, 0x05, 0x46, 0xb7, 0x35, 0x64, 0xe5, 0x30, 0xed, 0xf5,
0x16, 0xb4, 0xe4, 0xa3, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xad, 0xe9, 0xa6, 0xf9, 0x00, 0x1f,
0x00, 0x00,
// 2220 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x6f, 0xdc, 0xb8,
0x15, 0x5f, 0x8d, 0xe6, 0xf3, 0xcd, 0x78, 0x32, 0x66, 0x9c, 0xac, 0xe2, 0x24, 0x1b, 0x47, 0xfd,
0x72, 0x93, 0x6e, 0x92, 0x7a, 0x77, 0x93, 0x02, 0x2d, 0xba, 0x88, 0x3d, 0x59, 0xc3, 0x88, 0x9d,
0x3a, 0x72, 0x10, 0xa0, 0xbd, 0x08, 0x9c, 0x11, 0x3d, 0xc3, 0x46, 0x12, 0x15, 0x92, 0xb2, 0x33,
0x39, 0xf5, 0xd0, 0x53, 0x17, 0xed, 0xad, 0x97, 0x02, 0xed, 0xb9, 0x28, 0xd0, 0xf3, 0x1e, 0x0b,
0xf4, 0xd4, 0x53, 0x8f, 0xfd, 0x63, 0x16, 0x3d, 0x14, 0x24, 0x25, 0xcd, 0x87, 0xc7, 0x8e, 0xed,
0x60, 0x77, 0x53, 0x60, 0x6f, 0xe2, 0x7b, 0x8f, 0x4f, 0xe4, 0xef, 0xfd, 0xf8, 0xf8, 0x9e, 0x04,
0x6d, 0x1a, 0x4b, 0xc2, 0x63, 0x1c, 0xde, 0x49, 0x38, 0x93, 0x0c, 0x5d, 0x8a, 0x68, 0x78, 0x90,
0x0a, 0x33, 0xba, 0x93, 0x2b, 0x97, 0x5b, 0x7d, 0x16, 0x45, 0x2c, 0x36, 0xe2, 0xe5, 0x96, 0xe8,
0x0f, 0x49, 0x84, 0xcd, 0xc8, 0xbd, 0x0a, 0x57, 0x36, 0x89, 0x7c, 0x46, 0x23, 0xf2, 0x8c, 0xf6,
0x5f, 0x6c, 0x0c, 0x71, 0x1c, 0x93, 0xd0, 0x23, 0x2f, 0x53, 0x22, 0xa4, 0x7b, 0x1d, 0xae, 0x6e,
0x12, 0xb9, 0x27, 0xb1, 0xa4, 0x42, 0xd2, 0xbe, 0x98, 0x51, 0x5f, 0x82, 0x8b, 0x9b, 0x44, 0x76,
0x83, 0x19, 0xf1, 0x73, 0xa8, 0x3f, 0x61, 0x01, 0xd9, 0x8a, 0xf7, 0x19, 0xba, 0x0f, 0x35, 0x1c,
0x04, 0x9c, 0x08, 0xe1, 0x58, 0x2b, 0xd6, 0x6a, 0x73, 0xed, 0xda, 0x9d, 0xa9, 0x35, 0x66, 0x2b,
0x7b, 0x68, 0x6c, 0xbc, 0xdc, 0x18, 0x21, 0x28, 0x73, 0x16, 0x12, 0xa7, 0xb4, 0x62, 0xad, 0x36,
0x3c, 0xfd, 0xec, 0xfe, 0x1a, 0x60, 0x2b, 0xa6, 0x72, 0x17, 0x73, 0x1c, 0x09, 0x74, 0x19, 0xaa,
0xb1, 0x7a, 0x4b, 0x57, 0x3b, 0xb6, 0xbd, 0x6c, 0x84, 0xba, 0xd0, 0x12, 0x12, 0x73, 0xe9, 0x27,
0xda, 0xce, 0x29, 0xad, 0xd8, 0xab, 0xcd, 0xb5, 0x9b, 0x73, 0x5f, 0xfb, 0x98, 0x8c, 0x9e, 0xe3,
0x30, 0x25, 0xbb, 0x98, 0x72, 0xaf, 0xa9, 0xa7, 0x19, 0xef, 0xee, 0x2f, 0x01, 0xf6, 0x24, 0xa7,
0xf1, 0x60, 0x9b, 0x0a, 0xa9, 0xde, 0x75, 0xa0, 0xec, 0xd4, 0x26, 0xec, 0xd5, 0x86, 0x97, 0x8d,
0xd0, 0x47, 0x50, 0x15, 0x12, 0xcb, 0x54, 0xe8, 0x75, 0x36, 0xd7, 0xae, 0xce, 0x7d, 0xcb, 0x9e,
0x36, 0xf1, 0x32, 0x53, 0xf7, 0x53, 0x68, 0xe6, 0x70, 0xef, 0x88, 0x01, 0xba, 0x07, 0xe5, 0x1e,
0x16, 0xe4, 0x44, 0x78, 0x76, 0xc4, 0x60, 0x1d, 0x0b, 0xe2, 0x69, 0x4b, 0xf7, 0xef, 0x25, 0x58,
0x9a, 0x0a, 0x4b, 0x06, 0xfc, 0xd9, 0x5d, 0x29, 0x98, 0x83, 0xde, 0x56, 0x57, 0x2f, 0xdf, 0xf6,
0xf4, 0x33, 0x72, 0xa1, 0xd5, 0x67, 0x61, 0x48, 0xfa, 0x92, 0xb2, 0x78, 0xab, 0xeb, 0xd8, 0x5a,
0x37, 0x25, 0x53, 0x36, 0x09, 0xe6, 0x92, 0x9a, 0xa1, 0x70, 0xca, 0x2b, 0xb6, 0xb2, 0x99, 0x94,
0xa1, 0x1f, 0x42, 0x47, 0x72, 0x7c, 0x40, 0x42, 0x5f, 0xd2, 0x88, 0x08, 0x89, 0xa3, 0xc4, 0xa9,
0xac, 0x58, 0xab, 0x65, 0xef, 0x82, 0x91, 0x3f, 0xcb, 0xc5, 0xe8, 0x2e, 0x5c, 0x1c, 0xa4, 0x98,
0xe3, 0x58, 0x12, 0x32, 0x61, 0x5d, 0xd5, 0xd6, 0xa8, 0x50, 0x8d, 0x27, 0xdc, 0x86, 0x45, 0x65,
0xc6, 0x52, 0x39, 0x61, 0x5e, 0xd3, 0xe6, 0x9d, 0x4c, 0x51, 0x18, 0xbb, 0x5f, 0x58, 0x70, 0x69,
0x06, 0x2f, 0x91, 0xb0, 0x58, 0x90, 0x73, 0x00, 0x76, 0x9e, 0x88, 0xa3, 0x07, 0x50, 0x51, 0x4f,
0xc2, 0xb1, 0x4f, 0xcb, 0x45, 0x63, 0xef, 0xfe, 0xce, 0x86, 0xf7, 0x37, 0x38, 0xc1, 0x92, 0x6c,
0x14, 0xe8, 0x9f, 0x3f, 0xd8, 0xef, 0x43, 0x2d, 0xe8, 0xf9, 0x31, 0x8e, 0xf2, 0x63, 0x55, 0x0d,
0x7a, 0x4f, 0x70, 0x44, 0xd0, 0xf7, 0xa1, 0x3d, 0x8e, 0xae, 0x92, 0xe8, 0x98, 0x37, 0xbc, 0x19,
0x29, 0xfa, 0x2e, 0x2c, 0x14, 0x11, 0xd6, 0x66, 0x65, 0x6d, 0x36, 0x2d, 0x2c, 0x38, 0x55, 0x39,
0x81, 0x53, 0xd5, 0x39, 0x9c, 0x5a, 0x81, 0xe6, 0x04, 0x7f, 0x74, 0x34, 0x6d, 0x6f, 0x52, 0xa4,
0x8e, 0xa1, 0xc9, 0x5d, 0x4e, 0x7d, 0xc5, 0x5a, 0x6d, 0x79, 0xd9, 0x08, 0xdd, 0x83, 0x8b, 0x07,
0x94, 0xcb, 0x14, 0x87, 0x59, 0x26, 0x52, 0xeb, 0x10, 0x4e, 0x43, 0x9f, 0xd5, 0x79, 0x2a, 0xb4,
0x06, 0x4b, 0xc9, 0x70, 0x24, 0x68, 0x7f, 0x66, 0x0a, 0xe8, 0x29, 0x73, 0x75, 0xee, 0x3f, 0x2d,
0xb8, 0xd4, 0xe5, 0x2c, 0x79, 0x27, 0x42, 0x91, 0x83, 0x5c, 0x3e, 0x01, 0xe4, 0xca, 0x51, 0x90,
0xdd, 0xdf, 0x97, 0xe0, 0xb2, 0x61, 0xd4, 0x6e, 0x0e, 0xec, 0x57, 0xb0, 0x8b, 0x1f, 0xc0, 0x85,
0xf1, 0x5b, 0x8d, 0xc1, 0xfc, 0x6d, 0x7c, 0x0f, 0xda, 0x45, 0x80, 0x8d, 0xdd, 0xd7, 0x4b, 0x29,
0xf7, 0xf3, 0x12, 0x2c, 0xa9, 0xa0, 0x7e, 0x8b, 0x86, 0x42, 0xe3, 0x2f, 0x16, 0x20, 0xc3, 0x8e,
0x87, 0x21, 0xc5, 0xe2, 0x9b, 0xc4, 0x62, 0x09, 0x2a, 0x58, 0xad, 0x21, 0x83, 0xc0, 0x0c, 0x5c,
0x01, 0x1d, 0x15, 0xad, 0xaf, 0x6a, 0x75, 0xc5, 0x4b, 0xed, 0xc9, 0x97, 0xfe, 0xd9, 0x82, 0xc5,
0x87, 0xa1, 0x24, 0xfc, 0x1d, 0x05, 0xe5, 0x1f, 0xa5, 0x3c, 0x6a, 0x5b, 0x71, 0x40, 0x5e, 0x7d,
0x93, 0x0b, 0xbc, 0x0e, 0xb0, 0x4f, 0x49, 0x18, 0x4c, 0xb2, 0xb7, 0xa1, 0x25, 0x6f, 0xc5, 0x5c,
0x07, 0x6a, 0xda, 0x49, 0xc1, 0xda, 0x7c, 0xa8, 0xaa, 0x3d, 0xf2, 0x4a, 0x72, 0x9c, 0x57, 0x7b,
0xf5, 0x53, 0x57, 0x7b, 0x7a, 0x5a, 0x56, 0xed, 0xfd, 0xbb, 0x0c, 0x0b, 0x5b, 0xb1, 0x20, 0x5c,
0x9e, 0x1f, 0xbc, 0x6b, 0xd0, 0x10, 0x43, 0xcc, 0xf5, 0x46, 0x33, 0xf8, 0xc6, 0x82, 0x49, 0x68,
0xed, 0x37, 0x41, 0x5b, 0x3e, 0x65, 0x72, 0xa8, 0x9c, 0x94, 0x1c, 0xaa, 0x27, 0x40, 0x5c, 0x7b,
0x73, 0x72, 0xa8, 0x1f, 0xbd, 0x7d, 0xd5, 0x06, 0xc9, 0x20, 0x22, 0xb1, 0xdc, 0xea, 0x3a, 0x0d,
0xad, 0x1f, 0x0b, 0xd0, 0x07, 0x00, 0x45, 0x25, 0x66, 0xee, 0xd1, 0xb2, 0x37, 0x21, 0x51, 0x77,
0x37, 0x67, 0x87, 0xaa, 0x56, 0x6c, 0xea, 0x5a, 0x31, 0x1b, 0xa1, 0x8f, 0xa1, 0xce, 0xd9, 0xa1,
0x1f, 0x60, 0x89, 0x9d, 0x96, 0x0e, 0xde, 0x95, 0xb9, 0x60, 0xaf, 0x87, 0xac, 0xe7, 0xd5, 0x38,
0x3b, 0xec, 0x62, 0x89, 0xd1, 0xa7, 0xd0, 0xd4, 0x0c, 0x10, 0x66, 0xe2, 0x82, 0x9e, 0xf8, 0xc1,
0xf4, 0xc4, 0xac, 0xcd, 0xf9, 0x4c, 0xd9, 0xa9, 0x49, 0x9e, 0xa1, 0xa6, 0xd0, 0x0e, 0xae, 0x40,
0x3d, 0x4e, 0x23, 0x9f, 0xb3, 0x43, 0xe1, 0xb4, 0x75, 0xdd, 0x58, 0x8b, 0xd3, 0xc8, 0x63, 0x87,
0x02, 0xad, 0x43, 0xed, 0x80, 0x70, 0x41, 0x59, 0xec, 0x5c, 0x58, 0xb1, 0x56, 0xdb, 0x6b, 0xab,
0x77, 0xe6, 0xb6, 0x55, 0x77, 0x0c, 0x63, 0x94, 0xbb, 0xe7, 0xc6, 0xde, 0xcb, 0x27, 0xba, 0x5f,
0x96, 0x61, 0x61, 0x8f, 0x60, 0xde, 0x1f, 0x9e, 0x9f, 0x50, 0x4b, 0x50, 0xe1, 0xe4, 0x65, 0x51,
0x9c, 0x9b, 0x41, 0x11, 0x5f, 0xfb, 0x84, 0xf8, 0x96, 0x4f, 0x51, 0xb1, 0x57, 0xe6, 0x54, 0xec,
0x1d, 0xb0, 0x03, 0x11, 0x6a, 0xea, 0x34, 0x3c, 0xf5, 0xa8, 0xea, 0xec, 0x24, 0xc4, 0x7d, 0x32,
0x64, 0x61, 0x40, 0xb8, 0x3f, 0xe0, 0x2c, 0x35, 0x75, 0x76, 0xcb, 0xeb, 0x4c, 0x28, 0x36, 0x95,
0x1c, 0x3d, 0x80, 0x7a, 0x20, 0x42, 0x5f, 0x8e, 0x12, 0xa2, 0xf9, 0xd3, 0x3e, 0x66, 0x9b, 0x5d,
0x11, 0x3e, 0x1b, 0x25, 0xc4, 0xab, 0x05, 0xe6, 0x01, 0xdd, 0x83, 0x25, 0x41, 0x38, 0xc5, 0x21,
0x7d, 0x4d, 0x02, 0x9f, 0xbc, 0x4a, 0xb8, 0x9f, 0x84, 0x38, 0xd6, 0x24, 0x6b, 0x79, 0x68, 0xac,
0x7b, 0xf4, 0x2a, 0xe1, 0xbb, 0x21, 0x8e, 0xd1, 0x2a, 0x74, 0x58, 0x2a, 0x93, 0x54, 0xfa, 0x19,
0x0d, 0x68, 0xa0, 0x39, 0x67, 0x7b, 0x6d, 0x23, 0xd7, 0x51, 0x17, 0x5b, 0xc1, 0xdc, 0x2e, 0xa4,
0x79, 0xa6, 0x2e, 0xa4, 0x75, 0xb6, 0x2e, 0x64, 0x61, 0x7e, 0x17, 0x82, 0xda, 0x50, 0x8a, 0x5f,
0x6a, 0xae, 0xd9, 0x5e, 0x29, 0x7e, 0xa9, 0x02, 0x29, 0x59, 0xf2, 0x42, 0x73, 0xcc, 0xf6, 0xf4,
0xb3, 0x3a, 0x44, 0x11, 0x91, 0x9c, 0xf6, 0x15, 0x2c, 0x4e, 0x47, 0xc7, 0x61, 0x42, 0xa2, 0x0a,
0x70, 0x3a, 0x88, 0x19, 0x27, 0x9b, 0x9c, 0x1d, 0xd2, 0x78, 0xe0, 0x2c, 0xae, 0x58, 0xab, 0x75,
0x6f, 0x5a, 0xe8, 0xfe, 0xd7, 0x1e, 0x93, 0x4f, 0xa4, 0xa1, 0x14, 0x5f, 0x57, 0x9f, 0x53, 0x30,
0xd6, 0x9e, 0x64, 0xec, 0x0d, 0x68, 0x9a, 0x2d, 0x18, 0x66, 0x94, 0x8f, 0xec, 0xea, 0x06, 0x34,
0xd5, 0x59, 0x7c, 0x99, 0x12, 0x4e, 0x89, 0xc8, 0x2e, 0x07, 0x88, 0xd3, 0xe8, 0xa9, 0x91, 0xa0,
0x8b, 0x50, 0x91, 0x2c, 0xf1, 0x5f, 0xe4, 0x49, 0x4d, 0xb2, 0xe4, 0x31, 0xfa, 0x19, 0x2c, 0x0b,
0x82, 0x43, 0x12, 0xf8, 0x45, 0x12, 0x12, 0xbe, 0xd0, 0xdb, 0x26, 0x81, 0x53, 0xd3, 0x64, 0x70,
0x8c, 0xc5, 0x5e, 0x61, 0xb0, 0x97, 0xe9, 0x55, 0xac, 0xfb, 0xa6, 0xb8, 0x9f, 0x9a, 0x56, 0xd7,
0xf5, 0x3f, 0x1a, 0xab, 0x8a, 0x09, 0x3f, 0x01, 0x67, 0x10, 0xb2, 0x1e, 0x0e, 0xfd, 0x23, 0x6f,
0xd5, 0x8d, 0x86, 0xed, 0x5d, 0x36, 0xfa, 0xbd, 0x99, 0x57, 0xaa, 0xed, 0x89, 0x90, 0xf6, 0x49,
0xe0, 0xf7, 0x42, 0xd6, 0x73, 0x40, 0x93, 0x1a, 0x8c, 0x48, 0x65, 0x35, 0x45, 0xe6, 0xcc, 0x40,
0xc1, 0xd0, 0x67, 0x69, 0x2c, 0x35, 0x45, 0x6d, 0xaf, 0x6d, 0xe4, 0x4f, 0xd2, 0x68, 0x43, 0x49,
0xd1, 0x77, 0x60, 0x21, 0xb3, 0x64, 0xfb, 0xfb, 0x82, 0x48, 0xcd, 0x4d, 0xdb, 0x6b, 0x19, 0xe1,
0x2f, 0xb4, 0xcc, 0xfd, 0x8f, 0x0d, 0x17, 0x3c, 0x85, 0x2e, 0x39, 0x20, 0xff, 0x4f, 0xd9, 0xe7,
0xb8, 0x2c, 0x50, 0x3d, 0x53, 0x16, 0xa8, 0x9d, 0x3a, 0x0b, 0xd4, 0xcf, 0x94, 0x05, 0x1a, 0x67,
0xcb, 0x02, 0x70, 0x4c, 0x16, 0x58, 0x82, 0x4a, 0x48, 0x23, 0x9a, 0x07, 0xd8, 0x0c, 0x8e, 0x9e,
0xeb, 0xd6, 0xbc, 0x73, 0xfd, 0xd7, 0xa9, 0xc0, 0xbe, 0x03, 0x27, 0xfb, 0x16, 0xd8, 0x34, 0x30,
0xc5, 0x68, 0x73, 0xcd, 0x99, 0x7b, 0xfb, 0x6e, 0x75, 0x85, 0xa7, 0x8c, 0x66, 0x6f, 0xec, 0xca,
0x99, 0x6f, 0xec, 0x9f, 0xc3, 0xd5, 0xa3, 0xe7, 0x9d, 0x67, 0x70, 0x04, 0x4e, 0x55, 0xc7, 0xfd,
0xca, 0xec, 0x81, 0xcf, 0xf1, 0x0a, 0xd0, 0x8f, 0x61, 0x69, 0xe2, 0xc4, 0x8f, 0x27, 0xd6, 0xcc,
0x57, 0x82, 0xb1, 0x6e, 0x3c, 0xe5, 0xa4, 0x33, 0x5f, 0x3f, 0xe9, 0xcc, 0xbb, 0xff, 0xb2, 0x61,
0xa1, 0x4b, 0x42, 0x22, 0xc9, 0xb7, 0x05, 0xe5, 0xb1, 0x05, 0xe5, 0x8f, 0x00, 0xd1, 0x58, 0xde,
0xff, 0xd8, 0x4f, 0x38, 0x8d, 0x30, 0x1f, 0xf9, 0x2f, 0xc8, 0x28, 0x4f, 0xa6, 0x1d, 0xad, 0xd9,
0x35, 0x8a, 0xc7, 0x64, 0x24, 0xde, 0x58, 0x60, 0x4e, 0x56, 0x74, 0xe6, 0x70, 0x15, 0x15, 0xdd,
0x4f, 0xa1, 0x35, 0xf5, 0x8a, 0xd6, 0x1b, 0x08, 0xdb, 0x4c, 0xc6, 0xef, 0x75, 0xbf, 0xb4, 0xa0,
0xb1, 0xcd, 0x70, 0xa0, 0x7b, 0xab, 0x73, 0x86, 0xb1, 0x28, 0x9b, 0x4b, 0xb3, 0x65, 0xf3, 0x35,
0x18, 0xb7, 0x47, 0x59, 0x20, 0x27, 0xfa, 0xa5, 0x89, 0xbe, 0xa7, 0x3c, 0xdd, 0xf7, 0xdc, 0x80,
0x26, 0x55, 0x0b, 0xf2, 0x13, 0x2c, 0x87, 0x26, 0x9f, 0x36, 0x3c, 0xd0, 0xa2, 0x5d, 0x25, 0x51,
0x8d, 0x51, 0x6e, 0xa0, 0x1b, 0xa3, 0xea, 0xa9, 0x1b, 0xa3, 0xcc, 0x89, 0x6e, 0x8c, 0x7e, 0x6b,
0x01, 0xe8, 0x8d, 0xab, 0x7c, 0x70, 0xd4, 0xa9, 0x75, 0x1e, 0xa7, 0x2a, 0xd1, 0xeb, 0x48, 0x91,
0x10, 0xcb, 0xf1, 0xa1, 0x12, 0x19, 0x38, 0x48, 0x45, 0xcd, 0xa8, 0xb2, 0x03, 0x25, 0xdc, 0x3f,
0x58, 0x00, 0x3a, 0x2b, 0x98, 0x65, 0xcc, 0xd2, 0xcf, 0x3a, 0xb9, 0x65, 0x2c, 0x4d, 0x43, 0xb7,
0x9e, 0x43, 0x77, 0xc2, 0x37, 0xd9, 0x89, 0x1a, 0x3f, 0xdf, 0x7c, 0x86, 0xae, 0x7e, 0x76, 0xff,
0x68, 0x41, 0x2b, 0x5b, 0x9d, 0x59, 0xd2, 0x54, 0x94, 0xad, 0xd9, 0x28, 0xeb, 0x12, 0x28, 0x62,
0x7c, 0xe4, 0x0b, 0xfa, 0x9a, 0x64, 0x0b, 0x02, 0x23, 0xda, 0xa3, 0xaf, 0xc9, 0x14, 0x79, 0xed,
0x69, 0xf2, 0xde, 0x86, 0x45, 0x4e, 0xfa, 0x24, 0x96, 0xe1, 0xc8, 0x8f, 0x58, 0x40, 0xf7, 0x29,
0x09, 0x34, 0x1b, 0xea, 0x5e, 0x27, 0x57, 0xec, 0x64, 0x72, 0xf7, 0x37, 0x16, 0x34, 0x77, 0xc4,
0x60, 0x97, 0x09, 0x7d, 0xc8, 0xd0, 0x4d, 0x68, 0x65, 0x89, 0xcd, 0x9c, 0x70, 0x4b, 0x33, 0xac,
0xd9, 0x1f, 0x7f, 0xd7, 0x54, 0xa9, 0x3d, 0x12, 0x83, 0x0c, 0xa6, 0x96, 0x67, 0x06, 0x68, 0x19,
0xea, 0x91, 0x18, 0xe8, 0xba, 0x3e, 0xa3, 0x65, 0x31, 0x56, 0x7b, 0x1d, 0x5f, 0x74, 0x65, 0x7d,
0xd1, 0x8d, 0x05, 0xee, 0x17, 0x16, 0xa0, 0xec, 0xbb, 0xe9, 0x5b, 0xfd, 0xe6, 0xd0, 0x51, 0x9e,
0xfc, 0x36, 0x5b, 0xd2, 0x1c, 0x9f, 0x92, 0xcd, 0x24, 0x05, 0xfb, 0x48, 0x52, 0xb8, 0x0d, 0x8b,
0x01, 0xd9, 0xc7, 0x69, 0x38, 0x79, 0x37, 0x9b, 0x25, 0x77, 0x32, 0xc5, 0xd4, 0x7f, 0x82, 0xf6,
0x06, 0x27, 0x01, 0x89, 0x25, 0xc5, 0xa1, 0xfe, 0x7d, 0xb5, 0x0c, 0xf5, 0x54, 0x28, 0x26, 0x14,
0xd8, 0x15, 0x63, 0xf4, 0x21, 0x20, 0x12, 0xf7, 0xf9, 0x28, 0x51, 0x24, 0x4e, 0xb0, 0x10, 0x87,
0x8c, 0x07, 0x59, 0xa2, 0x5e, 0x2c, 0x34, 0xbb, 0x99, 0x42, 0x35, 0xc0, 0x92, 0xc4, 0x38, 0x96,
0x79, 0xbe, 0x36, 0x23, 0x15, 0x7a, 0x2a, 0x7c, 0x91, 0x26, 0x84, 0x67, 0x61, 0xad, 0x51, 0xb1,
0xa7, 0x86, 0x2a, 0x95, 0x8b, 0x21, 0x5e, 0xfb, 0xe4, 0xfe, 0xd8, 0xbd, 0x49, 0xd1, 0x6d, 0x23,
0xce, 0x7d, 0xbb, 0x8f, 0x60, 0x71, 0x9b, 0x0a, 0xb9, 0xcb, 0x42, 0xda, 0x1f, 0x9d, 0xfb, 0xc6,
0x71, 0x3f, 0xb7, 0x00, 0x4d, 0xfa, 0xc9, 0xfe, 0x92, 0x8c, 0x2b, 0x06, 0xeb, 0xf4, 0x15, 0xc3,
0x4d, 0x68, 0x25, 0xda, 0x8d, 0x4f, 0xe3, 0x7d, 0x96, 0x47, 0xaf, 0x69, 0x64, 0x0a, 0x5b, 0x81,
0xae, 0x03, 0x28, 0x30, 0x7d, 0xce, 0x42, 0x62, 0x82, 0xd7, 0xf0, 0x1a, 0x4a, 0xe2, 0x29, 0x81,
0x3b, 0x80, 0x2b, 0x7b, 0x43, 0x76, 0xb8, 0xc1, 0xe2, 0x7d, 0x3a, 0x48, 0x39, 0x56, 0x84, 0x7e,
0x8b, 0xaf, 0x6f, 0x0e, 0xd4, 0x12, 0x2c, 0xd5, 0xb1, 0xce, 0x62, 0x94, 0x0f, 0xdd, 0x3f, 0x59,
0xb0, 0x3c, 0xef, 0x4d, 0x6f, 0xb3, 0xfd, 0x4d, 0x58, 0xe8, 0x1b, 0x77, 0xc6, 0xdb, 0xe9, 0x7f,
0x43, 0x4e, 0xcf, 0x73, 0x1f, 0x41, 0xd9, 0xc3, 0x92, 0xa0, 0xbb, 0x50, 0xe2, 0x52, 0xaf, 0xa0,
0xbd, 0x76, 0xe3, 0x98, 0x64, 0xa5, 0x0c, 0x75, 0x67, 0x5d, 0xe2, 0x12, 0xb5, 0xc0, 0xe2, 0x7a,
0xa7, 0x96, 0x67, 0xf1, 0x5b, 0x6b, 0xb0, 0x78, 0xe4, 0x73, 0x05, 0x6a, 0x41, 0xdd, 0x63, 0x87,
0x0a, 0xa3, 0xa0, 0xf3, 0x1e, 0xba, 0x00, 0xcd, 0x0d, 0x16, 0xa6, 0x51, 0x6c, 0x04, 0xd6, 0xad,
0xbf, 0x59, 0x50, 0xcf, 0x5d, 0xa2, 0x45, 0x58, 0xe8, 0x76, 0xb7, 0xc7, 0xff, 0x3e, 0x3a, 0xef,
0xa1, 0x0e, 0xb4, 0xba, 0xdd, 0xed, 0xe2, 0xcb, 0x79, 0xc7, 0x52, 0x0e, 0xbb, 0xdd, 0x6d, 0x9d,
0x33, 0x3b, 0xa5, 0x6c, 0xf4, 0x59, 0x98, 0x8a, 0x61, 0xc7, 0x2e, 0x1c, 0x44, 0x09, 0x36, 0x0e,
0xca, 0x68, 0x01, 0x1a, 0xdd, 0x9d, 0x6d, 0xb3, 0xae, 0x4e, 0x25, 0x1b, 0x9a, 0xb2, 0xa9, 0x53,
0x55, 0xeb, 0xe9, 0xee, 0x6c, 0xaf, 0xa7, 0xe1, 0x0b, 0x75, 0xfd, 0x76, 0x6a, 0x5a, 0xff, 0x74,
0xdb, 0x74, 0x64, 0x9d, 0xba, 0x76, 0xff, 0x74, 0x5b, 0xf5, 0x88, 0xa3, 0x4e, 0x63, 0xfd, 0xc1,
0xaf, 0x3e, 0x19, 0x50, 0x39, 0x4c, 0x7b, 0x0a, 0xd4, 0xbb, 0x06, 0x9f, 0x0f, 0x29, 0xcb, 0x9e,
0xee, 0xe6, 0x18, 0xdd, 0xd5, 0x90, 0x15, 0xc3, 0xa4, 0xd7, 0xab, 0x6a, 0xc9, 0x47, 0xff, 0x0b,
0x00, 0x00, 0xff, 0xff, 0xe5, 0x9b, 0x62, 0xbb, 0x4c, 0x1f, 0x00, 0x00,
}

View File

@ -43,14 +43,15 @@ import (
)
const (
AnnsFieldKey = "anns_field"
TopKKey = "topk"
NQKey = "nq"
MetricTypeKey = "metric_type"
SearchParamsKey = "params"
RoundDecimalKey = "round_decimal"
OffsetKey = "offset"
LimitKey = "limit"
IgnoreGrowingKey = "ignore_growing"
AnnsFieldKey = "anns_field"
TopKKey = "topk"
NQKey = "nq"
MetricTypeKey = "metric_type"
SearchParamsKey = "params"
RoundDecimalKey = "round_decimal"
OffsetKey = "offset"
LimitKey = "limit"
InsertTaskName = "InsertTask"
CreateCollectionTaskName = "CreateCollectionTask"

View File

@ -2,6 +2,7 @@ package proxy
import (
"context"
"errors"
"fmt"
"strconv"
"strings"
@ -225,6 +226,20 @@ func (t *queryTask) PreExecute(ctx context.Context) error {
zap.Any("collectionName", collectionName),
zap.Any("requestType", "query"))
//fetch search_growing from search param
var ignoreGrowing bool
for i, kv := range t.request.GetQueryParams() {
if kv.GetKey() == IgnoreGrowingKey {
ignoreGrowing, err = strconv.ParseBool(kv.Value)
if err != nil {
return errors.New("parse search growing failed")
}
t.request.QueryParams = append(t.request.GetQueryParams()[:i], t.request.GetQueryParams()[i+1:]...)
break
}
}
t.RetrieveRequest.IgnoreGrowing = ignoreGrowing
queryParams, err := parseQueryParams(t.request.GetQueryParams())
if err != nil {
return err

View File

@ -154,6 +154,12 @@ func TestQueryTask_all(t *testing.T) {
},
CollectionName: collectionName,
Expr: expr,
QueryParams: []*commonpb.KeyValuePair{
{
Key: IgnoreGrowingKey,
Value: "false",
},
},
},
qc: qc,
shardMgr: mgr,

View File

@ -302,6 +302,20 @@ func (t *searchTask) PreExecute(ctx context.Context) error {
log.Ctx(ctx).Debug("translate output fields",
zap.Strings("output fields", t.request.GetOutputFields()))
//fetch search_growing from search param
var ignoreGrowing bool
for i, kv := range t.request.GetSearchParams() {
if kv.GetKey() == IgnoreGrowingKey {
ignoreGrowing, err = strconv.ParseBool(kv.GetValue())
if err != nil {
return errors.New("parse search growing failed")
}
t.request.SearchParams = append(t.request.GetSearchParams()[:i], t.request.GetSearchParams()[i+1:]...)
break
}
}
t.SearchRequest.IgnoreGrowing = ignoreGrowing
if t.request.GetDslType() == commonpb.DslType_BoolExprV1 {
annsField, err := funcutil.GetAttrByKeyFromRepeatedKV(AnnsFieldKey, t.request.GetSearchParams())
if err != nil {

View File

@ -110,9 +110,23 @@ func getValidSearchParams() []*commonpb.KeyValuePair {
{
Key: RoundDecimalKey,
Value: "-1",
},
{
Key: IgnoreGrowingKey,
Value: "false",
}}
}
func getInvalidSearchParams(invalidName string) []*commonpb.KeyValuePair {
kvs := getValidSearchParams()
for _, kv := range kvs {
if kv.GetKey() == invalidName {
kv.Value = "invalid"
}
}
return kvs
}
func TestSearchTask_PreExecute(t *testing.T) {
var err error
@ -186,6 +200,24 @@ func TestSearchTask_PreExecute(t *testing.T) {
assert.Error(t, err)
})
t.Run("invalid IgnoreGrowing param", func(t *testing.T) {
collName := "test_invalid_param" + funcutil.GenRandomStr()
createColl(t, collName, rc)
collID, err := globalMetaCache.GetCollectionID(context.TODO(), collName)
require.NoError(t, err)
qc.EXPECT().ShowCollections(
mock.Anything, mock.MatchedBy(func(req *querypb.ShowCollectionsRequest) bool { return req.CollectionIDs[0] == collID })).Return(&querypb.ShowCollectionsResponse{
Status: &successStatus,
CollectionIDs: []int64{collID},
InMemoryPercentages: []int64{100},
}, nil).Times(1)
task := getSearchTask(t, collName)
task.request.SearchParams = getInvalidSearchParams(IgnoreGrowingKey)
err = task.PreExecute(ctx)
assert.Error(t, err)
})
t.Run("invalid collection name", func(t *testing.T) {
task := getSearchTask(t, collectionName)
createColl(t, collectionName, rc)

View File

@ -236,17 +236,15 @@ func (node *QueryNode) getStatisticsWithDmlChannel(ctx context.Context, req *que
defer cancel()
var results []*internalpb.GetStatisticsResponse
var streamingResult *internalpb.GetStatisticsResponse
var errCluster error
withStreaming := func(ctx context.Context) error {
withStreaming := func(ctx context.Context) (error, *internalpb.GetStatisticsResponse) {
streamingTask := newStatistics(ctx, req, querypb.DataScope_Streaming, qs, waitCanDo)
err := streamingTask.Execute(ctx)
if err != nil {
return err
return err, nil
}
streamingResult = streamingTask.Ret
return nil
return nil, streamingTask.Ret
}
// shard leader dispatches request to its shard cluster
@ -263,7 +261,6 @@ func (node *QueryNode) getStatisticsWithDmlChannel(ctx context.Context, req *que
tr.Elapse(fmt.Sprintf("start reduce statistic result, traceID = %s, fromSharedLeader = %t, vChannel = %s, segmentIDs = %v",
traceID, req.GetFromShardLeader(), dmlChannel, req.GetSegmentIDs()))
results = append(results, streamingResult)
ret, err := reduceStatisticResponse(results)
if err != nil {
failRet.Status.Reason = err.Error()
@ -878,38 +875,17 @@ func (node *QueryNode) searchWithDmlChannel(ctx context.Context, req *querypb.Se
var (
searchCtx, cancel = context.WithCancel(ctx)
results []*internalpb.SearchResults
streamingResult *internalpb.SearchResults
errCluster error
results []*internalpb.SearchResults
errCluster error
)
defer cancel()
withStreaming := func(ctx context.Context) error {
streamingTask, err := newSearchTask(searchCtx, req)
if err != nil {
return err
}
streamingTask.QS = qs
streamingTask.DataScope = querypb.DataScope_Streaming
err = node.scheduler.AddReadTask(searchCtx, streamingTask)
if err != nil {
return err
}
err = streamingTask.WaitToFinish()
if err != nil {
return err
}
metrics.QueryNodeSQLatencyInQueue.WithLabelValues(fmt.Sprint(nodeID),
metrics.SearchLabel).Observe(float64(streamingTask.queueDur.Milliseconds()))
metrics.QueryNodeReduceLatency.WithLabelValues(fmt.Sprint(nodeID),
metrics.SearchLabel).Observe(float64(streamingTask.reduceDur.Milliseconds()))
streamingResult = streamingTask.Ret
return nil
}
// shard leader dispatches request to its shard cluster
results, errCluster = cluster.Search(searchCtx, req, withStreaming)
var withStreamingFunc searchWithStreaming
if !req.Req.IgnoreGrowing {
withStreamingFunc = getSearchWithStreamingFunc(searchCtx, req, node, qs, nodeID)
}
results, errCluster = cluster.Search(searchCtx, req, withStreamingFunc)
if errCluster != nil {
log.Ctx(ctx).Warn("search shard cluster failed", zap.String("vChannel", dmlChannel), zap.Error(errCluster))
failRet.Status.Reason = errCluster.Error()
@ -918,7 +894,6 @@ func (node *QueryNode) searchWithDmlChannel(ctx context.Context, req *querypb.Se
tr.CtxElapse(ctx, fmt.Sprintf("do search done in shard cluster, vChannel = %s, segmentIDs = %v", dmlChannel, req.GetSegmentIDs()))
results = append(results, streamingResult)
ret, err2 := reduceSearchResults(ctx, results, req.Req.GetNq(), req.Req.GetTopk(), req.Req.GetMetricType())
if err2 != nil {
failRet.Status.Reason = err2.Error()
@ -1029,32 +1004,14 @@ func (node *QueryNode) queryWithDmlChannel(ctx context.Context, req *querypb.Que
defer cancel()
var results []*internalpb.RetrieveResults
var streamingResult *internalpb.RetrieveResults
withStreaming := func(ctx context.Context) error {
streamingTask := newQueryTask(queryCtx, req)
streamingTask.DataScope = querypb.DataScope_Streaming
streamingTask.QS = qs
err := node.scheduler.AddReadTask(queryCtx, streamingTask)
if err != nil {
return err
}
err = streamingTask.WaitToFinish()
if err != nil {
return err
}
metrics.QueryNodeSQLatencyInQueue.WithLabelValues(fmt.Sprint(nodeID),
metrics.QueryLabel).Observe(float64(streamingTask.queueDur.Milliseconds()))
metrics.QueryNodeReduceLatency.WithLabelValues(fmt.Sprint(nodeID),
metrics.QueryLabel).Observe(float64(streamingTask.reduceDur.Milliseconds()))
streamingResult = streamingTask.Ret
return nil
}
var errCluster error
var withStreamingFunc queryWithStreaming
if !req.Req.IgnoreGrowing {
withStreamingFunc = getQueryWithStreamingFunc(queryCtx, req, node, qs, nodeID)
}
// shard leader dispatches request to its shard cluster
results, errCluster = cluster.Query(queryCtx, req, withStreaming)
results, errCluster = cluster.Query(queryCtx, req, withStreamingFunc)
if errCluster != nil {
log.Ctx(ctx).Warn("failed to query cluster",
zap.Int64("collectionID", req.Req.GetCollectionID()),
@ -1066,7 +1023,6 @@ func (node *QueryNode) queryWithDmlChannel(ctx context.Context, req *querypb.Que
tr.CtxElapse(ctx, fmt.Sprintf("start reduce query result, fromSharedLeader = %t, vChannel = %s, segmentIDs = %v",
req.GetFromShardLeader(), dmlChannel, req.GetSegmentIDs()))
results = append(results, streamingResult)
ret, err2 := mergeInternalRetrieveResultsAndFillIfEmpty(ctx, results, req.Req.GetLimit(), req.GetReq().GetOutputFieldsId(), qs.collection.Schema())
if err2 != nil {
failRet.Status.Reason = err2.Error()

View File

@ -789,6 +789,15 @@ func TestImpl_searchWithDmlChannel(t *testing.T) {
DmlChannels: []string{defaultDMLChannel},
}, defaultDMLChannel)
assert.NoError(t, err)
// search with ignore growing segment
req.IgnoreGrowing = true
_, err = node.searchWithDmlChannel(ctx, &queryPb.SearchRequest{
Req: req,
FromShardLeader: false,
DmlChannels: []string{defaultDMLChannel},
}, defaultDMLChannel)
assert.NoError(t, err)
req.IgnoreGrowing = false
// search for wrong dml channel
_, err = node.searchWithDmlChannel(ctx, &queryPb.SearchRequest{
@ -910,6 +919,16 @@ func TestImpl_queryWithDmlChannel(t *testing.T) {
}, defaultDMLChannel)
assert.NoError(t, err)
// query with ignore growing
req.IgnoreGrowing = true
_, err = node.queryWithDmlChannel(ctx, &queryPb.QueryRequest{
Req: req,
FromShardLeader: false,
DmlChannels: []string{defaultDMLChannel},
}, defaultDMLChannel)
assert.NoError(t, err)
req.IgnoreGrowing = false
// query for wrong dml channel
_, err = node.queryWithDmlChannel(ctx, &queryPb.QueryRequest{
Req: req,

View File

@ -30,6 +30,7 @@ import (
"github.com/milvus-io/milvus-proto/go-api/commonpb"
"github.com/milvus-io/milvus/internal/common"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/metrics"
"github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/proto/querypb"
"github.com/milvus-io/milvus/internal/util/funcutil"
@ -126,7 +127,9 @@ type ShardSegmentDetector interface {
type ShardNodeBuilder func(nodeID int64, addr string) shardQueryNode
// withStreaming function type to let search detects corresponding search streaming is done.
type withStreaming func(ctx context.Context) error
type searchWithStreaming func(ctx context.Context) (error, *internalpb.SearchResults)
type queryWithStreaming func(ctx context.Context) (error, *internalpb.RetrieveResults)
type getStatisticsWithStreaming func(ctx context.Context) (error, *internalpb.GetStatisticsResponse)
// ShardCluster maintains the ShardCluster information and perform shard level operations
type ShardCluster struct {
@ -824,7 +827,7 @@ func (sc *ShardCluster) segmentsOnline(segments []shardSegmentInfo) bool {
}
// GetStatistics returns the statistics on the shard cluster.
func (sc *ShardCluster) GetStatistics(ctx context.Context, req *querypb.GetStatisticsRequest, withStreaming withStreaming) ([]*internalpb.GetStatisticsResponse, error) {
func (sc *ShardCluster) GetStatistics(ctx context.Context, req *querypb.GetStatisticsRequest, withStreaming getStatisticsWithStreaming) ([]*internalpb.GetStatisticsResponse, error) {
if !sc.serviceable() {
return nil, fmt.Errorf("ShardCluster for %s replicaID %d is not available", sc.vchannelName, sc.replicaID)
}
@ -854,7 +857,11 @@ func (sc *ShardCluster) GetStatistics(ctx context.Context, req *querypb.GetStati
wg.Add(1)
go func() {
defer wg.Done()
streamErr := withStreaming(reqCtx)
if withStreaming == nil {
return
}
streamErr, streamResult := withStreaming(reqCtx)
resultMut.Lock()
defer resultMut.Unlock()
if streamErr != nil {
@ -864,6 +871,9 @@ func (sc *ShardCluster) GetStatistics(ctx context.Context, req *querypb.GetStati
err = fmt.Errorf("stream operation failed: %w", streamErr)
}
}
if streamResult != nil {
results = append(results, streamResult)
}
}()
// dispatch request to followers
@ -907,7 +917,7 @@ func (sc *ShardCluster) GetStatistics(ctx context.Context, req *querypb.GetStati
}
// Search preforms search operation on shard cluster.
func (sc *ShardCluster) Search(ctx context.Context, req *querypb.SearchRequest, withStreaming withStreaming) ([]*internalpb.SearchResults, error) {
func (sc *ShardCluster) Search(ctx context.Context, req *querypb.SearchRequest, withStreaming searchWithStreaming) ([]*internalpb.SearchResults, error) {
log := log.Ctx(ctx)
if !sc.serviceable() {
err := WrapErrShardNotAvailable(sc.replicaID, sc.vchannelName)
@ -946,8 +956,11 @@ func (sc *ShardCluster) Search(ctx context.Context, req *querypb.SearchRequest,
wg.Add(1)
go func() {
defer wg.Done()
if withStreaming == nil {
return
}
streamErr := withStreaming(reqCtx)
streamErr, streamResult := withStreaming(reqCtx)
resultMut.Lock()
defer resultMut.Unlock()
if streamErr != nil {
@ -956,6 +969,9 @@ func (sc *ShardCluster) Search(ctx context.Context, req *querypb.SearchRequest,
}
cancel()
}
if streamResult != nil {
results = append(results, streamResult)
}
}()
// dispatch request to followers
@ -1009,7 +1025,7 @@ func (sc *ShardCluster) Search(ctx context.Context, req *querypb.SearchRequest,
}
// Query performs query operation on shard cluster.
func (sc *ShardCluster) Query(ctx context.Context, req *querypb.QueryRequest, withStreaming withStreaming) ([]*internalpb.RetrieveResults, error) {
func (sc *ShardCluster) Query(ctx context.Context, req *querypb.QueryRequest, withStreaming queryWithStreaming) ([]*internalpb.RetrieveResults, error) {
if !sc.serviceable() {
return nil, WrapErrShardNotAvailable(sc.replicaID, sc.vchannelName)
}
@ -1030,20 +1046,29 @@ func (sc *ShardCluster) Query(ctx context.Context, req *querypb.QueryRequest, wi
var err error
var resultMut sync.Mutex
results := make([]*internalpb.RetrieveResults, 0, len(segAllocs)+1) // count(nodes) + 1(growing)
// detect corresponding streaming query is done
wg.Add(1)
go func() {
defer wg.Done()
if withStreaming == nil {
return
}
streamErr := withStreaming(reqCtx)
streamErr, streamResult := withStreaming(reqCtx)
resultMut.Lock()
defer resultMut.Unlock()
if streamErr != nil {
if err == nil {
err = fmt.Errorf("stream operation failed: %w", streamErr)
}
cancel()
}
if streamResult != nil {
results = append(results, streamResult)
}
}()
// dispatch request to followers
@ -1098,3 +1123,49 @@ func (sc *ShardCluster) GetSegmentInfos() []shardSegmentInfo {
func (sc *ShardCluster) getVersion() int64 {
return sc.version
}
func getSearchWithStreamingFunc(searchCtx context.Context, req *querypb.SearchRequest, node *QueryNode, qs *queryShard, nodeID int64) searchWithStreaming {
return func(ctx context.Context) (error, *internalpb.SearchResults) {
streamingTask, err := newSearchTask(searchCtx, req)
if err != nil {
return err, nil
}
streamingTask.QS = qs
streamingTask.DataScope = querypb.DataScope_Streaming
err = node.scheduler.AddReadTask(searchCtx, streamingTask)
if err != nil {
return err, nil
}
err = streamingTask.WaitToFinish()
if err != nil {
return err, nil
}
metrics.QueryNodeSQLatencyInQueue.WithLabelValues(fmt.Sprint(nodeID),
metrics.SearchLabel).Observe(float64(streamingTask.queueDur.Milliseconds()))
metrics.QueryNodeReduceLatency.WithLabelValues(fmt.Sprint(nodeID),
metrics.SearchLabel).Observe(float64(streamingTask.reduceDur.Milliseconds()))
return nil, streamingTask.Ret
}
}
func getQueryWithStreamingFunc(queryCtx context.Context, req *querypb.QueryRequest, node *QueryNode, qs *queryShard, nodeID int64) queryWithStreaming {
return func(ctx context.Context) (error, *internalpb.RetrieveResults) {
streamingTask := newQueryTask(queryCtx, req)
streamingTask.DataScope = querypb.DataScope_Streaming
streamingTask.QS = qs
err := node.scheduler.AddReadTask(queryCtx, streamingTask)
if err != nil {
return err, nil
}
err = streamingTask.WaitToFinish()
if err != nil {
return err, nil
}
metrics.QueryNodeSQLatencyInQueue.WithLabelValues(fmt.Sprint(nodeID),
metrics.QueryLabel).Observe(float64(streamingTask.queueDur.Milliseconds()))
metrics.QueryNodeReduceLatency.WithLabelValues(fmt.Sprint(nodeID),
metrics.QueryLabel).Observe(float64(streamingTask.reduceDur.Milliseconds()))
return nil, streamingTask.Ret
}
}

View File

@ -1049,7 +1049,6 @@ func TestShardCluster_SyncSegments(t *testing.T) {
})
}
var streamingDoNothing = func(context.Context) error { return nil }
var streamingError = func(context.Context) error { return errors.New("mock streaming error") }
func TestShardCluster_Search(t *testing.T) {
@ -1103,7 +1102,7 @@ func TestShardCluster_Search(t *testing.T) {
_, err := sc.Search(ctx, &querypb.SearchRequest{
DmlChannels: []string{vchannelName},
}, streamingDoNothing)
}, nil)
assert.Error(t, err)
})
@ -1115,7 +1114,7 @@ func TestShardCluster_Search(t *testing.T) {
_, err := sc.Search(ctx, &querypb.SearchRequest{
DmlChannels: []string{vchannelName + "_suffix"},
}, streamingDoNothing)
}, nil)
assert.Error(t, err)
})
@ -1168,7 +1167,7 @@ func TestShardCluster_Search(t *testing.T) {
Base: &commonpb.MsgBase{},
},
DmlChannels: []string{vchannelName},
}, streamingDoNothing)
}, nil)
assert.NoError(t, err)
assert.Equal(t, len(nodeEvents), len(result))
})
@ -1222,7 +1221,7 @@ func TestShardCluster_Search(t *testing.T) {
Base: &commonpb.MsgBase{},
},
DmlChannels: []string{vchannelName},
}, func(ctx context.Context) error { return errors.New("mocked") })
}, func(ctx context.Context) (error, *internalpb.SearchResults) { return errors.New("mocked"), nil })
assert.Error(t, err)
})
@ -1283,7 +1282,7 @@ func TestShardCluster_Search(t *testing.T) {
Base: &commonpb.MsgBase{},
},
DmlChannels: []string{vchannelName},
}, streamingDoNothing)
}, nil)
assert.Error(t, err)
})
@ -1338,7 +1337,7 @@ func TestShardCluster_Search(t *testing.T) {
Base: &commonpb.MsgBase{},
},
DmlChannels: []string{vchannelName},
}, streamingDoNothing)
}, nil)
assert.Error(t, err)
})
}
@ -1401,7 +1400,7 @@ func TestShardCluster_Query(t *testing.T) {
Base: &commonpb.MsgBase{},
},
DmlChannels: []string{vchannelName},
}, streamingDoNothing)
}, nil)
assert.Error(t, err)
})
t.Run("query wrong channel", func(t *testing.T) {
@ -1417,7 +1416,7 @@ func TestShardCluster_Query(t *testing.T) {
Base: &commonpb.MsgBase{},
},
DmlChannels: []string{vchannelName + "_suffix"},
}, streamingDoNothing)
}, nil)
assert.Error(t, err)
})
t.Run("normal query", func(t *testing.T) {
@ -1469,7 +1468,7 @@ func TestShardCluster_Query(t *testing.T) {
Base: &commonpb.MsgBase{},
},
DmlChannels: []string{vchannelName},
}, streamingDoNothing)
}, nil)
assert.NoError(t, err)
assert.Equal(t, len(nodeEvents), len(result))
})
@ -1522,7 +1521,7 @@ func TestShardCluster_Query(t *testing.T) {
Base: &commonpb.MsgBase{},
},
DmlChannels: []string{vchannelName},
}, func(ctx context.Context) error { return errors.New("mocked") })
}, func(ctx context.Context) (error, *internalpb.RetrieveResults) { return errors.New("mocked"), nil })
assert.Error(t, err)
})
@ -1583,7 +1582,7 @@ func TestShardCluster_Query(t *testing.T) {
Base: &commonpb.MsgBase{},
},
DmlChannels: []string{vchannelName},
}, streamingDoNothing)
}, nil)
assert.Error(t, err)
})
t.Run("test meta error", func(t *testing.T) {
@ -1639,7 +1638,7 @@ func TestShardCluster_Query(t *testing.T) {
Base: &commonpb.MsgBase{},
},
DmlChannels: []string{vchannelName},
}, streamingDoNothing)
}, nil)
assert.Error(t, err)
})
@ -1696,7 +1695,7 @@ func TestShardCluster_GetStatistics(t *testing.T) {
_, err := sc.GetStatistics(ctx, &querypb.GetStatisticsRequest{
DmlChannels: []string{vchannelName},
}, streamingDoNothing)
}, nil)
assert.Error(t, err)
})
@ -1708,7 +1707,7 @@ func TestShardCluster_GetStatistics(t *testing.T) {
_, err := sc.GetStatistics(ctx, &querypb.GetStatisticsRequest{
DmlChannels: []string{vchannelName + "_suffix"},
}, streamingDoNothing)
}, nil)
assert.Error(t, err)
})
@ -1758,7 +1757,7 @@ func TestShardCluster_GetStatistics(t *testing.T) {
result, err := sc.GetStatistics(ctx, &querypb.GetStatisticsRequest{
DmlChannels: []string{vchannelName},
}, streamingDoNothing)
}, nil)
assert.NoError(t, err)
assert.Equal(t, len(nodeEvents), len(result))
})
@ -1809,7 +1808,7 @@ func TestShardCluster_GetStatistics(t *testing.T) {
_, err := sc.GetStatistics(ctx, &querypb.GetStatisticsRequest{
DmlChannels: []string{vchannelName},
}, func(ctx context.Context) error { return errors.New("mocked") })
}, func(ctx context.Context) (error, *internalpb.GetStatisticsResponse) { return errors.New("mocked"), nil })
assert.Error(t, err)
})
@ -1868,7 +1867,7 @@ func TestShardCluster_GetStatistics(t *testing.T) {
_, err := sc.GetStatistics(ctx, &querypb.GetStatisticsRequest{
DmlChannels: []string{vchannelName},
}, streamingDoNothing)
}, nil)
assert.Error(t, err)
})
@ -1919,7 +1918,7 @@ func TestShardCluster_GetStatistics(t *testing.T) {
_, err := sc.GetStatistics(ctx, &querypb.GetStatisticsRequest{
DmlChannels: []string{vchannelName},
}, streamingDoNothing)
}, nil)
assert.Error(t, err)
})
}