From 3f7d53ce838f779e6b887e7fe1324f9299162db7 Mon Sep 17 00:00:00 2001 From: Yusuke Kato Date: Mon, 4 Mar 2024 21:00:14 +0900 Subject: [PATCH] Backport Flush API (#2434) * Add flush API for deleting all vectors (#2273) * add flush api Signed-off-by: aknishid * added flush api * fix typo * fix pb.go & fix conflict Signed-off-by: aknishid * add flush api * add handler Flush Signed-off-by: aknishid * add vald.Client flush * fix filter gateway Signed-off-by: aknishid * fix handler cnts Signed-off-by: aknishid * delete unused var Signed-off-by: aknishid * add author Signed-off-by: Yamada Takuya * fix error Signed-off-by: aknishid * fix flush.go & ngt.go Signed-off-by: aknishid * add flush to example Signed-off-by: aknishid * fix gateway lb Signed-off-by: aknishid * update flush proto Signed-off-by: aknishid * fix docs api README.md Signed-off-by: aknishid * Fix flush ctx Signed-off-by: aknishid * update docs & comment Signed-off-by: aknishid * after make format Signed-off-by: aknishid * add e2e Signed-off-by: aknishid * update example & tutorial Signed-off-by: aknishid * Update internal/errors/ngt.go Co-authored-by: Kiichiro YUKAWA * fix review Signed-off-by: aknishid * modify status.md Signed-off-by: aknishid * add error handling Signed-off-by: aknishid * update proto Signed-off-by: aknishid * fix doc Signed-off-by: aknishid * :recycle: Fix proto Signed-off-by: vankichi * use atomic bool Signed-off-by: aknishid * fix proto Signed-off-by: aknishid * update proto Signed-off-by: aknishid * fix gateway error Signed-off-by: aknishid * :white_check_mark: :construction: Avoid e2e failing due to unimplemented handler and Add unimplmented handler method for the future Signed-off-by: vankichi * Update apis/proto/v1/payload/payload.proto Co-authored-by: Kiichiro YUKAWA Signed-off-by: aknishid <38955080+aknishid@users.noreply.github.com> --------- Signed-off-by: aknishid Signed-off-by: Yamada Takuya Signed-off-by: vankichi Signed-off-by: aknishid <38955080+aknishid@users.noreply.github.com> Co-authored-by: takuyaymd Co-authored-by: takuyyam Co-authored-by: Kiichiro YUKAWA Co-authored-by: Yusuke Kato * docs: add aknishid as a contributor for code, and maintenance (#2431) * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] * style: format code with Gofumpt and Prettier This commit fixes the style issues introduced in abc4c52 according to the output from Gofumpt and Prettier. Details: https://github.com/vdaas/vald/pull/2431 --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> Co-authored-by: Yusuke Kato Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --------- Signed-off-by: aknishid Signed-off-by: Yamada Takuya Signed-off-by: vankichi Signed-off-by: aknishid <38955080+aknishid@users.noreply.github.com> Co-authored-by: aknishid <38955080+aknishid@users.noreply.github.com> Co-authored-by: takuyaymd Co-authored-by: takuyyam Co-authored-by: Kiichiro YUKAWA Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com> --- .all-contributorsrc | 13 +- README.md | 3 +- apis/docs/v1/docs.md | 28 + apis/grpc/v1/payload/payload.pb.go | 1423 +++++++++-------- apis/grpc/v1/payload/payload_vtproto.pb.go | 252 +++ apis/grpc/v1/vald/flush.pb.go | 99 ++ apis/grpc/v1/vald/flush_vtproto.pb.go | 127 ++ apis/grpc/v1/vald/vald.go | 9 + apis/proto/v1/payload/payload.proto | 5 + apis/proto/v1/vald/flush.proto | 35 + apis/swagger/v1/vald/flush.swagger.json | 97 ++ docs/api/README.md | 1 + docs/api/flush.md | 68 + docs/api/insert.md | 3 + docs/api/remove.md | 3 + docs/api/search.md | 12 + docs/api/status.md | 20 + docs/api/update.md | 3 + docs/api/upsert.md | 3 + docs/tutorial/get-started.md | 18 +- example/client/agent/main.go | 11 +- example/client/main.go | 13 +- internal/client/v1/client/vald/vald.go | 30 + internal/core/algorithm/ngt/ngt.go | 10 + internal/errors/ngt.go | 4 + internal/file/file.go | 42 + pkg/agent/core/faiss/handler/grpc/flush.go | 25 + pkg/agent/core/ngt/handler/grpc/flush.go | 93 ++ pkg/agent/core/ngt/handler/grpc/insert.go | 29 +- .../core/ngt/handler/grpc/linear_search.go | 28 +- pkg/agent/core/ngt/handler/grpc/remove.go | 28 +- pkg/agent/core/ngt/handler/grpc/search.go | 28 +- pkg/agent/core/ngt/handler/grpc/update.go | 28 +- pkg/agent/core/ngt/service/ngt.go | 148 +- pkg/gateway/filter/handler/grpc/handler.go | 10 + pkg/gateway/filter/handler/rest/handler.go | 8 + pkg/gateway/filter/router/router.go | 8 + pkg/gateway/lb/handler/grpc/handler.go | 106 ++ pkg/gateway/lb/handler/rest/handler.go | 8 + pkg/gateway/lb/router/router.go | 8 + pkg/gateway/mirror/handler/grpc/handler.go | 5 + rust/libs/proto/src/payload.v1.rs | 11 + rust/libs/proto/src/vald.v1.tonic.rs | 295 ++++ tests/e2e/crud/crud_test.go | 9 + tests/e2e/operation/operation.go | 1 + tests/e2e/operation/stream.go | 18 + 46 files changed, 2543 insertions(+), 683 deletions(-) create mode 100644 apis/grpc/v1/vald/flush.pb.go create mode 100644 apis/grpc/v1/vald/flush_vtproto.pb.go create mode 100644 apis/proto/v1/vald/flush.proto create mode 100644 apis/swagger/v1/vald/flush.swagger.json create mode 100644 docs/api/flush.md create mode 100644 pkg/agent/core/faiss/handler/grpc/flush.go create mode 100644 pkg/agent/core/ngt/handler/grpc/flush.go diff --git a/.all-contributorsrc b/.all-contributorsrc index b9154e1e6f..19ee57103e 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -174,6 +174,16 @@ "code", "test" ] + }, + { + "login": "aknishid", + "name": "aknishid", + "avatar_url": "https://avatars.githubusercontent.com/u/38955080?v=4", + "profile": "https://github.com/aknishid", + "contributions": [ + "code", + "maintenance" + ] } ], "contributorsPerLine": 7, @@ -184,5 +194,6 @@ "repoType": "github", "repoHost": "https://github.com", "skipCi": true, - "commitConvention": "angular" + "commitConvention": "angular", + "commitType": "docs" } diff --git a/README.md b/README.md index ddf4a72389..31253af005 100755 --- a/README.md +++ b/README.md @@ -264,7 +264,7 @@ make init -[![All Contributors](https://img.shields.io/badge/all_contributors-16-orange.svg?style=flat-square)](#contributors) +[![All Contributors](https://img.shields.io/badge/all_contributors-17-orange.svg?style=flat-square)](#contributors) @@ -296,6 +296,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d junsei-ando
junsei-ando

πŸ“– Yusuke Kadowaki
Yusuke Kadowaki

πŸ’» ⚠️ + aknishid
aknishid

πŸ’» 🚧 diff --git a/apis/docs/v1/docs.md b/apis/docs/v1/docs.md index 3cdd7ab520..c4135e8c13 100644 --- a/apis/docs/v1/docs.md +++ b/apis/docs/v1/docs.md @@ -14,6 +14,8 @@ - [Filter](#payload-v1-Filter) - [Filter.Config](#payload-v1-Filter-Config) - [Filter.Target](#payload-v1-Filter-Target) + - [Flush](#payload-v1-Flush) + - [Flush.Request](#payload-v1-Flush-Request) - [Info](#payload-v1-Info) - [Info.Annotations](#payload-v1-Info-Annotations) - [Info.Annotations.AnnotationsEntry](#payload-v1-Info-Annotations-AnnotationsEntry) @@ -127,6 +129,8 @@ - [RetryInfo](#rpc-v1-RetryInfo) - [v1/vald/filter.proto](#v1_vald_filter-proto) - [Filter](#vald-v1-Filter) +- [v1/vald/flush.proto](#v1_vald_flush-proto) + - [Flush](#vald-v1-Flush) - [v1/vald/insert.proto](#v1_vald_insert-proto) - [Insert](#vald-v1-Insert) - [v1/vald/object.proto](#v1_vald_object-proto) @@ -214,6 +218,14 @@ Represent the target filter server. | host | [string](#string) | | The target hostname. | | port | [uint32](#uint32) | | The target port. | + + +### Flush + + + +### Flush.Request + ### Info @@ -1449,6 +1461,22 @@ Filter service provides ways to connect to Vald through filter. | StreamUpsertObject | [.payload.v1.Upsert.ObjectRequest](#payload-v1-Upsert-ObjectRequest) stream | [.payload.v1.Object.StreamLocation](#payload-v1-Object-StreamLocation) stream | A method to upsert object by bidirectional streaming. | | MultiUpsertObject | [.payload.v1.Upsert.MultiObjectRequest](#payload-v1-Upsert-MultiObjectRequest) | [.payload.v1.Object.Locations](#payload-v1-Object-Locations) | A method to upsert multiple objects. | + + +

Top

+ +## v1/vald/flush.proto + + + +### Flush + +Flush service provides ways to flush all indexed vectors. + +| Method Name | Request Type | Response Type | Description | +| ----------- | ------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------- | +| Flush | [.payload.v1.Flush.Request](#payload-v1-Flush-Request) | [.payload.v1.Info.Index.Count](#payload-v1-Info-Index-Count) | A method to flush all indexed vector. | +

Top

diff --git a/apis/grpc/v1/payload/payload.pb.go b/apis/grpc/v1/payload/payload.pb.go index 5e94a4f000..d10792fd14 100644 --- a/apis/grpc/v1/payload/payload.pb.go +++ b/apis/grpc/v1/payload/payload.pb.go @@ -394,6 +394,44 @@ func (*Remove) Descriptor() ([]byte, []int) { return file_v1_payload_payload_proto_rawDescGZIP(), []int{5} } +type Flush struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Flush) Reset() { + *x = Flush{} + if protoimpl.UnsafeEnabled { + mi := &file_v1_payload_payload_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Flush) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Flush) ProtoMessage() {} + +func (x *Flush) ProtoReflect() protoreflect.Message { + mi := &file_v1_payload_payload_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Flush.ProtoReflect.Descriptor instead. +func (*Flush) Descriptor() ([]byte, []int) { + return file_v1_payload_payload_proto_rawDescGZIP(), []int{6} +} + // Common messages. type Object struct { state protoimpl.MessageState @@ -404,7 +442,7 @@ type Object struct { func (x *Object) Reset() { *x = Object{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[6] + mi := &file_v1_payload_payload_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -417,7 +455,7 @@ func (x *Object) String() string { func (*Object) ProtoMessage() {} func (x *Object) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[6] + mi := &file_v1_payload_payload_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -430,7 +468,7 @@ func (x *Object) ProtoReflect() protoreflect.Message { // Deprecated: Use Object.ProtoReflect.Descriptor instead. func (*Object) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7} } // Control related messages. @@ -443,7 +481,7 @@ type Control struct { func (x *Control) Reset() { *x = Control{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[7] + mi := &file_v1_payload_payload_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -456,7 +494,7 @@ func (x *Control) String() string { func (*Control) ProtoMessage() {} func (x *Control) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[7] + mi := &file_v1_payload_payload_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -469,7 +507,7 @@ func (x *Control) ProtoReflect() protoreflect.Message { // Deprecated: Use Control.ProtoReflect.Descriptor instead. func (*Control) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{7} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{8} } // Discoverer related messages. @@ -482,7 +520,7 @@ type Discoverer struct { func (x *Discoverer) Reset() { *x = Discoverer{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[8] + mi := &file_v1_payload_payload_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -495,7 +533,7 @@ func (x *Discoverer) String() string { func (*Discoverer) ProtoMessage() {} func (x *Discoverer) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[8] + mi := &file_v1_payload_payload_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -508,7 +546,7 @@ func (x *Discoverer) ProtoReflect() protoreflect.Message { // Deprecated: Use Discoverer.ProtoReflect.Descriptor instead. func (*Discoverer) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{8} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{9} } // Info related messages. @@ -521,7 +559,7 @@ type Info struct { func (x *Info) Reset() { *x = Info{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[9] + mi := &file_v1_payload_payload_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -534,7 +572,7 @@ func (x *Info) String() string { func (*Info) ProtoMessage() {} func (x *Info) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[9] + mi := &file_v1_payload_payload_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -547,7 +585,7 @@ func (x *Info) ProtoReflect() protoreflect.Message { // Deprecated: Use Info.ProtoReflect.Descriptor instead. func (*Info) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10} } // Mirror related messages. @@ -560,7 +598,7 @@ type Mirror struct { func (x *Mirror) Reset() { *x = Mirror{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[10] + mi := &file_v1_payload_payload_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -573,7 +611,7 @@ func (x *Mirror) String() string { func (*Mirror) ProtoMessage() {} func (x *Mirror) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[10] + mi := &file_v1_payload_payload_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -586,7 +624,7 @@ func (x *Mirror) ProtoReflect() protoreflect.Message { // Deprecated: Use Mirror.ProtoReflect.Descriptor instead. func (*Mirror) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{10} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{11} } // Represent an empty message. @@ -599,7 +637,7 @@ type Empty struct { func (x *Empty) Reset() { *x = Empty{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[11] + mi := &file_v1_payload_payload_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -612,7 +650,7 @@ func (x *Empty) String() string { func (*Empty) ProtoMessage() {} func (x *Empty) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[11] + mi := &file_v1_payload_payload_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -625,7 +663,7 @@ func (x *Empty) ProtoReflect() protoreflect.Message { // Deprecated: Use Empty.ProtoReflect.Descriptor instead. func (*Empty) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{11} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{12} } // Represent a search request. @@ -643,7 +681,7 @@ type Search_Request struct { func (x *Search_Request) Reset() { *x = Search_Request{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[12] + mi := &file_v1_payload_payload_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -656,7 +694,7 @@ func (x *Search_Request) String() string { func (*Search_Request) ProtoMessage() {} func (x *Search_Request) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[12] + mi := &file_v1_payload_payload_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -699,7 +737,7 @@ type Search_MultiRequest struct { func (x *Search_MultiRequest) Reset() { *x = Search_MultiRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[13] + mi := &file_v1_payload_payload_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -712,7 +750,7 @@ func (x *Search_MultiRequest) String() string { func (*Search_MultiRequest) ProtoMessage() {} func (x *Search_MultiRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[13] + mi := &file_v1_payload_payload_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -750,7 +788,7 @@ type Search_IDRequest struct { func (x *Search_IDRequest) Reset() { *x = Search_IDRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[14] + mi := &file_v1_payload_payload_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -763,7 +801,7 @@ func (x *Search_IDRequest) String() string { func (*Search_IDRequest) ProtoMessage() {} func (x *Search_IDRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[14] + mi := &file_v1_payload_payload_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -806,7 +844,7 @@ type Search_MultiIDRequest struct { func (x *Search_MultiIDRequest) Reset() { *x = Search_MultiIDRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[15] + mi := &file_v1_payload_payload_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -819,7 +857,7 @@ func (x *Search_MultiIDRequest) String() string { func (*Search_MultiIDRequest) ProtoMessage() {} func (x *Search_MultiIDRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[15] + mi := &file_v1_payload_payload_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -859,7 +897,7 @@ type Search_ObjectRequest struct { func (x *Search_ObjectRequest) Reset() { *x = Search_ObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[16] + mi := &file_v1_payload_payload_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -872,7 +910,7 @@ func (x *Search_ObjectRequest) String() string { func (*Search_ObjectRequest) ProtoMessage() {} func (x *Search_ObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[16] + mi := &file_v1_payload_payload_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -922,7 +960,7 @@ type Search_MultiObjectRequest struct { func (x *Search_MultiObjectRequest) Reset() { *x = Search_MultiObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[17] + mi := &file_v1_payload_payload_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -935,7 +973,7 @@ func (x *Search_MultiObjectRequest) String() string { func (*Search_MultiObjectRequest) ProtoMessage() {} func (x *Search_MultiObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[17] + mi := &file_v1_payload_payload_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -987,7 +1025,7 @@ type Search_Config struct { func (x *Search_Config) Reset() { *x = Search_Config{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[18] + mi := &file_v1_payload_payload_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1000,7 +1038,7 @@ func (x *Search_Config) String() string { func (*Search_Config) ProtoMessage() {} func (x *Search_Config) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[18] + mi := &file_v1_payload_payload_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1094,7 +1132,7 @@ type Search_Response struct { func (x *Search_Response) Reset() { *x = Search_Response{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[19] + mi := &file_v1_payload_payload_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1107,7 +1145,7 @@ func (x *Search_Response) String() string { func (*Search_Response) ProtoMessage() {} func (x *Search_Response) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[19] + mi := &file_v1_payload_payload_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1150,7 +1188,7 @@ type Search_Responses struct { func (x *Search_Responses) Reset() { *x = Search_Responses{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[20] + mi := &file_v1_payload_payload_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1163,7 +1201,7 @@ func (x *Search_Responses) String() string { func (*Search_Responses) ProtoMessage() {} func (x *Search_Responses) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[20] + mi := &file_v1_payload_payload_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1202,7 +1240,7 @@ type Search_StreamResponse struct { func (x *Search_StreamResponse) Reset() { *x = Search_StreamResponse{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[21] + mi := &file_v1_payload_payload_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1215,7 +1253,7 @@ func (x *Search_StreamResponse) String() string { func (*Search_StreamResponse) ProtoMessage() {} func (x *Search_StreamResponse) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[21] + mi := &file_v1_payload_payload_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1285,7 +1323,7 @@ type Filter_Target struct { func (x *Filter_Target) Reset() { *x = Filter_Target{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[22] + mi := &file_v1_payload_payload_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1298,7 +1336,7 @@ func (x *Filter_Target) String() string { func (*Filter_Target) ProtoMessage() {} func (x *Filter_Target) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[22] + mi := &file_v1_payload_payload_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1341,7 +1379,7 @@ type Filter_Config struct { func (x *Filter_Config) Reset() { *x = Filter_Config{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[23] + mi := &file_v1_payload_payload_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1354,7 +1392,7 @@ func (x *Filter_Config) String() string { func (*Filter_Config) ProtoMessage() {} func (x *Filter_Config) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[23] + mi := &file_v1_payload_payload_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1392,7 +1430,7 @@ type Insert_Request struct { func (x *Insert_Request) Reset() { *x = Insert_Request{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[24] + mi := &file_v1_payload_payload_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1405,7 +1443,7 @@ func (x *Insert_Request) String() string { func (*Insert_Request) ProtoMessage() {} func (x *Insert_Request) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[24] + mi := &file_v1_payload_payload_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1448,7 +1486,7 @@ type Insert_MultiRequest struct { func (x *Insert_MultiRequest) Reset() { *x = Insert_MultiRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[25] + mi := &file_v1_payload_payload_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1461,7 +1499,7 @@ func (x *Insert_MultiRequest) String() string { func (*Insert_MultiRequest) ProtoMessage() {} func (x *Insert_MultiRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[25] + mi := &file_v1_payload_payload_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1501,7 +1539,7 @@ type Insert_ObjectRequest struct { func (x *Insert_ObjectRequest) Reset() { *x = Insert_ObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[26] + mi := &file_v1_payload_payload_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1514,7 +1552,7 @@ func (x *Insert_ObjectRequest) String() string { func (*Insert_ObjectRequest) ProtoMessage() {} func (x *Insert_ObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[26] + mi := &file_v1_payload_payload_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1564,7 +1602,7 @@ type Insert_MultiObjectRequest struct { func (x *Insert_MultiObjectRequest) Reset() { *x = Insert_MultiObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[27] + mi := &file_v1_payload_payload_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1577,7 +1615,7 @@ func (x *Insert_MultiObjectRequest) String() string { func (*Insert_MultiObjectRequest) ProtoMessage() {} func (x *Insert_MultiObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[27] + mi := &file_v1_payload_payload_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1617,7 +1655,7 @@ type Insert_Config struct { func (x *Insert_Config) Reset() { *x = Insert_Config{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[28] + mi := &file_v1_payload_payload_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1630,7 +1668,7 @@ func (x *Insert_Config) String() string { func (*Insert_Config) ProtoMessage() {} func (x *Insert_Config) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[28] + mi := &file_v1_payload_payload_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1682,7 +1720,7 @@ type Update_Request struct { func (x *Update_Request) Reset() { *x = Update_Request{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[29] + mi := &file_v1_payload_payload_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1695,7 +1733,7 @@ func (x *Update_Request) String() string { func (*Update_Request) ProtoMessage() {} func (x *Update_Request) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[29] + mi := &file_v1_payload_payload_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1738,7 +1776,7 @@ type Update_MultiRequest struct { func (x *Update_MultiRequest) Reset() { *x = Update_MultiRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[30] + mi := &file_v1_payload_payload_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1751,7 +1789,7 @@ func (x *Update_MultiRequest) String() string { func (*Update_MultiRequest) ProtoMessage() {} func (x *Update_MultiRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[30] + mi := &file_v1_payload_payload_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1791,7 +1829,7 @@ type Update_ObjectRequest struct { func (x *Update_ObjectRequest) Reset() { *x = Update_ObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[31] + mi := &file_v1_payload_payload_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1804,7 +1842,7 @@ func (x *Update_ObjectRequest) String() string { func (*Update_ObjectRequest) ProtoMessage() {} func (x *Update_ObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[31] + mi := &file_v1_payload_payload_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1854,7 +1892,7 @@ type Update_MultiObjectRequest struct { func (x *Update_MultiObjectRequest) Reset() { *x = Update_MultiObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[32] + mi := &file_v1_payload_payload_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1867,7 +1905,7 @@ func (x *Update_MultiObjectRequest) String() string { func (*Update_MultiObjectRequest) ProtoMessage() {} func (x *Update_MultiObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[32] + mi := &file_v1_payload_payload_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1910,7 +1948,7 @@ type Update_Config struct { func (x *Update_Config) Reset() { *x = Update_Config{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[33] + mi := &file_v1_payload_payload_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1923,7 +1961,7 @@ func (x *Update_Config) String() string { func (*Update_Config) ProtoMessage() {} func (x *Update_Config) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[33] + mi := &file_v1_payload_payload_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1982,7 +2020,7 @@ type Upsert_Request struct { func (x *Upsert_Request) Reset() { *x = Upsert_Request{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[34] + mi := &file_v1_payload_payload_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1995,7 +2033,7 @@ func (x *Upsert_Request) String() string { func (*Upsert_Request) ProtoMessage() {} func (x *Upsert_Request) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[34] + mi := &file_v1_payload_payload_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2038,7 +2076,7 @@ type Upsert_MultiRequest struct { func (x *Upsert_MultiRequest) Reset() { *x = Upsert_MultiRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[35] + mi := &file_v1_payload_payload_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2051,7 +2089,7 @@ func (x *Upsert_MultiRequest) String() string { func (*Upsert_MultiRequest) ProtoMessage() {} func (x *Upsert_MultiRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[35] + mi := &file_v1_payload_payload_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2091,7 +2129,7 @@ type Upsert_ObjectRequest struct { func (x *Upsert_ObjectRequest) Reset() { *x = Upsert_ObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[36] + mi := &file_v1_payload_payload_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2104,7 +2142,7 @@ func (x *Upsert_ObjectRequest) String() string { func (*Upsert_ObjectRequest) ProtoMessage() {} func (x *Upsert_ObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[36] + mi := &file_v1_payload_payload_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2154,7 +2192,7 @@ type Upsert_MultiObjectRequest struct { func (x *Upsert_MultiObjectRequest) Reset() { *x = Upsert_MultiObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[37] + mi := &file_v1_payload_payload_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2167,7 +2205,7 @@ func (x *Upsert_MultiObjectRequest) String() string { func (*Upsert_MultiObjectRequest) ProtoMessage() {} func (x *Upsert_MultiObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[37] + mi := &file_v1_payload_payload_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2210,7 +2248,7 @@ type Upsert_Config struct { func (x *Upsert_Config) Reset() { *x = Upsert_Config{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[38] + mi := &file_v1_payload_payload_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2223,7 +2261,7 @@ func (x *Upsert_Config) String() string { func (*Upsert_Config) ProtoMessage() {} func (x *Upsert_Config) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[38] + mi := &file_v1_payload_payload_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2282,7 +2320,7 @@ type Remove_Request struct { func (x *Remove_Request) Reset() { *x = Remove_Request{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[39] + mi := &file_v1_payload_payload_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2295,7 +2333,7 @@ func (x *Remove_Request) String() string { func (*Remove_Request) ProtoMessage() {} func (x *Remove_Request) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[39] + mi := &file_v1_payload_payload_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2338,7 +2376,7 @@ type Remove_MultiRequest struct { func (x *Remove_MultiRequest) Reset() { *x = Remove_MultiRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[40] + mi := &file_v1_payload_payload_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2351,7 +2389,7 @@ func (x *Remove_MultiRequest) String() string { func (*Remove_MultiRequest) ProtoMessage() {} func (x *Remove_MultiRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[40] + mi := &file_v1_payload_payload_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2387,7 +2425,7 @@ type Remove_TimestampRequest struct { func (x *Remove_TimestampRequest) Reset() { *x = Remove_TimestampRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[41] + mi := &file_v1_payload_payload_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2400,7 +2438,7 @@ func (x *Remove_TimestampRequest) String() string { func (*Remove_TimestampRequest) ProtoMessage() {} func (x *Remove_TimestampRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[41] + mi := &file_v1_payload_payload_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2438,7 +2476,7 @@ type Remove_Timestamp struct { func (x *Remove_Timestamp) Reset() { *x = Remove_Timestamp{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[42] + mi := &file_v1_payload_payload_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2451,7 +2489,7 @@ func (x *Remove_Timestamp) String() string { func (*Remove_Timestamp) ProtoMessage() {} func (x *Remove_Timestamp) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[42] + mi := &file_v1_payload_payload_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2496,7 +2534,7 @@ type Remove_Config struct { func (x *Remove_Config) Reset() { *x = Remove_Config{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[43] + mi := &file_v1_payload_payload_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2509,7 +2547,7 @@ func (x *Remove_Config) String() string { func (*Remove_Config) ProtoMessage() {} func (x *Remove_Config) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[43] + mi := &file_v1_payload_payload_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2539,6 +2577,44 @@ func (x *Remove_Config) GetTimestamp() int64 { return 0 } +type Flush_Request struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Flush_Request) Reset() { + *x = Flush_Request{} + if protoimpl.UnsafeEnabled { + mi := &file_v1_payload_payload_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Flush_Request) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Flush_Request) ProtoMessage() {} + +func (x *Flush_Request) ProtoReflect() protoreflect.Message { + mi := &file_v1_payload_payload_proto_msgTypes[45] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Flush_Request.ProtoReflect.Descriptor instead. +func (*Flush_Request) Descriptor() ([]byte, []int) { + return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 0} +} + // Represent a request to fetch raw vector. type Object_VectorRequest struct { state protoimpl.MessageState @@ -2554,7 +2630,7 @@ type Object_VectorRequest struct { func (x *Object_VectorRequest) Reset() { *x = Object_VectorRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[44] + mi := &file_v1_payload_payload_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2567,7 +2643,7 @@ func (x *Object_VectorRequest) String() string { func (*Object_VectorRequest) ProtoMessage() {} func (x *Object_VectorRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[44] + mi := &file_v1_payload_payload_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2580,7 +2656,7 @@ func (x *Object_VectorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_VectorRequest.ProtoReflect.Descriptor instead. func (*Object_VectorRequest) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 0} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 0} } func (x *Object_VectorRequest) GetId() *Object_ID { @@ -2612,7 +2688,7 @@ type Object_Distance struct { func (x *Object_Distance) Reset() { *x = Object_Distance{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[45] + mi := &file_v1_payload_payload_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2625,7 +2701,7 @@ func (x *Object_Distance) String() string { func (*Object_Distance) ProtoMessage() {} func (x *Object_Distance) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[45] + mi := &file_v1_payload_payload_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2638,7 +2714,7 @@ func (x *Object_Distance) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_Distance.ProtoReflect.Descriptor instead. func (*Object_Distance) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 1} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 1} } func (x *Object_Distance) GetId() string { @@ -2671,7 +2747,7 @@ type Object_StreamDistance struct { func (x *Object_StreamDistance) Reset() { *x = Object_StreamDistance{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[46] + mi := &file_v1_payload_payload_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2684,7 +2760,7 @@ func (x *Object_StreamDistance) String() string { func (*Object_StreamDistance) ProtoMessage() {} func (x *Object_StreamDistance) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[46] + mi := &file_v1_payload_payload_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2697,7 +2773,7 @@ func (x *Object_StreamDistance) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_StreamDistance.ProtoReflect.Descriptor instead. func (*Object_StreamDistance) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 2} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 2} } func (m *Object_StreamDistance) GetPayload() isObject_StreamDistance_Payload { @@ -2751,7 +2827,7 @@ type Object_ID struct { func (x *Object_ID) Reset() { *x = Object_ID{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[47] + mi := &file_v1_payload_payload_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2764,7 +2840,7 @@ func (x *Object_ID) String() string { func (*Object_ID) ProtoMessage() {} func (x *Object_ID) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[47] + mi := &file_v1_payload_payload_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2777,7 +2853,7 @@ func (x *Object_ID) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_ID.ProtoReflect.Descriptor instead. func (*Object_ID) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 3} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 3} } func (x *Object_ID) GetId() string { @@ -2799,7 +2875,7 @@ type Object_IDs struct { func (x *Object_IDs) Reset() { *x = Object_IDs{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[48] + mi := &file_v1_payload_payload_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2812,7 +2888,7 @@ func (x *Object_IDs) String() string { func (*Object_IDs) ProtoMessage() {} func (x *Object_IDs) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[48] + mi := &file_v1_payload_payload_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2825,7 +2901,7 @@ func (x *Object_IDs) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_IDs.ProtoReflect.Descriptor instead. func (*Object_IDs) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 4} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 4} } func (x *Object_IDs) GetIds() []string { @@ -2852,7 +2928,7 @@ type Object_Vector struct { func (x *Object_Vector) Reset() { *x = Object_Vector{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[49] + mi := &file_v1_payload_payload_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2865,7 +2941,7 @@ func (x *Object_Vector) String() string { func (*Object_Vector) ProtoMessage() {} func (x *Object_Vector) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[49] + mi := &file_v1_payload_payload_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2878,7 +2954,7 @@ func (x *Object_Vector) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_Vector.ProtoReflect.Descriptor instead. func (*Object_Vector) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 5} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 5} } func (x *Object_Vector) GetId() string { @@ -2915,7 +2991,7 @@ type Object_GetTimestampRequest struct { func (x *Object_GetTimestampRequest) Reset() { *x = Object_GetTimestampRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[50] + mi := &file_v1_payload_payload_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2928,7 +3004,7 @@ func (x *Object_GetTimestampRequest) String() string { func (*Object_GetTimestampRequest) ProtoMessage() {} func (x *Object_GetTimestampRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[50] + mi := &file_v1_payload_payload_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2941,7 +3017,7 @@ func (x *Object_GetTimestampRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_GetTimestampRequest.ProtoReflect.Descriptor instead. func (*Object_GetTimestampRequest) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 6} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 6} } func (x *Object_GetTimestampRequest) GetId() *Object_ID { @@ -2966,7 +3042,7 @@ type Object_Timestamp struct { func (x *Object_Timestamp) Reset() { *x = Object_Timestamp{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[51] + mi := &file_v1_payload_payload_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2979,7 +3055,7 @@ func (x *Object_Timestamp) String() string { func (*Object_Timestamp) ProtoMessage() {} func (x *Object_Timestamp) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[51] + mi := &file_v1_payload_payload_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2992,7 +3068,7 @@ func (x *Object_Timestamp) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_Timestamp.ProtoReflect.Descriptor instead. func (*Object_Timestamp) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 7} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 7} } func (x *Object_Timestamp) GetId() string { @@ -3021,7 +3097,7 @@ type Object_Vectors struct { func (x *Object_Vectors) Reset() { *x = Object_Vectors{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[52] + mi := &file_v1_payload_payload_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3034,7 +3110,7 @@ func (x *Object_Vectors) String() string { func (*Object_Vectors) ProtoMessage() {} func (x *Object_Vectors) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[52] + mi := &file_v1_payload_payload_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3047,7 +3123,7 @@ func (x *Object_Vectors) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_Vectors.ProtoReflect.Descriptor instead. func (*Object_Vectors) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 8} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 8} } func (x *Object_Vectors) GetVectors() []*Object_Vector { @@ -3073,7 +3149,7 @@ type Object_StreamVector struct { func (x *Object_StreamVector) Reset() { *x = Object_StreamVector{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[53] + mi := &file_v1_payload_payload_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3086,7 +3162,7 @@ func (x *Object_StreamVector) String() string { func (*Object_StreamVector) ProtoMessage() {} func (x *Object_StreamVector) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[53] + mi := &file_v1_payload_payload_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3099,7 +3175,7 @@ func (x *Object_StreamVector) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_StreamVector.ProtoReflect.Descriptor instead. func (*Object_StreamVector) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 9} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 9} } func (m *Object_StreamVector) GetPayload() isObject_StreamVector_Payload { @@ -3156,7 +3232,7 @@ type Object_ReshapeVector struct { func (x *Object_ReshapeVector) Reset() { *x = Object_ReshapeVector{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[54] + mi := &file_v1_payload_payload_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3169,7 +3245,7 @@ func (x *Object_ReshapeVector) String() string { func (*Object_ReshapeVector) ProtoMessage() {} func (x *Object_ReshapeVector) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[54] + mi := &file_v1_payload_payload_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3182,7 +3258,7 @@ func (x *Object_ReshapeVector) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_ReshapeVector.ProtoReflect.Descriptor instead. func (*Object_ReshapeVector) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 10} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 10} } func (x *Object_ReshapeVector) GetObject() []byte { @@ -3214,7 +3290,7 @@ type Object_Blob struct { func (x *Object_Blob) Reset() { *x = Object_Blob{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[55] + mi := &file_v1_payload_payload_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3227,7 +3303,7 @@ func (x *Object_Blob) String() string { func (*Object_Blob) ProtoMessage() {} func (x *Object_Blob) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[55] + mi := &file_v1_payload_payload_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3240,7 +3316,7 @@ func (x *Object_Blob) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_Blob.ProtoReflect.Descriptor instead. func (*Object_Blob) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 11} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 11} } func (x *Object_Blob) GetId() string { @@ -3273,7 +3349,7 @@ type Object_StreamBlob struct { func (x *Object_StreamBlob) Reset() { *x = Object_StreamBlob{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[56] + mi := &file_v1_payload_payload_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3286,7 +3362,7 @@ func (x *Object_StreamBlob) String() string { func (*Object_StreamBlob) ProtoMessage() {} func (x *Object_StreamBlob) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[56] + mi := &file_v1_payload_payload_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3299,7 +3375,7 @@ func (x *Object_StreamBlob) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_StreamBlob.ProtoReflect.Descriptor instead. func (*Object_StreamBlob) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 12} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 12} } func (m *Object_StreamBlob) GetPayload() isObject_StreamBlob_Payload { @@ -3358,7 +3434,7 @@ type Object_Location struct { func (x *Object_Location) Reset() { *x = Object_Location{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[57] + mi := &file_v1_payload_payload_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3371,7 +3447,7 @@ func (x *Object_Location) String() string { func (*Object_Location) ProtoMessage() {} func (x *Object_Location) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[57] + mi := &file_v1_payload_payload_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3384,7 +3460,7 @@ func (x *Object_Location) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_Location.ProtoReflect.Descriptor instead. func (*Object_Location) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 13} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 13} } func (x *Object_Location) GetName() string { @@ -3424,7 +3500,7 @@ type Object_StreamLocation struct { func (x *Object_StreamLocation) Reset() { *x = Object_StreamLocation{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[58] + mi := &file_v1_payload_payload_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3437,7 +3513,7 @@ func (x *Object_StreamLocation) String() string { func (*Object_StreamLocation) ProtoMessage() {} func (x *Object_StreamLocation) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[58] + mi := &file_v1_payload_payload_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3450,7 +3526,7 @@ func (x *Object_StreamLocation) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_StreamLocation.ProtoReflect.Descriptor instead. func (*Object_StreamLocation) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 14} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 14} } func (m *Object_StreamLocation) GetPayload() isObject_StreamLocation_Payload { @@ -3504,7 +3580,7 @@ type Object_Locations struct { func (x *Object_Locations) Reset() { *x = Object_Locations{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[59] + mi := &file_v1_payload_payload_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3517,7 +3593,7 @@ func (x *Object_Locations) String() string { func (*Object_Locations) ProtoMessage() {} func (x *Object_Locations) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[59] + mi := &file_v1_payload_payload_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3530,7 +3606,7 @@ func (x *Object_Locations) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_Locations.ProtoReflect.Descriptor instead. func (*Object_Locations) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 15} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 15} } func (x *Object_Locations) GetLocations() []*Object_Location { @@ -3550,7 +3626,7 @@ type Object_List struct { func (x *Object_List) Reset() { *x = Object_List{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[60] + mi := &file_v1_payload_payload_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3563,7 +3639,7 @@ func (x *Object_List) String() string { func (*Object_List) ProtoMessage() {} func (x *Object_List) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[60] + mi := &file_v1_payload_payload_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3576,7 +3652,7 @@ func (x *Object_List) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_List.ProtoReflect.Descriptor instead. func (*Object_List) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 16} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 16} } type Object_List_Request struct { @@ -3588,7 +3664,7 @@ type Object_List_Request struct { func (x *Object_List_Request) Reset() { *x = Object_List_Request{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[61] + mi := &file_v1_payload_payload_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3601,7 +3677,7 @@ func (x *Object_List_Request) String() string { func (*Object_List_Request) ProtoMessage() {} func (x *Object_List_Request) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[61] + mi := &file_v1_payload_payload_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3614,7 +3690,7 @@ func (x *Object_List_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_List_Request.ProtoReflect.Descriptor instead. func (*Object_List_Request) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 16, 0} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 16, 0} } type Object_List_Response struct { @@ -3632,7 +3708,7 @@ type Object_List_Response struct { func (x *Object_List_Response) Reset() { *x = Object_List_Response{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[62] + mi := &file_v1_payload_payload_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3645,7 +3721,7 @@ func (x *Object_List_Response) String() string { func (*Object_List_Response) ProtoMessage() {} func (x *Object_List_Response) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[62] + mi := &file_v1_payload_payload_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3658,7 +3734,7 @@ func (x *Object_List_Response) ProtoReflect() protoreflect.Message { // Deprecated: Use Object_List_Response.ProtoReflect.Descriptor instead. func (*Object_List_Response) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{6, 16, 1} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 16, 1} } func (m *Object_List_Response) GetPayload() isObject_List_Response_Payload { @@ -3713,7 +3789,7 @@ type Control_CreateIndexRequest struct { func (x *Control_CreateIndexRequest) Reset() { *x = Control_CreateIndexRequest{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[63] + mi := &file_v1_payload_payload_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3726,7 +3802,7 @@ func (x *Control_CreateIndexRequest) String() string { func (*Control_CreateIndexRequest) ProtoMessage() {} func (x *Control_CreateIndexRequest) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[63] + mi := &file_v1_payload_payload_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3739,7 +3815,7 @@ func (x *Control_CreateIndexRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use Control_CreateIndexRequest.ProtoReflect.Descriptor instead. func (*Control_CreateIndexRequest) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{7, 0} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{8, 0} } func (x *Control_CreateIndexRequest) GetPoolSize() uint32 { @@ -3766,7 +3842,7 @@ type Discoverer_Request struct { func (x *Discoverer_Request) Reset() { *x = Discoverer_Request{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[64] + mi := &file_v1_payload_payload_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3779,7 +3855,7 @@ func (x *Discoverer_Request) String() string { func (*Discoverer_Request) ProtoMessage() {} func (x *Discoverer_Request) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[64] + mi := &file_v1_payload_payload_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3792,7 +3868,7 @@ func (x *Discoverer_Request) ProtoReflect() protoreflect.Message { // Deprecated: Use Discoverer_Request.ProtoReflect.Descriptor instead. func (*Discoverer_Request) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{8, 0} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 0} } func (x *Discoverer_Request) GetName() string { @@ -3826,7 +3902,7 @@ type Info_Index struct { func (x *Info_Index) Reset() { *x = Info_Index{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[65] + mi := &file_v1_payload_payload_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3839,7 +3915,7 @@ func (x *Info_Index) String() string { func (*Info_Index) ProtoMessage() {} func (x *Info_Index) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[65] + mi := &file_v1_payload_payload_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3852,7 +3928,7 @@ func (x *Info_Index) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Index.ProtoReflect.Descriptor instead. func (*Info_Index) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 0} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 0} } // Represent the pod information message. @@ -3880,7 +3956,7 @@ type Info_Pod struct { func (x *Info_Pod) Reset() { *x = Info_Pod{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[66] + mi := &file_v1_payload_payload_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3893,7 +3969,7 @@ func (x *Info_Pod) String() string { func (*Info_Pod) ProtoMessage() {} func (x *Info_Pod) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[66] + mi := &file_v1_payload_payload_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3906,7 +3982,7 @@ func (x *Info_Pod) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Pod.ProtoReflect.Descriptor instead. func (*Info_Pod) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 1} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 1} } func (x *Info_Pod) GetAppName() string { @@ -3981,7 +4057,7 @@ type Info_Node struct { func (x *Info_Node) Reset() { *x = Info_Node{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[67] + mi := &file_v1_payload_payload_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3994,7 +4070,7 @@ func (x *Info_Node) String() string { func (*Info_Node) ProtoMessage() {} func (x *Info_Node) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[67] + mi := &file_v1_payload_payload_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4007,7 +4083,7 @@ func (x *Info_Node) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Node.ProtoReflect.Descriptor instead. func (*Info_Node) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 2} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 2} } func (x *Info_Node) GetName() string { @@ -4075,7 +4151,7 @@ type Info_Service struct { func (x *Info_Service) Reset() { *x = Info_Service{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[68] + mi := &file_v1_payload_payload_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4088,7 +4164,7 @@ func (x *Info_Service) String() string { func (*Info_Service) ProtoMessage() {} func (x *Info_Service) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[68] + mi := &file_v1_payload_payload_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4101,7 +4177,7 @@ func (x *Info_Service) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Service.ProtoReflect.Descriptor instead. func (*Info_Service) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 3} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 3} } func (x *Info_Service) GetName() string { @@ -4161,7 +4237,7 @@ type Info_ServicePort struct { func (x *Info_ServicePort) Reset() { *x = Info_ServicePort{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[69] + mi := &file_v1_payload_payload_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4174,7 +4250,7 @@ func (x *Info_ServicePort) String() string { func (*Info_ServicePort) ProtoMessage() {} func (x *Info_ServicePort) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[69] + mi := &file_v1_payload_payload_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4187,7 +4263,7 @@ func (x *Info_ServicePort) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_ServicePort.ProtoReflect.Descriptor instead. func (*Info_ServicePort) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 4} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 4} } func (x *Info_ServicePort) GetName() string { @@ -4216,7 +4292,7 @@ type Info_Labels struct { func (x *Info_Labels) Reset() { *x = Info_Labels{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[70] + mi := &file_v1_payload_payload_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4229,7 +4305,7 @@ func (x *Info_Labels) String() string { func (*Info_Labels) ProtoMessage() {} func (x *Info_Labels) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[70] + mi := &file_v1_payload_payload_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4242,7 +4318,7 @@ func (x *Info_Labels) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Labels.ProtoReflect.Descriptor instead. func (*Info_Labels) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 5} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 5} } func (x *Info_Labels) GetLabels() map[string]string { @@ -4264,7 +4340,7 @@ type Info_Annotations struct { func (x *Info_Annotations) Reset() { *x = Info_Annotations{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[71] + mi := &file_v1_payload_payload_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4277,7 +4353,7 @@ func (x *Info_Annotations) String() string { func (*Info_Annotations) ProtoMessage() {} func (x *Info_Annotations) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[71] + mi := &file_v1_payload_payload_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4290,7 +4366,7 @@ func (x *Info_Annotations) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Annotations.ProtoReflect.Descriptor instead. func (*Info_Annotations) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 6} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 6} } func (x *Info_Annotations) GetAnnotations() map[string]string { @@ -4317,7 +4393,7 @@ type Info_CPU struct { func (x *Info_CPU) Reset() { *x = Info_CPU{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[72] + mi := &file_v1_payload_payload_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4330,7 +4406,7 @@ func (x *Info_CPU) String() string { func (*Info_CPU) ProtoMessage() {} func (x *Info_CPU) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[72] + mi := &file_v1_payload_payload_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4343,7 +4419,7 @@ func (x *Info_CPU) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_CPU.ProtoReflect.Descriptor instead. func (*Info_CPU) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 7} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 7} } func (x *Info_CPU) GetLimit() float64 { @@ -4384,7 +4460,7 @@ type Info_Memory struct { func (x *Info_Memory) Reset() { *x = Info_Memory{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[73] + mi := &file_v1_payload_payload_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4397,7 +4473,7 @@ func (x *Info_Memory) String() string { func (*Info_Memory) ProtoMessage() {} func (x *Info_Memory) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[73] + mi := &file_v1_payload_payload_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4410,7 +4486,7 @@ func (x *Info_Memory) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Memory.ProtoReflect.Descriptor instead. func (*Info_Memory) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 8} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 8} } func (x *Info_Memory) GetLimit() float64 { @@ -4447,7 +4523,7 @@ type Info_Pods struct { func (x *Info_Pods) Reset() { *x = Info_Pods{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[74] + mi := &file_v1_payload_payload_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4460,7 +4536,7 @@ func (x *Info_Pods) String() string { func (*Info_Pods) ProtoMessage() {} func (x *Info_Pods) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[74] + mi := &file_v1_payload_payload_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4473,7 +4549,7 @@ func (x *Info_Pods) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Pods.ProtoReflect.Descriptor instead. func (*Info_Pods) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 9} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 9} } func (x *Info_Pods) GetPods() []*Info_Pod { @@ -4496,7 +4572,7 @@ type Info_Nodes struct { func (x *Info_Nodes) Reset() { *x = Info_Nodes{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[75] + mi := &file_v1_payload_payload_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4509,7 +4585,7 @@ func (x *Info_Nodes) String() string { func (*Info_Nodes) ProtoMessage() {} func (x *Info_Nodes) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[75] + mi := &file_v1_payload_payload_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4522,7 +4598,7 @@ func (x *Info_Nodes) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Nodes.ProtoReflect.Descriptor instead. func (*Info_Nodes) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 10} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 10} } func (x *Info_Nodes) GetNodes() []*Info_Node { @@ -4545,7 +4621,7 @@ type Info_Services struct { func (x *Info_Services) Reset() { *x = Info_Services{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[76] + mi := &file_v1_payload_payload_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4558,7 +4634,7 @@ func (x *Info_Services) String() string { func (*Info_Services) ProtoMessage() {} func (x *Info_Services) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[76] + mi := &file_v1_payload_payload_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4571,7 +4647,7 @@ func (x *Info_Services) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Services.ProtoReflect.Descriptor instead. func (*Info_Services) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 11} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 11} } func (x *Info_Services) GetServices() []*Info_Service { @@ -4593,7 +4669,7 @@ type Info_IPs struct { func (x *Info_IPs) Reset() { *x = Info_IPs{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[77] + mi := &file_v1_payload_payload_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4606,7 +4682,7 @@ func (x *Info_IPs) String() string { func (*Info_IPs) ProtoMessage() {} func (x *Info_IPs) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[77] + mi := &file_v1_payload_payload_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4619,7 +4695,7 @@ func (x *Info_IPs) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_IPs.ProtoReflect.Descriptor instead. func (*Info_IPs) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 12} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 12} } func (x *Info_IPs) GetIp() []string { @@ -4648,7 +4724,7 @@ type Info_Index_Count struct { func (x *Info_Index_Count) Reset() { *x = Info_Index_Count{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[78] + mi := &file_v1_payload_payload_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4661,7 +4737,7 @@ func (x *Info_Index_Count) String() string { func (*Info_Index_Count) ProtoMessage() {} func (x *Info_Index_Count) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[78] + mi := &file_v1_payload_payload_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4674,7 +4750,7 @@ func (x *Info_Index_Count) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Index_Count.ProtoReflect.Descriptor instead. func (*Info_Index_Count) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 0, 0} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 0, 0} } func (x *Info_Index_Count) GetStored() uint32 { @@ -4715,7 +4791,7 @@ type Info_Index_UUID struct { func (x *Info_Index_UUID) Reset() { *x = Info_Index_UUID{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[79] + mi := &file_v1_payload_payload_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4728,7 +4804,7 @@ func (x *Info_Index_UUID) String() string { func (*Info_Index_UUID) ProtoMessage() {} func (x *Info_Index_UUID) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[79] + mi := &file_v1_payload_payload_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4741,7 +4817,7 @@ func (x *Info_Index_UUID) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Index_UUID.ProtoReflect.Descriptor instead. func (*Info_Index_UUID) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 0, 1} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 0, 1} } // The committed UUID. @@ -4756,7 +4832,7 @@ type Info_Index_UUID_Committed struct { func (x *Info_Index_UUID_Committed) Reset() { *x = Info_Index_UUID_Committed{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[80] + mi := &file_v1_payload_payload_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4769,7 +4845,7 @@ func (x *Info_Index_UUID_Committed) String() string { func (*Info_Index_UUID_Committed) ProtoMessage() {} func (x *Info_Index_UUID_Committed) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[80] + mi := &file_v1_payload_payload_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4782,7 +4858,7 @@ func (x *Info_Index_UUID_Committed) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Index_UUID_Committed.ProtoReflect.Descriptor instead. func (*Info_Index_UUID_Committed) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 0, 1, 0} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 0, 1, 0} } func (x *Info_Index_UUID_Committed) GetUuid() string { @@ -4804,7 +4880,7 @@ type Info_Index_UUID_Uncommitted struct { func (x *Info_Index_UUID_Uncommitted) Reset() { *x = Info_Index_UUID_Uncommitted{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[81] + mi := &file_v1_payload_payload_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4817,7 +4893,7 @@ func (x *Info_Index_UUID_Uncommitted) String() string { func (*Info_Index_UUID_Uncommitted) ProtoMessage() {} func (x *Info_Index_UUID_Uncommitted) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[81] + mi := &file_v1_payload_payload_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4830,7 +4906,7 @@ func (x *Info_Index_UUID_Uncommitted) ProtoReflect() protoreflect.Message { // Deprecated: Use Info_Index_UUID_Uncommitted.ProtoReflect.Descriptor instead. func (*Info_Index_UUID_Uncommitted) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{9, 0, 1, 1} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 0, 1, 1} } func (x *Info_Index_UUID_Uncommitted) GetUuid() string { @@ -4855,7 +4931,7 @@ type Mirror_Target struct { func (x *Mirror_Target) Reset() { *x = Mirror_Target{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[84] + mi := &file_v1_payload_payload_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4868,7 +4944,7 @@ func (x *Mirror_Target) String() string { func (*Mirror_Target) ProtoMessage() {} func (x *Mirror_Target) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[84] + mi := &file_v1_payload_payload_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4881,7 +4957,7 @@ func (x *Mirror_Target) ProtoReflect() protoreflect.Message { // Deprecated: Use Mirror_Target.ProtoReflect.Descriptor instead. func (*Mirror_Target) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 0} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{11, 0} } func (x *Mirror_Target) GetHost() string { @@ -4911,7 +4987,7 @@ type Mirror_Targets struct { func (x *Mirror_Targets) Reset() { *x = Mirror_Targets{} if protoimpl.UnsafeEnabled { - mi := &file_v1_payload_payload_proto_msgTypes[85] + mi := &file_v1_payload_payload_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4924,7 +5000,7 @@ func (x *Mirror_Targets) String() string { func (*Mirror_Targets) ProtoMessage() {} func (x *Mirror_Targets) ProtoReflect() protoreflect.Message { - mi := &file_v1_payload_payload_proto_msgTypes[85] + mi := &file_v1_payload_payload_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4937,7 +5013,7 @@ func (x *Mirror_Targets) ProtoReflect() protoreflect.Message { // Deprecated: Use Mirror_Targets.ProtoReflect.Descriptor instead. func (*Mirror_Targets) Descriptor() ([]byte, []int) { - return file_v1_payload_payload_proto_rawDescGZIP(), []int{10, 1} + return file_v1_payload_payload_proto_rawDescGZIP(), []int{11, 1} } func (x *Mirror_Targets) GetTargets() []*Mirror_Target { @@ -5206,229 +5282,230 @@ var file_v1_payload_payload_proto_rawDesc = []byte{ 0x14, 0x73, 0x6b, 0x69, 0x70, 0x53, 0x74, 0x72, 0x69, 0x63, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x22, 0xb4, 0x0b, 0x0a, 0x06, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x1a, 0x75, - 0x0a, 0x0d, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x2f, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x49, 0x44, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x02, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x33, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x36, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x1a, 0x84, 0x01, - 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x12, 0x39, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x48, - 0x00, 0x52, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, - 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x1d, 0x0a, 0x02, 0x49, 0x44, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, + 0x61, 0x6d, 0x70, 0x22, 0x12, 0x0a, 0x05, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x1a, 0x09, 0x0a, 0x07, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xb4, 0x0b, 0x0a, 0x06, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x1a, 0x75, 0x0a, 0x0d, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x49, 0x44, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x02, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, + 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x1a, 0x36, 0x0a, 0x08, 0x44, 0x69, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x1a, 0x84, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x69, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, + 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x09, 0x0a, + 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x1d, 0x0a, 0x02, 0x49, 0x44, 0x12, 0x17, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, + 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x17, 0x0a, 0x03, 0x49, 0x44, 0x73, 0x12, 0x10, + 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, + 0x1a, 0x61, 0x0a, 0x06, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x02, 0x69, 0x64, 0x1a, 0x17, 0x0a, 0x03, 0x49, 0x44, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x1a, 0x61, 0x0a, 0x06, - 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x20, 0x0a, 0x06, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x02, 0x42, - 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x02, 0x52, 0x06, 0x76, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, + 0x02, 0x69, 0x64, 0x12, 0x20, 0x0a, 0x06, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x02, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x02, 0x52, 0x06, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x1a, 0x46, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x49, 0x44, 0x42, 0x08, 0xba, + 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x02, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x42, 0x0a, 0x09, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, - 0x46, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x49, 0x44, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, - 0x02, 0x08, 0x02, 0x52, 0x02, 0x69, 0x64, 0x1a, 0x42, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, 0x3e, 0x0a, 0x07, 0x56, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x07, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x56, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x52, 0x07, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x1a, 0x7c, 0x0a, 0x0c, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x06, 0x76, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x61, + 0x3e, 0x0a, 0x07, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x07, 0x76, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, - 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x06, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x09, - 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x3d, 0x0a, 0x0d, 0x52, 0x65, 0x73, - 0x68, 0x61, 0x70, 0x65, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x1a, 0x37, 0x0a, 0x04, 0x42, 0x6c, 0x6f, 0x62, - 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x1a, 0x74, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x6c, 0x6f, 0x62, 0x12, - 0x2d, 0x0a, 0x04, 0x62, 0x6c, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6c, 0x6f, 0x62, 0x12, 0x2c, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x09, 0x0a, 0x07, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x44, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, - 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x70, 0x73, 0x1a, 0x84, 0x01, - 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x39, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, - 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x46, 0x0a, 0x09, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x39, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x8b, 0x01, 0x0a, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x1a, 0x09, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x78, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06, - 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x06, 0x76, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, - 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x45, 0x0a, 0x07, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x1a, 0x3a, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, - 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x09, 0x70, - 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x07, - 0xba, 0x48, 0x04, 0x2a, 0x02, 0x28, 0x00, 0x52, 0x08, 0x70, 0x6f, 0x6f, 0x6c, 0x53, 0x69, 0x7a, - 0x65, 0x22, 0x66, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x72, 0x1a, - 0x58, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x8c, 0x0d, 0x0a, 0x04, 0x49, 0x6e, - 0x66, 0x6f, 0x1a, 0xca, 0x01, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x1a, 0x75, 0x0a, 0x05, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x12, 0x20, 0x0a, - 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, - 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x61, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x61, 0x76, - 0x69, 0x6e, 0x67, 0x1a, 0x4a, 0x0a, 0x04, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x1f, 0x0a, 0x09, 0x43, - 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x1a, 0x21, 0x0a, 0x0b, - 0x55, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, - 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x1a, - 0xef, 0x01, 0x0a, 0x03, 0x50, 0x6f, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, 0x70, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, 0x70, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x78, 0x01, 0x52, 0x02, 0x69, 0x70, 0x12, 0x26, 0x0a, - 0x03, 0x63, 0x70, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x50, 0x55, - 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x06, - 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x29, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, - 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, - 0x65, 0x1a, 0xe8, 0x01, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, - 0x64, 0x64, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x12, 0x26, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x50, 0x55, 0x52, 0x03, 0x63, 0x70, 0x75, - 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, - 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, - 0x79, 0x12, 0x29, 0x0a, 0x04, 0x50, 0x6f, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, - 0x6f, 0x2e, 0x50, 0x6f, 0x64, 0x73, 0x52, 0x04, 0x50, 0x6f, 0x64, 0x73, 0x1a, 0x82, 0x02, 0x0a, - 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x70, 0x73, 0x12, 0x32, 0x0a, 0x05, - 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, - 0x66, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x12, 0x3e, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x1a, 0x35, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x80, 0x01, 0x0a, 0x06, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x12, 0x3b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x2e, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x9e, 0x01, 0x0a, 0x0b, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x0b, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2d, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, - 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3e, 0x0a, 0x10, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4b, 0x0a, 0x03, - 0x43, 0x50, 0x55, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4e, 0x0a, 0x06, 0x4d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x3a, 0x0a, 0x04, 0x50, 0x6f, 0x64, - 0x73, 0x12, 0x32, 0x0a, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, - 0x6f, 0x2e, 0x50, 0x6f, 0x64, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, - 0x04, 0x70, 0x6f, 0x64, 0x73, 0x1a, 0x3e, 0x0a, 0x05, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x35, - 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, - 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x05, - 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x1a, 0x4a, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x08, 0xba, - 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x1a, 0x15, 0x0a, 0x03, 0x49, 0x50, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x22, 0x7a, 0x0a, 0x06, 0x4d, 0x69, 0x72, 0x72, - 0x6f, 0x72, 0x1a, 0x30, 0x0a, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, - 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x3e, 0x0a, 0x07, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, - 0x33, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x69, - 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x73, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x64, 0x0a, - 0x1d, 0x6f, 0x72, 0x67, 0x2e, 0x76, 0x64, 0x61, 0x61, 0x73, 0x2e, 0x76, 0x61, 0x6c, 0x64, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x0b, - 0x56, 0x61, 0x6c, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x50, 0x01, 0x5a, 0x2a, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x76, 0x64, 0x61, 0x61, 0x73, 0x2f, - 0x76, 0x61, 0x6c, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0xa2, 0x02, 0x07, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x1a, + 0x7c, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, + 0x33, 0x0a, 0x06, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x06, 0x76, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, + 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x3d, 0x0a, + 0x0d, 0x52, 0x65, 0x73, 0x68, 0x61, 0x70, 0x65, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, + 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x05, 0x73, 0x68, 0x61, 0x70, 0x65, 0x1a, 0x37, 0x0a, 0x04, + 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x1a, 0x74, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, + 0x6c, 0x6f, 0x62, 0x12, 0x2d, 0x0a, 0x04, 0x62, 0x6c, 0x6f, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x42, 0x6c, 0x6f, 0x62, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6c, + 0x6f, 0x62, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x44, 0x0a, 0x08, 0x4c, + 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, + 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, + 0x10, 0x0a, 0x03, 0x69, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x70, + 0x73, 0x1a, 0x84, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x09, 0x0a, + 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x46, 0x0a, 0x09, 0x4c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x4c, 0x6f, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x1a, 0x8b, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x1a, 0x09, 0x0a, 0x07, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x78, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x33, 0x0a, 0x06, 0x76, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x06, 0x76, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, + 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x45, + 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x1a, 0x3a, 0x0a, 0x12, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x24, 0x0a, 0x09, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x42, 0x07, 0xba, 0x48, 0x04, 0x2a, 0x02, 0x28, 0x00, 0x52, 0x08, 0x70, 0x6f, 0x6f, + 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x66, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x65, 0x72, 0x1a, 0x58, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x64, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x22, 0x8c, 0x0d, + 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x1a, 0xca, 0x01, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, + 0x1a, 0x75, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x12, + 0x16, 0x0a, 0x06, 0x73, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x73, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x1a, 0x4a, 0x0a, 0x04, 0x55, 0x55, 0x49, 0x44, 0x1a, + 0x1f, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, + 0x1a, 0x21, 0x0a, 0x0b, 0x55, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, + 0x75, 0x69, 0x64, 0x1a, 0xef, 0x01, 0x0a, 0x03, 0x50, 0x6f, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, + 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x70, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x78, 0x01, 0x52, 0x02, 0x69, + 0x70, 0x12, 0x26, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, + 0x2e, 0x43, 0x50, 0x55, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x29, 0x0a, 0x04, 0x6e, 0x6f, + 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, + 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x1a, 0xe8, 0x01, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x12, 0x26, 0x0a, 0x03, + 0x63, 0x70, 0x75, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x43, 0x50, 0x55, 0x52, + 0x03, 0x63, 0x70, 0x75, 0x12, 0x2f, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x06, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x29, 0x0a, 0x04, 0x50, 0x6f, 0x64, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x6f, 0x64, 0x73, 0x52, 0x04, 0x50, 0x6f, 0x64, 0x73, + 0x1a, 0x82, 0x02, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x70, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x70, 0x12, + 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x70, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x70, 0x73, + 0x12, 0x32, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, + 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, + 0x6f, 0x72, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3e, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x35, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x80, 0x01, 0x0a, + 0x06, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x9e, 0x01, 0x0a, 0x0b, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x4f, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x4b, 0x0a, 0x03, 0x43, 0x50, 0x55, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x4e, 0x0a, + 0x06, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x3a, 0x0a, + 0x04, 0x50, 0x6f, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x6f, 0x64, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, + 0x02, 0x08, 0x01, 0x52, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x1a, 0x3e, 0x0a, 0x05, 0x4e, 0x6f, 0x64, + 0x65, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x6e, 0x66, 0x6f, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x1a, 0x4a, 0x0a, 0x08, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x15, 0x0a, 0x03, 0x49, 0x50, 0x73, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x22, 0x7a, 0x0a, 0x06, + 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x30, 0x0a, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x68, 0x6f, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x3e, 0x0a, 0x07, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x73, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, + 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x42, 0x64, 0x0a, 0x1d, 0x6f, 0x72, 0x67, 0x2e, 0x76, 0x64, 0x61, 0x61, 0x73, 0x2e, 0x76, + 0x61, 0x6c, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x42, 0x0b, 0x56, 0x61, 0x6c, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x50, + 0x01, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x76, 0x64, + 0x61, 0x61, 0x73, 0x2f, 0x76, 0x61, 0x6c, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x67, 0x72, + 0x70, 0x63, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0xa2, 0x02, 0x07, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5444,7 +5521,7 @@ func file_v1_payload_payload_proto_rawDescGZIP() []byte { } var file_v1_payload_payload_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_v1_payload_payload_proto_msgTypes = make([]protoimpl.MessageInfo, 86) +var file_v1_payload_payload_proto_msgTypes = make([]protoimpl.MessageInfo, 88) var file_v1_payload_payload_proto_goTypes = []interface{}{ (Search_AggregationAlgorithm)(0), // 0: payload.v1.Search.AggregationAlgorithm (Remove_Timestamp_Operator)(0), // 1: payload.v1.Remove.Timestamp.Operator @@ -5454,163 +5531,165 @@ var file_v1_payload_payload_proto_goTypes = []interface{}{ (*Update)(nil), // 5: payload.v1.Update (*Upsert)(nil), // 6: payload.v1.Upsert (*Remove)(nil), // 7: payload.v1.Remove - (*Object)(nil), // 8: payload.v1.Object - (*Control)(nil), // 9: payload.v1.Control - (*Discoverer)(nil), // 10: payload.v1.Discoverer - (*Info)(nil), // 11: payload.v1.Info - (*Mirror)(nil), // 12: payload.v1.Mirror - (*Empty)(nil), // 13: payload.v1.Empty - (*Search_Request)(nil), // 14: payload.v1.Search.Request - (*Search_MultiRequest)(nil), // 15: payload.v1.Search.MultiRequest - (*Search_IDRequest)(nil), // 16: payload.v1.Search.IDRequest - (*Search_MultiIDRequest)(nil), // 17: payload.v1.Search.MultiIDRequest - (*Search_ObjectRequest)(nil), // 18: payload.v1.Search.ObjectRequest - (*Search_MultiObjectRequest)(nil), // 19: payload.v1.Search.MultiObjectRequest - (*Search_Config)(nil), // 20: payload.v1.Search.Config - (*Search_Response)(nil), // 21: payload.v1.Search.Response - (*Search_Responses)(nil), // 22: payload.v1.Search.Responses - (*Search_StreamResponse)(nil), // 23: payload.v1.Search.StreamResponse - (*Filter_Target)(nil), // 24: payload.v1.Filter.Target - (*Filter_Config)(nil), // 25: payload.v1.Filter.Config - (*Insert_Request)(nil), // 26: payload.v1.Insert.Request - (*Insert_MultiRequest)(nil), // 27: payload.v1.Insert.MultiRequest - (*Insert_ObjectRequest)(nil), // 28: payload.v1.Insert.ObjectRequest - (*Insert_MultiObjectRequest)(nil), // 29: payload.v1.Insert.MultiObjectRequest - (*Insert_Config)(nil), // 30: payload.v1.Insert.Config - (*Update_Request)(nil), // 31: payload.v1.Update.Request - (*Update_MultiRequest)(nil), // 32: payload.v1.Update.MultiRequest - (*Update_ObjectRequest)(nil), // 33: payload.v1.Update.ObjectRequest - (*Update_MultiObjectRequest)(nil), // 34: payload.v1.Update.MultiObjectRequest - (*Update_Config)(nil), // 35: payload.v1.Update.Config - (*Upsert_Request)(nil), // 36: payload.v1.Upsert.Request - (*Upsert_MultiRequest)(nil), // 37: payload.v1.Upsert.MultiRequest - (*Upsert_ObjectRequest)(nil), // 38: payload.v1.Upsert.ObjectRequest - (*Upsert_MultiObjectRequest)(nil), // 39: payload.v1.Upsert.MultiObjectRequest - (*Upsert_Config)(nil), // 40: payload.v1.Upsert.Config - (*Remove_Request)(nil), // 41: payload.v1.Remove.Request - (*Remove_MultiRequest)(nil), // 42: payload.v1.Remove.MultiRequest - (*Remove_TimestampRequest)(nil), // 43: payload.v1.Remove.TimestampRequest - (*Remove_Timestamp)(nil), // 44: payload.v1.Remove.Timestamp - (*Remove_Config)(nil), // 45: payload.v1.Remove.Config - (*Object_VectorRequest)(nil), // 46: payload.v1.Object.VectorRequest - (*Object_Distance)(nil), // 47: payload.v1.Object.Distance - (*Object_StreamDistance)(nil), // 48: payload.v1.Object.StreamDistance - (*Object_ID)(nil), // 49: payload.v1.Object.ID - (*Object_IDs)(nil), // 50: payload.v1.Object.IDs - (*Object_Vector)(nil), // 51: payload.v1.Object.Vector - (*Object_GetTimestampRequest)(nil), // 52: payload.v1.Object.GetTimestampRequest - (*Object_Timestamp)(nil), // 53: payload.v1.Object.Timestamp - (*Object_Vectors)(nil), // 54: payload.v1.Object.Vectors - (*Object_StreamVector)(nil), // 55: payload.v1.Object.StreamVector - (*Object_ReshapeVector)(nil), // 56: payload.v1.Object.ReshapeVector - (*Object_Blob)(nil), // 57: payload.v1.Object.Blob - (*Object_StreamBlob)(nil), // 58: payload.v1.Object.StreamBlob - (*Object_Location)(nil), // 59: payload.v1.Object.Location - (*Object_StreamLocation)(nil), // 60: payload.v1.Object.StreamLocation - (*Object_Locations)(nil), // 61: payload.v1.Object.Locations - (*Object_List)(nil), // 62: payload.v1.Object.List - (*Object_List_Request)(nil), // 63: payload.v1.Object.List.Request - (*Object_List_Response)(nil), // 64: payload.v1.Object.List.Response - (*Control_CreateIndexRequest)(nil), // 65: payload.v1.Control.CreateIndexRequest - (*Discoverer_Request)(nil), // 66: payload.v1.Discoverer.Request - (*Info_Index)(nil), // 67: payload.v1.Info.Index - (*Info_Pod)(nil), // 68: payload.v1.Info.Pod - (*Info_Node)(nil), // 69: payload.v1.Info.Node - (*Info_Service)(nil), // 70: payload.v1.Info.Service - (*Info_ServicePort)(nil), // 71: payload.v1.Info.ServicePort - (*Info_Labels)(nil), // 72: payload.v1.Info.Labels - (*Info_Annotations)(nil), // 73: payload.v1.Info.Annotations - (*Info_CPU)(nil), // 74: payload.v1.Info.CPU - (*Info_Memory)(nil), // 75: payload.v1.Info.Memory - (*Info_Pods)(nil), // 76: payload.v1.Info.Pods - (*Info_Nodes)(nil), // 77: payload.v1.Info.Nodes - (*Info_Services)(nil), // 78: payload.v1.Info.Services - (*Info_IPs)(nil), // 79: payload.v1.Info.IPs - (*Info_Index_Count)(nil), // 80: payload.v1.Info.Index.Count - (*Info_Index_UUID)(nil), // 81: payload.v1.Info.Index.UUID - (*Info_Index_UUID_Committed)(nil), // 82: payload.v1.Info.Index.UUID.Committed - (*Info_Index_UUID_Uncommitted)(nil), // 83: payload.v1.Info.Index.UUID.Uncommitted - nil, // 84: payload.v1.Info.Labels.LabelsEntry - nil, // 85: payload.v1.Info.Annotations.AnnotationsEntry - (*Mirror_Target)(nil), // 86: payload.v1.Mirror.Target - (*Mirror_Targets)(nil), // 87: payload.v1.Mirror.Targets - (*status.Status)(nil), // 88: google.rpc.Status + (*Flush)(nil), // 8: payload.v1.Flush + (*Object)(nil), // 9: payload.v1.Object + (*Control)(nil), // 10: payload.v1.Control + (*Discoverer)(nil), // 11: payload.v1.Discoverer + (*Info)(nil), // 12: payload.v1.Info + (*Mirror)(nil), // 13: payload.v1.Mirror + (*Empty)(nil), // 14: payload.v1.Empty + (*Search_Request)(nil), // 15: payload.v1.Search.Request + (*Search_MultiRequest)(nil), // 16: payload.v1.Search.MultiRequest + (*Search_IDRequest)(nil), // 17: payload.v1.Search.IDRequest + (*Search_MultiIDRequest)(nil), // 18: payload.v1.Search.MultiIDRequest + (*Search_ObjectRequest)(nil), // 19: payload.v1.Search.ObjectRequest + (*Search_MultiObjectRequest)(nil), // 20: payload.v1.Search.MultiObjectRequest + (*Search_Config)(nil), // 21: payload.v1.Search.Config + (*Search_Response)(nil), // 22: payload.v1.Search.Response + (*Search_Responses)(nil), // 23: payload.v1.Search.Responses + (*Search_StreamResponse)(nil), // 24: payload.v1.Search.StreamResponse + (*Filter_Target)(nil), // 25: payload.v1.Filter.Target + (*Filter_Config)(nil), // 26: payload.v1.Filter.Config + (*Insert_Request)(nil), // 27: payload.v1.Insert.Request + (*Insert_MultiRequest)(nil), // 28: payload.v1.Insert.MultiRequest + (*Insert_ObjectRequest)(nil), // 29: payload.v1.Insert.ObjectRequest + (*Insert_MultiObjectRequest)(nil), // 30: payload.v1.Insert.MultiObjectRequest + (*Insert_Config)(nil), // 31: payload.v1.Insert.Config + (*Update_Request)(nil), // 32: payload.v1.Update.Request + (*Update_MultiRequest)(nil), // 33: payload.v1.Update.MultiRequest + (*Update_ObjectRequest)(nil), // 34: payload.v1.Update.ObjectRequest + (*Update_MultiObjectRequest)(nil), // 35: payload.v1.Update.MultiObjectRequest + (*Update_Config)(nil), // 36: payload.v1.Update.Config + (*Upsert_Request)(nil), // 37: payload.v1.Upsert.Request + (*Upsert_MultiRequest)(nil), // 38: payload.v1.Upsert.MultiRequest + (*Upsert_ObjectRequest)(nil), // 39: payload.v1.Upsert.ObjectRequest + (*Upsert_MultiObjectRequest)(nil), // 40: payload.v1.Upsert.MultiObjectRequest + (*Upsert_Config)(nil), // 41: payload.v1.Upsert.Config + (*Remove_Request)(nil), // 42: payload.v1.Remove.Request + (*Remove_MultiRequest)(nil), // 43: payload.v1.Remove.MultiRequest + (*Remove_TimestampRequest)(nil), // 44: payload.v1.Remove.TimestampRequest + (*Remove_Timestamp)(nil), // 45: payload.v1.Remove.Timestamp + (*Remove_Config)(nil), // 46: payload.v1.Remove.Config + (*Flush_Request)(nil), // 47: payload.v1.Flush.Request + (*Object_VectorRequest)(nil), // 48: payload.v1.Object.VectorRequest + (*Object_Distance)(nil), // 49: payload.v1.Object.Distance + (*Object_StreamDistance)(nil), // 50: payload.v1.Object.StreamDistance + (*Object_ID)(nil), // 51: payload.v1.Object.ID + (*Object_IDs)(nil), // 52: payload.v1.Object.IDs + (*Object_Vector)(nil), // 53: payload.v1.Object.Vector + (*Object_GetTimestampRequest)(nil), // 54: payload.v1.Object.GetTimestampRequest + (*Object_Timestamp)(nil), // 55: payload.v1.Object.Timestamp + (*Object_Vectors)(nil), // 56: payload.v1.Object.Vectors + (*Object_StreamVector)(nil), // 57: payload.v1.Object.StreamVector + (*Object_ReshapeVector)(nil), // 58: payload.v1.Object.ReshapeVector + (*Object_Blob)(nil), // 59: payload.v1.Object.Blob + (*Object_StreamBlob)(nil), // 60: payload.v1.Object.StreamBlob + (*Object_Location)(nil), // 61: payload.v1.Object.Location + (*Object_StreamLocation)(nil), // 62: payload.v1.Object.StreamLocation + (*Object_Locations)(nil), // 63: payload.v1.Object.Locations + (*Object_List)(nil), // 64: payload.v1.Object.List + (*Object_List_Request)(nil), // 65: payload.v1.Object.List.Request + (*Object_List_Response)(nil), // 66: payload.v1.Object.List.Response + (*Control_CreateIndexRequest)(nil), // 67: payload.v1.Control.CreateIndexRequest + (*Discoverer_Request)(nil), // 68: payload.v1.Discoverer.Request + (*Info_Index)(nil), // 69: payload.v1.Info.Index + (*Info_Pod)(nil), // 70: payload.v1.Info.Pod + (*Info_Node)(nil), // 71: payload.v1.Info.Node + (*Info_Service)(nil), // 72: payload.v1.Info.Service + (*Info_ServicePort)(nil), // 73: payload.v1.Info.ServicePort + (*Info_Labels)(nil), // 74: payload.v1.Info.Labels + (*Info_Annotations)(nil), // 75: payload.v1.Info.Annotations + (*Info_CPU)(nil), // 76: payload.v1.Info.CPU + (*Info_Memory)(nil), // 77: payload.v1.Info.Memory + (*Info_Pods)(nil), // 78: payload.v1.Info.Pods + (*Info_Nodes)(nil), // 79: payload.v1.Info.Nodes + (*Info_Services)(nil), // 80: payload.v1.Info.Services + (*Info_IPs)(nil), // 81: payload.v1.Info.IPs + (*Info_Index_Count)(nil), // 82: payload.v1.Info.Index.Count + (*Info_Index_UUID)(nil), // 83: payload.v1.Info.Index.UUID + (*Info_Index_UUID_Committed)(nil), // 84: payload.v1.Info.Index.UUID.Committed + (*Info_Index_UUID_Uncommitted)(nil), // 85: payload.v1.Info.Index.UUID.Uncommitted + nil, // 86: payload.v1.Info.Labels.LabelsEntry + nil, // 87: payload.v1.Info.Annotations.AnnotationsEntry + (*Mirror_Target)(nil), // 88: payload.v1.Mirror.Target + (*Mirror_Targets)(nil), // 89: payload.v1.Mirror.Targets + (*status.Status)(nil), // 90: google.rpc.Status } var file_v1_payload_payload_proto_depIdxs = []int32{ - 20, // 0: payload.v1.Search.Request.config:type_name -> payload.v1.Search.Config - 14, // 1: payload.v1.Search.MultiRequest.requests:type_name -> payload.v1.Search.Request - 20, // 2: payload.v1.Search.IDRequest.config:type_name -> payload.v1.Search.Config - 16, // 3: payload.v1.Search.MultiIDRequest.requests:type_name -> payload.v1.Search.IDRequest - 20, // 4: payload.v1.Search.ObjectRequest.config:type_name -> payload.v1.Search.Config - 24, // 5: payload.v1.Search.ObjectRequest.vectorizer:type_name -> payload.v1.Filter.Target - 18, // 6: payload.v1.Search.MultiObjectRequest.requests:type_name -> payload.v1.Search.ObjectRequest - 25, // 7: payload.v1.Search.Config.ingress_filters:type_name -> payload.v1.Filter.Config - 25, // 8: payload.v1.Search.Config.egress_filters:type_name -> payload.v1.Filter.Config + 21, // 0: payload.v1.Search.Request.config:type_name -> payload.v1.Search.Config + 15, // 1: payload.v1.Search.MultiRequest.requests:type_name -> payload.v1.Search.Request + 21, // 2: payload.v1.Search.IDRequest.config:type_name -> payload.v1.Search.Config + 17, // 3: payload.v1.Search.MultiIDRequest.requests:type_name -> payload.v1.Search.IDRequest + 21, // 4: payload.v1.Search.ObjectRequest.config:type_name -> payload.v1.Search.Config + 25, // 5: payload.v1.Search.ObjectRequest.vectorizer:type_name -> payload.v1.Filter.Target + 19, // 6: payload.v1.Search.MultiObjectRequest.requests:type_name -> payload.v1.Search.ObjectRequest + 26, // 7: payload.v1.Search.Config.ingress_filters:type_name -> payload.v1.Filter.Config + 26, // 8: payload.v1.Search.Config.egress_filters:type_name -> payload.v1.Filter.Config 0, // 9: payload.v1.Search.Config.aggregation_algorithm:type_name -> payload.v1.Search.AggregationAlgorithm - 47, // 10: payload.v1.Search.Response.results:type_name -> payload.v1.Object.Distance - 21, // 11: payload.v1.Search.Responses.responses:type_name -> payload.v1.Search.Response - 21, // 12: payload.v1.Search.StreamResponse.response:type_name -> payload.v1.Search.Response - 88, // 13: payload.v1.Search.StreamResponse.status:type_name -> google.rpc.Status - 24, // 14: payload.v1.Filter.Config.targets:type_name -> payload.v1.Filter.Target - 51, // 15: payload.v1.Insert.Request.vector:type_name -> payload.v1.Object.Vector - 30, // 16: payload.v1.Insert.Request.config:type_name -> payload.v1.Insert.Config - 26, // 17: payload.v1.Insert.MultiRequest.requests:type_name -> payload.v1.Insert.Request - 57, // 18: payload.v1.Insert.ObjectRequest.object:type_name -> payload.v1.Object.Blob - 30, // 19: payload.v1.Insert.ObjectRequest.config:type_name -> payload.v1.Insert.Config - 24, // 20: payload.v1.Insert.ObjectRequest.vectorizer:type_name -> payload.v1.Filter.Target - 28, // 21: payload.v1.Insert.MultiObjectRequest.requests:type_name -> payload.v1.Insert.ObjectRequest - 25, // 22: payload.v1.Insert.Config.filters:type_name -> payload.v1.Filter.Config - 51, // 23: payload.v1.Update.Request.vector:type_name -> payload.v1.Object.Vector - 35, // 24: payload.v1.Update.Request.config:type_name -> payload.v1.Update.Config - 31, // 25: payload.v1.Update.MultiRequest.requests:type_name -> payload.v1.Update.Request - 57, // 26: payload.v1.Update.ObjectRequest.object:type_name -> payload.v1.Object.Blob - 35, // 27: payload.v1.Update.ObjectRequest.config:type_name -> payload.v1.Update.Config - 24, // 28: payload.v1.Update.ObjectRequest.vectorizer:type_name -> payload.v1.Filter.Target - 33, // 29: payload.v1.Update.MultiObjectRequest.requests:type_name -> payload.v1.Update.ObjectRequest - 25, // 30: payload.v1.Update.Config.filters:type_name -> payload.v1.Filter.Config - 51, // 31: payload.v1.Upsert.Request.vector:type_name -> payload.v1.Object.Vector - 40, // 32: payload.v1.Upsert.Request.config:type_name -> payload.v1.Upsert.Config - 36, // 33: payload.v1.Upsert.MultiRequest.requests:type_name -> payload.v1.Upsert.Request - 57, // 34: payload.v1.Upsert.ObjectRequest.object:type_name -> payload.v1.Object.Blob - 40, // 35: payload.v1.Upsert.ObjectRequest.config:type_name -> payload.v1.Upsert.Config - 24, // 36: payload.v1.Upsert.ObjectRequest.vectorizer:type_name -> payload.v1.Filter.Target - 38, // 37: payload.v1.Upsert.MultiObjectRequest.requests:type_name -> payload.v1.Upsert.ObjectRequest - 25, // 38: payload.v1.Upsert.Config.filters:type_name -> payload.v1.Filter.Config - 49, // 39: payload.v1.Remove.Request.id:type_name -> payload.v1.Object.ID - 45, // 40: payload.v1.Remove.Request.config:type_name -> payload.v1.Remove.Config - 41, // 41: payload.v1.Remove.MultiRequest.requests:type_name -> payload.v1.Remove.Request - 44, // 42: payload.v1.Remove.TimestampRequest.timestamps:type_name -> payload.v1.Remove.Timestamp + 49, // 10: payload.v1.Search.Response.results:type_name -> payload.v1.Object.Distance + 22, // 11: payload.v1.Search.Responses.responses:type_name -> payload.v1.Search.Response + 22, // 12: payload.v1.Search.StreamResponse.response:type_name -> payload.v1.Search.Response + 90, // 13: payload.v1.Search.StreamResponse.status:type_name -> google.rpc.Status + 25, // 14: payload.v1.Filter.Config.targets:type_name -> payload.v1.Filter.Target + 53, // 15: payload.v1.Insert.Request.vector:type_name -> payload.v1.Object.Vector + 31, // 16: payload.v1.Insert.Request.config:type_name -> payload.v1.Insert.Config + 27, // 17: payload.v1.Insert.MultiRequest.requests:type_name -> payload.v1.Insert.Request + 59, // 18: payload.v1.Insert.ObjectRequest.object:type_name -> payload.v1.Object.Blob + 31, // 19: payload.v1.Insert.ObjectRequest.config:type_name -> payload.v1.Insert.Config + 25, // 20: payload.v1.Insert.ObjectRequest.vectorizer:type_name -> payload.v1.Filter.Target + 29, // 21: payload.v1.Insert.MultiObjectRequest.requests:type_name -> payload.v1.Insert.ObjectRequest + 26, // 22: payload.v1.Insert.Config.filters:type_name -> payload.v1.Filter.Config + 53, // 23: payload.v1.Update.Request.vector:type_name -> payload.v1.Object.Vector + 36, // 24: payload.v1.Update.Request.config:type_name -> payload.v1.Update.Config + 32, // 25: payload.v1.Update.MultiRequest.requests:type_name -> payload.v1.Update.Request + 59, // 26: payload.v1.Update.ObjectRequest.object:type_name -> payload.v1.Object.Blob + 36, // 27: payload.v1.Update.ObjectRequest.config:type_name -> payload.v1.Update.Config + 25, // 28: payload.v1.Update.ObjectRequest.vectorizer:type_name -> payload.v1.Filter.Target + 34, // 29: payload.v1.Update.MultiObjectRequest.requests:type_name -> payload.v1.Update.ObjectRequest + 26, // 30: payload.v1.Update.Config.filters:type_name -> payload.v1.Filter.Config + 53, // 31: payload.v1.Upsert.Request.vector:type_name -> payload.v1.Object.Vector + 41, // 32: payload.v1.Upsert.Request.config:type_name -> payload.v1.Upsert.Config + 37, // 33: payload.v1.Upsert.MultiRequest.requests:type_name -> payload.v1.Upsert.Request + 59, // 34: payload.v1.Upsert.ObjectRequest.object:type_name -> payload.v1.Object.Blob + 41, // 35: payload.v1.Upsert.ObjectRequest.config:type_name -> payload.v1.Upsert.Config + 25, // 36: payload.v1.Upsert.ObjectRequest.vectorizer:type_name -> payload.v1.Filter.Target + 39, // 37: payload.v1.Upsert.MultiObjectRequest.requests:type_name -> payload.v1.Upsert.ObjectRequest + 26, // 38: payload.v1.Upsert.Config.filters:type_name -> payload.v1.Filter.Config + 51, // 39: payload.v1.Remove.Request.id:type_name -> payload.v1.Object.ID + 46, // 40: payload.v1.Remove.Request.config:type_name -> payload.v1.Remove.Config + 42, // 41: payload.v1.Remove.MultiRequest.requests:type_name -> payload.v1.Remove.Request + 45, // 42: payload.v1.Remove.TimestampRequest.timestamps:type_name -> payload.v1.Remove.Timestamp 1, // 43: payload.v1.Remove.Timestamp.operator:type_name -> payload.v1.Remove.Timestamp.Operator - 49, // 44: payload.v1.Object.VectorRequest.id:type_name -> payload.v1.Object.ID - 25, // 45: payload.v1.Object.VectorRequest.filters:type_name -> payload.v1.Filter.Config - 47, // 46: payload.v1.Object.StreamDistance.distance:type_name -> payload.v1.Object.Distance - 88, // 47: payload.v1.Object.StreamDistance.status:type_name -> google.rpc.Status - 49, // 48: payload.v1.Object.GetTimestampRequest.id:type_name -> payload.v1.Object.ID - 51, // 49: payload.v1.Object.Vectors.vectors:type_name -> payload.v1.Object.Vector - 51, // 50: payload.v1.Object.StreamVector.vector:type_name -> payload.v1.Object.Vector - 88, // 51: payload.v1.Object.StreamVector.status:type_name -> google.rpc.Status - 57, // 52: payload.v1.Object.StreamBlob.blob:type_name -> payload.v1.Object.Blob - 88, // 53: payload.v1.Object.StreamBlob.status:type_name -> google.rpc.Status - 59, // 54: payload.v1.Object.StreamLocation.location:type_name -> payload.v1.Object.Location - 88, // 55: payload.v1.Object.StreamLocation.status:type_name -> google.rpc.Status - 59, // 56: payload.v1.Object.Locations.locations:type_name -> payload.v1.Object.Location - 51, // 57: payload.v1.Object.List.Response.vector:type_name -> payload.v1.Object.Vector - 88, // 58: payload.v1.Object.List.Response.status:type_name -> google.rpc.Status - 74, // 59: payload.v1.Info.Pod.cpu:type_name -> payload.v1.Info.CPU - 75, // 60: payload.v1.Info.Pod.memory:type_name -> payload.v1.Info.Memory - 69, // 61: payload.v1.Info.Pod.node:type_name -> payload.v1.Info.Node - 74, // 62: payload.v1.Info.Node.cpu:type_name -> payload.v1.Info.CPU - 75, // 63: payload.v1.Info.Node.memory:type_name -> payload.v1.Info.Memory - 76, // 64: payload.v1.Info.Node.Pods:type_name -> payload.v1.Info.Pods - 71, // 65: payload.v1.Info.Service.ports:type_name -> payload.v1.Info.ServicePort - 72, // 66: payload.v1.Info.Service.labels:type_name -> payload.v1.Info.Labels - 73, // 67: payload.v1.Info.Service.annotations:type_name -> payload.v1.Info.Annotations - 84, // 68: payload.v1.Info.Labels.labels:type_name -> payload.v1.Info.Labels.LabelsEntry - 85, // 69: payload.v1.Info.Annotations.annotations:type_name -> payload.v1.Info.Annotations.AnnotationsEntry - 68, // 70: payload.v1.Info.Pods.pods:type_name -> payload.v1.Info.Pod - 69, // 71: payload.v1.Info.Nodes.nodes:type_name -> payload.v1.Info.Node - 70, // 72: payload.v1.Info.Services.services:type_name -> payload.v1.Info.Service - 86, // 73: payload.v1.Mirror.Targets.targets:type_name -> payload.v1.Mirror.Target + 51, // 44: payload.v1.Object.VectorRequest.id:type_name -> payload.v1.Object.ID + 26, // 45: payload.v1.Object.VectorRequest.filters:type_name -> payload.v1.Filter.Config + 49, // 46: payload.v1.Object.StreamDistance.distance:type_name -> payload.v1.Object.Distance + 90, // 47: payload.v1.Object.StreamDistance.status:type_name -> google.rpc.Status + 51, // 48: payload.v1.Object.GetTimestampRequest.id:type_name -> payload.v1.Object.ID + 53, // 49: payload.v1.Object.Vectors.vectors:type_name -> payload.v1.Object.Vector + 53, // 50: payload.v1.Object.StreamVector.vector:type_name -> payload.v1.Object.Vector + 90, // 51: payload.v1.Object.StreamVector.status:type_name -> google.rpc.Status + 59, // 52: payload.v1.Object.StreamBlob.blob:type_name -> payload.v1.Object.Blob + 90, // 53: payload.v1.Object.StreamBlob.status:type_name -> google.rpc.Status + 61, // 54: payload.v1.Object.StreamLocation.location:type_name -> payload.v1.Object.Location + 90, // 55: payload.v1.Object.StreamLocation.status:type_name -> google.rpc.Status + 61, // 56: payload.v1.Object.Locations.locations:type_name -> payload.v1.Object.Location + 53, // 57: payload.v1.Object.List.Response.vector:type_name -> payload.v1.Object.Vector + 90, // 58: payload.v1.Object.List.Response.status:type_name -> google.rpc.Status + 76, // 59: payload.v1.Info.Pod.cpu:type_name -> payload.v1.Info.CPU + 77, // 60: payload.v1.Info.Pod.memory:type_name -> payload.v1.Info.Memory + 71, // 61: payload.v1.Info.Pod.node:type_name -> payload.v1.Info.Node + 76, // 62: payload.v1.Info.Node.cpu:type_name -> payload.v1.Info.CPU + 77, // 63: payload.v1.Info.Node.memory:type_name -> payload.v1.Info.Memory + 78, // 64: payload.v1.Info.Node.Pods:type_name -> payload.v1.Info.Pods + 73, // 65: payload.v1.Info.Service.ports:type_name -> payload.v1.Info.ServicePort + 74, // 66: payload.v1.Info.Service.labels:type_name -> payload.v1.Info.Labels + 75, // 67: payload.v1.Info.Service.annotations:type_name -> payload.v1.Info.Annotations + 86, // 68: payload.v1.Info.Labels.labels:type_name -> payload.v1.Info.Labels.LabelsEntry + 87, // 69: payload.v1.Info.Annotations.annotations:type_name -> payload.v1.Info.Annotations.AnnotationsEntry + 70, // 70: payload.v1.Info.Pods.pods:type_name -> payload.v1.Info.Pod + 71, // 71: payload.v1.Info.Nodes.nodes:type_name -> payload.v1.Info.Node + 72, // 72: payload.v1.Info.Services.services:type_name -> payload.v1.Info.Service + 88, // 73: payload.v1.Mirror.Targets.targets:type_name -> payload.v1.Mirror.Target 74, // [74:74] is the sub-list for method output_type 74, // [74:74] is the sub-list for method input_type 74, // [74:74] is the sub-list for extension type_name @@ -5697,7 +5776,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object); i { + switch v := v.(*Flush); i { case 0: return &v.state case 1: @@ -5709,7 +5788,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Control); i { + switch v := v.(*Object); i { case 0: return &v.state case 1: @@ -5721,7 +5800,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Discoverer); i { + switch v := v.(*Control); i { case 0: return &v.state case 1: @@ -5733,7 +5812,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info); i { + switch v := v.(*Discoverer); i { case 0: return &v.state case 1: @@ -5745,7 +5824,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Mirror); i { + switch v := v.(*Info); i { case 0: return &v.state case 1: @@ -5757,7 +5836,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Empty); i { + switch v := v.(*Mirror); i { case 0: return &v.state case 1: @@ -5769,7 +5848,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Search_Request); i { + switch v := v.(*Empty); i { case 0: return &v.state case 1: @@ -5781,7 +5860,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Search_MultiRequest); i { + switch v := v.(*Search_Request); i { case 0: return &v.state case 1: @@ -5793,7 +5872,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Search_IDRequest); i { + switch v := v.(*Search_MultiRequest); i { case 0: return &v.state case 1: @@ -5805,7 +5884,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Search_MultiIDRequest); i { + switch v := v.(*Search_IDRequest); i { case 0: return &v.state case 1: @@ -5817,7 +5896,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Search_ObjectRequest); i { + switch v := v.(*Search_MultiIDRequest); i { case 0: return &v.state case 1: @@ -5829,7 +5908,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Search_MultiObjectRequest); i { + switch v := v.(*Search_ObjectRequest); i { case 0: return &v.state case 1: @@ -5841,7 +5920,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Search_Config); i { + switch v := v.(*Search_MultiObjectRequest); i { case 0: return &v.state case 1: @@ -5853,7 +5932,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Search_Response); i { + switch v := v.(*Search_Config); i { case 0: return &v.state case 1: @@ -5865,7 +5944,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Search_Responses); i { + switch v := v.(*Search_Response); i { case 0: return &v.state case 1: @@ -5877,7 +5956,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Search_StreamResponse); i { + switch v := v.(*Search_Responses); i { case 0: return &v.state case 1: @@ -5889,7 +5968,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Filter_Target); i { + switch v := v.(*Search_StreamResponse); i { case 0: return &v.state case 1: @@ -5901,7 +5980,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Filter_Config); i { + switch v := v.(*Filter_Target); i { case 0: return &v.state case 1: @@ -5913,7 +5992,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Insert_Request); i { + switch v := v.(*Filter_Config); i { case 0: return &v.state case 1: @@ -5925,7 +6004,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Insert_MultiRequest); i { + switch v := v.(*Insert_Request); i { case 0: return &v.state case 1: @@ -5937,7 +6016,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Insert_ObjectRequest); i { + switch v := v.(*Insert_MultiRequest); i { case 0: return &v.state case 1: @@ -5949,7 +6028,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Insert_MultiObjectRequest); i { + switch v := v.(*Insert_ObjectRequest); i { case 0: return &v.state case 1: @@ -5961,7 +6040,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Insert_Config); i { + switch v := v.(*Insert_MultiObjectRequest); i { case 0: return &v.state case 1: @@ -5973,7 +6052,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Update_Request); i { + switch v := v.(*Insert_Config); i { case 0: return &v.state case 1: @@ -5985,7 +6064,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Update_MultiRequest); i { + switch v := v.(*Update_Request); i { case 0: return &v.state case 1: @@ -5997,7 +6076,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Update_ObjectRequest); i { + switch v := v.(*Update_MultiRequest); i { case 0: return &v.state case 1: @@ -6009,7 +6088,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Update_MultiObjectRequest); i { + switch v := v.(*Update_ObjectRequest); i { case 0: return &v.state case 1: @@ -6021,7 +6100,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Update_Config); i { + switch v := v.(*Update_MultiObjectRequest); i { case 0: return &v.state case 1: @@ -6033,7 +6112,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Upsert_Request); i { + switch v := v.(*Update_Config); i { case 0: return &v.state case 1: @@ -6045,7 +6124,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Upsert_MultiRequest); i { + switch v := v.(*Upsert_Request); i { case 0: return &v.state case 1: @@ -6057,7 +6136,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Upsert_ObjectRequest); i { + switch v := v.(*Upsert_MultiRequest); i { case 0: return &v.state case 1: @@ -6069,7 +6148,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Upsert_MultiObjectRequest); i { + switch v := v.(*Upsert_ObjectRequest); i { case 0: return &v.state case 1: @@ -6081,7 +6160,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Upsert_Config); i { + switch v := v.(*Upsert_MultiObjectRequest); i { case 0: return &v.state case 1: @@ -6093,7 +6172,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Remove_Request); i { + switch v := v.(*Upsert_Config); i { case 0: return &v.state case 1: @@ -6105,7 +6184,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Remove_MultiRequest); i { + switch v := v.(*Remove_Request); i { case 0: return &v.state case 1: @@ -6117,7 +6196,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Remove_TimestampRequest); i { + switch v := v.(*Remove_MultiRequest); i { case 0: return &v.state case 1: @@ -6129,7 +6208,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Remove_Timestamp); i { + switch v := v.(*Remove_TimestampRequest); i { case 0: return &v.state case 1: @@ -6141,7 +6220,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Remove_Config); i { + switch v := v.(*Remove_Timestamp); i { case 0: return &v.state case 1: @@ -6153,7 +6232,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_VectorRequest); i { + switch v := v.(*Remove_Config); i { case 0: return &v.state case 1: @@ -6165,7 +6244,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_Distance); i { + switch v := v.(*Flush_Request); i { case 0: return &v.state case 1: @@ -6177,7 +6256,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_StreamDistance); i { + switch v := v.(*Object_VectorRequest); i { case 0: return &v.state case 1: @@ -6189,7 +6268,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_ID); i { + switch v := v.(*Object_Distance); i { case 0: return &v.state case 1: @@ -6201,7 +6280,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_IDs); i { + switch v := v.(*Object_StreamDistance); i { case 0: return &v.state case 1: @@ -6213,7 +6292,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_Vector); i { + switch v := v.(*Object_ID); i { case 0: return &v.state case 1: @@ -6225,7 +6304,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_GetTimestampRequest); i { + switch v := v.(*Object_IDs); i { case 0: return &v.state case 1: @@ -6237,7 +6316,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_Timestamp); i { + switch v := v.(*Object_Vector); i { case 0: return &v.state case 1: @@ -6249,7 +6328,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_Vectors); i { + switch v := v.(*Object_GetTimestampRequest); i { case 0: return &v.state case 1: @@ -6261,7 +6340,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_StreamVector); i { + switch v := v.(*Object_Timestamp); i { case 0: return &v.state case 1: @@ -6273,7 +6352,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_ReshapeVector); i { + switch v := v.(*Object_Vectors); i { case 0: return &v.state case 1: @@ -6285,7 +6364,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_Blob); i { + switch v := v.(*Object_StreamVector); i { case 0: return &v.state case 1: @@ -6297,7 +6376,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_StreamBlob); i { + switch v := v.(*Object_ReshapeVector); i { case 0: return &v.state case 1: @@ -6309,7 +6388,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_Location); i { + switch v := v.(*Object_Blob); i { case 0: return &v.state case 1: @@ -6321,7 +6400,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_StreamLocation); i { + switch v := v.(*Object_StreamBlob); i { case 0: return &v.state case 1: @@ -6333,7 +6412,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_Locations); i { + switch v := v.(*Object_Location); i { case 0: return &v.state case 1: @@ -6345,7 +6424,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_List); i { + switch v := v.(*Object_StreamLocation); i { case 0: return &v.state case 1: @@ -6357,7 +6436,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_List_Request); i { + switch v := v.(*Object_Locations); i { case 0: return &v.state case 1: @@ -6369,7 +6448,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Object_List_Response); i { + switch v := v.(*Object_List); i { case 0: return &v.state case 1: @@ -6381,7 +6460,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Control_CreateIndexRequest); i { + switch v := v.(*Object_List_Request); i { case 0: return &v.state case 1: @@ -6393,7 +6472,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Discoverer_Request); i { + switch v := v.(*Object_List_Response); i { case 0: return &v.state case 1: @@ -6405,7 +6484,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_Index); i { + switch v := v.(*Control_CreateIndexRequest); i { case 0: return &v.state case 1: @@ -6417,7 +6496,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_Pod); i { + switch v := v.(*Discoverer_Request); i { case 0: return &v.state case 1: @@ -6429,7 +6508,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_Node); i { + switch v := v.(*Info_Index); i { case 0: return &v.state case 1: @@ -6441,7 +6520,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_Service); i { + switch v := v.(*Info_Pod); i { case 0: return &v.state case 1: @@ -6453,7 +6532,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_ServicePort); i { + switch v := v.(*Info_Node); i { case 0: return &v.state case 1: @@ -6465,7 +6544,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_Labels); i { + switch v := v.(*Info_Service); i { case 0: return &v.state case 1: @@ -6477,7 +6556,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_Annotations); i { + switch v := v.(*Info_ServicePort); i { case 0: return &v.state case 1: @@ -6489,7 +6568,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_CPU); i { + switch v := v.(*Info_Labels); i { case 0: return &v.state case 1: @@ -6501,7 +6580,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_Memory); i { + switch v := v.(*Info_Annotations); i { case 0: return &v.state case 1: @@ -6513,7 +6592,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_Pods); i { + switch v := v.(*Info_CPU); i { case 0: return &v.state case 1: @@ -6525,7 +6604,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_Nodes); i { + switch v := v.(*Info_Memory); i { case 0: return &v.state case 1: @@ -6537,7 +6616,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_Services); i { + switch v := v.(*Info_Pods); i { case 0: return &v.state case 1: @@ -6549,7 +6628,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_IPs); i { + switch v := v.(*Info_Nodes); i { case 0: return &v.state case 1: @@ -6561,7 +6640,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_Index_Count); i { + switch v := v.(*Info_Services); i { case 0: return &v.state case 1: @@ -6573,7 +6652,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_Index_UUID); i { + switch v := v.(*Info_IPs); i { case 0: return &v.state case 1: @@ -6585,7 +6664,7 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Info_Index_UUID_Committed); i { + switch v := v.(*Info_Index_Count); i { case 0: return &v.state case 1: @@ -6597,6 +6676,30 @@ func file_v1_payload_payload_proto_init() { } } file_v1_payload_payload_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Info_Index_UUID); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_v1_payload_payload_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Info_Index_UUID_Committed); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_v1_payload_payload_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Info_Index_UUID_Uncommitted); i { case 0: return &v.state @@ -6608,7 +6711,7 @@ func file_v1_payload_payload_proto_init() { return nil } } - file_v1_payload_payload_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + file_v1_payload_payload_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Mirror_Target); i { case 0: return &v.state @@ -6620,7 +6723,7 @@ func file_v1_payload_payload_proto_init() { return nil } } - file_v1_payload_payload_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + file_v1_payload_payload_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Mirror_Targets); i { case 0: return &v.state @@ -6633,27 +6736,27 @@ func file_v1_payload_payload_proto_init() { } } } - file_v1_payload_payload_proto_msgTypes[21].OneofWrappers = []interface{}{ + file_v1_payload_payload_proto_msgTypes[22].OneofWrappers = []interface{}{ (*Search_StreamResponse_Response)(nil), (*Search_StreamResponse_Status)(nil), } - file_v1_payload_payload_proto_msgTypes[46].OneofWrappers = []interface{}{ + file_v1_payload_payload_proto_msgTypes[48].OneofWrappers = []interface{}{ (*Object_StreamDistance_Distance)(nil), (*Object_StreamDistance_Status)(nil), } - file_v1_payload_payload_proto_msgTypes[53].OneofWrappers = []interface{}{ + file_v1_payload_payload_proto_msgTypes[55].OneofWrappers = []interface{}{ (*Object_StreamVector_Vector)(nil), (*Object_StreamVector_Status)(nil), } - file_v1_payload_payload_proto_msgTypes[56].OneofWrappers = []interface{}{ + file_v1_payload_payload_proto_msgTypes[58].OneofWrappers = []interface{}{ (*Object_StreamBlob_Blob)(nil), (*Object_StreamBlob_Status)(nil), } - file_v1_payload_payload_proto_msgTypes[58].OneofWrappers = []interface{}{ + file_v1_payload_payload_proto_msgTypes[60].OneofWrappers = []interface{}{ (*Object_StreamLocation_Location)(nil), (*Object_StreamLocation_Status)(nil), } - file_v1_payload_payload_proto_msgTypes[62].OneofWrappers = []interface{}{ + file_v1_payload_payload_proto_msgTypes[64].OneofWrappers = []interface{}{ (*Object_List_Response_Vector)(nil), (*Object_List_Response_Status)(nil), } @@ -6663,7 +6766,7 @@ func file_v1_payload_payload_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_v1_payload_payload_proto_rawDesc, NumEnums: 2, - NumMessages: 86, + NumMessages: 88, NumExtensions: 0, NumServices: 0, }, diff --git a/apis/grpc/v1/payload/payload_vtproto.pb.go b/apis/grpc/v1/payload/payload_vtproto.pb.go index 1927bfab2a..a9735924a7 100644 --- a/apis/grpc/v1/payload/payload_vtproto.pb.go +++ b/apis/grpc/v1/payload/payload_vtproto.pb.go @@ -829,6 +829,38 @@ func (m *Remove) CloneMessageVT() proto.Message { return m.CloneVT() } +func (m *Flush_Request) CloneVT() *Flush_Request { + if m == nil { + return (*Flush_Request)(nil) + } + r := new(Flush_Request) + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *Flush_Request) CloneMessageVT() proto.Message { + return m.CloneVT() +} + +func (m *Flush) CloneVT() *Flush { + if m == nil { + return (*Flush)(nil) + } + r := new(Flush) + if len(m.unknownFields) > 0 { + r.unknownFields = make([]byte, len(m.unknownFields)) + copy(r.unknownFields, m.unknownFields) + } + return r +} + +func (m *Flush) CloneMessageVT() proto.Message { + return m.CloneVT() +} + func (m *Object_VectorRequest) CloneVT() *Object_VectorRequest { if m == nil { return (*Object_VectorRequest)(nil) @@ -2934,6 +2966,38 @@ func (this *Remove) EqualMessageVT(thatMsg proto.Message) bool { } return this.EqualVT(that) } +func (this *Flush_Request) EqualVT(that *Flush_Request) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *Flush_Request) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*Flush_Request) + if !ok { + return false + } + return this.EqualVT(that) +} +func (this *Flush) EqualVT(that *Flush) bool { + if this == that { + return true + } else if this == nil || that == nil { + return false + } + return string(this.unknownFields) == string(that.unknownFields) +} + +func (this *Flush) EqualMessageVT(thatMsg proto.Message) bool { + that, ok := thatMsg.(*Flush) + if !ok { + return false + } + return this.EqualVT(that) +} func (this *Object_VectorRequest) EqualVT(that *Object_VectorRequest) bool { if this == that { return true @@ -6266,6 +6330,72 @@ func (m *Remove) MarshalToSizedBufferVT(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *Flush_Request) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Flush_Request) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *Flush_Request) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + return len(dAtA) - i, nil +} + +func (m *Flush) MarshalVT() (dAtA []byte, err error) { + if m == nil { + return nil, nil + } + size := m.SizeVT() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBufferVT(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Flush) MarshalToVT(dAtA []byte) (int, error) { + size := m.SizeVT() + return m.MarshalToSizedBufferVT(dAtA[:size]) +} + +func (m *Flush) MarshalToSizedBufferVT(dAtA []byte) (int, error) { + if m == nil { + return 0, nil + } + i := len(dAtA) + _ = i + var l int + _ = l + if m.unknownFields != nil { + i -= len(m.unknownFields) + copy(dAtA[i:], m.unknownFields) + } + return len(dAtA) - i, nil +} + func (m *Object_VectorRequest) MarshalVT() (dAtA []byte, err error) { if m == nil { return nil, nil @@ -9331,6 +9461,26 @@ func (m *Remove) SizeVT() (n int) { return n } +func (m *Flush_Request) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += len(m.unknownFields) + return n +} + +func (m *Flush) SizeVT() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + n += len(m.unknownFields) + return n +} + func (m *Object_VectorRequest) SizeVT() (n int) { if m == nil { return 0 @@ -14255,6 +14405,108 @@ func (m *Remove) UnmarshalVT(dAtA []byte) error { } return nil } +func (m *Flush_Request) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Flush_Request: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Flush_Request: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Flush) UnmarshalVT(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protohelpers.ErrIntOverflow + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Flush: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Flush: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := protohelpers.Skip(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protohelpers.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.unknownFields = append(m.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Object_VectorRequest) UnmarshalVT(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/apis/grpc/v1/vald/flush.pb.go b/apis/grpc/v1/vald/flush.pb.go new file mode 100644 index 0000000000..20a8e9ff4f --- /dev/null +++ b/apis/grpc/v1/vald/flush.pb.go @@ -0,0 +1,99 @@ +// +// Copyright (C) 2019-2024 vdaas.org vald team +// +// 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 +// +// https://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. +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.32.0 +// protoc (unknown) +// source: v1/vald/flush.proto + +package vald + +import ( + reflect "reflect" + + payload "github.com/vdaas/vald/apis/grpc/v1/payload" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +var File_v1_vald_flush_proto protoreflect.FileDescriptor + +var file_v1_vald_flush_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x76, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x64, 0x2f, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x76, 0x61, 0x6c, 0x64, 0x2e, 0x76, 0x31, 0x1a, 0x1c, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x76, 0x31, + 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x59, 0x0a, 0x05, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x12, + 0x50, 0x0a, 0x05, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x12, 0x19, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x2e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x22, 0x0e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x08, 0x2a, 0x06, 0x2f, 0x66, 0x6c, 0x75, 0x73, + 0x68, 0x42, 0x52, 0x0a, 0x1a, 0x6f, 0x72, 0x67, 0x2e, 0x76, 0x64, 0x61, 0x61, 0x73, 0x2e, 0x76, + 0x61, 0x6c, 0x64, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x76, 0x61, 0x6c, 0x64, 0x42, + 0x09, 0x56, 0x61, 0x6c, 0x64, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x50, 0x01, 0x5a, 0x27, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x76, 0x64, 0x61, 0x61, 0x73, 0x2f, 0x76, + 0x61, 0x6c, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x76, 0x31, + 0x2f, 0x76, 0x61, 0x6c, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var file_v1_vald_flush_proto_goTypes = []interface{}{ + (*payload.Flush_Request)(nil), // 0: payload.v1.Flush.Request + (*payload.Info_Index_Count)(nil), // 1: payload.v1.Info.Index.Count +} +var file_v1_vald_flush_proto_depIdxs = []int32{ + 0, // 0: vald.v1.Flush.Flush:input_type -> payload.v1.Flush.Request + 1, // 1: vald.v1.Flush.Flush:output_type -> payload.v1.Info.Index.Count + 1, // [1:2] is the sub-list for method output_type + 0, // [0:1] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_v1_vald_flush_proto_init() } +func file_v1_vald_flush_proto_init() { + if File_v1_vald_flush_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_v1_vald_flush_proto_rawDesc, + NumEnums: 0, + NumMessages: 0, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_v1_vald_flush_proto_goTypes, + DependencyIndexes: file_v1_vald_flush_proto_depIdxs, + }.Build() + File_v1_vald_flush_proto = out.File + file_v1_vald_flush_proto_rawDesc = nil + file_v1_vald_flush_proto_goTypes = nil + file_v1_vald_flush_proto_depIdxs = nil +} diff --git a/apis/grpc/v1/vald/flush_vtproto.pb.go b/apis/grpc/v1/vald/flush_vtproto.pb.go new file mode 100644 index 0000000000..e4ed9aeffc --- /dev/null +++ b/apis/grpc/v1/vald/flush_vtproto.pb.go @@ -0,0 +1,127 @@ +// +// Copyright (C) 2019-2024 vdaas.org vald team +// +// 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 +// +// https://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. +// + +package vald + +import ( + context "context" + + payload "github.com/vdaas/vald/apis/grpc/v1/payload" + codes "github.com/vdaas/vald/internal/net/grpc/codes" + status "github.com/vdaas/vald/internal/net/grpc/status" + grpc "google.golang.org/grpc" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// FlushClient is the client API for Flush service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type FlushClient interface { + // A method to flush all indexed vector. + Flush(ctx context.Context, in *payload.Flush_Request, opts ...grpc.CallOption) (*payload.Info_Index_Count, error) +} + +type flushClient struct { + cc grpc.ClientConnInterface +} + +func NewFlushClient(cc grpc.ClientConnInterface) FlushClient { + return &flushClient{cc} +} + +func (c *flushClient) Flush(ctx context.Context, in *payload.Flush_Request, opts ...grpc.CallOption) (*payload.Info_Index_Count, error) { + out := new(payload.Info_Index_Count) + err := c.cc.Invoke(ctx, "/vald.v1.Flush/Flush", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// FlushServer is the server API for Flush service. +// All implementations must embed UnimplementedFlushServer +// for forward compatibility +type FlushServer interface { + // A method to flush all indexed vector. + Flush(context.Context, *payload.Flush_Request) (*payload.Info_Index_Count, error) + mustEmbedUnimplementedFlushServer() +} + +// UnimplementedFlushServer must be embedded to have forward compatible implementations. +type UnimplementedFlushServer struct { +} + +func (UnimplementedFlushServer) Flush(context.Context, *payload.Flush_Request) (*payload.Info_Index_Count, error) { + return nil, status.Errorf(codes.Unimplemented, "method Flush not implemented") +} +func (UnimplementedFlushServer) mustEmbedUnimplementedFlushServer() {} + +// UnsafeFlushServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to FlushServer will +// result in compilation errors. +type UnsafeFlushServer interface { + mustEmbedUnimplementedFlushServer() +} + +func RegisterFlushServer(s grpc.ServiceRegistrar, srv FlushServer) { + s.RegisterService(&Flush_ServiceDesc, srv) +} + +func _Flush_Flush_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(payload.Flush_Request) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(FlushServer).Flush(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/vald.v1.Flush/Flush", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(FlushServer).Flush(ctx, req.(*payload.Flush_Request)) + } + return interceptor(ctx, in, info, handler) +} + +// Flush_ServiceDesc is the grpc.ServiceDesc for Flush service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Flush_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "vald.v1.Flush", + HandlerType: (*FlushServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Flush", + Handler: _Flush_Flush_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "v1/vald/flush.proto", +} diff --git a/apis/grpc/v1/vald/vald.go b/apis/grpc/v1/vald/vald.go index e3d2a8c46d..e2886b0782 100644 --- a/apis/grpc/v1/vald/vald.go +++ b/apis/grpc/v1/vald/vald.go @@ -27,6 +27,7 @@ type Server interface { UpsertServer SearchServer RemoveServer + FlushServer ObjectServer } @@ -41,6 +42,7 @@ type UnimplementedValdServer struct { UnimplementedUpsertServer UnimplementedSearchServer UnimplementedRemoveServer + UnimplementedFlushServer UnimplementedObjectServer } @@ -55,6 +57,7 @@ type Client interface { UpsertClient SearchClient RemoveClient + FlushClient ObjectClient } @@ -71,6 +74,7 @@ const ( UpsertRPCServiceName = "Upsert" SearchRPCServiceName = "Search" RemoveRPCServiceName = "Remove" + FlushRPCServiceName = "Flush" ObjectRPCServiceName = "Object" FilterRPCServiceName = "Filter" ) @@ -121,6 +125,8 @@ const ( MultiRemoveRPCName = "MultiRemove" RemoveByTimestampRPCName = "RemoveByTimestamp" + FlushRPCName = "Flush" + ExistsRPCName = "Exists" GetObjectRPCName = "GetObject" GetTimestampRPCName = "GetTimestamp" @@ -134,6 +140,7 @@ type client struct { UpsertClient SearchClient RemoveClient + FlushClient ObjectClient } @@ -143,6 +150,7 @@ func RegisterValdServer(s *grpc.Server, srv Server) { RegisterUpsertServer(s, srv) RegisterSearchServer(s, srv) RegisterRemoveServer(s, srv) + RegisterFlushServer(s, srv) RegisterObjectServer(s, srv) } @@ -158,6 +166,7 @@ func NewValdClient(conn *grpc.ClientConn) Client { NewUpsertClient(conn), NewSearchClient(conn), NewRemoveClient(conn), + NewFlushClient(conn), NewObjectClient(conn), } } diff --git a/apis/proto/v1/payload/payload.proto b/apis/proto/v1/payload/payload.proto index 1a21234d6f..60cefdaa60 100644 --- a/apis/proto/v1/payload/payload.proto +++ b/apis/proto/v1/payload/payload.proto @@ -335,6 +335,11 @@ message Remove { } } +// Flush related messages. +message Flush { + message Request {} +} + // Common messages. message Object { // Represent a request to fetch raw vector. diff --git a/apis/proto/v1/vald/flush.proto b/apis/proto/v1/vald/flush.proto new file mode 100644 index 0000000000..c745b841a3 --- /dev/null +++ b/apis/proto/v1/vald/flush.proto @@ -0,0 +1,35 @@ +// +// Copyright (C) 2019-2024 vdaas.org vald team +// +// 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 +// +// https://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. +// + +syntax = "proto3"; + +package vald.v1; + +import "google/api/annotations.proto"; +import "v1/payload/payload.proto"; + +option go_package = "github.com/vdaas/vald/apis/grpc/v1/vald"; +option java_multiple_files = true; +option java_outer_classname = "ValdFlush"; +option java_package = "org.vdaas.vald.api.v1.vald"; + +// Flush service provides ways to flush all indexed vectors. +service Flush { + // A method to flush all indexed vector. + rpc Flush(payload.v1.Flush.Request) returns (payload.v1.Info.Index.Count) { + option (google.api.http) = {delete: "/flush"}; + } +} diff --git a/apis/swagger/v1/vald/flush.swagger.json b/apis/swagger/v1/vald/flush.swagger.json new file mode 100644 index 0000000000..a42ecf0c42 --- /dev/null +++ b/apis/swagger/v1/vald/flush.swagger.json @@ -0,0 +1,97 @@ +{ + "swagger": "2.0", + "info": { + "title": "v1/vald/flush.proto", + "version": "version not set" + }, + "tags": [ + { + "name": "Flush" + } + ], + "consumes": ["application/json"], + "produces": ["application/json"], + "paths": { + "/flush": { + "delete": { + "summary": "A method to flush all indexed vector.", + "operationId": "Flush_Flush", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/IndexCount" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": ["Flush"] + } + } + }, + "definitions": { + "IndexCount": { + "type": "object", + "properties": { + "stored": { + "type": "integer", + "format": "int64", + "description": "The stored index count." + }, + "uncommitted": { + "type": "integer", + "format": "int64", + "description": "The uncommitted index count." + }, + "indexing": { + "type": "boolean", + "description": "The indexing index count." + }, + "saving": { + "type": "boolean", + "description": "The saving index count." + } + }, + "description": "Represent the index count message." + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32", + "description": "The status code, which should be an enum value of\n[google.rpc.Code][google.rpc.Code]." + }, + "message": { + "type": "string", + "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\n[google.rpc.Status.details][google.rpc.Status.details] field, or localized\nby the client." + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + }, + "description": "A list of messages that carry the error details. There is a common set of\nmessage types for APIs to use." + } + }, + "description": "The `Status` type defines a logical error model that is suitable for\ndifferent programming environments, including REST APIs and RPC APIs. It is\nused by [gRPC](https://github.com/grpc). Each `Status` message contains\nthree pieces of data: error code, error message, and error details.\n\nYou can find out more about this error model and how to work with it in the\n[API Design Guide](https://cloud.google.com/apis/design/errors)." + } + } +} diff --git a/docs/api/README.md b/docs/api/README.md index 16bd12206e..406bf3d2c9 100644 --- a/docs/api/README.md +++ b/docs/api/README.md @@ -15,6 +15,7 @@ The APIs overview tables is here: | Upsert Service | Update the exists vector(s) in the Vald Agent Pods or Insert new vector(s) into the Vald Agent Pods if the vector is not exists. | [Upsert](../api/upsert.md#upsert-rpc)
[StreamUpsert](../api/upsert.md#streamupsert-rpc)
[MultiUpdate](../api/upsert.md#multiupsert-rpc) | [Vald Upsert APIs](../api/upsert.md) | | Search Service | Search nearest neighbor vectors using query (vectors or IDs).
There are 2 types of Search methods: Search (means ANN Search) and LinearSearch. | [Search](../api/search.md#search-rpc)
[SearchByID](../api/search.md#searchbyid-rpc)
[StreamSearch](../api/search.md#streamsearch-rpc)
[StreamSearchByID](../api/search.md#streamsearchbyid-rpc)
[MultiSearch](../api/search.md#multisearch-rpc)
[MultiSearchByID](../api/search.md#multisearchbyid-rpc)
[LinearSearch](../api/search.md#linearsearch-rpc)
[LinearSearchByID](../api/search.md#linearsearchbyid-rpc)
[StreamLinearSearch](../api/search.md#streamlinearsearch-rpc)
[StreamLinearSearchByID](../api/search.md#streamlinearsearchbyid-rpc)
[MultiLinearSearch](../api/search.md#multilinearsearch-rpc)
[MultiLinearSearchByID](../api/search.md#multilinearsearchbyid-rpc) | [Vald Search APIs](../api/search.md) | | Remove Service | Remove the exists vector(s) from the Vald Agent Pods. | [Remove](../api/remove.md#remove-rpc)
[StreamRemove](../api/remove.md#streamremove-rpc)
[MultiRemove](../api/remove.md#multiremove-rpc) | [Vald Remove APIs](../api/remove.md) | +| Flush Service | Remove the exists all vector(s) from the Vald Agent Pods. | [Flush](../api/flush.md#flush-rpc)
| [Vald Flush APIs](../api/flush.md) | | Object Service | Get information of vector(s) indexed into the Vald Agent Pods. | [Exists](../api/object.md#exists-rpc)
[GetObject](../api/object.md#getobject-rpc)
[StreamGetObject](../api/object.md#streamgetobject-rpc) | [Vald Object APIs](../api/object.md) |
diff --git a/docs/api/flush.md b/docs/api/flush.md new file mode 100644 index 0000000000..93c8ce6761 --- /dev/null +++ b/docs/api/flush.md @@ -0,0 +1,68 @@ +# Vald Flush APIs + +## Overview + +Flush Service is responsible for removing all vectors that are indexed and uncommitted in the `vald-agent`. + +```rpc +service Flush { + + rpc Flush(payload.v1.Flush.Request) returns (payload.v1.Info.Index.Count) {} + +} +``` + +## Flush RPC + +Flush RPC is the method to remove all vectors. + +### Input + +- the scheme of `payload.v1.Flush.Request` + + ```rpc + message Flush { + message Request { + } + } + ``` + + - Flush.Request + + empty + + +### Output + +- the scheme of `payload.v1.Info.Index.Count` + + ```rpc + message Object { + message Info_Index_Count { + uint32 stored = 0; + uint32 uncommitted = 0; + bool indexing = false; + bool saving = false; + } + } + ``` + + Object.Info_Index_Count + + | field | type | label | desc. | + | :---------: |:------ | :---- | :------------------------------------------------------------------------- | + | stored | uint32 | | count of indices. | + | uncommitted | uint32 | | count of uncommitted indices. | + | indexing | bool | | the state indicating whether `vald-agent` pods is present in the indexing. | + | saving | bool | | the state indicating whether `vald-agent` pods is present in the saving. | + +### Status Code + +| code | desc. | +| :--: | :---------------- | +| 0 | OK | +| 1 | CANCELLED | +| 3 | INVALID_ARGUMENT | +| 4 | DEADLINE_EXCEEDED | +| 5 | NOT_FOUND | +| 13 | INTERNAL | diff --git a/docs/api/insert.md b/docs/api/insert.md index 5c101e830f..ef9e2dd43f 100644 --- a/docs/api/insert.md +++ b/docs/api/insert.md @@ -97,6 +97,7 @@ Inset RPC is the method to add a new single vector. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 6 | ALREADY_EXISTS | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -222,6 +223,7 @@ It's the recommended method to insert a large number of vectors. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 6 | ALREADY_EXISTS | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -344,6 +346,7 @@ Please be careful that the size of the request exceeds the limit. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 6 | ALREADY_EXISTS | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. diff --git a/docs/api/remove.md b/docs/api/remove.md index 2d2e303b7f..94d9d09916 100644 --- a/docs/api/remove.md +++ b/docs/api/remove.md @@ -98,6 +98,7 @@ Remove RPC is the method to remove a single vector. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -340,6 +341,7 @@ It's the recommended method to remove a large number of vectors. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -460,6 +462,7 @@ Please be careful that the size of the request exceeds the limit. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. diff --git a/docs/api/search.md b/docs/api/search.md index 1576006978..ea382e96da 100644 --- a/docs/api/search.md +++ b/docs/api/search.md @@ -143,6 +143,7 @@ Search RPC is the method to search vector(s) similar to the request vector. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -263,6 +264,7 @@ The vector with the same requested ID should be indexed into the `vald-agent` be | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -398,6 +400,7 @@ Each Search request and response are independent. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -533,6 +536,7 @@ Each SearchByID request and response are independent. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -677,6 +681,7 @@ Please be careful that the size of the request exceeds the limit. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -822,6 +827,7 @@ Please be careful that the size of the request exceeds the limit. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -937,6 +943,7 @@ LinearSearch RPC is the method to linear search vector(s) similar to the request | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -1054,6 +1061,7 @@ You will get a `NOT_FOUND` error if the vector isn't stored. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -1185,6 +1193,7 @@ Each LinearSearch request and response are independent. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -1316,6 +1325,7 @@ Each LinearSearchByID request and response are independent. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -1456,6 +1466,7 @@ Please be careful that the size of the request exceeds the limit. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -1597,6 +1608,7 @@ Please be careful that the size of the request exceeds the limit. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. diff --git a/docs/api/status.md b/docs/api/status.md index 6e72346a37..48cfb696a0 100644 --- a/docs/api/status.md +++ b/docs/api/status.md @@ -16,6 +16,7 @@ The sections below describe the meaning of each code and why API returns. | 5 | [NOT_FOUND](#NOT_FOUND) | | 6 | [ALREADY_EXISTS](#ALREADY_EXISTS) | | 8 | [RESOURCE_EXHAUSTED](#RESOURCE_EXHAUSTED) | +| 10 | [ABORTED](#ABORTED) | | 13 | [INTERNAL](#INTERNAL) | | 14 | [UNAVAILABLE](#UNAVAILABLE) | @@ -101,6 +102,25 @@ Services that return status are all services. The most case in the Vald is that the query vector is too large. In other words, the vector dimension size in configuration is too large. +## ABORTED + +`ABORTED` means that the operation was aborted, usually due to a concurrency issue. + +It appears when: + +- A request is made during the process of creating indices. +- A request is made during the flushing process. + +Services that return status are: + +- [Insert Service](../api/insert.md) +- [Update Service](../api/update.md) +- [Upsert Service](../api/upsert.md) +- [Remove Service](../api/remove.md) +- [Search Service](../api/search.md) + +You have to wait for the completion of creating indices or flushing process before making the request again. + ## INTERNAL `INTERNAL` appears when some wrong happens in the Vald cluster. diff --git a/docs/api/update.md b/docs/api/update.md index cdfe2c6ad6..f1517b2a64 100644 --- a/docs/api/update.md +++ b/docs/api/update.md @@ -99,6 +99,7 @@ Update RPC is the method to update a single vector. | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | | 6 | ALREADY_EXISTS | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -227,6 +228,7 @@ It's the recommended method to update the large amount of vectors. | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | | 6 | ALREADY_EXISTS | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -352,6 +354,7 @@ Please be careful that the size of the request exceeds the limit. | 4 | DEADLINE_EXCEEDED | | 5 | NOT_FOUND | | 6 | ALREADY_EXISTS | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. diff --git a/docs/api/upsert.md b/docs/api/upsert.md index b7aa1c5362..bd3128419d 100644 --- a/docs/api/upsert.md +++ b/docs/api/upsert.md @@ -102,6 +102,7 @@ Upsert RPC is the method to update the inserted vector to a new single vector or | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 6 | ALREADY_EXISTS | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -228,6 +229,7 @@ It’s the recommended method to upsert a large number of vectors. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 6 | ALREADY_EXISTS | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. @@ -351,6 +353,7 @@ Please be careful that the size of the request exceeds the limit. | 3 | INVALID_ARGUMENT | | 4 | DEADLINE_EXCEEDED | | 6 | ALREADY_EXISTS | +| 10 | ABORTED | | 13 | INTERNAL | Please refer to [Response Status Code](./status.md) for more details. diff --git a/docs/tutorial/get-started.md b/docs/tutorial/get-started.md index 62e24e00dd..0f5792ff59 100644 --- a/docs/tutorial/get-started.md +++ b/docs/tutorial/get-started.md @@ -414,11 +414,11 @@ If you are interested, please refer to [SDKs](../user-guides/sdks.md).
1. Remove - - Remove 400 indexed training datasets from the Vald agent. + - Remove 200 indexed training datasets from the Vald agent.
example code
```go - for i := range ids [:insertCount] { + for i := range ids [:removeCount] { _, err := client.Remove(ctx, &payload.Remove_Request{ Id: &payload.Object_ID{ Id: ids[i], @@ -435,6 +435,20 @@ If you are interested, please refer to [SDKs](../user-guides/sdks.md).
+ 1. Flush + + - Remove all remaining training datasets from the Vald agent. +
example code
+ + ```go + _, err := client.Flush(ctx, &payload.Flush_Request{}) + if err != nil { + glg.Fatal(err) + } + ``` + +
+ ## Cleanup In the last, you can remove the deployed Vald Cluster by executing the below command. diff --git a/example/client/agent/main.go b/example/client/agent/main.go index 246dfb43b2..bddbb70677 100644 --- a/example/client/agent/main.go +++ b/example/client/agent/main.go @@ -32,6 +32,7 @@ import ( const ( insertCount = 400 + removeCount = 200 testCount = 20 ) @@ -167,8 +168,8 @@ func main() { } glg.Info("Start removing vector") - // Remove indexed 400 vectors from vald cluster. - for i := range ids[:insertCount] { + // Remove indexed 200 vectors from vald cluster. + for i := range ids[:removeCount] { // Call `Remove` function of Vald client. // Sends id to server via gRPC. _, err := client.Remove(ctx, &payload.Remove_Request{ @@ -197,6 +198,12 @@ func main() { glg.Fatal(err) } glg.Info("Finish removing indexed vector from backup") + glg.Info("Start flushing vector") + _, err = client.Flush(ctx, &payload.Flush_Request{}) + if err != nil { + glg.Fatal(err) + } + glg.Info("Finish flushing vector") } // load function loads training and test vector from hdf file. The size of ids is same to the number of training data. diff --git a/example/client/main.go b/example/client/main.go index 5cf5fb2c1f..b57c895c9d 100644 --- a/example/client/main.go +++ b/example/client/main.go @@ -29,7 +29,8 @@ import ( ) const ( - testCount = 20 + testCount = 20 + removeCount = 200 ) var ( @@ -129,8 +130,8 @@ func main() { glg.Infof("Finish searching %d times", testCount) glg.Info("Start removing vector") - // Remove indexed 400 vectors from vald cluster. - for i := range ids[:insertCount] { + // Remove indexed 200 vectors from vald cluster. + for i := range ids[:removeCount] { // Call `Remove` function of Vald client. // Sends id to server via gRPC. _, err := client.Remove(ctx, &payload.Remove_Request{ @@ -146,6 +147,12 @@ func main() { } } glg.Info("Finish removing vector") + glg.Info("Start flushing vector") + _, err = client.Flush(ctx, &payload.Flush_Request{}) + if err != nil { + glg.Fatal(err) + } + glg.Info("Finish flushing vector") } // load function loads training and test vector from hdf file. The size of ids is same to the number of training data. diff --git a/internal/client/v1/client/vald/vald.go b/internal/client/v1/client/vald/vald.go index e1739b1bb7..0cc5b2b87a 100644 --- a/internal/client/v1/client/vald/vald.go +++ b/internal/client/v1/client/vald/vald.go @@ -581,6 +581,26 @@ func (c *client) MultiRemove(ctx context.Context, in *payload.Remove_MultiReques return res, nil } +func (c *client) Flush(ctx context.Context, in *payload.Flush_Request, opts ...grpc.CallOption) (res *payload.Info_Index_Count, err error) { + ctx, span := trace.StartSpan(grpc.WrapGRPCMethod(ctx, "internal/client/"+vald.FlushRPCName), apiName+"/"+vald.FlushRPCName) + defer func() { + if span != nil { + span.End() + } + }() + _, err = c.c.RoundRobin(ctx, func(ctx context.Context, + conn *grpc.ClientConn, + copts ...grpc.CallOption, + ) (interface{}, error) { + res, err = vald.NewValdClient(conn).Flush(ctx, in, append(copts, opts...)...) + return nil, err + }) + if err != nil { + return nil, err + } + return res, nil +} + func (c *client) RemoveByTimestamp(ctx context.Context, in *payload.Remove_TimestampRequest, opts ...grpc.CallOption) (res *payload.Object_Locations, err error) { ctx, span := trace.StartSpan(grpc.WrapGRPCMethod(ctx, "internal/client/"+vald.RemoveByTimestampRPCName), apiName+"/"+vald.RemoveByTimestampRPCName) defer func() { @@ -922,6 +942,16 @@ func (c *singleClient) MultiRemove(ctx context.Context, in *payload.Remove_Multi return c.vc.MultiRemove(ctx, in, opts...) } +func (c *singleClient) Flush(ctx context.Context, in *payload.Flush_Request, opts ...grpc.CallOption) (res *payload.Info_Index_Count, err error) { + ctx, span := trace.StartSpan(ctx, apiName+"/singleClient.Flush") + defer func() { + if span != nil { + span.End() + } + }() + return c.vc.Flush(ctx, in, opts...) +} + func (c *singleClient) RemoveByTimestamp(ctx context.Context, in *payload.Remove_TimestampRequest, opts ...grpc.CallOption) (res *payload.Object_Locations, err error) { ctx, span := trace.StartSpan(grpc.WrapGRPCMethod(ctx, "internal/singleClient/"+vald.RemoveByTimestampRPCName), apiName+"/"+vald.RemoveByTimestampRPCName) defer func() { diff --git a/internal/core/algorithm/ngt/ngt.go b/internal/core/algorithm/ngt/ngt.go index 0dc2215651..7d691a12c7 100644 --- a/internal/core/algorithm/ngt/ngt.go +++ b/internal/core/algorithm/ngt/ngt.go @@ -85,6 +85,9 @@ type ( // GetVector returns vector stored in NGT index. GetVector(id uint) ([]float32, error) + // Close Without save index. + CloseWithoutSaveIndex() + // Close NGT index. Close() } @@ -782,6 +785,13 @@ func (n *ngt) newGoError(ne *ngtError) (err error) { return errors.NewNGTError(msg) } +// Close NGT without save index. +func (n *ngt) CloseWithoutSaveIndex() { + n.index = nil + n.prop = nil + n.ospace = nil +} + func (n *ngt) GetErrorBuffer() (ne *ngtError) { var ok bool ne, ok = n.epool.Get().(*ngtError) diff --git a/internal/errors/ngt.go b/internal/errors/ngt.go index 62f7b7ad34..75c6eeabf9 100644 --- a/internal/errors/ngt.go +++ b/internal/errors/ngt.go @@ -18,6 +18,10 @@ package errors var ( + + // ErrFlushingIsInProgress represents an error that the flushing is in progress, but any request has been received. + ErrFlushingIsInProgress = New("flush is in progress") + // ErrUUIDAlreadyExists represents a function to generate an error that the uuid already exists. ErrUUIDAlreadyExists = func(uuid string) error { return Errorf("ngt uuid %s index already exists", uuid) diff --git a/internal/file/file.go b/internal/file/file.go index 2d27b6fd7d..6e97b2f7c8 100644 --- a/internal/file/file.go +++ b/internal/file/file.go @@ -479,6 +479,48 @@ func ListInDir(path string) ([]string, error) { return files, nil } +// DeleteDir recursively deletes each file or directory based on the path specified as an argument +func DeleteDir(ctx context.Context, path string) (err error) { + exists, _, err := ExistsWithDetail(path) + if err != nil { + return err + } + if !exists { + log.Debugf("path %s does not exist, so deleting the directory is not executed.", path) + return nil + } + err = os.Remove(path) + if err == nil { + return nil + } + eg, _ := errgroup.New(ctx) + + path, err = filepath.Abs(path) + if err != nil { + return err + } + err = filepath.WalkDir(path, func(childPath string, info fs.DirEntry, err error) error { + if err != nil { + fi, ierr := info.Info() + if ierr != nil { + err = errors.Wrap(err, ierr.Error()) + } + err = errors.ErrFailedToWalkDir(err, path, childPath, nil, fi) + log.Warn(err) + return err + } + eg.Go(safety.RecoverFunc(func() (err error) { + err = os.Remove(childPath) + return err + })) + return nil + }) + if err != nil { + return errors.Wrap(eg.Wait(), err.Error()) + } + return eg.Wait() +} + func Join(paths ...string) (path string) { if paths == nil { return "" diff --git a/pkg/agent/core/faiss/handler/grpc/flush.go b/pkg/agent/core/faiss/handler/grpc/flush.go new file mode 100644 index 0000000000..dbaef33c9c --- /dev/null +++ b/pkg/agent/core/faiss/handler/grpc/flush.go @@ -0,0 +1,25 @@ +// Copyright (C) 2019-2024 vdaas.org vald team +// +// 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 +// +// https://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. +package grpc + +import ( + "context" + + "github.com/vdaas/vald/apis/grpc/v1/payload" +) + +// TODO: implement Flush Handler +func (s *server) Flush(ctx context.Context, req *payload.Flush_Request) (*payload.Info_Index_Count, error) { + return s.UnimplementedValdServer.UnimplementedFlushServer.Flush(ctx, req) +} diff --git a/pkg/agent/core/ngt/handler/grpc/flush.go b/pkg/agent/core/ngt/handler/grpc/flush.go new file mode 100644 index 0000000000..985565914c --- /dev/null +++ b/pkg/agent/core/ngt/handler/grpc/flush.go @@ -0,0 +1,93 @@ +// Copyright (C) 2019-2024 vdaas.org vald team +// +// 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 +// +// https://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. +package grpc + +import ( + "context" + "fmt" + "sync/atomic" + + "github.com/vdaas/vald/apis/grpc/v1/payload" + "github.com/vdaas/vald/apis/grpc/v1/vald" + "github.com/vdaas/vald/internal/errors" + "github.com/vdaas/vald/internal/info" + "github.com/vdaas/vald/internal/log" + "github.com/vdaas/vald/internal/net/grpc/errdetails" + "github.com/vdaas/vald/internal/net/grpc/status" + "github.com/vdaas/vald/internal/observability/trace" + "go.opentelemetry.io/otel/attribute" +) + +// Flush removes all vectors that are indexed and uncommitted in the `vald-agent`. +func (s *server) Flush(ctx context.Context, req *payload.Flush_Request) (*payload.Info_Index_Count, error) { + _, span := trace.StartSpan(ctx, apiName+"/"+vald.FlushRPCName) + defer func() { + if span != nil { + span.End() + } + }() + err := s.ngt.RegenerateIndexes(ctx) + if err != nil { + var attrs []attribute.KeyValue + if errors.Is(err, errors.ErrFlushingIsInProgress) { + err = status.WrapWithAborted("Flush API aborted to process search request due to flushing indices is in progress", err, + &errdetails.RequestInfo{ + ServingData: errdetails.Serialize(req), + }, + &errdetails.ResourceInfo{ + ResourceType: ngtResourceType + "/ngt.Flush", + ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), + }) + log.Debug(err) + attrs = trace.StatusCodeAborted(err.Error()) + } else { + err = status.WrapWithInternal("Flush API failed", err, + &errdetails.RequestInfo{ + ServingData: errdetails.Serialize(req), + }, + &errdetails.ResourceInfo{ + ResourceType: ngtResourceType + "/ngt.Flush", + ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), + }, info.Get()) + log.Error(err) + attrs = trace.StatusCodeInternal(err.Error()) + } + if span != nil { + span.RecordError(err) + span.SetAttributes(attrs...) + span.SetStatus(trace.StatusError, err.Error()) + } + return nil, err + } + + var ( + stored uint32 + uncommited uint32 + indexing atomic.Value + saving atomic.Value + ) + stored = 0 + uncommited = 0 + indexing.Store(false) + saving.Store(false) + + cnts := &payload.Info_Index_Count{ + Stored: atomic.LoadUint32(&stored), + Uncommitted: atomic.LoadUint32(&uncommited), + Indexing: indexing.Load().(bool), + Saving: saving.Load().(bool), + } + + return cnts, nil +} diff --git a/pkg/agent/core/ngt/handler/grpc/insert.go b/pkg/agent/core/ngt/handler/grpc/insert.go index 7d4b43420e..d4be3907c9 100644 --- a/pkg/agent/core/ngt/handler/grpc/insert.go +++ b/pkg/agent/core/ngt/handler/grpc/insert.go @@ -72,8 +72,19 @@ func (s *server) Insert(ctx context.Context, req *payload.Insert_Request) (res * err = s.ngt.InsertWithTime(vec.GetId(), vec.GetVector(), req.GetConfig().GetTimestamp()) if err != nil { var attrs []attribute.KeyValue - - if errors.Is(err, errors.ErrUUIDAlreadyExists(vec.GetId())) { + if errors.Is(err, errors.ErrFlushingIsInProgress) { + err = status.WrapWithAborted("Insert API aborted to process insert request due to flushing indices is in progress", err, + &errdetails.RequestInfo{ + RequestId: req.GetVector().GetId(), + ServingData: errdetails.Serialize(req), + }, + &errdetails.ResourceInfo{ + ResourceType: ngtResourceType + "/ngt.Insert", + ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), + }) + log.Warn(err) + attrs = trace.StatusCodeAborted(err.Error()) + } else if errors.Is(err, errors.ErrUUIDAlreadyExists(vec.GetId())) { err = status.WrapWithAlreadyExists(fmt.Sprintf("Insert API uuid %s already exists", vec.GetId()), err, &errdetails.RequestInfo{ RequestId: req.GetVector().GetId(), @@ -224,7 +235,19 @@ func (s *server) MultiInsert(ctx context.Context, reqs *payload.Insert_MultiRequ err = s.ngt.InsertMultiple(vmap) if err != nil { var attrs []attribute.KeyValue - if alreadyExistsIDs := func() []string { + if errors.Is(err, errors.ErrFlushingIsInProgress) { + err = status.WrapWithAborted("MultiInsert API aborted to process insert request due to flushing indices is in progress", err, + &errdetails.RequestInfo{ + RequestId: strings.Join(uuids, ", "), + ServingData: errdetails.Serialize(reqs), + }, + &errdetails.ResourceInfo{ + ResourceType: ngtResourceType + "/ngt.MultiInsert", + ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), + }) + log.Warn(err) + attrs = trace.StatusCodeAborted(err.Error()) + } else if alreadyExistsIDs := func() []string { aids := make([]string, 0, len(uuids)) for _, id := range uuids { if errors.Is(err, errors.ErrUUIDAlreadyExists(id)) { diff --git a/pkg/agent/core/ngt/handler/grpc/linear_search.go b/pkg/agent/core/ngt/handler/grpc/linear_search.go index 75814126ff..abe0d374cd 100644 --- a/pkg/agent/core/ngt/handler/grpc/linear_search.go +++ b/pkg/agent/core/ngt/handler/grpc/linear_search.go @@ -77,7 +77,7 @@ func (s *server) LinearSearch(ctx context.Context, req *payload.Search_Request) var attrs []attribute.KeyValue switch { case errors.Is(err, errors.ErrCreateIndexingIsInProgress): - err = status.WrapWithAborted("LinearSearch API aborted to process search request due to createing indices is in progress", err, + err = status.WrapWithAborted("LinearSearch API aborted to process search request due to creating indices is in progress", err, &errdetails.RequestInfo{ RequestId: req.GetConfig().GetRequestId(), ServingData: errdetails.Serialize(req), @@ -88,6 +88,18 @@ func (s *server) LinearSearch(ctx context.Context, req *payload.Search_Request) }) log.Debug(err) attrs = trace.StatusCodeAborted(err.Error()) + case errors.Is(err, errors.ErrFlushingIsInProgress): + err = status.WrapWithAborted("LinearSearch API aborted to process search request due to flushing indices is in progress", err, + &errdetails.RequestInfo{ + RequestId: req.GetConfig().GetRequestId(), + ServingData: errdetails.Serialize(req), + }, + &errdetails.ResourceInfo{ + ResourceType: ngtResourceType + "/ngt.Search", + ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), + }) + log.Debug(err) + attrs = trace.StatusCodeAborted(err.Error()) case errors.Is(err, errors.ErrEmptySearchResult), err == nil && res == nil, 0 < req.GetConfig().GetMinNum() && len(res.GetResults()) < int(req.GetConfig().GetMinNum()): @@ -204,7 +216,19 @@ func (s *server) LinearSearchByID(ctx context.Context, req *payload.Search_IDReq var attrs []attribute.KeyValue switch { case errors.Is(err, errors.ErrCreateIndexingIsInProgress): - err = status.WrapWithAborted("LinearSearchByID API aborted to process search request due to createing indices is in progress", err, + err = status.WrapWithAborted("LinearSearchByID API aborted to process search request due to creating indices is in progress", err, + &errdetails.RequestInfo{ + RequestId: req.GetConfig().GetRequestId(), + ServingData: errdetails.Serialize(req), + }, + &errdetails.ResourceInfo{ + ResourceType: ngtResourceType + "/ngt.LinearSearchByID", + ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), + }) + log.Debug(err) + attrs = trace.StatusCodeAborted(err.Error()) + case errors.Is(err, errors.ErrFlushingIsInProgress): + err = status.WrapWithAborted("LinearSearchByID API aborted to process search request due to flushing indices is in progress", err, &errdetails.RequestInfo{ RequestId: req.GetConfig().GetRequestId(), ServingData: errdetails.Serialize(req), diff --git a/pkg/agent/core/ngt/handler/grpc/remove.go b/pkg/agent/core/ngt/handler/grpc/remove.go index faece5f5aa..f57685bbb1 100644 --- a/pkg/agent/core/ngt/handler/grpc/remove.go +++ b/pkg/agent/core/ngt/handler/grpc/remove.go @@ -71,7 +71,19 @@ func (s *server) Remove(ctx context.Context, req *payload.Remove_Request) (res * err = s.ngt.DeleteWithTime(uuid, req.GetConfig().GetTimestamp()) if err != nil { var attrs []attribute.KeyValue - if errors.Is(err, errors.ErrObjectIDNotFound(uuid)) { + if errors.Is(err, errors.ErrFlushingIsInProgress) { + err = status.WrapWithAborted("Remove API aborted to process remove request due to flushing indices is in progress", err, + &errdetails.RequestInfo{ + RequestId: uuid, + ServingData: errdetails.Serialize(req), + }, + &errdetails.ResourceInfo{ + ResourceType: ngtResourceType + "/ngt.Remove", + ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), + }) + log.Warn(err) + attrs = trace.StatusCodeAborted(err.Error()) + } else if errors.Is(err, errors.ErrObjectIDNotFound(uuid)) { err = status.WrapWithNotFound(fmt.Sprintf("Remove API uuid %s not found", uuid), err, &errdetails.RequestInfo{ RequestId: uuid, @@ -187,7 +199,19 @@ func (s *server) MultiRemove(ctx context.Context, reqs *payload.Remove_MultiRequ err = s.ngt.DeleteMultiple(uuids...) if err != nil { var attrs []attribute.KeyValue - if notFoundIDs := func() []string { + if errors.Is(err, errors.ErrFlushingIsInProgress) { + err = status.WrapWithAborted("MultiRemove API aborted to process remove request due to flushing indices is in progress", err, + &errdetails.RequestInfo{ + RequestId: strings.Join(uuids, ", "), + ServingData: errdetails.Serialize(reqs), + }, + &errdetails.ResourceInfo{ + ResourceType: ngtResourceType + "/ngt.MultiRemove", + ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), + }) + log.Warn(err) + attrs = trace.StatusCodeAborted(err.Error()) + } else if notFoundIDs := func() []string { aids := make([]string, 0, len(uuids)) for _, id := range uuids { if errors.Is(err, errors.ErrObjectIDNotFound(id)) { diff --git a/pkg/agent/core/ngt/handler/grpc/search.go b/pkg/agent/core/ngt/handler/grpc/search.go index 23825ee16d..3c0e43dc84 100644 --- a/pkg/agent/core/ngt/handler/grpc/search.go +++ b/pkg/agent/core/ngt/handler/grpc/search.go @@ -79,7 +79,19 @@ func (s *server) Search(ctx context.Context, req *payload.Search_Request) (res * var attrs []attribute.KeyValue switch { case errors.Is(err, errors.ErrCreateIndexingIsInProgress): - err = status.WrapWithAborted("Search API aborted to process search request due to createing indices is in progress", err, + err = status.WrapWithAborted("Search API aborted to process search request due to creating indices is in progress", err, + &errdetails.RequestInfo{ + RequestId: req.GetConfig().GetRequestId(), + ServingData: errdetails.Serialize(req), + }, + &errdetails.ResourceInfo{ + ResourceType: ngtResourceType + "/ngt.Search", + ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), + }) + log.Debug(err) + attrs = trace.StatusCodeAborted(err.Error()) + case errors.Is(err, errors.ErrFlushingIsInProgress): + err = status.WrapWithAborted("Search API aborted to process search request due to flushing indices is in progress", err, &errdetails.RequestInfo{ RequestId: req.GetConfig().GetRequestId(), ServingData: errdetails.Serialize(req), @@ -208,7 +220,19 @@ func (s *server) SearchByID(ctx context.Context, req *payload.Search_IDRequest) var attrs []attribute.KeyValue switch { case errors.Is(err, errors.ErrCreateIndexingIsInProgress): - err = status.WrapWithAborted("SearchByID API aborted to process search request due to createing indices is in progress", err, + err = status.WrapWithAborted("SearchByID API aborted to process search request due to creating indices is in progress", err, + &errdetails.RequestInfo{ + RequestId: req.GetConfig().GetRequestId(), + ServingData: errdetails.Serialize(req), + }, + &errdetails.ResourceInfo{ + ResourceType: ngtResourceType + "/ngt.SearchByID", + ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), + }) + log.Debug(err) + attrs = trace.StatusCodeAborted(err.Error()) + case errors.Is(err, errors.ErrFlushingIsInProgress): + err = status.WrapWithAborted("SearchByID API aborted to process search request due to flushing indices is in progress", err, &errdetails.RequestInfo{ RequestId: req.GetConfig().GetRequestId(), ServingData: errdetails.Serialize(req), diff --git a/pkg/agent/core/ngt/handler/grpc/update.go b/pkg/agent/core/ngt/handler/grpc/update.go index 9edec200f6..0a76d7395f 100644 --- a/pkg/agent/core/ngt/handler/grpc/update.go +++ b/pkg/agent/core/ngt/handler/grpc/update.go @@ -93,7 +93,19 @@ func (s *server) Update(ctx context.Context, req *payload.Update_Request) (res * err = s.ngt.UpdateWithTime(uuid, vec.GetVector(), req.GetConfig().GetTimestamp()) if err != nil { var attrs []attribute.KeyValue - if errors.Is(err, errors.ErrObjectIDNotFound(vec.GetId())) { + if errors.Is(err, errors.ErrFlushingIsInProgress) { + err = status.WrapWithAborted("Update API aborted to process update request due to flushing indices is in progress", err, + &errdetails.RequestInfo{ + RequestId: req.GetVector().GetId(), + ServingData: errdetails.Serialize(req), + }, + &errdetails.ResourceInfo{ + ResourceType: ngtResourceType + "/ngt.Update", + ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), + }) + log.Warn(err) + attrs = trace.StatusCodeAborted(err.Error()) + } else if errors.Is(err, errors.ErrObjectIDNotFound(vec.GetId())) { err = status.WrapWithNotFound(fmt.Sprintf("Update API uuid %s not found", vec.GetId()), err, &errdetails.RequestInfo{ RequestId: req.GetVector().GetId(), @@ -254,7 +266,19 @@ func (s *server) MultiUpdate(ctx context.Context, reqs *payload.Update_MultiRequ err = s.ngt.UpdateMultiple(vmap) if err != nil { var attrs []attribute.KeyValue - if notFoundIDs := func() []string { + if errors.Is(err, errors.ErrFlushingIsInProgress) { + err = status.WrapWithAborted("MultiUpdate API aborted to process update request due to flushing indices is in progress", err, + &errdetails.RequestInfo{ + RequestId: strings.Join(uuids, ", "), + ServingData: errdetails.Serialize(reqs), + }, + &errdetails.ResourceInfo{ + ResourceType: ngtResourceType + "/ngt.MultiUpdate", + ResourceName: fmt.Sprintf("%s: %s(%s)", apiName, s.name, s.ip), + }) + log.Warn(err) + attrs = trace.StatusCodeAborted(err.Error()) + } else if notFoundIDs := func() []string { aids := make([]string, 0, len(uuids)) for _, id := range uuids { if errors.Is(err, errors.ErrObjectIDNotFound(id)) { diff --git a/pkg/agent/core/ngt/service/ngt.go b/pkg/agent/core/ngt/service/ngt.go index 0b272a2bf3..baca0cafef 100644 --- a/pkg/agent/core/ngt/service/ngt.go +++ b/pkg/agent/core/ngt/service/ngt.go @@ -71,6 +71,7 @@ type NGT interface { DeleteWithTime(uuid string, t int64) (err error) DeleteMultiple(uuids ...string) (err error) DeleteMultipleWithTime(uuids []string, t int64) (err error) + RegenerateIndexes(ctx context.Context) (err error) GetObject(uuid string) (vec []float32, timestamp int64, err error) ListObjectFunc(ctx context.Context, f func(uuid string, oid uint32, timestamp int64) bool) CreateIndex(ctx context.Context, poolSize uint32) (err error) @@ -78,6 +79,7 @@ type NGT interface { Exists(string) (uint32, bool) CreateAndSaveIndex(ctx context.Context, poolSize uint32) (err error) IsIndexing() bool + IsFlushing() bool IsSaving() bool Len() uint64 NumberOfCreateIndexExecution() uint64 @@ -101,6 +103,7 @@ type ngt struct { // statuses indexing atomic.Value + flushing atomic.Bool saving atomic.Value cimu sync.Mutex // create index mutex lastNocie uint64 // last number of create index execution this value prevent unnecessary saveindex. @@ -112,6 +115,10 @@ type ngt struct { nobic uint64 // number of broken index count nopvq atomic.Uint64 // number of processed vq number + // parameters + cfg *config.NGT + opts []Option + // configurations inMem bool // in-memory mode dim int // dimension size @@ -177,7 +184,11 @@ func New(cfg *config.NGT, opts ...Option) (nn NGT, err error) { if cfg.PodName == "" && cfg.EnableExportIndexInfoToK8s { return nil, errors.New("pod_name is empty. this must be set either from environment variable or from config file") } - n := &ngt{ + return newNGT(cfg, opts...) +} + +func newNGT(cfg *config.NGT, opts ...Option) (n *ngt, err error) { + n = &ngt{ podName: cfg.PodName, podNamespace: cfg.PodNamespace, fmap: make(map[string]int64), @@ -187,6 +198,8 @@ func New(cfg *config.NGT, opts ...Option) (nn NGT, err error) { kvsdbConcurrency: cfg.KVSDB.Concurrency, historyLimit: cfg.BrokenIndexHistoryLimit, enableExportIndexInfo: cfg.EnableExportIndexInfoToK8s, + cfg: cfg, + opts: opts, } for _, opt := range append(defaultOptions, opts...) { @@ -911,6 +924,9 @@ func (n *ngt) Start(ctx context.Context) <-chan error { } func (n *ngt) Search(ctx context.Context, vec []float32, size uint32, epsilon, radius float32) (res *payload.Search_Response, err error) { + if n.IsFlushing() { + return nil, errors.ErrFlushingIsInProgress + } if n.IsIndexing() { return nil, errors.ErrCreateIndexingIsInProgress } @@ -930,6 +946,9 @@ func (n *ngt) Search(ctx context.Context, vec []float32, size uint32, epsilon, r } func (n *ngt) SearchByID(ctx context.Context, uuid string, size uint32, epsilon, radius float32) (vec []float32, dst *payload.Search_Response, err error) { + if n.IsFlushing() { + return nil, nil, errors.ErrFlushingIsInProgress + } if n.IsIndexing() { return nil, nil, errors.ErrCreateIndexingIsInProgress } @@ -945,6 +964,9 @@ func (n *ngt) SearchByID(ctx context.Context, uuid string, size uint32, epsilon, } func (n *ngt) LinearSearch(ctx context.Context, vec []float32, size uint32) (res *payload.Search_Response, err error) { + if n.IsFlushing() { + return nil, errors.ErrFlushingIsInProgress + } if n.IsIndexing() { return nil, errors.ErrCreateIndexingIsInProgress } @@ -964,6 +986,9 @@ func (n *ngt) LinearSearch(ctx context.Context, vec []float32, size uint32) (res } func (n *ngt) LinearSearchByID(ctx context.Context, uuid string, size uint32) (vec []float32, dst *payload.Search_Response, err error) { + if n.IsFlushing() { + return nil, nil, errors.ErrFlushingIsInProgress + } if n.IsIndexing() { return nil, nil, errors.ErrCreateIndexingIsInProgress } @@ -979,10 +1004,16 @@ func (n *ngt) LinearSearchByID(ctx context.Context, uuid string, size uint32) (v } func (n *ngt) Insert(uuid string, vec []float32) (err error) { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } return n.insert(uuid, vec, time.Now().UnixNano(), true) } func (n *ngt) InsertWithTime(uuid string, vec []float32, t int64) (err error) { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } if t <= 0 { t = time.Now().UnixNano() } @@ -1004,10 +1035,16 @@ func (n *ngt) insert(uuid string, vec []float32, t int64, validation bool) (err } func (n *ngt) InsertMultiple(vecs map[string][]float32) (err error) { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } return n.insertMultiple(vecs, time.Now().UnixNano(), true) } func (n *ngt) InsertMultipleWithTime(vecs map[string][]float32, t int64) (err error) { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } if t <= 0 { t = time.Now().UnixNano() } @@ -1029,10 +1066,16 @@ func (n *ngt) insertMultiple(vecs map[string][]float32, now int64, validation bo } func (n *ngt) Update(uuid string, vec []float32) (err error) { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } return n.update(uuid, vec, time.Now().UnixNano()) } func (n *ngt) UpdateWithTime(uuid string, vec []float32, t int64) (err error) { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } if t <= 0 { t = time.Now().UnixNano() } @@ -1052,10 +1095,16 @@ func (n *ngt) update(uuid string, vec []float32, t int64) (err error) { } func (n *ngt) UpdateMultiple(vecs map[string][]float32) (err error) { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } return n.updateMultiple(vecs, time.Now().UnixNano()) } func (n *ngt) UpdateMultipleWithTime(vecs map[string][]float32, t int64) (err error) { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } if t <= 0 { t = time.Now().UnixNano() } @@ -1080,10 +1129,16 @@ func (n *ngt) updateMultiple(vecs map[string][]float32, t int64) (err error) { } func (n *ngt) Delete(uuid string) (err error) { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } return n.delete(uuid, time.Now().UnixNano(), true) } func (n *ngt) DeleteWithTime(uuid string, t int64) (err error) { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } if t <= 0 { t = time.Now().UnixNano() } @@ -1105,10 +1160,16 @@ func (n *ngt) delete(uuid string, t int64, validation bool) (err error) { } func (n *ngt) DeleteMultiple(uuids ...string) (err error) { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } return n.deleteMultiple(uuids, time.Now().UnixNano(), true) } func (n *ngt) DeleteMultipleWithTime(uuids []string, t int64) (err error) { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } if t <= 0 { t = time.Now().UnixNano() } @@ -1129,6 +1190,75 @@ func (n *ngt) deleteMultiple(uuids []string, now int64, validation bool) (err er return err } +// RegenerateIndexes deletes the KVS and file, and then re-generate the NGT instance. +func (n *ngt) RegenerateIndexes(ctx context.Context) (err error) { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } + err = func() error { + ticker := time.NewTicker(time.Millisecond * 100) + defer ticker.Stop() + // wait for not indexing & not saving + for n.IsIndexing() || n.IsSaving() { + runtime.Gosched() + select { + case <-ctx.Done(): + return ctx.Err() + case <-ticker.C: + } + } + return nil + }() + if err != nil { + return err + } + n.cimu.Lock() + defer n.cimu.Unlock() + n.flushing.Store(true) + n.indexing.Store(true) + defer n.flushing.Store(false) + defer n.indexing.Store(false) + + // delete kvs + err = n.kvs.Close() + if err != nil { + log.Errorf("failed to flushing vector to ngt index in delete kvs. error: %v", err) + } + n.kvs = kvs.New(kvs.WithConcurrency(n.kvsdbConcurrency)) + + n.vq, err = vqueue.New() + + // gc + runtime.GC() + atomic.AddUint64(&n.nogce, 1) + + // delete file + err = file.DeleteDir(ctx, n.path) + if err != nil { + log.Errorf("failed to flushing vector to ngt index in delete file. error: %v", err) + } + + // delete cow + if n.enableCopyOnWrite { + err := file.DeleteDir(ctx, n.oldPath) + if err != nil { + log.Errorf("failed to flushing vector to ngt index in delete file. error: %v", err) + } + } + + // renew instance + nn, err := newNGT(n.cfg, n.opts...) + if err != nil { + return err + } + // Regenerate with flags set + nn.flushing.Store(true) + nn.indexing.Store(true) + n = nn + + return nil +} + func (n *ngt) CreateIndex(ctx context.Context, poolSize uint32) (err error) { ctx, span := trace.StartSpan(ctx, "vald/agent-ngt/service/NGT.CreateIndex") defer func() { @@ -1155,7 +1285,7 @@ func (n *ngt) CreateIndex(ctx context.Context, poolSize uint32) (err error) { ticker := time.NewTicker(time.Millisecond * 100) defer ticker.Stop() // wait for not indexing & not saving - for n.IsIndexing() || n.IsSaving() { + for n.IsIndexing() || n.IsSaving() || n.IsFlushing() { runtime.Gosched() select { case <-ctx.Done(): @@ -1341,7 +1471,10 @@ func (n *ngt) saveIndex(ctx context.Context) (err error) { ticker := time.NewTicker(time.Second) defer ticker.Stop() // wait for not indexing & not saving - for n.IsIndexing() || n.IsSaving() { + for n.IsIndexing() || n.IsSaving() || n.IsFlushing() { + if n.IsFlushing() { + return errors.ErrFlushingIsInProgress + } runtime.Gosched() select { case <-ctx.Done(): @@ -1616,6 +1749,11 @@ func (n *ngt) mktmp() (err error) { } func (n *ngt) Exists(uuid string) (oid uint32, ok bool) { + if n.IsFlushing() { + log.Debugf("Exists\tuuid: %s's data will be delete soon\terror: %v", + uuid, errors.ErrFlushingIsInProgress) + return 0, false + } ok = n.vq.IVExists(uuid) if !ok { oid, _, ok = n.kvs.Get(uuid) @@ -1691,6 +1829,10 @@ func (n *ngt) IsIndexing() bool { return i && ok } +func (n *ngt) IsFlushing() bool { + return n.flushing.Load() +} + func (n *ngt) UUIDs(ctx context.Context) (uuids []string) { uuids = make([]string, 0, n.kvs.Len()) var mu sync.Mutex diff --git a/pkg/gateway/filter/handler/grpc/handler.go b/pkg/gateway/filter/handler/grpc/handler.go index e18ed807ba..aadf86077f 100644 --- a/pkg/gateway/filter/handler/grpc/handler.go +++ b/pkg/gateway/filter/handler/grpc/handler.go @@ -3246,6 +3246,16 @@ func (s *server) MultiRemove(ctx context.Context, reqs *payload.Remove_MultiRequ return locs, errs } +func (s *server) Flush(ctx context.Context, req *payload.Flush_Request) (loc *payload.Info_Index_Count, err error) { + ctx, span := trace.StartSpan(grpc.WithGRPCMethod(ctx, vald.PackageName+"."+vald.FilterRPCServiceName+"/"+vald.FlushRPCName), apiName+"/"+vald.FlushRPCName) + defer func() { + if span != nil { + span.End() + } + }() + return s.gateway.Flush(ctx, req, s.copts...) +} + func (s *server) RemoveByTimestamp(ctx context.Context, req *payload.Remove_TimestampRequest) (*payload.Object_Locations, error) { ctx, span := trace.StartSpan(grpc.WithGRPCMethod(ctx, vald.PackageName+"."+vald.FilterRPCServiceName+"/"+vald.RemoveByTimestampRPCName), apiName+"/"+vald.RemoveByTimestampRPCName) defer func() { diff --git a/pkg/gateway/filter/handler/rest/handler.go b/pkg/gateway/filter/handler/rest/handler.go index 86084ef5c9..bb2a7b24a7 100644 --- a/pkg/gateway/filter/handler/rest/handler.go +++ b/pkg/gateway/filter/handler/rest/handler.go @@ -45,6 +45,7 @@ type Handler interface { MultiUpsert(w http.ResponseWriter, r *http.Request) (int, error) Remove(w http.ResponseWriter, r *http.Request) (int, error) MultiRemove(w http.ResponseWriter, r *http.Request) (int, error) + Flush(w http.ResponseWriter, r *http.Request) (int, error) GetObject(w http.ResponseWriter, r *http.Request) (int, error) SearchObject(w http.ResponseWriter, r *http.Request) (int, error) InsertObject(w http.ResponseWriter, r *http.Request) (int, error) @@ -188,6 +189,13 @@ func (h *handler) MultiRemove(w http.ResponseWriter, r *http.Request) (code int, }) } +func (h *handler) Flush(w http.ResponseWriter, r *http.Request) (code int, err error) { + var req *payload.Flush_Request + return json.Handler(w, r, &req, func() (interface{}, error) { + return h.vald.Flush(r.Context(), req) + }) +} + func (h *handler) GetObject(w http.ResponseWriter, r *http.Request) (code int, err error) { var req *payload.Object_VectorRequest return json.Handler(w, r, &req, func() (interface{}, error) { diff --git a/pkg/gateway/filter/router/router.go b/pkg/gateway/filter/router/router.go index e3fe3ee5de..f8b6c03352 100644 --- a/pkg/gateway/filter/router/router.go +++ b/pkg/gateway/filter/router/router.go @@ -186,6 +186,14 @@ func New(opts ...Option) http.Handler { Pattern: "/delete/multi", HandlerFunc: h.MultiRemove, }, + { + Name: "Flush", + Methods: []string{ + http.MethodDelete, + }, + Pattern: "/flush", + HandlerFunc: h.Flush, + }, { Name: "GetObject", Methods: []string{ diff --git a/pkg/gateway/lb/handler/grpc/handler.go b/pkg/gateway/lb/handler/grpc/handler.go index 50a1382a4e..ea3c8d150c 100644 --- a/pkg/gateway/lb/handler/grpc/handler.go +++ b/pkg/gateway/lb/handler/grpc/handler.go @@ -3010,6 +3010,112 @@ func (s *server) getObject(ctx context.Context, uuid string) (vec *payload.Objec return vec, nil } +func (s *server) Flush(ctx context.Context, req *payload.Flush_Request) (cnts *payload.Info_Index_Count, err error) { + ctx, span := trace.StartSpan(grpc.WithGRPCMethod(ctx, vald.PackageName+"."+vald.FlushRPCServiceName+"/"+vald.FlushRPCName), apiName+"/"+vald.FlushRPCName) + defer func() { + if span != nil { + span.End() + } + }() + + var ( + stored uint32 + uncommitted uint32 + indexing atomic.Value + saving atomic.Value + ) + indexing.Store(false) + saving.Store(false) + now := time.Now().UnixNano() + err = s.gateway.BroadCast(ctx, service.WRITE, func(ctx context.Context, target string, vc vald.Client, copts ...grpc.CallOption) (err error) { + ctx, span := trace.StartSpan(ctx, apiName+"."+vald.FlushRPCName+"/"+target) + defer func() { + if span != nil { + span.End() + } + }() + cnt, err := vc.Flush(ctx, req, copts...) + if err != nil { + st, msg, err := status.ParseError(err, codes.Internal, + "failed to parse "+vald.FlushRPCName+" gRPC error response", + &errdetails.RequestInfo{ + RequestId: strconv.FormatInt(now, 10), + ServingData: errdetails.Serialize(req), + }, + &errdetails.ResourceInfo{ + ResourceType: errdetails.ValdGRPCResourceTypePrefix + "/vald.v1." + vald.FlushRPCName, + ResourceName: fmt.Sprintf("%s: %s(%s) to %s", apiName, s.name, s.ip, target), + }) + if span != nil { + span.RecordError(err) + span.SetAttributes(trace.FromGRPCStatus(st.Code(), msg)...) + span.SetStatus(trace.StatusError, err.Error()) + } + if err != nil && st.Code() != codes.NotFound { + log.Error(err) + return err + } + return nil + } + atomic.AddUint32(&stored, cnt.Stored) + atomic.AddUint32(&uncommitted, cnt.Uncommitted) + if cnt.Indexing { + indexing.Store(cnt.Indexing) + } + if cnt.Saving { + saving.Store(cnt.Saving) + } + return nil + }) + if err != nil { + st, msg, err := status.ParseError(err, codes.Internal, + "failed to parse "+vald.FlushRPCName+" gRPC error response", + &errdetails.RequestInfo{ + RequestId: strconv.FormatInt(now, 10), + ServingData: errdetails.Serialize(req), + }, + &errdetails.ResourceInfo{ + ResourceType: errdetails.ValdGRPCResourceTypePrefix + "/vald.v1." + vald.FlushRPCName, + ResourceName: fmt.Sprintf("%s: %s(%s) to %v", apiName, s.name, s.ip, s.gateway.Addrs(ctx)), + }, info.Get()) + if span != nil { + span.RecordError(err) + span.SetAttributes(trace.FromGRPCStatus(st.Code(), msg)...) + span.SetStatus(trace.StatusError, err.Error()) + } + return nil, err + } + cnts = &payload.Info_Index_Count{ + Stored: atomic.LoadUint32(&stored), + Uncommitted: atomic.LoadUint32(&uncommitted), + Indexing: indexing.Load().(bool), + Saving: saving.Load().(bool), + } + if cnts.Stored > 0 || cnts.Uncommitted > 0 || cnts.Indexing || cnts.Saving { + err = errors.Errorf( + "stored index: %d, uncommited: %d, indexing: %t, saving: %t", + cnts.Stored, cnts.Uncommitted, cnts.Indexing, cnts.Saving, + ) + err = status.WrapWithInternal(vald.FlushRPCName+" API flush failed", err, + &errdetails.RequestInfo{ + RequestId: strconv.FormatInt(now, 10), + ServingData: errdetails.Serialize(req), + }, + &errdetails.ResourceInfo{ + ResourceType: errdetails.ValdGRPCResourceTypePrefix + "/vald.v1." + vald.FlushRPCName, + ResourceName: fmt.Sprintf("%s: %s(%s) to %v", apiName, s.name, s.ip, s.gateway.Addrs(ctx)), + }) + if span != nil { + span.RecordError(err) + span.SetAttributes(trace.StatusCodeInternal(err.Error())...) + span.SetStatus(trace.StatusError, err.Error()) + } + return nil, err + } + + return cnts, nil +} + func (s *server) GetObject(ctx context.Context, req *payload.Object_VectorRequest) (vec *payload.Object_Vector, err error) { ctx, span := trace.StartSpan(grpc.WithGRPCMethod(ctx, vald.PackageName+"."+vald.ObjectRPCServiceName+"/"+vald.GetObjectRPCName), apiName+"/"+vald.GetObjectRPCName) defer func() { diff --git a/pkg/gateway/lb/handler/rest/handler.go b/pkg/gateway/lb/handler/rest/handler.go index 59c2eea804..83a7607453 100644 --- a/pkg/gateway/lb/handler/rest/handler.go +++ b/pkg/gateway/lb/handler/rest/handler.go @@ -45,6 +45,7 @@ type Handler interface { MultiUpsert(w http.ResponseWriter, r *http.Request) (int, error) Remove(w http.ResponseWriter, r *http.Request) (int, error) MultiRemove(w http.ResponseWriter, r *http.Request) (int, error) + Flush(w http.ResponseWriter, r *http.Request) (int, error) GetObject(w http.ResponseWriter, r *http.Request) (int, error) } @@ -180,6 +181,13 @@ func (h *handler) MultiRemove(w http.ResponseWriter, r *http.Request) (code int, }) } +func (h *handler) Flush(w http.ResponseWriter, r *http.Request) (code int, err error) { + var req *payload.Flush_Request + return json.Handler(w, r, &req, func() (interface{}, error) { + return h.vald.Flush(r.Context(), req) + }) +} + func (h *handler) GetObject(w http.ResponseWriter, r *http.Request) (code int, err error) { var req *payload.Object_VectorRequest return json.Handler(w, r, &req, func() (interface{}, error) { diff --git a/pkg/gateway/lb/router/router.go b/pkg/gateway/lb/router/router.go index dd7b3920be..157bbb46a3 100644 --- a/pkg/gateway/lb/router/router.go +++ b/pkg/gateway/lb/router/router.go @@ -155,6 +155,14 @@ func New(opts ...Option) http.Handler { Pattern: "/delete/multi", HandlerFunc: h.MultiRemove, }, + { + Name: "Flush", + Methods: []string{ + http.MethodDelete, + }, + Pattern: "/flush", + HandlerFunc: h.Flush, + }, { Name: "GetObject", Methods: []string{ diff --git a/pkg/gateway/mirror/handler/grpc/handler.go b/pkg/gateway/mirror/handler/grpc/handler.go index c94d631dc9..edafb8e872 100644 --- a/pkg/gateway/mirror/handler/grpc/handler.go +++ b/pkg/gateway/mirror/handler/grpc/handler.go @@ -3341,6 +3341,11 @@ func (s *server) doStreamListObject(ctx context.Context, client vald.Object_Stre } } +// TODO: implement Flush handler +func (s *server) Flush(ctx context.Context, req *payload.Flush_Request) (*payload.Info_Index_Count, error) { + return s.UnimplementedFlushServer.Flush(ctx, req) +} + func (s *server) isProxied(ctx context.Context) bool { return s.gateway.FromForwardedContext(ctx) != "" } diff --git a/rust/libs/proto/src/payload.v1.rs b/rust/libs/proto/src/payload.v1.rs index 4b44a0bf5e..ec3dac0d89 100644 --- a/rust/libs/proto/src/payload.v1.rs +++ b/rust/libs/proto/src/payload.v1.rs @@ -516,6 +516,17 @@ pub mod remove { pub timestamp: i64, } } +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Flush { +} +/// Nested message and enum types in `Flush`. +pub mod flush { + #[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] + pub struct Request { + } +} /// Common messages. #[allow(clippy::derive_partial_eq_without_eq)] #[derive(Clone, PartialEq, ::prost::Message)] diff --git a/rust/libs/proto/src/vald.v1.tonic.rs b/rust/libs/proto/src/vald.v1.tonic.rs index 3b9caf242e..32d1d10e7b 100644 --- a/rust/libs/proto/src/vald.v1.tonic.rs +++ b/rust/libs/proto/src/vald.v1.tonic.rs @@ -1356,6 +1356,301 @@ pub mod filter_server { } } /// Generated client implementations. +pub mod flush_client { + #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] + use tonic::codegen::*; + use tonic::codegen::http::Uri; + #[derive(Debug, Clone)] + pub struct FlushClient { + inner: tonic::client::Grpc, + } + impl FlushClient { + /// Attempt to create a new client by connecting to a given endpoint. + pub async fn connect(dst: D) -> Result + where + D: TryInto, + D::Error: Into, + { + let conn = tonic::transport::Endpoint::new(dst)?.connect().await?; + Ok(Self::new(conn)) + } + } + impl FlushClient + where + T: tonic::client::GrpcService, + T::Error: Into, + T::ResponseBody: Body + Send + 'static, + ::Error: Into + Send, + { + pub fn new(inner: T) -> Self { + let inner = tonic::client::Grpc::new(inner); + Self { inner } + } + pub fn with_origin(inner: T, origin: Uri) -> Self { + let inner = tonic::client::Grpc::with_origin(inner, origin); + Self { inner } + } + pub fn with_interceptor( + inner: T, + interceptor: F, + ) -> FlushClient> + where + F: tonic::service::Interceptor, + T::ResponseBody: Default, + T: tonic::codegen::Service< + http::Request, + Response = http::Response< + >::ResponseBody, + >, + >, + , + >>::Error: Into + Send + Sync, + { + FlushClient::new(InterceptedService::new(inner, interceptor)) + } + /// Compress requests with the given encoding. + /// + /// This requires the server to support it otherwise it might respond with an + /// error. + #[must_use] + pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.inner = self.inner.send_compressed(encoding); + self + } + /// Enable decompressing responses. + #[must_use] + pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.inner = self.inner.accept_compressed(encoding); + self + } + /// Limits the maximum size of a decoded message. + /// + /// Default: `4MB` + #[must_use] + pub fn max_decoding_message_size(mut self, limit: usize) -> Self { + self.inner = self.inner.max_decoding_message_size(limit); + self + } + /// Limits the maximum size of an encoded message. + /// + /// Default: `usize::MAX` + #[must_use] + pub fn max_encoding_message_size(mut self, limit: usize) -> Self { + self.inner = self.inner.max_encoding_message_size(limit); + self + } + pub async fn flush( + &mut self, + request: impl tonic::IntoRequest< + super::super::super::payload::v1::flush::Request, + >, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::new( + tonic::Code::Unknown, + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static("/vald.v1.Flush/Flush"); + let mut req = request.into_request(); + req.extensions_mut().insert(GrpcMethod::new("vald.v1.Flush", "Flush")); + self.inner.unary(req, path, codec).await + } + } +} +/// Generated server implementations. +pub mod flush_server { + #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] + use tonic::codegen::*; + /// Generated trait containing gRPC methods that should be implemented for use with FlushServer. + #[async_trait] + pub trait Flush: Send + Sync + 'static { + async fn flush( + &self, + request: tonic::Request, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + >; + } + #[derive(Debug)] + pub struct FlushServer { + inner: _Inner, + accept_compression_encodings: EnabledCompressionEncodings, + send_compression_encodings: EnabledCompressionEncodings, + max_decoding_message_size: Option, + max_encoding_message_size: Option, + } + struct _Inner(Arc); + impl FlushServer { + pub fn new(inner: T) -> Self { + Self::from_arc(Arc::new(inner)) + } + pub fn from_arc(inner: Arc) -> Self { + let inner = _Inner(inner); + Self { + inner, + accept_compression_encodings: Default::default(), + send_compression_encodings: Default::default(), + max_decoding_message_size: None, + max_encoding_message_size: None, + } + } + pub fn with_interceptor( + inner: T, + interceptor: F, + ) -> InterceptedService + where + F: tonic::service::Interceptor, + { + InterceptedService::new(Self::new(inner), interceptor) + } + /// Enable decompressing requests with the given encoding. + #[must_use] + pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.accept_compression_encodings.enable(encoding); + self + } + /// Compress responses with the given encoding, if the client supports it. + #[must_use] + pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { + self.send_compression_encodings.enable(encoding); + self + } + /// Limits the maximum size of a decoded message. + /// + /// Default: `4MB` + #[must_use] + pub fn max_decoding_message_size(mut self, limit: usize) -> Self { + self.max_decoding_message_size = Some(limit); + self + } + /// Limits the maximum size of an encoded message. + /// + /// Default: `usize::MAX` + #[must_use] + pub fn max_encoding_message_size(mut self, limit: usize) -> Self { + self.max_encoding_message_size = Some(limit); + self + } + } + impl tonic::codegen::Service> for FlushServer + where + T: Flush, + B: Body + Send + 'static, + B::Error: Into + Send + 'static, + { + type Response = http::Response; + type Error = std::convert::Infallible; + type Future = BoxFuture; + fn poll_ready( + &mut self, + _cx: &mut Context<'_>, + ) -> Poll> { + Poll::Ready(Ok(())) + } + fn call(&mut self, req: http::Request) -> Self::Future { + let inner = self.inner.clone(); + match req.uri().path() { + "/vald.v1.Flush/Flush" => { + #[allow(non_camel_case_types)] + struct FlushSvc(pub Arc); + impl< + T: Flush, + > tonic::server::UnaryService< + super::super::super::payload::v1::flush::Request, + > for FlushSvc { + type Response = super::super::super::payload::v1::info::index::Count; + type Future = BoxFuture< + tonic::Response, + tonic::Status, + >; + fn call( + &mut self, + request: tonic::Request< + super::super::super::payload::v1::flush::Request, + >, + ) -> Self::Future { + let inner = Arc::clone(&self.0); + let fut = async move { + ::flush(&inner, request).await + }; + Box::pin(fut) + } + } + let accept_compression_encodings = self.accept_compression_encodings; + let send_compression_encodings = self.send_compression_encodings; + let max_decoding_message_size = self.max_decoding_message_size; + let max_encoding_message_size = self.max_encoding_message_size; + let inner = self.inner.clone(); + let fut = async move { + let inner = inner.0; + let method = FlushSvc(inner); + let codec = tonic::codec::ProstCodec::default(); + let mut grpc = tonic::server::Grpc::new(codec) + .apply_compression_config( + accept_compression_encodings, + send_compression_encodings, + ) + .apply_max_message_size_config( + max_decoding_message_size, + max_encoding_message_size, + ); + let res = grpc.unary(method, req).await; + Ok(res) + }; + Box::pin(fut) + } + _ => { + Box::pin(async move { + Ok( + http::Response::builder() + .status(200) + .header("grpc-status", "12") + .header("content-type", "application/grpc") + .body(empty_body()) + .unwrap(), + ) + }) + } + } + } + } + impl Clone for FlushServer { + fn clone(&self) -> Self { + let inner = self.inner.clone(); + Self { + inner, + accept_compression_encodings: self.accept_compression_encodings, + send_compression_encodings: self.send_compression_encodings, + max_decoding_message_size: self.max_decoding_message_size, + max_encoding_message_size: self.max_encoding_message_size, + } + } + } + impl Clone for _Inner { + fn clone(&self) -> Self { + Self(Arc::clone(&self.0)) + } + } + impl std::fmt::Debug for _Inner { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self.0) + } + } + impl tonic::server::NamedService for FlushServer { + const NAME: &'static str = "vald.v1.Flush"; + } +} +/// Generated client implementations. pub mod insert_client { #![allow(unused_variables, dead_code, missing_docs, clippy::let_unit_value)] use tonic::codegen::*; diff --git a/tests/e2e/crud/crud_test.go b/tests/e2e/crud/crud_test.go index 2e2593687f..b35014282c 100644 --- a/tests/e2e/crud/crud_test.go +++ b/tests/e2e/crud/crud_test.go @@ -413,6 +413,15 @@ func TestE2EStandardCRUD(t *testing.T) { if err != nil { t.Fatalf("an error occurred: %s", err) } + + err = op.Flush(t, ctx) + if err != nil { + // TODO: Remove code check afeter Flush API is available for agent-faiss and mirror-gateway + st, _, _ := status.ParseError(err, codes.Unknown, "") + if st.Code() != codes.Unimplemented { + t.Fatalf("an error occurred: %s", err) + } + } } func TestE2ECRUDWithSkipStrictExistCheck(t *testing.T) { diff --git a/tests/e2e/operation/operation.go b/tests/e2e/operation/operation.go index 70adeb5481..592b07a9c6 100644 --- a/tests/e2e/operation/operation.go +++ b/tests/e2e/operation/operation.go @@ -83,6 +83,7 @@ type Client interface { Update(t *testing.T, ctx context.Context, ds Dataset) error Upsert(t *testing.T, ctx context.Context, ds Dataset) error Remove(t *testing.T, ctx context.Context, ds Dataset) error + Flush(t *testing.T, ctx context.Context) error RemoveByTimestamp(t *testing.T, ctx context.Context, timestamp int64) error InsertWithParameters( t *testing.T, diff --git a/tests/e2e/operation/stream.go b/tests/e2e/operation/stream.go index 51bd11ee6c..dac182d975 100644 --- a/tests/e2e/operation/stream.go +++ b/tests/e2e/operation/stream.go @@ -1026,6 +1026,24 @@ func (c *client) RemoveWithParameters( return rerr } +func (c *client) Flush(t *testing.T, ctx context.Context) error { + t.Log("flush operation started") + + client, err := c.getClient(ctx) + if err != nil { + return err + } + + _, err = client.Flush(ctx, &payload.Flush_Request{}) + if err != nil { + return err + } + + t.Log("flush operation finished") + + return nil +} + func (c *client) RemoveByTimestamp(t *testing.T, ctx context.Context, timestamp int64) error { t.Log("removeByTimestamp operation started")