You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ha...@apache.org on 2021/10/18 23:17:11 UTC
[skywalking-banyandb] branch main updated: Feat: metadata registry
with embedded etcd (#55)
This is an automated email from the ASF dual-hosted git repository.
hanahmily pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git
The following commit(s) were added to refs/heads/main by this push:
new be066f1 Feat: metadata registry with embedded etcd (#55)
be066f1 is described below
commit be066f14672fc1f0e8533aeaefe6d44efc01b30a
Author: Jiajing LU <lu...@gmail.com>
AuthorDate: Tue Oct 19 07:17:05 2021 +0800
Feat: metadata registry with embedded etcd (#55)
* add etcd schema registry
* add metadata relevant entities RPC
* remove protoc installation
* move preload to test files
Co-authored-by: Gao Hongtao <ha...@gmail.com>
---
Makefile | 1 +
api/Makefile | 2 +-
api/proto/banyandb/common/v1/common.pb.go | 136 +-
api/proto/banyandb/common/v1/common.proto | 10 +
api/proto/banyandb/database/v1/database.pb.go | 2 +-
api/proto/banyandb/database/v1/event.pb.go | 2 +-
api/proto/banyandb/database/v1/rpc.pb.go | 3423 ++++++++++++++++++++
api/proto/banyandb/database/v1/rpc.proto | 248 ++
api/proto/banyandb/database/v1/rpc_grpc.pb.go | 1133 +++++++
api/proto/banyandb/database/v1/schema.pb.go | 2 +-
api/proto/banyandb/model/v1/common.pb.go | 2 +-
api/proto/banyandb/model/v1/query.pb.go | 2 +-
api/proto/banyandb/stream/v1/query.pb.go | 2 +-
api/proto/banyandb/stream/v1/rpc.pb.go | 2 +-
api/proto/banyandb/stream/v1/write.pb.go | 2 +-
banyand/internal/cmd/standalone.go | 4 +-
banyand/liaison/grpc/registry.go | 294 ++
banyand/liaison/grpc/registry_test.go | 187 ++
banyand/liaison/grpc/server.go | 37 +-
banyand/liaison/grpc/stream_test.go | 32 +-
banyand/liaison/liaison.go | 5 +-
banyand/metadata/metadata.go | 93 +-
banyand/metadata/metadata_test.go | 38 +-
banyand/metadata/schema/etcd.go | 502 +++
banyand/metadata/schema/etcd_test.go | 375 +++
banyand/metadata/schema/schema.go | 49 +-
banyand/metadata/schema/sw.go | 139 -
banyand/metadata/schema/sw_test.go | 73 -
.../{data => testdata}/index_rule_binding.json | 0
.../index_rules/db.instance.json | 0
.../{data => testdata}/index_rules/db.type.json | 0
.../{data => testdata}/index_rules/duration.json | 0
.../index_rules/endpoint_id.json | 0
.../index_rules/http.method.json | 0
.../{data => testdata}/index_rules/mq.broker.json | 0
.../{data => testdata}/index_rules/mq.queue.json | 0
.../{data => testdata}/index_rules/mq.topic.json | 0
.../index_rules/status_code.json | 0
.../{data => testdata}/index_rules/trace_id.json | 0
.../metadata/schema/{data => testdata}/stream.json | 0
banyand/query/processor.go | 17 +-
banyand/query/processor_test.go | 21 +-
banyand/query/query.go | 5 +-
banyand/stream/service.go | 2 +-
banyand/stream/stream_query_test.go | 11 +-
banyand/stream/stream_write_test.go | 22 +-
go.mod | 3 +
go.sum | 214 +-
pkg/query/logical/analyzer.go | 19 +-
pkg/query/logical/analyzer_test.go | 116 +-
pkg/query/logical/common_test.go | 21 +-
pkg/query/logical/plan_execution_test.go | 141 +-
pkg/test/etcd.go | 100 +
.../test/testdata}/index_rule_binding.json | 0
.../test/testdata}/index_rules/db.instance.json | 0
.../test/testdata}/index_rules/db.type.json | 0
.../test/testdata}/index_rules/duration.json | 0
.../test/testdata}/index_rules/endpoint_id.json | 0
.../test/testdata}/index_rules/http.method.json | 0
.../test/testdata}/index_rules/mq.broker.json | 0
.../test/testdata}/index_rules/mq.queue.json | 0
.../test/testdata}/index_rules/mq.topic.json | 0
.../test/testdata}/index_rules/status_code.json | 0
.../test/testdata}/index_rules/trace_id.json | 0
.../schema/data => pkg/test/testdata}/stream.json | 0
scripts/build/base.mk | 35 +-
66 files changed, 7070 insertions(+), 454 deletions(-)
diff --git a/Makefile b/Makefile
index e0e13fc..0146f5c 100644
--- a/Makefile
+++ b/Makefile
@@ -92,6 +92,7 @@ check: clean
@if [ ! -z "`git status -s`" ]; then \
echo "Following files are not consistent with CI:"; \
git status -s; \
+ cat /tmp/artifacts/check.diff; \
exit 1; \
fi
diff --git a/api/Makefile b/api/Makefile
index 303d7f1..ca1fd60 100644
--- a/api/Makefile
+++ b/api/Makefile
@@ -23,7 +23,7 @@ proto_dir := $(root_dir)/api/proto
include ../scripts/build/base.mk
include ../scripts/build/help.mk
-generate: $(PROTOC)
+generate: $(BUF)
@PATH=$(PATH):$(tool_bin):$(proto_dir) buf generate
lint: $(PROTOC)
diff --git a/api/proto/banyandb/common/v1/common.pb.go b/api/proto/banyandb/common/v1/common.pb.go
index 8ff5f46..f973f23 100644
--- a/api/proto/banyandb/common/v1/common.pb.go
+++ b/api/proto/banyandb/common/v1/common.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.1
-// protoc v3.17.3
+// protoc v3.18.1
// source: banyandb/common/v1/common.proto
package v1
@@ -29,6 +29,7 @@ import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+ timestamppb "google.golang.org/protobuf/types/known/timestamppb"
)
const (
@@ -153,29 +154,95 @@ func (x *Metadata) GetId() uint32 {
return 0
}
+// Group is an internal object for Group management
+type Group struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ // name of the group
+ Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+ // updated_at_nanoseconds indicates when resources of the group are updated
+ UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"`
+}
+
+func (x *Group) Reset() {
+ *x = Group{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_common_v1_common_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Group) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Group) ProtoMessage() {}
+
+func (x *Group) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_common_v1_common_proto_msgTypes[1]
+ 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 Group.ProtoReflect.Descriptor instead.
+func (*Group) Descriptor() ([]byte, []int) {
+ return file_banyandb_common_v1_common_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *Group) GetName() string {
+ if x != nil {
+ return x.Name
+ }
+ return ""
+}
+
+func (x *Group) GetUpdatedAt() *timestamppb.Timestamp {
+ if x != nil {
+ return x.UpdatedAt
+ }
+ return nil
+}
+
var File_banyandb_common_v1_common_proto protoreflect.FileDescriptor
var file_banyandb_common_v1_common_proto_rawDesc = []byte{
0x0a, 0x1f, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x12, 0x12, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
- 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x22, 0x44, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69,
- 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x2a, 0x4b, 0x0a, 0x07, 0x43,
- 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x41, 0x54, 0x41, 0x4c, 0x4f,
- 0x47, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
- 0x12, 0x0a, 0x0e, 0x43, 0x41, 0x54, 0x41, 0x4c, 0x4f, 0x47, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41,
- 0x4d, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x41, 0x54, 0x41, 0x4c, 0x4f, 0x47, 0x5f, 0x4d,
- 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x10, 0x02, 0x42, 0x6e, 0x0a, 0x28, 0x6f, 0x72, 0x67, 0x2e,
- 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e,
- 0x67, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
- 0x6e, 0x2e, 0x76, 0x31, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
- 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69,
- 0x6e, 0x67, 0x2d, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x61, 0x70, 0x69, 0x2f,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x63,
- 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72,
+ 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
+ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x44, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02,
+ 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x56, 0x0a, 0x05,
+ 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+ 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x64, 0x41, 0x74, 0x2a, 0x4b, 0x0a, 0x07, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12,
+ 0x17, 0x0a, 0x13, 0x43, 0x41, 0x54, 0x41, 0x4c, 0x4f, 0x47, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
+ 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x41, 0x54, 0x41,
+ 0x4c, 0x4f, 0x47, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f,
+ 0x43, 0x41, 0x54, 0x41, 0x4c, 0x4f, 0x47, 0x5f, 0x4d, 0x45, 0x41, 0x53, 0x55, 0x52, 0x45, 0x10,
+ 0x02, 0x42, 0x6e, 0x0a, 0x28, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e,
+ 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
+ 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x5a, 0x42, 0x67,
+ 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65,
+ 0x2f, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x61, 0x6e, 0x79,
+ 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62,
+ 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76,
+ 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -191,17 +258,20 @@ func file_banyandb_common_v1_common_proto_rawDescGZIP() []byte {
}
var file_banyandb_common_v1_common_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_banyandb_common_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
+var file_banyandb_common_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
var file_banyandb_common_v1_common_proto_goTypes = []interface{}{
- (Catalog)(0), // 0: banyandb.common.v1.Catalog
- (*Metadata)(nil), // 1: banyandb.common.v1.Metadata
+ (Catalog)(0), // 0: banyandb.common.v1.Catalog
+ (*Metadata)(nil), // 1: banyandb.common.v1.Metadata
+ (*Group)(nil), // 2: banyandb.common.v1.Group
+ (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp
}
var file_banyandb_common_v1_common_proto_depIdxs = []int32{
- 0, // [0:0] is the sub-list for method output_type
- 0, // [0:0] 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
+ 3, // 0: banyandb.common.v1.Group.updated_at:type_name -> google.protobuf.Timestamp
+ 1, // [1:1] is the sub-list for method output_type
+ 1, // [1:1] is the sub-list for method input_type
+ 1, // [1:1] is the sub-list for extension type_name
+ 1, // [1:1] is the sub-list for extension extendee
+ 0, // [0:1] is the sub-list for field type_name
}
func init() { file_banyandb_common_v1_common_proto_init() }
@@ -222,6 +292,18 @@ func file_banyandb_common_v1_common_proto_init() {
return nil
}
}
+ file_banyandb_common_v1_common_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*Group); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
}
type x struct{}
out := protoimpl.TypeBuilder{
@@ -229,7 +311,7 @@ func file_banyandb_common_v1_common_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_banyandb_common_v1_common_proto_rawDesc,
NumEnums: 1,
- NumMessages: 1,
+ NumMessages: 2,
NumExtensions: 0,
NumServices: 0,
},
diff --git a/api/proto/banyandb/common/v1/common.proto b/api/proto/banyandb/common/v1/common.proto
index cbf1bd1..c175122 100644
--- a/api/proto/banyandb/common/v1/common.proto
+++ b/api/proto/banyandb/common/v1/common.proto
@@ -22,6 +22,8 @@ option go_package = "github.com/apache/skywalking-banyandb/api/proto/banyandb/co
package banyandb.common.v1;
+import "google/protobuf/timestamp.proto";
+
enum Catalog {
CATALOG_UNSPECIFIED = 0;
CATALOG_STREAM = 1;
@@ -36,3 +38,11 @@ message Metadata {
string name = 2;
uint32 id = 3;
}
+
+// Group is an internal object for Group management
+message Group {
+ // name of the group
+ string name = 1;
+ // updated_at_nanoseconds indicates when resources of the group are updated
+ google.protobuf.Timestamp updated_at = 2;
+}
diff --git a/api/proto/banyandb/database/v1/database.pb.go b/api/proto/banyandb/database/v1/database.pb.go
index f24efd4..bd2a3e6 100644
--- a/api/proto/banyandb/database/v1/database.pb.go
+++ b/api/proto/banyandb/database/v1/database.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.1
-// protoc v3.17.3
+// protoc v3.18.1
// source: banyandb/database/v1/database.proto
package v1
diff --git a/api/proto/banyandb/database/v1/event.pb.go b/api/proto/banyandb/database/v1/event.pb.go
index e3f2836..87bddf1 100644
--- a/api/proto/banyandb/database/v1/event.pb.go
+++ b/api/proto/banyandb/database/v1/event.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.1
-// protoc v3.17.3
+// protoc v3.18.1
// source: banyandb/database/v1/event.proto
package v1
diff --git a/api/proto/banyandb/database/v1/rpc.pb.go b/api/proto/banyandb/database/v1/rpc.pb.go
new file mode 100644
index 0000000..acd4a03
--- /dev/null
+++ b/api/proto/banyandb/database/v1/rpc.pb.go
@@ -0,0 +1,3423 @@
+// Licensed to Apache Software Foundation (ASF) under one or more contributor
+// license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright
+// ownership. Apache Software Foundation (ASF) licenses this file to you under
+// the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// protoc-gen-go v1.27.1
+// protoc v3.18.1
+// source: banyandb/database/v1/rpc.proto
+
+package v1
+
+import (
+ reflect "reflect"
+ sync "sync"
+
+ protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+ protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+
+ v1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/common/v1"
+)
+
+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)
+)
+
+type StreamRegistryServiceCreateRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Stream *Stream `protobuf:"bytes,1,opt,name=stream,proto3" json:"stream,omitempty"`
+}
+
+func (x *StreamRegistryServiceCreateRequest) Reset() {
+ *x = StreamRegistryServiceCreateRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[0]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *StreamRegistryServiceCreateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StreamRegistryServiceCreateRequest) ProtoMessage() {}
+
+func (x *StreamRegistryServiceCreateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[0]
+ 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 StreamRegistryServiceCreateRequest.ProtoReflect.Descriptor instead.
+func (*StreamRegistryServiceCreateRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{0}
+}
+
+func (x *StreamRegistryServiceCreateRequest) GetStream() *Stream {
+ if x != nil {
+ return x.Stream
+ }
+ return nil
+}
+
+type StreamRegistryServiceCreateResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *StreamRegistryServiceCreateResponse) Reset() {
+ *x = StreamRegistryServiceCreateResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[1]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *StreamRegistryServiceCreateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StreamRegistryServiceCreateResponse) ProtoMessage() {}
+
+func (x *StreamRegistryServiceCreateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[1]
+ 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 StreamRegistryServiceCreateResponse.ProtoReflect.Descriptor instead.
+func (*StreamRegistryServiceCreateResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{1}
+}
+
+type StreamRegistryServiceUpdateRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Stream *Stream `protobuf:"bytes,1,opt,name=stream,proto3" json:"stream,omitempty"`
+}
+
+func (x *StreamRegistryServiceUpdateRequest) Reset() {
+ *x = StreamRegistryServiceUpdateRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[2]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *StreamRegistryServiceUpdateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StreamRegistryServiceUpdateRequest) ProtoMessage() {}
+
+func (x *StreamRegistryServiceUpdateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[2]
+ 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 StreamRegistryServiceUpdateRequest.ProtoReflect.Descriptor instead.
+func (*StreamRegistryServiceUpdateRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{2}
+}
+
+func (x *StreamRegistryServiceUpdateRequest) GetStream() *Stream {
+ if x != nil {
+ return x.Stream
+ }
+ return nil
+}
+
+type StreamRegistryServiceUpdateResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *StreamRegistryServiceUpdateResponse) Reset() {
+ *x = StreamRegistryServiceUpdateResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *StreamRegistryServiceUpdateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StreamRegistryServiceUpdateResponse) ProtoMessage() {}
+
+func (x *StreamRegistryServiceUpdateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[3]
+ 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 StreamRegistryServiceUpdateResponse.ProtoReflect.Descriptor instead.
+func (*StreamRegistryServiceUpdateResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{3}
+}
+
+type StreamRegistryServiceDeleteRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Metadata *v1.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *StreamRegistryServiceDeleteRequest) Reset() {
+ *x = StreamRegistryServiceDeleteRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[4]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *StreamRegistryServiceDeleteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StreamRegistryServiceDeleteRequest) ProtoMessage() {}
+
+func (x *StreamRegistryServiceDeleteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[4]
+ 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 StreamRegistryServiceDeleteRequest.ProtoReflect.Descriptor instead.
+func (*StreamRegistryServiceDeleteRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{4}
+}
+
+func (x *StreamRegistryServiceDeleteRequest) GetMetadata() *v1.Metadata {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+type StreamRegistryServiceDeleteResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Deleted bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"`
+}
+
+func (x *StreamRegistryServiceDeleteResponse) Reset() {
+ *x = StreamRegistryServiceDeleteResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[5]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *StreamRegistryServiceDeleteResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StreamRegistryServiceDeleteResponse) ProtoMessage() {}
+
+func (x *StreamRegistryServiceDeleteResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[5]
+ 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 StreamRegistryServiceDeleteResponse.ProtoReflect.Descriptor instead.
+func (*StreamRegistryServiceDeleteResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *StreamRegistryServiceDeleteResponse) GetDeleted() bool {
+ if x != nil {
+ return x.Deleted
+ }
+ return false
+}
+
+type StreamRegistryServiceGetRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Metadata *v1.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *StreamRegistryServiceGetRequest) Reset() {
+ *x = StreamRegistryServiceGetRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[6]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *StreamRegistryServiceGetRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StreamRegistryServiceGetRequest) ProtoMessage() {}
+
+func (x *StreamRegistryServiceGetRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_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 StreamRegistryServiceGetRequest.ProtoReflect.Descriptor instead.
+func (*StreamRegistryServiceGetRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *StreamRegistryServiceGetRequest) GetMetadata() *v1.Metadata {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+type StreamRegistryServiceGetResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Stream *Stream `protobuf:"bytes,1,opt,name=stream,proto3" json:"stream,omitempty"`
+}
+
+func (x *StreamRegistryServiceGetResponse) Reset() {
+ *x = StreamRegistryServiceGetResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[7]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *StreamRegistryServiceGetResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StreamRegistryServiceGetResponse) ProtoMessage() {}
+
+func (x *StreamRegistryServiceGetResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[7]
+ 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 StreamRegistryServiceGetResponse.ProtoReflect.Descriptor instead.
+func (*StreamRegistryServiceGetResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *StreamRegistryServiceGetResponse) GetStream() *Stream {
+ if x != nil {
+ return x.Stream
+ }
+ return nil
+}
+
+type StreamRegistryServiceListRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
+}
+
+func (x *StreamRegistryServiceListRequest) Reset() {
+ *x = StreamRegistryServiceListRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[8]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *StreamRegistryServiceListRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StreamRegistryServiceListRequest) ProtoMessage() {}
+
+func (x *StreamRegistryServiceListRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[8]
+ 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 StreamRegistryServiceListRequest.ProtoReflect.Descriptor instead.
+func (*StreamRegistryServiceListRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{8}
+}
+
+func (x *StreamRegistryServiceListRequest) GetGroup() string {
+ if x != nil {
+ return x.Group
+ }
+ return ""
+}
+
+type StreamRegistryServiceListResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Stream []*Stream `protobuf:"bytes,1,rep,name=stream,proto3" json:"stream,omitempty"`
+}
+
+func (x *StreamRegistryServiceListResponse) Reset() {
+ *x = StreamRegistryServiceListResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[9]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *StreamRegistryServiceListResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*StreamRegistryServiceListResponse) ProtoMessage() {}
+
+func (x *StreamRegistryServiceListResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[9]
+ 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 StreamRegistryServiceListResponse.ProtoReflect.Descriptor instead.
+func (*StreamRegistryServiceListResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{9}
+}
+
+func (x *StreamRegistryServiceListResponse) GetStream() []*Stream {
+ if x != nil {
+ return x.Stream
+ }
+ return nil
+}
+
+type IndexRuleBindingRegistryServiceCreateRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ IndexRuleBinding *IndexRuleBinding `protobuf:"bytes,1,opt,name=index_rule_binding,json=indexRuleBinding,proto3" json:"index_rule_binding,omitempty"`
+}
+
+func (x *IndexRuleBindingRegistryServiceCreateRequest) Reset() {
+ *x = IndexRuleBindingRegistryServiceCreateRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[10]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleBindingRegistryServiceCreateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleBindingRegistryServiceCreateRequest) ProtoMessage() {}
+
+func (x *IndexRuleBindingRegistryServiceCreateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[10]
+ 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 IndexRuleBindingRegistryServiceCreateRequest.ProtoReflect.Descriptor instead.
+func (*IndexRuleBindingRegistryServiceCreateRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{10}
+}
+
+func (x *IndexRuleBindingRegistryServiceCreateRequest) GetIndexRuleBinding() *IndexRuleBinding {
+ if x != nil {
+ return x.IndexRuleBinding
+ }
+ return nil
+}
+
+type IndexRuleBindingRegistryServiceCreateResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *IndexRuleBindingRegistryServiceCreateResponse) Reset() {
+ *x = IndexRuleBindingRegistryServiceCreateResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleBindingRegistryServiceCreateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleBindingRegistryServiceCreateResponse) ProtoMessage() {}
+
+func (x *IndexRuleBindingRegistryServiceCreateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[11]
+ 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 IndexRuleBindingRegistryServiceCreateResponse.ProtoReflect.Descriptor instead.
+func (*IndexRuleBindingRegistryServiceCreateResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{11}
+}
+
+type IndexRuleBindingRegistryServiceUpdateRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ IndexRuleBinding *IndexRuleBinding `protobuf:"bytes,1,opt,name=index_rule_binding,json=indexRuleBinding,proto3" json:"index_rule_binding,omitempty"`
+}
+
+func (x *IndexRuleBindingRegistryServiceUpdateRequest) Reset() {
+ *x = IndexRuleBindingRegistryServiceUpdateRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[12]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleBindingRegistryServiceUpdateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleBindingRegistryServiceUpdateRequest) ProtoMessage() {}
+
+func (x *IndexRuleBindingRegistryServiceUpdateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[12]
+ 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 IndexRuleBindingRegistryServiceUpdateRequest.ProtoReflect.Descriptor instead.
+func (*IndexRuleBindingRegistryServiceUpdateRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{12}
+}
+
+func (x *IndexRuleBindingRegistryServiceUpdateRequest) GetIndexRuleBinding() *IndexRuleBinding {
+ if x != nil {
+ return x.IndexRuleBinding
+ }
+ return nil
+}
+
+type IndexRuleBindingRegistryServiceUpdateResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *IndexRuleBindingRegistryServiceUpdateResponse) Reset() {
+ *x = IndexRuleBindingRegistryServiceUpdateResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[13]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleBindingRegistryServiceUpdateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleBindingRegistryServiceUpdateResponse) ProtoMessage() {}
+
+func (x *IndexRuleBindingRegistryServiceUpdateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[13]
+ 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 IndexRuleBindingRegistryServiceUpdateResponse.ProtoReflect.Descriptor instead.
+func (*IndexRuleBindingRegistryServiceUpdateResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{13}
+}
+
+type IndexRuleBindingRegistryServiceDeleteRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Metadata *v1.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *IndexRuleBindingRegistryServiceDeleteRequest) Reset() {
+ *x = IndexRuleBindingRegistryServiceDeleteRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[14]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleBindingRegistryServiceDeleteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleBindingRegistryServiceDeleteRequest) ProtoMessage() {}
+
+func (x *IndexRuleBindingRegistryServiceDeleteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[14]
+ 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 IndexRuleBindingRegistryServiceDeleteRequest.ProtoReflect.Descriptor instead.
+func (*IndexRuleBindingRegistryServiceDeleteRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{14}
+}
+
+func (x *IndexRuleBindingRegistryServiceDeleteRequest) GetMetadata() *v1.Metadata {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+type IndexRuleBindingRegistryServiceDeleteResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Deleted bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"`
+}
+
+func (x *IndexRuleBindingRegistryServiceDeleteResponse) Reset() {
+ *x = IndexRuleBindingRegistryServiceDeleteResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[15]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleBindingRegistryServiceDeleteResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleBindingRegistryServiceDeleteResponse) ProtoMessage() {}
+
+func (x *IndexRuleBindingRegistryServiceDeleteResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[15]
+ 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 IndexRuleBindingRegistryServiceDeleteResponse.ProtoReflect.Descriptor instead.
+func (*IndexRuleBindingRegistryServiceDeleteResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{15}
+}
+
+func (x *IndexRuleBindingRegistryServiceDeleteResponse) GetDeleted() bool {
+ if x != nil {
+ return x.Deleted
+ }
+ return false
+}
+
+type IndexRuleBindingRegistryServiceGetRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Metadata *v1.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *IndexRuleBindingRegistryServiceGetRequest) Reset() {
+ *x = IndexRuleBindingRegistryServiceGetRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[16]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleBindingRegistryServiceGetRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleBindingRegistryServiceGetRequest) ProtoMessage() {}
+
+func (x *IndexRuleBindingRegistryServiceGetRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[16]
+ 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 IndexRuleBindingRegistryServiceGetRequest.ProtoReflect.Descriptor instead.
+func (*IndexRuleBindingRegistryServiceGetRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{16}
+}
+
+func (x *IndexRuleBindingRegistryServiceGetRequest) GetMetadata() *v1.Metadata {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+type IndexRuleBindingRegistryServiceGetResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ IndexRuleBinding *IndexRuleBinding `protobuf:"bytes,1,opt,name=index_rule_binding,json=indexRuleBinding,proto3" json:"index_rule_binding,omitempty"`
+}
+
+func (x *IndexRuleBindingRegistryServiceGetResponse) Reset() {
+ *x = IndexRuleBindingRegistryServiceGetResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[17]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleBindingRegistryServiceGetResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleBindingRegistryServiceGetResponse) ProtoMessage() {}
+
+func (x *IndexRuleBindingRegistryServiceGetResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[17]
+ 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 IndexRuleBindingRegistryServiceGetResponse.ProtoReflect.Descriptor instead.
+func (*IndexRuleBindingRegistryServiceGetResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *IndexRuleBindingRegistryServiceGetResponse) GetIndexRuleBinding() *IndexRuleBinding {
+ if x != nil {
+ return x.IndexRuleBinding
+ }
+ return nil
+}
+
+type IndexRuleBindingRegistryServiceListRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
+}
+
+func (x *IndexRuleBindingRegistryServiceListRequest) Reset() {
+ *x = IndexRuleBindingRegistryServiceListRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[18]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleBindingRegistryServiceListRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleBindingRegistryServiceListRequest) ProtoMessage() {}
+
+func (x *IndexRuleBindingRegistryServiceListRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[18]
+ 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 IndexRuleBindingRegistryServiceListRequest.ProtoReflect.Descriptor instead.
+func (*IndexRuleBindingRegistryServiceListRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *IndexRuleBindingRegistryServiceListRequest) GetGroup() string {
+ if x != nil {
+ return x.Group
+ }
+ return ""
+}
+
+type IndexRuleBindingRegistryServiceListResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ IndexRuleBinding []*IndexRuleBinding `protobuf:"bytes,1,rep,name=index_rule_binding,json=indexRuleBinding,proto3" json:"index_rule_binding,omitempty"`
+}
+
+func (x *IndexRuleBindingRegistryServiceListResponse) Reset() {
+ *x = IndexRuleBindingRegistryServiceListResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[19]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleBindingRegistryServiceListResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleBindingRegistryServiceListResponse) ProtoMessage() {}
+
+func (x *IndexRuleBindingRegistryServiceListResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[19]
+ 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 IndexRuleBindingRegistryServiceListResponse.ProtoReflect.Descriptor instead.
+func (*IndexRuleBindingRegistryServiceListResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{19}
+}
+
+func (x *IndexRuleBindingRegistryServiceListResponse) GetIndexRuleBinding() []*IndexRuleBinding {
+ if x != nil {
+ return x.IndexRuleBinding
+ }
+ return nil
+}
+
+type IndexRuleRegistryServiceCreateRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ IndexRule *IndexRule `protobuf:"bytes,1,opt,name=index_rule,json=indexRule,proto3" json:"index_rule,omitempty"`
+}
+
+func (x *IndexRuleRegistryServiceCreateRequest) Reset() {
+ *x = IndexRuleRegistryServiceCreateRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[20]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleRegistryServiceCreateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleRegistryServiceCreateRequest) ProtoMessage() {}
+
+func (x *IndexRuleRegistryServiceCreateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[20]
+ 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 IndexRuleRegistryServiceCreateRequest.ProtoReflect.Descriptor instead.
+func (*IndexRuleRegistryServiceCreateRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *IndexRuleRegistryServiceCreateRequest) GetIndexRule() *IndexRule {
+ if x != nil {
+ return x.IndexRule
+ }
+ return nil
+}
+
+type IndexRuleRegistryServiceCreateResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *IndexRuleRegistryServiceCreateResponse) Reset() {
+ *x = IndexRuleRegistryServiceCreateResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[21]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleRegistryServiceCreateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleRegistryServiceCreateResponse) ProtoMessage() {}
+
+func (x *IndexRuleRegistryServiceCreateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[21]
+ 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 IndexRuleRegistryServiceCreateResponse.ProtoReflect.Descriptor instead.
+func (*IndexRuleRegistryServiceCreateResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{21}
+}
+
+type IndexRuleRegistryServiceUpdateRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ IndexRule *IndexRule `protobuf:"bytes,1,opt,name=index_rule,json=indexRule,proto3" json:"index_rule,omitempty"`
+}
+
+func (x *IndexRuleRegistryServiceUpdateRequest) Reset() {
+ *x = IndexRuleRegistryServiceUpdateRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[22]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleRegistryServiceUpdateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleRegistryServiceUpdateRequest) ProtoMessage() {}
+
+func (x *IndexRuleRegistryServiceUpdateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[22]
+ 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 IndexRuleRegistryServiceUpdateRequest.ProtoReflect.Descriptor instead.
+func (*IndexRuleRegistryServiceUpdateRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *IndexRuleRegistryServiceUpdateRequest) GetIndexRule() *IndexRule {
+ if x != nil {
+ return x.IndexRule
+ }
+ return nil
+}
+
+type IndexRuleRegistryServiceUpdateResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *IndexRuleRegistryServiceUpdateResponse) Reset() {
+ *x = IndexRuleRegistryServiceUpdateResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[23]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleRegistryServiceUpdateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleRegistryServiceUpdateResponse) ProtoMessage() {}
+
+func (x *IndexRuleRegistryServiceUpdateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[23]
+ 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 IndexRuleRegistryServiceUpdateResponse.ProtoReflect.Descriptor instead.
+func (*IndexRuleRegistryServiceUpdateResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{23}
+}
+
+type IndexRuleRegistryServiceDeleteRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Metadata *v1.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *IndexRuleRegistryServiceDeleteRequest) Reset() {
+ *x = IndexRuleRegistryServiceDeleteRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[24]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleRegistryServiceDeleteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleRegistryServiceDeleteRequest) ProtoMessage() {}
+
+func (x *IndexRuleRegistryServiceDeleteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[24]
+ 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 IndexRuleRegistryServiceDeleteRequest.ProtoReflect.Descriptor instead.
+func (*IndexRuleRegistryServiceDeleteRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{24}
+}
+
+func (x *IndexRuleRegistryServiceDeleteRequest) GetMetadata() *v1.Metadata {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+type IndexRuleRegistryServiceDeleteResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Deleted bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"`
+}
+
+func (x *IndexRuleRegistryServiceDeleteResponse) Reset() {
+ *x = IndexRuleRegistryServiceDeleteResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[25]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleRegistryServiceDeleteResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleRegistryServiceDeleteResponse) ProtoMessage() {}
+
+func (x *IndexRuleRegistryServiceDeleteResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[25]
+ 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 IndexRuleRegistryServiceDeleteResponse.ProtoReflect.Descriptor instead.
+func (*IndexRuleRegistryServiceDeleteResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{25}
+}
+
+func (x *IndexRuleRegistryServiceDeleteResponse) GetDeleted() bool {
+ if x != nil {
+ return x.Deleted
+ }
+ return false
+}
+
+type IndexRuleRegistryServiceGetRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Metadata *v1.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *IndexRuleRegistryServiceGetRequest) Reset() {
+ *x = IndexRuleRegistryServiceGetRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[26]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleRegistryServiceGetRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleRegistryServiceGetRequest) ProtoMessage() {}
+
+func (x *IndexRuleRegistryServiceGetRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[26]
+ 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 IndexRuleRegistryServiceGetRequest.ProtoReflect.Descriptor instead.
+func (*IndexRuleRegistryServiceGetRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{26}
+}
+
+func (x *IndexRuleRegistryServiceGetRequest) GetMetadata() *v1.Metadata {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+type IndexRuleRegistryServiceGetResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ IndexRule *IndexRule `protobuf:"bytes,1,opt,name=index_rule,json=indexRule,proto3" json:"index_rule,omitempty"`
+}
+
+func (x *IndexRuleRegistryServiceGetResponse) Reset() {
+ *x = IndexRuleRegistryServiceGetResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[27]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleRegistryServiceGetResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleRegistryServiceGetResponse) ProtoMessage() {}
+
+func (x *IndexRuleRegistryServiceGetResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[27]
+ 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 IndexRuleRegistryServiceGetResponse.ProtoReflect.Descriptor instead.
+func (*IndexRuleRegistryServiceGetResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{27}
+}
+
+func (x *IndexRuleRegistryServiceGetResponse) GetIndexRule() *IndexRule {
+ if x != nil {
+ return x.IndexRule
+ }
+ return nil
+}
+
+type IndexRuleRegistryServiceListRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
+}
+
+func (x *IndexRuleRegistryServiceListRequest) Reset() {
+ *x = IndexRuleRegistryServiceListRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[28]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleRegistryServiceListRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleRegistryServiceListRequest) ProtoMessage() {}
+
+func (x *IndexRuleRegistryServiceListRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[28]
+ 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 IndexRuleRegistryServiceListRequest.ProtoReflect.Descriptor instead.
+func (*IndexRuleRegistryServiceListRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{28}
+}
+
+func (x *IndexRuleRegistryServiceListRequest) GetGroup() string {
+ if x != nil {
+ return x.Group
+ }
+ return ""
+}
+
+type IndexRuleRegistryServiceListResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ IndexRule []*IndexRule `protobuf:"bytes,1,rep,name=index_rule,json=indexRule,proto3" json:"index_rule,omitempty"`
+}
+
+func (x *IndexRuleRegistryServiceListResponse) Reset() {
+ *x = IndexRuleRegistryServiceListResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[29]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *IndexRuleRegistryServiceListResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IndexRuleRegistryServiceListResponse) ProtoMessage() {}
+
+func (x *IndexRuleRegistryServiceListResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[29]
+ 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 IndexRuleRegistryServiceListResponse.ProtoReflect.Descriptor instead.
+func (*IndexRuleRegistryServiceListResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{29}
+}
+
+func (x *IndexRuleRegistryServiceListResponse) GetIndexRule() []*IndexRule {
+ if x != nil {
+ return x.IndexRule
+ }
+ return nil
+}
+
+type MeasureRegistryServiceCreateRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Measure *Measure `protobuf:"bytes,1,opt,name=measure,proto3" json:"measure,omitempty"`
+}
+
+func (x *MeasureRegistryServiceCreateRequest) Reset() {
+ *x = MeasureRegistryServiceCreateRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[30]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MeasureRegistryServiceCreateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MeasureRegistryServiceCreateRequest) ProtoMessage() {}
+
+func (x *MeasureRegistryServiceCreateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[30]
+ 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 MeasureRegistryServiceCreateRequest.ProtoReflect.Descriptor instead.
+func (*MeasureRegistryServiceCreateRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{30}
+}
+
+func (x *MeasureRegistryServiceCreateRequest) GetMeasure() *Measure {
+ if x != nil {
+ return x.Measure
+ }
+ return nil
+}
+
+type MeasureRegistryServiceCreateResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *MeasureRegistryServiceCreateResponse) Reset() {
+ *x = MeasureRegistryServiceCreateResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[31]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MeasureRegistryServiceCreateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MeasureRegistryServiceCreateResponse) ProtoMessage() {}
+
+func (x *MeasureRegistryServiceCreateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[31]
+ 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 MeasureRegistryServiceCreateResponse.ProtoReflect.Descriptor instead.
+func (*MeasureRegistryServiceCreateResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{31}
+}
+
+type MeasureRegistryServiceUpdateRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Measure *Measure `protobuf:"bytes,1,opt,name=measure,proto3" json:"measure,omitempty"`
+}
+
+func (x *MeasureRegistryServiceUpdateRequest) Reset() {
+ *x = MeasureRegistryServiceUpdateRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[32]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MeasureRegistryServiceUpdateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MeasureRegistryServiceUpdateRequest) ProtoMessage() {}
+
+func (x *MeasureRegistryServiceUpdateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[32]
+ 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 MeasureRegistryServiceUpdateRequest.ProtoReflect.Descriptor instead.
+func (*MeasureRegistryServiceUpdateRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{32}
+}
+
+func (x *MeasureRegistryServiceUpdateRequest) GetMeasure() *Measure {
+ if x != nil {
+ return x.Measure
+ }
+ return nil
+}
+
+type MeasureRegistryServiceUpdateResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *MeasureRegistryServiceUpdateResponse) Reset() {
+ *x = MeasureRegistryServiceUpdateResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[33]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MeasureRegistryServiceUpdateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MeasureRegistryServiceUpdateResponse) ProtoMessage() {}
+
+func (x *MeasureRegistryServiceUpdateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[33]
+ 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 MeasureRegistryServiceUpdateResponse.ProtoReflect.Descriptor instead.
+func (*MeasureRegistryServiceUpdateResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{33}
+}
+
+type MeasureRegistryServiceDeleteRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Metadata *v1.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *MeasureRegistryServiceDeleteRequest) Reset() {
+ *x = MeasureRegistryServiceDeleteRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[34]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MeasureRegistryServiceDeleteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MeasureRegistryServiceDeleteRequest) ProtoMessage() {}
+
+func (x *MeasureRegistryServiceDeleteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[34]
+ 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 MeasureRegistryServiceDeleteRequest.ProtoReflect.Descriptor instead.
+func (*MeasureRegistryServiceDeleteRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{34}
+}
+
+func (x *MeasureRegistryServiceDeleteRequest) GetMetadata() *v1.Metadata {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+type MeasureRegistryServiceDeleteResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Deleted bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"`
+}
+
+func (x *MeasureRegistryServiceDeleteResponse) Reset() {
+ *x = MeasureRegistryServiceDeleteResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[35]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MeasureRegistryServiceDeleteResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MeasureRegistryServiceDeleteResponse) ProtoMessage() {}
+
+func (x *MeasureRegistryServiceDeleteResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[35]
+ 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 MeasureRegistryServiceDeleteResponse.ProtoReflect.Descriptor instead.
+func (*MeasureRegistryServiceDeleteResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{35}
+}
+
+func (x *MeasureRegistryServiceDeleteResponse) GetDeleted() bool {
+ if x != nil {
+ return x.Deleted
+ }
+ return false
+}
+
+type MeasureRegistryServiceGetRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Metadata *v1.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
+}
+
+func (x *MeasureRegistryServiceGetRequest) Reset() {
+ *x = MeasureRegistryServiceGetRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[36]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MeasureRegistryServiceGetRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MeasureRegistryServiceGetRequest) ProtoMessage() {}
+
+func (x *MeasureRegistryServiceGetRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[36]
+ 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 MeasureRegistryServiceGetRequest.ProtoReflect.Descriptor instead.
+func (*MeasureRegistryServiceGetRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{36}
+}
+
+func (x *MeasureRegistryServiceGetRequest) GetMetadata() *v1.Metadata {
+ if x != nil {
+ return x.Metadata
+ }
+ return nil
+}
+
+type MeasureRegistryServiceGetResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Measure *Measure `protobuf:"bytes,1,opt,name=measure,proto3" json:"measure,omitempty"`
+}
+
+func (x *MeasureRegistryServiceGetResponse) Reset() {
+ *x = MeasureRegistryServiceGetResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[37]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MeasureRegistryServiceGetResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MeasureRegistryServiceGetResponse) ProtoMessage() {}
+
+func (x *MeasureRegistryServiceGetResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[37]
+ 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 MeasureRegistryServiceGetResponse.ProtoReflect.Descriptor instead.
+func (*MeasureRegistryServiceGetResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{37}
+}
+
+func (x *MeasureRegistryServiceGetResponse) GetMeasure() *Measure {
+ if x != nil {
+ return x.Measure
+ }
+ return nil
+}
+
+type MeasureRegistryServiceListRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
+}
+
+func (x *MeasureRegistryServiceListRequest) Reset() {
+ *x = MeasureRegistryServiceListRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[38]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MeasureRegistryServiceListRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MeasureRegistryServiceListRequest) ProtoMessage() {}
+
+func (x *MeasureRegistryServiceListRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[38]
+ 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 MeasureRegistryServiceListRequest.ProtoReflect.Descriptor instead.
+func (*MeasureRegistryServiceListRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{38}
+}
+
+func (x *MeasureRegistryServiceListRequest) GetGroup() string {
+ if x != nil {
+ return x.Group
+ }
+ return ""
+}
+
+type MeasureRegistryServiceListResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Measure []*Measure `protobuf:"bytes,1,rep,name=measure,proto3" json:"measure,omitempty"`
+}
+
+func (x *MeasureRegistryServiceListResponse) Reset() {
+ *x = MeasureRegistryServiceListResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[39]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *MeasureRegistryServiceListResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MeasureRegistryServiceListResponse) ProtoMessage() {}
+
+func (x *MeasureRegistryServiceListResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[39]
+ 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 MeasureRegistryServiceListResponse.ProtoReflect.Descriptor instead.
+func (*MeasureRegistryServiceListResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{39}
+}
+
+func (x *MeasureRegistryServiceListResponse) GetMeasure() []*Measure {
+ if x != nil {
+ return x.Measure
+ }
+ return nil
+}
+
+type GroupRegistryServiceCreateRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
+}
+
+func (x *GroupRegistryServiceCreateRequest) Reset() {
+ *x = GroupRegistryServiceCreateRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[40]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GroupRegistryServiceCreateRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupRegistryServiceCreateRequest) ProtoMessage() {}
+
+func (x *GroupRegistryServiceCreateRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[40]
+ 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 GroupRegistryServiceCreateRequest.ProtoReflect.Descriptor instead.
+func (*GroupRegistryServiceCreateRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{40}
+}
+
+func (x *GroupRegistryServiceCreateRequest) GetGroup() string {
+ if x != nil {
+ return x.Group
+ }
+ return ""
+}
+
+type GroupRegistryServiceCreateResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *GroupRegistryServiceCreateResponse) Reset() {
+ *x = GroupRegistryServiceCreateResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[41]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GroupRegistryServiceCreateResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupRegistryServiceCreateResponse) ProtoMessage() {}
+
+func (x *GroupRegistryServiceCreateResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[41]
+ 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 GroupRegistryServiceCreateResponse.ProtoReflect.Descriptor instead.
+func (*GroupRegistryServiceCreateResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{41}
+}
+
+type GroupRegistryServiceDeleteRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
+}
+
+func (x *GroupRegistryServiceDeleteRequest) Reset() {
+ *x = GroupRegistryServiceDeleteRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[42]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GroupRegistryServiceDeleteRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupRegistryServiceDeleteRequest) ProtoMessage() {}
+
+func (x *GroupRegistryServiceDeleteRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[42]
+ 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 GroupRegistryServiceDeleteRequest.ProtoReflect.Descriptor instead.
+func (*GroupRegistryServiceDeleteRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{42}
+}
+
+func (x *GroupRegistryServiceDeleteRequest) GetGroup() string {
+ if x != nil {
+ return x.Group
+ }
+ return ""
+}
+
+type GroupRegistryServiceDeleteResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Deleted bool `protobuf:"varint,1,opt,name=deleted,proto3" json:"deleted,omitempty"`
+}
+
+func (x *GroupRegistryServiceDeleteResponse) Reset() {
+ *x = GroupRegistryServiceDeleteResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[43]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GroupRegistryServiceDeleteResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupRegistryServiceDeleteResponse) ProtoMessage() {}
+
+func (x *GroupRegistryServiceDeleteResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[43]
+ 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 GroupRegistryServiceDeleteResponse.ProtoReflect.Descriptor instead.
+func (*GroupRegistryServiceDeleteResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{43}
+}
+
+func (x *GroupRegistryServiceDeleteResponse) GetDeleted() bool {
+ if x != nil {
+ return x.Deleted
+ }
+ return false
+}
+
+type GroupRegistryServiceExistRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
+}
+
+func (x *GroupRegistryServiceExistRequest) Reset() {
+ *x = GroupRegistryServiceExistRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[44]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GroupRegistryServiceExistRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupRegistryServiceExistRequest) ProtoMessage() {}
+
+func (x *GroupRegistryServiceExistRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[44]
+ 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 GroupRegistryServiceExistRequest.ProtoReflect.Descriptor instead.
+func (*GroupRegistryServiceExistRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{44}
+}
+
+func (x *GroupRegistryServiceExistRequest) GetGroup() string {
+ if x != nil {
+ return x.Group
+ }
+ return ""
+}
+
+type GroupRegistryServiceExistResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Group *v1.Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"`
+}
+
+func (x *GroupRegistryServiceExistResponse) Reset() {
+ *x = GroupRegistryServiceExistResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[45]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GroupRegistryServiceExistResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupRegistryServiceExistResponse) ProtoMessage() {}
+
+func (x *GroupRegistryServiceExistResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_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 GroupRegistryServiceExistResponse.ProtoReflect.Descriptor instead.
+func (*GroupRegistryServiceExistResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{45}
+}
+
+func (x *GroupRegistryServiceExistResponse) GetGroup() *v1.Group {
+ if x != nil {
+ return x.Group
+ }
+ return nil
+}
+
+type GroupRegistryServiceListRequest struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+}
+
+func (x *GroupRegistryServiceListRequest) Reset() {
+ *x = GroupRegistryServiceListRequest{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[46]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GroupRegistryServiceListRequest) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupRegistryServiceListRequest) ProtoMessage() {}
+
+func (x *GroupRegistryServiceListRequest) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[46]
+ 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 GroupRegistryServiceListRequest.ProtoReflect.Descriptor instead.
+func (*GroupRegistryServiceListRequest) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{46}
+}
+
+type GroupRegistryServiceListResponse struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Group []string `protobuf:"bytes,1,rep,name=group,proto3" json:"group,omitempty"`
+}
+
+func (x *GroupRegistryServiceListResponse) Reset() {
+ *x = GroupRegistryServiceListResponse{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[47]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *GroupRegistryServiceListResponse) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GroupRegistryServiceListResponse) ProtoMessage() {}
+
+func (x *GroupRegistryServiceListResponse) ProtoReflect() protoreflect.Message {
+ mi := &file_banyandb_database_v1_rpc_proto_msgTypes[47]
+ 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 GroupRegistryServiceListResponse.ProtoReflect.Descriptor instead.
+func (*GroupRegistryServiceListResponse) Descriptor() ([]byte, []int) {
+ return file_banyandb_database_v1_rpc_proto_rawDescGZIP(), []int{47}
+}
+
+func (x *GroupRegistryServiceListResponse) GetGroup() []string {
+ if x != nil {
+ return x.Group
+ }
+ return nil
+}
+
+var File_banyandb_database_v1_rpc_proto protoreflect.FileDescriptor
+
+var file_banyandb_database_v1_rpc_proto_rawDesc = []byte{
+ 0x0a, 0x1e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x62,
+ 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x70, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x12, 0x14, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
+ 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x21, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+ 0x2f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68,
+ 0x65, 0x6d, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x62, 0x61, 0x6e, 0x79, 0x61,
+ 0x6e, 0x64, 0x62, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f,
+ 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x5a, 0x0a, 0x22, 0x53, 0x74,
+ 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
+ 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x06,
+ 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x25, 0x0a, 0x23, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
+ 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x0a,
+ 0x22, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53,
+ 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64,
+ 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61,
+ 0x6d, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x25, 0x0a, 0x23, 0x53, 0x74, 0x72,
+ 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
+ 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x5e, 0x0a, 0x22, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+ 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
+ 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65,
+ 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x22, 0x3f, 0x0a, 0x23, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+ 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x64, 0x22, 0x5b, 0x0a, 0x1f, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73,
+ 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
+ 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61,
+ 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x58,
+ 0x0a, 0x20, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+ 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
+ 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
+ 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x38, 0x0a, 0x20, 0x53, 0x74, 0x72, 0x65,
+ 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05,
+ 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f,
+ 0x75, 0x70, 0x22, 0x59, 0x0a, 0x21, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69,
+ 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61,
+ 0x6d, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
+ 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53,
+ 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x84, 0x01,
+ 0x0a, 0x2c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69,
+ 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54,
+ 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e,
+ 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x61, 0x6e,
+ 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76,
+ 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69,
+ 0x6e, 0x67, 0x52, 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e,
+ 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2f, 0x0a, 0x2d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+ 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+ 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x2c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52,
+ 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+ 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f,
+ 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
+ 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52,
+ 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x69, 0x6e, 0x64, 0x65,
+ 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x2f, 0x0a, 0x2d,
+ 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67,
+ 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55,
+ 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x68, 0x0a,
+ 0x2c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e,
+ 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a,
+ 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+ 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x49, 0x0a, 0x2d, 0x49, 0x6e, 0x64, 0x65, 0x78,
+ 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73,
+ 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x64, 0x22, 0x65, 0x0a, 0x29, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42,
+ 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
+ 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52,
+ 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x82, 0x01, 0x0a, 0x2a, 0x49, 0x6e,
+ 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x65,
+ 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e,
+ 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65,
+ 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x69, 0x6e,
+ 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x42,
+ 0x0a, 0x2a, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69,
+ 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05,
+ 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f,
+ 0x75, 0x70, 0x22, 0x83, 0x01, 0x0a, 0x2b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65,
+ 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53,
+ 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x54, 0x0a, 0x12, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65,
+ 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26,
+ 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
+ 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42,
+ 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+ 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x67, 0x0a, 0x25, 0x49, 0x6e, 0x64, 0x65,
+ 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
+ 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x3e, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+ 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64,
+ 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+ 0x65, 0x22, 0x28, 0x0a, 0x26, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x67, 0x0a, 0x25, 0x49,
+ 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+ 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75,
+ 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
+ 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e,
+ 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78,
+ 0x52, 0x75, 0x6c, 0x65, 0x22, 0x28, 0x0a, 0x26, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+ 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61,
+ 0x0a, 0x25, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73,
+ 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
+ 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e, 0x79,
+ 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+ 0x61, 0x22, 0x42, 0x0a, 0x26, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x5e, 0x0a, 0x22, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75,
+ 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
+ 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
+ 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x65, 0x0a, 0x23, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75,
+ 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0a,
+ 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x1f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+ 0x65, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x3b, 0x0a, 0x23,
+ 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
+ 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x66, 0x0a, 0x24, 0x49, 0x6e, 0x64,
+ 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x3e, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+ 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64,
+ 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+ 0x65, 0x22, 0x5e, 0x0a, 0x23, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69,
+ 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x6d, 0x65, 0x61, 0x73,
+ 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x61, 0x6e, 0x79,
+ 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31,
+ 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72,
+ 0x65, 0x22, 0x26, 0x0a, 0x24, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69,
+ 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5e, 0x0a, 0x23, 0x4d, 0x65, 0x61,
+ 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
+ 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x37, 0x0a, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74,
+ 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65,
+ 0x52, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x22, 0x26, 0x0a, 0x24, 0x4d, 0x65, 0x61,
+ 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
+ 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x5f, 0x0a, 0x23, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69,
+ 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61,
+ 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e,
+ 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
+ 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x22, 0x40, 0x0a, 0x24, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67,
+ 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x64, 0x22, 0x5c, 0x0a, 0x20, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52,
+ 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65,
+ 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61,
+ 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x62, 0x61, 0x6e,
+ 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e,
+ 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x22, 0x5c, 0x0a, 0x21, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67,
+ 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75,
+ 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
+ 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e,
+ 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65,
+ 0x22, 0x39, 0x0a, 0x21, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73,
+ 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x5d, 0x0a, 0x22, 0x4d,
+ 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
+ 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72,
+ 0x65, 0x52, 0x07, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x22, 0x39, 0x0a, 0x21, 0x47, 0x72,
+ 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
+ 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
+ 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x24, 0x0a, 0x22, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x0a, 0x21, 0x47,
+ 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
+ 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x3e, 0x0a, 0x22, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52,
+ 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07,
+ 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x64,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x38, 0x0a, 0x20, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52,
+ 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78,
+ 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72,
+ 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70,
+ 0x22, 0x54, 0x0a, 0x21, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
+ 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52,
+ 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x21, 0x0a, 0x1f, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52,
+ 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69,
+ 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x38, 0x0a, 0x20, 0x47, 0x72, 0x6f,
+ 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a,
+ 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72,
+ 0x6f, 0x75, 0x70, 0x32, 0x83, 0x05, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7d, 0x0a,
+ 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
+ 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53,
+ 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
+ 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74,
+ 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52,
+ 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72,
+ 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x06,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
+ 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74,
+ 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
+ 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x06, 0x44,
+ 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+ 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72,
+ 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
+ 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
+ 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67,
+ 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x03, 0x47, 0x65,
+ 0x74, 0x12, 0x35, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74,
+ 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52,
+ 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65,
+ 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
+ 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e,
+ 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x77, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x36, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
+ 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e,
+ 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73,
+ 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xf6, 0x05, 0x0a, 0x1f, 0x49, 0x6e,
+ 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x91, 0x01,
+ 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x42, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
+ 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e,
+ 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67,
+ 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x62,
+ 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65,
+ 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e,
+ 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
+ 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x91, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x42, 0x2e, 0x62,
+ 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65,
+ 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e,
+ 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
+ 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x43, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+ 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+ 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x91, 0x01, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x12, 0x42, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+ 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+ 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e,
+ 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65,
+ 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69,
+ 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x88, 0x01, 0x0a, 0x03, 0x47, 0x65,
+ 0x74, 0x12, 0x3f, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74,
+ 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75,
+ 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
+ 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
+ 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52,
+ 0x75, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+ 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8b, 0x01, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, 0x2e,
+ 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
+ 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x42, 0x69,
+ 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72,
+ 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x41, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62,
+ 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65,
+ 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53,
+ 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x32, 0xa7, 0x05, 0x0a, 0x18, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65,
+ 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
+ 0x83, 0x01, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x2e, 0x62, 0x61, 0x6e,
+ 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76,
+ 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73,
+ 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e,
+ 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49,
+ 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+ 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x12, 0x3b, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+ 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e,
+ 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
+ 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x83, 0x01, 0x0a, 0x06,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x3b, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
+ 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e,
+ 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53,
+ 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64,
+ 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78,
+ 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76,
+ 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x7a, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
+ 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e,
+ 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
+ 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
+ 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52,
+ 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
+ 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a,
+ 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62,
+ 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64,
+ 0x65, 0x78, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x3a, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x75, 0x6c,
+ 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+ 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x8e, 0x05, 0x0a,
+ 0x16, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+ 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7f, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x12, 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74,
+ 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65,
+ 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x62,
+ 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65,
+ 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73,
+ 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x12, 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
+ 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72,
+ 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e,
+ 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
+ 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69,
+ 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x06, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x12, 0x39, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64,
+ 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75,
+ 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a,
+ 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
+ 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67,
+ 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65,
+ 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x03, 0x47, 0x65,
+ 0x74, 0x12, 0x36, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74,
+ 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65,
+ 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47,
+ 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79,
+ 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31,
+ 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+ 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x79, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x2e, 0x62, 0x61, 0x6e,
+ 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76,
+ 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
+ 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64,
+ 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x61, 0x73, 0x75,
+ 0x72, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
+ 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x81, 0x04,
+ 0x0a, 0x14, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53,
+ 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7b, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x12, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61,
+ 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67,
+ 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79,
+ 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31,
+ 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x7b, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x37, 0x2e,
+ 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
+ 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+ 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64,
+ 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72,
+ 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69,
+ 0x63, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x78, 0x0a, 0x05, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x36, 0x2e, 0x62, 0x61, 0x6e, 0x79,
+ 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31,
+ 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x37, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74,
+ 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x69,
+ 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x75, 0x0a, 0x04, 0x4c, 0x69,
+ 0x73, 0x74, 0x12, 0x35, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61,
+ 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52,
+ 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69,
+ 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x62, 0x61, 0x6e, 0x79,
+ 0x61, 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31,
+ 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x53, 0x65,
+ 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x42, 0x72, 0x0a, 0x2a, 0x6f, 0x72, 0x67, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e,
+ 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x62, 0x61, 0x6e, 0x79, 0x61,
+ 0x6e, 0x64, 0x62, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x5a,
+ 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63,
+ 0x68, 0x65, 0x2f, 0x73, 0x6b, 0x79, 0x77, 0x61, 0x6c, 0x6b, 0x69, 0x6e, 0x67, 0x2d, 0x62, 0x61,
+ 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x2f, 0x62, 0x61, 0x6e, 0x79, 0x61, 0x6e, 0x64, 0x62, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61,
+ 0x73, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+ file_banyandb_database_v1_rpc_proto_rawDescOnce sync.Once
+ file_banyandb_database_v1_rpc_proto_rawDescData = file_banyandb_database_v1_rpc_proto_rawDesc
+)
+
+func file_banyandb_database_v1_rpc_proto_rawDescGZIP() []byte {
+ file_banyandb_database_v1_rpc_proto_rawDescOnce.Do(func() {
+ file_banyandb_database_v1_rpc_proto_rawDescData = protoimpl.X.CompressGZIP(file_banyandb_database_v1_rpc_proto_rawDescData)
+ })
+ return file_banyandb_database_v1_rpc_proto_rawDescData
+}
+
+var file_banyandb_database_v1_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 48)
+var file_banyandb_database_v1_rpc_proto_goTypes = []interface{}{
+ (*StreamRegistryServiceCreateRequest)(nil), // 0: banyandb.database.v1.StreamRegistryServiceCreateRequest
+ (*StreamRegistryServiceCreateResponse)(nil), // 1: banyandb.database.v1.StreamRegistryServiceCreateResponse
+ (*StreamRegistryServiceUpdateRequest)(nil), // 2: banyandb.database.v1.StreamRegistryServiceUpdateRequest
+ (*StreamRegistryServiceUpdateResponse)(nil), // 3: banyandb.database.v1.StreamRegistryServiceUpdateResponse
+ (*StreamRegistryServiceDeleteRequest)(nil), // 4: banyandb.database.v1.StreamRegistryServiceDeleteRequest
+ (*StreamRegistryServiceDeleteResponse)(nil), // 5: banyandb.database.v1.StreamRegistryServiceDeleteResponse
+ (*StreamRegistryServiceGetRequest)(nil), // 6: banyandb.database.v1.StreamRegistryServiceGetRequest
+ (*StreamRegistryServiceGetResponse)(nil), // 7: banyandb.database.v1.StreamRegistryServiceGetResponse
+ (*StreamRegistryServiceListRequest)(nil), // 8: banyandb.database.v1.StreamRegistryServiceListRequest
+ (*StreamRegistryServiceListResponse)(nil), // 9: banyandb.database.v1.StreamRegistryServiceListResponse
+ (*IndexRuleBindingRegistryServiceCreateRequest)(nil), // 10: banyandb.database.v1.IndexRuleBindingRegistryServiceCreateRequest
+ (*IndexRuleBindingRegistryServiceCreateResponse)(nil), // 11: banyandb.database.v1.IndexRuleBindingRegistryServiceCreateResponse
+ (*IndexRuleBindingRegistryServiceUpdateRequest)(nil), // 12: banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateRequest
+ (*IndexRuleBindingRegistryServiceUpdateResponse)(nil), // 13: banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateResponse
+ (*IndexRuleBindingRegistryServiceDeleteRequest)(nil), // 14: banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteRequest
+ (*IndexRuleBindingRegistryServiceDeleteResponse)(nil), // 15: banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteResponse
+ (*IndexRuleBindingRegistryServiceGetRequest)(nil), // 16: banyandb.database.v1.IndexRuleBindingRegistryServiceGetRequest
+ (*IndexRuleBindingRegistryServiceGetResponse)(nil), // 17: banyandb.database.v1.IndexRuleBindingRegistryServiceGetResponse
+ (*IndexRuleBindingRegistryServiceListRequest)(nil), // 18: banyandb.database.v1.IndexRuleBindingRegistryServiceListRequest
+ (*IndexRuleBindingRegistryServiceListResponse)(nil), // 19: banyandb.database.v1.IndexRuleBindingRegistryServiceListResponse
+ (*IndexRuleRegistryServiceCreateRequest)(nil), // 20: banyandb.database.v1.IndexRuleRegistryServiceCreateRequest
+ (*IndexRuleRegistryServiceCreateResponse)(nil), // 21: banyandb.database.v1.IndexRuleRegistryServiceCreateResponse
+ (*IndexRuleRegistryServiceUpdateRequest)(nil), // 22: banyandb.database.v1.IndexRuleRegistryServiceUpdateRequest
+ (*IndexRuleRegistryServiceUpdateResponse)(nil), // 23: banyandb.database.v1.IndexRuleRegistryServiceUpdateResponse
+ (*IndexRuleRegistryServiceDeleteRequest)(nil), // 24: banyandb.database.v1.IndexRuleRegistryServiceDeleteRequest
+ (*IndexRuleRegistryServiceDeleteResponse)(nil), // 25: banyandb.database.v1.IndexRuleRegistryServiceDeleteResponse
+ (*IndexRuleRegistryServiceGetRequest)(nil), // 26: banyandb.database.v1.IndexRuleRegistryServiceGetRequest
+ (*IndexRuleRegistryServiceGetResponse)(nil), // 27: banyandb.database.v1.IndexRuleRegistryServiceGetResponse
+ (*IndexRuleRegistryServiceListRequest)(nil), // 28: banyandb.database.v1.IndexRuleRegistryServiceListRequest
+ (*IndexRuleRegistryServiceListResponse)(nil), // 29: banyandb.database.v1.IndexRuleRegistryServiceListResponse
+ (*MeasureRegistryServiceCreateRequest)(nil), // 30: banyandb.database.v1.MeasureRegistryServiceCreateRequest
+ (*MeasureRegistryServiceCreateResponse)(nil), // 31: banyandb.database.v1.MeasureRegistryServiceCreateResponse
+ (*MeasureRegistryServiceUpdateRequest)(nil), // 32: banyandb.database.v1.MeasureRegistryServiceUpdateRequest
+ (*MeasureRegistryServiceUpdateResponse)(nil), // 33: banyandb.database.v1.MeasureRegistryServiceUpdateResponse
+ (*MeasureRegistryServiceDeleteRequest)(nil), // 34: banyandb.database.v1.MeasureRegistryServiceDeleteRequest
+ (*MeasureRegistryServiceDeleteResponse)(nil), // 35: banyandb.database.v1.MeasureRegistryServiceDeleteResponse
+ (*MeasureRegistryServiceGetRequest)(nil), // 36: banyandb.database.v1.MeasureRegistryServiceGetRequest
+ (*MeasureRegistryServiceGetResponse)(nil), // 37: banyandb.database.v1.MeasureRegistryServiceGetResponse
+ (*MeasureRegistryServiceListRequest)(nil), // 38: banyandb.database.v1.MeasureRegistryServiceListRequest
+ (*MeasureRegistryServiceListResponse)(nil), // 39: banyandb.database.v1.MeasureRegistryServiceListResponse
+ (*GroupRegistryServiceCreateRequest)(nil), // 40: banyandb.database.v1.GroupRegistryServiceCreateRequest
+ (*GroupRegistryServiceCreateResponse)(nil), // 41: banyandb.database.v1.GroupRegistryServiceCreateResponse
+ (*GroupRegistryServiceDeleteRequest)(nil), // 42: banyandb.database.v1.GroupRegistryServiceDeleteRequest
+ (*GroupRegistryServiceDeleteResponse)(nil), // 43: banyandb.database.v1.GroupRegistryServiceDeleteResponse
+ (*GroupRegistryServiceExistRequest)(nil), // 44: banyandb.database.v1.GroupRegistryServiceExistRequest
+ (*GroupRegistryServiceExistResponse)(nil), // 45: banyandb.database.v1.GroupRegistryServiceExistResponse
+ (*GroupRegistryServiceListRequest)(nil), // 46: banyandb.database.v1.GroupRegistryServiceListRequest
+ (*GroupRegistryServiceListResponse)(nil), // 47: banyandb.database.v1.GroupRegistryServiceListResponse
+ (*Stream)(nil), // 48: banyandb.database.v1.Stream
+ (*v1.Metadata)(nil), // 49: banyandb.common.v1.Metadata
+ (*IndexRuleBinding)(nil), // 50: banyandb.database.v1.IndexRuleBinding
+ (*IndexRule)(nil), // 51: banyandb.database.v1.IndexRule
+ (*Measure)(nil), // 52: banyandb.database.v1.Measure
+ (*v1.Group)(nil), // 53: banyandb.common.v1.Group
+}
+var file_banyandb_database_v1_rpc_proto_depIdxs = []int32{
+ 48, // 0: banyandb.database.v1.StreamRegistryServiceCreateRequest.stream:type_name -> banyandb.database.v1.Stream
+ 48, // 1: banyandb.database.v1.StreamRegistryServiceUpdateRequest.stream:type_name -> banyandb.database.v1.Stream
+ 49, // 2: banyandb.database.v1.StreamRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
+ 49, // 3: banyandb.database.v1.StreamRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
+ 48, // 4: banyandb.database.v1.StreamRegistryServiceGetResponse.stream:type_name -> banyandb.database.v1.Stream
+ 48, // 5: banyandb.database.v1.StreamRegistryServiceListResponse.stream:type_name -> banyandb.database.v1.Stream
+ 50, // 6: banyandb.database.v1.IndexRuleBindingRegistryServiceCreateRequest.index_rule_binding:type_name -> banyandb.database.v1.IndexRuleBinding
+ 50, // 7: banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateRequest.index_rule_binding:type_name -> banyandb.database.v1.IndexRuleBinding
+ 49, // 8: banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
+ 49, // 9: banyandb.database.v1.IndexRuleBindingRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
+ 50, // 10: banyandb.database.v1.IndexRuleBindingRegistryServiceGetResponse.index_rule_binding:type_name -> banyandb.database.v1.IndexRuleBinding
+ 50, // 11: banyandb.database.v1.IndexRuleBindingRegistryServiceListResponse.index_rule_binding:type_name -> banyandb.database.v1.IndexRuleBinding
+ 51, // 12: banyandb.database.v1.IndexRuleRegistryServiceCreateRequest.index_rule:type_name -> banyandb.database.v1.IndexRule
+ 51, // 13: banyandb.database.v1.IndexRuleRegistryServiceUpdateRequest.index_rule:type_name -> banyandb.database.v1.IndexRule
+ 49, // 14: banyandb.database.v1.IndexRuleRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
+ 49, // 15: banyandb.database.v1.IndexRuleRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
+ 51, // 16: banyandb.database.v1.IndexRuleRegistryServiceGetResponse.index_rule:type_name -> banyandb.database.v1.IndexRule
+ 51, // 17: banyandb.database.v1.IndexRuleRegistryServiceListResponse.index_rule:type_name -> banyandb.database.v1.IndexRule
+ 52, // 18: banyandb.database.v1.MeasureRegistryServiceCreateRequest.measure:type_name -> banyandb.database.v1.Measure
+ 52, // 19: banyandb.database.v1.MeasureRegistryServiceUpdateRequest.measure:type_name -> banyandb.database.v1.Measure
+ 49, // 20: banyandb.database.v1.MeasureRegistryServiceDeleteRequest.metadata:type_name -> banyandb.common.v1.Metadata
+ 49, // 21: banyandb.database.v1.MeasureRegistryServiceGetRequest.metadata:type_name -> banyandb.common.v1.Metadata
+ 52, // 22: banyandb.database.v1.MeasureRegistryServiceGetResponse.measure:type_name -> banyandb.database.v1.Measure
+ 52, // 23: banyandb.database.v1.MeasureRegistryServiceListResponse.measure:type_name -> banyandb.database.v1.Measure
+ 53, // 24: banyandb.database.v1.GroupRegistryServiceExistResponse.group:type_name -> banyandb.common.v1.Group
+ 0, // 25: banyandb.database.v1.StreamRegistryService.Create:input_type -> banyandb.database.v1.StreamRegistryServiceCreateRequest
+ 2, // 26: banyandb.database.v1.StreamRegistryService.Update:input_type -> banyandb.database.v1.StreamRegistryServiceUpdateRequest
+ 4, // 27: banyandb.database.v1.StreamRegistryService.Delete:input_type -> banyandb.database.v1.StreamRegistryServiceDeleteRequest
+ 6, // 28: banyandb.database.v1.StreamRegistryService.Get:input_type -> banyandb.database.v1.StreamRegistryServiceGetRequest
+ 8, // 29: banyandb.database.v1.StreamRegistryService.List:input_type -> banyandb.database.v1.StreamRegistryServiceListRequest
+ 10, // 30: banyandb.database.v1.IndexRuleBindingRegistryService.Create:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceCreateRequest
+ 12, // 31: banyandb.database.v1.IndexRuleBindingRegistryService.Update:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateRequest
+ 14, // 32: banyandb.database.v1.IndexRuleBindingRegistryService.Delete:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteRequest
+ 16, // 33: banyandb.database.v1.IndexRuleBindingRegistryService.Get:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceGetRequest
+ 18, // 34: banyandb.database.v1.IndexRuleBindingRegistryService.List:input_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceListRequest
+ 20, // 35: banyandb.database.v1.IndexRuleRegistryService.Create:input_type -> banyandb.database.v1.IndexRuleRegistryServiceCreateRequest
+ 22, // 36: banyandb.database.v1.IndexRuleRegistryService.Update:input_type -> banyandb.database.v1.IndexRuleRegistryServiceUpdateRequest
+ 24, // 37: banyandb.database.v1.IndexRuleRegistryService.Delete:input_type -> banyandb.database.v1.IndexRuleRegistryServiceDeleteRequest
+ 26, // 38: banyandb.database.v1.IndexRuleRegistryService.Get:input_type -> banyandb.database.v1.IndexRuleRegistryServiceGetRequest
+ 28, // 39: banyandb.database.v1.IndexRuleRegistryService.List:input_type -> banyandb.database.v1.IndexRuleRegistryServiceListRequest
+ 30, // 40: banyandb.database.v1.MeasureRegistryService.Create:input_type -> banyandb.database.v1.MeasureRegistryServiceCreateRequest
+ 32, // 41: banyandb.database.v1.MeasureRegistryService.Update:input_type -> banyandb.database.v1.MeasureRegistryServiceUpdateRequest
+ 34, // 42: banyandb.database.v1.MeasureRegistryService.Delete:input_type -> banyandb.database.v1.MeasureRegistryServiceDeleteRequest
+ 36, // 43: banyandb.database.v1.MeasureRegistryService.Get:input_type -> banyandb.database.v1.MeasureRegistryServiceGetRequest
+ 38, // 44: banyandb.database.v1.MeasureRegistryService.List:input_type -> banyandb.database.v1.MeasureRegistryServiceListRequest
+ 40, // 45: banyandb.database.v1.GroupRegistryService.Create:input_type -> banyandb.database.v1.GroupRegistryServiceCreateRequest
+ 42, // 46: banyandb.database.v1.GroupRegistryService.Delete:input_type -> banyandb.database.v1.GroupRegistryServiceDeleteRequest
+ 44, // 47: banyandb.database.v1.GroupRegistryService.Exist:input_type -> banyandb.database.v1.GroupRegistryServiceExistRequest
+ 46, // 48: banyandb.database.v1.GroupRegistryService.List:input_type -> banyandb.database.v1.GroupRegistryServiceListRequest
+ 1, // 49: banyandb.database.v1.StreamRegistryService.Create:output_type -> banyandb.database.v1.StreamRegistryServiceCreateResponse
+ 3, // 50: banyandb.database.v1.StreamRegistryService.Update:output_type -> banyandb.database.v1.StreamRegistryServiceUpdateResponse
+ 5, // 51: banyandb.database.v1.StreamRegistryService.Delete:output_type -> banyandb.database.v1.StreamRegistryServiceDeleteResponse
+ 7, // 52: banyandb.database.v1.StreamRegistryService.Get:output_type -> banyandb.database.v1.StreamRegistryServiceGetResponse
+ 9, // 53: banyandb.database.v1.StreamRegistryService.List:output_type -> banyandb.database.v1.StreamRegistryServiceListResponse
+ 11, // 54: banyandb.database.v1.IndexRuleBindingRegistryService.Create:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceCreateResponse
+ 13, // 55: banyandb.database.v1.IndexRuleBindingRegistryService.Update:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceUpdateResponse
+ 15, // 56: banyandb.database.v1.IndexRuleBindingRegistryService.Delete:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceDeleteResponse
+ 17, // 57: banyandb.database.v1.IndexRuleBindingRegistryService.Get:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceGetResponse
+ 19, // 58: banyandb.database.v1.IndexRuleBindingRegistryService.List:output_type -> banyandb.database.v1.IndexRuleBindingRegistryServiceListResponse
+ 21, // 59: banyandb.database.v1.IndexRuleRegistryService.Create:output_type -> banyandb.database.v1.IndexRuleRegistryServiceCreateResponse
+ 23, // 60: banyandb.database.v1.IndexRuleRegistryService.Update:output_type -> banyandb.database.v1.IndexRuleRegistryServiceUpdateResponse
+ 25, // 61: banyandb.database.v1.IndexRuleRegistryService.Delete:output_type -> banyandb.database.v1.IndexRuleRegistryServiceDeleteResponse
+ 27, // 62: banyandb.database.v1.IndexRuleRegistryService.Get:output_type -> banyandb.database.v1.IndexRuleRegistryServiceGetResponse
+ 29, // 63: banyandb.database.v1.IndexRuleRegistryService.List:output_type -> banyandb.database.v1.IndexRuleRegistryServiceListResponse
+ 31, // 64: banyandb.database.v1.MeasureRegistryService.Create:output_type -> banyandb.database.v1.MeasureRegistryServiceCreateResponse
+ 33, // 65: banyandb.database.v1.MeasureRegistryService.Update:output_type -> banyandb.database.v1.MeasureRegistryServiceUpdateResponse
+ 35, // 66: banyandb.database.v1.MeasureRegistryService.Delete:output_type -> banyandb.database.v1.MeasureRegistryServiceDeleteResponse
+ 37, // 67: banyandb.database.v1.MeasureRegistryService.Get:output_type -> banyandb.database.v1.MeasureRegistryServiceGetResponse
+ 39, // 68: banyandb.database.v1.MeasureRegistryService.List:output_type -> banyandb.database.v1.MeasureRegistryServiceListResponse
+ 41, // 69: banyandb.database.v1.GroupRegistryService.Create:output_type -> banyandb.database.v1.GroupRegistryServiceCreateResponse
+ 43, // 70: banyandb.database.v1.GroupRegistryService.Delete:output_type -> banyandb.database.v1.GroupRegistryServiceDeleteResponse
+ 45, // 71: banyandb.database.v1.GroupRegistryService.Exist:output_type -> banyandb.database.v1.GroupRegistryServiceExistResponse
+ 47, // 72: banyandb.database.v1.GroupRegistryService.List:output_type -> banyandb.database.v1.GroupRegistryServiceListResponse
+ 49, // [49:73] is the sub-list for method output_type
+ 25, // [25:49] is the sub-list for method input_type
+ 25, // [25:25] is the sub-list for extension type_name
+ 25, // [25:25] is the sub-list for extension extendee
+ 0, // [0:25] is the sub-list for field type_name
+}
+
+func init() { file_banyandb_database_v1_rpc_proto_init() }
+func file_banyandb_database_v1_rpc_proto_init() {
+ if File_banyandb_database_v1_rpc_proto != nil {
+ return
+ }
+ file_banyandb_database_v1_schema_proto_init()
+ if !protoimpl.UnsafeEnabled {
+ file_banyandb_database_v1_rpc_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*StreamRegistryServiceCreateRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*StreamRegistryServiceCreateResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*StreamRegistryServiceUpdateRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*StreamRegistryServiceUpdateResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*StreamRegistryServiceDeleteRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*StreamRegistryServiceDeleteResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*StreamRegistryServiceGetRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*StreamRegistryServiceGetResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*StreamRegistryServiceListRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*StreamRegistryServiceListResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleBindingRegistryServiceCreateRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleBindingRegistryServiceCreateResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleBindingRegistryServiceUpdateRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleBindingRegistryServiceUpdateResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleBindingRegistryServiceDeleteRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleBindingRegistryServiceDeleteResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleBindingRegistryServiceGetRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleBindingRegistryServiceGetResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleBindingRegistryServiceListRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleBindingRegistryServiceListResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleRegistryServiceCreateRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleRegistryServiceCreateResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleRegistryServiceUpdateRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleRegistryServiceUpdateResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleRegistryServiceDeleteRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleRegistryServiceDeleteResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleRegistryServiceGetRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleRegistryServiceGetResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleRegistryServiceListRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*IndexRuleRegistryServiceListResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MeasureRegistryServiceCreateRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MeasureRegistryServiceCreateResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MeasureRegistryServiceUpdateRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MeasureRegistryServiceUpdateResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MeasureRegistryServiceDeleteRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MeasureRegistryServiceDeleteResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MeasureRegistryServiceGetRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MeasureRegistryServiceGetResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MeasureRegistryServiceListRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*MeasureRegistryServiceListResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GroupRegistryServiceCreateRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GroupRegistryServiceCreateResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GroupRegistryServiceDeleteRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GroupRegistryServiceDeleteResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GroupRegistryServiceExistRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GroupRegistryServiceExistResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GroupRegistryServiceListRequest); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_banyandb_database_v1_rpc_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*GroupRegistryServiceListResponse); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ }
+ type x struct{}
+ out := protoimpl.TypeBuilder{
+ File: protoimpl.DescBuilder{
+ GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+ RawDescriptor: file_banyandb_database_v1_rpc_proto_rawDesc,
+ NumEnums: 0,
+ NumMessages: 48,
+ NumExtensions: 0,
+ NumServices: 5,
+ },
+ GoTypes: file_banyandb_database_v1_rpc_proto_goTypes,
+ DependencyIndexes: file_banyandb_database_v1_rpc_proto_depIdxs,
+ MessageInfos: file_banyandb_database_v1_rpc_proto_msgTypes,
+ }.Build()
+ File_banyandb_database_v1_rpc_proto = out.File
+ file_banyandb_database_v1_rpc_proto_rawDesc = nil
+ file_banyandb_database_v1_rpc_proto_goTypes = nil
+ file_banyandb_database_v1_rpc_proto_depIdxs = nil
+}
diff --git a/api/proto/banyandb/database/v1/rpc.proto b/api/proto/banyandb/database/v1/rpc.proto
new file mode 100644
index 0000000..3bee1d6
--- /dev/null
+++ b/api/proto/banyandb/database/v1/rpc.proto
@@ -0,0 +1,248 @@
+// Licensed to Apache Software Foundation (ASF) under one or more contributor
+// license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright
+// ownership. Apache Software Foundation (ASF) licenses this file to you under
+// the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+syntax = "proto3";
+
+option java_package = "org.apache.skywalking.banyandb.database.v1";
+option go_package = "github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1";
+
+package banyandb.database.v1;
+
+import "banyandb/database/v1/schema.proto";
+import "banyandb/common/v1/common.proto";
+
+message StreamRegistryServiceCreateRequest {
+ banyandb.database.v1.Stream stream = 1;
+}
+
+message StreamRegistryServiceCreateResponse {
+}
+
+message StreamRegistryServiceUpdateRequest {
+ banyandb.database.v1.Stream stream = 1;
+}
+
+message StreamRegistryServiceUpdateResponse {
+}
+
+message StreamRegistryServiceDeleteRequest {
+ banyandb.common.v1.Metadata metadata = 1;
+}
+
+message StreamRegistryServiceDeleteResponse {
+ bool deleted = 1;
+}
+
+message StreamRegistryServiceGetRequest {
+ banyandb.common.v1.Metadata metadata = 1;
+}
+
+message StreamRegistryServiceGetResponse {
+ banyandb.database.v1.Stream stream = 1;
+}
+
+message StreamRegistryServiceListRequest {
+ string group = 1;
+}
+
+message StreamRegistryServiceListResponse {
+ repeated banyandb.database.v1.Stream stream = 1;
+}
+
+service StreamRegistryService {
+ rpc Create(StreamRegistryServiceCreateRequest) returns (StreamRegistryServiceCreateResponse);
+ rpc Update(StreamRegistryServiceUpdateRequest) returns (StreamRegistryServiceUpdateResponse);
+ rpc Delete(StreamRegistryServiceDeleteRequest) returns (StreamRegistryServiceDeleteResponse);
+ rpc Get(StreamRegistryServiceGetRequest) returns (StreamRegistryServiceGetResponse);
+ rpc List(StreamRegistryServiceListRequest) returns (StreamRegistryServiceListResponse);
+}
+
+message IndexRuleBindingRegistryServiceCreateRequest {
+ banyandb.database.v1.IndexRuleBinding index_rule_binding = 1;
+}
+
+message IndexRuleBindingRegistryServiceCreateResponse {
+}
+
+message IndexRuleBindingRegistryServiceUpdateRequest {
+ banyandb.database.v1.IndexRuleBinding index_rule_binding = 1;
+}
+
+message IndexRuleBindingRegistryServiceUpdateResponse {
+}
+
+message IndexRuleBindingRegistryServiceDeleteRequest {
+ banyandb.common.v1.Metadata metadata = 1;
+}
+
+message IndexRuleBindingRegistryServiceDeleteResponse {
+ bool deleted = 1;
+}
+
+message IndexRuleBindingRegistryServiceGetRequest {
+ banyandb.common.v1.Metadata metadata = 1;
+}
+
+message IndexRuleBindingRegistryServiceGetResponse {
+ banyandb.database.v1.IndexRuleBinding index_rule_binding = 1;
+}
+
+message IndexRuleBindingRegistryServiceListRequest {
+ string group = 1;
+}
+
+message IndexRuleBindingRegistryServiceListResponse {
+ repeated banyandb.database.v1.IndexRuleBinding index_rule_binding = 1;
+}
+
+service IndexRuleBindingRegistryService {
+ rpc Create(IndexRuleBindingRegistryServiceCreateRequest) returns (IndexRuleBindingRegistryServiceCreateResponse);
+ rpc Update(IndexRuleBindingRegistryServiceUpdateRequest) returns (IndexRuleBindingRegistryServiceUpdateResponse);
+ rpc Delete(IndexRuleBindingRegistryServiceDeleteRequest) returns (IndexRuleBindingRegistryServiceDeleteResponse);
+ rpc Get(IndexRuleBindingRegistryServiceGetRequest) returns (IndexRuleBindingRegistryServiceGetResponse);
+ rpc List(IndexRuleBindingRegistryServiceListRequest) returns (IndexRuleBindingRegistryServiceListResponse);
+}
+
+message IndexRuleRegistryServiceCreateRequest {
+ banyandb.database.v1.IndexRule index_rule = 1;
+}
+
+message IndexRuleRegistryServiceCreateResponse {
+}
+
+message IndexRuleRegistryServiceUpdateRequest {
+ banyandb.database.v1.IndexRule index_rule = 1;
+}
+
+message IndexRuleRegistryServiceUpdateResponse {
+}
+
+message IndexRuleRegistryServiceDeleteRequest {
+ banyandb.common.v1.Metadata metadata = 1;
+}
+
+message IndexRuleRegistryServiceDeleteResponse {
+ bool deleted = 1;
+}
+
+message IndexRuleRegistryServiceGetRequest {
+ banyandb.common.v1.Metadata metadata = 1;
+}
+
+message IndexRuleRegistryServiceGetResponse {
+ banyandb.database.v1.IndexRule index_rule = 1;
+}
+
+message IndexRuleRegistryServiceListRequest {
+ string group = 1;
+}
+
+message IndexRuleRegistryServiceListResponse {
+ repeated banyandb.database.v1.IndexRule index_rule = 1;
+}
+
+service IndexRuleRegistryService {
+ rpc Create(IndexRuleRegistryServiceCreateRequest) returns (IndexRuleRegistryServiceCreateResponse);
+ rpc Update(IndexRuleRegistryServiceUpdateRequest) returns (IndexRuleRegistryServiceUpdateResponse);
+ rpc Delete(IndexRuleRegistryServiceDeleteRequest) returns (IndexRuleRegistryServiceDeleteResponse);
+ rpc Get(IndexRuleRegistryServiceGetRequest) returns (IndexRuleRegistryServiceGetResponse);
+ rpc List(IndexRuleRegistryServiceListRequest) returns (IndexRuleRegistryServiceListResponse);
+}
+
+message MeasureRegistryServiceCreateRequest {
+ banyandb.database.v1.Measure measure = 1;
+}
+
+message MeasureRegistryServiceCreateResponse {
+}
+
+message MeasureRegistryServiceUpdateRequest {
+ banyandb.database.v1.Measure measure = 1;
+}
+
+message MeasureRegistryServiceUpdateResponse {
+}
+
+message MeasureRegistryServiceDeleteRequest {
+ banyandb.common.v1.Metadata metadata = 1;
+}
+
+message MeasureRegistryServiceDeleteResponse {
+ bool deleted = 1;
+}
+
+message MeasureRegistryServiceGetRequest {
+ banyandb.common.v1.Metadata metadata = 1;
+}
+
+message MeasureRegistryServiceGetResponse {
+ banyandb.database.v1.Measure measure = 1;
+}
+
+message MeasureRegistryServiceListRequest {
+ string group = 1;
+}
+
+message MeasureRegistryServiceListResponse {
+ repeated banyandb.database.v1.Measure measure = 1;
+}
+
+service MeasureRegistryService {
+ rpc Create(MeasureRegistryServiceCreateRequest) returns (MeasureRegistryServiceCreateResponse);
+ rpc Update(MeasureRegistryServiceUpdateRequest) returns (MeasureRegistryServiceUpdateResponse);
+ rpc Delete(MeasureRegistryServiceDeleteRequest) returns (MeasureRegistryServiceDeleteResponse);
+ rpc Get(MeasureRegistryServiceGetRequest) returns (MeasureRegistryServiceGetResponse);
+ rpc List(MeasureRegistryServiceListRequest) returns (MeasureRegistryServiceListResponse);
+}
+
+message GroupRegistryServiceCreateRequest {
+ string group = 1;
+}
+
+message GroupRegistryServiceCreateResponse {
+
+}
+
+message GroupRegistryServiceDeleteRequest {
+ string group = 1;
+}
+
+message GroupRegistryServiceDeleteResponse {
+ bool deleted = 1;
+}
+
+message GroupRegistryServiceExistRequest {
+ string group = 1;
+}
+
+message GroupRegistryServiceExistResponse {
+ banyandb.common.v1.Group group = 1;
+}
+
+message GroupRegistryServiceListRequest {
+}
+
+message GroupRegistryServiceListResponse {
+ repeated string group = 1;
+}
+
+service GroupRegistryService {
+ rpc Create(GroupRegistryServiceCreateRequest) returns (GroupRegistryServiceCreateResponse);
+ rpc Delete(GroupRegistryServiceDeleteRequest) returns (GroupRegistryServiceDeleteResponse);
+ rpc Exist(GroupRegistryServiceExistRequest) returns (GroupRegistryServiceExistResponse);
+ rpc List(GroupRegistryServiceListRequest) returns (GroupRegistryServiceListResponse);
+}
\ No newline at end of file
diff --git a/api/proto/banyandb/database/v1/rpc_grpc.pb.go b/api/proto/banyandb/database/v1/rpc_grpc.pb.go
new file mode 100644
index 0000000..f3bf229
--- /dev/null
+++ b/api/proto/banyandb/database/v1/rpc_grpc.pb.go
@@ -0,0 +1,1133 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+
+package v1
+
+import (
+ context "context"
+
+ grpc "google.golang.org/grpc"
+ codes "google.golang.org/grpc/codes"
+ status "google.golang.org/grpc/status"
+)
+
+// 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
+
+// StreamRegistryServiceClient is the client API for StreamRegistryService 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 StreamRegistryServiceClient interface {
+ Create(ctx context.Context, in *StreamRegistryServiceCreateRequest, opts ...grpc.CallOption) (*StreamRegistryServiceCreateResponse, error)
+ Update(ctx context.Context, in *StreamRegistryServiceUpdateRequest, opts ...grpc.CallOption) (*StreamRegistryServiceUpdateResponse, error)
+ Delete(ctx context.Context, in *StreamRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*StreamRegistryServiceDeleteResponse, error)
+ Get(ctx context.Context, in *StreamRegistryServiceGetRequest, opts ...grpc.CallOption) (*StreamRegistryServiceGetResponse, error)
+ List(ctx context.Context, in *StreamRegistryServiceListRequest, opts ...grpc.CallOption) (*StreamRegistryServiceListResponse, error)
+}
+
+type streamRegistryServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewStreamRegistryServiceClient(cc grpc.ClientConnInterface) StreamRegistryServiceClient {
+ return &streamRegistryServiceClient{cc}
+}
+
+func (c *streamRegistryServiceClient) Create(ctx context.Context, in *StreamRegistryServiceCreateRequest, opts ...grpc.CallOption) (*StreamRegistryServiceCreateResponse, error) {
+ out := new(StreamRegistryServiceCreateResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.StreamRegistryService/Create", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *streamRegistryServiceClient) Update(ctx context.Context, in *StreamRegistryServiceUpdateRequest, opts ...grpc.CallOption) (*StreamRegistryServiceUpdateResponse, error) {
+ out := new(StreamRegistryServiceUpdateResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.StreamRegistryService/Update", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *streamRegistryServiceClient) Delete(ctx context.Context, in *StreamRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*StreamRegistryServiceDeleteResponse, error) {
+ out := new(StreamRegistryServiceDeleteResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.StreamRegistryService/Delete", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *streamRegistryServiceClient) Get(ctx context.Context, in *StreamRegistryServiceGetRequest, opts ...grpc.CallOption) (*StreamRegistryServiceGetResponse, error) {
+ out := new(StreamRegistryServiceGetResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.StreamRegistryService/Get", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *streamRegistryServiceClient) List(ctx context.Context, in *StreamRegistryServiceListRequest, opts ...grpc.CallOption) (*StreamRegistryServiceListResponse, error) {
+ out := new(StreamRegistryServiceListResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.StreamRegistryService/List", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// StreamRegistryServiceServer is the server API for StreamRegistryService service.
+// All implementations must embed UnimplementedStreamRegistryServiceServer
+// for forward compatibility
+type StreamRegistryServiceServer interface {
+ Create(context.Context, *StreamRegistryServiceCreateRequest) (*StreamRegistryServiceCreateResponse, error)
+ Update(context.Context, *StreamRegistryServiceUpdateRequest) (*StreamRegistryServiceUpdateResponse, error)
+ Delete(context.Context, *StreamRegistryServiceDeleteRequest) (*StreamRegistryServiceDeleteResponse, error)
+ Get(context.Context, *StreamRegistryServiceGetRequest) (*StreamRegistryServiceGetResponse, error)
+ List(context.Context, *StreamRegistryServiceListRequest) (*StreamRegistryServiceListResponse, error)
+ mustEmbedUnimplementedStreamRegistryServiceServer()
+}
+
+// UnimplementedStreamRegistryServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedStreamRegistryServiceServer struct {
+}
+
+func (UnimplementedStreamRegistryServiceServer) Create(context.Context, *StreamRegistryServiceCreateRequest) (*StreamRegistryServiceCreateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Create not implemented")
+}
+func (UnimplementedStreamRegistryServiceServer) Update(context.Context, *StreamRegistryServiceUpdateRequest) (*StreamRegistryServiceUpdateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Update not implemented")
+}
+func (UnimplementedStreamRegistryServiceServer) Delete(context.Context, *StreamRegistryServiceDeleteRequest) (*StreamRegistryServiceDeleteResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented")
+}
+func (UnimplementedStreamRegistryServiceServer) Get(context.Context, *StreamRegistryServiceGetRequest) (*StreamRegistryServiceGetResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Get not implemented")
+}
+func (UnimplementedStreamRegistryServiceServer) List(context.Context, *StreamRegistryServiceListRequest) (*StreamRegistryServiceListResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
+}
+func (UnimplementedStreamRegistryServiceServer) mustEmbedUnimplementedStreamRegistryServiceServer() {}
+
+// UnsafeStreamRegistryServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to StreamRegistryServiceServer will
+// result in compilation errors.
+type UnsafeStreamRegistryServiceServer interface {
+ mustEmbedUnimplementedStreamRegistryServiceServer()
+}
+
+func RegisterStreamRegistryServiceServer(s grpc.ServiceRegistrar, srv StreamRegistryServiceServer) {
+ s.RegisterService(&StreamRegistryService_ServiceDesc, srv)
+}
+
+func _StreamRegistryService_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(StreamRegistryServiceCreateRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(StreamRegistryServiceServer).Create(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.StreamRegistryService/Create",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(StreamRegistryServiceServer).Create(ctx, req.(*StreamRegistryServiceCreateRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _StreamRegistryService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(StreamRegistryServiceUpdateRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(StreamRegistryServiceServer).Update(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.StreamRegistryService/Update",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(StreamRegistryServiceServer).Update(ctx, req.(*StreamRegistryServiceUpdateRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _StreamRegistryService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(StreamRegistryServiceDeleteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(StreamRegistryServiceServer).Delete(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.StreamRegistryService/Delete",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(StreamRegistryServiceServer).Delete(ctx, req.(*StreamRegistryServiceDeleteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _StreamRegistryService_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(StreamRegistryServiceGetRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(StreamRegistryServiceServer).Get(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.StreamRegistryService/Get",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(StreamRegistryServiceServer).Get(ctx, req.(*StreamRegistryServiceGetRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _StreamRegistryService_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(StreamRegistryServiceListRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(StreamRegistryServiceServer).List(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.StreamRegistryService/List",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(StreamRegistryServiceServer).List(ctx, req.(*StreamRegistryServiceListRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// StreamRegistryService_ServiceDesc is the grpc.ServiceDesc for StreamRegistryService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var StreamRegistryService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "banyandb.database.v1.StreamRegistryService",
+ HandlerType: (*StreamRegistryServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Create",
+ Handler: _StreamRegistryService_Create_Handler,
+ },
+ {
+ MethodName: "Update",
+ Handler: _StreamRegistryService_Update_Handler,
+ },
+ {
+ MethodName: "Delete",
+ Handler: _StreamRegistryService_Delete_Handler,
+ },
+ {
+ MethodName: "Get",
+ Handler: _StreamRegistryService_Get_Handler,
+ },
+ {
+ MethodName: "List",
+ Handler: _StreamRegistryService_List_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "banyandb/database/v1/rpc.proto",
+}
+
+// IndexRuleBindingRegistryServiceClient is the client API for IndexRuleBindingRegistryService 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 IndexRuleBindingRegistryServiceClient interface {
+ Create(ctx context.Context, in *IndexRuleBindingRegistryServiceCreateRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceCreateResponse, error)
+ Update(ctx context.Context, in *IndexRuleBindingRegistryServiceUpdateRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceUpdateResponse, error)
+ Delete(ctx context.Context, in *IndexRuleBindingRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceDeleteResponse, error)
+ Get(ctx context.Context, in *IndexRuleBindingRegistryServiceGetRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceGetResponse, error)
+ List(ctx context.Context, in *IndexRuleBindingRegistryServiceListRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceListResponse, error)
+}
+
+type indexRuleBindingRegistryServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewIndexRuleBindingRegistryServiceClient(cc grpc.ClientConnInterface) IndexRuleBindingRegistryServiceClient {
+ return &indexRuleBindingRegistryServiceClient{cc}
+}
+
+func (c *indexRuleBindingRegistryServiceClient) Create(ctx context.Context, in *IndexRuleBindingRegistryServiceCreateRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceCreateResponse, error) {
+ out := new(IndexRuleBindingRegistryServiceCreateResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.IndexRuleBindingRegistryService/Create", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *indexRuleBindingRegistryServiceClient) Update(ctx context.Context, in *IndexRuleBindingRegistryServiceUpdateRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceUpdateResponse, error) {
+ out := new(IndexRuleBindingRegistryServiceUpdateResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.IndexRuleBindingRegistryService/Update", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *indexRuleBindingRegistryServiceClient) Delete(ctx context.Context, in *IndexRuleBindingRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceDeleteResponse, error) {
+ out := new(IndexRuleBindingRegistryServiceDeleteResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.IndexRuleBindingRegistryService/Delete", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *indexRuleBindingRegistryServiceClient) Get(ctx context.Context, in *IndexRuleBindingRegistryServiceGetRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceGetResponse, error) {
+ out := new(IndexRuleBindingRegistryServiceGetResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.IndexRuleBindingRegistryService/Get", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *indexRuleBindingRegistryServiceClient) List(ctx context.Context, in *IndexRuleBindingRegistryServiceListRequest, opts ...grpc.CallOption) (*IndexRuleBindingRegistryServiceListResponse, error) {
+ out := new(IndexRuleBindingRegistryServiceListResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.IndexRuleBindingRegistryService/List", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// IndexRuleBindingRegistryServiceServer is the server API for IndexRuleBindingRegistryService service.
+// All implementations must embed UnimplementedIndexRuleBindingRegistryServiceServer
+// for forward compatibility
+type IndexRuleBindingRegistryServiceServer interface {
+ Create(context.Context, *IndexRuleBindingRegistryServiceCreateRequest) (*IndexRuleBindingRegistryServiceCreateResponse, error)
+ Update(context.Context, *IndexRuleBindingRegistryServiceUpdateRequest) (*IndexRuleBindingRegistryServiceUpdateResponse, error)
+ Delete(context.Context, *IndexRuleBindingRegistryServiceDeleteRequest) (*IndexRuleBindingRegistryServiceDeleteResponse, error)
+ Get(context.Context, *IndexRuleBindingRegistryServiceGetRequest) (*IndexRuleBindingRegistryServiceGetResponse, error)
+ List(context.Context, *IndexRuleBindingRegistryServiceListRequest) (*IndexRuleBindingRegistryServiceListResponse, error)
+ mustEmbedUnimplementedIndexRuleBindingRegistryServiceServer()
+}
+
+// UnimplementedIndexRuleBindingRegistryServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedIndexRuleBindingRegistryServiceServer struct {
+}
+
+func (UnimplementedIndexRuleBindingRegistryServiceServer) Create(context.Context, *IndexRuleBindingRegistryServiceCreateRequest) (*IndexRuleBindingRegistryServiceCreateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Create not implemented")
+}
+func (UnimplementedIndexRuleBindingRegistryServiceServer) Update(context.Context, *IndexRuleBindingRegistryServiceUpdateRequest) (*IndexRuleBindingRegistryServiceUpdateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Update not implemented")
+}
+func (UnimplementedIndexRuleBindingRegistryServiceServer) Delete(context.Context, *IndexRuleBindingRegistryServiceDeleteRequest) (*IndexRuleBindingRegistryServiceDeleteResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented")
+}
+func (UnimplementedIndexRuleBindingRegistryServiceServer) Get(context.Context, *IndexRuleBindingRegistryServiceGetRequest) (*IndexRuleBindingRegistryServiceGetResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Get not implemented")
+}
+func (UnimplementedIndexRuleBindingRegistryServiceServer) List(context.Context, *IndexRuleBindingRegistryServiceListRequest) (*IndexRuleBindingRegistryServiceListResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
+}
+func (UnimplementedIndexRuleBindingRegistryServiceServer) mustEmbedUnimplementedIndexRuleBindingRegistryServiceServer() {
+}
+
+// UnsafeIndexRuleBindingRegistryServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to IndexRuleBindingRegistryServiceServer will
+// result in compilation errors.
+type UnsafeIndexRuleBindingRegistryServiceServer interface {
+ mustEmbedUnimplementedIndexRuleBindingRegistryServiceServer()
+}
+
+func RegisterIndexRuleBindingRegistryServiceServer(s grpc.ServiceRegistrar, srv IndexRuleBindingRegistryServiceServer) {
+ s.RegisterService(&IndexRuleBindingRegistryService_ServiceDesc, srv)
+}
+
+func _IndexRuleBindingRegistryService_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(IndexRuleBindingRegistryServiceCreateRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(IndexRuleBindingRegistryServiceServer).Create(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.IndexRuleBindingRegistryService/Create",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(IndexRuleBindingRegistryServiceServer).Create(ctx, req.(*IndexRuleBindingRegistryServiceCreateRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _IndexRuleBindingRegistryService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(IndexRuleBindingRegistryServiceUpdateRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(IndexRuleBindingRegistryServiceServer).Update(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.IndexRuleBindingRegistryService/Update",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(IndexRuleBindingRegistryServiceServer).Update(ctx, req.(*IndexRuleBindingRegistryServiceUpdateRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _IndexRuleBindingRegistryService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(IndexRuleBindingRegistryServiceDeleteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(IndexRuleBindingRegistryServiceServer).Delete(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.IndexRuleBindingRegistryService/Delete",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(IndexRuleBindingRegistryServiceServer).Delete(ctx, req.(*IndexRuleBindingRegistryServiceDeleteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _IndexRuleBindingRegistryService_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(IndexRuleBindingRegistryServiceGetRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(IndexRuleBindingRegistryServiceServer).Get(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.IndexRuleBindingRegistryService/Get",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(IndexRuleBindingRegistryServiceServer).Get(ctx, req.(*IndexRuleBindingRegistryServiceGetRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _IndexRuleBindingRegistryService_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(IndexRuleBindingRegistryServiceListRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(IndexRuleBindingRegistryServiceServer).List(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.IndexRuleBindingRegistryService/List",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(IndexRuleBindingRegistryServiceServer).List(ctx, req.(*IndexRuleBindingRegistryServiceListRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// IndexRuleBindingRegistryService_ServiceDesc is the grpc.ServiceDesc for IndexRuleBindingRegistryService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var IndexRuleBindingRegistryService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "banyandb.database.v1.IndexRuleBindingRegistryService",
+ HandlerType: (*IndexRuleBindingRegistryServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Create",
+ Handler: _IndexRuleBindingRegistryService_Create_Handler,
+ },
+ {
+ MethodName: "Update",
+ Handler: _IndexRuleBindingRegistryService_Update_Handler,
+ },
+ {
+ MethodName: "Delete",
+ Handler: _IndexRuleBindingRegistryService_Delete_Handler,
+ },
+ {
+ MethodName: "Get",
+ Handler: _IndexRuleBindingRegistryService_Get_Handler,
+ },
+ {
+ MethodName: "List",
+ Handler: _IndexRuleBindingRegistryService_List_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "banyandb/database/v1/rpc.proto",
+}
+
+// IndexRuleRegistryServiceClient is the client API for IndexRuleRegistryService 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 IndexRuleRegistryServiceClient interface {
+ Create(ctx context.Context, in *IndexRuleRegistryServiceCreateRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceCreateResponse, error)
+ Update(ctx context.Context, in *IndexRuleRegistryServiceUpdateRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceUpdateResponse, error)
+ Delete(ctx context.Context, in *IndexRuleRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceDeleteResponse, error)
+ Get(ctx context.Context, in *IndexRuleRegistryServiceGetRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceGetResponse, error)
+ List(ctx context.Context, in *IndexRuleRegistryServiceListRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceListResponse, error)
+}
+
+type indexRuleRegistryServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewIndexRuleRegistryServiceClient(cc grpc.ClientConnInterface) IndexRuleRegistryServiceClient {
+ return &indexRuleRegistryServiceClient{cc}
+}
+
+func (c *indexRuleRegistryServiceClient) Create(ctx context.Context, in *IndexRuleRegistryServiceCreateRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceCreateResponse, error) {
+ out := new(IndexRuleRegistryServiceCreateResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.IndexRuleRegistryService/Create", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *indexRuleRegistryServiceClient) Update(ctx context.Context, in *IndexRuleRegistryServiceUpdateRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceUpdateResponse, error) {
+ out := new(IndexRuleRegistryServiceUpdateResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.IndexRuleRegistryService/Update", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *indexRuleRegistryServiceClient) Delete(ctx context.Context, in *IndexRuleRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceDeleteResponse, error) {
+ out := new(IndexRuleRegistryServiceDeleteResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.IndexRuleRegistryService/Delete", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *indexRuleRegistryServiceClient) Get(ctx context.Context, in *IndexRuleRegistryServiceGetRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceGetResponse, error) {
+ out := new(IndexRuleRegistryServiceGetResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.IndexRuleRegistryService/Get", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *indexRuleRegistryServiceClient) List(ctx context.Context, in *IndexRuleRegistryServiceListRequest, opts ...grpc.CallOption) (*IndexRuleRegistryServiceListResponse, error) {
+ out := new(IndexRuleRegistryServiceListResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.IndexRuleRegistryService/List", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// IndexRuleRegistryServiceServer is the server API for IndexRuleRegistryService service.
+// All implementations must embed UnimplementedIndexRuleRegistryServiceServer
+// for forward compatibility
+type IndexRuleRegistryServiceServer interface {
+ Create(context.Context, *IndexRuleRegistryServiceCreateRequest) (*IndexRuleRegistryServiceCreateResponse, error)
+ Update(context.Context, *IndexRuleRegistryServiceUpdateRequest) (*IndexRuleRegistryServiceUpdateResponse, error)
+ Delete(context.Context, *IndexRuleRegistryServiceDeleteRequest) (*IndexRuleRegistryServiceDeleteResponse, error)
+ Get(context.Context, *IndexRuleRegistryServiceGetRequest) (*IndexRuleRegistryServiceGetResponse, error)
+ List(context.Context, *IndexRuleRegistryServiceListRequest) (*IndexRuleRegistryServiceListResponse, error)
+ mustEmbedUnimplementedIndexRuleRegistryServiceServer()
+}
+
+// UnimplementedIndexRuleRegistryServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedIndexRuleRegistryServiceServer struct {
+}
+
+func (UnimplementedIndexRuleRegistryServiceServer) Create(context.Context, *IndexRuleRegistryServiceCreateRequest) (*IndexRuleRegistryServiceCreateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Create not implemented")
+}
+func (UnimplementedIndexRuleRegistryServiceServer) Update(context.Context, *IndexRuleRegistryServiceUpdateRequest) (*IndexRuleRegistryServiceUpdateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Update not implemented")
+}
+func (UnimplementedIndexRuleRegistryServiceServer) Delete(context.Context, *IndexRuleRegistryServiceDeleteRequest) (*IndexRuleRegistryServiceDeleteResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented")
+}
+func (UnimplementedIndexRuleRegistryServiceServer) Get(context.Context, *IndexRuleRegistryServiceGetRequest) (*IndexRuleRegistryServiceGetResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Get not implemented")
+}
+func (UnimplementedIndexRuleRegistryServiceServer) List(context.Context, *IndexRuleRegistryServiceListRequest) (*IndexRuleRegistryServiceListResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
+}
+func (UnimplementedIndexRuleRegistryServiceServer) mustEmbedUnimplementedIndexRuleRegistryServiceServer() {
+}
+
+// UnsafeIndexRuleRegistryServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to IndexRuleRegistryServiceServer will
+// result in compilation errors.
+type UnsafeIndexRuleRegistryServiceServer interface {
+ mustEmbedUnimplementedIndexRuleRegistryServiceServer()
+}
+
+func RegisterIndexRuleRegistryServiceServer(s grpc.ServiceRegistrar, srv IndexRuleRegistryServiceServer) {
+ s.RegisterService(&IndexRuleRegistryService_ServiceDesc, srv)
+}
+
+func _IndexRuleRegistryService_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(IndexRuleRegistryServiceCreateRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(IndexRuleRegistryServiceServer).Create(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.IndexRuleRegistryService/Create",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(IndexRuleRegistryServiceServer).Create(ctx, req.(*IndexRuleRegistryServiceCreateRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _IndexRuleRegistryService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(IndexRuleRegistryServiceUpdateRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(IndexRuleRegistryServiceServer).Update(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.IndexRuleRegistryService/Update",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(IndexRuleRegistryServiceServer).Update(ctx, req.(*IndexRuleRegistryServiceUpdateRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _IndexRuleRegistryService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(IndexRuleRegistryServiceDeleteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(IndexRuleRegistryServiceServer).Delete(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.IndexRuleRegistryService/Delete",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(IndexRuleRegistryServiceServer).Delete(ctx, req.(*IndexRuleRegistryServiceDeleteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _IndexRuleRegistryService_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(IndexRuleRegistryServiceGetRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(IndexRuleRegistryServiceServer).Get(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.IndexRuleRegistryService/Get",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(IndexRuleRegistryServiceServer).Get(ctx, req.(*IndexRuleRegistryServiceGetRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _IndexRuleRegistryService_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(IndexRuleRegistryServiceListRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(IndexRuleRegistryServiceServer).List(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.IndexRuleRegistryService/List",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(IndexRuleRegistryServiceServer).List(ctx, req.(*IndexRuleRegistryServiceListRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// IndexRuleRegistryService_ServiceDesc is the grpc.ServiceDesc for IndexRuleRegistryService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var IndexRuleRegistryService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "banyandb.database.v1.IndexRuleRegistryService",
+ HandlerType: (*IndexRuleRegistryServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Create",
+ Handler: _IndexRuleRegistryService_Create_Handler,
+ },
+ {
+ MethodName: "Update",
+ Handler: _IndexRuleRegistryService_Update_Handler,
+ },
+ {
+ MethodName: "Delete",
+ Handler: _IndexRuleRegistryService_Delete_Handler,
+ },
+ {
+ MethodName: "Get",
+ Handler: _IndexRuleRegistryService_Get_Handler,
+ },
+ {
+ MethodName: "List",
+ Handler: _IndexRuleRegistryService_List_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "banyandb/database/v1/rpc.proto",
+}
+
+// MeasureRegistryServiceClient is the client API for MeasureRegistryService 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 MeasureRegistryServiceClient interface {
+ Create(ctx context.Context, in *MeasureRegistryServiceCreateRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceCreateResponse, error)
+ Update(ctx context.Context, in *MeasureRegistryServiceUpdateRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceUpdateResponse, error)
+ Delete(ctx context.Context, in *MeasureRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceDeleteResponse, error)
+ Get(ctx context.Context, in *MeasureRegistryServiceGetRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceGetResponse, error)
+ List(ctx context.Context, in *MeasureRegistryServiceListRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceListResponse, error)
+}
+
+type measureRegistryServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewMeasureRegistryServiceClient(cc grpc.ClientConnInterface) MeasureRegistryServiceClient {
+ return &measureRegistryServiceClient{cc}
+}
+
+func (c *measureRegistryServiceClient) Create(ctx context.Context, in *MeasureRegistryServiceCreateRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceCreateResponse, error) {
+ out := new(MeasureRegistryServiceCreateResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.MeasureRegistryService/Create", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *measureRegistryServiceClient) Update(ctx context.Context, in *MeasureRegistryServiceUpdateRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceUpdateResponse, error) {
+ out := new(MeasureRegistryServiceUpdateResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.MeasureRegistryService/Update", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *measureRegistryServiceClient) Delete(ctx context.Context, in *MeasureRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceDeleteResponse, error) {
+ out := new(MeasureRegistryServiceDeleteResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.MeasureRegistryService/Delete", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *measureRegistryServiceClient) Get(ctx context.Context, in *MeasureRegistryServiceGetRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceGetResponse, error) {
+ out := new(MeasureRegistryServiceGetResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.MeasureRegistryService/Get", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *measureRegistryServiceClient) List(ctx context.Context, in *MeasureRegistryServiceListRequest, opts ...grpc.CallOption) (*MeasureRegistryServiceListResponse, error) {
+ out := new(MeasureRegistryServiceListResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.MeasureRegistryService/List", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// MeasureRegistryServiceServer is the server API for MeasureRegistryService service.
+// All implementations must embed UnimplementedMeasureRegistryServiceServer
+// for forward compatibility
+type MeasureRegistryServiceServer interface {
+ Create(context.Context, *MeasureRegistryServiceCreateRequest) (*MeasureRegistryServiceCreateResponse, error)
+ Update(context.Context, *MeasureRegistryServiceUpdateRequest) (*MeasureRegistryServiceUpdateResponse, error)
+ Delete(context.Context, *MeasureRegistryServiceDeleteRequest) (*MeasureRegistryServiceDeleteResponse, error)
+ Get(context.Context, *MeasureRegistryServiceGetRequest) (*MeasureRegistryServiceGetResponse, error)
+ List(context.Context, *MeasureRegistryServiceListRequest) (*MeasureRegistryServiceListResponse, error)
+ mustEmbedUnimplementedMeasureRegistryServiceServer()
+}
+
+// UnimplementedMeasureRegistryServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedMeasureRegistryServiceServer struct {
+}
+
+func (UnimplementedMeasureRegistryServiceServer) Create(context.Context, *MeasureRegistryServiceCreateRequest) (*MeasureRegistryServiceCreateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Create not implemented")
+}
+func (UnimplementedMeasureRegistryServiceServer) Update(context.Context, *MeasureRegistryServiceUpdateRequest) (*MeasureRegistryServiceUpdateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Update not implemented")
+}
+func (UnimplementedMeasureRegistryServiceServer) Delete(context.Context, *MeasureRegistryServiceDeleteRequest) (*MeasureRegistryServiceDeleteResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented")
+}
+func (UnimplementedMeasureRegistryServiceServer) Get(context.Context, *MeasureRegistryServiceGetRequest) (*MeasureRegistryServiceGetResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Get not implemented")
+}
+func (UnimplementedMeasureRegistryServiceServer) List(context.Context, *MeasureRegistryServiceListRequest) (*MeasureRegistryServiceListResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
+}
+func (UnimplementedMeasureRegistryServiceServer) mustEmbedUnimplementedMeasureRegistryServiceServer() {
+}
+
+// UnsafeMeasureRegistryServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to MeasureRegistryServiceServer will
+// result in compilation errors.
+type UnsafeMeasureRegistryServiceServer interface {
+ mustEmbedUnimplementedMeasureRegistryServiceServer()
+}
+
+func RegisterMeasureRegistryServiceServer(s grpc.ServiceRegistrar, srv MeasureRegistryServiceServer) {
+ s.RegisterService(&MeasureRegistryService_ServiceDesc, srv)
+}
+
+func _MeasureRegistryService_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MeasureRegistryServiceCreateRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MeasureRegistryServiceServer).Create(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.MeasureRegistryService/Create",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MeasureRegistryServiceServer).Create(ctx, req.(*MeasureRegistryServiceCreateRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _MeasureRegistryService_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MeasureRegistryServiceUpdateRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MeasureRegistryServiceServer).Update(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.MeasureRegistryService/Update",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MeasureRegistryServiceServer).Update(ctx, req.(*MeasureRegistryServiceUpdateRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _MeasureRegistryService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MeasureRegistryServiceDeleteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MeasureRegistryServiceServer).Delete(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.MeasureRegistryService/Delete",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MeasureRegistryServiceServer).Delete(ctx, req.(*MeasureRegistryServiceDeleteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _MeasureRegistryService_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MeasureRegistryServiceGetRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MeasureRegistryServiceServer).Get(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.MeasureRegistryService/Get",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MeasureRegistryServiceServer).Get(ctx, req.(*MeasureRegistryServiceGetRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _MeasureRegistryService_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MeasureRegistryServiceListRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MeasureRegistryServiceServer).List(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.MeasureRegistryService/List",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MeasureRegistryServiceServer).List(ctx, req.(*MeasureRegistryServiceListRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// MeasureRegistryService_ServiceDesc is the grpc.ServiceDesc for MeasureRegistryService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var MeasureRegistryService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "banyandb.database.v1.MeasureRegistryService",
+ HandlerType: (*MeasureRegistryServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Create",
+ Handler: _MeasureRegistryService_Create_Handler,
+ },
+ {
+ MethodName: "Update",
+ Handler: _MeasureRegistryService_Update_Handler,
+ },
+ {
+ MethodName: "Delete",
+ Handler: _MeasureRegistryService_Delete_Handler,
+ },
+ {
+ MethodName: "Get",
+ Handler: _MeasureRegistryService_Get_Handler,
+ },
+ {
+ MethodName: "List",
+ Handler: _MeasureRegistryService_List_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "banyandb/database/v1/rpc.proto",
+}
+
+// GroupRegistryServiceClient is the client API for GroupRegistryService 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 GroupRegistryServiceClient interface {
+ Create(ctx context.Context, in *GroupRegistryServiceCreateRequest, opts ...grpc.CallOption) (*GroupRegistryServiceCreateResponse, error)
+ Delete(ctx context.Context, in *GroupRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*GroupRegistryServiceDeleteResponse, error)
+ Exist(ctx context.Context, in *GroupRegistryServiceExistRequest, opts ...grpc.CallOption) (*GroupRegistryServiceExistResponse, error)
+ List(ctx context.Context, in *GroupRegistryServiceListRequest, opts ...grpc.CallOption) (*GroupRegistryServiceListResponse, error)
+}
+
+type groupRegistryServiceClient struct {
+ cc grpc.ClientConnInterface
+}
+
+func NewGroupRegistryServiceClient(cc grpc.ClientConnInterface) GroupRegistryServiceClient {
+ return &groupRegistryServiceClient{cc}
+}
+
+func (c *groupRegistryServiceClient) Create(ctx context.Context, in *GroupRegistryServiceCreateRequest, opts ...grpc.CallOption) (*GroupRegistryServiceCreateResponse, error) {
+ out := new(GroupRegistryServiceCreateResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.GroupRegistryService/Create", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *groupRegistryServiceClient) Delete(ctx context.Context, in *GroupRegistryServiceDeleteRequest, opts ...grpc.CallOption) (*GroupRegistryServiceDeleteResponse, error) {
+ out := new(GroupRegistryServiceDeleteResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.GroupRegistryService/Delete", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *groupRegistryServiceClient) Exist(ctx context.Context, in *GroupRegistryServiceExistRequest, opts ...grpc.CallOption) (*GroupRegistryServiceExistResponse, error) {
+ out := new(GroupRegistryServiceExistResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.GroupRegistryService/Exist", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+func (c *groupRegistryServiceClient) List(ctx context.Context, in *GroupRegistryServiceListRequest, opts ...grpc.CallOption) (*GroupRegistryServiceListResponse, error) {
+ out := new(GroupRegistryServiceListResponse)
+ err := c.cc.Invoke(ctx, "/banyandb.database.v1.GroupRegistryService/List", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
+}
+
+// GroupRegistryServiceServer is the server API for GroupRegistryService service.
+// All implementations must embed UnimplementedGroupRegistryServiceServer
+// for forward compatibility
+type GroupRegistryServiceServer interface {
+ Create(context.Context, *GroupRegistryServiceCreateRequest) (*GroupRegistryServiceCreateResponse, error)
+ Delete(context.Context, *GroupRegistryServiceDeleteRequest) (*GroupRegistryServiceDeleteResponse, error)
+ Exist(context.Context, *GroupRegistryServiceExistRequest) (*GroupRegistryServiceExistResponse, error)
+ List(context.Context, *GroupRegistryServiceListRequest) (*GroupRegistryServiceListResponse, error)
+ mustEmbedUnimplementedGroupRegistryServiceServer()
+}
+
+// UnimplementedGroupRegistryServiceServer must be embedded to have forward compatible implementations.
+type UnimplementedGroupRegistryServiceServer struct {
+}
+
+func (UnimplementedGroupRegistryServiceServer) Create(context.Context, *GroupRegistryServiceCreateRequest) (*GroupRegistryServiceCreateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Create not implemented")
+}
+func (UnimplementedGroupRegistryServiceServer) Delete(context.Context, *GroupRegistryServiceDeleteRequest) (*GroupRegistryServiceDeleteResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Delete not implemented")
+}
+func (UnimplementedGroupRegistryServiceServer) Exist(context.Context, *GroupRegistryServiceExistRequest) (*GroupRegistryServiceExistResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Exist not implemented")
+}
+func (UnimplementedGroupRegistryServiceServer) List(context.Context, *GroupRegistryServiceListRequest) (*GroupRegistryServiceListResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
+}
+func (UnimplementedGroupRegistryServiceServer) mustEmbedUnimplementedGroupRegistryServiceServer() {}
+
+// UnsafeGroupRegistryServiceServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to GroupRegistryServiceServer will
+// result in compilation errors.
+type UnsafeGroupRegistryServiceServer interface {
+ mustEmbedUnimplementedGroupRegistryServiceServer()
+}
+
+func RegisterGroupRegistryServiceServer(s grpc.ServiceRegistrar, srv GroupRegistryServiceServer) {
+ s.RegisterService(&GroupRegistryService_ServiceDesc, srv)
+}
+
+func _GroupRegistryService_Create_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GroupRegistryServiceCreateRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(GroupRegistryServiceServer).Create(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.GroupRegistryService/Create",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(GroupRegistryServiceServer).Create(ctx, req.(*GroupRegistryServiceCreateRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _GroupRegistryService_Delete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GroupRegistryServiceDeleteRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(GroupRegistryServiceServer).Delete(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.GroupRegistryService/Delete",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(GroupRegistryServiceServer).Delete(ctx, req.(*GroupRegistryServiceDeleteRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _GroupRegistryService_Exist_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GroupRegistryServiceExistRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(GroupRegistryServiceServer).Exist(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.GroupRegistryService/Exist",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(GroupRegistryServiceServer).Exist(ctx, req.(*GroupRegistryServiceExistRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _GroupRegistryService_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(GroupRegistryServiceListRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(GroupRegistryServiceServer).List(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/banyandb.database.v1.GroupRegistryService/List",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(GroupRegistryServiceServer).List(ctx, req.(*GroupRegistryServiceListRequest))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+// GroupRegistryService_ServiceDesc is the grpc.ServiceDesc for GroupRegistryService service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var GroupRegistryService_ServiceDesc = grpc.ServiceDesc{
+ ServiceName: "banyandb.database.v1.GroupRegistryService",
+ HandlerType: (*GroupRegistryServiceServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Create",
+ Handler: _GroupRegistryService_Create_Handler,
+ },
+ {
+ MethodName: "Delete",
+ Handler: _GroupRegistryService_Delete_Handler,
+ },
+ {
+ MethodName: "Exist",
+ Handler: _GroupRegistryService_Exist_Handler,
+ },
+ {
+ MethodName: "List",
+ Handler: _GroupRegistryService_List_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "banyandb/database/v1/rpc.proto",
+}
diff --git a/api/proto/banyandb/database/v1/schema.pb.go b/api/proto/banyandb/database/v1/schema.pb.go
index a2ac31d..245fb52 100644
--- a/api/proto/banyandb/database/v1/schema.pb.go
+++ b/api/proto/banyandb/database/v1/schema.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.1
-// protoc v3.17.3
+// protoc v3.18.1
// source: banyandb/database/v1/schema.proto
package v1
diff --git a/api/proto/banyandb/model/v1/common.pb.go b/api/proto/banyandb/model/v1/common.pb.go
index 31cb054..22e60c4 100644
--- a/api/proto/banyandb/model/v1/common.pb.go
+++ b/api/proto/banyandb/model/v1/common.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.1
-// protoc v3.17.3
+// protoc v3.18.1
// source: banyandb/model/v1/common.proto
package v1
diff --git a/api/proto/banyandb/model/v1/query.pb.go b/api/proto/banyandb/model/v1/query.pb.go
index 5c7c225..226845f 100644
--- a/api/proto/banyandb/model/v1/query.pb.go
+++ b/api/proto/banyandb/model/v1/query.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.1
-// protoc v3.17.3
+// protoc v3.18.1
// source: banyandb/model/v1/query.proto
package v1
diff --git a/api/proto/banyandb/stream/v1/query.pb.go b/api/proto/banyandb/stream/v1/query.pb.go
index 4175baa..883638a 100644
--- a/api/proto/banyandb/stream/v1/query.pb.go
+++ b/api/proto/banyandb/stream/v1/query.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.1
-// protoc v3.17.3
+// protoc v3.18.1
// source: banyandb/stream/v1/query.proto
package v1
diff --git a/api/proto/banyandb/stream/v1/rpc.pb.go b/api/proto/banyandb/stream/v1/rpc.pb.go
index 32d87f4..199c536 100644
--- a/api/proto/banyandb/stream/v1/rpc.pb.go
+++ b/api/proto/banyandb/stream/v1/rpc.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.1
-// protoc v3.17.3
+// protoc v3.18.1
// source: banyandb/stream/v1/rpc.proto
package v1
diff --git a/api/proto/banyandb/stream/v1/write.pb.go b/api/proto/banyandb/stream/v1/write.pb.go
index 8d268c8..9d63ba5 100644
--- a/api/proto/banyandb/stream/v1/write.pb.go
+++ b/api/proto/banyandb/stream/v1/write.pb.go
@@ -18,7 +18,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.27.1
-// protoc v3.17.3
+// protoc v3.18.1
// source: banyandb/stream/v1/write.proto
package v1
diff --git a/banyand/internal/cmd/standalone.go b/banyand/internal/cmd/standalone.go
index 513a7bc..5bf1058 100644
--- a/banyand/internal/cmd/standalone.go
+++ b/banyand/internal/cmd/standalone.go
@@ -60,11 +60,11 @@ func newStandaloneCmd() *cobra.Command {
if err != nil {
l.Fatal().Err(err).Msg("failed to initiate metadata service")
}
- q, err := query.NewExecutor(ctx, streamSvc, repo, pipeline)
+ q, err := query.NewExecutor(ctx, streamSvc, metaSvc, repo, pipeline)
if err != nil {
l.Fatal().Err(err).Msg("failed to initiate trace series")
}
- tcp, err := liaison.NewEndpoint(ctx, pipeline, repo)
+ tcp, err := liaison.NewEndpoint(ctx, pipeline, repo, metaSvc)
if err != nil {
l.Fatal().Err(err).Msg("failed to initiate Endpoint transport layer")
}
diff --git a/banyand/liaison/grpc/registry.go b/banyand/liaison/grpc/registry.go
new file mode 100644
index 0000000..9d27e58
--- /dev/null
+++ b/banyand/liaison/grpc/registry.go
@@ -0,0 +1,294 @@
+// Licensed to Apache Software Foundation (ASF) under one or more contributor
+// license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright
+// ownership. Apache Software Foundation (ASF) licenses this file to you under
+// the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package grpc
+
+import (
+ "context"
+
+ databasev1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1"
+ "github.com/apache/skywalking-banyandb/banyand/metadata"
+ "github.com/apache/skywalking-banyandb/banyand/metadata/schema"
+)
+
+type streamRegistryServer struct {
+ schemaRegistry metadata.Service
+ databasev1.UnimplementedStreamRegistryServiceServer
+}
+
+func (rs *streamRegistryServer) Create(ctx context.Context,
+ req *databasev1.StreamRegistryServiceCreateRequest) (*databasev1.StreamRegistryServiceCreateResponse, error) {
+ if err := rs.schemaRegistry.StreamRegistry().UpdateStream(ctx, req.GetStream()); err != nil {
+ return nil, err
+ }
+ return &databasev1.StreamRegistryServiceCreateResponse{}, nil
+}
+
+func (rs *streamRegistryServer) Update(ctx context.Context,
+ req *databasev1.StreamRegistryServiceUpdateRequest) (*databasev1.StreamRegistryServiceUpdateResponse, error) {
+ if err := rs.schemaRegistry.StreamRegistry().UpdateStream(ctx, req.GetStream()); err != nil {
+ return nil, err
+ }
+ return &databasev1.StreamRegistryServiceUpdateResponse{}, nil
+}
+
+func (rs *streamRegistryServer) Delete(ctx context.Context,
+ req *databasev1.StreamRegistryServiceDeleteRequest) (*databasev1.StreamRegistryServiceDeleteResponse, error) {
+ ok, err := rs.schemaRegistry.StreamRegistry().DeleteStream(ctx, req.GetMetadata())
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.StreamRegistryServiceDeleteResponse{
+ Deleted: ok,
+ }, nil
+}
+
+func (rs *streamRegistryServer) Get(ctx context.Context,
+ req *databasev1.StreamRegistryServiceGetRequest) (*databasev1.StreamRegistryServiceGetResponse, error) {
+ entity, err := rs.schemaRegistry.StreamRegistry().GetStream(ctx, req.GetMetadata())
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.StreamRegistryServiceGetResponse{
+ Stream: entity,
+ }, nil
+}
+
+func (rs *streamRegistryServer) List(ctx context.Context,
+ req *databasev1.StreamRegistryServiceListRequest) (*databasev1.StreamRegistryServiceListResponse, error) {
+ entities, err := rs.schemaRegistry.StreamRegistry().ListStream(ctx, schema.ListOpt{Group: req.GetGroup()})
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.StreamRegistryServiceListResponse{
+ Stream: entities,
+ }, nil
+}
+
+type indexRuleBindingRegistryServer struct {
+ schemaRegistry metadata.Service
+ databasev1.UnimplementedIndexRuleBindingRegistryServiceServer
+}
+
+func (rs *indexRuleBindingRegistryServer) Create(ctx context.Context,
+ req *databasev1.IndexRuleBindingRegistryServiceCreateRequest) (
+ *databasev1.IndexRuleBindingRegistryServiceCreateResponse, error) {
+ if err := rs.schemaRegistry.IndexRuleBindingRegistry().UpdateIndexRuleBinding(ctx, req.GetIndexRuleBinding()); err != nil {
+ return nil, err
+ }
+ return &databasev1.IndexRuleBindingRegistryServiceCreateResponse{}, nil
+}
+
+func (rs *indexRuleBindingRegistryServer) Update(ctx context.Context,
+ req *databasev1.IndexRuleBindingRegistryServiceUpdateRequest) (
+ *databasev1.IndexRuleBindingRegistryServiceUpdateResponse, error) {
+ if err := rs.schemaRegistry.IndexRuleBindingRegistry().UpdateIndexRuleBinding(ctx, req.GetIndexRuleBinding()); err != nil {
+ return nil, err
+ }
+ return &databasev1.IndexRuleBindingRegistryServiceUpdateResponse{}, nil
+}
+
+func (rs *indexRuleBindingRegistryServer) Delete(ctx context.Context,
+ req *databasev1.IndexRuleBindingRegistryServiceDeleteRequest) (
+ *databasev1.IndexRuleBindingRegistryServiceDeleteResponse, error) {
+ ok, err := rs.schemaRegistry.IndexRuleBindingRegistry().DeleteIndexRuleBinding(ctx, req.GetMetadata())
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.IndexRuleBindingRegistryServiceDeleteResponse{
+ Deleted: ok,
+ }, nil
+}
+
+func (rs *indexRuleBindingRegistryServer) Get(ctx context.Context,
+ req *databasev1.IndexRuleBindingRegistryServiceGetRequest) (
+ *databasev1.IndexRuleBindingRegistryServiceGetResponse, error) {
+ entity, err := rs.schemaRegistry.IndexRuleBindingRegistry().GetIndexRuleBinding(ctx, req.GetMetadata())
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.IndexRuleBindingRegistryServiceGetResponse{
+ IndexRuleBinding: entity,
+ }, nil
+}
+
+func (rs *indexRuleBindingRegistryServer) List(ctx context.Context,
+ req *databasev1.IndexRuleBindingRegistryServiceListRequest) (
+ *databasev1.IndexRuleBindingRegistryServiceListResponse, error) {
+ entities, err := rs.schemaRegistry.IndexRuleBindingRegistry().
+ ListIndexRuleBinding(ctx, schema.ListOpt{Group: req.GetGroup()})
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.IndexRuleBindingRegistryServiceListResponse{
+ IndexRuleBinding: entities,
+ }, nil
+}
+
+type indexRuleRegistryServer struct {
+ schemaRegistry metadata.Service
+ databasev1.UnimplementedIndexRuleRegistryServiceServer
+}
+
+func (rs *indexRuleRegistryServer) Create(ctx context.Context, req *databasev1.IndexRuleRegistryServiceCreateRequest) (
+ *databasev1.IndexRuleRegistryServiceCreateResponse, error) {
+ if err := rs.schemaRegistry.IndexRuleRegistry().UpdateIndexRule(ctx, req.GetIndexRule()); err != nil {
+ return nil, err
+ }
+ return &databasev1.IndexRuleRegistryServiceCreateResponse{}, nil
+}
+
+func (rs *indexRuleRegistryServer) Update(ctx context.Context, req *databasev1.IndexRuleRegistryServiceUpdateRequest) (
+ *databasev1.IndexRuleRegistryServiceUpdateResponse, error) {
+ if err := rs.schemaRegistry.IndexRuleRegistry().UpdateIndexRule(ctx, req.GetIndexRule()); err != nil {
+ return nil, err
+ }
+ return &databasev1.IndexRuleRegistryServiceUpdateResponse{}, nil
+}
+
+func (rs *indexRuleRegistryServer) Delete(ctx context.Context, req *databasev1.IndexRuleRegistryServiceDeleteRequest) (
+ *databasev1.IndexRuleRegistryServiceDeleteResponse, error) {
+ ok, err := rs.schemaRegistry.IndexRuleRegistry().DeleteIndexRule(ctx, req.GetMetadata())
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.IndexRuleRegistryServiceDeleteResponse{
+ Deleted: ok,
+ }, nil
+}
+
+func (rs *indexRuleRegistryServer) Get(ctx context.Context, req *databasev1.IndexRuleRegistryServiceGetRequest) (
+ *databasev1.IndexRuleRegistryServiceGetResponse, error) {
+ entity, err := rs.schemaRegistry.IndexRuleRegistry().GetIndexRule(ctx, req.GetMetadata())
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.IndexRuleRegistryServiceGetResponse{
+ IndexRule: entity,
+ }, nil
+}
+
+func (rs *indexRuleRegistryServer) List(ctx context.Context, req *databasev1.IndexRuleRegistryServiceListRequest) (
+ *databasev1.IndexRuleRegistryServiceListResponse, error) {
+ entities, err := rs.schemaRegistry.IndexRuleRegistry().ListIndexRule(ctx, schema.ListOpt{Group: req.GetGroup()})
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.IndexRuleRegistryServiceListResponse{
+ IndexRule: entities,
+ }, nil
+}
+
+type measureRegistryServer struct {
+ schemaRegistry metadata.Service
+ databasev1.UnimplementedMeasureRegistryServiceServer
+}
+
+func (rs *measureRegistryServer) Create(ctx context.Context, req *databasev1.MeasureRegistryServiceCreateRequest) (
+ *databasev1.MeasureRegistryServiceCreateResponse, error) {
+ if err := rs.schemaRegistry.MeasureRegistry().UpdateMeasure(ctx, req.GetMeasure()); err != nil {
+ return nil, err
+ }
+ return &databasev1.MeasureRegistryServiceCreateResponse{}, nil
+}
+
+func (rs *measureRegistryServer) Update(ctx context.Context, req *databasev1.MeasureRegistryServiceUpdateRequest) (
+ *databasev1.MeasureRegistryServiceUpdateResponse, error) {
+ if err := rs.schemaRegistry.MeasureRegistry().UpdateMeasure(ctx, req.GetMeasure()); err != nil {
+ return nil, err
+ }
+ return &databasev1.MeasureRegistryServiceUpdateResponse{}, nil
+}
+
+func (rs *measureRegistryServer) Delete(ctx context.Context, req *databasev1.MeasureRegistryServiceDeleteRequest) (
+ *databasev1.MeasureRegistryServiceDeleteResponse, error) {
+ ok, err := rs.schemaRegistry.MeasureRegistry().DeleteMeasure(ctx, req.GetMetadata())
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.MeasureRegistryServiceDeleteResponse{
+ Deleted: ok,
+ }, nil
+}
+
+func (rs *measureRegistryServer) Get(ctx context.Context, req *databasev1.MeasureRegistryServiceGetRequest) (
+ *databasev1.MeasureRegistryServiceGetResponse, error) {
+ entity, err := rs.schemaRegistry.MeasureRegistry().GetMeasure(ctx, req.GetMetadata())
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.MeasureRegistryServiceGetResponse{
+ Measure: entity,
+ }, nil
+}
+
+func (rs *measureRegistryServer) List(ctx context.Context, req *databasev1.MeasureRegistryServiceListRequest) (
+ *databasev1.MeasureRegistryServiceListResponse, error) {
+ entities, err := rs.schemaRegistry.MeasureRegistry().ListMeasure(ctx, schema.ListOpt{Group: req.GetGroup()})
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.MeasureRegistryServiceListResponse{
+ Measure: entities,
+ }, nil
+}
+
+type groupRegistryServer struct {
+ schemaRegistry metadata.Service
+ databasev1.UnimplementedGroupRegistryServiceServer
+}
+
+func (rs *groupRegistryServer) Create(ctx context.Context, req *databasev1.GroupRegistryServiceCreateRequest) (
+ *databasev1.GroupRegistryServiceCreateResponse, error) {
+ if err := rs.schemaRegistry.GroupRegistry().CreateGroup(ctx, req.GetGroup()); err != nil {
+ return nil, err
+ }
+ return &databasev1.GroupRegistryServiceCreateResponse{}, nil
+}
+
+func (rs *groupRegistryServer) Delete(ctx context.Context, req *databasev1.GroupRegistryServiceDeleteRequest) (
+ *databasev1.GroupRegistryServiceDeleteResponse, error) {
+ deleted, err := rs.schemaRegistry.GroupRegistry().DeleteGroup(ctx, req.GetGroup())
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.GroupRegistryServiceDeleteResponse{
+ Deleted: deleted,
+ }, nil
+}
+
+func (rs *groupRegistryServer) Get(ctx context.Context, req *databasev1.GroupRegistryServiceExistRequest) (
+ *databasev1.GroupRegistryServiceExistResponse, error) {
+ g, err := rs.schemaRegistry.GroupRegistry().GetGroup(ctx, req.GetGroup())
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.GroupRegistryServiceExistResponse{
+ Group: g,
+ }, nil
+}
+
+func (rs *groupRegistryServer) List(ctx context.Context, req *databasev1.GroupRegistryServiceListRequest) (
+ *databasev1.GroupRegistryServiceListResponse, error) {
+ groups, err := rs.schemaRegistry.GroupRegistry().ListGroup(ctx)
+ if err != nil {
+ return nil, err
+ }
+ return &databasev1.GroupRegistryServiceListResponse{
+ Group: groups,
+ }, nil
+}
diff --git a/banyand/liaison/grpc/registry_test.go b/banyand/liaison/grpc/registry_test.go
new file mode 100644
index 0000000..1c21f8a
--- /dev/null
+++ b/banyand/liaison/grpc/registry_test.go
@@ -0,0 +1,187 @@
+// Licensed to Apache Software Foundation (ASF) under one or more contributor
+// license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright
+// ownership. Apache Software Foundation (ASF) licenses this file to you under
+// the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package grpc
+
+import (
+ "context"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "google.golang.org/grpc"
+ "google.golang.org/grpc/status"
+
+ commonv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/common/v1"
+ databasev1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1"
+ "github.com/apache/skywalking-banyandb/banyand/metadata/schema"
+)
+
+func TestStreamRegistry(t *testing.T) {
+ req := require.New(t)
+ gracefulStop := setup(req, testData{
+ TLS: false,
+ addr: "localhost:17912",
+ })
+ defer gracefulStop()
+
+ conn, err := grpc.Dial("localhost:17912", grpc.WithInsecure())
+ req.NoError(err)
+ req.NotNil(conn)
+
+ client := databasev1.NewStreamRegistryServiceClient(conn)
+ req.NotNil(client)
+
+ meta := &commonv1.Metadata{
+ Group: "default",
+ Name: "sw",
+ }
+
+ getResp, err := client.Get(context.TODO(), &databasev1.StreamRegistryServiceGetRequest{Metadata: meta})
+
+ req.NoError(err)
+ req.NotNil(getResp)
+
+ // 2 - DELETE
+ deleteResp, err := client.Delete(context.TODO(), &databasev1.StreamRegistryServiceDeleteRequest{
+ Metadata: meta,
+ })
+ req.NoError(err)
+ req.NotNil(deleteResp)
+ req.True(deleteResp.GetDeleted())
+
+ // 3 - GET -> Nil
+ _, err = client.Get(context.TODO(), &databasev1.StreamRegistryServiceGetRequest{
+ Metadata: meta,
+ })
+ errStatus, _ := status.FromError(err)
+ req.Equal(errStatus.Message(), schema.ErrEntityNotFound.Error())
+
+ // 4 - CREATE
+ _, err = client.Create(context.TODO(), &databasev1.StreamRegistryServiceCreateRequest{Stream: getResp.GetStream()})
+ req.NoError(err)
+
+ // 5 - GET - > Not Nil
+ getResp, err = client.Get(context.TODO(), &databasev1.StreamRegistryServiceGetRequest{
+ Metadata: meta,
+ })
+ req.NoError(err)
+ req.NotNil(getResp)
+}
+
+func TestIndexRuleBindingRegistry(t *testing.T) {
+ req := require.New(t)
+ gracefulStop := setup(req, testData{
+ TLS: false,
+ addr: "localhost:17912",
+ })
+ defer gracefulStop()
+
+ conn, err := grpc.Dial("localhost:17912", grpc.WithInsecure())
+ req.NoError(err)
+ req.NotNil(conn)
+
+ client := databasev1.NewIndexRuleBindingRegistryServiceClient(conn)
+ req.NotNil(client)
+
+ meta := &commonv1.Metadata{
+ Group: "default",
+ Name: "sw-index-rule-binding",
+ }
+
+ getResp, err := client.Get(context.TODO(), &databasev1.IndexRuleBindingRegistryServiceGetRequest{Metadata: meta})
+
+ req.NoError(err)
+ req.NotNil(getResp)
+
+ // 2 - DELETE
+ deleteResp, err := client.Delete(context.TODO(), &databasev1.IndexRuleBindingRegistryServiceDeleteRequest{
+ Metadata: meta,
+ })
+ req.NoError(err)
+ req.NotNil(deleteResp)
+ req.True(deleteResp.GetDeleted())
+
+ // 3 - GET -> Nil
+ _, err = client.Get(context.TODO(), &databasev1.IndexRuleBindingRegistryServiceGetRequest{
+ Metadata: meta,
+ })
+ errStatus, _ := status.FromError(err)
+ req.Equal(errStatus.Message(), schema.ErrEntityNotFound.Error())
+
+ // 4 - CREATE
+ _, err = client.Create(context.TODO(), &databasev1.IndexRuleBindingRegistryServiceCreateRequest{IndexRuleBinding: getResp.GetIndexRuleBinding()})
+ req.NoError(err)
+
+ // 5 - GET - > Not Nil
+ getResp, err = client.Get(context.TODO(), &databasev1.IndexRuleBindingRegistryServiceGetRequest{
+ Metadata: meta,
+ })
+ req.NoError(err)
+ req.NotNil(getResp)
+}
+
+func TestIndexRuleRegistry(t *testing.T) {
+ req := require.New(t)
+ gracefulStop := setup(req, testData{
+ TLS: false,
+ addr: "localhost:17912",
+ })
+ defer gracefulStop()
+
+ conn, err := grpc.Dial("localhost:17912", grpc.WithInsecure())
+ req.NoError(err)
+ req.NotNil(conn)
+
+ client := databasev1.NewIndexRuleRegistryServiceClient(conn)
+ req.NotNil(client)
+
+ meta := &commonv1.Metadata{
+ Group: "default",
+ Name: "db.instance",
+ }
+
+ getResp, err := client.Get(context.TODO(), &databasev1.IndexRuleRegistryServiceGetRequest{Metadata: meta})
+
+ req.NoError(err)
+ req.NotNil(getResp)
+
+ // 2 - DELETE
+ deleteResp, err := client.Delete(context.TODO(), &databasev1.IndexRuleRegistryServiceDeleteRequest{
+ Metadata: meta,
+ })
+ req.NoError(err)
+ req.NotNil(deleteResp)
+ req.True(deleteResp.GetDeleted())
+
+ // 3 - GET -> Nil
+ _, err = client.Get(context.TODO(), &databasev1.IndexRuleRegistryServiceGetRequest{
+ Metadata: meta,
+ })
+ errStatus, _ := status.FromError(err)
+ req.Equal(errStatus.Message(), schema.ErrEntityNotFound.Error())
+
+ // 4 - CREATE
+ _, err = client.Create(context.TODO(), &databasev1.IndexRuleRegistryServiceCreateRequest{IndexRule: getResp.GetIndexRule()})
+ req.NoError(err)
+
+ // 5 - GET - > Not Nil
+ getResp, err = client.Get(context.TODO(), &databasev1.IndexRuleRegistryServiceGetRequest{
+ Metadata: meta,
+ })
+ req.NoError(err)
+ req.NotNil(getResp)
+}
diff --git a/banyand/liaison/grpc/server.go b/banyand/liaison/grpc/server.go
index 8f2eb3c..6e4c3ec 100644
--- a/banyand/liaison/grpc/server.go
+++ b/banyand/liaison/grpc/server.go
@@ -26,8 +26,10 @@ import (
"google.golang.org/grpc/credentials"
"github.com/apache/skywalking-banyandb/api/event"
+ databasev1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1"
streamv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/stream/v1"
"github.com/apache/skywalking-banyandb/banyand/discovery"
+ "github.com/apache/skywalking-banyandb/banyand/metadata"
"github.com/apache/skywalking-banyandb/banyand/queue"
"github.com/apache/skywalking-banyandb/pkg/logger"
"github.com/apache/skywalking-banyandb/pkg/partition"
@@ -53,18 +55,38 @@ type Server struct {
ser *grpclib.Server
pipeline queue.Queue
repo discovery.ServiceRepo
+ creds credentials.TransportCredentials
+ shardRepo *shardRepo
+ entityRepo *entityRepo
+ *streamRegistryServer
+ *indexRuleBindingRegistryServer
+ *indexRuleRegistryServer
+ *measureRegistryServer
+ *groupRegistryServer
streamv1.UnimplementedStreamServiceServer
- creds credentials.TransportCredentials
- shardRepo *shardRepo
- entityRepo *entityRepo
}
-func NewServer(_ context.Context, pipeline queue.Queue, repo discovery.ServiceRepo) *Server {
+func NewServer(_ context.Context, pipeline queue.Queue, repo discovery.ServiceRepo, schemaRegistry metadata.Service) *Server {
return &Server{
pipeline: pipeline,
repo: repo,
shardRepo: &shardRepo{shardEventsMap: make(map[identity]uint32)},
entityRepo: &entityRepo{entitiesMap: make(map[identity]partition.EntityLocator)},
+ streamRegistryServer: &streamRegistryServer{
+ schemaRegistry: schemaRegistry,
+ },
+ indexRuleBindingRegistryServer: &indexRuleBindingRegistryServer{
+ schemaRegistry: schemaRegistry,
+ },
+ indexRuleRegistryServer: &indexRuleRegistryServer{
+ schemaRegistry: schemaRegistry,
+ },
+ measureRegistryServer: &measureRegistryServer{
+ schemaRegistry: schemaRegistry,
+ },
+ groupRegistryServer: &groupRegistryServer{
+ schemaRegistry: schemaRegistry,
+ },
}
}
@@ -129,6 +151,13 @@ func (s *Server) Serve() error {
opts = append(opts, grpclib.MaxRecvMsgSize(s.maxRecvMsgSize))
s.ser = grpclib.NewServer(opts...)
streamv1.RegisterStreamServiceServer(s.ser, s)
+ // register *Registry
+ databasev1.RegisterGroupRegistryServiceServer(s.ser, s.groupRegistryServer)
+ databasev1.RegisterIndexRuleBindingRegistryServiceServer(s.ser, s.indexRuleBindingRegistryServer)
+ databasev1.RegisterIndexRuleRegistryServiceServer(s.ser, s.indexRuleRegistryServer)
+ databasev1.RegisterStreamRegistryServiceServer(s.ser, s.streamRegistryServer)
+ databasev1.RegisterMeasureRegistryServiceServer(s.ser, s.measureRegistryServer)
+
s.log.Info().Str("addr", s.addr).Msg("Listening to")
return s.ser.Serve(lis)
}
diff --git a/banyand/liaison/grpc/stream_test.go b/banyand/liaison/grpc/stream_test.go
index 9a18b21..d2bf5aa 100644
--- a/banyand/liaison/grpc/stream_test.go
+++ b/banyand/liaison/grpc/stream_test.go
@@ -24,6 +24,7 @@ import (
"io"
"path/filepath"
"runtime"
+ "sync"
"testing"
"time"
@@ -44,6 +45,20 @@ import (
"github.com/apache/skywalking-banyandb/pkg/test"
)
+var _ run.PreRunner = (*preloadStreamService)(nil)
+
+type preloadStreamService struct {
+ metaSvc metadata.Service
+}
+
+func (p *preloadStreamService) Name() string {
+ return "preload-stream"
+}
+
+func (p *preloadStreamService) PreRun() error {
+ return test.PreloadSchema(p.metaSvc.SchemaRegistry())
+}
+
type testData struct {
certFile string
serverHostOverride string
@@ -67,20 +82,25 @@ func setup(req *require.Assertions, testData testData) func() {
// Init `Metadata` module
metaSvc, err := metadata.NewService(context.TODO())
req.NoError(err)
+ // Init `Stream` module
streamSvc, err := stream.NewService(context.TODO(), metaSvc, repo, pipeline)
req.NoError(err)
- q, err := query.NewExecutor(context.TODO(), streamSvc, repo, pipeline)
+ // Init `Query` module
+ q, err := query.NewExecutor(context.TODO(), streamSvc, metaSvc, repo, pipeline)
req.NoError(err)
- tcp := NewServer(context.TODO(), pipeline, repo)
+ tcp := NewServer(context.TODO(), pipeline, repo, metaSvc)
closer := run.NewTester("closer")
startListener := run.NewTester("started-listener")
+
+ preloadStreamSvc := &preloadStreamService{metaSvc: metaSvc}
g.Register(
closer,
repo,
pipeline,
metaSvc,
+ preloadStreamSvc,
streamSvc,
q,
tcp,
@@ -88,7 +108,7 @@ func setup(req *require.Assertions, testData testData) func() {
)
// Create a random directory
rootPath, deferFunc := test.Space(req)
- flags := []string{"--root-path=" + rootPath}
+ flags := []string{"--root-path=" + rootPath, "--metadata-root-path=" + test.RandomTempDir()}
if testData.TLS {
flags = append(flags, "--tls=true")
certFile := filepath.Join(testData.basePath, "testdata/server_cert.pem")
@@ -100,7 +120,12 @@ func setup(req *require.Assertions, testData testData) func() {
err = g.RegisterFlags().Parse(flags)
req.NoError(err)
+ wg := sync.WaitGroup{}
+
+ wg.Add(1)
go func() {
+ // we have to wait for this goroutine to safely shutdown
+ defer wg.Done()
errRun := g.Run()
if errRun != nil {
startListener.GracefulStop()
@@ -111,6 +136,7 @@ func setup(req *require.Assertions, testData testData) func() {
req.NoError(startListener.WaitUntilStarted())
return func() {
closer.GracefulStop()
+ wg.Wait()
}
}
diff --git a/banyand/liaison/liaison.go b/banyand/liaison/liaison.go
index 8eb9274..e5a19dc 100644
--- a/banyand/liaison/liaison.go
+++ b/banyand/liaison/liaison.go
@@ -22,6 +22,7 @@ import (
"github.com/apache/skywalking-banyandb/banyand/discovery"
"github.com/apache/skywalking-banyandb/banyand/liaison/grpc"
+ "github.com/apache/skywalking-banyandb/banyand/metadata"
"github.com/apache/skywalking-banyandb/banyand/queue"
"github.com/apache/skywalking-banyandb/pkg/run"
)
@@ -32,6 +33,6 @@ type Endpoint interface {
run.Service
}
-func NewEndpoint(ctx context.Context, pipeline queue.Queue, repo discovery.ServiceRepo) (Endpoint, error) {
- return grpc.NewServer(ctx, pipeline, repo), nil
+func NewEndpoint(ctx context.Context, pipeline queue.Queue, repo discovery.ServiceRepo, schemaRegistry metadata.Service) (Endpoint, error) {
+ return grpc.NewServer(ctx, pipeline, repo, schemaRegistry), nil
}
diff --git a/banyand/metadata/metadata.go b/banyand/metadata/metadata.go
index 1c42f5b..5113d02 100644
--- a/banyand/metadata/metadata.go
+++ b/banyand/metadata/metadata.go
@@ -19,6 +19,7 @@ package metadata
import (
"context"
+ "errors"
"time"
"go.uber.org/multierr"
@@ -37,42 +38,86 @@ type IndexFilter interface {
type Repo interface {
IndexFilter
- Stream() schema.Stream
+ StreamRegistry() schema.Stream
+ IndexRuleRegistry() schema.IndexRule
+ IndexRuleBindingRegistry() schema.IndexRuleBinding
+ MeasureRegistry() schema.Measure
+ GroupRegistry() schema.Group
}
type Service interface {
Repo
- run.Unit
+ run.PreRunner
+ run.Service
+ run.Config
+ SchemaRegistry() schema.Registry
}
type service struct {
- stream schema.Stream
- indexRule schema.IndexRule
- indexRuleBinding schema.IndexRuleBinding
+ schemaRegistry schema.Registry
+ rootDir string
}
-func NewService(_ context.Context) (Service, error) {
- stream, err := schema.NewStream()
- if err != nil {
- return nil, err
- }
- indexRule, err := schema.NewIndexRule()
- if err != nil {
- return nil, err
+func (s *service) FlagSet() *run.FlagSet {
+ fs := run.NewFlagSet("metadata")
+ fs.StringVarP(&s.rootDir, "metadata-root-path", "", "/tmp", "the root path of metadata")
+ return fs
+}
+
+func (s *service) Validate() error {
+ if s.rootDir == "" {
+ return errors.New("rootDir is empty")
}
- indexRuleBinding, err := schema.NewIndexRuleBinding()
+ return nil
+}
+
+func (s *service) PreRun() error {
+ var err error
+ s.schemaRegistry, err = schema.NewEtcdSchemaRegistry(schema.UseRandomListener(),
+ schema.RootDir(s.rootDir))
if err != nil {
- return nil, err
+ return err
}
- return &service{
- stream: stream,
- indexRule: indexRule,
- indexRuleBinding: indexRuleBinding,
- }, nil
+ <-s.schemaRegistry.ReadyNotify()
+ return nil
+}
+
+func (s *service) Serve() error {
+ <-s.schemaRegistry.StoppingNotify()
+ return nil
+}
+
+func (s *service) GracefulStop() {
+ _ = s.schemaRegistry.Close()
+ <-s.schemaRegistry.StopNotify()
+}
+
+func NewService(_ context.Context) (Service, error) {
+ return &service{}, nil
+}
+
+func (s *service) SchemaRegistry() schema.Registry {
+ return s.schemaRegistry
+}
+
+func (s *service) StreamRegistry() schema.Stream {
+ return s.schemaRegistry
+}
+
+func (s *service) IndexRuleRegistry() schema.IndexRule {
+ return s.schemaRegistry
+}
+
+func (s *service) IndexRuleBindingRegistry() schema.IndexRuleBinding {
+ return s.schemaRegistry
+}
+
+func (s *service) MeasureRegistry() schema.Measure {
+ return s.schemaRegistry
}
-func (s *service) Stream() schema.Stream {
- return s.stream
+func (s *service) GroupRegistry() schema.Group {
+ return s.schemaRegistry
}
func (s *service) Name() string {
@@ -80,7 +125,7 @@ func (s *service) Name() string {
}
func (s *service) IndexRules(ctx context.Context, subject *commonv1.Metadata) ([]*databasev1.IndexRule, error) {
- bindings, err := s.indexRuleBinding.List(ctx, schema.ListOpt{Group: subject.Group})
+ bindings, err := s.schemaRegistry.ListIndexRuleBinding(ctx, schema.ListOpt{Group: subject.Group})
if err != nil {
return nil, err
}
@@ -100,7 +145,7 @@ func (s *service) IndexRules(ctx context.Context, subject *commonv1.Metadata) ([
result := make([]*databasev1.IndexRule, 0, len(foundRules))
var indexRuleErr error
for _, rule := range foundRules {
- r, getErr := s.indexRule.Get(ctx, &commonv1.Metadata{
+ r, getErr := s.schemaRegistry.GetIndexRule(ctx, &commonv1.Metadata{
Name: rule,
Group: subject.Group,
})
diff --git a/banyand/metadata/metadata_test.go b/banyand/metadata/metadata_test.go
index 528a161..6abc9be 100644
--- a/banyand/metadata/metadata_test.go
+++ b/banyand/metadata/metadata_test.go
@@ -19,13 +19,14 @@ package metadata
import (
"context"
+ "os"
"testing"
"github.com/stretchr/testify/assert"
commonv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/common/v1"
databasev1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1"
- "github.com/apache/skywalking-banyandb/banyand/metadata/schema"
+ "github.com/apache/skywalking-banyandb/pkg/test"
)
func Test_service_RulesBySubject(t *testing.T) {
@@ -33,10 +34,26 @@ func Test_service_RulesBySubject(t *testing.T) {
subject *commonv1.Metadata
}
is := assert.New(t)
+ ctx := context.TODO()
+ s, _ := NewService(ctx)
+ is.NotNil(s)
+ rootDir := test.RandomTempDir()
+ err := s.FlagSet().Parse([]string{"--metadata-root-path=" + rootDir})
+ is.NoError(err)
+ err = s.PreRun()
+ is.NoError(err)
+ defer func() {
+ s.GracefulStop()
+ _ = os.RemoveAll(rootDir)
+ }()
+
+ err = test.PreloadSchema(s.SchemaRegistry())
+ is.NoError(err)
+
tests := []struct {
name string
args args
- want []*databasev1.IndexRule
+ want []string
wantErr bool
}{
{
@@ -44,7 +61,7 @@ func Test_service_RulesBySubject(t *testing.T) {
args: args{
subject: createSubject("sw", "default"),
},
- want: getIndexRule(
+ want: []string{
"trace_id",
"duration",
"endpoint_id",
@@ -54,20 +71,19 @@ func Test_service_RulesBySubject(t *testing.T) {
"db.type",
"mq.broker",
"mq.queue",
- "mq.topic"),
+ "mq.topic",
+ },
},
{
name: "got empty idWithShard",
args: args{
subject: createSubject("invalid", "default"),
},
- want: make([]*databasev1.IndexRule, 0),
+ want: make([]string, 0),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- ctx := context.TODO()
- s, err := NewService(ctx)
if (err != nil) != tt.wantErr {
t.Errorf("NewService() error = %v, wantErr %v", err, tt.wantErr)
return
@@ -77,16 +93,16 @@ func Test_service_RulesBySubject(t *testing.T) {
t.Errorf("RulesBySubject() error = %v, wantErr %v", err, tt.wantErr)
return
}
- is.Equal(tt.want, got)
+ is.Equal(getIndexRule(s, tt.want...), got)
})
}
}
-func getIndexRule(names ...string) []*databasev1.IndexRule {
- ruleRepo, _ := schema.NewIndexRule()
+func getIndexRule(s Service, names ...string) []*databasev1.IndexRule {
+ ruleRepo := s.IndexRuleRegistry()
result := make([]*databasev1.IndexRule, 0, len(names))
for _, name := range names {
- indexRule, _ := ruleRepo.Get(context.TODO(), &commonv1.Metadata{
+ indexRule, _ := ruleRepo.GetIndexRule(context.TODO(), &commonv1.Metadata{
Group: "default",
Name: name,
})
diff --git a/banyand/metadata/schema/etcd.go b/banyand/metadata/schema/etcd.go
new file mode 100644
index 0000000..ccd7794
--- /dev/null
+++ b/banyand/metadata/schema/etcd.go
@@ -0,0 +1,502 @@
+// Licensed to Apache Software Foundation (ASF) under one or more contributor
+// license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright
+// ownership. Apache Software Foundation (ASF) licenses this file to you under
+// the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package schema
+
+import (
+ "context"
+ "fmt"
+ "math/rand"
+ "net/url"
+ "os"
+ "path/filepath"
+ "strings"
+
+ "github.com/pkg/errors"
+ clientv3 "go.etcd.io/etcd/client/v3"
+ "go.etcd.io/etcd/server/v3/embed"
+ "google.golang.org/protobuf/proto"
+ "google.golang.org/protobuf/types/known/timestamppb"
+
+ commonv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/common/v1"
+ databasev1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1"
+)
+
+var (
+ _ Stream = (*etcdSchemaRegistry)(nil)
+ _ IndexRuleBinding = (*etcdSchemaRegistry)(nil)
+ _ IndexRule = (*etcdSchemaRegistry)(nil)
+ _ Measure = (*etcdSchemaRegistry)(nil)
+ _ Group = (*etcdSchemaRegistry)(nil)
+
+ ErrEntityNotFound = errors.New("entity is not found")
+ ErrUnexpectedNumberOfEntities = errors.New("unexpected number of entities")
+
+ GroupsKeyPrefix = "/groups/"
+ GroupMetadataKey = "/__meta_group__"
+ StreamKeyPrefix = "/streams/"
+ IndexRuleBindingKeyPrefix = "/index-rule-bindings/"
+ IndexRuleKeyPrefix = "/index-rules/"
+ MeasureKeyPrefix = "/measures/"
+)
+
+type RegistryOption func(*etcdSchemaRegistryConfig)
+
+func RootDir(rootDir string) RegistryOption {
+ return func(config *etcdSchemaRegistryConfig) {
+ config.rootDir = rootDir
+ }
+}
+
+func randomUnixDomainListener() (string, string) {
+ i := rand.Uint64()
+ return fmt.Sprintf("%s://localhost:%d%06d", "unix", os.Getpid(), i),
+ fmt.Sprintf("%s://localhost:%d%06d", "unix", os.Getpid(), i+1)
+}
+
+func UseRandomListener() RegistryOption {
+ return func(config *etcdSchemaRegistryConfig) {
+ lc, lp := randomUnixDomainListener()
+ config.listenerClientURL = lc
+ config.listenerPeerURL = lp
+ }
+}
+
+type etcdSchemaRegistry struct {
+ server *embed.Etcd
+ kv clientv3.KV
+}
+
+type etcdSchemaRegistryConfig struct {
+ // rootDir is the root directory for etcd storage
+ rootDir string
+ // listenerClientURL is the listener for client
+ listenerClientURL string
+ // listenerPeerURL is the listener for peer
+ listenerPeerURL string
+}
+
+func (e *etcdSchemaRegistry) GetGroup(ctx context.Context, group string) (*commonv1.Group, error) {
+ var entity commonv1.Group
+ err := e.get(ctx, formatGroupKey(group), &entity)
+ if err != nil {
+ return nil, err
+ }
+ return &entity, nil
+}
+
+func (e *etcdSchemaRegistry) ListGroup(ctx context.Context) ([]string, error) {
+ messages, err := e.kv.Get(ctx, GroupsKeyPrefix, clientv3.WithFromKey(), clientv3.WithRange(incrementLastByte(GroupsKeyPrefix)))
+ if err != nil {
+ return nil, err
+ }
+
+ if messages.Count == 0 {
+ return []string{}, nil
+ }
+
+ var groups []string
+ for _, kv := range messages.Kvs {
+ // kv.Key = "/groups/" + {group} + "/__meta_info__"
+ groupWithSuffix := strings.TrimPrefix(string(kv.Key), GroupsKeyPrefix)
+ if strings.HasSuffix(groupWithSuffix, GroupMetadataKey) {
+ groups = append(groups, strings.TrimSuffix(groupWithSuffix, GroupMetadataKey))
+ }
+ }
+
+ return groups, nil
+}
+
+func (e *etcdSchemaRegistry) DeleteGroup(ctx context.Context, group string) (bool, error) {
+ g, err := e.GetGroup(ctx, group)
+ if err != nil {
+ return false, errors.Wrap(err, group)
+ }
+ keyPrefix := GroupsKeyPrefix + g.GetName() + "/"
+ _, err = e.kv.Delete(ctx, keyPrefix, clientv3.WithRange(incrementLastByte(keyPrefix)))
+ if err != nil {
+ return false, err
+ }
+ return true, nil
+}
+
+func (e *etcdSchemaRegistry) CreateGroup(ctx context.Context, group string) error {
+ _, err := e.GetGroup(ctx, group)
+ if err != nil && !errors.Is(err, ErrEntityNotFound) {
+ return errors.Wrap(err, group)
+ }
+ return e.touchGroup(ctx, &commonv1.Group{
+ Name: group,
+ })
+}
+
+func (e *etcdSchemaRegistry) touchGroup(ctx context.Context, g *commonv1.Group) error {
+ groupBytes, err := proto.Marshal(g)
+ if err != nil {
+ return err
+ }
+ g.UpdatedAt = timestamppb.Now()
+ _, err = e.kv.Put(ctx, formatGroupKey(g.GetName()), string(groupBytes))
+ return err
+}
+
+func (e *etcdSchemaRegistry) GetMeasure(ctx context.Context, metadata *commonv1.Metadata) (*databasev1.Measure, error) {
+ var entity databasev1.Measure
+ if err := e.get(ctx, formatMeasureKey(metadata), &entity); err != nil {
+ return nil, err
+ }
+ return &entity, nil
+}
+
+func (e *etcdSchemaRegistry) ListMeasure(ctx context.Context, opt ListOpt) ([]*databasev1.Measure, error) {
+ keyPrefixes, err := e.listPrefixesForEntity(ctx, opt, MeasureKeyPrefix)
+ if err != nil {
+ return nil, err
+ }
+
+ var entities []*databasev1.Measure
+ for _, keyPrefix := range keyPrefixes {
+ messages, err := e.listWithPrefix(ctx, keyPrefix, func() proto.Message {
+ return &databasev1.Measure{}
+ })
+ if err != nil {
+ return nil, err
+ }
+ for _, message := range messages {
+ entities = append(entities, message.(*databasev1.Measure))
+ }
+ }
+ return entities, nil
+}
+
+func (e *etcdSchemaRegistry) UpdateMeasure(ctx context.Context, measure *databasev1.Measure) error {
+ g, err := e.GetGroup(ctx, measure.GetMetadata().GetGroup())
+ if err != nil {
+ return errors.Wrap(err, measure.GetMetadata().GetGroup())
+ }
+ return e.update(ctx, g, formatMeasureKey(measure.GetMetadata()), measure)
+}
+
+func (e *etcdSchemaRegistry) DeleteMeasure(ctx context.Context, metadata *commonv1.Metadata) (bool, error) {
+ g, err := e.GetGroup(ctx, metadata.GetGroup())
+ if err != nil {
+ return false, errors.Wrap(err, metadata.GetGroup())
+ }
+ return e.delete(ctx, g, formatMeasureKey(metadata))
+}
+
+func (e *etcdSchemaRegistry) GetStream(ctx context.Context, metadata *commonv1.Metadata) (*databasev1.Stream, error) {
+ var entity databasev1.Stream
+ if err := e.get(ctx, formatSteamKey(metadata), &entity); err != nil {
+ return nil, err
+ }
+ return &entity, nil
+}
+
+func (e *etcdSchemaRegistry) ListStream(ctx context.Context, opt ListOpt) ([]*databasev1.Stream, error) {
+ keyPrefixes, err := e.listPrefixesForEntity(ctx, opt, StreamKeyPrefix)
+ if err != nil {
+ return nil, err
+ }
+
+ var entities []*databasev1.Stream
+ for _, keyPrefix := range keyPrefixes {
+ messages, err := e.listWithPrefix(ctx, keyPrefix, func() proto.Message {
+ return &databasev1.Stream{}
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ for _, message := range messages {
+ entities = append(entities, message.(*databasev1.Stream))
+ }
+ }
+
+ return entities, nil
+}
+
+func (e *etcdSchemaRegistry) UpdateStream(ctx context.Context, stream *databasev1.Stream) error {
+ g, err := e.GetGroup(ctx, stream.GetMetadata().GetGroup())
+ if err != nil {
+ return errors.Wrap(err, stream.GetMetadata().GetGroup())
+ }
+ return e.update(ctx, g, formatSteamKey(stream.GetMetadata()), stream)
+}
+
+func (e *etcdSchemaRegistry) DeleteStream(ctx context.Context, metadata *commonv1.Metadata) (bool, error) {
+ g, err := e.GetGroup(ctx, metadata.GetGroup())
+ if err != nil {
+ return false, errors.Wrap(err, metadata.GetGroup())
+ }
+ return e.delete(ctx, g, formatSteamKey(metadata))
+}
+
+func (e *etcdSchemaRegistry) GetIndexRuleBinding(ctx context.Context, metadata *commonv1.Metadata) (*databasev1.IndexRuleBinding, error) {
+ var indexRuleBinding databasev1.IndexRuleBinding
+ if err := e.get(ctx, formatIndexRuleBindingKey(metadata), &indexRuleBinding); err != nil {
+ return nil, err
+ }
+ return &indexRuleBinding, nil
+}
+
+func (e *etcdSchemaRegistry) ListIndexRuleBinding(ctx context.Context, opt ListOpt) ([]*databasev1.IndexRuleBinding, error) {
+ keyPrefixes, err := e.listPrefixesForEntity(ctx, opt, IndexRuleBindingKeyPrefix)
+ if err != nil {
+ return nil, err
+ }
+
+ var entities []*databasev1.IndexRuleBinding
+ for _, keyPrefix := range keyPrefixes {
+ messages, err := e.listWithPrefix(ctx, keyPrefix, func() proto.Message {
+ return &databasev1.IndexRuleBinding{}
+ })
+ if err != nil {
+ return nil, err
+ }
+ for _, message := range messages {
+ entities = append(entities, message.(*databasev1.IndexRuleBinding))
+ }
+ }
+ return entities, nil
+}
+
+func (e *etcdSchemaRegistry) UpdateIndexRuleBinding(ctx context.Context, indexRuleBinding *databasev1.IndexRuleBinding) error {
+ g, err := e.GetGroup(ctx, indexRuleBinding.GetMetadata().GetGroup())
+ if err != nil {
+ return errors.Wrap(err, indexRuleBinding.GetMetadata().GetGroup())
+ }
+ return e.update(ctx, g, formatIndexRuleBindingKey(indexRuleBinding.GetMetadata()), indexRuleBinding)
+}
+
+func (e *etcdSchemaRegistry) DeleteIndexRuleBinding(ctx context.Context, metadata *commonv1.Metadata) (bool, error) {
+ g, err := e.GetGroup(ctx, metadata.GetGroup())
+ if err != nil {
+ return false, errors.Wrap(err, metadata.GetGroup())
+ }
+ return e.delete(ctx, g, formatIndexRuleBindingKey(metadata))
+}
+
+func (e *etcdSchemaRegistry) GetIndexRule(ctx context.Context, metadata *commonv1.Metadata) (*databasev1.IndexRule, error) {
+ var entity databasev1.IndexRule
+ if err := e.get(ctx, formatIndexRuleKey(metadata), &entity); err != nil {
+ return nil, err
+ }
+ return &entity, nil
+}
+
+func (e *etcdSchemaRegistry) ListIndexRule(ctx context.Context, opt ListOpt) ([]*databasev1.IndexRule, error) {
+ keyPrefixes, err := e.listPrefixesForEntity(ctx, opt, IndexRuleKeyPrefix)
+ if err != nil {
+ return nil, err
+ }
+
+ var entities []*databasev1.IndexRule
+ for _, keyPrefix := range keyPrefixes {
+ messages, err := e.listWithPrefix(ctx, keyPrefix, func() proto.Message {
+ return &databasev1.IndexRule{}
+ })
+ if err != nil {
+ return nil, err
+ }
+ for _, message := range messages {
+ entities = append(entities, message.(*databasev1.IndexRule))
+ }
+ }
+ return entities, nil
+}
+
+func (e *etcdSchemaRegistry) UpdateIndexRule(ctx context.Context, indexRule *databasev1.IndexRule) error {
+ g, err := e.GetGroup(ctx, indexRule.GetMetadata().GetGroup())
+ if err != nil {
+ return errors.Wrap(err, indexRule.GetMetadata().GetGroup())
+ }
+ return e.update(ctx, g, formatIndexRuleKey(indexRule.GetMetadata()), indexRule)
+}
+
+func (e *etcdSchemaRegistry) DeleteIndexRule(ctx context.Context, metadata *commonv1.Metadata) (bool, error) {
+ g, err := e.GetGroup(ctx, metadata.GetGroup())
+ if err != nil {
+ return false, errors.Wrap(err, metadata.GetGroup())
+ }
+ return e.delete(ctx, g, formatIndexRuleKey(metadata))
+}
+
+func (e *etcdSchemaRegistry) ReadyNotify() <-chan struct{} {
+ return e.server.Server.ReadyNotify()
+}
+
+func (e *etcdSchemaRegistry) StopNotify() <-chan struct{} {
+ return e.server.Server.StopNotify()
+}
+
+func (e *etcdSchemaRegistry) StoppingNotify() <-chan struct{} {
+ return e.server.Server.StoppingNotify()
+}
+
+func (e *etcdSchemaRegistry) Close() error {
+ e.server.Close()
+ return nil
+}
+
+func NewEtcdSchemaRegistry(options ...RegistryOption) (Registry, error) {
+ registryConfig := &etcdSchemaRegistryConfig{
+ rootDir: os.TempDir(),
+ listenerClientURL: embed.DefaultListenClientURLs,
+ listenerPeerURL: embed.DefaultListenPeerURLs,
+ }
+ for _, opt := range options {
+ opt(registryConfig)
+ }
+ // TODO: allow use cluster setting
+ embedConfig := newStandaloneEtcdConfig(registryConfig)
+ e, err := embed.StartEtcd(embedConfig)
+ if err != nil {
+ return nil, err
+ }
+ if e != nil {
+ <-e.Server.ReadyNotify() // wait for e.Server to join the cluster
+ }
+ client, err := clientv3.NewFromURL(e.Config().ACUrls[0].String())
+ if err != nil {
+ return nil, err
+ }
+ kvClient := clientv3.NewKV(client)
+ reg := &etcdSchemaRegistry{
+ server: e,
+ kv: kvClient,
+ }
+ return reg, nil
+}
+
+func (e *etcdSchemaRegistry) get(ctx context.Context, key string, message proto.Message) error {
+ resp, err := e.kv.Get(ctx, key)
+ if err != nil {
+ return err
+ }
+ if resp.Count == 0 {
+ return ErrEntityNotFound
+ }
+ if resp.Count > 1 {
+ return ErrUnexpectedNumberOfEntities
+ }
+ if err := proto.Unmarshal(resp.Kvs[0].Value, message); err != nil {
+ return err
+ }
+ return nil
+}
+
+func (e *etcdSchemaRegistry) update(ctx context.Context, group *commonv1.Group, key string, message proto.Message) error {
+ val, err := proto.Marshal(message)
+ if err != nil {
+ return err
+ }
+ _, err = e.kv.Put(ctx, key, string(val))
+ if err != nil {
+ return err
+ }
+ return e.touchGroup(ctx, group)
+}
+
+func (e *etcdSchemaRegistry) listWithPrefix(ctx context.Context, prefix string, factory func() proto.Message) ([]proto.Message, error) {
+ resp, err := e.kv.Get(ctx, prefix, clientv3.WithFromKey(), clientv3.WithRange(incrementLastByte(prefix)))
+ if err != nil {
+ return nil, err
+ }
+ entities := make([]proto.Message, resp.Count)
+ for i := int64(0); i < resp.Count; i++ {
+ message := factory()
+ if err := proto.Unmarshal(resp.Kvs[0].Value, message); err != nil {
+ return nil, err
+ }
+ entities[i] = message
+ }
+ return entities, nil
+}
+
+func (e *etcdSchemaRegistry) listPrefixesForEntity(ctx context.Context, opt ListOpt, entityPrefix string) ([]string, error) {
+ var keyPrefixes []string
+
+ if opt.Group != "" {
+ keyPrefixes = append(keyPrefixes, GroupsKeyPrefix+opt.Group+entityPrefix)
+ } else {
+ groups, err := e.ListGroup(ctx)
+ if err != nil {
+ return nil, err
+ }
+ for _, g := range groups {
+ keyPrefixes = append(keyPrefixes, GroupsKeyPrefix+g+entityPrefix)
+ }
+ }
+
+ return keyPrefixes, nil
+}
+
+func (e *etcdSchemaRegistry) delete(ctx context.Context, g *commonv1.Group, key string) (bool, error) {
+ resp, err := e.kv.Delete(ctx, key)
+ if err != nil {
+ return false, err
+ }
+ if resp.Deleted > 0 {
+ return true, e.touchGroup(ctx, g)
+ }
+ return false, nil
+}
+
+func formatIndexRuleKey(metadata *commonv1.Metadata) string {
+ return formatKey(IndexRuleKeyPrefix, metadata)
+}
+
+func formatIndexRuleBindingKey(metadata *commonv1.Metadata) string {
+ return formatKey(IndexRuleBindingKeyPrefix, metadata)
+}
+
+func formatSteamKey(metadata *commonv1.Metadata) string {
+ return formatKey(StreamKeyPrefix, metadata)
+}
+
+func formatMeasureKey(metadata *commonv1.Metadata) string {
+ return formatKey(MeasureKeyPrefix, metadata)
+}
+
+func formatKey(entityPrefix string, metadata *commonv1.Metadata) string {
+ return GroupsKeyPrefix + metadata.GetGroup() + entityPrefix + metadata.GetName()
+}
+
+func formatGroupKey(group string) string {
+ return GroupsKeyPrefix + group + GroupMetadataKey
+}
+
+func incrementLastByte(key string) string {
+ bb := []byte(key)
+ bb[len(bb)-1]++
+ return string(bb)
+}
+
+func newStandaloneEtcdConfig(config *etcdSchemaRegistryConfig) *embed.Config {
+ cfg := embed.NewConfig()
+ // TODO: allow user to set path
+ cfg.Dir = filepath.Join(config.rootDir, "metadata")
+ cURL, _ := url.Parse(config.listenerClientURL)
+ pURL, _ := url.Parse(config.listenerPeerURL)
+
+ cfg.ClusterState = "new"
+ cfg.LCUrls, cfg.ACUrls = []url.URL{*cURL}, []url.URL{*cURL}
+ cfg.LPUrls, cfg.APUrls = []url.URL{*pURL}, []url.URL{*pURL}
+ cfg.InitialCluster = ",default=" + pURL.String()
+ return cfg
+}
diff --git a/banyand/metadata/schema/etcd_test.go b/banyand/metadata/schema/etcd_test.go
new file mode 100644
index 0000000..a079155
--- /dev/null
+++ b/banyand/metadata/schema/etcd_test.go
@@ -0,0 +1,375 @@
+// Licensed to Apache Software Foundation (ASF) under one or more contributor
+// license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright
+// ownership. Apache Software Foundation (ASF) licenses this file to you under
+// the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package schema
+
+import (
+ "context"
+ "embed"
+ "fmt"
+ "os"
+ "path"
+ "testing"
+
+ "github.com/google/uuid"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "google.golang.org/protobuf/encoding/protojson"
+
+ commonv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/common/v1"
+ databasev1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1"
+)
+
+const indexRuleDir = "testdata/index_rules"
+
+var (
+ //go:embed testdata/index_rules/*.json
+ indexRuleStore embed.FS
+ //go:embed testdata/index_rule_binding.json
+ indexRuleBindingJSON string
+ //go:embed testdata/stream.json
+ streamJSON string
+)
+
+func PreloadSchema(e Registry) error {
+ if err := e.CreateGroup(context.TODO(), "default"); err != nil {
+ return err
+ }
+
+ s := &databasev1.Stream{}
+ if err := protojson.Unmarshal([]byte(streamJSON), s); err != nil {
+ return err
+ }
+ err := e.UpdateStream(context.Background(), s)
+ if err != nil {
+ return err
+ }
+
+ indexRuleBinding := &databasev1.IndexRuleBinding{}
+ if err = protojson.Unmarshal([]byte(indexRuleBindingJSON), indexRuleBinding); err != nil {
+ return err
+ }
+ err = e.UpdateIndexRuleBinding(context.Background(), indexRuleBinding)
+ if err != nil {
+ return err
+ }
+
+ entries, err := indexRuleStore.ReadDir(indexRuleDir)
+ if err != nil {
+ return err
+ }
+ for _, entry := range entries {
+ data, err := indexRuleStore.ReadFile(indexRuleDir + "/" + entry.Name())
+ if err != nil {
+ return err
+ }
+ var idxRule databasev1.IndexRule
+ err = protojson.Unmarshal(data, &idxRule)
+ if err != nil {
+ return err
+ }
+ err = e.UpdateIndexRule(context.Background(), &idxRule)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+type HasMetadata interface {
+ GetMetadata() *commonv1.Metadata
+}
+
+func randomTempDir() string {
+ return path.Join(os.TempDir(), fmt.Sprintf("banyandb-embed-etcd-%s", uuid.New().String()))
+}
+
+func useRandomTempDir() RegistryOption {
+ return func(config *etcdSchemaRegistryConfig) {
+ config.rootDir = randomTempDir()
+ }
+}
+
+func useUnixDomain() RegistryOption {
+ return func(config *etcdSchemaRegistryConfig) {
+ config.listenerClientURL, config.listenerPeerURL = randomUnixDomainListener()
+ }
+}
+
+func Test_Etcd_Entity_Get(t *testing.T) {
+ tester := assert.New(t)
+ registry, err := NewEtcdSchemaRegistry(useUnixDomain(), useRandomTempDir())
+ tester.NoError(err)
+ tester.NotNil(registry)
+ defer registry.Close()
+
+ err = PreloadSchema(registry)
+ tester.NoError(err)
+
+ tests := []struct {
+ name string
+ meta *commonv1.Metadata
+ get func(Registry, *commonv1.Metadata) (HasMetadata, error)
+ expectedErr bool
+ }{
+ {
+ name: "Get Stream",
+ meta: &commonv1.Metadata{Name: "sw", Group: "default"},
+ get: func(r Registry, meta *commonv1.Metadata) (HasMetadata, error) {
+ stm, innerErr := registry.GetStream(context.TODO(), meta)
+ if innerErr != nil {
+ return nil, innerErr
+ }
+ return HasMetadata(stm), nil
+ },
+ },
+ {
+ name: "Get IndexRuleBinding",
+ meta: &commonv1.Metadata{Name: "sw-index-rule-binding", Group: "default"},
+ get: func(r Registry, meta *commonv1.Metadata) (HasMetadata, error) {
+ e, innerErr := registry.GetIndexRuleBinding(context.TODO(), meta)
+ if innerErr != nil {
+ return nil, innerErr
+ }
+ return HasMetadata(e), nil
+ },
+ },
+ {
+ name: "Get IndexRule",
+ meta: &commonv1.Metadata{Name: "db.instance", Group: "default"},
+ get: func(r Registry, meta *commonv1.Metadata) (HasMetadata, error) {
+ e, innerErr := registry.GetIndexRule(context.TODO(), meta)
+ if innerErr != nil {
+ return nil, innerErr
+ }
+ return HasMetadata(e), nil
+ },
+ },
+ {
+ name: "Get unknown Measure",
+ meta: &commonv1.Metadata{Name: "unknown-measure", Group: "default"},
+ get: func(r Registry, meta *commonv1.Metadata) (HasMetadata, error) {
+ e, innerErr := registry.GetMeasure(context.TODO(), meta)
+ if innerErr != nil {
+ return nil, innerErr
+ }
+ return HasMetadata(e), nil
+ },
+ expectedErr: true,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ req := require.New(t)
+ entity, err := tt.get(registry, tt.meta)
+ if !tt.expectedErr {
+ req.NoError(err)
+ req.NotNil(entity)
+ req.Equal(entity.GetMetadata().GetGroup(), tt.meta.GetGroup())
+ req.Equal(entity.GetMetadata().GetName(), tt.meta.GetName())
+ } else {
+ req.Error(err)
+ }
+ })
+ }
+}
+
+func Test_Etcd_Entity_List(t *testing.T) {
+ tester := assert.New(t)
+ registry, err := NewEtcdSchemaRegistry(useUnixDomain(), useRandomTempDir())
+ tester.NoError(err)
+ tester.NotNil(registry)
+ defer registry.Close()
+
+ err = PreloadSchema(registry)
+ tester.NoError(err)
+
+ tests := []struct {
+ name string
+ list func(Registry) (int, error)
+ expectedLen int
+ }{
+ {
+ name: "List Stream without Group",
+ list: func(r Registry) (int, error) {
+ entities, innerErr := r.ListStream(context.TODO(), ListOpt{})
+ if innerErr != nil {
+ return 0, innerErr
+ }
+ return len(entities), nil
+ },
+ expectedLen: 1,
+ },
+ {
+ name: "List Stream with Group default",
+ list: func(r Registry) (int, error) {
+ entities, innerErr := r.ListStream(context.TODO(), ListOpt{Group: "default"})
+ if innerErr != nil {
+ return 0, innerErr
+ }
+ return len(entities), nil
+ },
+ expectedLen: 1,
+ },
+ {
+ name: "List IndexRuleBinding without Group",
+ list: func(r Registry) (int, error) {
+ entities, innerErr := r.ListIndexRuleBinding(context.TODO(), ListOpt{})
+ if innerErr != nil {
+ return 0, innerErr
+ }
+ return len(entities), nil
+ },
+ expectedLen: 1,
+ },
+ {
+ name: "List IndexRuleBinding with Group",
+ list: func(r Registry) (int, error) {
+ entities, innerErr := r.ListIndexRuleBinding(context.TODO(), ListOpt{Group: "default"})
+ if innerErr != nil {
+ return 0, innerErr
+ }
+ return len(entities), nil
+ },
+ expectedLen: 1,
+ },
+ {
+ name: "List IndexRule without Group",
+ list: func(r Registry) (int, error) {
+ entities, innerErr := r.ListIndexRule(context.TODO(), ListOpt{})
+ if innerErr != nil {
+ return 0, innerErr
+ }
+ return len(entities), nil
+ },
+ expectedLen: 10,
+ },
+ {
+ name: "List IndexRule with Group",
+ list: func(r Registry) (int, error) {
+ entities, innerErr := r.ListIndexRule(context.TODO(), ListOpt{Group: "default"})
+ if innerErr != nil {
+ return 0, innerErr
+ }
+ return len(entities), nil
+ },
+ expectedLen: 10,
+ },
+ {
+ name: "List Measure without Group",
+ list: func(r Registry) (int, error) {
+ entities, innerErr := r.ListMeasure(context.TODO(), ListOpt{})
+ if innerErr != nil {
+ return 0, innerErr
+ }
+ return len(entities), nil
+ },
+ expectedLen: 0,
+ },
+ {
+ name: "List Measure with Group",
+ list: func(r Registry) (int, error) {
+ entities, innerErr := r.ListMeasure(context.TODO(), ListOpt{Group: "default"})
+ if innerErr != nil {
+ return 0, innerErr
+ }
+ return len(entities), nil
+ },
+ expectedLen: 0,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ req := require.New(t)
+ entitiesLen, listErr := tt.list(registry)
+ req.NoError(listErr)
+ req.Equal(entitiesLen, tt.expectedLen)
+ })
+ }
+}
+
+func Test_Etcd_Delete(t *testing.T) {
+ tester := assert.New(t)
+ registry, err := NewEtcdSchemaRegistry(useUnixDomain(), useRandomTempDir())
+ tester.NoError(err)
+ tester.NotNil(registry)
+ defer registry.Close()
+
+ err = PreloadSchema(registry)
+ tester.NoError(err)
+
+ tests := []struct {
+ name string
+ list func(Registry) (int, error)
+ delete func(Registry) error
+ expectedLenBefore int
+ expectedLenAfter int
+ }{
+ {
+ name: "Delete IndexRule",
+ list: func(r Registry) (int, error) {
+ entities, innerErr := r.ListIndexRule(context.TODO(), ListOpt{Group: "default"})
+ if innerErr != nil {
+ return 0, innerErr
+ }
+ return len(entities), nil
+ },
+ delete: func(r Registry) error {
+ _, innerErr := r.DeleteIndexRule(context.TODO(), &commonv1.Metadata{
+ Name: "db.instance",
+ Group: "default",
+ })
+ return innerErr
+ },
+ expectedLenBefore: 10,
+ expectedLenAfter: 9,
+ },
+ {
+ name: "Delete Group",
+ list: func(r Registry) (int, error) {
+ entities, innerErr := r.ListIndexRule(context.TODO(), ListOpt{Group: "default"})
+ if innerErr != nil {
+ return 0, innerErr
+ }
+ return len(entities), nil
+ },
+ delete: func(r Registry) error {
+ _, innerErr := r.DeleteGroup(context.TODO(), "default")
+ return innerErr
+ },
+ expectedLenBefore: 9,
+ expectedLenAfter: 0,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ ast := assert.New(t)
+ num, err := tt.list(registry)
+ ast.NoError(err)
+ ast.Equal(num, tt.expectedLenBefore)
+ err = tt.delete(registry)
+ ast.NoError(err)
+ num, err = tt.list(registry)
+ ast.NoError(err)
+ ast.Equal(num, tt.expectedLenAfter)
+ })
+ }
+}
diff --git a/banyand/metadata/schema/schema.go b/banyand/metadata/schema/schema.go
index 7d245cb..f5a7121 100644
--- a/banyand/metadata/schema/schema.go
+++ b/banyand/metadata/schema/schema.go
@@ -19,6 +19,7 @@ package schema
import (
"context"
+ "io"
commonv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/common/v1"
databasev1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1"
@@ -28,17 +29,53 @@ type ListOpt struct {
Group string
}
+type Registry interface {
+ io.Closer
+ ReadyNotify() <-chan struct{}
+ StopNotify() <-chan struct{}
+ StoppingNotify() <-chan struct{}
+ Stream
+ IndexRule
+ IndexRuleBinding
+ Measure
+ Group
+}
+
type Stream interface {
- Get(ctx context.Context, metadata *commonv1.Metadata) (*databasev1.Stream, error)
- List(ctx context.Context, opt ListOpt) ([]*databasev1.Stream, error)
+ GetStream(ctx context.Context, metadata *commonv1.Metadata) (*databasev1.Stream, error)
+ ListStream(ctx context.Context, opt ListOpt) ([]*databasev1.Stream, error)
+ UpdateStream(ctx context.Context, stream *databasev1.Stream) error
+ DeleteStream(ctx context.Context, metadata *commonv1.Metadata) (bool, error)
}
type IndexRule interface {
- Get(ctx context.Context, metadata *commonv1.Metadata) (*databasev1.IndexRule, error)
- List(ctx context.Context, opt ListOpt) ([]*databasev1.IndexRule, error)
+ GetIndexRule(ctx context.Context, metadata *commonv1.Metadata) (*databasev1.IndexRule, error)
+ ListIndexRule(ctx context.Context, opt ListOpt) ([]*databasev1.IndexRule, error)
+ UpdateIndexRule(ctx context.Context, indexRule *databasev1.IndexRule) error
+ DeleteIndexRule(ctx context.Context, metadata *commonv1.Metadata) (bool, error)
}
type IndexRuleBinding interface {
- Get(ctx context.Context, metadata *commonv1.Metadata) (*databasev1.IndexRuleBinding, error)
- List(ctx context.Context, opt ListOpt) ([]*databasev1.IndexRuleBinding, error)
+ GetIndexRuleBinding(ctx context.Context, metadata *commonv1.Metadata) (*databasev1.IndexRuleBinding, error)
+ ListIndexRuleBinding(ctx context.Context, opt ListOpt) ([]*databasev1.IndexRuleBinding, error)
+ UpdateIndexRuleBinding(ctx context.Context, indexRuleBinding *databasev1.IndexRuleBinding) error
+ DeleteIndexRuleBinding(ctx context.Context, metadata *commonv1.Metadata) (bool, error)
+}
+
+type Measure interface {
+ GetMeasure(ctx context.Context, metadata *commonv1.Metadata) (*databasev1.Measure, error)
+ ListMeasure(ctx context.Context, opt ListOpt) ([]*databasev1.Measure, error)
+ UpdateMeasure(ctx context.Context, measure *databasev1.Measure) error
+ DeleteMeasure(ctx context.Context, metadata *commonv1.Metadata) (bool, error)
+}
+
+type Group interface {
+ GetGroup(ctx context.Context, group string) (*commonv1.Group, error)
+ ListGroup(ctx context.Context) ([]string, error)
+ // DeleteGroup delete all items belonging to the group
+ DeleteGroup(ctx context.Context, group string) (bool, error)
+ // CreateGroup works like `touch` in unix systems.
+ // 1. It will create the group if it does not exist.
+ // 2. It will update the updated_at timestamp to the current timestamp.
+ CreateGroup(ctx context.Context, group string) error
}
diff --git a/banyand/metadata/schema/sw.go b/banyand/metadata/schema/sw.go
deleted file mode 100644
index 2371f94..0000000
--- a/banyand/metadata/schema/sw.go
+++ /dev/null
@@ -1,139 +0,0 @@
-// Licensed to Apache Software Foundation (ASF) under one or more contributor
-// license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright
-// ownership. Apache Software Foundation (ASF) licenses this file to you under
-// the Apache License, Version 2.0 (the "License"); you may
-// not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package schema
-
-import (
- "bytes"
- "context"
- "embed"
- "strings"
-
- "github.com/golang/protobuf/jsonpb"
-
- commonv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/common/v1"
- databasev1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1"
-)
-
-const indexRuleDir = "data/index_rules"
-
-var (
- _ Stream = (*streamRepo)(nil)
- _ IndexRule = (*indexRuleRepo)(nil)
-
- //go:embed data/index_rules/*.json
- indexRuleStore embed.FS
- //go:embed data/index_rule_binding.json
- indexRuleBindingJSON string
- //go:embed data/stream.json
- streamJSON string
-)
-
-type streamRepo struct {
- data *databasev1.Stream
-}
-
-func NewStream() (Stream, error) {
- stream := &databasev1.Stream{}
- if err := jsonpb.UnmarshalString(streamJSON, stream); err != nil {
- return nil, err
- }
- return &streamRepo{
- data: stream,
- }, nil
-}
-
-func (l *streamRepo) Get(_ context.Context, _ *commonv1.Metadata) (*databasev1.Stream, error) {
- return l.data, nil
-}
-
-func (l *streamRepo) List(ctx context.Context, opts ListOpt) ([]*databasev1.Stream, error) {
- s, err := l.Get(ctx, nil)
- if err != nil {
- return nil, err
- }
- return []*databasev1.Stream{s}, nil
-}
-
-type indexRuleRepo struct {
- store embed.FS
-}
-
-func NewIndexRule() (IndexRule, error) {
- return &indexRuleRepo{
- store: indexRuleStore,
- }, nil
-}
-
-func (i *indexRuleRepo) Get(_ context.Context, metadata *commonv1.Metadata) (*databasev1.IndexRule, error) {
- bb, err := i.store.ReadFile(indexRuleDir + "/" + metadata.Name + ".json")
- if err != nil {
- return nil, err
- }
- indexRule := &databasev1.IndexRule{}
- err = jsonpb.Unmarshal(bytes.NewReader(bb), indexRule)
- if err != nil {
- return nil, err
- }
- return indexRule, nil
-}
-
-func (i *indexRuleRepo) List(ctx context.Context, opt ListOpt) ([]*databasev1.IndexRule, error) {
- entries, err := i.store.ReadDir(indexRuleDir)
- if err != nil {
- return nil, err
- }
- rules := make([]*databasev1.IndexRule, 0, len(entries))
- for _, entry := range entries {
- name := strings.TrimSuffix(entry.Name(), ".json")
- r, errInternal := i.Get(ctx, &commonv1.Metadata{
- Name: name,
- Group: opt.Group,
- })
- if errInternal != nil {
- return nil, errInternal
- }
- rules = append(rules, r)
- }
- return rules, nil
-}
-
-type indexRuleBindingRepo struct {
- data *databasev1.IndexRuleBinding
-}
-
-func NewIndexRuleBinding() (IndexRuleBinding, error) {
- indexRuleBinding := &databasev1.IndexRuleBinding{}
- if err := jsonpb.UnmarshalString(indexRuleBindingJSON, indexRuleBinding); err != nil {
- return nil, err
- }
- return &indexRuleBindingRepo{
- data: indexRuleBinding,
- }, nil
-}
-
-func (i *indexRuleBindingRepo) Get(_ context.Context, _ *commonv1.Metadata) (*databasev1.IndexRuleBinding, error) {
- return i.data, nil
-}
-
-func (i *indexRuleBindingRepo) List(ctx context.Context, _ ListOpt) ([]*databasev1.IndexRuleBinding, error) {
- t, err := i.Get(ctx, nil)
- if err != nil {
- return nil, err
- }
- return []*databasev1.IndexRuleBinding{t}, nil
-}
diff --git a/banyand/metadata/schema/sw_test.go b/banyand/metadata/schema/sw_test.go
deleted file mode 100644
index 443a0d6..0000000
--- a/banyand/metadata/schema/sw_test.go
+++ /dev/null
@@ -1,73 +0,0 @@
-// Licensed to Apache Software Foundation (ASF) under one or more contributor
-// license agreements. See the NOTICE file distributed with
-// this work for additional information regarding copyright
-// ownership. Apache Software Foundation (ASF) licenses this file to you under
-// the Apache License, Version 2.0 (the "License"); you may
-// not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package schema
-
-import (
- "context"
- "testing"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-
- commonv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/common/v1"
-)
-
-func Test_IndexRule(t *testing.T) {
- ast := assert.New(t)
- is := require.New(t)
- ir, err := NewIndexRule()
- is.NoError(err)
- r, err := ir.Get(context.Background(), &commonv1.Metadata{Name: "duration", Group: "default"})
- is.NoError(err)
- ast.NotNil(r)
- ast.Equal("duration", r.Metadata.Name)
- is.NoError(err)
- rules, err := ir.List(context.Background(), ListOpt{})
- is.NoError(err)
- ast.NotEmpty(rules)
-}
-
-func Test_Stream(t *testing.T) {
- ast := assert.New(t)
- is := require.New(t)
- s, err := NewStream()
- is.NoError(err)
- r, err := s.Get(context.Background(), &commonv1.Metadata{Name: "sw", Group: "default"})
- is.NoError(err)
- ast.NotNil(r)
- ast.Equal("sw", r.Metadata.Name)
- is.NoError(err)
- rules, err := s.List(context.Background(), ListOpt{})
- is.NoError(err)
- ast.NotEmpty(rules)
-}
-
-func Test_IndexRuleBinding(t *testing.T) {
- ast := assert.New(t)
- is := require.New(t)
- irb, err := NewIndexRuleBinding()
- is.NoError(err)
- r, err := irb.Get(context.Background(), &commonv1.Metadata{Name: "sw-index-rule-binding", Group: "default"})
- is.NoError(err)
- ast.NotNil(r)
- ast.Equal("sw-index-rule-binding", r.Metadata.Name)
- is.NoError(err)
- rules, err := irb.List(context.Background(), ListOpt{})
- is.NoError(err)
- ast.NotEmpty(rules)
-}
diff --git a/banyand/metadata/schema/data/index_rule_binding.json b/banyand/metadata/schema/testdata/index_rule_binding.json
similarity index 100%
copy from banyand/metadata/schema/data/index_rule_binding.json
copy to banyand/metadata/schema/testdata/index_rule_binding.json
diff --git a/banyand/metadata/schema/data/index_rules/db.instance.json b/banyand/metadata/schema/testdata/index_rules/db.instance.json
similarity index 100%
copy from banyand/metadata/schema/data/index_rules/db.instance.json
copy to banyand/metadata/schema/testdata/index_rules/db.instance.json
diff --git a/banyand/metadata/schema/data/index_rules/db.type.json b/banyand/metadata/schema/testdata/index_rules/db.type.json
similarity index 100%
copy from banyand/metadata/schema/data/index_rules/db.type.json
copy to banyand/metadata/schema/testdata/index_rules/db.type.json
diff --git a/banyand/metadata/schema/data/index_rules/duration.json b/banyand/metadata/schema/testdata/index_rules/duration.json
similarity index 100%
copy from banyand/metadata/schema/data/index_rules/duration.json
copy to banyand/metadata/schema/testdata/index_rules/duration.json
diff --git a/banyand/metadata/schema/data/index_rules/endpoint_id.json b/banyand/metadata/schema/testdata/index_rules/endpoint_id.json
similarity index 100%
copy from banyand/metadata/schema/data/index_rules/endpoint_id.json
copy to banyand/metadata/schema/testdata/index_rules/endpoint_id.json
diff --git a/banyand/metadata/schema/data/index_rules/http.method.json b/banyand/metadata/schema/testdata/index_rules/http.method.json
similarity index 100%
copy from banyand/metadata/schema/data/index_rules/http.method.json
copy to banyand/metadata/schema/testdata/index_rules/http.method.json
diff --git a/banyand/metadata/schema/data/index_rules/mq.broker.json b/banyand/metadata/schema/testdata/index_rules/mq.broker.json
similarity index 100%
copy from banyand/metadata/schema/data/index_rules/mq.broker.json
copy to banyand/metadata/schema/testdata/index_rules/mq.broker.json
diff --git a/banyand/metadata/schema/data/index_rules/mq.queue.json b/banyand/metadata/schema/testdata/index_rules/mq.queue.json
similarity index 100%
copy from banyand/metadata/schema/data/index_rules/mq.queue.json
copy to banyand/metadata/schema/testdata/index_rules/mq.queue.json
diff --git a/banyand/metadata/schema/data/index_rules/mq.topic.json b/banyand/metadata/schema/testdata/index_rules/mq.topic.json
similarity index 100%
copy from banyand/metadata/schema/data/index_rules/mq.topic.json
copy to banyand/metadata/schema/testdata/index_rules/mq.topic.json
diff --git a/banyand/metadata/schema/data/index_rules/status_code.json b/banyand/metadata/schema/testdata/index_rules/status_code.json
similarity index 100%
copy from banyand/metadata/schema/data/index_rules/status_code.json
copy to banyand/metadata/schema/testdata/index_rules/status_code.json
diff --git a/banyand/metadata/schema/data/index_rules/trace_id.json b/banyand/metadata/schema/testdata/index_rules/trace_id.json
similarity index 100%
copy from banyand/metadata/schema/data/index_rules/trace_id.json
copy to banyand/metadata/schema/testdata/index_rules/trace_id.json
diff --git a/banyand/metadata/schema/data/stream.json b/banyand/metadata/schema/testdata/stream.json
similarity index 100%
copy from banyand/metadata/schema/data/stream.json
copy to banyand/metadata/schema/testdata/stream.json
diff --git a/banyand/query/processor.go b/banyand/query/processor.go
index 3fcb9fb..c6217de 100644
--- a/banyand/query/processor.go
+++ b/banyand/query/processor.go
@@ -24,6 +24,7 @@ import (
"github.com/apache/skywalking-banyandb/api/data"
streamv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/stream/v1"
"github.com/apache/skywalking-banyandb/banyand/discovery"
+ "github.com/apache/skywalking-banyandb/banyand/metadata"
"github.com/apache/skywalking-banyandb/banyand/queue"
"github.com/apache/skywalking-banyandb/banyand/stream"
"github.com/apache/skywalking-banyandb/pkg/bus"
@@ -42,6 +43,7 @@ var (
type queryProcessor struct {
streamService stream.Service
+ metaService metadata.Service
logger *logger.Logger
log *logger.Logger
serviceRepo discovery.ServiceRepo
@@ -57,21 +59,26 @@ func (q *queryProcessor) Rev(message bus.Message) (resp bus.Message) {
q.log.Info().
Msg("received a query event")
- metadata := queryCriteria.GetMetadata()
- ec, err := q.streamService.Stream(metadata)
+ meta := queryCriteria.GetMetadata()
+ ec, err := q.streamService.Stream(meta)
if err != nil {
q.logger.Error().Err(err).Msg("fail to get stream execution context")
return
}
- analyzer := logical.DefaultAnalyzer()
- s, err := analyzer.BuildStreamSchema(context.TODO(), metadata)
+ analyzer, err := logical.CreateAnalyzerFromMetaService(q.metaService)
+ if err != nil {
+ q.logger.Error().Err(err).Msg("fail to build analyzer")
+ return
+ }
+
+ s, err := analyzer.BuildStreamSchema(context.TODO(), meta)
if err != nil {
q.logger.Error().Err(err).Msg("fail to build trace schema")
return
}
- p, err := analyzer.Analyze(context.TODO(), queryCriteria, metadata, s)
+ p, err := analyzer.Analyze(context.TODO(), queryCriteria, meta, s)
if err != nil {
q.logger.Error().Err(err).Msg("fail to analyze the query request")
return
diff --git a/banyand/query/processor_test.go b/banyand/query/processor_test.go
index 5e74d39..9319f83 100644
--- a/banyand/query/processor_test.go
+++ b/banyand/query/processor_test.go
@@ -95,17 +95,28 @@ func setupServices(tester *require.Assertions) (stream.Service, queue.Queue, fun
streamSvc, err := stream.NewService(context.TODO(), metadataSvc, repo, pipeline)
tester.NoError(err)
+ etcdRootDir := test.RandomTempDir()
+ err = metadataSvc.FlagSet().Parse([]string{"--metadata-root-path=" + etcdRootDir})
+ tester.NoError(err)
+
err = streamSvc.FlagSet().Parse([]string{"--root-path=" + rootPath})
tester.NoError(err)
// Init `Query` module
- executor, err := NewExecutor(context.TODO(), streamSvc, repo, pipeline)
+ executor, err := NewExecutor(context.TODO(), streamSvc, metadataSvc, repo, pipeline)
tester.NoError(err)
// :PreRun:
- // 1) stream
- // 2) query
- // 3) liaison
+ // 1) metadata
+ // 2) stream
+ // 3) query
+ // 4) liaison
+ err = metadataSvc.PreRun()
+ tester.NoError(err)
+
+ err = test.PreloadSchema(metadataSvc.SchemaRegistry())
+ tester.NoError(err)
+
err = streamSvc.PreRun()
tester.NoError(err)
@@ -114,7 +125,9 @@ func setupServices(tester *require.Assertions) (stream.Service, queue.Queue, fun
return streamSvc, pipeline, func() {
deferFunc()
+ metadataSvc.GracefulStop()
_ = os.RemoveAll(rootPath)
+ _ = os.RemoveAll(etcdRootDir)
}
}
diff --git a/banyand/query/query.go b/banyand/query/query.go
index 8a1d98e..c6a42c9 100644
--- a/banyand/query/query.go
+++ b/banyand/query/query.go
@@ -21,6 +21,7 @@ import (
"context"
"github.com/apache/skywalking-banyandb/banyand/discovery"
+ "github.com/apache/skywalking-banyandb/banyand/metadata"
"github.com/apache/skywalking-banyandb/banyand/queue"
"github.com/apache/skywalking-banyandb/banyand/stream"
"github.com/apache/skywalking-banyandb/pkg/run"
@@ -30,8 +31,10 @@ type Executor interface {
run.PreRunner
}
-func NewExecutor(_ context.Context, streamService stream.Service, serviceRepo discovery.ServiceRepo, pipeline queue.Queue) (Executor, error) {
+func NewExecutor(_ context.Context, streamService stream.Service, metaService metadata.Service,
+ serviceRepo discovery.ServiceRepo, pipeline queue.Queue) (Executor, error) {
return &queryProcessor{
+ metaService: metaService,
streamService: streamService,
serviceRepo: serviceRepo,
pipeline: pipeline,
diff --git a/banyand/stream/service.go b/banyand/stream/service.go
index 90654f4..fef3f6a 100644
--- a/banyand/stream/service.go
+++ b/banyand/stream/service.go
@@ -89,7 +89,7 @@ func (s *service) Name() string {
}
func (s *service) PreRun() error {
- schemas, err := s.metadata.Stream().List(context.TODO(), schema.ListOpt{})
+ schemas, err := s.metadata.StreamRegistry().ListStream(context.TODO(), schema.ListOpt{})
if err != nil {
return err
}
diff --git a/banyand/stream/stream_query_test.go b/banyand/stream/stream_query_test.go
index 15234df..07e614c 100644
--- a/banyand/stream/stream_query_test.go
+++ b/banyand/stream/stream_query_test.go
@@ -54,7 +54,6 @@ type shardStruct struct {
type shardsForTest []shardStruct
func Test_Stream_SelectShard(t *testing.T) {
- tester := assert.New(t)
s, deferFunc := setup(t)
defer deferFunc()
_ = setupQueryData(t, "multiple_shards.json", s)
@@ -82,13 +81,13 @@ func Test_Stream_SelectShard(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
+ ast := assert.New(t)
shards, err := s.Shards(tt.entity)
if tt.wantErr {
- tester.Error(err)
- return
+ ast.Error(err)
}
- tester.NoError(err)
- tester.Equal(tt.wantShardNum, len(shards))
+ ast.NoError(err)
+ ast.Equal(tt.wantShardNum, len(shards))
})
}
@@ -531,7 +530,6 @@ func Test_Stream_Series(t *testing.T) {
ast.Equal(tt.want, got)
})
}
-
}
func Test_Stream_Global_Index(t *testing.T) {
@@ -627,7 +625,6 @@ func Test_Stream_Global_Index(t *testing.T) {
tester.NoError(err)
})
}
-
}
type queryOpts struct {
diff --git a/banyand/stream/stream_write_test.go b/banyand/stream/stream_write_test.go
index 42b819b..da484d7 100644
--- a/banyand/stream/stream_write_test.go
+++ b/banyand/stream/stream_write_test.go
@@ -20,6 +20,7 @@ package stream
import (
"context"
"encoding/base64"
+ "os"
"testing"
"github.com/stretchr/testify/assert"
@@ -30,7 +31,6 @@ import (
modelv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/model/v1"
streamv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/stream/v1"
"github.com/apache/skywalking-banyandb/banyand/metadata"
- "github.com/apache/skywalking-banyandb/banyand/metadata/schema"
"github.com/apache/skywalking-banyandb/pkg/logger"
"github.com/apache/skywalking-banyandb/pkg/test"
)
@@ -190,15 +190,25 @@ func setup(t *testing.T) (*stream, func()) {
Level: "info",
}))
tempDir, deferFunc := test.Space(req)
- streamRepo, err := schema.NewStream()
+
+ mService, err := metadata.NewService(context.TODO())
+ req.NoError(err)
+
+ etcdRootDir := test.RandomTempDir()
+ err = mService.FlagSet().Parse([]string{"--metadata-root-path=" + etcdRootDir})
+ req.NoError(err)
+
+ err = mService.PreRun()
req.NoError(err)
- sa, err := streamRepo.Get(context.TODO(), &commonv1.Metadata{
+
+ err = test.PreloadSchema(mService.SchemaRegistry())
+ req.NoError(err)
+
+ sa, err := mService.StreamRegistry().GetStream(context.TODO(), &commonv1.Metadata{
Name: "sw",
Group: "default",
})
req.NoError(err)
- mService, err := metadata.NewService(context.TODO())
- req.NoError(err)
iRules, err := mService.IndexRules(context.TODO(), sa.Metadata)
req.NoError(err)
sSpec := streamSpec{
@@ -209,7 +219,9 @@ func setup(t *testing.T) (*stream, func()) {
req.NoError(err)
return s, func() {
_ = s.Close()
+ mService.GracefulStop()
deferFunc()
+ _ = os.RemoveAll(etcdRootDir)
}
}
diff --git a/go.mod b/go.mod
index aa12e1a..cd61dcd 100644
--- a/go.mod
+++ b/go.mod
@@ -9,6 +9,7 @@ require (
github.com/dgraph-io/ristretto v0.1.0
github.com/golang/protobuf v1.5.2
github.com/google/go-cmp v0.5.6
+ github.com/google/uuid v1.3.0
github.com/klauspost/compress v1.13.1 // indirect
github.com/oklog/run v1.1.0
github.com/pkg/errors v0.9.1
@@ -17,6 +18,8 @@ require (
github.com/spf13/pflag v1.0.5
github.com/spf13/viper v1.8.1
github.com/stretchr/testify v1.7.0
+ go.etcd.io/etcd/client/v3 v3.5.0
+ go.etcd.io/etcd/server/v3 v3.5.0
go.uber.org/multierr v1.7.0
golang.org/x/net v0.0.0-20210716203947-853a461950ff // indirect
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
diff --git a/go.sum b/go.sum
index f8c743c..4ed137e 100644
--- a/go.sum
+++ b/go.sum
@@ -17,6 +17,7 @@ cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKP
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
+cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8=
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
@@ -37,6 +38,7 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE=
@@ -47,16 +49,31 @@ github.com/RoaringBitmap/roaring v0.9.1 h1:5PRizBmoN/PfV17nPNQou4dHQ7NcJi8FO/bih
github.com/RoaringBitmap/roaring v0.9.1/go.mod h1:h1B7iIUOmnAeb5ytYMvnHJwxMc6LUrwBnzXWRuqTQUc=
github.com/SkyAPM/badger/v3 v3.0.0-20210809093509-ff1b2dd81165 h1:csoTNiGUMtp4H1AchgaZWJ4WY4uJQ6s+pz3sXS93jAA=
github.com/SkyAPM/badger/v3 v3.0.0-20210809093509-ff1b2dd81165/go.mod h1:dULbq6ehJ5K0cGW/1TQ9iSfUk0gbSiToDWmWmTsJ53E=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
+github.com/benbjohnson/clock v1.0.3 h1:vkLuvpK4fmtSCuo60+yC63p7y0BmQ8gm5ZXGuBCJyXg=
+github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA=
github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
+github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
+github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054 h1:uH66TXeswKn5PW5zdZ39xEwfS9an067BirqA+P4QaLI=
+github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
@@ -69,20 +86,37 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5 h1:xD/lrqdvwsc+O2bjSSi3YqY73Ke3LAiSCx49aCesA0E=
+github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
+github.com/cockroachdb/errors v1.2.4 h1:Lap807SXTH5tri2TivECb/4abUkMZC9zRoLarvcKDqs=
+github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA=
+github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY=
+github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
+github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI=
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI=
github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
+github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -94,22 +128,38 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c=
+github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs=
+github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
+github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
@@ -140,6 +190,8 @@ github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
+github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
github.com/google/flatbuffers v1.12.0 h1:/PtAHvnBY4Kqnx/xCQ3OIV9uYcSFGScBsWI3Oogeh6w=
github.com/google/flatbuffers v1.12.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -172,10 +224,21 @@ github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLe
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
+github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw=
+github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
@@ -202,27 +265,45 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
+github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
+github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
+github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
+github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/compress v1.13.1 h1:wXr2uRxZTJXHLly6qhJabee5JqIhTRoLBhDOA74hDEQ=
github.com/klauspost/compress v1.13.1/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
@@ -235,16 +316,24 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh
github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag=
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM=
github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ=
github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -252,7 +341,31 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ=
+github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
+github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
+github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ=
+github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
+github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
@@ -263,10 +376,18 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
+github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
+github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js=
+github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
@@ -277,6 +398,7 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
+github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw=
github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
@@ -286,9 +408,11 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
+github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44=
github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -298,16 +422,35 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 h1:uruHq4dN7GR16kFc5fp3d1RIYzJW5onx8Ybykw2YQFA=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
+go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
+go.etcd.io/etcd/api/v3 v3.5.0 h1:GsV3S+OfZEOCNXdtNkBSR7kgLobAa/SO6tCxRa0GAYw=
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
+go.etcd.io/etcd/client/pkg/v3 v3.5.0 h1:2aQv6F436YnN7I4VbI8PPYrBhu+SmrTaADcf8Mi/6PU=
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
+go.etcd.io/etcd/client/v2 v2.305.0 h1:ftQ0nOOHMcbMS3KIaDQ0g5Qcd6bhaBrQT6b89DfwLTs=
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
+go.etcd.io/etcd/client/v3 v3.5.0 h1:62Eh0XOro+rDwkrypAGDfgmNh5Joq+z+W9HZdlXMzek=
+go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0=
+go.etcd.io/etcd/pkg/v3 v3.5.0 h1:ntrg6vvKRW26JRmHTE0iNlDgYK6JX3hg/4cD62X0ixk=
+go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE=
+go.etcd.io/etcd/raft/v3 v3.5.0 h1:kw2TmO3yFTgE+F0mdKkG7xMxkit2duBDa2Hu6D/HMlw=
+go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc=
+go.etcd.io/etcd/server/v3 v3.5.0 h1:jk8D/lwGEDlQU9kZXUFMSANkE22Sg5+mW27ip8xcF9E=
+go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
@@ -316,13 +459,41 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
+go.opentelemetry.io/contrib v0.20.0 h1:ubFQUn0VCZ0gPwIoJfBJVpeBlyRMxu8Mm/huKWYd9p0=
+go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0 h1:sO4WKdPAudZGKPcpZT4MJn6JaDmpyLrMPDGGyA1SttE=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E=
+go.opentelemetry.io/otel v0.20.0 h1:eaP0Fqu7SXHwvjiqDq83zImeehOHX8doTvU9AwXON8g=
+go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo=
+go.opentelemetry.io/otel/exporters/otlp v0.20.0 h1:PTNgq9MRmQqqJY0REVbZFvwkYOA85vbdQU/nVfxDyqg=
+go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM=
+go.opentelemetry.io/otel/metric v0.20.0 h1:4kzhXFP+btKm4jwxpjIqjs41A7MakRFUS86bqLHTIw8=
+go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU=
+go.opentelemetry.io/otel/oteltest v0.20.0 h1:HiITxCawalo5vQzdHfKeZurV8x7ljcqAgiWzF6Vaeaw=
+go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw=
+go.opentelemetry.io/otel/sdk v0.20.0 h1:JsxtGXd06J8jrnya7fdI/U/MR6yXA5DtbZy+qoHQlr8=
+go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc=
+go.opentelemetry.io/otel/sdk/export/metric v0.20.0 h1:c5VRjxCXdQlx1HjzwGdQHzZaVI82b5EbBgOu2ljD92g=
+go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE=
+go.opentelemetry.io/otel/sdk/metric v0.20.0 h1:7ao1wpzHRVKf0OQ7GIxiQJA6X7DLX9o14gmVon7mMK8=
+go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE=
+go.opentelemetry.io/otel/trace v0.20.0 h1:1DL6EXUdcg95gukhuRRvLDO/4X5THh/5dIV52lqtnbw=
+go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw=
+go.opentelemetry.io/proto/otlp v0.7.0 h1:rwOQPCuKAKmwGKq2aVNnYIibI6wnV7EvzgfTCzcdGg8=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
+go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0=
+go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
+go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec=
go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
+go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
+go.uber.org/zap v1.17.0 h1:MTjgFu6ZLKvY6Pvaqk97GlxNBuMpV4Hy/3P6tRGlI2U=
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -331,6 +502,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE=
+golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -354,6 +527,7 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
@@ -369,7 +543,9 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -377,6 +553,7 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -397,6 +574,7 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
@@ -415,6 +593,7 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc=
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -429,11 +608,15 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -441,8 +624,10 @@ golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -455,8 +640,11 @@ golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -471,6 +659,7 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -486,7 +675,11 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE=
+golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
@@ -502,6 +695,7 @@ golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgw
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
@@ -537,6 +731,7 @@ golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -571,6 +766,7 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -593,6 +789,7 @@ google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfG
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
@@ -634,6 +831,7 @@ google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA5
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.39.0 h1:Klz8I9kdtkIN6EpHHUOMLCYhTn/2WAe5a0s1hcBkdTI=
google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
@@ -651,16 +849,26 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU=
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
+gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
+gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
+gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
@@ -676,3 +884,5 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
+sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
+sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
diff --git a/pkg/query/logical/analyzer.go b/pkg/query/logical/analyzer.go
index 8d14524..7ba4523 100644
--- a/pkg/query/logical/analyzer.go
+++ b/pkg/query/logical/analyzer.go
@@ -26,7 +26,6 @@ import (
modelv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/model/v1"
streamv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/stream/v1"
"github.com/apache/skywalking-banyandb/banyand/metadata"
- metadataSchema "github.com/apache/skywalking-banyandb/banyand/metadata/schema"
"github.com/apache/skywalking-banyandb/banyand/tsdb"
"github.com/apache/skywalking-banyandb/pkg/convert"
)
@@ -77,25 +76,17 @@ func (t *Tag) GetFamilyName() string {
}
type Analyzer struct {
- indexRuleRepo metadataSchema.IndexRule
- indexRuleBindingRepo metadataSchema.IndexRuleBinding
- metadataRepoImpl metadata.Repo
+ metadataRepoImpl metadata.Repo
}
-func DefaultAnalyzer() *Analyzer {
- indexRule, _ := metadataSchema.NewIndexRule()
- indexRuleBinding, _ := metadataSchema.NewIndexRuleBinding()
- metadataService, _ := metadata.NewService(context.TODO())
-
+func CreateAnalyzerFromMetaService(metaSvc metadata.Service) (*Analyzer, error) {
return &Analyzer{
- indexRule,
- indexRuleBinding,
- metadataService,
- }
+ metaSvc,
+ }, nil
}
func (a *Analyzer) BuildStreamSchema(ctx context.Context, metadata *commonv1.Metadata) (Schema, error) {
- stream, err := a.metadataRepoImpl.Stream().Get(ctx, metadata)
+ stream, err := a.metadataRepoImpl.StreamRegistry().GetStream(ctx, metadata)
if err != nil {
return nil, err
diff --git a/pkg/query/logical/analyzer_test.go b/pkg/query/logical/analyzer_test.go
index c92d383..e6616af 100644
--- a/pkg/query/logical/analyzer_test.go
+++ b/pkg/query/logical/analyzer_test.go
@@ -19,6 +19,7 @@ package logical_test
import (
"context"
+ "os"
"testing"
"time"
@@ -26,15 +27,60 @@ import (
"github.com/stretchr/testify/require"
modelv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/model/v1"
+ "github.com/apache/skywalking-banyandb/banyand/metadata"
"github.com/apache/skywalking-banyandb/banyand/tsdb"
pb "github.com/apache/skywalking-banyandb/pkg/pb/v1"
- logical2 "github.com/apache/skywalking-banyandb/pkg/query/logical"
+ "github.com/apache/skywalking-banyandb/pkg/query/logical"
+ "github.com/apache/skywalking-banyandb/pkg/test"
)
+// setUpAnalyzer creates a default analyzer for testing.
+// You have to close the underlying metadata after test
+func setUpAnalyzer() (*logical.Analyzer, func(), error) {
+ metadataService, err := metadata.NewService(context.TODO())
+ if err != nil {
+ return nil, func() {
+ }, err
+ }
+
+ rootDir := test.RandomTempDir()
+ err = metadataService.FlagSet().Parse([]string{"--metadata-root-path=" + rootDir})
+
+ if err != nil {
+ return nil, func() {
+ }, err
+ }
+
+ err = metadataService.PreRun()
+ if err != nil {
+ return nil, func() {
+ }, err
+ }
+
+ err = test.PreloadSchema(metadataService.SchemaRegistry())
+ if err != nil {
+ return nil, func() {
+ }, err
+ }
+
+ ana, err := logical.CreateAnalyzerFromMetaService(metadataService)
+ if err != nil {
+ return nil, func() {
+ }, err
+ }
+ return ana, func() {
+ metadataService.GracefulStop()
+ os.RemoveAll(rootDir)
+ }, nil
+}
+
func TestAnalyzer_SimpleTimeScan(t *testing.T) {
assert := require.New(t)
- ana := logical2.DefaultAnalyzer()
+ ana, stopFunc, err := setUpAnalyzer()
+ assert.NoError(err)
+ assert.NotNil(ana)
+ defer stopFunc()
sT, eT := time.Now().Add(-3*time.Hour), time.Now()
@@ -53,9 +99,9 @@ func TestAnalyzer_SimpleTimeScan(t *testing.T) {
plan, err := ana.Analyze(context.TODO(), criteria, metadata, schema)
assert.NoError(err)
assert.NotNil(plan)
- correctPlan, err := logical2.Limit(
- logical2.Offset(
- logical2.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil),
+ correctPlan, err := logical.Limit(
+ logical.Offset(
+ logical.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil),
0),
20).
Analyze(schema)
@@ -67,7 +113,10 @@ func TestAnalyzer_SimpleTimeScan(t *testing.T) {
func TestAnalyzer_ComplexQuery(t *testing.T) {
assert := require.New(t)
- ana := logical2.DefaultAnalyzer()
+ ana, stopFunc, err := setUpAnalyzer()
+ assert.NoError(err)
+ assert.NotNil(ana)
+ defer stopFunc()
sT, eT := time.Now().Add(-3*time.Hour), time.Now()
@@ -90,15 +139,15 @@ func TestAnalyzer_ComplexQuery(t *testing.T) {
assert.NoError(err)
assert.NotNil(plan)
- correctPlan, err := logical2.Limit(
- logical2.Offset(
- logical2.IndexScan(sT, eT, metadata,
- []logical2.Expr{
- logical2.Eq(logical2.NewSearchableFieldRef("mq.topic"), logical2.Str("event_topic")),
- logical2.Eq(logical2.NewSearchableFieldRef("http.method"), logical2.Str("GET")),
+ correctPlan, err := logical.Limit(
+ logical.Offset(
+ logical.IndexScan(sT, eT, metadata,
+ []logical.Expr{
+ logical.Eq(logical.NewSearchableFieldRef("mq.topic"), logical.Str("event_topic")),
+ logical.Eq(logical.NewSearchableFieldRef("http.method"), logical.Str("GET")),
}, tsdb.Entity{tsdb.Entry("my_app"), tsdb.AnyEntry, tsdb.AnyEntry},
- logical2.OrderBy("duration", modelv1.QueryOrder_SORT_DESC),
- logical2.NewTags("searchable", "http.method", "service_id", "duration")),
+ logical.OrderBy("duration", modelv1.QueryOrder_SORT_DESC),
+ logical.NewTags("searchable", "http.method", "service_id", "duration")),
10),
5).
Analyze(schema)
@@ -110,7 +159,10 @@ func TestAnalyzer_ComplexQuery(t *testing.T) {
func TestAnalyzer_TraceIDQuery(t *testing.T) {
assert := require.New(t)
- ana := logical2.DefaultAnalyzer()
+ ana, stopFunc, err := setUpAnalyzer()
+ assert.NoError(err)
+ assert.NotNil(ana)
+ defer stopFunc()
criteria := pb.NewQueryRequestBuilder().
Limit(100).
@@ -127,9 +179,9 @@ func TestAnalyzer_TraceIDQuery(t *testing.T) {
plan, err := ana.Analyze(context.TODO(), criteria, metadata, schema)
assert.NoError(err)
assert.NotNil(plan)
- correctPlan, err := logical2.Limit(
- logical2.Offset(logical2.IndexScan(time.Now(), time.Now(), metadata, []logical2.Expr{
- logical2.Eq(logical2.NewSearchableFieldRef("trace_id"), logical2.Str("123")),
+ correctPlan, err := logical.Limit(
+ logical.Offset(logical.IndexScan(time.Now(), time.Now(), metadata, []logical.Expr{
+ logical.Eq(logical.NewSearchableFieldRef("trace_id"), logical.Str("123")),
}, nil, nil),
0),
100).Analyze(schema)
@@ -141,7 +193,10 @@ func TestAnalyzer_TraceIDQuery(t *testing.T) {
func TestAnalyzer_OrderBy_IndexNotDefined(t *testing.T) {
assert := require.New(t)
- ana := logical2.DefaultAnalyzer()
+ ana, stopFunc, err := setUpAnalyzer()
+ assert.NoError(err)
+ assert.NotNil(ana)
+ defer stopFunc()
criteria := pb.NewQueryRequestBuilder().
Limit(5).
@@ -159,13 +214,16 @@ func TestAnalyzer_OrderBy_IndexNotDefined(t *testing.T) {
assert.NoError(err)
_, err = ana.Analyze(context.TODO(), criteria, metadata, schema)
- assert.ErrorIs(err, logical2.ErrIndexNotDefined)
+ assert.ErrorIs(err, logical.ErrIndexNotDefined)
}
func TestAnalyzer_OrderBy_FieldNotDefined(t *testing.T) {
assert := require.New(t)
- ana := logical2.DefaultAnalyzer()
+ ana, stopFunc, err := setUpAnalyzer()
+ assert.NoError(err)
+ assert.NotNil(ana)
+ defer stopFunc()
criteria := pb.NewQueryRequestBuilder().
Limit(5).
@@ -182,13 +240,16 @@ func TestAnalyzer_OrderBy_FieldNotDefined(t *testing.T) {
assert.NoError(err)
_, err = ana.Analyze(context.TODO(), criteria, metadata, schema)
- assert.ErrorIs(err, logical2.ErrIndexNotDefined)
+ assert.ErrorIs(err, logical.ErrIndexNotDefined)
}
func TestAnalyzer_Projection_FieldNotDefined(t *testing.T) {
assert := require.New(t)
- ana := logical2.DefaultAnalyzer()
+ ana, stopFunc, err := setUpAnalyzer()
+ assert.NoError(err)
+ assert.NotNil(ana)
+ defer stopFunc()
criteria := pb.NewQueryRequestBuilder().
Limit(5).
@@ -205,13 +266,16 @@ func TestAnalyzer_Projection_FieldNotDefined(t *testing.T) {
assert.NoError(err)
_, err = ana.Analyze(context.TODO(), criteria, metadata, schema)
- assert.ErrorIs(err, logical2.ErrFieldNotDefined)
+ assert.ErrorIs(err, logical.ErrFieldNotDefined)
}
func TestAnalyzer_Fields_IndexNotDefined(t *testing.T) {
assert := require.New(t)
- ana := logical2.DefaultAnalyzer()
+ ana, stopFunc, err := setUpAnalyzer()
+ assert.NoError(err)
+ assert.NotNil(ana)
+ defer stopFunc()
criteria := pb.NewQueryRequestBuilder().
Limit(5).
@@ -228,5 +292,5 @@ func TestAnalyzer_Fields_IndexNotDefined(t *testing.T) {
assert.NoError(err)
_, err = ana.Analyze(context.TODO(), criteria, metadata, schema)
- assert.ErrorIs(err, logical2.ErrIndexNotDefined)
+ assert.ErrorIs(err, logical.ErrIndexNotDefined)
}
diff --git a/pkg/query/logical/common_test.go b/pkg/query/logical/common_test.go
index 3df0230..a947207 100644
--- a/pkg/query/logical/common_test.go
+++ b/pkg/query/logical/common_test.go
@@ -22,6 +22,7 @@ import (
"embed"
"encoding/base64"
"encoding/json"
+ "os"
"strconv"
"testing"
"time"
@@ -78,7 +79,7 @@ func setupQueryData(testing *testing.T, dataFile string, stream stream.Stream) (
return baseTime
}
-func setup(t *require.Assertions) (stream.Stream, func()) {
+func setup(t *require.Assertions) (stream.Stream, metadata.Service, func()) {
t.NoError(logger.Init(logger.Logging{
Env: "dev",
Level: "info",
@@ -88,12 +89,25 @@ func setup(t *require.Assertions) (stream.Stream, func()) {
metadataSvc, err := metadata.NewService(context.TODO())
t.NoError(err)
+
+ etcdRootDir := test.RandomTempDir()
+ err = metadataSvc.FlagSet().Parse([]string{"--metadata-root-path=" + etcdRootDir})
+ t.NoError(err)
+
streamSvc, err := stream.NewService(context.TODO(), metadataSvc, nil, nil)
t.NoError(err)
+ // 1 - (MetadataService).PreRun
+ err = metadataSvc.PreRun()
+ t.NoError(err)
+
+ err = test.PreloadSchema(metadataSvc.SchemaRegistry())
+ t.NoError(err)
+
err = streamSvc.FlagSet().Parse([]string{"--root-path=" + tempDir})
t.NoError(err)
+ // 2 - (StreamService).PreRun
err = streamSvc.PreRun()
t.NoError(err)
@@ -102,9 +116,12 @@ func setup(t *require.Assertions) (stream.Stream, func()) {
Group: "default",
})
t.NoError(err)
+ t.NotNil(s)
- return s, func() {
+ return s, metadataSvc, func() {
_ = s.Close()
+ metadataSvc.GracefulStop()
deferFunc()
+ _ = os.RemoveAll(etcdRootDir)
}
}
diff --git a/pkg/query/logical/plan_execution_test.go b/pkg/query/logical/plan_execution_test.go
index 5961668..71450e5 100644
--- a/pkg/query/logical/plan_execution_test.go
+++ b/pkg/query/logical/plan_execution_test.go
@@ -27,13 +27,14 @@ import (
commonv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/common/v1"
modelv1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/model/v1"
"github.com/apache/skywalking-banyandb/banyand/tsdb"
- logical2 "github.com/apache/skywalking-banyandb/pkg/query/logical"
+ "github.com/apache/skywalking-banyandb/pkg/query/logical"
)
func TestPlanExecution_TableScan_Limit(t *testing.T) {
- streamT, deferFunc := setup(require.New(t))
+ tester := require.New(t)
+ streamSvc, metaService, deferFunc := setup(tester)
defer deferFunc()
- baseTs := setupQueryData(t, "multiple_shards.json", streamT)
+ baseTs := setupQueryData(t, "multiple_shards.json", streamSvc)
metadata := &commonv1.Metadata{
Name: "sw",
@@ -42,24 +43,28 @@ func TestPlanExecution_TableScan_Limit(t *testing.T) {
sT, eT := baseTs, baseTs.Add(1*time.Hour)
+ analyzer, err := logical.CreateAnalyzerFromMetaService(metaService)
+ tester.NoError(err)
+ tester.NotNil(analyzer)
+
tests := []struct {
name string
- unresolvedPlan logical2.UnresolvedPlan
+ unresolvedPlan logical.UnresolvedPlan
wantLength int
}{
{
name: "Limit 1",
- unresolvedPlan: logical2.Limit(logical2.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil), 1),
+ unresolvedPlan: logical.Limit(logical.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil), 1),
wantLength: 1,
},
{
name: "Limit 5",
- unresolvedPlan: logical2.Limit(logical2.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil), 5),
+ unresolvedPlan: logical.Limit(logical.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil), 5),
wantLength: 5,
},
{
name: "Limit 10",
- unresolvedPlan: logical2.Limit(logical2.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil), 10),
+ unresolvedPlan: logical.Limit(logical.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil), 10),
wantLength: 5,
},
}
@@ -67,25 +72,26 @@ func TestPlanExecution_TableScan_Limit(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tester := require.New(t)
- schema, err := logical2.DefaultAnalyzer().BuildStreamSchema(context.TODO(), metadata)
+ schema, err := analyzer.BuildStreamSchema(context.TODO(), metadata)
tester.NoError(err)
plan, err := tt.unresolvedPlan.Analyze(schema)
tester.NoError(err)
tester.NotNil(plan)
- entities, err := plan.Execute(streamT)
+ entities, err := plan.Execute(streamSvc)
tester.NoError(err)
tester.Len(entities, tt.wantLength)
- tester.True(logical2.SortedByTimestamp(entities, modelv1.QueryOrder_SORT_ASC))
+ tester.True(logical.SortedByTimestamp(entities, modelv1.QueryOrder_SORT_ASC))
})
}
}
func TestPlanExecution_Offset(t *testing.T) {
- streamT, deferFunc := setup(require.New(t))
+ tester := require.New(t)
+ streamSvc, metaService, deferFunc := setup(tester)
defer deferFunc()
- baseTs := setupQueryData(t, "multiple_shards.json", streamT)
+ baseTs := setupQueryData(t, "multiple_shards.json", streamSvc)
metadata := &commonv1.Metadata{
Name: "sw",
@@ -94,24 +100,28 @@ func TestPlanExecution_Offset(t *testing.T) {
sT, eT := baseTs, baseTs.Add(1*time.Hour)
+ analyzer, err := logical.CreateAnalyzerFromMetaService(metaService)
+ tester.NoError(err)
+ tester.NotNil(analyzer)
+
tests := []struct {
name string
- unresolvedPlan logical2.UnresolvedPlan
+ unresolvedPlan logical.UnresolvedPlan
wantLength int
}{
{
name: "Offset 0",
- unresolvedPlan: logical2.Offset(logical2.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil), 0),
+ unresolvedPlan: logical.Offset(logical.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil), 0),
wantLength: 5,
},
{
name: "Offset 3",
- unresolvedPlan: logical2.Offset(logical2.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil), 3),
+ unresolvedPlan: logical.Offset(logical.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil), 3),
wantLength: 2,
},
{
name: "Limit 5",
- unresolvedPlan: logical2.Offset(logical2.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil), 5),
+ unresolvedPlan: logical.Offset(logical.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil), 5),
wantLength: 0,
},
}
@@ -119,14 +129,14 @@ func TestPlanExecution_Offset(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tester := require.New(t)
- schema, err := logical2.DefaultAnalyzer().BuildStreamSchema(context.TODO(), metadata)
+ schema, err := analyzer.BuildStreamSchema(context.TODO(), metadata)
tester.NoError(err)
plan, err := tt.unresolvedPlan.Analyze(schema)
tester.NoError(err)
tester.NotNil(plan)
- entities, err := plan.Execute(streamT)
+ entities, err := plan.Execute(streamSvc)
tester.NoError(err)
tester.Len(entities, tt.wantLength)
})
@@ -134,15 +144,20 @@ func TestPlanExecution_Offset(t *testing.T) {
}
func TestPlanExecution_TraceIDFetch(t *testing.T) {
- streamT, deferFunc := setup(require.New(t))
+ tester := require.New(t)
+ streamSvc, metaService, deferFunc := setup(tester)
defer deferFunc()
- _ = setupQueryData(t, "multiple_shards.json", streamT)
+ _ = setupQueryData(t, "multiple_shards.json", streamSvc)
m := &commonv1.Metadata{
Name: "sw",
Group: "default",
}
+ analyzer, err := logical.CreateAnalyzerFromMetaService(metaService)
+ tester.NoError(err)
+ tester.NotNil(analyzer)
+
tests := []struct {
name string
traceID string
@@ -168,15 +183,15 @@ func TestPlanExecution_TraceIDFetch(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tester := require.New(t)
- s, err := logical2.DefaultAnalyzer().BuildStreamSchema(context.TODO(), m)
+ s, err := analyzer.BuildStreamSchema(context.TODO(), m)
tester.NoError(err)
- p, err := logical2.GlobalIndexScan(m, []logical2.Expr{
- logical2.Eq(logical2.NewFieldRef("searchable", "trace_id"), logical2.Str(tt.traceID)),
- }, logical2.NewTags("searchable", "trace_id")).Analyze(s)
+ p, err := logical.GlobalIndexScan(m, []logical.Expr{
+ logical.Eq(logical.NewFieldRef("searchable", "trace_id"), logical.Str(tt.traceID)),
+ }, logical.NewTags("searchable", "trace_id")).Analyze(s)
tester.NoError(err)
tester.NotNil(p)
- entities, err := p.Execute(streamT)
+ entities, err := p.Execute(streamSvc)
tester.NoError(err)
for _, entity := range entities {
tester.Len(entity.GetTagFamilies(), 1)
@@ -189,9 +204,10 @@ func TestPlanExecution_TraceIDFetch(t *testing.T) {
}
func TestPlanExecution_IndexScan(t *testing.T) {
- streamT, deferFunc := setup(require.New(t))
+ tester := require.New(t)
+ streamSvc, metaService, deferFunc := setup(tester)
defer deferFunc()
- baseTs := setupQueryData(t, "multiple_shards.json", streamT)
+ baseTs := setupQueryData(t, "multiple_shards.json", streamSvc)
metadata := &commonv1.Metadata{
Name: "sw",
@@ -200,60 +216,64 @@ func TestPlanExecution_IndexScan(t *testing.T) {
sT, eT := baseTs, baseTs.Add(1*time.Hour)
+ analyzer, err := logical.CreateAnalyzerFromMetaService(metaService)
+ tester.NoError(err)
+ tester.NotNil(analyzer)
+
tests := []struct {
name string
- unresolvedPlan logical2.UnresolvedPlan
+ unresolvedPlan logical.UnresolvedPlan
wantLength int
}{
{
name: "Single Index Search using POST without entity returns nothing",
- unresolvedPlan: logical2.IndexScan(sT, eT, metadata, []logical2.Expr{
- logical2.Eq(logical2.NewFieldRef("searchable", "http.method"), logical2.Str("POST")),
+ unresolvedPlan: logical.IndexScan(sT, eT, metadata, []logical.Expr{
+ logical.Eq(logical.NewFieldRef("searchable", "http.method"), logical.Str("POST")),
}, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil),
wantLength: 0,
},
{
name: "Single Index Search using inverted index",
- unresolvedPlan: logical2.IndexScan(sT, eT, metadata, []logical2.Expr{
- logical2.Eq(logical2.NewFieldRef("searchable", "http.method"), logical2.Str("GET")),
+ unresolvedPlan: logical.IndexScan(sT, eT, metadata, []logical.Expr{
+ logical.Eq(logical.NewFieldRef("searchable", "http.method"), logical.Str("GET")),
}, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil),
wantLength: 3,
},
{
name: "Single Index Search using LSM tree index",
- unresolvedPlan: logical2.IndexScan(sT, eT, metadata, []logical2.Expr{
- logical2.Lt(logical2.NewFieldRef("searchable", "duration"), logical2.Int(100)),
+ unresolvedPlan: logical.IndexScan(sT, eT, metadata, []logical.Expr{
+ logical.Lt(logical.NewFieldRef("searchable", "duration"), logical.Int(100)),
}, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil),
wantLength: 2,
},
{
name: "Single Index Search without entity returns results",
- unresolvedPlan: logical2.IndexScan(sT, eT, metadata, []logical2.Expr{
- logical2.Eq(logical2.NewFieldRef("searchable", "endpoint_id"), logical2.Str("/home_id")),
+ unresolvedPlan: logical.IndexScan(sT, eT, metadata, []logical.Expr{
+ logical.Eq(logical.NewFieldRef("searchable", "endpoint_id"), logical.Str("/home_id")),
}, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil),
wantLength: 2,
},
{
name: "Multiple Index Search",
- unresolvedPlan: logical2.IndexScan(sT, eT, metadata, []logical2.Expr{
- logical2.Eq(logical2.NewFieldRef("searchable", "http.method"), logical2.Str("GET")),
- logical2.Eq(logical2.NewFieldRef("searchable", "endpoint_id"), logical2.Str("/home_id")),
+ unresolvedPlan: logical.IndexScan(sT, eT, metadata, []logical.Expr{
+ logical.Eq(logical.NewFieldRef("searchable", "http.method"), logical.Str("GET")),
+ logical.Eq(logical.NewFieldRef("searchable", "endpoint_id"), logical.Str("/home_id")),
}, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil),
wantLength: 1,
},
{
name: "Multiple Index Search with a combination of numerical index and textual index",
- unresolvedPlan: logical2.IndexScan(sT, eT, metadata, []logical2.Expr{
- logical2.Eq(logical2.NewFieldRef("searchable", "http.method"), logical2.Str("GET")),
- logical2.Lt(logical2.NewFieldRef("searchable", "duration"), logical2.Int(100)),
+ unresolvedPlan: logical.IndexScan(sT, eT, metadata, []logical.Expr{
+ logical.Eq(logical.NewFieldRef("searchable", "http.method"), logical.Str("GET")),
+ logical.Lt(logical.NewFieldRef("searchable", "duration"), logical.Int(100)),
}, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil),
wantLength: 2,
},
{
name: "Multiple Index With One Empty Result(ChunkID)",
- unresolvedPlan: logical2.IndexScan(sT, eT, metadata, []logical2.Expr{
- logical2.Eq(logical2.NewFieldRef("searchable", "http.method"), logical2.Str("GET")),
- logical2.Eq(logical2.NewFieldRef("searchable", "endpoint_id"), logical2.Str("/unknown")),
+ unresolvedPlan: logical.IndexScan(sT, eT, metadata, []logical.Expr{
+ logical.Eq(logical.NewFieldRef("searchable", "http.method"), logical.Str("GET")),
+ logical.Eq(logical.NewFieldRef("searchable", "endpoint_id"), logical.Str("/unknown")),
}, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry}, nil),
wantLength: 0,
},
@@ -262,14 +282,14 @@ func TestPlanExecution_IndexScan(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tester := require.New(t)
- schema, err := logical2.DefaultAnalyzer().BuildStreamSchema(context.TODO(), metadata)
+ schema, err := analyzer.BuildStreamSchema(context.TODO(), metadata)
tester.NoError(err)
plan, err := tt.unresolvedPlan.Analyze(schema)
tester.NoError(err)
tester.NotNil(plan)
- entities, err := plan.Execute(streamT)
+ entities, err := plan.Execute(streamSvc)
tester.NoError(err)
tester.Len(entities, tt.wantLength)
})
@@ -277,9 +297,10 @@ func TestPlanExecution_IndexScan(t *testing.T) {
}
func TestPlanExecution_OrderBy(t *testing.T) {
- streamT, deferFunc := setup(require.New(t))
+ tester := require.New(t)
+ streamSvc, metaService, deferFunc := setup(tester)
defer deferFunc()
- baseTs := setupQueryData(t, "multiple_shards.json", streamT)
+ baseTs := setupQueryData(t, "multiple_shards.json", streamSvc)
metadata := &commonv1.Metadata{
Name: "sw",
@@ -288,6 +309,10 @@ func TestPlanExecution_OrderBy(t *testing.T) {
sT, eT := baseTs, baseTs.Add(1*time.Hour)
+ analyzer, err := logical.CreateAnalyzerFromMetaService(metaService)
+ tester.NoError(err)
+ tester.NotNil(analyzer)
+
tests := []struct {
name string
targetIndexRule string
@@ -325,34 +350,34 @@ func TestPlanExecution_OrderBy(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tester := require.New(t)
- schema, err := logical2.DefaultAnalyzer().BuildStreamSchema(context.TODO(), metadata)
+ schema, err := analyzer.BuildStreamSchema(context.TODO(), metadata)
tester.NoError(err)
tester.NotNil(schema)
if tt.targetIndexRule == "" {
- p, err := logical2.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry},
- logical2.OrderBy("", tt.sortDirection), logical2.NewTags("searchable", "start_time")).
+ p, err := logical.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry},
+ logical.OrderBy("", tt.sortDirection), logical.NewTags("searchable", "start_time")).
Analyze(schema)
tester.NoError(err)
tester.NotNil(p)
- entities, err := p.Execute(streamT)
+ entities, err := p.Execute(streamSvc)
tester.NoError(err)
tester.NotNil(entities)
- tester.True(logical2.SortedByTimestamp(entities, tt.sortDirection))
+ tester.True(logical.SortedByTimestamp(entities, tt.sortDirection))
} else {
- p, err := logical2.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry},
- logical2.OrderBy(tt.targetIndexRule, tt.sortDirection), logical2.NewTags("searchable", tt.targetIndexRule)).
+ p, err := logical.IndexScan(sT, eT, metadata, nil, tsdb.Entity{tsdb.AnyEntry, tsdb.AnyEntry, tsdb.AnyEntry},
+ logical.OrderBy(tt.targetIndexRule, tt.sortDirection), logical.NewTags("searchable", tt.targetIndexRule)).
Analyze(schema)
tester.NoError(err)
tester.NotNil(p)
- entities, err := p.Execute(streamT)
+ entities, err := p.Execute(streamSvc)
tester.NoError(err)
tester.NotNil(entities)
- tester.True(logical2.SortedByIndex(entities, tt.targetFamilyIdx, tt.targetTagIdx, tt.sortDirection))
+ tester.True(logical.SortedByIndex(entities, tt.targetFamilyIdx, tt.targetTagIdx, tt.sortDirection))
}
})
}
diff --git a/pkg/test/etcd.go b/pkg/test/etcd.go
new file mode 100644
index 0000000..5e2b1d3
--- /dev/null
+++ b/pkg/test/etcd.go
@@ -0,0 +1,100 @@
+// Licensed to Apache Software Foundation (ASF) under one or more contributor
+// license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright
+// ownership. Apache Software Foundation (ASF) licenses this file to you under
+// the Apache License, Version 2.0 (the "License"); you may
+// not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+package test
+
+import (
+ "context"
+ "embed"
+ "fmt"
+ "math/rand"
+ "os"
+ "path"
+
+ "github.com/google/uuid"
+ "google.golang.org/protobuf/encoding/protojson"
+
+ databasev1 "github.com/apache/skywalking-banyandb/api/proto/banyandb/database/v1"
+ "github.com/apache/skywalking-banyandb/banyand/metadata/schema"
+)
+
+const indexRuleDir = "testdata/index_rules"
+
+var (
+ //go:embed testdata/index_rules/*.json
+ indexRuleStore embed.FS
+ //go:embed testdata/index_rule_binding.json
+ indexRuleBindingJSON string
+ //go:embed testdata/stream.json
+ streamJSON string
+)
+
+func PreloadSchema(e schema.Registry) error {
+ if err := e.CreateGroup(context.TODO(), "default"); err != nil {
+ return err
+ }
+
+ s := &databasev1.Stream{}
+ if err := protojson.Unmarshal([]byte(streamJSON), s); err != nil {
+ return err
+ }
+ err := e.UpdateStream(context.Background(), s)
+ if err != nil {
+ return err
+ }
+
+ indexRuleBinding := &databasev1.IndexRuleBinding{}
+ if err = protojson.Unmarshal([]byte(indexRuleBindingJSON), indexRuleBinding); err != nil {
+ return err
+ }
+ err = e.UpdateIndexRuleBinding(context.Background(), indexRuleBinding)
+ if err != nil {
+ return err
+ }
+
+ entries, err := indexRuleStore.ReadDir(indexRuleDir)
+ if err != nil {
+ return err
+ }
+ for _, entry := range entries {
+ data, err := indexRuleStore.ReadFile(indexRuleDir + "/" + entry.Name())
+ if err != nil {
+ return err
+ }
+ var idxRule databasev1.IndexRule
+ err = protojson.Unmarshal(data, &idxRule)
+ if err != nil {
+ return err
+ }
+ err = e.UpdateIndexRule(context.Background(), &idxRule)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+func RandomTempDir() string {
+ return path.Join(os.TempDir(), fmt.Sprintf("banyandb-embed-etcd-%s", uuid.New().String()))
+}
+
+func RandomUnixDomainListener() (string, string) {
+ i := rand.Uint64()
+ return fmt.Sprintf("%s://localhost:%d%06d", "unix", os.Getpid(), i),
+ fmt.Sprintf("%s://localhost:%d%06d", "unix", os.Getpid(), i+1)
+}
diff --git a/banyand/metadata/schema/data/index_rule_binding.json b/pkg/test/testdata/index_rule_binding.json
similarity index 100%
rename from banyand/metadata/schema/data/index_rule_binding.json
rename to pkg/test/testdata/index_rule_binding.json
diff --git a/banyand/metadata/schema/data/index_rules/db.instance.json b/pkg/test/testdata/index_rules/db.instance.json
similarity index 100%
rename from banyand/metadata/schema/data/index_rules/db.instance.json
rename to pkg/test/testdata/index_rules/db.instance.json
diff --git a/banyand/metadata/schema/data/index_rules/db.type.json b/pkg/test/testdata/index_rules/db.type.json
similarity index 100%
rename from banyand/metadata/schema/data/index_rules/db.type.json
rename to pkg/test/testdata/index_rules/db.type.json
diff --git a/banyand/metadata/schema/data/index_rules/duration.json b/pkg/test/testdata/index_rules/duration.json
similarity index 100%
rename from banyand/metadata/schema/data/index_rules/duration.json
rename to pkg/test/testdata/index_rules/duration.json
diff --git a/banyand/metadata/schema/data/index_rules/endpoint_id.json b/pkg/test/testdata/index_rules/endpoint_id.json
similarity index 100%
rename from banyand/metadata/schema/data/index_rules/endpoint_id.json
rename to pkg/test/testdata/index_rules/endpoint_id.json
diff --git a/banyand/metadata/schema/data/index_rules/http.method.json b/pkg/test/testdata/index_rules/http.method.json
similarity index 100%
rename from banyand/metadata/schema/data/index_rules/http.method.json
rename to pkg/test/testdata/index_rules/http.method.json
diff --git a/banyand/metadata/schema/data/index_rules/mq.broker.json b/pkg/test/testdata/index_rules/mq.broker.json
similarity index 100%
rename from banyand/metadata/schema/data/index_rules/mq.broker.json
rename to pkg/test/testdata/index_rules/mq.broker.json
diff --git a/banyand/metadata/schema/data/index_rules/mq.queue.json b/pkg/test/testdata/index_rules/mq.queue.json
similarity index 100%
rename from banyand/metadata/schema/data/index_rules/mq.queue.json
rename to pkg/test/testdata/index_rules/mq.queue.json
diff --git a/banyand/metadata/schema/data/index_rules/mq.topic.json b/pkg/test/testdata/index_rules/mq.topic.json
similarity index 100%
rename from banyand/metadata/schema/data/index_rules/mq.topic.json
rename to pkg/test/testdata/index_rules/mq.topic.json
diff --git a/banyand/metadata/schema/data/index_rules/status_code.json b/pkg/test/testdata/index_rules/status_code.json
similarity index 100%
rename from banyand/metadata/schema/data/index_rules/status_code.json
rename to pkg/test/testdata/index_rules/status_code.json
diff --git a/banyand/metadata/schema/data/index_rules/trace_id.json b/pkg/test/testdata/index_rules/trace_id.json
similarity index 100%
rename from banyand/metadata/schema/data/index_rules/trace_id.json
rename to pkg/test/testdata/index_rules/trace_id.json
diff --git a/banyand/metadata/schema/data/stream.json b/pkg/test/testdata/stream.json
similarity index 100%
rename from banyand/metadata/schema/data/stream.json
rename to pkg/test/testdata/stream.json
diff --git a/scripts/build/base.mk b/scripts/build/base.mk
index 728874b..37ad749 100644
--- a/scripts/build/base.mk
+++ b/scripts/build/base.mk
@@ -24,34 +24,11 @@ tool_include := "$(root_dir)/include"
uname_os := $(shell uname -s)
uname_arch := $(shell uname -m)
-protoc_version ?= 3.17.3
-
-# There are no protobuf releases for Darwin ARM so for
-# now we always use the x86_64 release through Rosetta.
-ifeq ($(uname_os),Darwin)
-protoc_os := osx
-protoc_arch := x86_64
-endif
-ifeq ($(uname_os),Linux)
-protoc_os = linux
-protoc_arch := $(uname_arch)
-endif
-
+buf_version ?= v1.0.0-rc5
## Tools
-
-PROTOC := $(tool_bin)/protoc
-$(PROTOC):
- @echo "Install protoc..."
- @if ! command -v curl >/dev/null 2>/dev/null; then echo "error: curl must be installed" >&2; exit 1; fi
- @if ! command -v unzip >/dev/null 2>/dev/null; then echo "error: unzip must be installed" >&2; exit 1; fi
- @rm -f $(tool_bin)/protoc
- @rm -rf $(tool_include)/google
- @mkdir -p $(tool_bin) $(tool_include)
- $(eval protoc_tmp := $(shell mktemp -d))
- cd $(protoc_tmp); curl -sSL https://github.com/protocolbuffers/protobuf/releases/download/v$(protoc_version)/protoc-$(protoc_version)-$(protoc_os)-$(protoc_arch).zip -o protoc.zip
- cd $(protoc_tmp); unzip protoc.zip && mv bin/protoc $(tool_bin)/protoc && mv include/google $(tool_include)/google
- @rm -rf $(protoc_tmp)
+BUF := $(tool_bin)/buf
+$(BUF):
@echo "Install proto plugins..."
@rm -f $(tool_bin)/protoc-gen-go
@rm -f $(tool_bin)/protoc-gen-go-grpc
@@ -60,9 +37,9 @@ $(PROTOC):
@rm -f $(tool_bin)/protoc-gen-buf-lint
@GOBIN=$(tool_bin) go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1
@GOBIN=$(tool_bin) go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
- @GOBIN=$(tool_bin) go install github.com/bufbuild/buf/cmd/buf@v0.44.0
- @GOBIN=$(tool_bin) go install github.com/bufbuild/buf/cmd/protoc-gen-buf-breaking@v0.44.0
- @GOBIN=$(tool_bin) go install github.com/bufbuild/buf/cmd/protoc-gen-buf-lint@v0.44.0
+ @GOBIN=$(tool_bin) go install github.com/bufbuild/buf/cmd/buf@$(buf_version)
+ @GOBIN=$(tool_bin) go install github.com/bufbuild/buf/cmd/protoc-gen-buf-breaking@$(buf_version)
+ @GOBIN=$(tool_bin) go install github.com/bufbuild/buf/cmd/protoc-gen-buf-lint@$(buf_version)
MOCKGEN := $(tool_bin)/mockgen
$(MOCKGEN):