diff --git a/Justfile b/Justfile index e7a22ec44f..d7d5497a93 100644 --- a/Justfile +++ b/Justfile @@ -1,6 +1,7 @@ set positional-arguments set shell := ["bash", "-c"] +WATCHEXEC_ARGS := "-e proto -e go -e sql -f sqlc.yaml" RELEASE := "build/release" VERSION := `git describe --tags --always --dirty | sed -e 's/^v//'` KT_RUNTIME_OUT := "kotlin-runtime/ftl-runtime/target/ftl-runtime-1.0-SNAPSHOT.jar" @@ -30,11 +31,11 @@ clean: # Live rebuild the ftl binary whenever source changes. live-rebuild: - watchexec -e go -e sql -f sqlc.yaml -- "just build-sqlc && just build ftl" + watchexec {{WATCHEXEC_ARGS}} -- "just build-sqlc && just build ftl" # Run "ftl dev" with live-reloading whenever source changes. dev *args: - watchexec -r -e go -e sql -f sqlc.yaml -- "just build-sqlc && ftl dev {{args}}" + watchexec -r {{WATCHEXEC_ARGS}} -- "just build-sqlc && ftl dev {{args}}" # Build everything build-all: build-frontend build-generate build-protos build-sqlc build-zips diff --git a/backend/controller/controller.go b/backend/controller/controller.go index fa72594a43..b267b6dbfb 100644 --- a/backend/controller/controller.go +++ b/backend/controller/controller.go @@ -30,6 +30,7 @@ import ( "github.com/TBD54566975/ftl/backend/controller/cronjobs" "github.com/TBD54566975/ftl/backend/controller/dal" "github.com/TBD54566975/ftl/backend/controller/ingress" + "github.com/TBD54566975/ftl/backend/controller/leases" "github.com/TBD54566975/ftl/backend/controller/scaling" "github.com/TBD54566975/ftl/backend/controller/scaling/localscaling" "github.com/TBD54566975/ftl/backend/controller/scheduledtask" @@ -651,6 +652,36 @@ func (s *Service) GetModuleContext(ctx context.Context, req *connect.Request[ftl return connect.NewResponse(response), nil } +// AcquireLease acquires a lease on behalf of a module. +// +// This is a bidirectional stream where each request from the client must be +// responded to with an empty response. +func (s *Service) AcquireLease(ctx context.Context, stream *connect.BidiStream[ftlv1.AcquireLeaseRequest, ftlv1.AcquireLeaseResponse]) error { + var lease leases.Lease + for { + msg, err := stream.Receive() + if err != nil { + if errors.Is(err, io.EOF) { + return nil + } + return connect.NewError(connect.CodeInternal, fmt.Errorf("could not receive lease request: %w", err)) + } + if lease == nil { + lease, err = s.dal.AcquireLease(ctx, leases.ModuleKey(msg.Module, msg.Key...), msg.Ttl.AsDuration()) + if err != nil { + if errors.Is(err, leases.ErrConflict) { + return connect.NewError(connect.CodeResourceExhausted, fmt.Errorf("lease is held: %w", err)) + } + return connect.NewError(connect.CodeInternal, fmt.Errorf("could not acquire lease: %w", err)) + } + defer lease.Release() //nolint:errcheck + } + if err = stream.Send(&ftlv1.AcquireLeaseResponse{}); err != nil { + return connect.NewError(connect.CodeInternal, fmt.Errorf("could not send lease response: %w", err)) + } + } +} + func (s *Service) Call(ctx context.Context, req *connect.Request[ftlv1.CallRequest]) (*connect.Response[ftlv1.CallResponse], error) { return s.callWithRequest(ctx, req, optional.None[model.RequestKey](), "") } diff --git a/backend/protos/xyz/block/ftl/v1/ftl.pb.go b/backend/protos/xyz/block/ftl/v1/ftl.pb.go index 394121a6ba..e89b3f7be4 100644 --- a/backend/protos/xyz/block/ftl/v1/ftl.pb.go +++ b/backend/protos/xyz/block/ftl/v1/ftl.pb.go @@ -10,6 +10,7 @@ import ( schema "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" structpb "google.golang.org/protobuf/types/known/structpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" @@ -567,6 +568,107 @@ func (*CallResponse_Body) isCallResponse_Response() {} func (*CallResponse_Error_) isCallResponse_Response() {} +type AcquireLeaseRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` + Key []string `protobuf:"bytes,2,rep,name=key,proto3" json:"key,omitempty"` + Ttl *durationpb.Duration `protobuf:"bytes,3,opt,name=ttl,proto3" json:"ttl,omitempty"` +} + +func (x *AcquireLeaseRequest) Reset() { + *x = AcquireLeaseRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AcquireLeaseRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AcquireLeaseRequest) ProtoMessage() {} + +func (x *AcquireLeaseRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_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 AcquireLeaseRequest.ProtoReflect.Descriptor instead. +func (*AcquireLeaseRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{7} +} + +func (x *AcquireLeaseRequest) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +func (x *AcquireLeaseRequest) GetKey() []string { + if x != nil { + return x.Key + } + return nil +} + +func (x *AcquireLeaseRequest) GetTtl() *durationpb.Duration { + if x != nil { + return x.Ttl + } + return nil +} + +type AcquireLeaseResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *AcquireLeaseResponse) Reset() { + *x = AcquireLeaseResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AcquireLeaseResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AcquireLeaseResponse) ProtoMessage() {} + +func (x *AcquireLeaseResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_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 AcquireLeaseResponse.ProtoReflect.Descriptor instead. +func (*AcquireLeaseResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{8} +} + type GetSchemaRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -576,7 +678,7 @@ type GetSchemaRequest struct { func (x *GetSchemaRequest) Reset() { *x = GetSchemaRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[7] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -589,7 +691,7 @@ func (x *GetSchemaRequest) String() string { func (*GetSchemaRequest) ProtoMessage() {} func (x *GetSchemaRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[7] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -602,7 +704,7 @@ func (x *GetSchemaRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSchemaRequest.ProtoReflect.Descriptor instead. func (*GetSchemaRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{7} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{9} } type GetSchemaResponse struct { @@ -616,7 +718,7 @@ type GetSchemaResponse struct { func (x *GetSchemaResponse) Reset() { *x = GetSchemaResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[8] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -629,7 +731,7 @@ func (x *GetSchemaResponse) String() string { func (*GetSchemaResponse) ProtoMessage() {} func (x *GetSchemaResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[8] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -642,7 +744,7 @@ func (x *GetSchemaResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSchemaResponse.ProtoReflect.Descriptor instead. func (*GetSchemaResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{8} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{10} } func (x *GetSchemaResponse) GetSchema() *schema.Schema { @@ -661,7 +763,7 @@ type PullSchemaRequest struct { func (x *PullSchemaRequest) Reset() { *x = PullSchemaRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[9] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -674,7 +776,7 @@ func (x *PullSchemaRequest) String() string { func (*PullSchemaRequest) ProtoMessage() {} func (x *PullSchemaRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[9] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -687,7 +789,7 @@ func (x *PullSchemaRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PullSchemaRequest.ProtoReflect.Descriptor instead. func (*PullSchemaRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{9} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{11} } type PullSchemaResponse struct { @@ -708,7 +810,7 @@ type PullSchemaResponse struct { func (x *PullSchemaResponse) Reset() { *x = PullSchemaResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[10] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -721,7 +823,7 @@ func (x *PullSchemaResponse) String() string { func (*PullSchemaResponse) ProtoMessage() {} func (x *PullSchemaResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[10] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -734,7 +836,7 @@ func (x *PullSchemaResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PullSchemaResponse.ProtoReflect.Descriptor instead. func (*PullSchemaResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{10} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{12} } func (x *PullSchemaResponse) GetDeploymentKey() string { @@ -783,7 +885,7 @@ type GetArtefactDiffsRequest struct { func (x *GetArtefactDiffsRequest) Reset() { *x = GetArtefactDiffsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[11] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -796,7 +898,7 @@ func (x *GetArtefactDiffsRequest) String() string { func (*GetArtefactDiffsRequest) ProtoMessage() {} func (x *GetArtefactDiffsRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[11] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -809,7 +911,7 @@ func (x *GetArtefactDiffsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetArtefactDiffsRequest.ProtoReflect.Descriptor instead. func (*GetArtefactDiffsRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{11} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{13} } func (x *GetArtefactDiffsRequest) GetClientDigests() []string { @@ -832,7 +934,7 @@ type GetArtefactDiffsResponse struct { func (x *GetArtefactDiffsResponse) Reset() { *x = GetArtefactDiffsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[12] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -845,7 +947,7 @@ func (x *GetArtefactDiffsResponse) String() string { func (*GetArtefactDiffsResponse) ProtoMessage() {} func (x *GetArtefactDiffsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[12] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -858,7 +960,7 @@ func (x *GetArtefactDiffsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetArtefactDiffsResponse.ProtoReflect.Descriptor instead. func (*GetArtefactDiffsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{12} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{14} } func (x *GetArtefactDiffsResponse) GetMissingDigests() []string { @@ -886,7 +988,7 @@ type UploadArtefactRequest struct { func (x *UploadArtefactRequest) Reset() { *x = UploadArtefactRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[13] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -899,7 +1001,7 @@ func (x *UploadArtefactRequest) String() string { func (*UploadArtefactRequest) ProtoMessage() {} func (x *UploadArtefactRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[13] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -912,7 +1014,7 @@ func (x *UploadArtefactRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadArtefactRequest.ProtoReflect.Descriptor instead. func (*UploadArtefactRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{13} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{15} } func (x *UploadArtefactRequest) GetContent() []byte { @@ -933,7 +1035,7 @@ type UploadArtefactResponse struct { func (x *UploadArtefactResponse) Reset() { *x = UploadArtefactResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[14] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -946,7 +1048,7 @@ func (x *UploadArtefactResponse) String() string { func (*UploadArtefactResponse) ProtoMessage() {} func (x *UploadArtefactResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[14] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -959,7 +1061,7 @@ func (x *UploadArtefactResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadArtefactResponse.ProtoReflect.Descriptor instead. func (*UploadArtefactResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{14} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{16} } func (x *UploadArtefactResponse) GetDigest() []byte { @@ -982,7 +1084,7 @@ type DeploymentArtefact struct { func (x *DeploymentArtefact) Reset() { *x = DeploymentArtefact{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[15] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -995,7 +1097,7 @@ func (x *DeploymentArtefact) String() string { func (*DeploymentArtefact) ProtoMessage() {} func (x *DeploymentArtefact) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[15] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1008,7 +1110,7 @@ func (x *DeploymentArtefact) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentArtefact.ProtoReflect.Descriptor instead. func (*DeploymentArtefact) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{15} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{17} } func (x *DeploymentArtefact) GetDigest() string { @@ -1046,7 +1148,7 @@ type CreateDeploymentRequest struct { func (x *CreateDeploymentRequest) Reset() { *x = CreateDeploymentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[16] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1059,7 +1161,7 @@ func (x *CreateDeploymentRequest) String() string { func (*CreateDeploymentRequest) ProtoMessage() {} func (x *CreateDeploymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[16] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1072,7 +1174,7 @@ func (x *CreateDeploymentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateDeploymentRequest.ProtoReflect.Descriptor instead. func (*CreateDeploymentRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{16} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{18} } func (x *CreateDeploymentRequest) GetSchema() *schema.Module { @@ -1109,7 +1211,7 @@ type CreateDeploymentResponse struct { func (x *CreateDeploymentResponse) Reset() { *x = CreateDeploymentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[17] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1122,7 +1224,7 @@ func (x *CreateDeploymentResponse) String() string { func (*CreateDeploymentResponse) ProtoMessage() {} func (x *CreateDeploymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[17] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1135,7 +1237,7 @@ func (x *CreateDeploymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateDeploymentResponse.ProtoReflect.Descriptor instead. func (*CreateDeploymentResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{17} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{19} } func (x *CreateDeploymentResponse) GetDeploymentKey() string { @@ -1164,7 +1266,7 @@ type GetDeploymentArtefactsRequest struct { func (x *GetDeploymentArtefactsRequest) Reset() { *x = GetDeploymentArtefactsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[18] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1177,7 +1279,7 @@ func (x *GetDeploymentArtefactsRequest) String() string { func (*GetDeploymentArtefactsRequest) ProtoMessage() {} func (x *GetDeploymentArtefactsRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[18] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1190,7 +1292,7 @@ func (x *GetDeploymentArtefactsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDeploymentArtefactsRequest.ProtoReflect.Descriptor instead. func (*GetDeploymentArtefactsRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{18} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{20} } func (x *GetDeploymentArtefactsRequest) GetDeploymentKey() string { @@ -1219,7 +1321,7 @@ type GetDeploymentArtefactsResponse struct { func (x *GetDeploymentArtefactsResponse) Reset() { *x = GetDeploymentArtefactsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[19] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1232,7 +1334,7 @@ func (x *GetDeploymentArtefactsResponse) String() string { func (*GetDeploymentArtefactsResponse) ProtoMessage() {} func (x *GetDeploymentArtefactsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[19] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1245,7 +1347,7 @@ func (x *GetDeploymentArtefactsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDeploymentArtefactsResponse.ProtoReflect.Descriptor instead. func (*GetDeploymentArtefactsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{19} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{21} } func (x *GetDeploymentArtefactsResponse) GetArtefact() *DeploymentArtefact { @@ -1273,7 +1375,7 @@ type GetDeploymentRequest struct { func (x *GetDeploymentRequest) Reset() { *x = GetDeploymentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[20] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1286,7 +1388,7 @@ func (x *GetDeploymentRequest) String() string { func (*GetDeploymentRequest) ProtoMessage() {} func (x *GetDeploymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[20] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1299,7 +1401,7 @@ func (x *GetDeploymentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDeploymentRequest.ProtoReflect.Descriptor instead. func (*GetDeploymentRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{20} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{22} } func (x *GetDeploymentRequest) GetDeploymentKey() string { @@ -1321,7 +1423,7 @@ type GetDeploymentResponse struct { func (x *GetDeploymentResponse) Reset() { *x = GetDeploymentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[21] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1334,7 +1436,7 @@ func (x *GetDeploymentResponse) String() string { func (*GetDeploymentResponse) ProtoMessage() {} func (x *GetDeploymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[21] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1347,7 +1449,7 @@ func (x *GetDeploymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDeploymentResponse.ProtoReflect.Descriptor instead. func (*GetDeploymentResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{21} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{23} } func (x *GetDeploymentResponse) GetSchema() *schema.Module { @@ -1381,7 +1483,7 @@ type RegisterRunnerRequest struct { func (x *RegisterRunnerRequest) Reset() { *x = RegisterRunnerRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[22] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1394,7 +1496,7 @@ func (x *RegisterRunnerRequest) String() string { func (*RegisterRunnerRequest) ProtoMessage() {} func (x *RegisterRunnerRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[22] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1407,7 +1509,7 @@ func (x *RegisterRunnerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterRunnerRequest.ProtoReflect.Descriptor instead. func (*RegisterRunnerRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{22} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{24} } func (x *RegisterRunnerRequest) GetKey() string { @@ -1461,7 +1563,7 @@ type RegisterRunnerResponse struct { func (x *RegisterRunnerResponse) Reset() { *x = RegisterRunnerResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[23] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1474,7 +1576,7 @@ func (x *RegisterRunnerResponse) String() string { func (*RegisterRunnerResponse) ProtoMessage() {} func (x *RegisterRunnerResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[23] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1487,7 +1589,7 @@ func (x *RegisterRunnerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterRunnerResponse.ProtoReflect.Descriptor instead. func (*RegisterRunnerResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{23} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{25} } type UpdateDeployRequest struct { @@ -1502,7 +1604,7 @@ type UpdateDeployRequest struct { func (x *UpdateDeployRequest) Reset() { *x = UpdateDeployRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[24] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1515,7 +1617,7 @@ func (x *UpdateDeployRequest) String() string { func (*UpdateDeployRequest) ProtoMessage() {} func (x *UpdateDeployRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[24] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1528,7 +1630,7 @@ func (x *UpdateDeployRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateDeployRequest.ProtoReflect.Descriptor instead. func (*UpdateDeployRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{24} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{26} } func (x *UpdateDeployRequest) GetDeploymentKey() string { @@ -1554,7 +1656,7 @@ type UpdateDeployResponse struct { func (x *UpdateDeployResponse) Reset() { *x = UpdateDeployResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[25] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1567,7 +1669,7 @@ func (x *UpdateDeployResponse) String() string { func (*UpdateDeployResponse) ProtoMessage() {} func (x *UpdateDeployResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[25] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1580,7 +1682,7 @@ func (x *UpdateDeployResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateDeployResponse.ProtoReflect.Descriptor instead. func (*UpdateDeployResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{25} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{27} } type ReplaceDeployRequest struct { @@ -1595,7 +1697,7 @@ type ReplaceDeployRequest struct { func (x *ReplaceDeployRequest) Reset() { *x = ReplaceDeployRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[26] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1608,7 +1710,7 @@ func (x *ReplaceDeployRequest) String() string { func (*ReplaceDeployRequest) ProtoMessage() {} func (x *ReplaceDeployRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[26] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1621,7 +1723,7 @@ func (x *ReplaceDeployRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplaceDeployRequest.ProtoReflect.Descriptor instead. func (*ReplaceDeployRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{26} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{28} } func (x *ReplaceDeployRequest) GetDeploymentKey() string { @@ -1647,7 +1749,7 @@ type ReplaceDeployResponse struct { func (x *ReplaceDeployResponse) Reset() { *x = ReplaceDeployResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[27] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1660,7 +1762,7 @@ func (x *ReplaceDeployResponse) String() string { func (*ReplaceDeployResponse) ProtoMessage() {} func (x *ReplaceDeployResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[27] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1673,7 +1775,7 @@ func (x *ReplaceDeployResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplaceDeployResponse.ProtoReflect.Descriptor instead. func (*ReplaceDeployResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{27} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{29} } type StreamDeploymentLogsRequest struct { @@ -1693,7 +1795,7 @@ type StreamDeploymentLogsRequest struct { func (x *StreamDeploymentLogsRequest) Reset() { *x = StreamDeploymentLogsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[28] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1706,7 +1808,7 @@ func (x *StreamDeploymentLogsRequest) String() string { func (*StreamDeploymentLogsRequest) ProtoMessage() {} func (x *StreamDeploymentLogsRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[28] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1719,7 +1821,7 @@ func (x *StreamDeploymentLogsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamDeploymentLogsRequest.ProtoReflect.Descriptor instead. func (*StreamDeploymentLogsRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{28} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{30} } func (x *StreamDeploymentLogsRequest) GetDeploymentKey() string { @@ -1780,7 +1882,7 @@ type StreamDeploymentLogsResponse struct { func (x *StreamDeploymentLogsResponse) Reset() { *x = StreamDeploymentLogsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[29] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1793,7 +1895,7 @@ func (x *StreamDeploymentLogsResponse) String() string { func (*StreamDeploymentLogsResponse) ProtoMessage() {} func (x *StreamDeploymentLogsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[29] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1806,7 +1908,7 @@ func (x *StreamDeploymentLogsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamDeploymentLogsResponse.ProtoReflect.Descriptor instead. func (*StreamDeploymentLogsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{29} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{31} } type StatusRequest struct { @@ -1818,7 +1920,7 @@ type StatusRequest struct { func (x *StatusRequest) Reset() { *x = StatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[30] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1831,7 +1933,7 @@ func (x *StatusRequest) String() string { func (*StatusRequest) ProtoMessage() {} func (x *StatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[30] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1844,7 +1946,7 @@ func (x *StatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusRequest.ProtoReflect.Descriptor instead. func (*StatusRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{30} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{32} } type StatusResponse struct { @@ -1862,7 +1964,7 @@ type StatusResponse struct { func (x *StatusResponse) Reset() { *x = StatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[31] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1875,7 +1977,7 @@ func (x *StatusResponse) String() string { func (*StatusResponse) ProtoMessage() {} func (x *StatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[31] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1888,7 +1990,7 @@ func (x *StatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse.ProtoReflect.Descriptor instead. func (*StatusResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{31} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{33} } func (x *StatusResponse) GetControllers() []*StatusResponse_Controller { @@ -1935,7 +2037,7 @@ type ProcessListRequest struct { func (x *ProcessListRequest) Reset() { *x = ProcessListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[32] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1948,7 +2050,7 @@ func (x *ProcessListRequest) String() string { func (*ProcessListRequest) ProtoMessage() {} func (x *ProcessListRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[32] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1961,7 +2063,7 @@ func (x *ProcessListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessListRequest.ProtoReflect.Descriptor instead. func (*ProcessListRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{32} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{34} } type ProcessListResponse struct { @@ -1975,7 +2077,7 @@ type ProcessListResponse struct { func (x *ProcessListResponse) Reset() { *x = ProcessListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[33] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1988,7 +2090,7 @@ func (x *ProcessListResponse) String() string { func (*ProcessListResponse) ProtoMessage() {} func (x *ProcessListResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[33] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2001,7 +2103,7 @@ func (x *ProcessListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessListResponse.ProtoReflect.Descriptor instead. func (*ProcessListResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{33} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{35} } func (x *ProcessListResponse) GetProcesses() []*ProcessListResponse_Process { @@ -2022,7 +2124,7 @@ type DeployRequest struct { func (x *DeployRequest) Reset() { *x = DeployRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[34] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2035,7 +2137,7 @@ func (x *DeployRequest) String() string { func (*DeployRequest) ProtoMessage() {} func (x *DeployRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[34] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2048,7 +2150,7 @@ func (x *DeployRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeployRequest.ProtoReflect.Descriptor instead. func (*DeployRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{34} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{36} } func (x *DeployRequest) GetDeploymentKey() string { @@ -2067,7 +2169,7 @@ type DeployResponse struct { func (x *DeployResponse) Reset() { *x = DeployResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[35] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2080,7 +2182,7 @@ func (x *DeployResponse) String() string { func (*DeployResponse) ProtoMessage() {} func (x *DeployResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[35] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2093,7 +2195,7 @@ func (x *DeployResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeployResponse.ProtoReflect.Descriptor instead. func (*DeployResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{35} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37} } type TerminateRequest struct { @@ -2107,7 +2209,7 @@ type TerminateRequest struct { func (x *TerminateRequest) Reset() { *x = TerminateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[36] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2120,7 +2222,7 @@ func (x *TerminateRequest) String() string { func (*TerminateRequest) ProtoMessage() {} func (x *TerminateRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[36] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2133,7 +2235,7 @@ func (x *TerminateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TerminateRequest.ProtoReflect.Descriptor instead. func (*TerminateRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{36} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{38} } func (x *TerminateRequest) GetDeploymentKey() string { @@ -2154,7 +2256,7 @@ type ReserveRequest struct { func (x *ReserveRequest) Reset() { *x = ReserveRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[37] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2167,7 +2269,7 @@ func (x *ReserveRequest) String() string { func (*ReserveRequest) ProtoMessage() {} func (x *ReserveRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[37] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2180,7 +2282,7 @@ func (x *ReserveRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReserveRequest.ProtoReflect.Descriptor instead. func (*ReserveRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{39} } func (x *ReserveRequest) GetDeploymentKey() string { @@ -2199,7 +2301,7 @@ type ReserveResponse struct { func (x *ReserveResponse) Reset() { *x = ReserveResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[38] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2212,7 +2314,7 @@ func (x *ReserveResponse) String() string { func (*ReserveResponse) ProtoMessage() {} func (x *ReserveResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[38] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2225,7 +2327,7 @@ func (x *ReserveResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReserveResponse.ProtoReflect.Descriptor instead. func (*ReserveResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{38} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{40} } type ModuleContextResponse_Ref struct { @@ -2240,7 +2342,7 @@ type ModuleContextResponse_Ref struct { func (x *ModuleContextResponse_Ref) Reset() { *x = ModuleContextResponse_Ref{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[39] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2253,7 +2355,7 @@ func (x *ModuleContextResponse_Ref) String() string { func (*ModuleContextResponse_Ref) ProtoMessage() {} func (x *ModuleContextResponse_Ref) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[39] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2296,7 +2398,7 @@ type ModuleContextResponse_DSN struct { func (x *ModuleContextResponse_DSN) Reset() { *x = ModuleContextResponse_DSN{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[40] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2309,7 +2411,7 @@ func (x *ModuleContextResponse_DSN) String() string { func (*ModuleContextResponse_DSN) ProtoMessage() {} func (x *ModuleContextResponse_DSN) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[40] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2358,7 +2460,7 @@ type Metadata_Pair struct { func (x *Metadata_Pair) Reset() { *x = Metadata_Pair{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[43] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2371,7 +2473,7 @@ func (x *Metadata_Pair) String() string { func (*Metadata_Pair) ProtoMessage() {} func (x *Metadata_Pair) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[43] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2413,7 +2515,7 @@ type CallResponse_Error struct { func (x *CallResponse_Error) Reset() { *x = CallResponse_Error{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[44] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2426,7 +2528,7 @@ func (x *CallResponse_Error) String() string { func (*CallResponse_Error) ProtoMessage() {} func (x *CallResponse_Error) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[44] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2468,7 +2570,7 @@ type StatusResponse_Controller struct { func (x *StatusResponse_Controller) Reset() { *x = StatusResponse_Controller{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[46] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2481,7 +2583,7 @@ func (x *StatusResponse_Controller) String() string { func (*StatusResponse_Controller) ProtoMessage() {} func (x *StatusResponse_Controller) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[46] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2494,7 +2596,7 @@ func (x *StatusResponse_Controller) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse_Controller.ProtoReflect.Descriptor instead. func (*StatusResponse_Controller) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{31, 0} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{33, 0} } func (x *StatusResponse_Controller) GetKey() string { @@ -2527,7 +2629,7 @@ type StatusResponse_Runner struct { func (x *StatusResponse_Runner) Reset() { *x = StatusResponse_Runner{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[47] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2540,7 +2642,7 @@ func (x *StatusResponse_Runner) String() string { func (*StatusResponse_Runner) ProtoMessage() {} func (x *StatusResponse_Runner) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[47] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2553,7 +2655,7 @@ func (x *StatusResponse_Runner) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse_Runner.ProtoReflect.Descriptor instead. func (*StatusResponse_Runner) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{31, 1} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{33, 1} } func (x *StatusResponse_Runner) GetKey() string { @@ -2615,7 +2717,7 @@ type StatusResponse_Deployment struct { func (x *StatusResponse_Deployment) Reset() { *x = StatusResponse_Deployment{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[48] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2628,7 +2730,7 @@ func (x *StatusResponse_Deployment) String() string { func (*StatusResponse_Deployment) ProtoMessage() {} func (x *StatusResponse_Deployment) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[48] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2641,7 +2743,7 @@ func (x *StatusResponse_Deployment) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse_Deployment.ProtoReflect.Descriptor instead. func (*StatusResponse_Deployment) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{31, 2} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{33, 2} } func (x *StatusResponse_Deployment) GetKey() string { @@ -2707,7 +2809,7 @@ type StatusResponse_IngressRoute struct { func (x *StatusResponse_IngressRoute) Reset() { *x = StatusResponse_IngressRoute{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[49] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2720,7 +2822,7 @@ func (x *StatusResponse_IngressRoute) String() string { func (*StatusResponse_IngressRoute) ProtoMessage() {} func (x *StatusResponse_IngressRoute) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[49] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2733,7 +2835,7 @@ func (x *StatusResponse_IngressRoute) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse_IngressRoute.ProtoReflect.Descriptor instead. func (*StatusResponse_IngressRoute) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{31, 3} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{33, 3} } func (x *StatusResponse_IngressRoute) GetDeploymentKey() string { @@ -2778,7 +2880,7 @@ type StatusResponse_Route struct { func (x *StatusResponse_Route) Reset() { *x = StatusResponse_Route{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[50] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2791,7 +2893,7 @@ func (x *StatusResponse_Route) String() string { func (*StatusResponse_Route) ProtoMessage() {} func (x *StatusResponse_Route) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[50] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2804,7 +2906,7 @@ func (x *StatusResponse_Route) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse_Route.ProtoReflect.Descriptor instead. func (*StatusResponse_Route) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{31, 4} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{33, 4} } func (x *StatusResponse_Route) GetModule() string { @@ -2848,7 +2950,7 @@ type ProcessListResponse_ProcessRunner struct { func (x *ProcessListResponse_ProcessRunner) Reset() { *x = ProcessListResponse_ProcessRunner{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[51] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2861,7 +2963,7 @@ func (x *ProcessListResponse_ProcessRunner) String() string { func (*ProcessListResponse_ProcessRunner) ProtoMessage() {} func (x *ProcessListResponse_ProcessRunner) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[51] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2874,7 +2976,7 @@ func (x *ProcessListResponse_ProcessRunner) ProtoReflect() protoreflect.Message // Deprecated: Use ProcessListResponse_ProcessRunner.ProtoReflect.Descriptor instead. func (*ProcessListResponse_ProcessRunner) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{33, 0} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{35, 0} } func (x *ProcessListResponse_ProcessRunner) GetKey() string { @@ -2912,7 +3014,7 @@ type ProcessListResponse_Process struct { func (x *ProcessListResponse_Process) Reset() { *x = ProcessListResponse_Process{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[52] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2925,7 +3027,7 @@ func (x *ProcessListResponse_Process) String() string { func (*ProcessListResponse_Process) ProtoMessage() {} func (x *ProcessListResponse_Process) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[52] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2938,7 +3040,7 @@ func (x *ProcessListResponse_Process) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessListResponse_Process.ProtoReflect.Descriptor instead. func (*ProcessListResponse_Process) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{33, 1} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{35, 1} } func (x *ProcessListResponse_Process) GetDeployment() string { @@ -2978,7 +3080,9 @@ var file_xyz_block_ftl_v1_ftl_proto_rawDesc = []byte{ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 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, 0x1a, 0x24, 0x78, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x0d, 0x0a, 0x0b, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, @@ -3055,433 +3159,448 @@ var file_xyz_block_ftl_v1_ftl_proto_rawDesc = []byte{ 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x11, 0x47, 0x65, 0x74, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, - 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x13, 0x0a, 0x11, 0x50, 0x75, 0x6c, 0x6c, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x82, 0x02, 0x0a, - 0x12, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x06, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x72, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6d, 0x6f, 0x72, 0x65, 0x12, 0x47, 0x0a, - 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x22, 0x40, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, - 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, - 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6e, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x31, 0x0a, 0x15, 0x55, 0x70, - 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x30, 0x0a, - 0x16, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, - 0x60, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, - 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, - 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x42, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6c, 0x0a, 0x13, 0x41, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x4c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, + 0x74, 0x74, 0x6c, 0x22, 0x16, 0x0a, 0x14, 0x41, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, 0x65, + 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x47, + 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x4c, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x13, 0x0a, + 0x11, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x82, 0x02, 0x0a, 0x12, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, + 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x88, 0x01, 0x01, 0x12, + 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6d, + 0x6f, 0x72, 0x65, 0x12, 0x47, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x09, 0x0a, 0x07, + 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x40, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x72, + 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x18, 0x47, 0x65, + 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, + 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0e, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x12, + 0x4f, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, - 0x09, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x88, 0x01, 0x01, - 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x18, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, - 0x37, 0x0a, 0x15, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, - 0x65, 0x79, 0x22, 0x93, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x4b, 0x0a, 0x0e, 0x68, - 0x61, 0x76, 0x65, 0x5f, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x0d, 0x68, 0x61, 0x76, 0x65, 0x41, - 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x78, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x61, 0x72, - 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, + 0x22, 0x31, 0x0a, 0x15, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x22, 0x30, 0x0a, 0x16, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, + 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x60, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x78, 0x65, + 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x42, 0x0a, 0x09, + 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, + 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x09, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, + 0x12, 0x34, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x22, 0x94, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, + 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x15, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x42, 0x18, + 0x0a, 0x16, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x93, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, - 0x63, 0x74, 0x52, 0x08, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x63, 0x68, 0x75, - 0x6e, 0x6b, 0x22, 0x3d, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, - 0x79, 0x22, 0x94, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x12, 0x42, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x09, 0x61, - 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x84, 0x02, 0x0a, 0x15, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x23, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x19, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x18, 0x0a, 0x16, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x0a, 0x13, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x79, 0x12, 0x4b, 0x0a, 0x0e, 0x68, 0x61, 0x76, 0x65, 0x5f, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, + 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, + 0x0d, 0x68, 0x61, 0x76, 0x65, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x78, + 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, + 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x40, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x08, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, + 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x3d, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, - 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x60, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, - 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xaf, 0x03, - 0x0a, 0x1b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, - 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 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, 0x74, 0x69, 0x6d, 0x65, - 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 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, 0x0e, 0x0a, 0x0c, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, - 0x1e, 0x0a, 0x1c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0xbf, 0x09, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, - 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, - 0x72, 0x73, 0x12, 0x41, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x07, 0x72, 0x75, - 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x4d, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x0e, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x49, - 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x1a, 0x3a, 0x0a, 0x0a, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x94, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x42, 0x0a, 0x09, 0x61, 0x72, + 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, + 0x61, 0x63, 0x74, 0x52, 0x09, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x84, + 0x02, 0x0a, 0x15, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x1a, 0xee, 0x01, 0x0a, 0x06, 0x52, 0x75, 0x6e, 0x6e, 0x65, - 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x33, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x78, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, + 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x12, 0x19, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x01, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, + 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x18, 0x0a, 0x16, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, + 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x5f, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, + 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, + 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x60, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, + 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, + 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, + 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xaf, 0x03, 0x0a, 0x1b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0b, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, + 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, + 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, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x6c, + 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0xf7, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, - 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x72, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x1a, 0x99, 0x01, 0x0a, 0x0c, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x04, 0x76, 0x65, 0x72, - 0x62, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x16, 0x0a, 0x06, 0x6d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x1a, 0x73, 0x0a, - 0x05, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xaf, 0x03, 0x0a, 0x13, 0x50, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4b, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x1a, 0x6e, 0x0a, - 0x0d, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x10, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x19, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x01, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 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, 0x0e, 0x0a, 0x0c, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x5f, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xbf, 0x09, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x6e, + 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x75, 0x6e, 0x6e, + 0x65, 0x72, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x4d, 0x0a, 0x0b, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x0e, 0x69, 0x6e, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x6f, 0x75, 0x74, + 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, + 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, + 0x1a, 0x3a, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0xda, 0x01, - 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, - 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x2f, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, - 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x50, 0x0a, - 0x06, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x75, 0x6e, 0x6e, - 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, - 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x36, 0x0a, 0x0d, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, - 0x65, 0x79, 0x22, 0x10, 0x0a, 0x0e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x0a, 0x10, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, + 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x1a, 0xee, 0x01, 0x0a, + 0x06, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x6e, + 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, + 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x42, 0x0d, + 0x0a, 0x0b, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0xf7, 0x01, + 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, + 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x2f, 0x0a, + 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x37, + 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, + 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x99, 0x01, 0x0a, 0x0c, 0x49, 0x6e, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x22, - 0x37, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, + 0x30, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x04, 0x76, 0x65, 0x72, + 0x62, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x4a, 0x04, 0x08, + 0x02, 0x10, 0x03, 0x1a, 0x73, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xaf, + 0x03, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x1a, 0x6e, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x75, + 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x1a, 0xda, 0x01, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, + 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x12, 0x50, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x72, 0x75, 0x6e, 0x6e, + 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, + 0x22, 0x36, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x11, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x5c, 0x0a, 0x14, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, - 0x54, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, - 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, - 0x01, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, - 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x59, 0x0a, 0x0b, 0x52, 0x75, 0x6e, - 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x55, 0x4e, 0x4e, - 0x45, 0x52, 0x5f, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x55, 0x4e, - 0x4e, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, 0x45, 0x44, 0x10, 0x01, 0x12, 0x13, - 0x0a, 0x0f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x41, 0x53, 0x53, 0x49, 0x47, 0x4e, 0x45, - 0x44, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x44, 0x45, - 0x41, 0x44, 0x10, 0x03, 0x32, 0x8a, 0x02, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x62, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, - 0x12, 0x68, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x12, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x45, 0x0a, 0x04, 0x43, 0x61, - 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x10, 0x0a, 0x0e, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x39, 0x0a, 0x10, 0x54, 0x65, + 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, + 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x37, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x11, + 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2a, 0x5c, 0x0a, 0x14, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x45, 0x50, + 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x45, + 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, + 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x02, 0x2a, + 0x59, 0x0a, 0x0b, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, + 0x0a, 0x0b, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x00, 0x12, + 0x13, 0x0a, 0x0f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x52, 0x56, + 0x45, 0x44, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x55, 0x4e, 0x4e, 0x45, 0x52, 0x5f, 0x41, + 0x53, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x55, 0x4e, + 0x4e, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0xe8, 0x02, 0x0a, 0x0b, 0x56, + 0x65, 0x72, 0x62, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, + 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x32, 0xf6, 0x0a, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, - 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x63, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x26, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x0c, 0x41, + 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x25, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, 0x65, 0x61, + 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x45, + 0x0a, 0x04, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xf6, 0x0a, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, + 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, + 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x5a, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, - 0x90, 0x02, 0x01, 0x12, 0x5a, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4b, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x10, - 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, - 0x12, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, - 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x55, 0x70, 0x6c, 0x6f, 0x61, - 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, - 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, - 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x10, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x16, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, - 0x63, 0x74, 0x73, 0x12, 0x2f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x69, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, + 0x69, 0x66, 0x66, 0x73, 0x12, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, + 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, + 0x66, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x27, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x69, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0d, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x65, 0x0a, 0x0e, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x27, 0x2e, 0x78, 0x79, 0x7a, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, + 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, + 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x2f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x65, 0x0a, 0x0e, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x27, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x28, 0x01, 0x12, 0x5d, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x12, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x2d, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, + 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x54, 0x0a, + 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0a, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x12, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0xd2, + 0x02, 0x0a, 0x0d, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x4e, 0x0a, 0x07, + 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x06, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x09, 0x54, 0x65, 0x72, + 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, - 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, - 0x5d, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, - 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, - 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, - 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, - 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x77, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x54, 0x0a, 0x09, 0x47, 0x65, 0x74, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x59, 0x0a, 0x0a, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x23, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0xd2, 0x02, 0x0a, 0x0d, 0x52, - 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, - 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x4e, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x12, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x06, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x12, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x09, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, - 0x74, 0x65, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, - 0x44, 0x50, 0x01, 0x5a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x54, 0x42, 0x44, 0x35, 0x34, 0x35, 0x36, 0x36, 0x39, 0x37, 0x35, 0x2f, 0x66, 0x74, 0x6c, 0x2f, - 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x78, - 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x3b, - 0x66, 0x74, 0x6c, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x74, 0x42, 0x44, 0x50, 0x01, 0x5a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x42, 0x44, 0x35, 0x34, 0x35, 0x36, 0x36, 0x39, 0x37, 0x35, 0x2f, + 0x66, 0x74, 0x6c, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, + 0x2f, 0x76, 0x31, 0x3b, 0x66, 0x74, 0x6c, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -3497,7 +3616,7 @@ func file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP() []byte { } var file_xyz_block_ftl_v1_ftl_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_xyz_block_ftl_v1_ftl_proto_msgTypes = make([]protoimpl.MessageInfo, 53) +var file_xyz_block_ftl_v1_ftl_proto_msgTypes = make([]protoimpl.MessageInfo, 55) var file_xyz_block_ftl_v1_ftl_proto_goTypes = []interface{}{ (DeploymentChangeType)(0), // 0: xyz.block.ftl.v1.DeploymentChangeType (RunnerState)(0), // 1: xyz.block.ftl.v1.RunnerState @@ -3509,143 +3628,149 @@ var file_xyz_block_ftl_v1_ftl_proto_goTypes = []interface{}{ (*Metadata)(nil), // 7: xyz.block.ftl.v1.Metadata (*CallRequest)(nil), // 8: xyz.block.ftl.v1.CallRequest (*CallResponse)(nil), // 9: xyz.block.ftl.v1.CallResponse - (*GetSchemaRequest)(nil), // 10: xyz.block.ftl.v1.GetSchemaRequest - (*GetSchemaResponse)(nil), // 11: xyz.block.ftl.v1.GetSchemaResponse - (*PullSchemaRequest)(nil), // 12: xyz.block.ftl.v1.PullSchemaRequest - (*PullSchemaResponse)(nil), // 13: xyz.block.ftl.v1.PullSchemaResponse - (*GetArtefactDiffsRequest)(nil), // 14: xyz.block.ftl.v1.GetArtefactDiffsRequest - (*GetArtefactDiffsResponse)(nil), // 15: xyz.block.ftl.v1.GetArtefactDiffsResponse - (*UploadArtefactRequest)(nil), // 16: xyz.block.ftl.v1.UploadArtefactRequest - (*UploadArtefactResponse)(nil), // 17: xyz.block.ftl.v1.UploadArtefactResponse - (*DeploymentArtefact)(nil), // 18: xyz.block.ftl.v1.DeploymentArtefact - (*CreateDeploymentRequest)(nil), // 19: xyz.block.ftl.v1.CreateDeploymentRequest - (*CreateDeploymentResponse)(nil), // 20: xyz.block.ftl.v1.CreateDeploymentResponse - (*GetDeploymentArtefactsRequest)(nil), // 21: xyz.block.ftl.v1.GetDeploymentArtefactsRequest - (*GetDeploymentArtefactsResponse)(nil), // 22: xyz.block.ftl.v1.GetDeploymentArtefactsResponse - (*GetDeploymentRequest)(nil), // 23: xyz.block.ftl.v1.GetDeploymentRequest - (*GetDeploymentResponse)(nil), // 24: xyz.block.ftl.v1.GetDeploymentResponse - (*RegisterRunnerRequest)(nil), // 25: xyz.block.ftl.v1.RegisterRunnerRequest - (*RegisterRunnerResponse)(nil), // 26: xyz.block.ftl.v1.RegisterRunnerResponse - (*UpdateDeployRequest)(nil), // 27: xyz.block.ftl.v1.UpdateDeployRequest - (*UpdateDeployResponse)(nil), // 28: xyz.block.ftl.v1.UpdateDeployResponse - (*ReplaceDeployRequest)(nil), // 29: xyz.block.ftl.v1.ReplaceDeployRequest - (*ReplaceDeployResponse)(nil), // 30: xyz.block.ftl.v1.ReplaceDeployResponse - (*StreamDeploymentLogsRequest)(nil), // 31: xyz.block.ftl.v1.StreamDeploymentLogsRequest - (*StreamDeploymentLogsResponse)(nil), // 32: xyz.block.ftl.v1.StreamDeploymentLogsResponse - (*StatusRequest)(nil), // 33: xyz.block.ftl.v1.StatusRequest - (*StatusResponse)(nil), // 34: xyz.block.ftl.v1.StatusResponse - (*ProcessListRequest)(nil), // 35: xyz.block.ftl.v1.ProcessListRequest - (*ProcessListResponse)(nil), // 36: xyz.block.ftl.v1.ProcessListResponse - (*DeployRequest)(nil), // 37: xyz.block.ftl.v1.DeployRequest - (*DeployResponse)(nil), // 38: xyz.block.ftl.v1.DeployResponse - (*TerminateRequest)(nil), // 39: xyz.block.ftl.v1.TerminateRequest - (*ReserveRequest)(nil), // 40: xyz.block.ftl.v1.ReserveRequest - (*ReserveResponse)(nil), // 41: xyz.block.ftl.v1.ReserveResponse - (*ModuleContextResponse_Ref)(nil), // 42: xyz.block.ftl.v1.ModuleContextResponse.Ref - (*ModuleContextResponse_DSN)(nil), // 43: xyz.block.ftl.v1.ModuleContextResponse.DSN - nil, // 44: xyz.block.ftl.v1.ModuleContextResponse.ConfigsEntry - nil, // 45: xyz.block.ftl.v1.ModuleContextResponse.SecretsEntry - (*Metadata_Pair)(nil), // 46: xyz.block.ftl.v1.Metadata.Pair - (*CallResponse_Error)(nil), // 47: xyz.block.ftl.v1.CallResponse.Error - nil, // 48: xyz.block.ftl.v1.StreamDeploymentLogsRequest.AttributesEntry - (*StatusResponse_Controller)(nil), // 49: xyz.block.ftl.v1.StatusResponse.Controller - (*StatusResponse_Runner)(nil), // 50: xyz.block.ftl.v1.StatusResponse.Runner - (*StatusResponse_Deployment)(nil), // 51: xyz.block.ftl.v1.StatusResponse.Deployment - (*StatusResponse_IngressRoute)(nil), // 52: xyz.block.ftl.v1.StatusResponse.IngressRoute - (*StatusResponse_Route)(nil), // 53: xyz.block.ftl.v1.StatusResponse.Route - (*ProcessListResponse_ProcessRunner)(nil), // 54: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner - (*ProcessListResponse_Process)(nil), // 55: xyz.block.ftl.v1.ProcessListResponse.Process - (*schema.Ref)(nil), // 56: xyz.block.ftl.v1.schema.Ref - (*schema.Schema)(nil), // 57: xyz.block.ftl.v1.schema.Schema - (*schema.Module)(nil), // 58: xyz.block.ftl.v1.schema.Module - (*structpb.Struct)(nil), // 59: google.protobuf.Struct - (*timestamppb.Timestamp)(nil), // 60: google.protobuf.Timestamp + (*AcquireLeaseRequest)(nil), // 10: xyz.block.ftl.v1.AcquireLeaseRequest + (*AcquireLeaseResponse)(nil), // 11: xyz.block.ftl.v1.AcquireLeaseResponse + (*GetSchemaRequest)(nil), // 12: xyz.block.ftl.v1.GetSchemaRequest + (*GetSchemaResponse)(nil), // 13: xyz.block.ftl.v1.GetSchemaResponse + (*PullSchemaRequest)(nil), // 14: xyz.block.ftl.v1.PullSchemaRequest + (*PullSchemaResponse)(nil), // 15: xyz.block.ftl.v1.PullSchemaResponse + (*GetArtefactDiffsRequest)(nil), // 16: xyz.block.ftl.v1.GetArtefactDiffsRequest + (*GetArtefactDiffsResponse)(nil), // 17: xyz.block.ftl.v1.GetArtefactDiffsResponse + (*UploadArtefactRequest)(nil), // 18: xyz.block.ftl.v1.UploadArtefactRequest + (*UploadArtefactResponse)(nil), // 19: xyz.block.ftl.v1.UploadArtefactResponse + (*DeploymentArtefact)(nil), // 20: xyz.block.ftl.v1.DeploymentArtefact + (*CreateDeploymentRequest)(nil), // 21: xyz.block.ftl.v1.CreateDeploymentRequest + (*CreateDeploymentResponse)(nil), // 22: xyz.block.ftl.v1.CreateDeploymentResponse + (*GetDeploymentArtefactsRequest)(nil), // 23: xyz.block.ftl.v1.GetDeploymentArtefactsRequest + (*GetDeploymentArtefactsResponse)(nil), // 24: xyz.block.ftl.v1.GetDeploymentArtefactsResponse + (*GetDeploymentRequest)(nil), // 25: xyz.block.ftl.v1.GetDeploymentRequest + (*GetDeploymentResponse)(nil), // 26: xyz.block.ftl.v1.GetDeploymentResponse + (*RegisterRunnerRequest)(nil), // 27: xyz.block.ftl.v1.RegisterRunnerRequest + (*RegisterRunnerResponse)(nil), // 28: xyz.block.ftl.v1.RegisterRunnerResponse + (*UpdateDeployRequest)(nil), // 29: xyz.block.ftl.v1.UpdateDeployRequest + (*UpdateDeployResponse)(nil), // 30: xyz.block.ftl.v1.UpdateDeployResponse + (*ReplaceDeployRequest)(nil), // 31: xyz.block.ftl.v1.ReplaceDeployRequest + (*ReplaceDeployResponse)(nil), // 32: xyz.block.ftl.v1.ReplaceDeployResponse + (*StreamDeploymentLogsRequest)(nil), // 33: xyz.block.ftl.v1.StreamDeploymentLogsRequest + (*StreamDeploymentLogsResponse)(nil), // 34: xyz.block.ftl.v1.StreamDeploymentLogsResponse + (*StatusRequest)(nil), // 35: xyz.block.ftl.v1.StatusRequest + (*StatusResponse)(nil), // 36: xyz.block.ftl.v1.StatusResponse + (*ProcessListRequest)(nil), // 37: xyz.block.ftl.v1.ProcessListRequest + (*ProcessListResponse)(nil), // 38: xyz.block.ftl.v1.ProcessListResponse + (*DeployRequest)(nil), // 39: xyz.block.ftl.v1.DeployRequest + (*DeployResponse)(nil), // 40: xyz.block.ftl.v1.DeployResponse + (*TerminateRequest)(nil), // 41: xyz.block.ftl.v1.TerminateRequest + (*ReserveRequest)(nil), // 42: xyz.block.ftl.v1.ReserveRequest + (*ReserveResponse)(nil), // 43: xyz.block.ftl.v1.ReserveResponse + (*ModuleContextResponse_Ref)(nil), // 44: xyz.block.ftl.v1.ModuleContextResponse.Ref + (*ModuleContextResponse_DSN)(nil), // 45: xyz.block.ftl.v1.ModuleContextResponse.DSN + nil, // 46: xyz.block.ftl.v1.ModuleContextResponse.ConfigsEntry + nil, // 47: xyz.block.ftl.v1.ModuleContextResponse.SecretsEntry + (*Metadata_Pair)(nil), // 48: xyz.block.ftl.v1.Metadata.Pair + (*CallResponse_Error)(nil), // 49: xyz.block.ftl.v1.CallResponse.Error + nil, // 50: xyz.block.ftl.v1.StreamDeploymentLogsRequest.AttributesEntry + (*StatusResponse_Controller)(nil), // 51: xyz.block.ftl.v1.StatusResponse.Controller + (*StatusResponse_Runner)(nil), // 52: xyz.block.ftl.v1.StatusResponse.Runner + (*StatusResponse_Deployment)(nil), // 53: xyz.block.ftl.v1.StatusResponse.Deployment + (*StatusResponse_IngressRoute)(nil), // 54: xyz.block.ftl.v1.StatusResponse.IngressRoute + (*StatusResponse_Route)(nil), // 55: xyz.block.ftl.v1.StatusResponse.Route + (*ProcessListResponse_ProcessRunner)(nil), // 56: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner + (*ProcessListResponse_Process)(nil), // 57: xyz.block.ftl.v1.ProcessListResponse.Process + (*schema.Ref)(nil), // 58: xyz.block.ftl.v1.schema.Ref + (*durationpb.Duration)(nil), // 59: google.protobuf.Duration + (*schema.Schema)(nil), // 60: xyz.block.ftl.v1.schema.Schema + (*schema.Module)(nil), // 61: xyz.block.ftl.v1.schema.Module + (*structpb.Struct)(nil), // 62: google.protobuf.Struct + (*timestamppb.Timestamp)(nil), // 63: google.protobuf.Timestamp } var file_xyz_block_ftl_v1_ftl_proto_depIdxs = []int32{ - 44, // 0: xyz.block.ftl.v1.ModuleContextResponse.configs:type_name -> xyz.block.ftl.v1.ModuleContextResponse.ConfigsEntry - 45, // 1: xyz.block.ftl.v1.ModuleContextResponse.secrets:type_name -> xyz.block.ftl.v1.ModuleContextResponse.SecretsEntry - 43, // 2: xyz.block.ftl.v1.ModuleContextResponse.databases:type_name -> xyz.block.ftl.v1.ModuleContextResponse.DSN - 46, // 3: xyz.block.ftl.v1.Metadata.values:type_name -> xyz.block.ftl.v1.Metadata.Pair + 46, // 0: xyz.block.ftl.v1.ModuleContextResponse.configs:type_name -> xyz.block.ftl.v1.ModuleContextResponse.ConfigsEntry + 47, // 1: xyz.block.ftl.v1.ModuleContextResponse.secrets:type_name -> xyz.block.ftl.v1.ModuleContextResponse.SecretsEntry + 45, // 2: xyz.block.ftl.v1.ModuleContextResponse.databases:type_name -> xyz.block.ftl.v1.ModuleContextResponse.DSN + 48, // 3: xyz.block.ftl.v1.Metadata.values:type_name -> xyz.block.ftl.v1.Metadata.Pair 7, // 4: xyz.block.ftl.v1.CallRequest.metadata:type_name -> xyz.block.ftl.v1.Metadata - 56, // 5: xyz.block.ftl.v1.CallRequest.verb:type_name -> xyz.block.ftl.v1.schema.Ref - 47, // 6: xyz.block.ftl.v1.CallResponse.error:type_name -> xyz.block.ftl.v1.CallResponse.Error - 57, // 7: xyz.block.ftl.v1.GetSchemaResponse.schema:type_name -> xyz.block.ftl.v1.schema.Schema - 58, // 8: xyz.block.ftl.v1.PullSchemaResponse.schema:type_name -> xyz.block.ftl.v1.schema.Module - 0, // 9: xyz.block.ftl.v1.PullSchemaResponse.change_type:type_name -> xyz.block.ftl.v1.DeploymentChangeType - 18, // 10: xyz.block.ftl.v1.GetArtefactDiffsResponse.client_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 58, // 11: xyz.block.ftl.v1.CreateDeploymentRequest.schema:type_name -> xyz.block.ftl.v1.schema.Module - 18, // 12: xyz.block.ftl.v1.CreateDeploymentRequest.artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 59, // 13: xyz.block.ftl.v1.CreateDeploymentRequest.labels:type_name -> google.protobuf.Struct - 18, // 14: xyz.block.ftl.v1.GetDeploymentArtefactsRequest.have_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 18, // 15: xyz.block.ftl.v1.GetDeploymentArtefactsResponse.artefact:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 58, // 16: xyz.block.ftl.v1.GetDeploymentResponse.schema:type_name -> xyz.block.ftl.v1.schema.Module - 18, // 17: xyz.block.ftl.v1.GetDeploymentResponse.artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 1, // 18: xyz.block.ftl.v1.RegisterRunnerRequest.state:type_name -> xyz.block.ftl.v1.RunnerState - 59, // 19: xyz.block.ftl.v1.RegisterRunnerRequest.labels:type_name -> google.protobuf.Struct - 60, // 20: xyz.block.ftl.v1.StreamDeploymentLogsRequest.time_stamp:type_name -> google.protobuf.Timestamp - 48, // 21: xyz.block.ftl.v1.StreamDeploymentLogsRequest.attributes:type_name -> xyz.block.ftl.v1.StreamDeploymentLogsRequest.AttributesEntry - 49, // 22: xyz.block.ftl.v1.StatusResponse.controllers:type_name -> xyz.block.ftl.v1.StatusResponse.Controller - 50, // 23: xyz.block.ftl.v1.StatusResponse.runners:type_name -> xyz.block.ftl.v1.StatusResponse.Runner - 51, // 24: xyz.block.ftl.v1.StatusResponse.deployments:type_name -> xyz.block.ftl.v1.StatusResponse.Deployment - 52, // 25: xyz.block.ftl.v1.StatusResponse.ingress_routes:type_name -> xyz.block.ftl.v1.StatusResponse.IngressRoute - 53, // 26: xyz.block.ftl.v1.StatusResponse.routes:type_name -> xyz.block.ftl.v1.StatusResponse.Route - 55, // 27: xyz.block.ftl.v1.ProcessListResponse.processes:type_name -> xyz.block.ftl.v1.ProcessListResponse.Process - 2, // 28: xyz.block.ftl.v1.ModuleContextResponse.DSN.type:type_name -> xyz.block.ftl.v1.ModuleContextResponse.DBType - 1, // 29: xyz.block.ftl.v1.StatusResponse.Runner.state:type_name -> xyz.block.ftl.v1.RunnerState - 59, // 30: xyz.block.ftl.v1.StatusResponse.Runner.labels:type_name -> google.protobuf.Struct - 59, // 31: xyz.block.ftl.v1.StatusResponse.Deployment.labels:type_name -> google.protobuf.Struct - 58, // 32: xyz.block.ftl.v1.StatusResponse.Deployment.schema:type_name -> xyz.block.ftl.v1.schema.Module - 56, // 33: xyz.block.ftl.v1.StatusResponse.IngressRoute.verb:type_name -> xyz.block.ftl.v1.schema.Ref - 59, // 34: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner.labels:type_name -> google.protobuf.Struct - 59, // 35: xyz.block.ftl.v1.ProcessListResponse.Process.labels:type_name -> google.protobuf.Struct - 54, // 36: xyz.block.ftl.v1.ProcessListResponse.Process.runner:type_name -> xyz.block.ftl.v1.ProcessListResponse.ProcessRunner - 3, // 37: xyz.block.ftl.v1.VerbService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 5, // 38: xyz.block.ftl.v1.VerbService.GetModuleContext:input_type -> xyz.block.ftl.v1.ModuleContextRequest - 8, // 39: xyz.block.ftl.v1.VerbService.Call:input_type -> xyz.block.ftl.v1.CallRequest - 3, // 40: xyz.block.ftl.v1.ControllerService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 35, // 41: xyz.block.ftl.v1.ControllerService.ProcessList:input_type -> xyz.block.ftl.v1.ProcessListRequest - 33, // 42: xyz.block.ftl.v1.ControllerService.Status:input_type -> xyz.block.ftl.v1.StatusRequest - 14, // 43: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:input_type -> xyz.block.ftl.v1.GetArtefactDiffsRequest - 16, // 44: xyz.block.ftl.v1.ControllerService.UploadArtefact:input_type -> xyz.block.ftl.v1.UploadArtefactRequest - 19, // 45: xyz.block.ftl.v1.ControllerService.CreateDeployment:input_type -> xyz.block.ftl.v1.CreateDeploymentRequest - 23, // 46: xyz.block.ftl.v1.ControllerService.GetDeployment:input_type -> xyz.block.ftl.v1.GetDeploymentRequest - 21, // 47: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:input_type -> xyz.block.ftl.v1.GetDeploymentArtefactsRequest - 25, // 48: xyz.block.ftl.v1.ControllerService.RegisterRunner:input_type -> xyz.block.ftl.v1.RegisterRunnerRequest - 27, // 49: xyz.block.ftl.v1.ControllerService.UpdateDeploy:input_type -> xyz.block.ftl.v1.UpdateDeployRequest - 29, // 50: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:input_type -> xyz.block.ftl.v1.ReplaceDeployRequest - 31, // 51: xyz.block.ftl.v1.ControllerService.StreamDeploymentLogs:input_type -> xyz.block.ftl.v1.StreamDeploymentLogsRequest - 10, // 52: xyz.block.ftl.v1.ControllerService.GetSchema:input_type -> xyz.block.ftl.v1.GetSchemaRequest - 12, // 53: xyz.block.ftl.v1.ControllerService.PullSchema:input_type -> xyz.block.ftl.v1.PullSchemaRequest - 3, // 54: xyz.block.ftl.v1.RunnerService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 40, // 55: xyz.block.ftl.v1.RunnerService.Reserve:input_type -> xyz.block.ftl.v1.ReserveRequest - 37, // 56: xyz.block.ftl.v1.RunnerService.Deploy:input_type -> xyz.block.ftl.v1.DeployRequest - 39, // 57: xyz.block.ftl.v1.RunnerService.Terminate:input_type -> xyz.block.ftl.v1.TerminateRequest - 4, // 58: xyz.block.ftl.v1.VerbService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 6, // 59: xyz.block.ftl.v1.VerbService.GetModuleContext:output_type -> xyz.block.ftl.v1.ModuleContextResponse - 9, // 60: xyz.block.ftl.v1.VerbService.Call:output_type -> xyz.block.ftl.v1.CallResponse - 4, // 61: xyz.block.ftl.v1.ControllerService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 36, // 62: xyz.block.ftl.v1.ControllerService.ProcessList:output_type -> xyz.block.ftl.v1.ProcessListResponse - 34, // 63: xyz.block.ftl.v1.ControllerService.Status:output_type -> xyz.block.ftl.v1.StatusResponse - 15, // 64: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:output_type -> xyz.block.ftl.v1.GetArtefactDiffsResponse - 17, // 65: xyz.block.ftl.v1.ControllerService.UploadArtefact:output_type -> xyz.block.ftl.v1.UploadArtefactResponse - 20, // 66: xyz.block.ftl.v1.ControllerService.CreateDeployment:output_type -> xyz.block.ftl.v1.CreateDeploymentResponse - 24, // 67: xyz.block.ftl.v1.ControllerService.GetDeployment:output_type -> xyz.block.ftl.v1.GetDeploymentResponse - 22, // 68: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:output_type -> xyz.block.ftl.v1.GetDeploymentArtefactsResponse - 26, // 69: xyz.block.ftl.v1.ControllerService.RegisterRunner:output_type -> xyz.block.ftl.v1.RegisterRunnerResponse - 28, // 70: xyz.block.ftl.v1.ControllerService.UpdateDeploy:output_type -> xyz.block.ftl.v1.UpdateDeployResponse - 30, // 71: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:output_type -> xyz.block.ftl.v1.ReplaceDeployResponse - 32, // 72: xyz.block.ftl.v1.ControllerService.StreamDeploymentLogs:output_type -> xyz.block.ftl.v1.StreamDeploymentLogsResponse - 11, // 73: xyz.block.ftl.v1.ControllerService.GetSchema:output_type -> xyz.block.ftl.v1.GetSchemaResponse - 13, // 74: xyz.block.ftl.v1.ControllerService.PullSchema:output_type -> xyz.block.ftl.v1.PullSchemaResponse - 4, // 75: xyz.block.ftl.v1.RunnerService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 41, // 76: xyz.block.ftl.v1.RunnerService.Reserve:output_type -> xyz.block.ftl.v1.ReserveResponse - 38, // 77: xyz.block.ftl.v1.RunnerService.Deploy:output_type -> xyz.block.ftl.v1.DeployResponse - 25, // 78: xyz.block.ftl.v1.RunnerService.Terminate:output_type -> xyz.block.ftl.v1.RegisterRunnerRequest - 58, // [58:79] is the sub-list for method output_type - 37, // [37:58] is the sub-list for method input_type - 37, // [37:37] is the sub-list for extension type_name - 37, // [37:37] is the sub-list for extension extendee - 0, // [0:37] is the sub-list for field type_name + 58, // 5: xyz.block.ftl.v1.CallRequest.verb:type_name -> xyz.block.ftl.v1.schema.Ref + 49, // 6: xyz.block.ftl.v1.CallResponse.error:type_name -> xyz.block.ftl.v1.CallResponse.Error + 59, // 7: xyz.block.ftl.v1.AcquireLeaseRequest.ttl:type_name -> google.protobuf.Duration + 60, // 8: xyz.block.ftl.v1.GetSchemaResponse.schema:type_name -> xyz.block.ftl.v1.schema.Schema + 61, // 9: xyz.block.ftl.v1.PullSchemaResponse.schema:type_name -> xyz.block.ftl.v1.schema.Module + 0, // 10: xyz.block.ftl.v1.PullSchemaResponse.change_type:type_name -> xyz.block.ftl.v1.DeploymentChangeType + 20, // 11: xyz.block.ftl.v1.GetArtefactDiffsResponse.client_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 61, // 12: xyz.block.ftl.v1.CreateDeploymentRequest.schema:type_name -> xyz.block.ftl.v1.schema.Module + 20, // 13: xyz.block.ftl.v1.CreateDeploymentRequest.artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 62, // 14: xyz.block.ftl.v1.CreateDeploymentRequest.labels:type_name -> google.protobuf.Struct + 20, // 15: xyz.block.ftl.v1.GetDeploymentArtefactsRequest.have_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 20, // 16: xyz.block.ftl.v1.GetDeploymentArtefactsResponse.artefact:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 61, // 17: xyz.block.ftl.v1.GetDeploymentResponse.schema:type_name -> xyz.block.ftl.v1.schema.Module + 20, // 18: xyz.block.ftl.v1.GetDeploymentResponse.artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 1, // 19: xyz.block.ftl.v1.RegisterRunnerRequest.state:type_name -> xyz.block.ftl.v1.RunnerState + 62, // 20: xyz.block.ftl.v1.RegisterRunnerRequest.labels:type_name -> google.protobuf.Struct + 63, // 21: xyz.block.ftl.v1.StreamDeploymentLogsRequest.time_stamp:type_name -> google.protobuf.Timestamp + 50, // 22: xyz.block.ftl.v1.StreamDeploymentLogsRequest.attributes:type_name -> xyz.block.ftl.v1.StreamDeploymentLogsRequest.AttributesEntry + 51, // 23: xyz.block.ftl.v1.StatusResponse.controllers:type_name -> xyz.block.ftl.v1.StatusResponse.Controller + 52, // 24: xyz.block.ftl.v1.StatusResponse.runners:type_name -> xyz.block.ftl.v1.StatusResponse.Runner + 53, // 25: xyz.block.ftl.v1.StatusResponse.deployments:type_name -> xyz.block.ftl.v1.StatusResponse.Deployment + 54, // 26: xyz.block.ftl.v1.StatusResponse.ingress_routes:type_name -> xyz.block.ftl.v1.StatusResponse.IngressRoute + 55, // 27: xyz.block.ftl.v1.StatusResponse.routes:type_name -> xyz.block.ftl.v1.StatusResponse.Route + 57, // 28: xyz.block.ftl.v1.ProcessListResponse.processes:type_name -> xyz.block.ftl.v1.ProcessListResponse.Process + 2, // 29: xyz.block.ftl.v1.ModuleContextResponse.DSN.type:type_name -> xyz.block.ftl.v1.ModuleContextResponse.DBType + 1, // 30: xyz.block.ftl.v1.StatusResponse.Runner.state:type_name -> xyz.block.ftl.v1.RunnerState + 62, // 31: xyz.block.ftl.v1.StatusResponse.Runner.labels:type_name -> google.protobuf.Struct + 62, // 32: xyz.block.ftl.v1.StatusResponse.Deployment.labels:type_name -> google.protobuf.Struct + 61, // 33: xyz.block.ftl.v1.StatusResponse.Deployment.schema:type_name -> xyz.block.ftl.v1.schema.Module + 58, // 34: xyz.block.ftl.v1.StatusResponse.IngressRoute.verb:type_name -> xyz.block.ftl.v1.schema.Ref + 62, // 35: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner.labels:type_name -> google.protobuf.Struct + 62, // 36: xyz.block.ftl.v1.ProcessListResponse.Process.labels:type_name -> google.protobuf.Struct + 56, // 37: xyz.block.ftl.v1.ProcessListResponse.Process.runner:type_name -> xyz.block.ftl.v1.ProcessListResponse.ProcessRunner + 3, // 38: xyz.block.ftl.v1.VerbService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 5, // 39: xyz.block.ftl.v1.VerbService.GetModuleContext:input_type -> xyz.block.ftl.v1.ModuleContextRequest + 10, // 40: xyz.block.ftl.v1.VerbService.AcquireLease:input_type -> xyz.block.ftl.v1.AcquireLeaseRequest + 8, // 41: xyz.block.ftl.v1.VerbService.Call:input_type -> xyz.block.ftl.v1.CallRequest + 3, // 42: xyz.block.ftl.v1.ControllerService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 37, // 43: xyz.block.ftl.v1.ControllerService.ProcessList:input_type -> xyz.block.ftl.v1.ProcessListRequest + 35, // 44: xyz.block.ftl.v1.ControllerService.Status:input_type -> xyz.block.ftl.v1.StatusRequest + 16, // 45: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:input_type -> xyz.block.ftl.v1.GetArtefactDiffsRequest + 18, // 46: xyz.block.ftl.v1.ControllerService.UploadArtefact:input_type -> xyz.block.ftl.v1.UploadArtefactRequest + 21, // 47: xyz.block.ftl.v1.ControllerService.CreateDeployment:input_type -> xyz.block.ftl.v1.CreateDeploymentRequest + 25, // 48: xyz.block.ftl.v1.ControllerService.GetDeployment:input_type -> xyz.block.ftl.v1.GetDeploymentRequest + 23, // 49: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:input_type -> xyz.block.ftl.v1.GetDeploymentArtefactsRequest + 27, // 50: xyz.block.ftl.v1.ControllerService.RegisterRunner:input_type -> xyz.block.ftl.v1.RegisterRunnerRequest + 29, // 51: xyz.block.ftl.v1.ControllerService.UpdateDeploy:input_type -> xyz.block.ftl.v1.UpdateDeployRequest + 31, // 52: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:input_type -> xyz.block.ftl.v1.ReplaceDeployRequest + 33, // 53: xyz.block.ftl.v1.ControllerService.StreamDeploymentLogs:input_type -> xyz.block.ftl.v1.StreamDeploymentLogsRequest + 12, // 54: xyz.block.ftl.v1.ControllerService.GetSchema:input_type -> xyz.block.ftl.v1.GetSchemaRequest + 14, // 55: xyz.block.ftl.v1.ControllerService.PullSchema:input_type -> xyz.block.ftl.v1.PullSchemaRequest + 3, // 56: xyz.block.ftl.v1.RunnerService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 42, // 57: xyz.block.ftl.v1.RunnerService.Reserve:input_type -> xyz.block.ftl.v1.ReserveRequest + 39, // 58: xyz.block.ftl.v1.RunnerService.Deploy:input_type -> xyz.block.ftl.v1.DeployRequest + 41, // 59: xyz.block.ftl.v1.RunnerService.Terminate:input_type -> xyz.block.ftl.v1.TerminateRequest + 4, // 60: xyz.block.ftl.v1.VerbService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 6, // 61: xyz.block.ftl.v1.VerbService.GetModuleContext:output_type -> xyz.block.ftl.v1.ModuleContextResponse + 11, // 62: xyz.block.ftl.v1.VerbService.AcquireLease:output_type -> xyz.block.ftl.v1.AcquireLeaseResponse + 9, // 63: xyz.block.ftl.v1.VerbService.Call:output_type -> xyz.block.ftl.v1.CallResponse + 4, // 64: xyz.block.ftl.v1.ControllerService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 38, // 65: xyz.block.ftl.v1.ControllerService.ProcessList:output_type -> xyz.block.ftl.v1.ProcessListResponse + 36, // 66: xyz.block.ftl.v1.ControllerService.Status:output_type -> xyz.block.ftl.v1.StatusResponse + 17, // 67: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:output_type -> xyz.block.ftl.v1.GetArtefactDiffsResponse + 19, // 68: xyz.block.ftl.v1.ControllerService.UploadArtefact:output_type -> xyz.block.ftl.v1.UploadArtefactResponse + 22, // 69: xyz.block.ftl.v1.ControllerService.CreateDeployment:output_type -> xyz.block.ftl.v1.CreateDeploymentResponse + 26, // 70: xyz.block.ftl.v1.ControllerService.GetDeployment:output_type -> xyz.block.ftl.v1.GetDeploymentResponse + 24, // 71: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:output_type -> xyz.block.ftl.v1.GetDeploymentArtefactsResponse + 28, // 72: xyz.block.ftl.v1.ControllerService.RegisterRunner:output_type -> xyz.block.ftl.v1.RegisterRunnerResponse + 30, // 73: xyz.block.ftl.v1.ControllerService.UpdateDeploy:output_type -> xyz.block.ftl.v1.UpdateDeployResponse + 32, // 74: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:output_type -> xyz.block.ftl.v1.ReplaceDeployResponse + 34, // 75: xyz.block.ftl.v1.ControllerService.StreamDeploymentLogs:output_type -> xyz.block.ftl.v1.StreamDeploymentLogsResponse + 13, // 76: xyz.block.ftl.v1.ControllerService.GetSchema:output_type -> xyz.block.ftl.v1.GetSchemaResponse + 15, // 77: xyz.block.ftl.v1.ControllerService.PullSchema:output_type -> xyz.block.ftl.v1.PullSchemaResponse + 4, // 78: xyz.block.ftl.v1.RunnerService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 43, // 79: xyz.block.ftl.v1.RunnerService.Reserve:output_type -> xyz.block.ftl.v1.ReserveResponse + 40, // 80: xyz.block.ftl.v1.RunnerService.Deploy:output_type -> xyz.block.ftl.v1.DeployResponse + 27, // 81: xyz.block.ftl.v1.RunnerService.Terminate:output_type -> xyz.block.ftl.v1.RegisterRunnerRequest + 60, // [60:82] is the sub-list for method output_type + 38, // [38:60] is the sub-list for method input_type + 38, // [38:38] is the sub-list for extension type_name + 38, // [38:38] is the sub-list for extension extendee + 0, // [0:38] is the sub-list for field type_name } func init() { file_xyz_block_ftl_v1_ftl_proto_init() } @@ -3739,7 +3864,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSchemaRequest); i { + switch v := v.(*AcquireLeaseRequest); i { case 0: return &v.state case 1: @@ -3751,7 +3876,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSchemaResponse); i { + switch v := v.(*AcquireLeaseResponse); i { case 0: return &v.state case 1: @@ -3763,7 +3888,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PullSchemaRequest); i { + switch v := v.(*GetSchemaRequest); i { case 0: return &v.state case 1: @@ -3775,7 +3900,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PullSchemaResponse); i { + switch v := v.(*GetSchemaResponse); i { case 0: return &v.state case 1: @@ -3787,7 +3912,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetArtefactDiffsRequest); i { + switch v := v.(*PullSchemaRequest); i { case 0: return &v.state case 1: @@ -3799,7 +3924,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetArtefactDiffsResponse); i { + switch v := v.(*PullSchemaResponse); i { case 0: return &v.state case 1: @@ -3811,7 +3936,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UploadArtefactRequest); i { + switch v := v.(*GetArtefactDiffsRequest); i { case 0: return &v.state case 1: @@ -3823,7 +3948,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UploadArtefactResponse); i { + switch v := v.(*GetArtefactDiffsResponse); i { case 0: return &v.state case 1: @@ -3835,7 +3960,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeploymentArtefact); i { + switch v := v.(*UploadArtefactRequest); i { case 0: return &v.state case 1: @@ -3847,7 +3972,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateDeploymentRequest); i { + switch v := v.(*UploadArtefactResponse); i { case 0: return &v.state case 1: @@ -3859,7 +3984,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateDeploymentResponse); i { + switch v := v.(*DeploymentArtefact); i { case 0: return &v.state case 1: @@ -3871,7 +3996,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDeploymentArtefactsRequest); i { + switch v := v.(*CreateDeploymentRequest); i { case 0: return &v.state case 1: @@ -3883,7 +4008,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDeploymentArtefactsResponse); i { + switch v := v.(*CreateDeploymentResponse); i { case 0: return &v.state case 1: @@ -3895,7 +4020,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDeploymentRequest); i { + switch v := v.(*GetDeploymentArtefactsRequest); i { case 0: return &v.state case 1: @@ -3907,7 +4032,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDeploymentResponse); i { + switch v := v.(*GetDeploymentArtefactsResponse); i { case 0: return &v.state case 1: @@ -3919,7 +4044,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterRunnerRequest); i { + switch v := v.(*GetDeploymentRequest); i { case 0: return &v.state case 1: @@ -3931,7 +4056,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterRunnerResponse); i { + switch v := v.(*GetDeploymentResponse); i { case 0: return &v.state case 1: @@ -3943,7 +4068,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateDeployRequest); i { + switch v := v.(*RegisterRunnerRequest); i { case 0: return &v.state case 1: @@ -3955,7 +4080,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateDeployResponse); i { + switch v := v.(*RegisterRunnerResponse); i { case 0: return &v.state case 1: @@ -3967,7 +4092,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplaceDeployRequest); i { + switch v := v.(*UpdateDeployRequest); i { case 0: return &v.state case 1: @@ -3979,7 +4104,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplaceDeployResponse); i { + switch v := v.(*UpdateDeployResponse); i { case 0: return &v.state case 1: @@ -3991,7 +4116,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamDeploymentLogsRequest); i { + switch v := v.(*ReplaceDeployRequest); i { case 0: return &v.state case 1: @@ -4003,7 +4128,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamDeploymentLogsResponse); i { + switch v := v.(*ReplaceDeployResponse); i { case 0: return &v.state case 1: @@ -4015,7 +4140,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusRequest); i { + switch v := v.(*StreamDeploymentLogsRequest); i { case 0: return &v.state case 1: @@ -4027,7 +4152,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatusResponse); i { + switch v := v.(*StreamDeploymentLogsResponse); i { case 0: return &v.state case 1: @@ -4039,7 +4164,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProcessListRequest); i { + switch v := v.(*StatusRequest); i { case 0: return &v.state case 1: @@ -4051,7 +4176,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProcessListResponse); i { + switch v := v.(*StatusResponse); i { case 0: return &v.state case 1: @@ -4063,7 +4188,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeployRequest); i { + switch v := v.(*ProcessListRequest); i { case 0: return &v.state case 1: @@ -4075,7 +4200,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeployResponse); i { + switch v := v.(*ProcessListResponse); i { case 0: return &v.state case 1: @@ -4087,7 +4212,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TerminateRequest); i { + switch v := v.(*DeployRequest); i { case 0: return &v.state case 1: @@ -4099,7 +4224,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReserveRequest); i { + switch v := v.(*DeployResponse); i { case 0: return &v.state case 1: @@ -4111,7 +4236,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReserveResponse); i { + switch v := v.(*TerminateRequest); i { case 0: return &v.state case 1: @@ -4123,7 +4248,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ModuleContextResponse_Ref); i { + switch v := v.(*ReserveRequest); i { case 0: return &v.state case 1: @@ -4135,6 +4260,30 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReserveResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ModuleContextResponse_Ref); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ModuleContextResponse_DSN); i { case 0: return &v.state @@ -4146,7 +4295,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Metadata_Pair); i { case 0: return &v.state @@ -4158,7 +4307,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CallResponse_Error); i { case 0: return &v.state @@ -4170,7 +4319,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusResponse_Controller); i { case 0: return &v.state @@ -4182,7 +4331,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusResponse_Runner); i { case 0: return &v.state @@ -4194,7 +4343,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusResponse_Deployment); i { case 0: return &v.state @@ -4206,7 +4355,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusResponse_IngressRoute); i { case 0: return &v.state @@ -4218,7 +4367,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatusResponse_Route); i { case 0: return &v.state @@ -4230,7 +4379,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProcessListResponse_ProcessRunner); i { case 0: return &v.state @@ -4242,7 +4391,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProcessListResponse_Process); i { case 0: return &v.state @@ -4260,22 +4409,22 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { (*CallResponse_Body)(nil), (*CallResponse_Error_)(nil), } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[10].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[16].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[17].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[22].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[28].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[39].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[44].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[47].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[52].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[12].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[18].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[19].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[24].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[30].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[41].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[46].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[49].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[54].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xyz_block_ftl_v1_ftl_proto_rawDesc, NumEnums: 3, - NumMessages: 53, + NumMessages: 55, NumExtensions: 0, NumServices: 3, }, diff --git a/backend/protos/xyz/block/ftl/v1/ftl.proto b/backend/protos/xyz/block/ftl/v1/ftl.proto index 628ffe39d0..47e1560f47 100644 --- a/backend/protos/xyz/block/ftl/v1/ftl.proto +++ b/backend/protos/xyz/block/ftl/v1/ftl.proto @@ -4,6 +4,7 @@ package xyz.block.ftl.v1; import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; +import "google/protobuf/duration.proto"; import "xyz/block/ftl/v1/schema/schema.proto"; option go_package = "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1;ftlv1"; @@ -72,6 +73,15 @@ message CallResponse { } } +message AcquireLeaseRequest { + string module = 1; + repeated string key = 2; + google.protobuf.Duration ttl = 3; +} + +message AcquireLeaseResponse { +} + // VerbService is a common interface shared by multiple services for calling Verbs. service VerbService { // Ping service for readiness. @@ -80,9 +90,12 @@ service VerbService { } // Get configuration state for the module - rpc GetModuleContext(ModuleContextRequest) returns (ModuleContextResponse) { - option idempotency_level = NO_SIDE_EFFECTS; - } + rpc GetModuleContext(ModuleContextRequest) returns (ModuleContextResponse); + + // Acquire (and renew) a lease for a deployment. + // + // Returns ResourceExhausted if the lease is held. + rpc AcquireLease(stream AcquireLeaseRequest) returns (stream AcquireLeaseResponse); // Issue a synchronous call to a Verb. rpc Call(CallRequest) returns (CallResponse); diff --git a/backend/protos/xyz/block/ftl/v1/ftlv1connect/ftl.connect.go b/backend/protos/xyz/block/ftl/v1/ftlv1connect/ftl.connect.go index ec175c5399..aedf97a7b1 100644 --- a/backend/protos/xyz/block/ftl/v1/ftlv1connect/ftl.connect.go +++ b/backend/protos/xyz/block/ftl/v1/ftlv1connect/ftl.connect.go @@ -42,6 +42,9 @@ const ( // VerbServiceGetModuleContextProcedure is the fully-qualified name of the VerbService's // GetModuleContext RPC. VerbServiceGetModuleContextProcedure = "/xyz.block.ftl.v1.VerbService/GetModuleContext" + // VerbServiceAcquireLeaseProcedure is the fully-qualified name of the VerbService's AcquireLease + // RPC. + VerbServiceAcquireLeaseProcedure = "/xyz.block.ftl.v1.VerbService/AcquireLease" // VerbServiceCallProcedure is the fully-qualified name of the VerbService's Call RPC. VerbServiceCallProcedure = "/xyz.block.ftl.v1.VerbService/Call" // ControllerServicePingProcedure is the fully-qualified name of the ControllerService's Ping RPC. @@ -101,6 +104,10 @@ type VerbServiceClient interface { Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) // Get configuration state for the module GetModuleContext(context.Context, *connect.Request[v1.ModuleContextRequest]) (*connect.Response[v1.ModuleContextResponse], error) + // Acquire (and renew) a lease for a deployment. + // + // Returns ResourceExhausted if the lease is held. + AcquireLease(context.Context) *connect.BidiStreamForClient[v1.AcquireLeaseRequest, v1.AcquireLeaseResponse] // Issue a synchronous call to a Verb. Call(context.Context, *connect.Request[v1.CallRequest]) (*connect.Response[v1.CallResponse], error) } @@ -124,8 +131,12 @@ func NewVerbServiceClient(httpClient connect.HTTPClient, baseURL string, opts .. getModuleContext: connect.NewClient[v1.ModuleContextRequest, v1.ModuleContextResponse]( httpClient, baseURL+VerbServiceGetModuleContextProcedure, - connect.WithIdempotency(connect.IdempotencyNoSideEffects), - connect.WithClientOptions(opts...), + opts..., + ), + acquireLease: connect.NewClient[v1.AcquireLeaseRequest, v1.AcquireLeaseResponse]( + httpClient, + baseURL+VerbServiceAcquireLeaseProcedure, + opts..., ), call: connect.NewClient[v1.CallRequest, v1.CallResponse]( httpClient, @@ -139,6 +150,7 @@ func NewVerbServiceClient(httpClient connect.HTTPClient, baseURL string, opts .. type verbServiceClient struct { ping *connect.Client[v1.PingRequest, v1.PingResponse] getModuleContext *connect.Client[v1.ModuleContextRequest, v1.ModuleContextResponse] + acquireLease *connect.Client[v1.AcquireLeaseRequest, v1.AcquireLeaseResponse] call *connect.Client[v1.CallRequest, v1.CallResponse] } @@ -152,6 +164,11 @@ func (c *verbServiceClient) GetModuleContext(ctx context.Context, req *connect.R return c.getModuleContext.CallUnary(ctx, req) } +// AcquireLease calls xyz.block.ftl.v1.VerbService.AcquireLease. +func (c *verbServiceClient) AcquireLease(ctx context.Context) *connect.BidiStreamForClient[v1.AcquireLeaseRequest, v1.AcquireLeaseResponse] { + return c.acquireLease.CallBidiStream(ctx) +} + // Call calls xyz.block.ftl.v1.VerbService.Call. func (c *verbServiceClient) Call(ctx context.Context, req *connect.Request[v1.CallRequest]) (*connect.Response[v1.CallResponse], error) { return c.call.CallUnary(ctx, req) @@ -163,6 +180,10 @@ type VerbServiceHandler interface { Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) // Get configuration state for the module GetModuleContext(context.Context, *connect.Request[v1.ModuleContextRequest]) (*connect.Response[v1.ModuleContextResponse], error) + // Acquire (and renew) a lease for a deployment. + // + // Returns ResourceExhausted if the lease is held. + AcquireLease(context.Context, *connect.BidiStream[v1.AcquireLeaseRequest, v1.AcquireLeaseResponse]) error // Issue a synchronous call to a Verb. Call(context.Context, *connect.Request[v1.CallRequest]) (*connect.Response[v1.CallResponse], error) } @@ -182,8 +203,12 @@ func NewVerbServiceHandler(svc VerbServiceHandler, opts ...connect.HandlerOption verbServiceGetModuleContextHandler := connect.NewUnaryHandler( VerbServiceGetModuleContextProcedure, svc.GetModuleContext, - connect.WithIdempotency(connect.IdempotencyNoSideEffects), - connect.WithHandlerOptions(opts...), + opts..., + ) + verbServiceAcquireLeaseHandler := connect.NewBidiStreamHandler( + VerbServiceAcquireLeaseProcedure, + svc.AcquireLease, + opts..., ) verbServiceCallHandler := connect.NewUnaryHandler( VerbServiceCallProcedure, @@ -196,6 +221,8 @@ func NewVerbServiceHandler(svc VerbServiceHandler, opts ...connect.HandlerOption verbServicePingHandler.ServeHTTP(w, r) case VerbServiceGetModuleContextProcedure: verbServiceGetModuleContextHandler.ServeHTTP(w, r) + case VerbServiceAcquireLeaseProcedure: + verbServiceAcquireLeaseHandler.ServeHTTP(w, r) case VerbServiceCallProcedure: verbServiceCallHandler.ServeHTTP(w, r) default: @@ -215,6 +242,10 @@ func (UnimplementedVerbServiceHandler) GetModuleContext(context.Context, *connec return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.VerbService.GetModuleContext is not implemented")) } +func (UnimplementedVerbServiceHandler) AcquireLease(context.Context, *connect.BidiStream[v1.AcquireLeaseRequest, v1.AcquireLeaseResponse]) error { + return connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.VerbService.AcquireLease is not implemented")) +} + func (UnimplementedVerbServiceHandler) Call(context.Context, *connect.Request[v1.CallRequest]) (*connect.Response[v1.CallResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.VerbService.Call is not implemented")) } diff --git a/backend/runner/runner.go b/backend/runner/runner.go index 13a9ea6753..4bb243fbde 100644 --- a/backend/runner/runner.go +++ b/backend/runner/runner.go @@ -153,7 +153,11 @@ func (s *Service) Ping(ctx context.Context, req *connect.Request[ftlv1.PingReque } func (s *Service) GetModuleContext(ctx context.Context, req *connect.Request[ftlv1.ModuleContextRequest]) (*connect.Response[ftlv1.ModuleContextResponse], error) { - return nil, fmt.Errorf("not implemented") + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("module context must be acquired from the controller")) +} + +func (s *Service) AcquireLease(context.Context, *connect.BidiStream[ftlv1.AcquireLeaseRequest, ftlv1.AcquireLeaseResponse]) error { + return connect.NewError(connect.CodeUnimplemented, errors.New("leases must be acquired from the controller")) } func (s *Service) Deploy(ctx context.Context, req *connect.Request[ftlv1.DeployRequest]) (response *connect.Response[ftlv1.DeployResponse], err error) { diff --git a/buildengine/testdata/projects/alpha/go.mod b/buildengine/testdata/projects/alpha/go.mod index 5b9170b99c..ff45e15c7e 100644 --- a/buildengine/testdata/projects/alpha/go.mod +++ b/buildengine/testdata/projects/alpha/go.mod @@ -5,7 +5,7 @@ go 1.22.2 require github.com/TBD54566975/ftl v0.129.2 require ( - connectrpc.com/connect v1.16.0 // indirect + connectrpc.com/connect v1.16.1 // indirect connectrpc.com/grpcreflect v1.2.0 // indirect connectrpc.com/otelconnect v0.7.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect diff --git a/buildengine/testdata/projects/alpha/go.sum b/buildengine/testdata/projects/alpha/go.sum index a852a3f784..442405d413 100644 --- a/buildengine/testdata/projects/alpha/go.sum +++ b/buildengine/testdata/projects/alpha/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.16.0 h1:rdtfQjZ0OyFkWPTegBNcH7cwquGAN1WzyJy80oFNibg= -connectrpc.com/connect v1.16.0/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= diff --git a/buildengine/testdata/projects/another/go.mod b/buildengine/testdata/projects/another/go.mod index 25faaf261e..f924d29e34 100644 --- a/buildengine/testdata/projects/another/go.mod +++ b/buildengine/testdata/projects/another/go.mod @@ -5,7 +5,7 @@ go 1.22.2 require github.com/TBD54566975/ftl v0.129.2 require ( - connectrpc.com/connect v1.16.0 // indirect + connectrpc.com/connect v1.16.1 // indirect connectrpc.com/grpcreflect v1.2.0 // indirect connectrpc.com/otelconnect v0.7.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect diff --git a/buildengine/testdata/projects/another/go.sum b/buildengine/testdata/projects/another/go.sum index a852a3f784..442405d413 100644 --- a/buildengine/testdata/projects/another/go.sum +++ b/buildengine/testdata/projects/another/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.16.0 h1:rdtfQjZ0OyFkWPTegBNcH7cwquGAN1WzyJy80oFNibg= -connectrpc.com/connect v1.16.0/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= diff --git a/buildengine/testdata/projects/other/go.mod b/buildengine/testdata/projects/other/go.mod index 64bb486a86..fe610f4e50 100644 --- a/buildengine/testdata/projects/other/go.mod +++ b/buildengine/testdata/projects/other/go.mod @@ -5,7 +5,7 @@ go 1.22.2 require github.com/TBD54566975/ftl v0.129.2 require ( - connectrpc.com/connect v1.16.0 // indirect + connectrpc.com/connect v1.16.1 // indirect connectrpc.com/grpcreflect v1.2.0 // indirect connectrpc.com/otelconnect v0.7.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect diff --git a/buildengine/testdata/projects/other/go.sum b/buildengine/testdata/projects/other/go.sum index a852a3f784..442405d413 100644 --- a/buildengine/testdata/projects/other/go.sum +++ b/buildengine/testdata/projects/other/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.16.0 h1:rdtfQjZ0OyFkWPTegBNcH7cwquGAN1WzyJy80oFNibg= -connectrpc.com/connect v1.16.0/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= diff --git a/examples/go/echo/go.mod b/examples/go/echo/go.mod index af20025474..682c371ffb 100644 --- a/examples/go/echo/go.mod +++ b/examples/go/echo/go.mod @@ -7,7 +7,7 @@ replace github.com/TBD54566975/ftl => ../../.. require github.com/TBD54566975/ftl v0.0.0-00010101000000-000000000000 require ( - connectrpc.com/connect v1.16.0 // indirect + connectrpc.com/connect v1.16.1 // indirect connectrpc.com/grpcreflect v1.2.0 // indirect connectrpc.com/otelconnect v0.7.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect diff --git a/examples/go/echo/go.sum b/examples/go/echo/go.sum index a852a3f784..442405d413 100644 --- a/examples/go/echo/go.sum +++ b/examples/go/echo/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.16.0 h1:rdtfQjZ0OyFkWPTegBNcH7cwquGAN1WzyJy80oFNibg= -connectrpc.com/connect v1.16.0/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= diff --git a/frontend/src/protos/xyz/block/ftl/v1/ftl_connect.ts b/frontend/src/protos/xyz/block/ftl/v1/ftl_connect.ts index d49116a9a0..20e8e9e2de 100644 --- a/frontend/src/protos/xyz/block/ftl/v1/ftl_connect.ts +++ b/frontend/src/protos/xyz/block/ftl/v1/ftl_connect.ts @@ -3,7 +3,7 @@ /* eslint-disable */ // @ts-nocheck -import { CallRequest, CallResponse, CreateDeploymentRequest, CreateDeploymentResponse, DeployRequest, DeployResponse, GetArtefactDiffsRequest, GetArtefactDiffsResponse, GetDeploymentArtefactsRequest, GetDeploymentArtefactsResponse, GetDeploymentRequest, GetDeploymentResponse, GetSchemaRequest, GetSchemaResponse, ModuleContextRequest, ModuleContextResponse, PingRequest, PingResponse, ProcessListRequest, ProcessListResponse, PullSchemaRequest, PullSchemaResponse, RegisterRunnerRequest, RegisterRunnerResponse, ReplaceDeployRequest, ReplaceDeployResponse, ReserveRequest, ReserveResponse, StatusRequest, StatusResponse, StreamDeploymentLogsRequest, StreamDeploymentLogsResponse, TerminateRequest, UpdateDeployRequest, UpdateDeployResponse, UploadArtefactRequest, UploadArtefactResponse } from "./ftl_pb.js"; +import { AcquireLeaseRequest, AcquireLeaseResponse, CallRequest, CallResponse, CreateDeploymentRequest, CreateDeploymentResponse, DeployRequest, DeployResponse, GetArtefactDiffsRequest, GetArtefactDiffsResponse, GetDeploymentArtefactsRequest, GetDeploymentArtefactsResponse, GetDeploymentRequest, GetDeploymentResponse, GetSchemaRequest, GetSchemaResponse, ModuleContextRequest, ModuleContextResponse, PingRequest, PingResponse, ProcessListRequest, ProcessListResponse, PullSchemaRequest, PullSchemaResponse, RegisterRunnerRequest, RegisterRunnerResponse, ReplaceDeployRequest, ReplaceDeployResponse, ReserveRequest, ReserveResponse, StatusRequest, StatusResponse, StreamDeploymentLogsRequest, StreamDeploymentLogsResponse, TerminateRequest, UpdateDeployRequest, UpdateDeployResponse, UploadArtefactRequest, UploadArtefactResponse } from "./ftl_pb.js"; import { MethodIdempotency, MethodKind } from "@bufbuild/protobuf"; /** @@ -36,7 +36,19 @@ export const VerbService = { I: ModuleContextRequest, O: ModuleContextResponse, kind: MethodKind.Unary, - idempotency: MethodIdempotency.NoSideEffects, + }, + /** + * Acquire (and renew) a lease for a deployment. + * + * Returns ResourceExhausted if the lease is held. + * + * @generated from rpc xyz.block.ftl.v1.VerbService.AcquireLease + */ + acquireLease: { + name: "AcquireLease", + I: AcquireLeaseRequest, + O: AcquireLeaseResponse, + kind: MethodKind.BiDiStreaming, }, /** * Issue a synchronous call to a Verb. diff --git a/frontend/src/protos/xyz/block/ftl/v1/ftl_pb.ts b/frontend/src/protos/xyz/block/ftl/v1/ftl_pb.ts index a1056b74f1..3d9c6a9f34 100644 --- a/frontend/src/protos/xyz/block/ftl/v1/ftl_pb.ts +++ b/frontend/src/protos/xyz/block/ftl/v1/ftl_pb.ts @@ -4,7 +4,7 @@ // @ts-nocheck import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; -import { Message, proto3, Struct, Timestamp } from "@bufbuild/protobuf"; +import { Duration, Message, proto3, Struct, Timestamp } from "@bufbuild/protobuf"; import { Module, Ref, Schema } from "./schema/schema_pb.js"; /** @@ -566,6 +566,86 @@ export class CallResponse_Error extends Message { } } +/** + * @generated from message xyz.block.ftl.v1.AcquireLeaseRequest + */ +export class AcquireLeaseRequest extends Message { + /** + * @generated from field: string module = 1; + */ + module = ""; + + /** + * @generated from field: repeated string key = 2; + */ + key: string[] = []; + + /** + * @generated from field: google.protobuf.Duration ttl = 3; + */ + ttl?: Duration; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.AcquireLeaseRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "module", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 3, name: "ttl", kind: "message", T: Duration }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AcquireLeaseRequest { + return new AcquireLeaseRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AcquireLeaseRequest { + return new AcquireLeaseRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AcquireLeaseRequest { + return new AcquireLeaseRequest().fromJsonString(jsonString, options); + } + + static equals(a: AcquireLeaseRequest | PlainMessage | undefined, b: AcquireLeaseRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(AcquireLeaseRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.AcquireLeaseResponse + */ +export class AcquireLeaseResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.AcquireLeaseResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): AcquireLeaseResponse { + return new AcquireLeaseResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): AcquireLeaseResponse { + return new AcquireLeaseResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): AcquireLeaseResponse { + return new AcquireLeaseResponse().fromJsonString(jsonString, options); + } + + static equals(a: AcquireLeaseResponse | PlainMessage | undefined, b: AcquireLeaseResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(AcquireLeaseResponse, a, b); + } +} + /** * @generated from message xyz.block.ftl.v1.GetSchemaRequest */ diff --git a/go-runtime/compile/testdata/failing/go.mod b/go-runtime/compile/testdata/failing/go.mod index a6d63542a0..501711c86b 100644 --- a/go-runtime/compile/testdata/failing/go.mod +++ b/go-runtime/compile/testdata/failing/go.mod @@ -7,7 +7,7 @@ replace github.com/TBD54566975/ftl => ../../../.. require github.com/TBD54566975/ftl v0.0.0-00010101000000-000000000000 require ( - connectrpc.com/connect v1.16.0 // indirect + connectrpc.com/connect v1.16.1 // indirect connectrpc.com/grpcreflect v1.2.0 // indirect connectrpc.com/otelconnect v0.7.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect diff --git a/go-runtime/compile/testdata/failing/go.sum b/go-runtime/compile/testdata/failing/go.sum index 7862af6b67..442405d413 100644 --- a/go-runtime/compile/testdata/failing/go.sum +++ b/go-runtime/compile/testdata/failing/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.16.0 h1:rdtfQjZ0OyFkWPTegBNcH7cwquGAN1WzyJy80oFNibg= -connectrpc.com/connect v1.16.0/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= @@ -8,8 +8,8 @@ github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8 github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/TBD54566975/scaffolder v0.8.0 h1:DWl1K3dWcLsOPAYGQGPQXtffrml6XCB0tF05JdpMqZU= github.com/TBD54566975/scaffolder v0.8.0/go.mod h1:Ab/jbQ4q8EloYL0nbkdh2DVvkGc4nxr1OcIbdMpTxxg= -github.com/alecthomas/assert/v2 v2.8.1 h1:YCxnYR6jjpfnEK5AK5SysALKdUEBPGH4Y7As6tBnDw0= -github.com/alecthomas/assert/v2 v2.8.1/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/assert/v2 v2.9.0 h1:ZcLG8ccMEtlMLkLW4gwGpBWBb0N8MUCmsy1lYBVd1xQ= +github.com/alecthomas/assert/v2 v2.9.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/concurrency v0.0.2 h1:Q3kGPtLbleMbH9lHX5OBFvJygfyFw29bXZKBg+IEVuo= github.com/alecthomas/concurrency v0.0.2/go.mod h1:GmuQb/iHX7mbNtPlC/WDzEFxDMB0HYFer2Qda9QTs7w= github.com/alecthomas/kong v0.9.0 h1:G5diXxc85KvoV2f0ZRVuMsi45IrBgx9zDNGNj165aPA= @@ -77,8 +77,8 @@ github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPO github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= diff --git a/go-runtime/compile/testdata/one/go.mod b/go-runtime/compile/testdata/one/go.mod index 98d7a6bc49..cf4644f988 100644 --- a/go-runtime/compile/testdata/one/go.mod +++ b/go-runtime/compile/testdata/one/go.mod @@ -7,7 +7,7 @@ replace github.com/TBD54566975/ftl => ../../../.. require github.com/TBD54566975/ftl v0.150.3 require ( - connectrpc.com/connect v1.16.0 // indirect + connectrpc.com/connect v1.16.1 // indirect connectrpc.com/grpcreflect v1.2.0 // indirect connectrpc.com/otelconnect v0.7.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect diff --git a/go-runtime/compile/testdata/one/go.sum b/go-runtime/compile/testdata/one/go.sum index a852a3f784..442405d413 100644 --- a/go-runtime/compile/testdata/one/go.sum +++ b/go-runtime/compile/testdata/one/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.16.0 h1:rdtfQjZ0OyFkWPTegBNcH7cwquGAN1WzyJy80oFNibg= -connectrpc.com/connect v1.16.0/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= diff --git a/go-runtime/compile/testdata/two/go.mod b/go-runtime/compile/testdata/two/go.mod index 63890fa305..02fe08b3b1 100644 --- a/go-runtime/compile/testdata/two/go.mod +++ b/go-runtime/compile/testdata/two/go.mod @@ -7,7 +7,7 @@ replace github.com/TBD54566975/ftl => ../../../.. require github.com/TBD54566975/ftl v0.150.3 require ( - connectrpc.com/connect v1.16.0 // indirect + connectrpc.com/connect v1.16.1 // indirect connectrpc.com/grpcreflect v1.2.0 // indirect connectrpc.com/otelconnect v0.7.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect diff --git a/go-runtime/compile/testdata/two/go.sum b/go-runtime/compile/testdata/two/go.sum index a852a3f784..442405d413 100644 --- a/go-runtime/compile/testdata/two/go.sum +++ b/go-runtime/compile/testdata/two/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.16.0 h1:rdtfQjZ0OyFkWPTegBNcH7cwquGAN1WzyJy80oFNibg= -connectrpc.com/connect v1.16.0/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= diff --git a/go-runtime/ftl/leases.go b/go-runtime/ftl/leases.go new file mode 100644 index 0000000000..ceb25b4352 --- /dev/null +++ b/go-runtime/ftl/leases.go @@ -0,0 +1,113 @@ +package ftl + +import ( + "context" + "errors" + "fmt" + "io" + "strings" + "sync" + "time" + + "connectrpc.com/connect" + "google.golang.org/protobuf/types/known/durationpb" + + ftlv1 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1" + "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" + "github.com/TBD54566975/ftl/internal/log" + "github.com/TBD54566975/ftl/internal/rpc" +) + +// ErrLeaseHeld is returned when an attempt is made to acquire a lease that is +// already held. +var ErrLeaseHeld = fmt.Errorf("lease already held") + +type LeaseHandle struct { + stream *connect.BidiStreamForClient[ftlv1.AcquireLeaseRequest, ftlv1.AcquireLeaseResponse] + key []string + errMu *sync.Mutex + err error +} + +// Err returns an error if the lease heartbeat fails. +func (l LeaseHandle) Err() error { + l.errMu.Lock() + defer l.errMu.Unlock() + return l.err +} + +// Release attempts to release the lease. +// +// Will return an error if the heartbeat failed. In this situation there are no +// guarantees that the lease was held to completion. +func (l LeaseHandle) Release() error { + l.errMu.Lock() + defer l.errMu.Unlock() + if err := l.stream.CloseRequest(); err != nil { + return fmt.Errorf("close lease: %w", err) + } + if err := l.stream.CloseResponse(); err != nil { + return fmt.Errorf("close lease: %w", err) + } + return l.err +} + +// Lease acquires a new exclusive [lease] on a resource uniquely identified by [key]. +// +// The [ttl] defines the time after which the lease will be released if no +// heartbeat has been received. It must be >= 5s. +// +// Each [key] is scoped to the module that acquires the lease. +// +// Returns [ErrLeaseHeld] if the lease is already held. +// +// [lease]: https://hackmd.io/@ftl/Sym_GKEb0 +func Lease(ctx context.Context, ttl time.Duration, key ...string) (LeaseHandle, error) { + logger := log.FromContext(ctx).Scope("lease(" + strings.Join(key, "/")) + client := rpc.ClientFromContext[ftlv1connect.VerbServiceClient](ctx) + stream := client.AcquireLease(ctx) + + module := Module() + logger.Tracef("Acquiring lease") + req := &ftlv1.AcquireLeaseRequest{Key: key, Module: module, Ttl: durationpb.New(ttl)} + if err := stream.Send(req); err != nil { + if connect.CodeOf(err) == connect.CodeResourceExhausted { + return LeaseHandle{}, ErrLeaseHeld + } + logger.Warnf("Lease acquisition failed: %s", err) + return LeaseHandle{}, fmt.Errorf("lease acquisition failed: %w", err) + } + // Wait for response. + _, err := stream.Receive() + if err != nil { + if connect.CodeOf(err) == connect.CodeResourceExhausted { + return LeaseHandle{}, ErrLeaseHeld + } + return LeaseHandle{}, fmt.Errorf("lease acquisition failed: %w", err) + } + + lease := LeaseHandle{key: key, errMu: &sync.Mutex{}, stream: stream} + // Heartbeat the lease. + go func() { + for { + logger.Tracef("Heartbeating lease") + req := &ftlv1.AcquireLeaseRequest{Key: key, Module: module, Ttl: durationpb.New(ttl)} + err := stream.Send(req) + if err == nil { + time.Sleep(ttl / 2) + continue + } + if errors.Is(err, io.EOF) { + err = nil + } else { + logger.Warnf("Lease heartbeat terminated: %s", err) + } + // Notify the handle. + lease.errMu.Lock() + lease.err = err + lease.errMu.Unlock() + return + } + }() + return lease, nil +} diff --git a/go-runtime/ftl/reflection.go b/go-runtime/ftl/reflection.go index 8c472e33db..da43865490 100644 --- a/go-runtime/ftl/reflection.go +++ b/go-runtime/ftl/reflection.go @@ -4,6 +4,7 @@ import ( "fmt" "reflect" "runtime" + "runtime/debug" "strings" "github.com/TBD54566975/ftl/backend/schema/strcase" @@ -22,6 +23,7 @@ func Module() string { } } if module == "" { + debug.PrintStack() panic("must be called from an FTL module") } return module diff --git a/go-runtime/server/server.go b/go-runtime/server/server.go index e682b93bf4..00b76d0158 100644 --- a/go-runtime/server/server.go +++ b/go-runtime/server/server.go @@ -161,7 +161,11 @@ func (m *moduleServer) Call(ctx context.Context, req *connect.Request[ftlv1.Call } func (m *moduleServer) GetModuleContext(ctx context.Context, req *connect.Request[ftlv1.ModuleContextRequest]) (*connect.Response[ftlv1.ModuleContextResponse], error) { - return nil, fmt.Errorf("not implemented") + return nil, connect.NewError(connect.CodeUnimplemented, fmt.Errorf("GetModuleContext not implemented")) +} + +func (m *moduleServer) AcquireLease(context.Context, *connect.BidiStream[ftlv1.AcquireLeaseRequest, ftlv1.AcquireLeaseResponse]) error { + return connect.NewError(connect.CodeUnimplemented, fmt.Errorf("AcquireLease not implemented")) } func (m *moduleServer) Ping(ctx context.Context, req *connect.Request[ftlv1.PingRequest]) (*connect.Response[ftlv1.PingResponse], error) { diff --git a/go.mod b/go.mod index fb554fd1ce..a6705c8864 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/TBD54566975/ftl go 1.22.2 require ( - connectrpc.com/connect v1.14.0 + connectrpc.com/connect v1.16.1 connectrpc.com/grpcreflect v1.2.0 connectrpc.com/otelconnect v0.7.0 github.com/BurntSushi/toml v1.3.2 diff --git a/go.sum b/go.sum index bd348c0431..ebdbf6449a 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.14.0 h1:PDS+J7uoz5Oui2VEOMcfz6Qft7opQM9hPiKvtGC01pA= -connectrpc.com/connect v1.14.0/go.mod h1:uoAq5bmhhn43TwhaKdGKN/bZcGtzPW1v+ngDTn5u+8s= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= diff --git a/integration/harness_test.go b/integration/harness_test.go index c66567c77c..c4413eb575 100644 --- a/integration/harness_test.go +++ b/integration/harness_test.go @@ -106,7 +106,6 @@ type testContext struct { // AssertWithRetry asserts that the given action passes within the timeout. func (i testContext) AssertWithRetry(t testing.TB, assertion action) { - t.Helper() waitCtx, done := context.WithTimeout(i, integrationTestTimeout) defer done() for { diff --git a/integration/integration_test.go b/integration/integration_test.go index 1670d2741b..840420b30b 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -9,9 +9,15 @@ import ( "path/filepath" "strings" "testing" + "time" + "connectrpc.com/connect" "github.com/alecthomas/assert/v2" "github.com/alecthomas/repr" + "golang.org/x/sync/errgroup" + + ftlv1 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1" + schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) func TestCron(t *testing.T) { @@ -224,3 +230,38 @@ func TestModuleUnitTests(t *testing.T) { testModule("wrapped"), ) } + +func TestLease(t *testing.T) { + run(t, + copyModule("leases"), + deploy("leases"), + func(t testing.TB, ic testContext) error { + // Start a lease. + wg := errgroup.Group{} + wg.Go(func() error { + infof("Acquiring lease") + _, err := ic.verbs.Call(ic, connect.NewRequest(&ftlv1.CallRequest{ + Verb: &schemapb.Ref{Module: "leases", Name: "acquire"}, + Body: []byte("{}"), + })) + return err + }) + + time.Sleep(time.Second) + + infof("Trying to acquire lease again") + // Trying to obtain the lease again should fail. + resp, err := ic.verbs.Call(ic, connect.NewRequest(&ftlv1.CallRequest{ + Verb: &schemapb.Ref{Module: "leases", Name: "acquire"}, + Body: []byte("{}"), + })) + if err != nil { + return err + } + if resp.Msg.GetError() == nil || !strings.Contains(resp.Msg.GetError().Message, "could not acquire lease") { + return fmt.Errorf("expected error but got: %#v", resp.Msg.GetError()) + } + return wg.Wait() + }, + ) +} diff --git a/integration/testdata/go/cron/go.mod b/integration/testdata/go/cron/go.mod index ed1d0ea95c..60abb4f769 100644 --- a/integration/testdata/go/cron/go.mod +++ b/integration/testdata/go/cron/go.mod @@ -5,7 +5,7 @@ go 1.22.2 require github.com/TBD54566975/ftl v0.189.0 require ( - connectrpc.com/connect v1.14.0 // indirect + connectrpc.com/connect v1.16.1 // indirect connectrpc.com/grpcreflect v1.2.0 // indirect connectrpc.com/otelconnect v0.7.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect diff --git a/integration/testdata/go/cron/go.sum b/integration/testdata/go/cron/go.sum index 6778dfc565..442405d413 100644 --- a/integration/testdata/go/cron/go.sum +++ b/integration/testdata/go/cron/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.14.0 h1:PDS+J7uoz5Oui2VEOMcfz6Qft7opQM9hPiKvtGC01pA= -connectrpc.com/connect v1.14.0/go.mod h1:uoAq5bmhhn43TwhaKdGKN/bZcGtzPW1v+ngDTn5u+8s= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= @@ -8,8 +8,8 @@ github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8 github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/TBD54566975/scaffolder v0.8.0 h1:DWl1K3dWcLsOPAYGQGPQXtffrml6XCB0tF05JdpMqZU= github.com/TBD54566975/scaffolder v0.8.0/go.mod h1:Ab/jbQ4q8EloYL0nbkdh2DVvkGc4nxr1OcIbdMpTxxg= -github.com/alecthomas/assert/v2 v2.8.1 h1:YCxnYR6jjpfnEK5AK5SysALKdUEBPGH4Y7As6tBnDw0= -github.com/alecthomas/assert/v2 v2.8.1/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/assert/v2 v2.9.0 h1:ZcLG8ccMEtlMLkLW4gwGpBWBb0N8MUCmsy1lYBVd1xQ= +github.com/alecthomas/assert/v2 v2.9.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/concurrency v0.0.2 h1:Q3kGPtLbleMbH9lHX5OBFvJygfyFw29bXZKBg+IEVuo= github.com/alecthomas/concurrency v0.0.2/go.mod h1:GmuQb/iHX7mbNtPlC/WDzEFxDMB0HYFer2Qda9QTs7w= github.com/alecthomas/kong v0.9.0 h1:G5diXxc85KvoV2f0ZRVuMsi45IrBgx9zDNGNj165aPA= @@ -77,8 +77,8 @@ github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPO github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= diff --git a/integration/testdata/go/database/go.mod b/integration/testdata/go/database/go.mod index 13d7353fba..150b4a1437 100644 --- a/integration/testdata/go/database/go.mod +++ b/integration/testdata/go/database/go.mod @@ -5,7 +5,7 @@ go 1.22.2 require github.com/TBD54566975/ftl v0.189.0 require ( - connectrpc.com/connect v1.14.0 // indirect + connectrpc.com/connect v1.16.1 // indirect connectrpc.com/grpcreflect v1.2.0 // indirect connectrpc.com/otelconnect v0.7.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect diff --git a/integration/testdata/go/database/go.sum b/integration/testdata/go/database/go.sum index 6778dfc565..442405d413 100644 --- a/integration/testdata/go/database/go.sum +++ b/integration/testdata/go/database/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.14.0 h1:PDS+J7uoz5Oui2VEOMcfz6Qft7opQM9hPiKvtGC01pA= -connectrpc.com/connect v1.14.0/go.mod h1:uoAq5bmhhn43TwhaKdGKN/bZcGtzPW1v+ngDTn5u+8s= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= @@ -8,8 +8,8 @@ github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8 github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/TBD54566975/scaffolder v0.8.0 h1:DWl1K3dWcLsOPAYGQGPQXtffrml6XCB0tF05JdpMqZU= github.com/TBD54566975/scaffolder v0.8.0/go.mod h1:Ab/jbQ4q8EloYL0nbkdh2DVvkGc4nxr1OcIbdMpTxxg= -github.com/alecthomas/assert/v2 v2.8.1 h1:YCxnYR6jjpfnEK5AK5SysALKdUEBPGH4Y7As6tBnDw0= -github.com/alecthomas/assert/v2 v2.8.1/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/assert/v2 v2.9.0 h1:ZcLG8ccMEtlMLkLW4gwGpBWBb0N8MUCmsy1lYBVd1xQ= +github.com/alecthomas/assert/v2 v2.9.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/concurrency v0.0.2 h1:Q3kGPtLbleMbH9lHX5OBFvJygfyFw29bXZKBg+IEVuo= github.com/alecthomas/concurrency v0.0.2/go.mod h1:GmuQb/iHX7mbNtPlC/WDzEFxDMB0HYFer2Qda9QTs7w= github.com/alecthomas/kong v0.9.0 h1:G5diXxc85KvoV2f0ZRVuMsi45IrBgx9zDNGNj165aPA= @@ -77,8 +77,8 @@ github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPO github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= diff --git a/integration/testdata/go/echo/go.mod b/integration/testdata/go/echo/go.mod index abfea5eb25..6859d60244 100644 --- a/integration/testdata/go/echo/go.mod +++ b/integration/testdata/go/echo/go.mod @@ -7,7 +7,7 @@ replace github.com/TBD54566975/ftl => ../../../.. require github.com/TBD54566975/ftl v0.0.0-00010101000000-000000000000 require ( - connectrpc.com/connect v1.16.0 // indirect + connectrpc.com/connect v1.16.1 // indirect connectrpc.com/grpcreflect v1.2.0 // indirect connectrpc.com/otelconnect v0.7.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect diff --git a/integration/testdata/go/echo/go.sum b/integration/testdata/go/echo/go.sum index 7862af6b67..442405d413 100644 --- a/integration/testdata/go/echo/go.sum +++ b/integration/testdata/go/echo/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.16.0 h1:rdtfQjZ0OyFkWPTegBNcH7cwquGAN1WzyJy80oFNibg= -connectrpc.com/connect v1.16.0/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= @@ -8,8 +8,8 @@ github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8 github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/TBD54566975/scaffolder v0.8.0 h1:DWl1K3dWcLsOPAYGQGPQXtffrml6XCB0tF05JdpMqZU= github.com/TBD54566975/scaffolder v0.8.0/go.mod h1:Ab/jbQ4q8EloYL0nbkdh2DVvkGc4nxr1OcIbdMpTxxg= -github.com/alecthomas/assert/v2 v2.8.1 h1:YCxnYR6jjpfnEK5AK5SysALKdUEBPGH4Y7As6tBnDw0= -github.com/alecthomas/assert/v2 v2.8.1/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/assert/v2 v2.9.0 h1:ZcLG8ccMEtlMLkLW4gwGpBWBb0N8MUCmsy1lYBVd1xQ= +github.com/alecthomas/assert/v2 v2.9.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/concurrency v0.0.2 h1:Q3kGPtLbleMbH9lHX5OBFvJygfyFw29bXZKBg+IEVuo= github.com/alecthomas/concurrency v0.0.2/go.mod h1:GmuQb/iHX7mbNtPlC/WDzEFxDMB0HYFer2Qda9QTs7w= github.com/alecthomas/kong v0.9.0 h1:G5diXxc85KvoV2f0ZRVuMsi45IrBgx9zDNGNj165aPA= @@ -77,8 +77,8 @@ github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPO github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= diff --git a/integration/testdata/go/httpingress/go.mod b/integration/testdata/go/httpingress/go.mod index c40d6d3167..116c9e70dc 100644 --- a/integration/testdata/go/httpingress/go.mod +++ b/integration/testdata/go/httpingress/go.mod @@ -5,7 +5,7 @@ go 1.22.2 require github.com/TBD54566975/ftl v0.189.0 require ( - connectrpc.com/connect v1.14.0 // indirect + connectrpc.com/connect v1.16.1 // indirect connectrpc.com/grpcreflect v1.2.0 // indirect connectrpc.com/otelconnect v0.7.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect diff --git a/integration/testdata/go/httpingress/go.sum b/integration/testdata/go/httpingress/go.sum index f502c3299c..442405d413 100644 --- a/integration/testdata/go/httpingress/go.sum +++ b/integration/testdata/go/httpingress/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.14.0 h1:PDS+J7uoz5Oui2VEOMcfz6Qft7opQM9hPiKvtGC01pA= -connectrpc.com/connect v1.14.0/go.mod h1:uoAq5bmhhn43TwhaKdGKN/bZcGtzPW1v+ngDTn5u+8s= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= @@ -8,9 +8,8 @@ github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8 github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/TBD54566975/scaffolder v0.8.0 h1:DWl1K3dWcLsOPAYGQGPQXtffrml6XCB0tF05JdpMqZU= github.com/TBD54566975/scaffolder v0.8.0/go.mod h1:Ab/jbQ4q8EloYL0nbkdh2DVvkGc4nxr1OcIbdMpTxxg= -github.com/alecthomas/assert v1.0.0 h1:3XmGh/PSuLzDbK3W2gUbRXwgW5lqPkuqvRgeQ30FI5o= -github.com/alecthomas/assert/v2 v2.8.1 h1:YCxnYR6jjpfnEK5AK5SysALKdUEBPGH4Y7As6tBnDw0= -github.com/alecthomas/assert/v2 v2.8.1/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/assert/v2 v2.9.0 h1:ZcLG8ccMEtlMLkLW4gwGpBWBb0N8MUCmsy1lYBVd1xQ= +github.com/alecthomas/assert/v2 v2.9.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/concurrency v0.0.2 h1:Q3kGPtLbleMbH9lHX5OBFvJygfyFw29bXZKBg+IEVuo= github.com/alecthomas/concurrency v0.0.2/go.mod h1:GmuQb/iHX7mbNtPlC/WDzEFxDMB0HYFer2Qda9QTs7w= github.com/alecthomas/kong v0.9.0 h1:G5diXxc85KvoV2f0ZRVuMsi45IrBgx9zDNGNj165aPA= @@ -78,8 +77,8 @@ github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPO github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= diff --git a/integration/testdata/go/leases/ftl.toml b/integration/testdata/go/leases/ftl.toml new file mode 100644 index 0000000000..96df2a091f --- /dev/null +++ b/integration/testdata/go/leases/ftl.toml @@ -0,0 +1,2 @@ +module = "leases" +language = "go" diff --git a/integration/testdata/go/leases/go.mod b/integration/testdata/go/leases/go.mod new file mode 100644 index 0000000000..3f1ac39b21 --- /dev/null +++ b/integration/testdata/go/leases/go.mod @@ -0,0 +1,46 @@ +module ftl/leases + +go 1.22.2 + +replace github.com/TBD54566975/ftl => ../../../.. + +require github.com/TBD54566975/ftl v0.0.0-00010101000000-000000000000 + +require ( + connectrpc.com/connect v1.16.1 // indirect + connectrpc.com/grpcreflect v1.2.0 // indirect + connectrpc.com/otelconnect v0.7.0 // indirect + github.com/BurntSushi/toml v1.3.2 // indirect + github.com/TBD54566975/scaffolder v0.8.0 // indirect + github.com/alecthomas/concurrency v0.0.2 // indirect + github.com/alecthomas/kong v0.9.0 // indirect + github.com/alecthomas/participle/v2 v2.1.1 // indirect + github.com/alecthomas/types v0.14.0 // indirect + github.com/alessio/shellescape v1.4.2 // indirect + github.com/danieljoos/wincred v1.2.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect + github.com/jackc/pgx/v5 v5.5.5 // indirect + github.com/jackc/puddle/v2 v2.2.1 // indirect + github.com/jpillora/backoff v1.0.0 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/multiformats/go-base36 v0.2.0 // indirect + github.com/swaggest/jsonschema-go v0.3.70 // indirect + github.com/swaggest/refl v1.3.0 // indirect + github.com/zalando/go-keyring v0.2.4 // indirect + go.opentelemetry.io/otel v1.26.0 // indirect + go.opentelemetry.io/otel/metric v1.26.0 // indirect + go.opentelemetry.io/otel/trace v1.26.0 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/text v0.14.0 // indirect + google.golang.org/protobuf v1.33.0 // indirect +) diff --git a/integration/testdata/go/leases/go.sum b/integration/testdata/go/leases/go.sum new file mode 100644 index 0000000000..442405d413 --- /dev/null +++ b/integration/testdata/go/leases/go.sum @@ -0,0 +1,142 @@ +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= +connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= +connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= +connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= +connectrpc.com/otelconnect v0.7.0/go.mod h1:Bt2ivBymHZHqxvo4HkJ0EwHuUzQN6k2l0oH+mp/8nwc= +github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/TBD54566975/scaffolder v0.8.0 h1:DWl1K3dWcLsOPAYGQGPQXtffrml6XCB0tF05JdpMqZU= +github.com/TBD54566975/scaffolder v0.8.0/go.mod h1:Ab/jbQ4q8EloYL0nbkdh2DVvkGc4nxr1OcIbdMpTxxg= +github.com/alecthomas/assert/v2 v2.9.0 h1:ZcLG8ccMEtlMLkLW4gwGpBWBb0N8MUCmsy1lYBVd1xQ= +github.com/alecthomas/assert/v2 v2.9.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/concurrency v0.0.2 h1:Q3kGPtLbleMbH9lHX5OBFvJygfyFw29bXZKBg+IEVuo= +github.com/alecthomas/concurrency v0.0.2/go.mod h1:GmuQb/iHX7mbNtPlC/WDzEFxDMB0HYFer2Qda9QTs7w= +github.com/alecthomas/kong v0.9.0 h1:G5diXxc85KvoV2f0ZRVuMsi45IrBgx9zDNGNj165aPA= +github.com/alecthomas/kong v0.9.0/go.mod h1:Y47y5gKfHp1hDc7CH7OeXgLIpp+Q2m1Ni0L5s3bI8Os= +github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8= +github.com/alecthomas/participle/v2 v2.1.1/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= +github.com/alecthomas/types v0.14.0 h1:4pCdEWVctLZQP9dE48fCyXWYkcoQtkf1EAxx9xGfCRY= +github.com/alecthomas/types v0.14.0/go.mod h1:fIOGnLeeUJXe1AAVofQmMaEMWLxY9bK4QxTLGIo30PA= +github.com/alessio/shellescape v1.4.2 h1:MHPfaU+ddJ0/bYWpgIeUnQUqKrlJ1S7BfEYPM4uEoM0= +github.com/alessio/shellescape v1.4.2/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= +github.com/bool64/dev v0.2.34 h1:P9n315P8LdpxusnYQ0X7MP1CZXwBK5ae5RZrd+GdSZE= +github.com/bool64/dev v0.2.34/go.mod h1:iJbh1y/HkunEPhgebWRNcs8wfGq7sjvJ6W5iabL8ACg= +github.com/bool64/shared v0.1.5 h1:fp3eUhBsrSjNCQPcSdQqZxxh9bBwrYiZ+zOKFkM0/2E= +github.com/bool64/shared v0.1.5/go.mod h1:081yz68YC9jeFB3+Bbmno2RFWvGKv1lPKkMP6MHJlPs= +github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE= +github.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec= +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/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/iancoleman/orderedmap v0.3.0 h1:5cbR2grmZR/DiVt+VJopEhtVs9YGInGIxAoMJn+Ichc= +github.com/iancoleman/orderedmap v0.3.0/go.mod h1:XuLcCUkdL5owUCQeF2Ue9uuw1EptkJDkXXS7VoV7XGE= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw= +github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A= +github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= +github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= +github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= +github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= +github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +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/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= +github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/swaggest/assertjson v1.9.0 h1:dKu0BfJkIxv/xe//mkCrK5yZbs79jL7OVf9Ija7o2xQ= +github.com/swaggest/assertjson v1.9.0/go.mod h1:b+ZKX2VRiUjxfUIal0HDN85W0nHPAYUbYH5WkkSsFsU= +github.com/swaggest/jsonschema-go v0.3.70 h1:8Vx5nm5t/6DBFw2+WC0/Vp1ZVe9/4mpuA0tuAe0wwCI= +github.com/swaggest/jsonschema-go v0.3.70/go.mod h1:7N43/CwdaWgPUDfYV70K7Qm79tRqe/al7gLSt9YeGIE= +github.com/swaggest/refl v1.3.0 h1:PEUWIku+ZznYfsoyheF97ypSduvMApYyGkYF3nabS0I= +github.com/swaggest/refl v1.3.0/go.mod h1:3Ujvbmh1pfSbDYjC6JGG7nMgPvpG0ehQL4iNonnLNbg= +github.com/yudai/gojsondiff v1.0.0 h1:27cbfqXLVEJ1o8I6v3y9lg8Ydm53EKqHXAOMxEGlCOA= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 h1:BHyfKlQyqbsFN5p3IfnEUduWvb9is428/nNb5L3U01M= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/zalando/go-keyring v0.2.4 h1:wi2xxTqdiwMKbM6TWwi+uJCG/Tum2UV0jqaQhCa9/68= +github.com/zalando/go-keyring v0.2.4/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51Du6K+MRgZMk= +go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= +go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= +go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= +go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= +go.opentelemetry.io/otel/sdk v1.26.0 h1:Y7bumHf5tAiDlRYFmGqetNcLaVUZmh4iYfmGxtmz7F8= +go.opentelemetry.io/otel/sdk v1.26.0/go.mod h1:0p8MXpqLeJ0pzcszQQN4F0S5FVjBLgypeGSngLsmirs= +go.opentelemetry.io/otel/sdk/metric v1.26.0 h1:cWSks5tfriHPdWFnl+qpX3P681aAYqlZHcAyHw5aU9Y= +go.opentelemetry.io/otel/sdk/metric v1.26.0/go.mod h1:ClMFFknnThJCksebJwz7KIyEDHO+nTB6gK8obLy8RyE= +go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= +go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ= +golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6 h1:5D53IMaUuA5InSeMu9eJtlQXS2NxAhyWQvkKEgXZhHI= +modernc.org/gc/v3 v3.0.0-20240107210532-573471604cb6/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= +modernc.org/libc v1.49.3 h1:j2MRCRdwJI2ls/sGbeSk0t2bypOG/uvPZUsGQFDulqg= +modernc.org/libc v1.49.3/go.mod h1:yMZuGkn7pXbKfoT/M35gFJOAEdSKdxL0q64sF7KqCDo= +modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= +modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo= +modernc.org/memory v1.8.0 h1:IqGTL6eFMaDZZhEWwcREgeMXYwmW83LYW8cROZYkg+E= +modernc.org/memory v1.8.0/go.mod h1:XPZ936zp5OMKGWPqbD3JShgd/ZoQ7899TUuQqxY+peU= +modernc.org/sqlite v1.29.8 h1:nGKglNx9K5v0As+zF0/Gcl1kMkmaU1XynYyq92PbsC8= +modernc.org/sqlite v1.29.8/go.mod h1:lQPm27iqa4UNZpmr4Aor0MH0HkCLbt1huYDfWylLZFk= +modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= +modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/integration/testdata/go/leases/leases.go b/integration/testdata/go/leases/leases.go new file mode 100644 index 0000000000..d6b4903f9b --- /dev/null +++ b/integration/testdata/go/leases/leases.go @@ -0,0 +1,23 @@ +package leases + +import ( + "context" + "fmt" + "time" + + "github.com/TBD54566975/ftl/go-runtime/ftl" +) + +//ftl:verb +func Acquire(ctx context.Context) error { + logger := ftl.LoggerFromContext(ctx) + logger.Infof("Acquiring lease") + lease, err := ftl.Lease(ctx, 10*time.Second, "lease") + if err != nil { + logger.Warnf("Failed to acquire lease: %s", err) + return fmt.Errorf("failed to acquire lease: %w", err) + } + logger.Infof("Acquired lease!") + time.Sleep(time.Second * 5) + return lease.Release() +} diff --git a/integration/testdata/go/runtimereflection/go.mod b/integration/testdata/go/runtimereflection/go.mod index c6b3db5171..c1c3de717d 100644 --- a/integration/testdata/go/runtimereflection/go.mod +++ b/integration/testdata/go/runtimereflection/go.mod @@ -8,7 +8,7 @@ require ( ) require ( - connectrpc.com/connect v1.14.0 // indirect + connectrpc.com/connect v1.16.1 // indirect connectrpc.com/grpcreflect v1.2.0 // indirect connectrpc.com/otelconnect v0.7.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect diff --git a/integration/testdata/go/runtimereflection/go.sum b/integration/testdata/go/runtimereflection/go.sum index da511de1e8..442405d413 100644 --- a/integration/testdata/go/runtimereflection/go.sum +++ b/integration/testdata/go/runtimereflection/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.14.0 h1:PDS+J7uoz5Oui2VEOMcfz6Qft7opQM9hPiKvtGC01pA= -connectrpc.com/connect v1.14.0/go.mod h1:uoAq5bmhhn43TwhaKdGKN/bZcGtzPW1v+ngDTn5u+8s= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= diff --git a/integration/testdata/go/wrapped/go.mod b/integration/testdata/go/wrapped/go.mod index bcb01a97eb..376b7e5422 100644 --- a/integration/testdata/go/wrapped/go.mod +++ b/integration/testdata/go/wrapped/go.mod @@ -8,7 +8,7 @@ require ( ) require ( - connectrpc.com/connect v1.14.0 // indirect + connectrpc.com/connect v1.16.1 // indirect connectrpc.com/grpcreflect v1.2.0 // indirect connectrpc.com/otelconnect v0.7.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect diff --git a/integration/testdata/go/wrapped/go.sum b/integration/testdata/go/wrapped/go.sum index da511de1e8..442405d413 100644 --- a/integration/testdata/go/wrapped/go.sum +++ b/integration/testdata/go/wrapped/go.sum @@ -1,5 +1,5 @@ -connectrpc.com/connect v1.14.0 h1:PDS+J7uoz5Oui2VEOMcfz6Qft7opQM9hPiKvtGC01pA= -connectrpc.com/connect v1.14.0/go.mod h1:uoAq5bmhhn43TwhaKdGKN/bZcGtzPW1v+ngDTn5u+8s= +connectrpc.com/connect v1.16.1 h1:rOdrK/RTI/7TVnn3JsVxt3n028MlTRwmK5Q4heSpjis= +connectrpc.com/connect v1.16.1/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= connectrpc.com/grpcreflect v1.2.0 h1:Q6og1S7HinmtbEuBvARLNwYmTbhEGRpHDhqrPNlmK+U= connectrpc.com/grpcreflect v1.2.0/go.mod h1:nwSOKmE8nU5u/CidgHtPYk1PFI3U9ignz7iDMxOYkSY= connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= diff --git a/internal/rpc/rpc.go b/internal/rpc/rpc.go index 5560478d77..2b30ea25cb 100644 --- a/internal/rpc/rpc.go +++ b/internal/rpc/rpc.go @@ -165,11 +165,13 @@ func RetryStreamingClientStream[Req, Resp any]( retry.Reset() logLevel = log.Warn } + + // We've hit an error. _, _ = stream.CloseAndReceive() errored = true delay := retry.Duration() - if err != nil && !errors.Is(err, context.Canceled) { + if !errors.Is(err, context.Canceled) { logger.Logf(logLevel, "Stream handler failed, retrying in %s: %s", delay, err) } select {