From ed747ce6541ebf41454d1ce0d05255ec6fa4d24c Mon Sep 17 00:00:00 2001
From: Zach Loafman
Date: Tue, 1 Aug 2023 21:23:47 +0000
Subject: [PATCH 1/5] Add `addresses` to allocation.proto
---
proto/allocation/allocation.proto | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/proto/allocation/allocation.proto b/proto/allocation/allocation.proto
index 8dabd54ad5..0866cc61c1 100644
--- a/proto/allocation/allocation.proto
+++ b/proto/allocation/allocation.proto
@@ -88,7 +88,13 @@ message AllocationRequest {
message AllocationResponse {
string gameServerName = 2;
repeated GameServerStatusPort ports = 3;
+
+ // Primary address at which game server can be reached
string address = 4;
+
+ // All addresses at which game server can be reached; copy of Node.Status.addresses
+ repeated GameServerStatusAddress addresses = 8;
+
string nodeName = 5;
string source = 6;
optional GameServerMetadata metadata = 7;
@@ -99,6 +105,12 @@ message AllocationResponse {
int32 port = 2;
}
+ // A single address; identical to corev1.NodeAddress
+ message GameServerStatusAddress {
+ string type = 1;
+ string address = 2;
+ }
+
message GameServerMetadata {
map labels = 1;
map annotations = 2;
From b6be3ef8626c6edba8a505bf911aae43fd8018ad Mon Sep 17 00:00:00 2001
From: Zach Loafman
Date: Tue, 1 Aug 2023 21:30:06 +0000
Subject: [PATCH 2/5] make gen-allocation-grpc
---
pkg/allocation/go/allocation.pb.go | 516 +++++++++++++---------
pkg/allocation/go/allocation.swagger.json | 23 +-
pkg/allocation/go/allocation_grpc.pb.go | 2 +-
3 files changed, 326 insertions(+), 215 deletions(-)
diff --git a/pkg/allocation/go/allocation.pb.go b/pkg/allocation/go/allocation.pb.go
index 93c2393979..0c05de60ff 100644
--- a/pkg/allocation/go/allocation.pb.go
+++ b/pkg/allocation/go/allocation.pb.go
@@ -30,7 +30,7 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.1
-// protoc v3.21.6
+// protoc v3.21.12
// source: proto/allocation/allocation.proto
package allocation
@@ -382,10 +382,13 @@ type AllocationResponse struct {
GameServerName string `protobuf:"bytes,2,opt,name=gameServerName,proto3" json:"gameServerName,omitempty"`
Ports []*AllocationResponse_GameServerStatusPort `protobuf:"bytes,3,rep,name=ports,proto3" json:"ports,omitempty"`
- Address string `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"`
- NodeName string `protobuf:"bytes,5,opt,name=nodeName,proto3" json:"nodeName,omitempty"`
- Source string `protobuf:"bytes,6,opt,name=source,proto3" json:"source,omitempty"`
- Metadata *AllocationResponse_GameServerMetadata `protobuf:"bytes,7,opt,name=metadata,proto3,oneof" json:"metadata,omitempty"`
+ // Primary address at which game server can be reached
+ Address string `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"`
+ // All addresses at which game server can be reached; copy of Node.Status.addresses
+ Addresses []*AllocationResponse_GameServerStatusAddress `protobuf:"bytes,8,rep,name=addresses,proto3" json:"addresses,omitempty"`
+ NodeName string `protobuf:"bytes,5,opt,name=nodeName,proto3" json:"nodeName,omitempty"`
+ Source string `protobuf:"bytes,6,opt,name=source,proto3" json:"source,omitempty"`
+ Metadata *AllocationResponse_GameServerMetadata `protobuf:"bytes,7,opt,name=metadata,proto3,oneof" json:"metadata,omitempty"`
}
func (x *AllocationResponse) Reset() {
@@ -441,6 +444,13 @@ func (x *AllocationResponse) GetAddress() string {
return ""
}
+func (x *AllocationResponse) GetAddresses() []*AllocationResponse_GameServerStatusAddress {
+ if x != nil {
+ return x.Addresses
+ }
+ return nil
+}
+
func (x *AllocationResponse) GetNodeName() string {
if x != nil {
return x.NodeName
@@ -1027,6 +1037,62 @@ func (x *AllocationResponse_GameServerStatusPort) GetPort() int32 {
return 0
}
+// A single address; identical to corev1.NodeAddress
+type AllocationResponse_GameServerStatusAddress struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"`
+ Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
+}
+
+func (x *AllocationResponse_GameServerStatusAddress) Reset() {
+ *x = AllocationResponse_GameServerStatusAddress{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_proto_allocation_allocation_proto_msgTypes[11]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *AllocationResponse_GameServerStatusAddress) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AllocationResponse_GameServerStatusAddress) ProtoMessage() {}
+
+func (x *AllocationResponse_GameServerStatusAddress) ProtoReflect() protoreflect.Message {
+ mi := &file_proto_allocation_allocation_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 AllocationResponse_GameServerStatusAddress.ProtoReflect.Descriptor instead.
+func (*AllocationResponse_GameServerStatusAddress) Descriptor() ([]byte, []int) {
+ return file_proto_allocation_allocation_proto_rawDescGZIP(), []int{1, 1}
+}
+
+func (x *AllocationResponse_GameServerStatusAddress) GetType() string {
+ if x != nil {
+ return x.Type
+ }
+ return ""
+}
+
+func (x *AllocationResponse_GameServerStatusAddress) GetAddress() string {
+ if x != nil {
+ return x.Address
+ }
+ return ""
+}
+
type AllocationResponse_GameServerMetadata struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1039,7 +1105,7 @@ type AllocationResponse_GameServerMetadata struct {
func (x *AllocationResponse_GameServerMetadata) Reset() {
*x = AllocationResponse_GameServerMetadata{}
if protoimpl.UnsafeEnabled {
- mi := &file_proto_allocation_allocation_proto_msgTypes[11]
+ mi := &file_proto_allocation_allocation_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -1052,7 +1118,7 @@ func (x *AllocationResponse_GameServerMetadata) String() string {
func (*AllocationResponse_GameServerMetadata) ProtoMessage() {}
func (x *AllocationResponse_GameServerMetadata) ProtoReflect() protoreflect.Message {
- mi := &file_proto_allocation_allocation_proto_msgTypes[11]
+ mi := &file_proto_allocation_allocation_proto_msgTypes[12]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -1065,7 +1131,7 @@ func (x *AllocationResponse_GameServerMetadata) ProtoReflect() protoreflect.Mess
// Deprecated: Use AllocationResponse_GameServerMetadata.ProtoReflect.Descriptor instead.
func (*AllocationResponse_GameServerMetadata) Descriptor() ([]byte, []int) {
- return file_proto_allocation_allocation_proto_rawDescGZIP(), []int{1, 1}
+ return file_proto_allocation_allocation_proto_rawDescGZIP(), []int{1, 2}
}
func (x *AllocationResponse_GameServerMetadata) GetLabels() map[string]string {
@@ -1137,7 +1203,7 @@ var file_proto_allocation_allocation_proto_rawDesc = []byte{
0x65, 0x73, 0x22, 0x31, 0x0a, 0x12, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67,
0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x61, 0x63, 0x6b,
0x65, 0x64, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x64, 0x10, 0x01, 0x22, 0xc5, 0x05, 0x0a, 0x12, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61,
+ 0x74, 0x65, 0x64, 0x10, 0x01, 0x22, 0xe4, 0x06, 0x0a, 0x12, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0e,
0x67, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x67, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
@@ -1147,57 +1213,41 @@ var file_proto_allocation_allocation_proto_rawDesc = []byte{
0x6e, 0x73, 0x65, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74,
0x61, 0x74, 0x75, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12,
0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64,
- 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64,
- 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18,
- 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x52, 0x0a,
- 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x31, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x6c, 0x6c,
- 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e,
- 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
- 0x74, 0x61, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01,
- 0x01, 0x1a, 0x3e, 0x0a, 0x14, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53,
- 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a,
- 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72,
- 0x74, 0x1a, 0xcc, 0x02, 0x0a, 0x12, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x55, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65,
- 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x62, 0x65,
- 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12,
- 0x64, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d,
- 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45,
- 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
- 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45,
- 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
- 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x81, 0x01,
- 0x0a, 0x13, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65,
- 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x0d, 0x92, 0x41, 0x0a, 0xa2, 0x02, 0x07, 0x62, 0x6f,
- 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x41,
- 0x0a, 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f,
- 0x72, 0x52, 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f,
- 0x72, 0x22, 0x8b, 0x02, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x50, 0x61, 0x74, 0x63, 0x68, 0x12,
- 0x39, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x21, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74,
- 0x61, 0x50, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74,
- 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x48, 0x0a, 0x0b, 0x61, 0x6e,
- 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x26, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74,
- 0x61, 0x50, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
+ 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x54, 0x0a, 0x09, 0x61, 0x64, 0x64,
+ 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x61,
+ 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x47, 0x61, 0x6d,
+ 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x64, 0x64,
+ 0x72, 0x65, 0x73, 0x73, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12,
+ 0x1a, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
+ 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61,
+ 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x1a, 0x3e, 0x0a, 0x14, 0x47, 0x61, 0x6d, 0x65, 0x53,
+ 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x6f, 0x72, 0x74, 0x12,
+ 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
+ 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x47, 0x0a, 0x17, 0x47, 0x61, 0x6d, 0x65, 0x53,
+ 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x41, 0x64, 0x64, 0x72, 0x65,
+ 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73,
+ 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73,
+ 0x1a, 0xcc, 0x02, 0x0a, 0x12, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x55, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c,
+ 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c,
+ 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x64,
+ 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4d, 0x65,
+ 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e,
0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
@@ -1206,110 +1256,136 @@ var file_proto_allocation_allocation_proto_rawDesc = []byte{
0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e,
0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
- 0x9d, 0x01, 0x0a, 0x0d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f,
- 0x72, 0x12, 0x4c, 0x0a, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73,
- 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f,
- 0x72, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74,
- 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a,
- 0x3e, 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e,
- 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
- 0x9d, 0x05, 0x0a, 0x12, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65,
- 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x51, 0x0a, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4c,
- 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x6c,
- 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4d, 0x61, 0x74, 0x63,
- 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61,
- 0x74, 0x63, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x58, 0x0a, 0x0f, 0x67, 0x61, 0x6d,
- 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
- 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
- 0x6f, 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61,
- 0x74, 0x65, 0x52, 0x0f, 0x67, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74,
- 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72,
- 0x52, 0x07, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x48, 0x0a, 0x08, 0x63, 0x6f, 0x75,
- 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x6c,
- 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x6f, 0x75, 0x6e,
- 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74,
- 0x65, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03,
- 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
- 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
- 0x6f, 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6c,
- 0x69, 0x73, 0x74, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x62,
- 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x0d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73,
- 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63,
- 0x74, 0x6f, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x52,
- 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
- 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2e,
- 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e,
- 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53,
- 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02,
- 0x38, 0x01, 0x22, 0x2b, 0x0a, 0x0f, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x00,
- 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x4c, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x22,
- 0x58, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f,
- 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c,
- 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x41, 0x76, 0x61, 0x69,
- 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x41, 0x76, 0x61, 0x69,
- 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, 0x61, 0x78,
- 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x91, 0x01, 0x0a, 0x0f, 0x43, 0x6f,
- 0x75, 0x6e, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a,
- 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
- 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78,
- 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78,
- 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x41, 0x76, 0x61, 0x69,
- 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x69, 0x6e,
- 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78,
- 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52,
- 0x0c, 0x6d, 0x61, 0x78, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x7c, 0x0a,
- 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x24, 0x0a,
- 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61,
- 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x41, 0x76,
- 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x41, 0x76,
- 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d,
- 0x61, 0x78, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xc4, 0x01, 0x0a, 0x08,
- 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x54, 0x79, 0x70,
- 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x6f, 0x72, 0x64,
- 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x4f,
- 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x1d, 0x0a, 0x04, 0x54,
- 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x10, 0x00,
- 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x10, 0x01, 0x22, 0x26, 0x0a, 0x05, 0x4f, 0x72,
- 0x64, 0x65, 0x72, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67,
- 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67,
- 0x10, 0x01, 0x32, 0x80, 0x01, 0x0a, 0x11, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x08, 0x41, 0x6c, 0x6c, 0x6f,
- 0x63, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x67, 0x61,
- 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x3a, 0x01, 0x2a, 0x42, 0x6e, 0x5a, 0x0c, 0x2e, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x63,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x92, 0x41, 0x5d, 0x12, 0x34, 0x0a, 0x21, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x6c, 0x6c,
- 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x0f, 0x76,
- 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x65, 0x74, 0x2a, 0x01,
- 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a,
- 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42,
+ 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x81, 0x01, 0x0a,
+ 0x13, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x74,
+ 0x74, 0x69, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x0d, 0x92, 0x41, 0x0a, 0xa2, 0x02, 0x07, 0x62, 0x6f, 0x6f,
+ 0x6c, 0x65, 0x61, 0x6e, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x41, 0x0a,
+ 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72,
+ 0x52, 0x0e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72,
+ 0x22, 0x8b, 0x02, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x50, 0x61, 0x74, 0x63, 0x68, 0x12, 0x39,
+ 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21,
+ 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61,
+ 0x50, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x48, 0x0a, 0x0b, 0x61, 0x6e, 0x6e,
+ 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26,
+ 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61,
+ 0x50, 0x61, 0x74, 0x63, 0x68, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e,
+ 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9d,
+ 0x01, 0x0a, 0x0d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72,
+ 0x12, 0x4c, 0x0a, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72,
+ 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72,
+ 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x3e,
+ 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9d,
+ 0x05, 0x0a, 0x12, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x6c,
+ 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x51, 0x0a, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61,
+ 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x6c, 0x6c,
+ 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68,
+ 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x74,
+ 0x63, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x58, 0x0a, 0x0f, 0x67, 0x61, 0x6d, 0x65,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x0e, 0x32, 0x2e, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47,
+ 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f,
+ 0x72, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74,
+ 0x65, 0x52, 0x0f, 0x67, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61,
+ 0x74, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52,
+ 0x07, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x48, 0x0a, 0x08, 0x63, 0x6f, 0x75, 0x6e,
+ 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x6c, 0x6c,
+ 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74,
+ 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65,
+ 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28,
+ 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47,
+ 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f,
+ 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6c, 0x69,
+ 0x73, 0x74, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x62, 0x65,
+ 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+ 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x0d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+ 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x6f, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x52, 0x0a,
+ 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
+ 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2e, 0x0a,
+ 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61,
+ 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65,
+ 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+ 0x01, 0x22, 0x2b, 0x0a, 0x0f, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53,
+ 0x74, 0x61, 0x74, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x00, 0x12,
+ 0x0d, 0x0a, 0x09, 0x41, 0x4c, 0x4c, 0x4f, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x01, 0x22, 0x58,
+ 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72,
+ 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x41, 0x76, 0x61, 0x69, 0x6c,
+ 0x61, 0x62, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x41, 0x76, 0x61, 0x69, 0x6c,
+ 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x41,
+ 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x91, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x75,
+ 0x6e, 0x74, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08,
+ 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08,
+ 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x43,
+ 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43,
+ 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x41, 0x76, 0x61, 0x69, 0x6c,
+ 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x41,
+ 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x41,
+ 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c,
+ 0x6d, 0x61, 0x78, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x7c, 0x0a, 0x0c,
+ 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x0d,
+ 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x73, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62,
+ 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x41, 0x76, 0x61,
+ 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x41, 0x76, 0x61,
+ 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x61,
+ 0x78, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xc4, 0x01, 0x0a, 0x08, 0x50,
+ 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x54, 0x79, 0x70, 0x65,
+ 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65,
+ 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x4f, 0x72,
+ 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x1d, 0x0a, 0x04, 0x54, 0x79,
+ 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x10, 0x00, 0x12,
+ 0x08, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x10, 0x01, 0x22, 0x26, 0x0a, 0x05, 0x4f, 0x72, 0x64,
+ 0x65, 0x72, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x10,
+ 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x44, 0x65, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x10,
+ 0x01, 0x32, 0x80, 0x01, 0x0a, 0x11, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x08, 0x41, 0x6c, 0x6c, 0x6f, 0x63,
+ 0x61, 0x74, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
+ 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x15, 0x2f, 0x67, 0x61, 0x6d,
+ 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x3a, 0x01, 0x2a, 0x42, 0x6e, 0x5a, 0x0c, 0x2e, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x92, 0x41, 0x5d, 0x12, 0x34, 0x0a, 0x21, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+ 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x6c, 0x6c, 0x6f,
+ 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x0f, 0x76, 0x65,
+ 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x65, 0x74, 0x2a, 0x01, 0x02,
+ 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73,
+ 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f,
+ 0x6a, 0x73, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -1325,32 +1401,33 @@ func file_proto_allocation_allocation_proto_rawDescGZIP() []byte {
}
var file_proto_allocation_allocation_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
-var file_proto_allocation_allocation_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
+var file_proto_allocation_allocation_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
var file_proto_allocation_allocation_proto_goTypes = []interface{}{
- (AllocationRequest_SchedulingStrategy)(0), // 0: allocation.AllocationRequest.SchedulingStrategy
- (GameServerSelector_GameServerState)(0), // 1: allocation.GameServerSelector.GameServerState
- (Priority_Type)(0), // 2: allocation.Priority.Type
- (Priority_Order)(0), // 3: allocation.Priority.Order
- (*AllocationRequest)(nil), // 4: allocation.AllocationRequest
- (*AllocationResponse)(nil), // 5: allocation.AllocationResponse
- (*MultiClusterSetting)(nil), // 6: allocation.MultiClusterSetting
- (*MetaPatch)(nil), // 7: allocation.MetaPatch
- (*LabelSelector)(nil), // 8: allocation.LabelSelector
- (*GameServerSelector)(nil), // 9: allocation.GameServerSelector
- (*PlayerSelector)(nil), // 10: allocation.PlayerSelector
- (*CounterSelector)(nil), // 11: allocation.CounterSelector
- (*ListSelector)(nil), // 12: allocation.ListSelector
- (*Priority)(nil), // 13: allocation.Priority
- (*AllocationResponse_GameServerStatusPort)(nil), // 14: allocation.AllocationResponse.GameServerStatusPort
- (*AllocationResponse_GameServerMetadata)(nil), // 15: allocation.AllocationResponse.GameServerMetadata
- nil, // 16: allocation.AllocationResponse.GameServerMetadata.LabelsEntry
- nil, // 17: allocation.AllocationResponse.GameServerMetadata.AnnotationsEntry
- nil, // 18: allocation.MetaPatch.LabelsEntry
- nil, // 19: allocation.MetaPatch.AnnotationsEntry
- nil, // 20: allocation.LabelSelector.MatchLabelsEntry
- nil, // 21: allocation.GameServerSelector.MatchLabelsEntry
- nil, // 22: allocation.GameServerSelector.CountersEntry
- nil, // 23: allocation.GameServerSelector.ListsEntry
+ (AllocationRequest_SchedulingStrategy)(0), // 0: allocation.AllocationRequest.SchedulingStrategy
+ (GameServerSelector_GameServerState)(0), // 1: allocation.GameServerSelector.GameServerState
+ (Priority_Type)(0), // 2: allocation.Priority.Type
+ (Priority_Order)(0), // 3: allocation.Priority.Order
+ (*AllocationRequest)(nil), // 4: allocation.AllocationRequest
+ (*AllocationResponse)(nil), // 5: allocation.AllocationResponse
+ (*MultiClusterSetting)(nil), // 6: allocation.MultiClusterSetting
+ (*MetaPatch)(nil), // 7: allocation.MetaPatch
+ (*LabelSelector)(nil), // 8: allocation.LabelSelector
+ (*GameServerSelector)(nil), // 9: allocation.GameServerSelector
+ (*PlayerSelector)(nil), // 10: allocation.PlayerSelector
+ (*CounterSelector)(nil), // 11: allocation.CounterSelector
+ (*ListSelector)(nil), // 12: allocation.ListSelector
+ (*Priority)(nil), // 13: allocation.Priority
+ (*AllocationResponse_GameServerStatusPort)(nil), // 14: allocation.AllocationResponse.GameServerStatusPort
+ (*AllocationResponse_GameServerStatusAddress)(nil), // 15: allocation.AllocationResponse.GameServerStatusAddress
+ (*AllocationResponse_GameServerMetadata)(nil), // 16: allocation.AllocationResponse.GameServerMetadata
+ nil, // 17: allocation.AllocationResponse.GameServerMetadata.LabelsEntry
+ nil, // 18: allocation.AllocationResponse.GameServerMetadata.AnnotationsEntry
+ nil, // 19: allocation.MetaPatch.LabelsEntry
+ nil, // 20: allocation.MetaPatch.AnnotationsEntry
+ nil, // 21: allocation.LabelSelector.MatchLabelsEntry
+ nil, // 22: allocation.GameServerSelector.MatchLabelsEntry
+ nil, // 23: allocation.GameServerSelector.CountersEntry
+ nil, // 24: allocation.GameServerSelector.ListsEntry
}
var file_proto_allocation_allocation_proto_depIdxs = []int32{
6, // 0: allocation.AllocationRequest.multiClusterSetting:type_name -> allocation.MultiClusterSetting
@@ -1362,29 +1439,30 @@ var file_proto_allocation_allocation_proto_depIdxs = []int32{
9, // 6: allocation.AllocationRequest.gameServerSelectors:type_name -> allocation.GameServerSelector
13, // 7: allocation.AllocationRequest.priorities:type_name -> allocation.Priority
14, // 8: allocation.AllocationResponse.ports:type_name -> allocation.AllocationResponse.GameServerStatusPort
- 15, // 9: allocation.AllocationResponse.metadata:type_name -> allocation.AllocationResponse.GameServerMetadata
- 8, // 10: allocation.MultiClusterSetting.policySelector:type_name -> allocation.LabelSelector
- 18, // 11: allocation.MetaPatch.labels:type_name -> allocation.MetaPatch.LabelsEntry
- 19, // 12: allocation.MetaPatch.annotations:type_name -> allocation.MetaPatch.AnnotationsEntry
- 20, // 13: allocation.LabelSelector.matchLabels:type_name -> allocation.LabelSelector.MatchLabelsEntry
- 21, // 14: allocation.GameServerSelector.matchLabels:type_name -> allocation.GameServerSelector.MatchLabelsEntry
- 1, // 15: allocation.GameServerSelector.gameServerState:type_name -> allocation.GameServerSelector.GameServerState
- 10, // 16: allocation.GameServerSelector.players:type_name -> allocation.PlayerSelector
- 22, // 17: allocation.GameServerSelector.counters:type_name -> allocation.GameServerSelector.CountersEntry
- 23, // 18: allocation.GameServerSelector.lists:type_name -> allocation.GameServerSelector.ListsEntry
- 2, // 19: allocation.Priority.type:type_name -> allocation.Priority.Type
- 3, // 20: allocation.Priority.order:type_name -> allocation.Priority.Order
- 16, // 21: allocation.AllocationResponse.GameServerMetadata.labels:type_name -> allocation.AllocationResponse.GameServerMetadata.LabelsEntry
- 17, // 22: allocation.AllocationResponse.GameServerMetadata.annotations:type_name -> allocation.AllocationResponse.GameServerMetadata.AnnotationsEntry
- 11, // 23: allocation.GameServerSelector.CountersEntry.value:type_name -> allocation.CounterSelector
- 12, // 24: allocation.GameServerSelector.ListsEntry.value:type_name -> allocation.ListSelector
- 4, // 25: allocation.AllocationService.Allocate:input_type -> allocation.AllocationRequest
- 5, // 26: allocation.AllocationService.Allocate:output_type -> allocation.AllocationResponse
- 26, // [26:27] is the sub-list for method output_type
- 25, // [25:26] 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
+ 15, // 9: allocation.AllocationResponse.addresses:type_name -> allocation.AllocationResponse.GameServerStatusAddress
+ 16, // 10: allocation.AllocationResponse.metadata:type_name -> allocation.AllocationResponse.GameServerMetadata
+ 8, // 11: allocation.MultiClusterSetting.policySelector:type_name -> allocation.LabelSelector
+ 19, // 12: allocation.MetaPatch.labels:type_name -> allocation.MetaPatch.LabelsEntry
+ 20, // 13: allocation.MetaPatch.annotations:type_name -> allocation.MetaPatch.AnnotationsEntry
+ 21, // 14: allocation.LabelSelector.matchLabels:type_name -> allocation.LabelSelector.MatchLabelsEntry
+ 22, // 15: allocation.GameServerSelector.matchLabels:type_name -> allocation.GameServerSelector.MatchLabelsEntry
+ 1, // 16: allocation.GameServerSelector.gameServerState:type_name -> allocation.GameServerSelector.GameServerState
+ 10, // 17: allocation.GameServerSelector.players:type_name -> allocation.PlayerSelector
+ 23, // 18: allocation.GameServerSelector.counters:type_name -> allocation.GameServerSelector.CountersEntry
+ 24, // 19: allocation.GameServerSelector.lists:type_name -> allocation.GameServerSelector.ListsEntry
+ 2, // 20: allocation.Priority.type:type_name -> allocation.Priority.Type
+ 3, // 21: allocation.Priority.order:type_name -> allocation.Priority.Order
+ 17, // 22: allocation.AllocationResponse.GameServerMetadata.labels:type_name -> allocation.AllocationResponse.GameServerMetadata.LabelsEntry
+ 18, // 23: allocation.AllocationResponse.GameServerMetadata.annotations:type_name -> allocation.AllocationResponse.GameServerMetadata.AnnotationsEntry
+ 11, // 24: allocation.GameServerSelector.CountersEntry.value:type_name -> allocation.CounterSelector
+ 12, // 25: allocation.GameServerSelector.ListsEntry.value:type_name -> allocation.ListSelector
+ 4, // 26: allocation.AllocationService.Allocate:input_type -> allocation.AllocationRequest
+ 5, // 27: allocation.AllocationService.Allocate:output_type -> allocation.AllocationResponse
+ 27, // [27:28] is the sub-list for method output_type
+ 26, // [26:27] is the sub-list for method input_type
+ 26, // [26:26] is the sub-list for extension type_name
+ 26, // [26:26] is the sub-list for extension extendee
+ 0, // [0:26] is the sub-list for field type_name
}
func init() { file_proto_allocation_allocation_proto_init() }
@@ -1526,6 +1604,18 @@ func file_proto_allocation_allocation_proto_init() {
}
}
file_proto_allocation_allocation_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AllocationResponse_GameServerStatusAddress); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_proto_allocation_allocation_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AllocationResponse_GameServerMetadata); i {
case 0:
return &v.state
@@ -1545,7 +1635,7 @@ func file_proto_allocation_allocation_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_proto_allocation_allocation_proto_rawDesc,
NumEnums: 4,
- NumMessages: 20,
+ NumMessages: 21,
NumExtensions: 0,
NumServices: 1,
},
diff --git a/pkg/allocation/go/allocation.swagger.json b/pkg/allocation/go/allocation.swagger.json
index d31cf96060..9b3413db3e 100644
--- a/pkg/allocation/go/allocation.swagger.json
+++ b/pkg/allocation/go/allocation.swagger.json
@@ -72,6 +72,18 @@
}
}
},
+ "AllocationResponseGameServerStatusAddress": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "address": {
+ "type": "string"
+ }
+ },
+ "title": "A single address; identical to corev1.NodeAddress"
+ },
"AllocationResponseGameServerStatusPort": {
"type": "object",
"properties": {
@@ -168,7 +180,16 @@
}
},
"address": {
- "type": "string"
+ "type": "string",
+ "title": "Primary address at which game server can be reached"
+ },
+ "addresses": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "$ref": "#/definitions/AllocationResponseGameServerStatusAddress"
+ },
+ "title": "All addresses at which game server can be reached; copy of Node.Status.addresses"
},
"nodeName": {
"type": "string"
diff --git a/pkg/allocation/go/allocation_grpc.pb.go b/pkg/allocation/go/allocation_grpc.pb.go
index f4148dcca5..353bd5bee1 100644
--- a/pkg/allocation/go/allocation_grpc.pb.go
+++ b/pkg/allocation/go/allocation_grpc.pb.go
@@ -16,7 +16,7 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.2.0
-// - protoc v3.21.6
+// - protoc v3.21.12
// source: proto/allocation/allocation.proto
package allocation
From 98d8cbce324b9bdf06094337c9deca280c4e776e Mon Sep 17 00:00:00 2001
From: Zach Loafman
Date: Tue, 1 Aug 2023 22:59:21 +0000
Subject: [PATCH 3/5] Add all GameServer addresses to allocation.addresses
response
---
pkg/allocation/converters/converter.go | 27 ++++++
pkg/allocation/converters/converter_test.go | 92 +++++++++++++++++++
.../allocation/v1/gameserverallocation.go | 2 +
pkg/gameserverallocations/allocator.go | 1 +
test/e2e/allochelper/helper_func.go | 1 +
5 files changed, 123 insertions(+)
diff --git a/pkg/allocation/converters/converter.go b/pkg/allocation/converters/converter.go
index 1c865fd631..3da938875e 100644
--- a/pkg/allocation/converters/converter.go
+++ b/pkg/allocation/converters/converter.go
@@ -23,6 +23,7 @@ import (
"agones.dev/agones/pkg/util/runtime"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
+ corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
@@ -299,6 +300,7 @@ func ConvertGSAToAllocationResponse(in *allocationv1.GameServerAllocation) (*pb.
return &pb.AllocationResponse{
GameServerName: in.Status.GameServerName,
Address: in.Status.Address,
+ Addresses: convertGSAAddressesToAllocationAddresses(in.Status.Addresses),
NodeName: in.Status.NodeName,
Ports: convertGSAAgonesPortsToAllocationPorts(in.Status.Ports),
Source: in.Status.Source,
@@ -317,6 +319,7 @@ func ConvertAllocationResponseToGSA(in *pb.AllocationResponse, rs string) *alloc
State: allocationv1.GameServerAllocationAllocated,
GameServerName: in.GameServerName,
Address: in.Address,
+ Addresses: convertAllocationAddressesToGSAAddresses(in.Addresses),
NodeName: in.NodeName,
Ports: convertAllocationPortsToGSAAgonesPorts(in.Ports),
Source: rs,
@@ -328,6 +331,30 @@ func ConvertAllocationResponseToGSA(in *pb.AllocationResponse, rs string) *alloc
return out
}
+// convertGSAAddressesToAllocationAddresses converts corev1.NodeAddress to AllocationResponse_GameServerStatusAddress
+func convertGSAAddressesToAllocationAddresses(in []corev1.NodeAddress) []*pb.AllocationResponse_GameServerStatusAddress {
+ var addresses []*pb.AllocationResponse_GameServerStatusAddress
+ for _, addr := range in {
+ addresses = append(addresses, &pb.AllocationResponse_GameServerStatusAddress{
+ Type: string(addr.Type),
+ Address: addr.Address,
+ })
+ }
+ return addresses
+}
+
+// convertAllocationAddressesToGSAAddresses converts AllocationResponse_GameServerStatusAddress to corev1.NodeAddress
+func convertAllocationAddressesToGSAAddresses(in []*pb.AllocationResponse_GameServerStatusAddress) []corev1.NodeAddress {
+ var addresses []corev1.NodeAddress
+ for _, addr := range in {
+ addresses = append(addresses, corev1.NodeAddress{
+ Type: corev1.NodeAddressType(addr.Type),
+ Address: addr.Address,
+ })
+ }
+ return addresses
+}
+
// convertGSAAgonesPortsToAllocationPorts converts GameServerStatusPort V1 (GSA) to AllocationResponse_GameServerStatusPort
func convertGSAAgonesPortsToAllocationPorts(in []agonesv1.GameServerStatusPort) []*pb.AllocationResponse_GameServerStatusPort {
var pbPorts []*pb.AllocationResponse_GameServerStatusPort
diff --git a/pkg/allocation/converters/converter_test.go b/pkg/allocation/converters/converter_test.go
index 6b52d30e8c..52c7b573ba 100644
--- a/pkg/allocation/converters/converter_test.go
+++ b/pkg/allocation/converters/converter_test.go
@@ -27,6 +27,7 @@ import (
"github.com/stretchr/testify/require"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
+ corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
@@ -913,6 +914,72 @@ func TestConvertGSAToAllocationResponse(t *testing.T) {
},
},
},
+ {
+ name: "addresses convert",
+ in: &allocationv1.GameServerAllocation{
+ TypeMeta: metav1.TypeMeta{
+ Kind: "GameServerAllocation",
+ APIVersion: "allocation.agones.dev/v1",
+ },
+ Status: allocationv1.GameServerAllocationStatus{
+ State: allocationv1.GameServerAllocationAllocated,
+ GameServerName: "GSN",
+ Ports: []agonesv1.GameServerStatusPort{
+ {
+ Port: 123,
+ },
+ {
+ Name: "port-name",
+ },
+ },
+ Address: "address",
+ Addresses: []corev1.NodeAddress{
+ {Type: "SomeAddressType", Address: "123.123.123.123"},
+ {Type: "AnotherAddressType", Address: "321.321.321.321"},
+ },
+ NodeName: "node-name",
+ Source: "local",
+ Metadata: &allocationv1.GameServerMetadata{
+ Labels: map[string]string{
+ "label-key": "label-value",
+ "other-key": "other-value",
+ },
+ Annotations: map[string]string{
+ "annotation-key": "annotation-value",
+ "other-key": "other-value",
+ },
+ },
+ },
+ },
+ want: &pb.AllocationResponse{
+ GameServerName: "GSN",
+ Address: "address",
+ Addresses: []*pb.AllocationResponse_GameServerStatusAddress{
+ {Type: "SomeAddressType", Address: "123.123.123.123"},
+ {Type: "AnotherAddressType", Address: "321.321.321.321"},
+ },
+ NodeName: "node-name",
+ Ports: []*pb.AllocationResponse_GameServerStatusPort{
+ {
+ Port: 123,
+ },
+ {
+ Name: "port-name",
+ },
+ },
+ Source: "local",
+ Metadata: &pb.AllocationResponse_GameServerMetadata{
+ Labels: map[string]string{
+ "label-key": "label-value",
+ "other-key": "other-value",
+ },
+ Annotations: map[string]string{
+ "annotation-key": "annotation-value",
+ "other-key": "other-value",
+ },
+ },
+ },
+ },
}
for _, tc := range tests {
tc := tc
@@ -968,6 +1035,31 @@ func TestConvertAllocationResponseToGSA(t *testing.T) {
},
},
},
+ {
+ name: "Addresses convert",
+ in: &pb.AllocationResponse{
+ Ports: []*pb.AllocationResponse_GameServerStatusPort{},
+ Source: "33.188.237.156:443",
+ Addresses: []*pb.AllocationResponse_GameServerStatusAddress{
+ {Type: "SomeAddressType", Address: "123.123.123.123"},
+ {Type: "AnotherAddressType", Address: "321.321.321.321"},
+ },
+ },
+ want: &allocationv1.GameServerAllocation{
+ TypeMeta: metav1.TypeMeta{
+ Kind: "GameServerAllocation",
+ APIVersion: "allocation.agones.dev/v1",
+ },
+ Status: allocationv1.GameServerAllocationStatus{
+ State: allocationv1.GameServerAllocationAllocated,
+ Source: "33.188.237.156:443",
+ Addresses: []corev1.NodeAddress{
+ {Type: "SomeAddressType", Address: "123.123.123.123"},
+ {Type: "AnotherAddressType", Address: "321.321.321.321"},
+ },
+ },
+ },
+ },
}
for _, tc := range tests {
tc := tc
diff --git a/pkg/apis/allocation/v1/gameserverallocation.go b/pkg/apis/allocation/v1/gameserverallocation.go
index e10e0342a0..0acee39c88 100644
--- a/pkg/apis/allocation/v1/gameserverallocation.go
+++ b/pkg/apis/allocation/v1/gameserverallocation.go
@@ -22,6 +22,7 @@ import (
agonesv1 "agones.dev/agones/pkg/apis/agones/v1"
"agones.dev/agones/pkg/util/runtime"
hashstructure "github.com/mitchellh/hashstructure/v2"
+ corev1 "k8s.io/api/core/v1"
apivalidation "k8s.io/apimachinery/pkg/api/validation"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
metav1validation "k8s.io/apimachinery/pkg/apis/meta/v1/validation"
@@ -483,6 +484,7 @@ type GameServerAllocationStatus struct {
GameServerName string `json:"gameServerName"`
Ports []agonesv1.GameServerStatusPort `json:"ports,omitempty"`
Address string `json:"address,omitempty"`
+ Addresses []corev1.NodeAddress `json:"addresses,omitempty"`
NodeName string `json:"nodeName,omitempty"`
// If the allocation is from a remote cluster, Source is the endpoint of the remote agones-allocator.
// Otherwise, Source is "local"
diff --git a/pkg/gameserverallocations/allocator.go b/pkg/gameserverallocations/allocator.go
index 67db3bdb69..7e79145558 100644
--- a/pkg/gameserverallocations/allocator.go
+++ b/pkg/gameserverallocations/allocator.go
@@ -276,6 +276,7 @@ func (c *Allocator) allocateFromLocalCluster(ctx context.Context, gsa *allocatio
gsa.Status.GameServerName = gs.ObjectMeta.Name
gsa.Status.Ports = gs.Status.Ports
gsa.Status.Address = gs.Status.Address
+ gsa.Status.Addresses = append(gsa.Status.Addresses, gs.Status.Addresses...)
gsa.Status.NodeName = gs.Status.NodeName
gsa.Status.Source = localAllocationSource
gsa.Status.Metadata = &allocationv1.GameServerMetadata{
diff --git a/test/e2e/allochelper/helper_func.go b/test/e2e/allochelper/helper_func.go
index db282dabe0..2e3699be83 100644
--- a/test/e2e/allochelper/helper_func.go
+++ b/test/e2e/allochelper/helper_func.go
@@ -254,6 +254,7 @@ func ValidateAllocatorResponse(t *testing.T, resp *pb.AllocationResponse) {
assert.Greater(t, len(resp.Ports), 0)
assert.NotEmpty(t, resp.GameServerName)
assert.NotEmpty(t, resp.Address)
+ assert.NotEmpty(t, resp.Addresses)
assert.NotEmpty(t, resp.NodeName)
assert.NotEmpty(t, resp.Metadata.Labels)
assert.NotEmpty(t, resp.Metadata.Annotations)
From ecfd31a8be9d0705438ca284406770c737903bd5 Mon Sep 17 00:00:00 2001
From: Zach Loafman
Date: Tue, 1 Aug 2023 23:58:44 +0000
Subject: [PATCH 4/5] make gen-crd-client gen-all-sdk-grpc gen-api-docs
---
.../allocation/v1/zz_generated.deepcopy.go | 6 +
sdks/rust/proto/allocation/allocation.proto | 12 +
.../Reference/agones_crd_api_reference.html | 792 +++++++++---------
3 files changed, 420 insertions(+), 390 deletions(-)
diff --git a/pkg/apis/allocation/v1/zz_generated.deepcopy.go b/pkg/apis/allocation/v1/zz_generated.deepcopy.go
index c9d9b6ab8b..d7f6fbfdd1 100644
--- a/pkg/apis/allocation/v1/zz_generated.deepcopy.go
+++ b/pkg/apis/allocation/v1/zz_generated.deepcopy.go
@@ -23,6 +23,7 @@ package v1
import (
agonesv1 "agones.dev/agones/pkg/apis/agones/v1"
+ corev1 "k8s.io/api/core/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
)
@@ -194,6 +195,11 @@ func (in *GameServerAllocationStatus) DeepCopyInto(out *GameServerAllocationStat
*out = make([]agonesv1.GameServerStatusPort, len(*in))
copy(*out, *in)
}
+ if in.Addresses != nil {
+ in, out := &in.Addresses, &out.Addresses
+ *out = make([]corev1.NodeAddress, len(*in))
+ copy(*out, *in)
+ }
if in.Metadata != nil {
in, out := &in.Metadata, &out.Metadata
*out = new(GameServerMetadata)
diff --git a/sdks/rust/proto/allocation/allocation.proto b/sdks/rust/proto/allocation/allocation.proto
index 8dabd54ad5..0866cc61c1 100644
--- a/sdks/rust/proto/allocation/allocation.proto
+++ b/sdks/rust/proto/allocation/allocation.proto
@@ -88,7 +88,13 @@ message AllocationRequest {
message AllocationResponse {
string gameServerName = 2;
repeated GameServerStatusPort ports = 3;
+
+ // Primary address at which game server can be reached
string address = 4;
+
+ // All addresses at which game server can be reached; copy of Node.Status.addresses
+ repeated GameServerStatusAddress addresses = 8;
+
string nodeName = 5;
string source = 6;
optional GameServerMetadata metadata = 7;
@@ -99,6 +105,12 @@ message AllocationResponse {
int32 port = 2;
}
+ // A single address; identical to corev1.NodeAddress
+ message GameServerStatusAddress {
+ string type = 1;
+ string address = 2;
+ }
+
message GameServerMetadata {
map labels = 1;
map annotations = 2;
diff --git a/site/content/en/docs/Reference/agones_crd_api_reference.html b/site/content/en/docs/Reference/agones_crd_api_reference.html
index 36ad80c0a1..6cd1a344fb 100644
--- a/site/content/en/docs/Reference/agones_crd_api_reference.html
+++ b/site/content/en/docs/Reference/agones_crd_api_reference.html
@@ -4180,9 +4180,6 @@ GameServerAll
Packages:
-multicluster.agones.dev/v1
+agones.dev/v1
Package v1 is the v1 version of the API.
Resource Types:
-GameServerAllocationPolicy
+Fleet
-
GameServerAllocationPolicy is the Schema for the gameserverallocationpolicies API
+Fleet is the data structure for a Fleet resource
@@ -4219,7 +4223,7 @@ GameServerAllocat
string
-multicluster.agones.dev/v1
+agones.dev/v1
|
@@ -4228,7 +4232,7 @@ GameServerAllocat
kind
string
-GameServerAllocationPolicy |
+Fleet |
@@ -4248,8 +4252,8 @@
-priority
+replicas
int32
|
+ Replicas are the number of GameServers that should be in this set. Defaults to 0.
|
-weight
+allocationOverflow
-int
+
+AllocationOverflow
+
|
+(Optional)
+ [Stage: Alpha]
+[FeatureFlag:FleetAllocationOverflow]
+Labels and/or Annotations to apply to overflowing GameServers when the number of Allocated GameServers is more
+than the desired replicas on the underlying GameServerSet
|
-connectionInfo
+strategy
-
-ClusterConnectionInfo
+
+Kubernetes apps/v1.DeploymentStrategy
|
+ Deployment strategy
|
-
- |
-
-
-
-ClusterConnectionInfo
-
-
-(Appears on:
-GameServerAllocationPolicySpec)
-
-
-
ClusterConnectionInfo defines the connection information for a cluster
-
-
-
-
-Field |
-Description |
-
-
-
-clusterName
+scheduling
-string
+agones.dev/agones/pkg/apis.SchedulingStrategy
|
- Optional: the name of the targeted cluster
+Scheduling strategy. Defaults to “Packed”.
|
-allocationEndpoints
+priorities
-[]string
+
+[]Priority
+
|
- The endpoints for the allocator service in the targeted cluster.
-If the AllocationEndpoints is not set, the allocation happens on local cluster.
-If there are multiple endpoints any of the endpoints that can handle allocation request should suffice
+(Optional)
+(Alpha, CountsAndLists feature flag) The first Priority on the array of Priorities is the most
+important for sorting. The Fleetautoscaler will use the first priority for sorting GameServers
+by total Capacity in the Fleet and acts as a tie-breaker after sorting the game servers by
+State and Strategy. Impacts scale down logic.
|
-secretName
+template
-string
+
+GameServerTemplateSpec
+
|
- The name of the secret that contains TLS client certificates to connect the allocator server in the targeted cluster
+Template the GameServer template to apply for this Fleet
|
-
-
-namespace
-
-string
-
- |
-
- The cluster namespace from which to allocate gameservers
+ |
-serverCa
+status
-[]byte
+
+FleetStatus
+
|
- The PEM encoded server CA, used by the allocator client to authenticate the remote server.
|
-ConnectionInfoIterator
+GameServer
-
ConnectionInfoIterator an iterator on ClusterConnectionInfo
+GameServer is the data structure for a GameServer resource.
+It is worth noting that while there is a GameServerStatus
Status entry for the GameServer
, it is not
+defined as a subresource - unlike Fleet
and other Agones resources.
+This is so that we can retain the ability to change multiple aspects of a GameServer
in a single atomic operation,
+which is particularly useful for operations such as allocation.
@@ -4385,396 +4379,113 @@ ConnectionInfoIterato
-currPriority
-
-int
-
- |
+apiVersion
+string
- currPriority Current priority index from the orderedPriorities
+
+agones.dev/v1
+
|
-orderedPriorities
-
-[]int32
-
- |
-
- orderedPriorities list of ordered priorities
+kind
+string
|
+GameServer |
-priorityToCluster
+metadata
-map[int32]map[string][]*agones.dev/agones/pkg/apis/multicluster/v1.GameServerAllocationPolicy
+
+Kubernetes meta/v1.ObjectMeta
+
|
- priorityToCluster Map of priority to cluster-policies map
+Refer to the Kubernetes API documentation for the fields of the
+metadata field.
|
-clusterBlackList
+spec
-map[string]bool
+
+GameServerSpec
+
|
- clusterBlackList the cluster blacklist for the clusters that has already returned
- |
-
-
-
-GameServerAllocationPolicySpec
-
-
-(Appears on:
-GameServerAllocationPolicy)
-
-
-
GameServerAllocationPolicySpec defines the desired state of GameServerAllocationPolicy
-
+
+
-
-
-Field |
-Description |
-
-
-
-priority
+container
-int32
+string
|
+ Container specifies which Pod container is the game server. Only required if there is more than one
+container defined
|
-weight
+ports
-int
+
+[]GameServerPort
+
|
+ Ports are the array of ports that can be exposed via the game server
|
-connectionInfo
+health
-
-ClusterConnectionInfo
+
+Health
|
+ Health configures health checking
|
-
-
-
-agones.dev/v1
-
-
Package v1 is the v1 version of the API.
-
-Resource Types:
-
-Fleet
-
-
-
Fleet is the data structure for a Fleet resource
-
-
-
-
-Field |
-Description |
-
-
-
-apiVersion
-string |
-
-
-agones.dev/v1
-
+scheduling
+
+agones.dev/agones/pkg/apis.SchedulingStrategy
+
|
-
-
-kind
-string
+Scheduling strategy. Defaults to “Packed”
|
-Fleet |
-metadata
+sdkServer
-
-Kubernetes meta/v1.ObjectMeta
+
+SdkServer
|
-Refer to the Kubernetes API documentation for the fields of the
-metadata field.
+SdkServer specifies parameters for the Agones SDK Server sidecar container
|
-spec
-
-
-FleetSpec
-
-
- |
-
-
-
-
-
-
-replicas
-
-int32
-
- |
-
- Replicas are the number of GameServers that should be in this set. Defaults to 0.
- |
-
-
-
-allocationOverflow
-
-
-AllocationOverflow
-
-
- |
-
-(Optional)
- [Stage: Alpha]
-[FeatureFlag:FleetAllocationOverflow]
-Labels and/or Annotations to apply to overflowing GameServers when the number of Allocated GameServers is more
-than the desired replicas on the underlying GameServerSet
- |
-
-
-
-strategy
-
-
-Kubernetes apps/v1.DeploymentStrategy
-
-
- |
-
- Deployment strategy
- |
-
-
-
-scheduling
-
-agones.dev/agones/pkg/apis.SchedulingStrategy
-
- |
-
- Scheduling strategy. Defaults to “Packed”.
- |
-
-
-
-priorities
-
-
-[]Priority
-
-
- |
-
-(Optional)
- (Alpha, CountsAndLists feature flag) The first Priority on the array of Priorities is the most
-important for sorting. The Fleetautoscaler will use the first priority for sorting GameServers
-by total Capacity in the Fleet and acts as a tie-breaker after sorting the game servers by
-State and Strategy. Impacts scale down logic.
- |
-
-
-
-template
-
-
-GameServerTemplateSpec
-
-
- |
-
- Template the GameServer template to apply for this Fleet
- |
-
-
- |
-
-
-
-status
-
-
-FleetStatus
-
-
- |
-
- |
-
-
-
-GameServer
-
-
-
GameServer is the data structure for a GameServer resource.
-It is worth noting that while there is a GameServerStatus
Status entry for the GameServer
, it is not
-defined as a subresource - unlike Fleet
and other Agones resources.
-This is so that we can retain the ability to change multiple aspects of a GameServer
in a single atomic operation,
-which is particularly useful for operations such as allocation.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-apiVersion
-string |
-
-
-agones.dev/v1
-
- |
-
-
-
-kind
-string
- |
-GameServer |
-
-
-
-metadata
-
-
-Kubernetes meta/v1.ObjectMeta
-
-
- |
-
-Refer to the Kubernetes API documentation for the fields of the
-metadata field.
- |
-
-
-
-spec
-
-
-GameServerSpec
-
-
- |
-
-
-
-
-
-
-container
-
-string
-
- |
-
- Container specifies which Pod container is the game server. Only required if there is more than one
-container defined
- |
-
-
-
-ports
-
-
-[]GameServerPort
-
-
- |
-
- Ports are the array of ports that can be exposed via the game server
- |
-
-
-
-health
-
-
-Health
-
-
- |
-
- Health configures health checking
- |
-
-
-
-scheduling
-
-agones.dev/agones/pkg/apis.SchedulingStrategy
-
- |
-
- Scheduling strategy. Defaults to “Packed”
- |
-
-
-
-sdkServer
-
-
-SdkServer
-
-
- |
-
- SdkServer specifies parameters for the Agones SDK Server sidecar container
- |
-
-
-
-template
+template
Kubernetes core/v1.PodTemplateSpec
@@ -7192,6 +6903,18 @@ GameServerAllocatio
|
+addresses
+
+
+[]Kubernetes core/v1.NodeAddress
+
+
+ |
+
+ |
+
+
+
nodeName
string
@@ -8468,6 +8191,295 @@ WebhookPolicy
|
+multicluster.agones.dev/v1
+
+ Package v1 is the v1 version of the API.
+
+Resource Types:
+
+GameServerAllocationPolicy
+
+
+ GameServerAllocationPolicy is the Schema for the gameserverallocationpolicies API
+
+
+
+
+Field |
+Description |
+
+
+
+
+
+apiVersion
+string |
+
+
+multicluster.agones.dev/v1
+
+ |
+
+
+
+kind
+string
+ |
+GameServerAllocationPolicy |
+
+
+
+metadata
+
+
+Kubernetes meta/v1.ObjectMeta
+
+
+ |
+
+Refer to the Kubernetes API documentation for the fields of the
+metadata field.
+ |
+
+
+
+spec
+
+
+GameServerAllocationPolicySpec
+
+
+ |
+
+
+
+
+
+
+priority
+
+int32
+
+ |
+
+ |
+
+
+
+weight
+
+int
+
+ |
+
+ |
+
+
+
+connectionInfo
+
+
+ClusterConnectionInfo
+
+
+ |
+
+ |
+
+
+ |
+
+
+
+ClusterConnectionInfo
+
+
+(Appears on:
+GameServerAllocationPolicySpec)
+
+
+ ClusterConnectionInfo defines the connection information for a cluster
+
+
+
+
+Field |
+Description |
+
+
+
+
+
+clusterName
+
+string
+
+ |
+
+ Optional: the name of the targeted cluster
+ |
+
+
+
+allocationEndpoints
+
+[]string
+
+ |
+
+ The endpoints for the allocator service in the targeted cluster.
+If the AllocationEndpoints is not set, the allocation happens on local cluster.
+If there are multiple endpoints any of the endpoints that can handle allocation request should suffice
+ |
+
+
+
+secretName
+
+string
+
+ |
+
+ The name of the secret that contains TLS client certificates to connect the allocator server in the targeted cluster
+ |
+
+
+
+namespace
+
+string
+
+ |
+
+ The cluster namespace from which to allocate gameservers
+ |
+
+
+
+serverCa
+
+[]byte
+
+ |
+
+ The PEM encoded server CA, used by the allocator client to authenticate the remote server.
+ |
+
+
+
+ConnectionInfoIterator
+
+
+ ConnectionInfoIterator an iterator on ClusterConnectionInfo
+
+
+
+
+Field |
+Description |
+
+
+
+
+
+currPriority
+
+int
+
+ |
+
+ currPriority Current priority index from the orderedPriorities
+ |
+
+
+
+orderedPriorities
+
+[]int32
+
+ |
+
+ orderedPriorities list of ordered priorities
+ |
+
+
+
+priorityToCluster
+
+map[int32]map[string][]*agones.dev/agones/pkg/apis/multicluster/v1.GameServerAllocationPolicy
+
+ |
+
+ priorityToCluster Map of priority to cluster-policies map
+ |
+
+
+
+clusterBlackList
+
+map[string]bool
+
+ |
+
+ clusterBlackList the cluster blacklist for the clusters that has already returned
+ |
+
+
+
+GameServerAllocationPolicySpec
+
+
+(Appears on:
+GameServerAllocationPolicy)
+
+
+ GameServerAllocationPolicySpec defines the desired state of GameServerAllocationPolicy
+
+
+
+
+Field |
+Description |
+
+
+
+
+
+priority
+
+int32
+
+ |
+
+ |
+
+
+
+weight
+
+int
+
+ |
+
+ |
+
+
+
+connectionInfo
+
+
+ClusterConnectionInfo
+
+
+ |
+
+ |
+
+
+
+
Generated with gen-crd-api-reference-docs .
From 88f0ad850dbbb8bdeae403f1e0d22113cfaea761 Mon Sep 17 00:00:00 2001
From: Zach Loafman
Date: Tue, 1 Aug 2023 23:48:14 +0000
Subject: [PATCH 5/5] Add docs for 'addresses'
---
site/content/en/docs/Reference/gameserver.md | 24 +++++++++++++++++++
.../en/docs/Reference/gameserverallocation.md | 6 ++++-
2 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/site/content/en/docs/Reference/gameserver.md b/site/content/en/docs/Reference/gameserver.md
index 40ba2fb9a9..b45ebd40a3 100644
--- a/site/content/en/docs/Reference/gameserver.md
+++ b/site/content/en/docs/Reference/gameserver.md
@@ -163,3 +163,27 @@ Game Servers are created through Kubernetes API (either directly or through a [F
- SDK, which manages health checking and shutdown of a game server session
![GameServer State Diagram](../../../diagrams/gameserver-states.dot.png)
+
+{{% feature publishVersion="1.34.0" %}}
+## Primary Address vs Addresses
+
+[`GameServer.Status`][gss] has two fields which reflect the network address of the `GameServer`: `address` and `addresses`.
+The `address` field is a policy-based choice of "primary address" that will work for many use cases,
+and will always be one of the `addresses`. The `addresses` field contains every address in the [`Node.Status.addresses`][addresses],
+representing all known ways to reach the `GameServer` over the network.
+
+To choose `address` from `addresses`, [Agones looks for the following address types][addressFunc], in highest to lowest priorty:
+* `ExternalDNS`
+* `ExternalIP`
+* `InternalDNS`
+* `InternalIP`
+
+e.g. if any `ExternalDNS` address is found in the respective `Node`, it is used as the `address`.
+
+The policy for `address` will work for many use-cases, but for some advanced cases, such as IPv6 enablement, you may need
+to evaluate all `addresses` and pick the addresses that best suits your needs.
+
+[addresses]: https://v1-26.docs.kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/#nodeaddress-v1-core
+[addressFunc]: https://github.com/googleforgames/agones/blob/a59c5394c7f5bac66e530d21446302581c10c225/pkg/gameservers/gameservers.go#L37-L71
+[gss]: {{% ref "/docs/Reference/agones_crd_api_reference.html#agones.dev/v1.GameServerStatus" %}}
+{{% /feature %}}
\ No newline at end of file
diff --git a/site/content/en/docs/Reference/gameserverallocation.md b/site/content/en/docs/Reference/gameserverallocation.md
index 9fb4d293d3..86b1abea79 100644
--- a/site/content/en/docs/Reference/gameserverallocation.md
+++ b/site/content/en/docs/Reference/gameserverallocation.md
@@ -153,7 +153,10 @@ Once created the `GameServerAllocation` will have a `status` field consisting of
- `State` is the current state of a GameServerAllocation, e.g. `Allocated`, or `UnAllocated`
- `GameServerName` is the name of the game server attached to this allocation, once the `state` is `Allocated`
- `Ports` is a list of the ports that the game server makes available. See [the GameServer Reference]({{< ref "/docs/Reference/gameserver.md" >}}) for more details.
-- `Address` is the network address where the game server can be reached.
+- `Address` is the primary network address where the game server can be reached.
+{{% feature publishVersion="1.34.0" %}}
+- `Addresses` is an array of all network addresses where the game server can be reached. It is a copy of the [`Node.Status.addresses`][addresses] field for the node the `GameServer` is scheduled on.
+{{% /feature %}}
- `NodeName` is the name of the node that the gameserver is running on.
- `Source` is "local" unless this allocation is from a remote cluster, in which case `Source` is the endpoint of the remote agones-allocator. See [Multi-cluster Allocation]({{< ref "/docs/Advanced/multi-cluster-allocation.md" >}}) for more details.
- `Metadata` conststs of:
@@ -182,6 +185,7 @@ when using an API call. If not specified when using the command line, the [names
[gameserverselector]: {{% ref "/docs/Reference/agones_crd_api_reference.html#allocation.agones.dev/v1.GameServerSelector" %}}
[namespace]: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces
+[addresses]: https://v1-26.docs.kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/#nodeaddress-v1-core
## Next Steps:
|