Skip to content
Snippets Groups Projects
Commit ca9c2f5c authored by Bingyi Sun 【孙秉义】's avatar Bingyi Sun 【孙秉义】 Committed by yefu.chen
Browse files

Add GetCount and implement GetCollectionStatistics


Signed-off-by: default avatarsunby <bingyi.sun@zilliz.com>
parent 4cd31540
Branches
Tags
No related merge requests found
Showing with 490 additions and 140 deletions
...@@ -33,6 +33,10 @@ dir ('build/docker/deploy') { ...@@ -33,6 +33,10 @@ dir ('build/docker/deploy') {
sh 'docker-compose build --force-rm queryservice' sh 'docker-compose build --force-rm queryservice'
sh 'docker-compose push queryservice' sh 'docker-compose push queryservice'
sh 'docker pull ${SOURCE_REPO}/dataservice:${SOURCE_TAG} || true'
sh 'docker-compose build --force-rm dataservice'
sh 'docker-compose push dataservice'
sh 'docker pull registry.zilliz.com/milvus-distributed/milvus-distributed-dev:latest || true' sh 'docker pull registry.zilliz.com/milvus-distributed/milvus-distributed-dev:latest || true'
sh 'docker pull ${SOURCE_REPO}/querynode:${SOURCE_TAG} || true' sh 'docker pull ${SOURCE_REPO}/querynode:${SOURCE_TAG} || true'
sh 'docker-compose build --force-rm querynode' sh 'docker-compose build --force-rm querynode'
......
...@@ -10,6 +10,7 @@ try { ...@@ -10,6 +10,7 @@ try {
sh 'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME} up -d indexservice' sh 'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME} up -d indexservice'
sh 'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME} up -d indexnode' sh 'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME} up -d indexnode'
sh 'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME} up -d queryservice' sh 'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME} up -d queryservice'
sh 'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME} up -d dataservice'
sh 'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME} run -e QUERY_NODE_ID=1 -d querynode' sh 'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME} run -e QUERY_NODE_ID=1 -d querynode'
sh 'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME} run -e QUERY_NODE_ID=2 -d querynode' sh 'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME} run -e QUERY_NODE_ID=2 -d querynode'
sh 'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME} run -e DATA_NODE_ID=3 -d datanode' sh 'docker-compose -p ${DOCKER_COMPOSE_PROJECT_NAME} run -e DATA_NODE_ID=3 -d datanode'
......
...@@ -9,3 +9,4 @@ MINIO_ADDRESS=minio:9000 ...@@ -9,3 +9,4 @@ MINIO_ADDRESS=minio:9000
PROXY_NODE_HOST=proxynode PROXY_NODE_HOST=proxynode
PROXY_SERVICE_ADDRESS=proxyservice:19530 PROXY_SERVICE_ADDRESS=proxyservice:19530
INDEX_SERVICE_ADDRESS=indexservice:31000 INDEX_SERVICE_ADDRESS=indexservice:31000
DATA_SERVICE_ADDRESS=dataservice:13333
# 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.
FROM milvusdb/milvus-distributed-dev:amd64-ubuntu18.04-latest AS openblas
#FROM alpine
FROM ubuntu:bionic-20200921
RUN apt-get update && apt-get install -y --no-install-recommends libtbb-dev gfortran
#RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
#RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories \
# && apk add --no-cache libtbb gfortran
COPY --from=openblas /usr/lib/libopenblas-r0.3.9.so /usr/lib/
RUN ln -s /usr/lib/libopenblas-r0.3.9.so /usr/lib/libopenblas.so.0 && \
ln -s /usr/lib/libopenblas.so.0 /usr/lib/libopenblas.so
COPY ./bin/dataservice /milvus-distributed/bin/dataservice
COPY ./configs/ /milvus-distributed/configs/
COPY ./lib/ /milvus-distributed/lib/
ENV LD_LIBRARY_PATH=/milvus-distributed/lib:$LD_LIBRARY_PATH:/usr/lib
WORKDIR /milvus-distributed/
CMD ["./bin/dataservice"]
EXPOSE 13333
...@@ -100,5 +100,21 @@ services: ...@@ -100,5 +100,21 @@ services:
networks: networks:
- milvus - milvus
dataservice:
image: ${TARGET_REPO}/dataservice:${TARGET_TAG}
build:
context: ../../../
dockerfile: build/docker/deploy/dataservice/Dockerfile
cache_from:
- ${SOURCE_REPO}/dataservice:${SOURCE_TAG}
environment:
PULSAR_ADDRESS: ${PULSAR_ADDRESS}
ETCD_ADDRESS: ${ETCD_ADDRESS}
MASTER_ADDRESS: ${MASTER_ADDRESS}
MINIO_ADDRESS: ${MINIO_ADDRESS}
networks:
- milvus
networks: networks:
milvus: milvus:
...@@ -57,11 +57,8 @@ func (handler *ddHandler) handleCreateCollection(msg *msgstream.CreateCollection ...@@ -57,11 +57,8 @@ func (handler *ddHandler) handleCreateCollection(msg *msgstream.CreateCollection
} }
func (handler *ddHandler) handleDropCollection(msg *msgstream.DropCollectionMsg) error { func (handler *ddHandler) handleDropCollection(msg *msgstream.DropCollectionMsg) error {
ids := handler.meta.GetSegmentsByCollectionID(msg.CollectionID) segmentsOfCollection := handler.meta.GetSegmentsOfCollection(msg.CollectionID)
for _, id := range ids { for _, id := range segmentsOfCollection {
if err := handler.meta.DropSegment(id); err != nil {
continue
}
handler.segmentAllocator.DropSegment(id) handler.segmentAllocator.DropSegment(id)
} }
if err := handler.meta.DropCollection(msg.CollectionID); err != nil { if err := handler.meta.DropCollection(msg.CollectionID); err != nil {
...@@ -71,11 +68,8 @@ func (handler *ddHandler) handleDropCollection(msg *msgstream.DropCollectionMsg) ...@@ -71,11 +68,8 @@ func (handler *ddHandler) handleDropCollection(msg *msgstream.DropCollectionMsg)
} }
func (handler *ddHandler) handleDropPartition(msg *msgstream.DropPartitionMsg) error { func (handler *ddHandler) handleDropPartition(msg *msgstream.DropPartitionMsg) error {
ids := handler.meta.GetSegmentsByCollectionAndPartitionID(msg.CollectionID, msg.PartitionID) segmentsOfPartition := handler.meta.GetSegmentsOfPartition(msg.CollectionID, msg.PartitionID)
for _, id := range ids { for _, id := range segmentsOfPartition {
if err := handler.meta.DropSegment(id); err != nil {
return err
}
handler.segmentAllocator.DropSegment(id) handler.segmentAllocator.DropSegment(id)
} }
if err := handler.meta.DropPartition(msg.CollectionID, msg.PartitionID); err != nil { if err := handler.meta.DropPartition(msg.CollectionID, msg.PartitionID); err != nil {
......
...@@ -97,6 +97,17 @@ func (meta *meta) DropCollection(collID UniqueID) error { ...@@ -97,6 +97,17 @@ func (meta *meta) DropCollection(collID UniqueID) error {
if _, ok := meta.collID2Info[collID]; !ok { if _, ok := meta.collID2Info[collID]; !ok {
return newErrCollectionNotFound(collID) return newErrCollectionNotFound(collID)
} }
ids := make([]UniqueID, 0)
for i, info := range meta.segID2Info {
if info.CollectionID == collID {
delete(meta.segID2Info, i)
ids = append(ids, i)
}
}
if err := meta.removeSegments(ids); err != nil {
_ = meta.reloadFromKV()
return err
}
delete(meta.collID2Info, collID) delete(meta.collID2Info, collID)
return nil return nil
} }
...@@ -118,6 +129,30 @@ func (meta *meta) GetCollection(collectionID UniqueID) (*collectionInfo, error) ...@@ -118,6 +129,30 @@ func (meta *meta) GetCollection(collectionID UniqueID) (*collectionInfo, error)
return collectionInfo, nil return collectionInfo, nil
} }
func (meta *meta) GetNumRowsOfCollection(collectionID UniqueID) (int64, error) {
meta.ddLock.RLock()
defer meta.ddLock.RUnlock()
var ret int64 = 0
for _, info := range meta.segID2Info {
if info.CollectionID == collectionID {
ret += info.NumRows
}
}
return ret, nil
}
func (meta *meta) GetMemSizeOfCollection(collectionID UniqueID) (int64, error) {
meta.ddLock.RLock()
defer meta.ddLock.RUnlock()
var ret int64 = 0
for _, info := range meta.segID2Info {
if info.CollectionID == collectionID {
ret += info.MemSize
}
}
return ret, nil
}
func (meta *meta) AddSegment(segmentInfo *datapb.SegmentInfo) error { func (meta *meta) AddSegment(segmentInfo *datapb.SegmentInfo) error {
meta.ddLock.Lock() meta.ddLock.Lock()
defer meta.ddLock.Unlock() defer meta.ddLock.Unlock()
...@@ -152,6 +187,10 @@ func (meta *meta) DropSegment(segmentID UniqueID) error { ...@@ -152,6 +187,10 @@ func (meta *meta) DropSegment(segmentID UniqueID) error {
return newErrSegmentNotFound(segmentID) return newErrSegmentNotFound(segmentID)
} }
delete(meta.segID2Info, segmentID) delete(meta.segID2Info, segmentID)
if err := meta.removeSegmentInfo(segmentID); err != nil {
_ = meta.reloadFromKV()
return err
}
return nil return nil
} }
...@@ -240,7 +279,7 @@ func (meta *meta) SetSegmentState(segmentID UniqueID, state datapb.SegmentState) ...@@ -240,7 +279,7 @@ func (meta *meta) SetSegmentState(segmentID UniqueID, state datapb.SegmentState)
return nil return nil
} }
func (meta *meta) GetSegmentsByCollectionID(collectionID UniqueID) []UniqueID { func (meta *meta) GetSegmentsOfCollection(collectionID UniqueID) []UniqueID {
meta.ddLock.RLock() meta.ddLock.RLock()
defer meta.ddLock.RUnlock() defer meta.ddLock.RUnlock()
...@@ -253,7 +292,7 @@ func (meta *meta) GetSegmentsByCollectionID(collectionID UniqueID) []UniqueID { ...@@ -253,7 +292,7 @@ func (meta *meta) GetSegmentsByCollectionID(collectionID UniqueID) []UniqueID {
return ret return ret
} }
func (meta *meta) GetSegmentsByCollectionAndPartitionID(collectionID, partitionID UniqueID) []UniqueID { func (meta *meta) GetSegmentsOfPartition(collectionID, partitionID UniqueID) []UniqueID {
meta.ddLock.RLock() meta.ddLock.RLock()
defer meta.ddLock.RUnlock() defer meta.ddLock.RUnlock()
...@@ -291,7 +330,6 @@ func (meta *meta) DropPartition(collID UniqueID, partitionID UniqueID) error { ...@@ -291,7 +330,6 @@ func (meta *meta) DropPartition(collID UniqueID, partitionID UniqueID) error {
if !ok { if !ok {
return newErrCollectionNotFound(collID) return newErrCollectionNotFound(collID)
} }
idx := -1 idx := -1
for i, id := range collection.Partitions { for i, id := range collection.Partitions {
if partitionID == id { if partitionID == id {
...@@ -299,15 +337,37 @@ func (meta *meta) DropPartition(collID UniqueID, partitionID UniqueID) error { ...@@ -299,15 +337,37 @@ func (meta *meta) DropPartition(collID UniqueID, partitionID UniqueID) error {
break break
} }
} }
if idx == -1 { if idx == -1 {
return fmt.Errorf("cannot find partition id %d", partitionID) return fmt.Errorf("cannot find partition id %d", partitionID)
} }
ids := make([]UniqueID, 0)
for i, info := range meta.segID2Info {
if info.PartitionID == partitionID {
delete(meta.segID2Info, i)
ids = append(ids, i)
}
}
if err := meta.removeSegments(ids); err != nil {
_ = meta.reloadFromKV()
return err
}
collection.Partitions = append(collection.Partitions[:idx], collection.Partitions[idx+1:]...) collection.Partitions = append(collection.Partitions[:idx], collection.Partitions[idx+1:]...)
return nil return nil
} }
func (meta *meta) GetNumRowsOfPartition(collectionID UniqueID, partitionID UniqueID) (int64, error) {
meta.ddLock.RLock()
defer meta.ddLock.RUnlock()
var ret int64 = 0
for _, info := range meta.segID2Info {
if info.CollectionID == collectionID && info.PartitionID == partitionID {
ret += info.NumRows
}
}
return ret, nil
}
func (meta *meta) saveSegmentInfo(segmentInfo *datapb.SegmentInfo) error { func (meta *meta) saveSegmentInfo(segmentInfo *datapb.SegmentInfo) error {
segBytes := proto.MarshalTextString(segmentInfo) segBytes := proto.MarshalTextString(segmentInfo)
...@@ -317,6 +377,15 @@ func (meta *meta) saveSegmentInfo(segmentInfo *datapb.SegmentInfo) error { ...@@ -317,6 +377,15 @@ func (meta *meta) saveSegmentInfo(segmentInfo *datapb.SegmentInfo) error {
func (meta *meta) removeSegmentInfo(segID UniqueID) error { func (meta *meta) removeSegmentInfo(segID UniqueID) error {
return meta.client.Remove("/segment/" + strconv.FormatInt(segID, 10)) return meta.client.Remove("/segment/" + strconv.FormatInt(segID, 10))
} }
func (meta *meta) removeSegments(segIDs []UniqueID) error {
segmentPaths := make([]string, len(segIDs))
for i, id := range segIDs {
segmentPaths[i] = "/segment/" + strconv.FormatInt(id, 10)
}
return meta.client.MultiRemove(segmentPaths)
}
func BuildSegment(collectionID UniqueID, partitionID UniqueID, segmentID UniqueID, channelRange []string) (*datapb.SegmentInfo, error) { func BuildSegment(collectionID UniqueID, partitionID UniqueID, segmentID UniqueID, channelRange []string) (*datapb.SegmentInfo, error) {
return &datapb.SegmentInfo{ return &datapb.SegmentInfo{
SegmentID: segmentID, SegmentID: segmentID,
......
...@@ -55,10 +55,10 @@ func TestSegment(t *testing.T) { ...@@ -55,10 +55,10 @@ func TestSegment(t *testing.T) {
info, err := meta.GetSegment(segmentInfo.SegmentID) info, err := meta.GetSegment(segmentInfo.SegmentID)
assert.Nil(t, err) assert.Nil(t, err)
assert.EqualValues(t, segmentInfo, info) assert.EqualValues(t, segmentInfo, info)
ids := meta.GetSegmentsByCollectionID(id) ids := meta.GetSegmentsOfCollection(id)
assert.EqualValues(t, 1, len(ids)) assert.EqualValues(t, 1, len(ids))
assert.EqualValues(t, segmentInfo.SegmentID, ids[0]) assert.EqualValues(t, segmentInfo.SegmentID, ids[0])
ids = meta.GetSegmentsByCollectionAndPartitionID(id, 100) ids = meta.GetSegmentsOfPartition(id, 100)
assert.EqualValues(t, 1, len(ids)) assert.EqualValues(t, 1, len(ids))
assert.EqualValues(t, segmentInfo.SegmentID, ids[0]) assert.EqualValues(t, segmentInfo.SegmentID, ids[0])
err = meta.SealSegment(segmentInfo.SegmentID, 100) err = meta.SealSegment(segmentInfo.SegmentID, 100)
...@@ -102,3 +102,31 @@ func TestPartition(t *testing.T) { ...@@ -102,3 +102,31 @@ func TestPartition(t *testing.T) {
err = meta.DropPartition(id, 10) err = meta.DropPartition(id, 10)
assert.NotNil(t, err) assert.NotNil(t, err)
} }
func TestGetCount(t *testing.T) {
mockAllocator := newMockAllocator()
meta, err := newMemoryMeta(mockAllocator)
assert.Nil(t, err)
id, err := mockAllocator.allocID()
assert.Nil(t, err)
segID, err := mockAllocator.allocID()
assert.Nil(t, err)
nums, err := meta.GetNumRowsOfCollection(id)
assert.Nil(t, err)
assert.EqualValues(t, 0, nums)
segment, err := BuildSegment(id, 100, segID, []string{"c1"})
assert.Nil(t, err)
segment.NumRows = 100
err = meta.AddSegment(segment)
assert.Nil(t, err)
segID, err = mockAllocator.allocID()
assert.Nil(t, err)
segment, err = BuildSegment(id, 100, segID, []string{"c1"})
assert.Nil(t, err)
segment.NumRows = 300
err = meta.AddSegment(segment)
assert.Nil(t, err)
nums, err = meta.GetNumRowsOfCollection(id)
assert.Nil(t, err)
assert.EqualValues(t, 400, nums)
}
...@@ -51,6 +51,7 @@ type DataService interface { ...@@ -51,6 +51,7 @@ type DataService interface {
GetCollectionStatistics(req *datapb.CollectionStatsRequest) (*datapb.CollectionStatsResponse, error) GetCollectionStatistics(req *datapb.CollectionStatsRequest) (*datapb.CollectionStatsResponse, error)
GetPartitionStatistics(req *datapb.PartitionStatsRequest) (*datapb.PartitionStatsResponse, error) GetPartitionStatistics(req *datapb.PartitionStatsRequest) (*datapb.PartitionStatsResponse, error)
GetComponentStates() (*internalpb2.ComponentStates, error) GetComponentStates() (*internalpb2.ComponentStates, error)
GetCount(req *datapb.CollectionCountRequest) (*datapb.CollectionCountResponse, error)
} }
type MasterClient interface { type MasterClient interface {
...@@ -606,7 +607,7 @@ func (s *Server) ShowSegments(req *datapb.ShowSegmentRequest) (*datapb.ShowSegme ...@@ -606,7 +607,7 @@ func (s *Server) ShowSegments(req *datapb.ShowSegmentRequest) (*datapb.ShowSegme
resp.Status.Reason = "server is initializing" resp.Status.Reason = "server is initializing"
return resp, nil return resp, nil
} }
ids := s.meta.GetSegmentsByCollectionAndPartitionID(req.CollectionID, req.PartitionID) ids := s.meta.GetSegmentsOfPartition(req.CollectionID, req.PartitionID)
resp.Status.ErrorCode = commonpb.ErrorCode_SUCCESS resp.Status.ErrorCode = commonpb.ErrorCode_SUCCESS
resp.SegmentIDs = ids resp.SegmentIDs = ids
return resp, nil return resp, nil
...@@ -696,8 +697,25 @@ func (s *Server) GetInsertChannels(req *datapb.InsertChannelRequest) ([]string, ...@@ -696,8 +697,25 @@ func (s *Server) GetInsertChannels(req *datapb.InsertChannelRequest) ([]string,
} }
func (s *Server) GetCollectionStatistics(req *datapb.CollectionStatsRequest) (*datapb.CollectionStatsResponse, error) { func (s *Server) GetCollectionStatistics(req *datapb.CollectionStatsRequest) (*datapb.CollectionStatsResponse, error) {
// todo implement resp := &datapb.CollectionStatsResponse{
return nil, nil Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UNEXPECTED_ERROR,
},
}
nums, err := s.meta.GetNumRowsOfCollection(req.CollectionID)
if err != nil {
resp.Status.Reason = err.Error()
return resp, nil
}
memsize, err := s.meta.GetMemSizeOfCollection(req.CollectionID)
if err != nil {
resp.Status.Reason = err.Error()
return resp, nil
}
resp.Status.ErrorCode = commonpb.ErrorCode_SUCCESS
resp.Stats = append(resp.Stats, &commonpb.KeyValuePair{Key: "nums", Value: strconv.FormatInt(nums, 10)})
resp.Stats = append(resp.Stats, &commonpb.KeyValuePair{Key: "memsize", Value: strconv.FormatInt(memsize, 10)})
return resp, nil
} }
func (s *Server) GetPartitionStatistics(req *datapb.PartitionStatsRequest) (*datapb.PartitionStatsResponse, error) { func (s *Server) GetPartitionStatistics(req *datapb.PartitionStatsRequest) (*datapb.PartitionStatsResponse, error) {
...@@ -708,3 +726,19 @@ func (s *Server) GetPartitionStatistics(req *datapb.PartitionStatsRequest) (*dat ...@@ -708,3 +726,19 @@ func (s *Server) GetPartitionStatistics(req *datapb.PartitionStatsRequest) (*dat
func (s *Server) GetSegmentInfoChannel() (string, error) { func (s *Server) GetSegmentInfoChannel() (string, error) {
return Params.SegmentInfoChannelName, nil return Params.SegmentInfoChannelName, nil
} }
func (s *Server) GetCount(req *datapb.CollectionCountRequest) (*datapb.CollectionCountResponse, error) {
resp := &datapb.CollectionCountResponse{
Status: &commonpb.Status{
ErrorCode: commonpb.ErrorCode_UNEXPECTED_ERROR,
},
}
nums, err := s.meta.GetNumRowsOfCollection(req.CollectionID)
if err != nil {
resp.Status.Reason = err.Error()
return resp, nil
}
resp.Count = nums
resp.Status.ErrorCode = commonpb.ErrorCode_SUCCESS
return resp, nil
}
...@@ -133,3 +133,7 @@ func (c *Client) GetSegmentInfoChannel() (string, error) { ...@@ -133,3 +133,7 @@ func (c *Client) GetSegmentInfoChannel() (string, error) {
} }
return resp.Value, nil return resp.Value, nil
} }
func (c *Client) GetCount(req *datapb.CollectionCountRequest) (*datapb.CollectionCountResponse, error) {
return c.grpcClient.GetCount(context.Background(), req)
}
...@@ -178,3 +178,7 @@ func (s *Service) GetSegmentInfoChannel(ctx context.Context, empty *commonpb.Emp ...@@ -178,3 +178,7 @@ func (s *Service) GetSegmentInfoChannel(ctx context.Context, empty *commonpb.Emp
resp.Value = channel resp.Value = channel
return resp, nil return resp, nil
} }
func (s *Service) GetCount(ctx context.Context, request *datapb.CollectionCountRequest) (*datapb.CollectionCountResponse, error) {
return s.server.GetCount(request)
}
...@@ -155,8 +155,8 @@ message SegmentMsg{ ...@@ -155,8 +155,8 @@ message SegmentMsg{
message CollectionStatsRequest{ message CollectionStatsRequest{
common.MsgBase base = 1; common.MsgBase base = 1;
string dbID = 2; int64 dbID = 2;
string collectionID = 3; int64 collectionID = 3;
} }
message CollectionStatsResponse { message CollectionStatsResponse {
...@@ -166,9 +166,9 @@ message CollectionStatsResponse { ...@@ -166,9 +166,9 @@ message CollectionStatsResponse {
message PartitionStatsRequest{ message PartitionStatsRequest{
common.MsgBase base = 1; common.MsgBase base = 1;
string dbID = 2; int64 dbID = 2;
string collectionID = 3; int64 collectionID = 3;
string partitionID = 4; int64 partitionID = 4;
} }
message PartitionStatsResponse { message PartitionStatsResponse {
...@@ -192,6 +192,17 @@ message DDLFlushMeta { ...@@ -192,6 +192,17 @@ message DDLFlushMeta {
repeated string binlog_paths = 2; repeated string binlog_paths = 2;
} }
message CollectionCountRequest{
common.MsgBase base = 1;
int64 dbID = 2;
int64 collectionID = 3;
}
message CollectionCountResponse{
common.Status status = 1;
int64 count = 2;
}
service DataService { service DataService {
rpc RegisterNode(RegisterNodeRequest) returns (RegisterNodeResponse) {} rpc RegisterNode(RegisterNodeRequest) returns (RegisterNodeResponse) {}
...@@ -212,6 +223,7 @@ service DataService { ...@@ -212,6 +223,7 @@ service DataService {
rpc GetStatisticsChannel(common.Empty) returns(milvus.StringResponse){} rpc GetStatisticsChannel(common.Empty) returns(milvus.StringResponse){}
rpc GetSegmentInfoChannel(common.Empty) returns (milvus.StringResponse){} rpc GetSegmentInfoChannel(common.Empty) returns (milvus.StringResponse){}
rpc GetCount(CollectionCountRequest) returns (CollectionCountResponse){}
} }
service DataNode { service DataNode {
......
...@@ -1236,8 +1236,8 @@ func (m *SegmentMsg) GetSegment() *SegmentInfo { ...@@ -1236,8 +1236,8 @@ func (m *SegmentMsg) GetSegment() *SegmentInfo {
type CollectionStatsRequest struct { type CollectionStatsRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"` Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
DbID string `protobuf:"bytes,2,opt,name=dbID,proto3" json:"dbID,omitempty"` DbID int64 `protobuf:"varint,2,opt,name=dbID,proto3" json:"dbID,omitempty"`
CollectionID string `protobuf:"bytes,3,opt,name=collectionID,proto3" json:"collectionID,omitempty"` CollectionID int64 `protobuf:"varint,3,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -1275,18 +1275,18 @@ func (m *CollectionStatsRequest) GetBase() *commonpb.MsgBase { ...@@ -1275,18 +1275,18 @@ func (m *CollectionStatsRequest) GetBase() *commonpb.MsgBase {
return nil return nil
} }
func (m *CollectionStatsRequest) GetDbID() string { func (m *CollectionStatsRequest) GetDbID() int64 {
if m != nil { if m != nil {
return m.DbID return m.DbID
} }
return "" return 0
} }
func (m *CollectionStatsRequest) GetCollectionID() string { func (m *CollectionStatsRequest) GetCollectionID() int64 {
if m != nil { if m != nil {
return m.CollectionID return m.CollectionID
} }
return "" return 0
} }
type CollectionStatsResponse struct { type CollectionStatsResponse struct {
...@@ -1338,9 +1338,9 @@ func (m *CollectionStatsResponse) GetStatus() *commonpb.Status { ...@@ -1338,9 +1338,9 @@ func (m *CollectionStatsResponse) GetStatus() *commonpb.Status {
type PartitionStatsRequest struct { type PartitionStatsRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"` Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
DbID string `protobuf:"bytes,2,opt,name=dbID,proto3" json:"dbID,omitempty"` DbID int64 `protobuf:"varint,2,opt,name=dbID,proto3" json:"dbID,omitempty"`
CollectionID string `protobuf:"bytes,3,opt,name=collectionID,proto3" json:"collectionID,omitempty"` CollectionID int64 `protobuf:"varint,3,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
PartitionID string `protobuf:"bytes,4,opt,name=partitionID,proto3" json:"partitionID,omitempty"` PartitionID int64 `protobuf:"varint,4,opt,name=partitionID,proto3" json:"partitionID,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -1378,25 +1378,25 @@ func (m *PartitionStatsRequest) GetBase() *commonpb.MsgBase { ...@@ -1378,25 +1378,25 @@ func (m *PartitionStatsRequest) GetBase() *commonpb.MsgBase {
return nil return nil
} }
func (m *PartitionStatsRequest) GetDbID() string { func (m *PartitionStatsRequest) GetDbID() int64 {
if m != nil { if m != nil {
return m.DbID return m.DbID
} }
return "" return 0
} }
func (m *PartitionStatsRequest) GetCollectionID() string { func (m *PartitionStatsRequest) GetCollectionID() int64 {
if m != nil { if m != nil {
return m.CollectionID return m.CollectionID
} }
return "" return 0
} }
func (m *PartitionStatsRequest) GetPartitionID() string { func (m *PartitionStatsRequest) GetPartitionID() int64 {
if m != nil { if m != nil {
return m.PartitionID return m.PartitionID
} }
return "" return 0
} }
type PartitionStatsResponse struct { type PartitionStatsResponse struct {
...@@ -1595,6 +1595,108 @@ func (m *DDLFlushMeta) GetBinlogPaths() []string { ...@@ -1595,6 +1595,108 @@ func (m *DDLFlushMeta) GetBinlogPaths() []string {
return nil return nil
} }
type CollectionCountRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
DbID int64 `protobuf:"varint,2,opt,name=dbID,proto3" json:"dbID,omitempty"`
CollectionID int64 `protobuf:"varint,3,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CollectionCountRequest) Reset() { *m = CollectionCountRequest{} }
func (m *CollectionCountRequest) String() string { return proto.CompactTextString(m) }
func (*CollectionCountRequest) ProtoMessage() {}
func (*CollectionCountRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_3385cd32ad6cfe64, []int{26}
}
func (m *CollectionCountRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CollectionCountRequest.Unmarshal(m, b)
}
func (m *CollectionCountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CollectionCountRequest.Marshal(b, m, deterministic)
}
func (m *CollectionCountRequest) XXX_Merge(src proto.Message) {
xxx_messageInfo_CollectionCountRequest.Merge(m, src)
}
func (m *CollectionCountRequest) XXX_Size() int {
return xxx_messageInfo_CollectionCountRequest.Size(m)
}
func (m *CollectionCountRequest) XXX_DiscardUnknown() {
xxx_messageInfo_CollectionCountRequest.DiscardUnknown(m)
}
var xxx_messageInfo_CollectionCountRequest proto.InternalMessageInfo
func (m *CollectionCountRequest) GetBase() *commonpb.MsgBase {
if m != nil {
return m.Base
}
return nil
}
func (m *CollectionCountRequest) GetDbID() int64 {
if m != nil {
return m.DbID
}
return 0
}
func (m *CollectionCountRequest) GetCollectionID() int64 {
if m != nil {
return m.CollectionID
}
return 0
}
type CollectionCountResponse struct {
Status *commonpb.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
Count int64 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CollectionCountResponse) Reset() { *m = CollectionCountResponse{} }
func (m *CollectionCountResponse) String() string { return proto.CompactTextString(m) }
func (*CollectionCountResponse) ProtoMessage() {}
func (*CollectionCountResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_3385cd32ad6cfe64, []int{27}
}
func (m *CollectionCountResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CollectionCountResponse.Unmarshal(m, b)
}
func (m *CollectionCountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CollectionCountResponse.Marshal(b, m, deterministic)
}
func (m *CollectionCountResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_CollectionCountResponse.Merge(m, src)
}
func (m *CollectionCountResponse) XXX_Size() int {
return xxx_messageInfo_CollectionCountResponse.Size(m)
}
func (m *CollectionCountResponse) XXX_DiscardUnknown() {
xxx_messageInfo_CollectionCountResponse.DiscardUnknown(m)
}
var xxx_messageInfo_CollectionCountResponse proto.InternalMessageInfo
func (m *CollectionCountResponse) GetStatus() *commonpb.Status {
if m != nil {
return m.Status
}
return nil
}
func (m *CollectionCountResponse) GetCount() int64 {
if m != nil {
return m.Count
}
return 0
}
func init() { func init() {
proto.RegisterEnum("milvus.proto.data.SegmentState", SegmentState_name, SegmentState_value) proto.RegisterEnum("milvus.proto.data.SegmentState", SegmentState_name, SegmentState_value)
proto.RegisterType((*RegisterNodeRequest)(nil), "milvus.proto.data.RegisterNodeRequest") proto.RegisterType((*RegisterNodeRequest)(nil), "milvus.proto.data.RegisterNodeRequest")
...@@ -1623,112 +1725,116 @@ func init() { ...@@ -1623,112 +1725,116 @@ func init() {
proto.RegisterType((*FieldFlushMeta)(nil), "milvus.proto.data.FieldFlushMeta") proto.RegisterType((*FieldFlushMeta)(nil), "milvus.proto.data.FieldFlushMeta")
proto.RegisterType((*SegmentFlushMeta)(nil), "milvus.proto.data.SegmentFlushMeta") proto.RegisterType((*SegmentFlushMeta)(nil), "milvus.proto.data.SegmentFlushMeta")
proto.RegisterType((*DDLFlushMeta)(nil), "milvus.proto.data.DDLFlushMeta") proto.RegisterType((*DDLFlushMeta)(nil), "milvus.proto.data.DDLFlushMeta")
proto.RegisterType((*CollectionCountRequest)(nil), "milvus.proto.data.CollectionCountRequest")
proto.RegisterType((*CollectionCountResponse)(nil), "milvus.proto.data.CollectionCountResponse")
} }
func init() { proto.RegisterFile("data_service.proto", fileDescriptor_3385cd32ad6cfe64) } func init() { proto.RegisterFile("data_service.proto", fileDescriptor_3385cd32ad6cfe64) }
var fileDescriptor_3385cd32ad6cfe64 = []byte{ var fileDescriptor_3385cd32ad6cfe64 = []byte{
// 1596 bytes of a gzipped FileDescriptorProto // 1631 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x5d, 0x6f, 0x1b, 0xc5, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x5d, 0x6f, 0x1b, 0x45,
0x1a, 0xce, 0x66, 0xed, 0xd8, 0x7e, 0xed, 0x38, 0xee, 0xe4, 0xa3, 0xae, 0xdb, 0xd3, 0xa6, 0x7b, 0x17, 0xce, 0x66, 0xed, 0xd8, 0x3e, 0x76, 0x1c, 0x77, 0xf2, 0x51, 0xd7, 0xed, 0xdb, 0xa6, 0xfb,
0xd4, 0x26, 0xad, 0xce, 0x49, 0x8e, 0x52, 0x1d, 0x0a, 0x42, 0x42, 0x34, 0x75, 0x1a, 0x59, 0x6d, 0xaa, 0x4d, 0x5a, 0xbd, 0x6f, 0x82, 0x52, 0x41, 0x41, 0x48, 0x88, 0xa6, 0x4e, 0x23, 0xab, 0x4d,
0xa2, 0x68, 0x5c, 0xa8, 0xc8, 0x8d, 0xb5, 0xb6, 0xa7, 0xce, 0xc0, 0x7e, 0x98, 0x9d, 0x71, 0x93, 0x14, 0x8d, 0x0b, 0x15, 0xb9, 0xb1, 0xd6, 0xf6, 0xd4, 0x19, 0xf0, 0xee, 0x9a, 0x9d, 0x71, 0x93,
0xe6, 0x06, 0xc4, 0x05, 0x08, 0x6e, 0xca, 0x15, 0x48, 0x70, 0x83, 0x84, 0xf8, 0x1d, 0xfc, 0x05, 0xe6, 0x06, 0xc4, 0x05, 0x08, 0x6e, 0xe0, 0x0a, 0x24, 0xb8, 0x41, 0x42, 0xfc, 0x0e, 0xfe, 0x02,
0x7e, 0x0f, 0x57, 0x68, 0x67, 0x66, 0xbf, 0xec, 0x4d, 0x6c, 0xdc, 0x94, 0xde, 0x79, 0x5e, 0x3f, 0x3f, 0x86, 0x2b, 0xae, 0xd0, 0xce, 0xcc, 0x7e, 0xd9, 0x9b, 0xac, 0x71, 0xbf, 0xee, 0x3c, 0xc7,
0xf3, 0x7e, 0xbf, 0xcf, 0xcc, 0x2c, 0xa0, 0xae, 0xc9, 0xcd, 0x16, 0x23, 0xde, 0x0b, 0xda, 0x21, 0xcf, 0x9c, 0x73, 0xe6, 0x7c, 0x3c, 0x67, 0x66, 0x01, 0x75, 0x4d, 0x6e, 0xb6, 0x18, 0x71, 0x9f,
0x1b, 0x7d, 0xcf, 0xe5, 0x2e, 0xba, 0x64, 0x53, 0xeb, 0xc5, 0x80, 0xc9, 0xd5, 0x86, 0x0f, 0xa8, 0xd1, 0x0e, 0xd9, 0x18, 0xb8, 0x0e, 0x77, 0xd0, 0x05, 0x8b, 0xf6, 0x9f, 0x0d, 0x99, 0x5c, 0x6d,
0x95, 0x3a, 0xae, 0x6d, 0xbb, 0x8e, 0x14, 0xd5, 0xca, 0xd4, 0xe1, 0xc4, 0x73, 0x4c, 0x4b, 0xad, 0x78, 0x80, 0x5a, 0xa9, 0xe3, 0x58, 0x96, 0x63, 0x4b, 0x51, 0xad, 0x4c, 0x6d, 0x4e, 0x5c, 0xdb,
0x4b, 0xf1, 0x0d, 0xc6, 0x17, 0xb0, 0x88, 0x49, 0x8f, 0x32, 0x4e, 0xbc, 0x7d, 0xb7, 0x4b, 0x30, 0xec, 0xab, 0x75, 0x29, 0xba, 0xc1, 0xf8, 0x02, 0x16, 0x31, 0xe9, 0x51, 0xc6, 0x89, 0xbb, 0xef,
0xf9, 0x7c, 0x40, 0x18, 0x47, 0xff, 0x83, 0x4c, 0xdb, 0x64, 0xa4, 0xaa, 0xad, 0x6a, 0xeb, 0xc5, 0x74, 0x09, 0x26, 0x9f, 0x0f, 0x09, 0xe3, 0xe8, 0x2d, 0xc8, 0xb4, 0x4d, 0x46, 0xaa, 0xda, 0xaa,
0xad, 0x6b, 0x1b, 0x09, 0x23, 0x4a, 0xfd, 0x1e, 0xeb, 0x6d, 0x9b, 0x8c, 0x60, 0x81, 0x44, 0xef, 0xb6, 0x5e, 0xdc, 0xba, 0xb2, 0x11, 0x33, 0xa2, 0xd4, 0xef, 0xb1, 0xde, 0xb6, 0xc9, 0x08, 0x16,
0x40, 0xce, 0xec, 0x76, 0x3d, 0xc2, 0x58, 0x75, 0xf6, 0x9c, 0x4d, 0x0f, 0x24, 0x06, 0x07, 0x60, 0x48, 0xf4, 0x0e, 0xe4, 0xcc, 0x6e, 0xd7, 0x25, 0x8c, 0x55, 0x67, 0xcf, 0xd9, 0x74, 0x4f, 0x62,
0xe3, 0x95, 0x06, 0x4b, 0x49, 0x0f, 0x58, 0xdf, 0x75, 0x18, 0x41, 0xdb, 0x50, 0xa4, 0x0e, 0xe5, 0xb0, 0x0f, 0x36, 0xbe, 0xd7, 0x60, 0x29, 0xee, 0x01, 0x1b, 0x38, 0x36, 0x23, 0x68, 0x1b, 0x8a,
0xad, 0xbe, 0xe9, 0x99, 0x36, 0x53, 0x9e, 0xdc, 0x4c, 0x2a, 0x0d, 0x43, 0x6b, 0x38, 0x94, 0x1f, 0xd4, 0xa6, 0xbc, 0x35, 0x30, 0x5d, 0xd3, 0x62, 0xca, 0x93, 0xeb, 0x71, 0xa5, 0xc1, 0xd1, 0x1a,
0x08, 0x20, 0x06, 0x1a, 0xfe, 0x46, 0xf7, 0x60, 0x8e, 0x71, 0x93, 0x0f, 0x02, 0x9f, 0xae, 0xa6, 0x36, 0xe5, 0x07, 0x02, 0x88, 0x81, 0x06, 0xbf, 0xd1, 0x1d, 0x98, 0x63, 0xdc, 0xe4, 0x43, 0xdf,
0xfa, 0xd4, 0x14, 0x10, 0xac, 0xa0, 0xc6, 0x1f, 0x1a, 0x94, 0x9a, 0xa4, 0xd7, 0xa8, 0x07, 0xc9, 0xa7, 0xcb, 0x89, 0x3e, 0x35, 0x05, 0x04, 0x2b, 0xa8, 0xf1, 0xa7, 0x06, 0xa5, 0x26, 0xe9, 0x35,
0x58, 0x82, 0x6c, 0xc7, 0x1d, 0x38, 0x5c, 0xf8, 0x30, 0x8f, 0xe5, 0x02, 0xad, 0x42, 0xb1, 0x73, 0xea, 0x7e, 0x30, 0x96, 0x20, 0xdb, 0x71, 0x86, 0x36, 0x17, 0x3e, 0xcc, 0x63, 0xb9, 0x40, 0xab,
0x64, 0x3a, 0x0e, 0xb1, 0xf6, 0x4d, 0x9b, 0x08, 0x03, 0x05, 0x1c, 0x17, 0x21, 0x03, 0x4a, 0x1d, 0x50, 0xec, 0x1c, 0x99, 0xb6, 0x4d, 0xfa, 0xfb, 0xa6, 0x45, 0x84, 0x81, 0x02, 0x8e, 0x8a, 0x90,
0xd7, 0xb2, 0x48, 0x87, 0x53, 0xd7, 0x69, 0xd4, 0xab, 0xfa, 0xaa, 0xb6, 0xae, 0xe3, 0x84, 0xcc, 0x01, 0xa5, 0x8e, 0xd3, 0xef, 0x93, 0x0e, 0xa7, 0x8e, 0xdd, 0xa8, 0x57, 0xf5, 0x55, 0x6d, 0x5d,
0xd7, 0xd2, 0x37, 0x3d, 0x4e, 0x15, 0x24, 0x23, 0x20, 0x71, 0x11, 0xba, 0x0a, 0x05, 0x7f, 0x47, 0xc7, 0x31, 0x99, 0xa7, 0x65, 0x60, 0xba, 0x9c, 0x2a, 0x48, 0x46, 0x40, 0xa2, 0x22, 0x74, 0x19,
0xcb, 0xf1, 0xad, 0x64, 0x85, 0x95, 0xbc, 0x2f, 0x10, 0x26, 0x6e, 0x41, 0x39, 0xc4, 0x4a, 0xc4, 0x0a, 0xde, 0x8e, 0x96, 0xed, 0x59, 0xc9, 0x0a, 0x2b, 0x79, 0x4f, 0x20, 0x4c, 0xdc, 0x80, 0x72,
0x9c, 0x40, 0xcc, 0x87, 0x52, 0x1f, 0x66, 0x7c, 0xaf, 0x01, 0x7a, 0xc0, 0x18, 0xed, 0x39, 0x89, 0x80, 0x95, 0x88, 0x39, 0x81, 0x98, 0x0f, 0xa4, 0x1e, 0xcc, 0xf8, 0x41, 0x03, 0x74, 0x8f, 0x31,
0xc0, 0x56, 0x60, 0xce, 0x71, 0xbb, 0xa4, 0x51, 0x17, 0x91, 0xe9, 0x58, 0xad, 0x7c, 0x93, 0x7d, 0xda, 0xb3, 0x63, 0x07, 0x5b, 0x81, 0x39, 0xdb, 0xe9, 0x92, 0x46, 0x5d, 0x9c, 0x4c, 0xc7, 0x6a,
0x42, 0xbc, 0x96, 0xe7, 0x5a, 0x41, 0x60, 0x79, 0x5f, 0x80, 0x5d, 0x8b, 0xa0, 0x1d, 0x98, 0x67, 0xe5, 0x99, 0x1c, 0x10, 0xe2, 0xb6, 0x5c, 0xa7, 0xef, 0x1f, 0x2c, 0xef, 0x09, 0xb0, 0xd3, 0x27,
0x31, 0x25, 0xac, 0xaa, 0xaf, 0xea, 0xeb, 0xc5, 0xad, 0x1b, 0x1b, 0x23, 0x8d, 0xb8, 0x11, 0x37, 0x68, 0x07, 0xe6, 0x59, 0x44, 0x09, 0xab, 0xea, 0xab, 0xfa, 0x7a, 0x71, 0xeb, 0xda, 0xc6, 0x58,
0x86, 0x93, 0xbb, 0x8c, 0xdf, 0x67, 0x61, 0x41, 0xfc, 0x2f, 0xfd, 0xb2, 0x89, 0x23, 0x12, 0x2d, 0x21, 0x6e, 0x44, 0x8d, 0xe1, 0xf8, 0x2e, 0xe3, 0x8f, 0x59, 0x58, 0x10, 0xff, 0x4b, 0xbf, 0x2c,
0x40, 0xca, 0x1d, 0xb9, 0x98, 0x20, 0xd1, 0x61, 0x81, 0xf4, 0x78, 0x81, 0x86, 0xd3, 0x9f, 0x19, 0x62, 0x8b, 0x40, 0x0b, 0x90, 0x72, 0x47, 0x2e, 0x26, 0x08, 0x74, 0x90, 0x20, 0x3d, 0x9a, 0xa0,
0x9f, 0xfe, 0xec, 0x68, 0xfa, 0x6f, 0x40, 0x91, 0x9c, 0xf4, 0xa9, 0x47, 0x5a, 0x9c, 0xaa, 0xf4, 0xd1, 0xf0, 0x67, 0xd2, 0xc3, 0x9f, 0x1d, 0x0f, 0xff, 0x35, 0x28, 0x92, 0x93, 0x01, 0x75, 0x49,
0x66, 0x30, 0x48, 0xd1, 0x53, 0x6a, 0x93, 0x58, 0x8f, 0xe5, 0x26, 0xee, 0xb1, 0x64, 0x51, 0xf3, 0x8b, 0x53, 0x15, 0xde, 0x0c, 0x06, 0x29, 0x7a, 0x4c, 0x2d, 0x12, 0xa9, 0xb1, 0xdc, 0xc4, 0x35,
0x63, 0x8b, 0x5a, 0x48, 0x2b, 0xea, 0x4f, 0x1a, 0x2c, 0x26, 0x8a, 0xaa, 0x06, 0x67, 0x1f, 0x2a, 0x16, 0x4f, 0x6a, 0x3e, 0x35, 0xa9, 0x85, 0xa4, 0xa4, 0xfe, 0xac, 0xc1, 0x62, 0x2c, 0xa9, 0xaa,
0x2c, 0x99, 0x58, 0x7f, 0x7a, 0xfc, 0x1a, 0x19, 0x67, 0xd5, 0x28, 0x82, 0xe2, 0x91, 0xbd, 0xd3, 0x71, 0xf6, 0xa1, 0xc2, 0xe2, 0x81, 0xf5, 0xba, 0xc7, 0xcb, 0x91, 0x71, 0x56, 0x8e, 0x42, 0x28,
0x0d, 0xd1, 0x09, 0x94, 0x1e, 0x59, 0x03, 0x76, 0x34, 0x3d, 0xa1, 0x20, 0xc8, 0x74, 0xdb, 0x8d, 0x1e, 0xdb, 0x3b, 0x5d, 0x13, 0x9d, 0x40, 0xe9, 0x41, 0x7f, 0xc8, 0x8e, 0xa6, 0x27, 0x14, 0x04,
0xba, 0x30, 0xaa, 0x63, 0xf1, 0x7b, 0x92, 0x92, 0x1a, 0xbf, 0x68, 0x80, 0x9a, 0x47, 0xee, 0x71, 0x99, 0x6e, 0xbb, 0x51, 0x17, 0x46, 0x75, 0x2c, 0x7e, 0x4f, 0x92, 0x52, 0xe3, 0x57, 0x0d, 0x50,
0x93, 0xf4, 0x44, 0x40, 0x53, 0x3b, 0x30, 0x6c, 0x6c, 0x76, 0x7c, 0xff, 0xe8, 0xa3, 0xfd, 0x13, 0xf3, 0xc8, 0x39, 0x6e, 0x92, 0x9e, 0x38, 0xd0, 0xd4, 0x0e, 0x8c, 0x1a, 0x9b, 0x4d, 0xaf, 0x1f,
0x84, 0x91, 0x89, 0xc2, 0x30, 0x3e, 0x85, 0xc5, 0x84, 0x87, 0xaa, 0x70, 0xd7, 0x01, 0x98, 0x14, 0x7d, 0xbc, 0x7e, 0xfc, 0x63, 0x64, 0xc2, 0x63, 0x18, 0x9f, 0xc2, 0x62, 0xcc, 0x43, 0x95, 0xb8,
0x35, 0xea, 0xb2, 0x64, 0x3a, 0x8e, 0x49, 0xa6, 0x2b, 0xc4, 0x11, 0x2c, 0x29, 0x3b, 0xfe, 0x1f, 0xab, 0x00, 0x4c, 0x8a, 0x1a, 0x75, 0x99, 0x32, 0x1d, 0x47, 0x24, 0xd3, 0x25, 0xe2, 0x08, 0x96,
0x84, 0x4d, 0x9f, 0x8f, 0xa4, 0x7b, 0xb3, 0xc3, 0xee, 0x19, 0x3f, 0xea, 0x50, 0x89, 0x9b, 0x6a, 0x94, 0x1d, 0xef, 0x0f, 0xc2, 0xa6, 0x8f, 0x47, 0xdc, 0xbd, 0xd9, 0x51, 0xf7, 0x8c, 0x9f, 0x74,
0x38, 0xcf, 0x5d, 0x74, 0x0d, 0x0a, 0x21, 0x44, 0x8d, 0x75, 0x24, 0x40, 0xff, 0x87, 0xac, 0xef, 0xa8, 0x44, 0x4d, 0x35, 0xec, 0xa7, 0x0e, 0xba, 0x02, 0x85, 0x00, 0xa2, 0xda, 0x3a, 0x14, 0xa0,
0xa6, 0x1c, 0xea, 0xf2, 0x59, 0x1c, 0x12, 0x6a, 0xc4, 0x12, 0xed, 0xcf, 0x64, 0xc7, 0x23, 0x26, 0xb7, 0x21, 0xeb, 0xb9, 0x29, 0x9b, 0xba, 0x7c, 0x16, 0x87, 0x04, 0x1a, 0xb1, 0x44, 0x7b, 0x3d,
0x57, 0x33, 0xa9, 0xcb, 0x99, 0x94, 0x22, 0x31, 0x93, 0x37, 0xa0, 0xc8, 0x88, 0x69, 0x91, 0xae, 0xd9, 0x71, 0x89, 0xc9, 0x55, 0x4f, 0xea, 0xb2, 0x27, 0xa5, 0x48, 0xf4, 0xe4, 0x35, 0x28, 0x32,
0x04, 0x64, 0x24, 0x40, 0x8a, 0x04, 0xe0, 0x26, 0x94, 0x9e, 0xfb, 0xed, 0x19, 0x20, 0xb2, 0x02, 0x62, 0xf6, 0x49, 0x57, 0x02, 0x32, 0x12, 0x20, 0x45, 0x02, 0x70, 0x1d, 0x4a, 0x4f, 0xbd, 0xf2,
0x51, 0x54, 0x32, 0x01, 0x79, 0x0c, 0x0b, 0x8c, 0x9b, 0x1e, 0x6f, 0xf5, 0x5d, 0x26, 0x8a, 0xc9, 0xf4, 0x11, 0x59, 0x81, 0x28, 0x2a, 0x99, 0x80, 0x3c, 0x84, 0x05, 0xc6, 0x4d, 0x97, 0xb7, 0x06,
0xaa, 0x73, 0x69, 0x53, 0x14, 0x9e, 0x41, 0x7b, 0xac, 0x77, 0xa0, 0xa0, 0xb8, 0x2c, 0xb6, 0x06, 0x0e, 0x13, 0xc9, 0x64, 0xd5, 0xb9, 0xa4, 0x2e, 0x0a, 0x66, 0xd0, 0x1e, 0xeb, 0x1d, 0x28, 0x28,
0x4b, 0x86, 0x76, 0x61, 0x9e, 0x38, 0xdd, 0x98, 0xaa, 0xdc, 0xc4, 0xaa, 0x4a, 0xc4, 0xe9, 0x46, 0x2e, 0x8b, 0xad, 0xfe, 0x92, 0xa1, 0x5d, 0x98, 0x27, 0x76, 0x37, 0xa2, 0x2a, 0x37, 0xb1, 0xaa,
0x8a, 0xa2, 0x1e, 0xc8, 0x4f, 0xde, 0x03, 0xdf, 0x6a, 0xb0, 0x3c, 0xd4, 0x04, 0xaa, 0xe5, 0x22, 0x12, 0xb1, 0xbb, 0xa1, 0xa2, 0xb0, 0x06, 0xf2, 0x93, 0xd7, 0xc0, 0xb7, 0x1a, 0x2c, 0x8f, 0x14,
0x75, 0xda, 0xe4, 0xe4, 0xf5, 0xbe, 0xdc, 0x44, 0x64, 0x13, 0x14, 0xb7, 0xfe, 0x3d, 0xa6, 0x6c, 0x81, 0x2a, 0xb9, 0x50, 0x9d, 0x36, 0x39, 0x79, 0xbd, 0x2f, 0x37, 0x11, 0x59, 0x04, 0xc5, 0xad,
0x7e, 0x23, 0x60, 0xb5, 0xc5, 0xa0, 0x70, 0xb9, 0xe1, 0x30, 0xe2, 0xf1, 0x6d, 0xea, 0x58, 0x6e, 0xff, 0xa6, 0xa4, 0xcd, 0x2b, 0x04, 0xac, 0xb6, 0x18, 0x14, 0x2e, 0x36, 0x6c, 0x46, 0x5c, 0xbe,
0xef, 0xc0, 0xe4, 0xaf, 0xc1, 0x11, 0x89, 0xee, 0x9a, 0x1d, 0xea, 0x2e, 0xe3, 0x37, 0x0d, 0xae, 0x4d, 0xed, 0xbe, 0xd3, 0x3b, 0x30, 0xf9, 0x0b, 0x70, 0x44, 0xac, 0xba, 0x66, 0x47, 0xaa, 0xcb,
0x0c, 0xdb, 0x8a, 0x42, 0xaf, 0x41, 0xfe, 0x39, 0x25, 0x56, 0x37, 0x9a, 0xb5, 0x70, 0x8d, 0xee, 0xf8, 0x5d, 0x83, 0x4b, 0xa3, 0xb6, 0xc2, 0xa3, 0xd7, 0x20, 0xff, 0x94, 0x92, 0x7e, 0x37, 0xec,
0x43, 0xb6, 0xef, 0x83, 0x55, 0x80, 0x67, 0xdd, 0x3a, 0x9a, 0xdc, 0xa3, 0x4e, 0xef, 0x09, 0x65, 0xb5, 0x60, 0x8d, 0xee, 0x42, 0x76, 0xe0, 0x81, 0xd5, 0x01, 0xcf, 0xba, 0x75, 0x34, 0xb9, 0x4b,
0x1c, 0x4b, 0x7c, 0x2c, 0x9f, 0xfa, 0xe4, 0xe5, 0xf9, 0x52, 0x83, 0x25, 0xe9, 0xe7, 0x43, 0x79, 0xed, 0xde, 0x23, 0xca, 0x38, 0x96, 0xf8, 0x48, 0x3c, 0xf5, 0xc9, 0xd3, 0xf3, 0xa5, 0x06, 0x4b,
0xa8, 0xbd, 0x59, 0xd2, 0x4c, 0xb9, 0x86, 0x18, 0x36, 0x2c, 0x3f, 0x33, 0x79, 0xe7, 0xa8, 0x6e, 0xd2, 0xcf, 0xfb, 0x72, 0xa8, 0xbd, 0x5a, 0xd2, 0x4c, 0xb8, 0x86, 0x18, 0x16, 0x2c, 0x3f, 0x31,
0xbf, 0xb6, 0x0b, 0xbe, 0xb9, 0xe8, 0x6c, 0x96, 0x29, 0x2c, 0xe0, 0x84, 0xcc, 0xf8, 0x59, 0x83, 0x79, 0xe7, 0xa8, 0x6e, 0xbd, 0xb0, 0x0b, 0x9e, 0xb9, 0x70, 0x36, 0xcb, 0x10, 0x16, 0x70, 0x4c,
0x05, 0x71, 0x3c, 0x34, 0x49, 0xef, 0x1f, 0x0f, 0x76, 0x88, 0xc8, 0x32, 0x23, 0x44, 0xf6, 0xa7, 0x66, 0xfc, 0xa2, 0xc1, 0x82, 0x18, 0x0f, 0x4d, 0xd2, 0x7b, 0xed, 0x87, 0x1d, 0x21, 0xb2, 0xcc,
0x0e, 0x45, 0xd5, 0xbf, 0x13, 0x70, 0xd8, 0xc5, 0x1c, 0x13, 0x6b, 0xb0, 0x40, 0x45, 0x0b, 0xb4, 0x18, 0x91, 0xfd, 0xad, 0x43, 0x51, 0xd5, 0xef, 0x04, 0x1c, 0xf6, 0x72, 0xc6, 0xc4, 0x1a, 0x2c,
0x54, 0xa2, 0xa4, 0x63, 0x05, 0x5c, 0xa6, 0xf1, 0xce, 0x10, 0x37, 0x07, 0xb7, 0x4f, 0x9c, 0x38, 0x50, 0x51, 0x02, 0x2d, 0x15, 0x28, 0xe9, 0x58, 0x01, 0x97, 0x69, 0xb4, 0x32, 0xc4, 0xcd, 0xc1,
0x6d, 0xe5, 0x7d, 0x41, 0x1a, 0xef, 0xcd, 0x8d, 0xe5, 0xbd, 0xdc, 0x28, 0xef, 0x5d, 0x81, 0xbc, 0x19, 0x10, 0x3b, 0x4a, 0x5b, 0x79, 0x4f, 0x90, 0xc4, 0x7b, 0x73, 0xa9, 0xbc, 0x97, 0x1b, 0xe7,
0x33, 0xb0, 0x5b, 0x9e, 0x7b, 0x2c, 0x39, 0x46, 0xc7, 0x39, 0x67, 0x60, 0x63, 0xf7, 0x98, 0xf9, 0xbd, 0x4b, 0x90, 0xb7, 0x87, 0x56, 0xcb, 0x75, 0x8e, 0x25, 0xc7, 0xe8, 0x38, 0x67, 0x0f, 0x2d,
0x7f, 0xd9, 0xc4, 0x6e, 0x31, 0x7a, 0x2a, 0xaf, 0x24, 0x3a, 0xce, 0xd9, 0xc4, 0x6e, 0xd2, 0x53, 0xec, 0x1c, 0x33, 0xef, 0x2f, 0x8b, 0x58, 0x2d, 0x46, 0x4f, 0xe5, 0x95, 0x44, 0xc7, 0x39, 0x8b,
0x12, 0x31, 0x39, 0xfc, 0x2d, 0x26, 0x6f, 0x40, 0x39, 0x49, 0xb2, 0xd5, 0xe2, 0xc4, 0xc4, 0x38, 0x58, 0x4d, 0x7a, 0x4a, 0x42, 0x26, 0x87, 0x7f, 0xc5, 0xe4, 0x0d, 0x28, 0xc7, 0x49, 0xb6, 0x5a,
0x9f, 0xe0, 0x58, 0xb4, 0x03, 0xa5, 0x38, 0xc5, 0x56, 0x4b, 0x13, 0x2b, 0x2a, 0xc6, 0x18, 0xd6, 0x9c, 0x98, 0x18, 0xe7, 0x63, 0x1c, 0x8b, 0x76, 0xa0, 0x14, 0xa5, 0xd8, 0x6a, 0x69, 0x62, 0x45,
0x38, 0x01, 0x50, 0x8e, 0xee, 0xb1, 0xde, 0x14, 0x4d, 0xf9, 0x2e, 0xe4, 0x54, 0x6f, 0xa8, 0x53, 0xc5, 0x08, 0xc3, 0x1a, 0x27, 0x00, 0xca, 0xd1, 0x3d, 0xd6, 0x9b, 0xa2, 0x28, 0xdf, 0x85, 0x9c,
0xfa, 0xfa, 0xd9, 0xa9, 0x10, 0xc4, 0x18, 0xc0, 0x8d, 0xaf, 0x34, 0x58, 0x79, 0x18, 0x76, 0x8d, 0xaa, 0x0d, 0x35, 0xa5, 0xaf, 0x9e, 0x1d, 0x0a, 0x41, 0x8c, 0x3e, 0xdc, 0xf8, 0x4a, 0x83, 0x95,
0x9f, 0x26, 0x76, 0x31, 0xb3, 0x51, 0x38, 0x67, 0x36, 0x0a, 0x43, 0x44, 0xf0, 0x8d, 0x06, 0x97, 0xfb, 0x41, 0xd5, 0x78, 0x61, 0x62, 0xaf, 0x9f, 0x08, 0xbe, 0xd1, 0xe0, 0xe2, 0x98, 0x13, 0x8a,
0x47, 0x9c, 0x50, 0x8c, 0x79, 0x5f, 0xd6, 0x38, 0xb8, 0x4d, 0xde, 0x4c, 0x75, 0xe3, 0x31, 0x79, 0x31, 0xef, 0xca, 0x1c, 0xfb, 0xb7, 0xc9, 0xeb, 0x89, 0x6e, 0x3c, 0x24, 0xcf, 0x3f, 0x36, 0xfb,
0xf9, 0xb1, 0x69, 0x0d, 0xc8, 0x81, 0x49, 0x3d, 0x59, 0xe5, 0x29, 0x2f, 0x2e, 0xbf, 0x6a, 0xb0, 0x43, 0x72, 0x60, 0x52, 0x57, 0x66, 0x79, 0xca, 0x8b, 0xcb, 0x6f, 0x1a, 0x2c, 0x1f, 0xf8, 0x1d,
0x7c, 0x10, 0x4c, 0xc8, 0xdb, 0xc9, 0x46, 0xda, 0xeb, 0xac, 0x90, 0x98, 0x5b, 0xe3, 0x6b, 0x0d, 0xf2, 0x66, 0xa2, 0x91, 0xfe, 0x3a, 0x33, 0xbe, 0xd6, 0x60, 0x65, 0xd4, 0xcb, 0x37, 0x12, 0xae,
0x56, 0x86, 0xbd, 0x7c, 0x2b, 0xe9, 0xda, 0x83, 0xf2, 0x23, 0xff, 0xf8, 0x12, 0xb4, 0xba, 0x47, 0x3d, 0x28, 0x3f, 0xf0, 0xc6, 0x97, 0xa0, 0xd5, 0x3d, 0xc2, 0x4d, 0x54, 0x85, 0x9c, 0x1a, 0x68,
0xb8, 0x89, 0xaa, 0x90, 0x53, 0x07, 0x9a, 0x22, 0xad, 0x60, 0xe9, 0xb3, 0x40, 0x5b, 0x9c, 0x88, 0x8a, 0xb4, 0xfc, 0xa5, 0xc7, 0x02, 0x6d, 0x31, 0x11, 0x5b, 0xe1, 0x94, 0x2b, 0xe0, 0x62, 0x3b,
0xad, 0xe8, 0x94, 0x2b, 0xe0, 0x62, 0x3b, 0x3a, 0x25, 0x8d, 0xef, 0xb4, 0xf0, 0x32, 0x17, 0x69, 0x9c, 0x92, 0xc6, 0x77, 0x5a, 0x70, 0x99, 0x0b, 0x35, 0x9e, 0x4f, 0x84, 0xff, 0x01, 0xa0, 0xac,
0x3c, 0x9f, 0x08, 0xff, 0x05, 0x40, 0x59, 0x4b, 0x51, 0x89, 0x70, 0x3d, 0x8f, 0x0b, 0x94, 0x3d, 0xa5, 0xa8, 0x44, 0xb8, 0x9e, 0xc7, 0x05, 0xca, 0x1e, 0x48, 0x01, 0x7a, 0x0f, 0xe6, 0x84, 0x7d,
0x92, 0x02, 0xf4, 0x1e, 0xcc, 0x09, 0xfb, 0xac, 0x9a, 0x4d, 0xcb, 0x87, 0x98, 0x8b, 0x64, 0x04, 0x56, 0xcd, 0x26, 0xc5, 0x43, 0xf4, 0x45, 0xfc, 0x04, 0x58, 0x6d, 0x30, 0x3e, 0x82, 0x52, 0xbd,
0x58, 0x6d, 0x30, 0x3e, 0x82, 0x52, 0xbd, 0xfe, 0x24, 0xf2, 0x63, 0xb8, 0x74, 0x5a, 0x0a, 0xe5, 0xfe, 0x28, 0xf4, 0x63, 0x34, 0x75, 0x5a, 0x42, 0xea, 0x26, 0x38, 0x63, 0xbc, 0xe1, 0xee, 0x7b,
0x8e, 0x8f, 0xf1, 0xae, 0x2b, 0xde, 0xf9, 0x21, 0x27, 0xa1, 0x85, 0x90, 0xf6, 0xf7, 0x5d, 0x87, 0x8f, 0xc6, 0xd7, 0xdf, 0x70, 0xdd, 0x68, 0xbf, 0x29, 0x1f, 0x5e, 0xe4, 0x72, 0x16, 0xbc, 0x85,
0x54, 0x66, 0xd0, 0xa2, 0x78, 0xa2, 0x4a, 0x01, 0xdf, 0x39, 0xa1, 0x8c, 0x57, 0x34, 0x84, 0xa0, 0xa5, 0x23, 0x72, 0x71, 0xdb, 0x11, 0x9f, 0x34, 0x02, 0xfa, 0x45, 0x0b, 0xc1, 0x84, 0xdb, 0x77,
0xac, 0x84, 0xbb, 0x9e, 0x7b, 0x4c, 0x9d, 0x5e, 0x65, 0x16, 0x5d, 0x82, 0xf9, 0x40, 0x93, 0xe0, 0x6c, 0x52, 0x99, 0x41, 0x8b, 0xe2, 0x35, 0x2e, 0x05, 0x7c, 0xe7, 0x84, 0x32, 0x5e, 0xd1, 0x10,
0xda, 0x8a, 0x1e, 0x83, 0xa9, 0x04, 0x54, 0x32, 0x5b, 0xaf, 0x00, 0x8a, 0x75, 0x93, 0x9b, 0x4d, 0x82, 0xb2, 0x12, 0xee, 0xba, 0xce, 0x31, 0xb5, 0x7b, 0x95, 0x59, 0x74, 0x01, 0xe6, 0x7d, 0x4d,
0xf9, 0x05, 0x07, 0x99, 0x50, 0x8a, 0x7f, 0xfa, 0x40, 0xb7, 0x53, 0x52, 0x92, 0xf2, 0x75, 0xa6, 0x62, 0xac, 0x54, 0xf4, 0x08, 0x4c, 0xe5, 0xba, 0x92, 0xd9, 0xfa, 0x0b, 0xa0, 0x58, 0x37, 0xb9,
0xb6, 0x36, 0x16, 0x27, 0x5b, 0xd0, 0x98, 0x41, 0xbb, 0x90, 0x15, 0xf6, 0x51, 0x1a, 0x23, 0xc7, 0xd9, 0x94, 0x1f, 0xab, 0x90, 0x09, 0xa5, 0xe8, 0x57, 0x1e, 0x74, 0x33, 0x21, 0xfb, 0x09, 0x1f,
0x5f, 0x68, 0xb5, 0xf3, 0xba, 0xcc, 0x98, 0x41, 0x6d, 0x58, 0x08, 0x1f, 0x9b, 0xaa, 0xe0, 0xb7, 0xa2, 0x6a, 0x6b, 0xa9, 0x38, 0x19, 0x2c, 0x63, 0x06, 0xed, 0x42, 0x56, 0xd8, 0x47, 0x49, 0xc3,
0x52, 0x54, 0x8e, 0x7e, 0x65, 0xa8, 0xdd, 0x1e, 0x07, 0x0b, 0x9d, 0x6d, 0x41, 0x29, 0xf6, 0x2e, 0x27, 0xfa, 0x18, 0xad, 0x9d, 0x17, 0x48, 0x63, 0x06, 0xb5, 0x61, 0x21, 0x78, 0x57, 0xab, 0xda,
0x62, 0xa9, 0x06, 0x46, 0x9f, 0x76, 0xa9, 0x06, 0x52, 0xde, 0x57, 0xc6, 0x0c, 0xea, 0x41, 0x65, 0xbe, 0x91, 0xa0, 0x72, 0xfc, 0x83, 0x4a, 0xed, 0x66, 0x1a, 0x2c, 0x70, 0xb6, 0x05, 0xa5, 0xc8,
0x97, 0xf0, 0xc4, 0x55, 0x18, 0xad, 0x8d, 0x39, 0xaa, 0x02, 0xda, 0xa9, 0xad, 0x8f, 0x07, 0x86, 0x13, 0x90, 0x25, 0x1a, 0x18, 0x7f, 0xc5, 0x26, 0x1a, 0x48, 0x78, 0x4a, 0x1a, 0x33, 0xa8, 0x07,
0x86, 0x3c, 0x58, 0xda, 0x25, 0x7c, 0xe4, 0xf2, 0x89, 0xee, 0xa6, 0xe8, 0x38, 0xe3, 0x3a, 0x5c, 0x95, 0x5d, 0xc2, 0x63, 0xb7, 0x7e, 0xb4, 0x96, 0x32, 0x95, 0x7d, 0x86, 0xad, 0xad, 0xa7, 0x03,
0xfb, 0xcf, 0x04, 0xd8, 0xb8, 0x4d, 0x13, 0x2e, 0x85, 0x36, 0xc3, 0xeb, 0xc2, 0xda, 0x99, 0x4a, 0x03, 0x43, 0x2e, 0x2c, 0xed, 0x12, 0x3e, 0x76, 0xcf, 0x46, 0xb7, 0x13, 0x74, 0x9c, 0x71, 0xf3,
0x92, 0x17, 0xbd, 0xda, 0xf8, 0x3b, 0xae, 0x08, 0xeb, 0xf2, 0x2e, 0xe1, 0xc9, 0xf3, 0x81, 0x32, 0xaf, 0xfd, 0x6f, 0x02, 0x6c, 0xd4, 0xa6, 0x09, 0x17, 0x02, 0x9b, 0xc1, 0xcd, 0x68, 0xed, 0x4c,
0x4e, 0x3b, 0x0c, 0xdd, 0x49, 0x31, 0x94, 0x7e, 0x9a, 0xd5, 0xee, 0x4e, 0x02, 0x0d, 0xc3, 0x72, 0x25, 0xf1, 0x3b, 0x6d, 0x2d, 0xfd, 0x3a, 0x2f, 0x8e, 0x75, 0x71, 0x97, 0xf0, 0xf8, 0x28, 0xa4,
0x61, 0x65, 0x97, 0xf0, 0x04, 0xc7, 0x2a, 0x93, 0x69, 0x05, 0x49, 0x3d, 0x31, 0x6a, 0x77, 0x26, 0x8c, 0xd3, 0x0e, 0x43, 0xb7, 0x12, 0x0c, 0x25, 0x0f, 0xee, 0xda, 0xed, 0x49, 0xa0, 0xc1, 0xb1,
0x40, 0x86, 0x06, 0x0f, 0x01, 0x89, 0x20, 0xed, 0xbe, 0xeb, 0x44, 0x6d, 0x52, 0x4b, 0x1d, 0x8f, 0x1c, 0x58, 0xd9, 0x25, 0x3c, 0x36, 0x4e, 0x94, 0xc9, 0xa4, 0x84, 0x24, 0x0e, 0xc7, 0xda, 0xad,
0x1d, 0xbb, 0xcf, 0x5f, 0x0e, 0x37, 0x60, 0x98, 0xbb, 0x21, 0x1d, 0xc6, 0x0c, 0x7a, 0x26, 0x74, 0x09, 0x90, 0x81, 0xc1, 0x43, 0x40, 0xe2, 0x90, 0xd6, 0xc0, 0xb1, 0xc3, 0x32, 0xa9, 0x25, 0xb6,
0xfb, 0xf7, 0xac, 0xa7, 0xb4, 0xf3, 0x99, 0x2a, 0xc1, 0xb9, 0xba, 0x87, 0x1e, 0x57, 0x6a, 0x21, 0xc7, 0x8e, 0x35, 0xe0, 0xcf, 0x47, 0x0b, 0x30, 0x88, 0xdd, 0x88, 0x0e, 0x63, 0x06, 0x3d, 0x11,
0xab, 0x12, 0x73, 0xfa, 0x13, 0xd1, 0x70, 0x51, 0x72, 0x2e, 0x50, 0xf5, 0x21, 0x2c, 0x47, 0x43, 0xba, 0xbd, 0x2b, 0xe5, 0x63, 0xda, 0xf9, 0x4c, 0xa5, 0xe0, 0x5c, 0xdd, 0x23, 0xef, 0x48, 0xb5,
0xe3, 0x5f, 0x59, 0x2e, 0x4e, 0xf7, 0xd6, 0x0f, 0xb3, 0x90, 0xf7, 0x19, 0x51, 0xd0, 0xdf, 0x9b, 0x90, 0x59, 0x89, 0x38, 0xfd, 0x89, 0x28, 0xb8, 0x30, 0x38, 0x2f, 0x51, 0xf5, 0x21, 0x2c, 0x87,
0x4c, 0xfc, 0x21, 0x2c, 0x24, 0x1f, 0x38, 0xe9, 0xed, 0x93, 0xfa, 0x08, 0x1a, 0x47, 0x8d, 0x18, 0x4d, 0xe3, 0xdd, 0xce, 0x5e, 0xa2, 0xee, 0x0e, 0xe4, 0x45, 0xac, 0x87, 0x36, 0x4f, 0xa9, 0xa0,
0xe6, 0x83, 0xc7, 0x8c, 0xe4, 0x2d, 0xe3, 0x2c, 0xae, 0x8d, 0x9e, 0x3b, 0x63, 0x74, 0x6e, 0x7f, 0xe8, 0x24, 0x4a, 0xa9, 0xa0, 0xd8, 0xc0, 0x30, 0x66, 0xb6, 0x7e, 0x9c, 0x85, 0xbc, 0x47, 0xbb,
0x78, 0xf8, 0x41, 0x8f, 0xf2, 0xa3, 0x41, 0xdb, 0xff, 0x67, 0xf3, 0x94, 0x5a, 0x16, 0x3d, 0xe5, 0x82, 0x63, 0x5f, 0x65, 0x76, 0x0f, 0x61, 0x21, 0xfe, 0x60, 0x4c, 0xae, 0xd1, 0xc4, 0x47, 0x65,
0xa4, 0x73, 0xb4, 0x29, 0x77, 0xfd, 0xb7, 0x4b, 0x19, 0xf7, 0x68, 0x7b, 0xc0, 0x49, 0x77, 0x33, 0x1a, 0xff, 0x62, 0x98, 0xf7, 0x1f, 0x87, 0x92, 0x1c, 0x8d, 0xb3, 0x08, 0x3d, 0x7c, 0x3e, 0xa6,
0x08, 0x7b, 0x53, 0xa8, 0xda, 0xf4, 0xcd, 0xf5, 0xdb, 0xed, 0x39, 0xb1, 0xba, 0xf7, 0x57, 0x00, 0xe8, 0xdc, 0xfe, 0xf0, 0xf0, 0x83, 0x1e, 0xe5, 0x47, 0xc3, 0xb6, 0xf7, 0xcf, 0xe6, 0x29, 0xed,
0x00, 0x00, 0xff, 0xff, 0x3e, 0xe9, 0x0b, 0x5c, 0x35, 0x18, 0x00, 0x00, 0xf7, 0xe9, 0x29, 0x27, 0x9d, 0xa3, 0x4d, 0xb9, 0xeb, 0xff, 0x5d, 0xca, 0xb8, 0x4b, 0xdb, 0x43,
0x4e, 0xba, 0x9b, 0xfe, 0xb1, 0x37, 0x85, 0xaa, 0x4d, 0xcf, 0xdc, 0xa0, 0xdd, 0x9e, 0x13, 0xab,
0x3b, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x41, 0xfa, 0x50, 0x93, 0x85, 0x19, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.
...@@ -1756,6 +1862,7 @@ type DataServiceClient interface { ...@@ -1756,6 +1862,7 @@ type DataServiceClient interface {
GetTimeTickChannel(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*milvuspb.StringResponse, error) GetTimeTickChannel(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*milvuspb.StringResponse, error)
GetStatisticsChannel(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*milvuspb.StringResponse, error) GetStatisticsChannel(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*milvuspb.StringResponse, error)
GetSegmentInfoChannel(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*milvuspb.StringResponse, error) GetSegmentInfoChannel(ctx context.Context, in *commonpb.Empty, opts ...grpc.CallOption) (*milvuspb.StringResponse, error)
GetCount(ctx context.Context, in *CollectionCountRequest, opts ...grpc.CallOption) (*CollectionCountResponse, error)
} }
type dataServiceClient struct { type dataServiceClient struct {
...@@ -1883,6 +1990,15 @@ func (c *dataServiceClient) GetSegmentInfoChannel(ctx context.Context, in *commo ...@@ -1883,6 +1990,15 @@ func (c *dataServiceClient) GetSegmentInfoChannel(ctx context.Context, in *commo
return out, nil return out, nil
} }
func (c *dataServiceClient) GetCount(ctx context.Context, in *CollectionCountRequest, opts ...grpc.CallOption) (*CollectionCountResponse, error) {
out := new(CollectionCountResponse)
err := c.cc.Invoke(ctx, "/milvus.proto.data.DataService/GetCount", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// DataServiceServer is the server API for DataService service. // DataServiceServer is the server API for DataService service.
type DataServiceServer interface { type DataServiceServer interface {
RegisterNode(context.Context, *RegisterNodeRequest) (*RegisterNodeResponse, error) RegisterNode(context.Context, *RegisterNodeRequest) (*RegisterNodeResponse, error)
...@@ -1898,6 +2014,7 @@ type DataServiceServer interface { ...@@ -1898,6 +2014,7 @@ type DataServiceServer interface {
GetTimeTickChannel(context.Context, *commonpb.Empty) (*milvuspb.StringResponse, error) GetTimeTickChannel(context.Context, *commonpb.Empty) (*milvuspb.StringResponse, error)
GetStatisticsChannel(context.Context, *commonpb.Empty) (*milvuspb.StringResponse, error) GetStatisticsChannel(context.Context, *commonpb.Empty) (*milvuspb.StringResponse, error)
GetSegmentInfoChannel(context.Context, *commonpb.Empty) (*milvuspb.StringResponse, error) GetSegmentInfoChannel(context.Context, *commonpb.Empty) (*milvuspb.StringResponse, error)
GetCount(context.Context, *CollectionCountRequest) (*CollectionCountResponse, error)
} }
// UnimplementedDataServiceServer can be embedded to have forward compatible implementations. // UnimplementedDataServiceServer can be embedded to have forward compatible implementations.
...@@ -1943,6 +2060,9 @@ func (*UnimplementedDataServiceServer) GetStatisticsChannel(ctx context.Context, ...@@ -1943,6 +2060,9 @@ func (*UnimplementedDataServiceServer) GetStatisticsChannel(ctx context.Context,
func (*UnimplementedDataServiceServer) GetSegmentInfoChannel(ctx context.Context, req *commonpb.Empty) (*milvuspb.StringResponse, error) { func (*UnimplementedDataServiceServer) GetSegmentInfoChannel(ctx context.Context, req *commonpb.Empty) (*milvuspb.StringResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetSegmentInfoChannel not implemented") return nil, status.Errorf(codes.Unimplemented, "method GetSegmentInfoChannel not implemented")
} }
func (*UnimplementedDataServiceServer) GetCount(ctx context.Context, req *CollectionCountRequest) (*CollectionCountResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetCount not implemented")
}
func RegisterDataServiceServer(s *grpc.Server, srv DataServiceServer) { func RegisterDataServiceServer(s *grpc.Server, srv DataServiceServer) {
s.RegisterService(&_DataService_serviceDesc, srv) s.RegisterService(&_DataService_serviceDesc, srv)
...@@ -2182,6 +2302,24 @@ func _DataService_GetSegmentInfoChannel_Handler(srv interface{}, ctx context.Con ...@@ -2182,6 +2302,24 @@ func _DataService_GetSegmentInfoChannel_Handler(srv interface{}, ctx context.Con
return interceptor(ctx, in, info, handler) return interceptor(ctx, in, info, handler)
} }
func _DataService_GetCount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CollectionCountRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DataServiceServer).GetCount(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/milvus.proto.data.DataService/GetCount",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DataServiceServer).GetCount(ctx, req.(*CollectionCountRequest))
}
return interceptor(ctx, in, info, handler)
}
var _DataService_serviceDesc = grpc.ServiceDesc{ var _DataService_serviceDesc = grpc.ServiceDesc{
ServiceName: "milvus.proto.data.DataService", ServiceName: "milvus.proto.data.DataService",
HandlerType: (*DataServiceServer)(nil), HandlerType: (*DataServiceServer)(nil),
...@@ -2238,6 +2376,10 @@ var _DataService_serviceDesc = grpc.ServiceDesc{ ...@@ -2238,6 +2376,10 @@ var _DataService_serviceDesc = grpc.ServiceDesc{
MethodName: "GetSegmentInfoChannel", MethodName: "GetSegmentInfoChannel",
Handler: _DataService_GetSegmentInfoChannel_Handler, Handler: _DataService_GetSegmentInfoChannel_Handler,
}, },
{
MethodName: "GetCount",
Handler: _DataService_GetCount_Handler,
},
}, },
Streams: []grpc.StreamDesc{}, Streams: []grpc.StreamDesc{},
Metadata: "data_service.proto", Metadata: "data_service.proto",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment