diff --git a/backend/admin/admin_test.go b/backend/admin/admin_test.go index 418ecbd0d3..453391f849 100644 --- a/backend/admin/admin_test.go +++ b/backend/admin/admin_test.go @@ -195,6 +195,14 @@ var testSchema = schema.MustValidate(&schema.Schema{ type mockSchemaRetriever struct { } +func (d *mockSchemaRetriever) GetCanonicalSchema(ctx context.Context) (*schema.Schema, error) { + return d.GetActiveSchema(ctx) +} + +func (d *mockSchemaRetriever) GetLatestSchema(ctx context.Context) (*schema.Schema, error) { + return d.GetActiveSchema(ctx) +} + func (d *mockSchemaRetriever) GetActiveSchema(ctx context.Context) (*schema.Schema, error) { return testSchema, nil } diff --git a/backend/admin/local_client.go b/backend/admin/local_client.go index 10df3574b2..87c5b65e4d 100644 --- a/backend/admin/local_client.go +++ b/backend/admin/local_client.go @@ -32,7 +32,12 @@ func NewLocalClient(cm *manager.Manager[cf.Configuration], sm *manager.Manager[c return &localClient{NewAdminService(cm, sm, &diskSchemaRetriever{})} } -func (s *diskSchemaRetriever) GetActiveSchema(ctx context.Context) (*schema.Schema, error) { +func (s *diskSchemaRetriever) GetCanonicalSchema(ctx context.Context) (*schema.Schema, error) { + // disk schema can not tell canonical schema from latest schema + return s.GetLatestSchema(ctx) +} + +func (s *diskSchemaRetriever) GetLatestSchema(ctx context.Context) (*schema.Schema, error) { path, ok := projectconfig.DefaultConfigPath().Get() if !ok { return nil, fmt.Errorf("no project config path available") diff --git a/backend/admin/local_client_test.go b/backend/admin/local_client_test.go index 4183105ea8..05a415b0e1 100644 --- a/backend/admin/local_client_test.go +++ b/backend/admin/local_client_test.go @@ -21,7 +21,7 @@ import ( func getDiskSchema(t testing.TB, ctx context.Context) (*schema.Schema, error) { t.Helper() dsr := &diskSchemaRetriever{} - return dsr.GetActiveSchema(ctx) + return dsr.GetLatestSchema(ctx) } func TestDiskSchemaRetrieverWithBuildArtefact(t *testing.T) { @@ -68,7 +68,7 @@ func TestAdminNoValidationWithNoSchema(t *testing.T) { assert.NoError(t, err) dsr := &diskSchemaRetriever{deployRoot: optional.Some(string(t.TempDir()))} - _, err = dsr.GetActiveSchema(ctx) + _, err = dsr.GetLatestSchema(ctx) assert.Error(t, err) admin := NewAdminService(cm, sm, dsr) diff --git a/backend/admin/service.go b/backend/admin/service.go index 6ebc3403e9..817d520f43 100644 --- a/backend/admin/service.go +++ b/backend/admin/service.go @@ -38,8 +38,9 @@ type AdminService struct { var _ ftlv1connect.AdminServiceHandler = (*AdminService)(nil) type SchemaRetriever interface { - // BindAllocator is required if the schema is retrieved from disk using language plugins - GetActiveSchema(ctx context.Context) (*schema.Schema, error) + // TODO: docs + GetCanonicalSchema(ctx context.Context) (*schema.Schema, error) + GetLatestSchema(ctx context.Context) (*schema.Schema, error) } func NewSchemaRetreiver(source schemaeventsource.EventSource) SchemaRetriever { @@ -52,8 +53,13 @@ type streamSchemaRetriever struct { source schemaeventsource.EventSource } -func (c streamSchemaRetriever) GetActiveSchema(ctx context.Context) (*schema.Schema, error) { - view := c.source.View() +func (c streamSchemaRetriever) GetCanonicalSchema(ctx context.Context) (*schema.Schema, error) { + view := c.source.CanonicalView() + return &schema.Schema{Modules: view.Modules}, nil +} + +func (c streamSchemaRetriever) GetLatestSchema(ctx context.Context) (*schema.Schema, error) { + view := c.source.LatestView() return &schema.Schema{Modules: view.Modules}, nil } @@ -286,7 +292,7 @@ func (s *AdminService) validateAgainstSchema(ctx context.Context, isSecret bool, } // If we can't retrieve an active schema, skip validation. - sch, err := s.schr.GetActiveSchema(ctx) + sch, err := s.schr.GetLatestSchema(ctx) if err != nil { logger.Debugf("skipping validation; could not get the active schema: %v", err) return nil @@ -330,7 +336,8 @@ func (s *AdminService) validateAgainstSchema(ctx context.Context, isSecret bool, func (s *AdminService) ResetSubscription(ctx context.Context, req *connect.Request[ftlv1.ResetSubscriptionRequest]) (*connect.Response[ftlv1.ResetSubscriptionResponse], error) { // Find nodes in schema - sch, err := s.schr.GetActiveSchema(ctx) + // TODO: we really want all deployments for a module... not just latest... Use canonical and check ActiveChangeset? + sch, err := s.schr.GetCanonicalSchema(ctx) if err != nil { return nil, fmt.Errorf("could not get the active schema: %w", err) } diff --git a/backend/console/console.go b/backend/console/console.go index 6bd7379e12..c9a5dcf788 100644 --- a/backend/console/console.go +++ b/backend/console/console.go @@ -116,12 +116,12 @@ func verbSchemaString(sch *schema.Schema, verb *schema.Verb) (string, error) { } func (s *service) GetModules(ctx context.Context, req *connect.Request[consolepb.GetModulesRequest]) (*connect.Response[consolepb.GetModulesResponse], error) { - sch := s.schemaEventSource.View() + sch := s.schemaEventSource.LatestView() allowed := map[string]bool{} var modules []*consolepb.Module for _, mod := range sch.Modules { - if mod.GetRuntime().GetDeployment().GetDeploymentKey().IsZero() { + if mod.GetRuntime().GetDeployment().GetDeploymentKey().IsZero() || mod.GetRuntime().GetDeployment().Endpoint == "" { continue } allowed[mod.Name] = true @@ -411,7 +411,7 @@ func (s *service) filterDeployments(unfilteredDeployments *schema.Schema) []*sch } func (s *service) sendStreamModulesResp(ctx context.Context, stream *connect.ServerStream[consolepb.StreamModulesResponse]) error { - unfilteredDeployments := s.schemaEventSource.View() + unfilteredDeployments := s.schemaEventSource.LatestView() deployments := s.filterDeployments(unfilteredDeployments) sch := &schema.Schema{ diff --git a/backend/controller/controller.go b/backend/controller/controller.go index 5c7f919e3e..33a7de5103 100644 --- a/backend/controller/controller.go +++ b/backend/controller/controller.go @@ -66,7 +66,7 @@ type Config struct { RunnerTimeout time.Duration `help:"Runner heartbeat timeout." default:"10s"` ControllerTimeout time.Duration `help:"Controller heartbeat timeout." default:"10s"` DeploymentReservationTimeout time.Duration `help:"Deployment reservation timeout." default:"120s"` - ModuleUpdateFrequency time.Duration `help:"Frequency to send module updates." default:"30s"` + ModuleUpdateFrequency time.Duration `help:"Frequency to send module updates." default:"1s"` //TODO: FIX this, this should be based on streaming events, 1s is a temp workaround for the lack of dependencies within changesets ArtefactChunkSize int `help:"Size of each chunk streamed to the client." default:"1048576"` CommonConfig } @@ -159,6 +159,9 @@ func New( config Config, devel bool, ) (*Service, error) { + logger := log.FromContext(ctx) + logger = logger.Scope("controller") + ctx = log.ContextWithLogger(ctx, logger) controllerKey := config.Key if config.Key.IsZero() { controllerKey = key.NewControllerKey(config.Bind.Hostname(), config.Bind.Port()) @@ -233,6 +236,7 @@ func New( return svc, nil } +// ProcessList lists "processes" running on the cluster. func (s *Service) ProcessList(ctx context.Context, req *connect.Request[ftlv1.ProcessListRequest]) (*connect.Response[ftlv1.ProcessListResponse], error) { currentState, err := s.runnerState.View(ctx) if err != nil { @@ -323,11 +327,15 @@ func (s *Service) Status(ctx context.Context, req *connect.Request[ftlv1.StatusR } var deployments []*ftlv1.StatusResponse_Deployment for key, deployment := range activeDeployments { + var minReplicas int32 + if deployment.Runtime != nil && deployment.Runtime.Scaling != nil { + minReplicas = deployment.Runtime.Scaling.MinReplicas + } deployments = append(deployments, &ftlv1.StatusResponse_Deployment{ Key: key, Language: deployment.Runtime.Base.Language, Name: deployment.Name, - MinReplicas: deployment.Runtime.Scaling.MinReplicas, + MinReplicas: minReplicas, Replicas: replicas[key], Schema: deployment.ToProto(), }) @@ -345,26 +353,9 @@ func (s *Service) Status(ctx context.Context, req *connect.Request[ftlv1.StatusR return connect.NewResponse(resp), nil } -func (s *Service) UpdateDeploy(ctx context.Context, req *connect.Request[ftlv1.UpdateDeployRequest]) (response *connect.Response[ftlv1.UpdateDeployResponse], err error) { - deploymentKey, err := key.ParseDeploymentKey(req.Msg.DeploymentKey) - if err != nil { - return nil, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("invalid deployment key: %w", err)) - } - - logger := s.getDeploymentLogger(ctx, deploymentKey) - logger.Debugf("Update deployment for: %s", deploymentKey) - if req.Msg.MinReplicas != nil { - err = s.setDeploymentReplicas(ctx, deploymentKey, int(*req.Msg.MinReplicas)) - if err != nil { - logger.Errorf(err, "Could not set deployment replicas: %s", deploymentKey) - return nil, fmt.Errorf("could not set deployment replicas: %w", err) - } - } - return connect.NewResponse(&ftlv1.UpdateDeployResponse{}), nil -} - func (s *Service) setDeploymentReplicas(ctx context.Context, key key.Deployment, minReplicas int) (err error) { deployments, err := s.schemaClient.GetDeployments(ctx, connect.NewRequest(&ftlv1.GetDeploymentsRequest{})) + if err != nil { return fmt.Errorf("failed to get schema deployments: %w", err) } @@ -781,17 +772,17 @@ func (s *Service) GetDeploymentContext(ctx context.Context, req *connect.Request configs := configsResp.Msg.Values routeTable := map[string]string{} for _, module := range callableModuleNames { + if module == deployment.Name { + continue + } deployment, ok := routeView.GetDeployment(module).Get() if !ok { continue } - if route, ok := routeView.Get(deployment).Get(); ok { + if route, ok := routeView.Get(deployment).Get(); ok && route.String() != "" { routeTable[deployment.String()] = route.String() } } - if !deployment.GetRuntime().GetDeployment().GetDeploymentKey().IsZero() { - routeTable[key.String()] = deployment.Runtime.Deployment.Endpoint - } secretsResp, err := s.adminClient.MapSecretsForModule(ctx, &connect.Request[ftlv1.MapSecretsForModuleRequest]{Msg: &ftlv1.MapSecretsForModuleRequest{Module: module}}) if err != nil { @@ -1024,6 +1015,7 @@ func (s *Service) GetArtefactDiffs(ctx context.Context, req *connect.Request[ftl func (s *Service) UploadArtefact(ctx context.Context, req *connect.Request[ftlv1.UploadArtefactRequest]) (*connect.Response[ftlv1.UploadArtefactResponse], error) { logger := log.FromContext(ctx) + logger.Debugf("Uploading artefact") digest, err := s.storage.Upload(ctx, artefacts.Artefact{Content: req.Msg.Content}) if err != nil { return nil, err diff --git a/backend/controller/observability/calls.go b/backend/controller/observability/calls.go index 68f648eae1..693ec1ea0c 100644 --- a/backend/controller/observability/calls.go +++ b/backend/controller/observability/calls.go @@ -63,6 +63,7 @@ func (m *CallMetrics) BeginSpan(ctx context.Context, verb *schemapb.Ref) (contex } return observability.AddSpanToLogger(m.callTracer.Start(ctx, callMeterName, trace.WithAttributes(attrs...))) } + func (m *CallMetrics) Request(ctx context.Context, verb *schemapb.Ref, startTime time.Time, maybeFailureMode optional.Option[string]) { attrs := []attribute.KeyValue{ attribute.String(observability.ModuleNameAttribute, verb.Module), diff --git a/backend/controller/sql/testdata/go/database/types.ftl.go b/backend/controller/sql/testdata/go/database/types.ftl.go index 022b663d7d..4168fd8d72 100644 --- a/backend/controller/sql/testdata/go/database/types.ftl.go +++ b/backend/controller/sql/testdata/go/database/types.ftl.go @@ -12,6 +12,7 @@ type InsertClient func(context.Context, InsertRequest) (InsertResponse, error) func init() { reflection.Register( reflection.Database[MyDbConfig]("testdb", server.InitPostgres), + reflection.ProvideResourcesForVerb( Insert, server.DatabaseHandle[MyDbConfig]("postgres"), diff --git a/backend/cron/service.go b/backend/cron/service.go index 6f0586cc53..5b39bab7f2 100644 --- a/backend/cron/service.go +++ b/backend/cron/service.go @@ -154,8 +154,9 @@ func updateCronJobs(ctx context.Context, cronJobs map[string][]cronJob, change s logger := log.FromContext(ctx).Scope("cron") switch change := change.(type) { case schemaeventsource.EventRemove: - logger.Debugf("Removing cron jobs for module %s", change.Module.Name) - delete(cronJobs, change.Module.Name) + // TODO: revisit this + // logger.Debugf("Removing cron jobs for module %s", change.Module.Name) + // delete(cronJobs, change.Module.Name) case schemaeventsource.EventUpsert: logger.Debugf("Updated cron jobs for module %s", change.Module.Name) @@ -165,6 +166,7 @@ func updateCronJobs(ctx context.Context, cronJobs map[string][]cronJob, change s } logger.Debugf("Adding %d cron jobs for module %s", len(moduleJobs), change.Module.Name) cronJobs[change.Module.Name] = moduleJobs + default: } return nil } diff --git a/backend/cron/service_test.go b/backend/cron/service_test.go index 33798bdd1b..44ea2aeb0a 100644 --- a/backend/cron/service_test.go +++ b/backend/cron/service_test.go @@ -12,7 +12,6 @@ import ( "golang.org/x/sync/errgroup" "github.com/alecthomas/assert/v2" - "github.com/alecthomas/types/optional" ftlv1 "github.com/block/ftl/backend/protos/xyz/block/ftl/v1" schemapb "github.com/block/ftl/common/protos/xyz/block/ftl/schema/v1" @@ -64,8 +63,7 @@ func TestCron(t *testing.T) { }, } eventSource.Publish(schemaeventsource.EventUpsert{ - Deployment: optional.Some(key.NewDeploymentKey("echo")), - Module: module, + Module: module, }) ctx := log.ContextWithLogger(context.Background(), log.Configure(os.Stderr, log.Config{Level: log.Trace})) diff --git a/backend/ingress/handler_test.go b/backend/ingress/handler_test.go index 97e93c593e..9e57db2ed3 100644 --- a/backend/ingress/handler_test.go +++ b/backend/ingress/handler_test.go @@ -112,13 +112,13 @@ func TestIngress(t *testing.T) { Runtime: &schema.ModuleRuntime{ Deployment: &schema.ModuleRuntimeDeployment{ DeploymentKey: key.NewDeploymentKey("test"), + Endpoint: "http://localhost:8080", }, }, } // Publish the test module to the event source eventSource.Publish(schemaeventsource.EventUpsert{ - Module: testModule, - Deployment: optional.Some(key.NewDeploymentKey("test")), + Module: testModule, }) svc := &service{ diff --git a/backend/ingress/service.go b/backend/ingress/service.go index 77e429e9c5..de019cc9b6 100644 --- a/backend/ingress/service.go +++ b/backend/ingress/service.go @@ -12,6 +12,7 @@ import ( "github.com/alecthomas/types/optional" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" + "github.com/block/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" schemapb "github.com/block/ftl/common/protos/xyz/block/ftl/schema/v1" "github.com/block/ftl/common/slices" "github.com/block/ftl/internal/cors" @@ -45,14 +46,14 @@ type service struct { } // Start the HTTP ingress service. Blocks until the context is cancelled. -func Start(ctx context.Context, config Config, schemaEventSource schemaeventsource.EventSource, client routing.CallClient, timelineClient *timelineclient.Client) error { +func Start(ctx context.Context, config Config, schemaClient ftlv1connect.SchemaServiceClient, client routing.CallClient, timelineClient *timelineclient.Client) error { logger := log.FromContext(ctx).Scope("http-ingress") ctx = log.ContextWithLogger(ctx, logger) svc := &service{ - view: syncView(ctx, schemaEventSource), + view: syncView(ctx, schemaeventsource.New(ctx, schemaClient)), client: client, timelineClient: timelineClient, - routeTable: routing.New(ctx, schemaEventSource), + routeTable: routing.New(ctx, schemaeventsource.New(ctx, schemaClient)), } ingressHandler := otelhttp.NewHandler(http.Handler(svc), "ftl.ingress") diff --git a/backend/ingress/view.go b/backend/ingress/view.go index 3160a02629..9aaa1f8505 100644 --- a/backend/ingress/view.go +++ b/backend/ingress/view.go @@ -21,7 +21,7 @@ func syncView(ctx context.Context, schemaEventSource schemaeventsource.EventSour logger.Debugf("Starting routing sync from schema") go func() { for event := range channels.IterContext(ctx, schemaEventSource.Events()) { - state := extractIngressRoutingEntries(event.Schema()) + state := extractIngressRoutingEntries(event.GetCanonical()) out.Store(state) } }() diff --git a/backend/protos/xyz/block/ftl/provisioner/v1beta1/provisionerpbconnect/service.connect.go b/backend/protos/xyz/block/ftl/provisioner/v1beta1/provisionerpbconnect/service.connect.go deleted file mode 100644 index 122c213847..0000000000 --- a/backend/protos/xyz/block/ftl/provisioner/v1beta1/provisionerpbconnect/service.connect.go +++ /dev/null @@ -1,272 +0,0 @@ -// Code generated by protoc-gen-connect-go. DO NOT EDIT. -// -// Source: xyz/block/ftl/provisioner/v1beta1/service.proto - -package provisionerpbconnect - -import ( - connect "connectrpc.com/connect" - context "context" - errors "errors" - _ "github.com/block/ftl/backend/protos/xyz/block/ftl/provisioner/v1beta1" - v1 "github.com/block/ftl/backend/protos/xyz/block/ftl/v1" - http "net/http" - strings "strings" -) - -// This is a compile-time assertion to ensure that this generated file and the connect package are -// compatible. If you get a compiler error that this constant is not defined, this code was -// generated with a version of connect newer than the one compiled into your binary. You can fix the -// problem by either regenerating this code with an older version of connect or updating the connect -// version compiled into your binary. -const _ = connect.IsAtLeastVersion1_7_0 - -const ( - // ProvisionerServiceName is the fully-qualified name of the ProvisionerService service. - ProvisionerServiceName = "xyz.block.ftl.provisioner.v1beta1.ProvisionerService" -) - -// These constants are the fully-qualified names of the RPCs defined in this package. They're -// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. -// -// Note that these are different from the fully-qualified method names used by -// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to -// reflection-formatted method names, remove the leading slash and convert the remaining slash to a -// period. -const ( - // ProvisionerServicePingProcedure is the fully-qualified name of the ProvisionerService's Ping RPC. - ProvisionerServicePingProcedure = "/xyz.block.ftl.provisioner.v1beta1.ProvisionerService/Ping" - // ProvisionerServiceStatusProcedure is the fully-qualified name of the ProvisionerService's Status - // RPC. - ProvisionerServiceStatusProcedure = "/xyz.block.ftl.provisioner.v1beta1.ProvisionerService/Status" - // ProvisionerServiceGetArtefactDiffsProcedure is the fully-qualified name of the - // ProvisionerService's GetArtefactDiffs RPC. - ProvisionerServiceGetArtefactDiffsProcedure = "/xyz.block.ftl.provisioner.v1beta1.ProvisionerService/GetArtefactDiffs" - // ProvisionerServiceUploadArtefactProcedure is the fully-qualified name of the ProvisionerService's - // UploadArtefact RPC. - ProvisionerServiceUploadArtefactProcedure = "/xyz.block.ftl.provisioner.v1beta1.ProvisionerService/UploadArtefact" - // ProvisionerServiceCreateDeploymentProcedure is the fully-qualified name of the - // ProvisionerService's CreateDeployment RPC. - ProvisionerServiceCreateDeploymentProcedure = "/xyz.block.ftl.provisioner.v1beta1.ProvisionerService/CreateDeployment" - // ProvisionerServiceUpdateDeployProcedure is the fully-qualified name of the ProvisionerService's - // UpdateDeploy RPC. - ProvisionerServiceUpdateDeployProcedure = "/xyz.block.ftl.provisioner.v1beta1.ProvisionerService/UpdateDeploy" - // ProvisionerServiceReplaceDeployProcedure is the fully-qualified name of the ProvisionerService's - // ReplaceDeploy RPC. - ProvisionerServiceReplaceDeployProcedure = "/xyz.block.ftl.provisioner.v1beta1.ProvisionerService/ReplaceDeploy" -) - -// ProvisionerServiceClient is a client for the xyz.block.ftl.provisioner.v1beta1.ProvisionerService -// service. -type ProvisionerServiceClient interface { - Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) - Status(context.Context, *connect.Request[v1.StatusRequest]) (*connect.Response[v1.StatusResponse], error) - GetArtefactDiffs(context.Context, *connect.Request[v1.GetArtefactDiffsRequest]) (*connect.Response[v1.GetArtefactDiffsResponse], error) - UploadArtefact(context.Context, *connect.Request[v1.UploadArtefactRequest]) (*connect.Response[v1.UploadArtefactResponse], error) - CreateDeployment(context.Context, *connect.Request[v1.CreateDeploymentRequest]) (*connect.Response[v1.CreateDeploymentResponse], error) - UpdateDeploy(context.Context, *connect.Request[v1.UpdateDeployRequest]) (*connect.Response[v1.UpdateDeployResponse], error) - ReplaceDeploy(context.Context, *connect.Request[v1.ReplaceDeployRequest]) (*connect.Response[v1.ReplaceDeployResponse], error) -} - -// NewProvisionerServiceClient constructs a client for the -// xyz.block.ftl.provisioner.v1beta1.ProvisionerService service. By default, it uses the Connect -// protocol with the binary Protobuf Codec, asks for gzipped responses, and sends uncompressed -// requests. To use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or -// connect.WithGRPCWeb() options. -// -// The URL supplied here should be the base URL for the Connect or gRPC server (for example, -// http://api.acme.com or https://acme.com/grpc). -func NewProvisionerServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) ProvisionerServiceClient { - baseURL = strings.TrimRight(baseURL, "/") - return &provisionerServiceClient{ - ping: connect.NewClient[v1.PingRequest, v1.PingResponse]( - httpClient, - baseURL+ProvisionerServicePingProcedure, - connect.WithIdempotency(connect.IdempotencyNoSideEffects), - connect.WithClientOptions(opts...), - ), - status: connect.NewClient[v1.StatusRequest, v1.StatusResponse]( - httpClient, - baseURL+ProvisionerServiceStatusProcedure, - opts..., - ), - getArtefactDiffs: connect.NewClient[v1.GetArtefactDiffsRequest, v1.GetArtefactDiffsResponse]( - httpClient, - baseURL+ProvisionerServiceGetArtefactDiffsProcedure, - opts..., - ), - uploadArtefact: connect.NewClient[v1.UploadArtefactRequest, v1.UploadArtefactResponse]( - httpClient, - baseURL+ProvisionerServiceUploadArtefactProcedure, - opts..., - ), - createDeployment: connect.NewClient[v1.CreateDeploymentRequest, v1.CreateDeploymentResponse]( - httpClient, - baseURL+ProvisionerServiceCreateDeploymentProcedure, - opts..., - ), - updateDeploy: connect.NewClient[v1.UpdateDeployRequest, v1.UpdateDeployResponse]( - httpClient, - baseURL+ProvisionerServiceUpdateDeployProcedure, - opts..., - ), - replaceDeploy: connect.NewClient[v1.ReplaceDeployRequest, v1.ReplaceDeployResponse]( - httpClient, - baseURL+ProvisionerServiceReplaceDeployProcedure, - opts..., - ), - } -} - -// provisionerServiceClient implements ProvisionerServiceClient. -type provisionerServiceClient struct { - ping *connect.Client[v1.PingRequest, v1.PingResponse] - status *connect.Client[v1.StatusRequest, v1.StatusResponse] - getArtefactDiffs *connect.Client[v1.GetArtefactDiffsRequest, v1.GetArtefactDiffsResponse] - uploadArtefact *connect.Client[v1.UploadArtefactRequest, v1.UploadArtefactResponse] - createDeployment *connect.Client[v1.CreateDeploymentRequest, v1.CreateDeploymentResponse] - updateDeploy *connect.Client[v1.UpdateDeployRequest, v1.UpdateDeployResponse] - replaceDeploy *connect.Client[v1.ReplaceDeployRequest, v1.ReplaceDeployResponse] -} - -// Ping calls xyz.block.ftl.provisioner.v1beta1.ProvisionerService.Ping. -func (c *provisionerServiceClient) Ping(ctx context.Context, req *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) { - return c.ping.CallUnary(ctx, req) -} - -// Status calls xyz.block.ftl.provisioner.v1beta1.ProvisionerService.Status. -func (c *provisionerServiceClient) Status(ctx context.Context, req *connect.Request[v1.StatusRequest]) (*connect.Response[v1.StatusResponse], error) { - return c.status.CallUnary(ctx, req) -} - -// GetArtefactDiffs calls xyz.block.ftl.provisioner.v1beta1.ProvisionerService.GetArtefactDiffs. -func (c *provisionerServiceClient) GetArtefactDiffs(ctx context.Context, req *connect.Request[v1.GetArtefactDiffsRequest]) (*connect.Response[v1.GetArtefactDiffsResponse], error) { - return c.getArtefactDiffs.CallUnary(ctx, req) -} - -// UploadArtefact calls xyz.block.ftl.provisioner.v1beta1.ProvisionerService.UploadArtefact. -func (c *provisionerServiceClient) UploadArtefact(ctx context.Context, req *connect.Request[v1.UploadArtefactRequest]) (*connect.Response[v1.UploadArtefactResponse], error) { - return c.uploadArtefact.CallUnary(ctx, req) -} - -// CreateDeployment calls xyz.block.ftl.provisioner.v1beta1.ProvisionerService.CreateDeployment. -func (c *provisionerServiceClient) CreateDeployment(ctx context.Context, req *connect.Request[v1.CreateDeploymentRequest]) (*connect.Response[v1.CreateDeploymentResponse], error) { - return c.createDeployment.CallUnary(ctx, req) -} - -// UpdateDeploy calls xyz.block.ftl.provisioner.v1beta1.ProvisionerService.UpdateDeploy. -func (c *provisionerServiceClient) UpdateDeploy(ctx context.Context, req *connect.Request[v1.UpdateDeployRequest]) (*connect.Response[v1.UpdateDeployResponse], error) { - return c.updateDeploy.CallUnary(ctx, req) -} - -// ReplaceDeploy calls xyz.block.ftl.provisioner.v1beta1.ProvisionerService.ReplaceDeploy. -func (c *provisionerServiceClient) ReplaceDeploy(ctx context.Context, req *connect.Request[v1.ReplaceDeployRequest]) (*connect.Response[v1.ReplaceDeployResponse], error) { - return c.replaceDeploy.CallUnary(ctx, req) -} - -// ProvisionerServiceHandler is an implementation of the -// xyz.block.ftl.provisioner.v1beta1.ProvisionerService service. -type ProvisionerServiceHandler interface { - Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) - Status(context.Context, *connect.Request[v1.StatusRequest]) (*connect.Response[v1.StatusResponse], error) - GetArtefactDiffs(context.Context, *connect.Request[v1.GetArtefactDiffsRequest]) (*connect.Response[v1.GetArtefactDiffsResponse], error) - UploadArtefact(context.Context, *connect.Request[v1.UploadArtefactRequest]) (*connect.Response[v1.UploadArtefactResponse], error) - CreateDeployment(context.Context, *connect.Request[v1.CreateDeploymentRequest]) (*connect.Response[v1.CreateDeploymentResponse], error) - UpdateDeploy(context.Context, *connect.Request[v1.UpdateDeployRequest]) (*connect.Response[v1.UpdateDeployResponse], error) - ReplaceDeploy(context.Context, *connect.Request[v1.ReplaceDeployRequest]) (*connect.Response[v1.ReplaceDeployResponse], error) -} - -// NewProvisionerServiceHandler builds an HTTP handler from the service implementation. It returns -// the path on which to mount the handler and the handler itself. -// -// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf -// and JSON codecs. They also support gzip compression. -func NewProvisionerServiceHandler(svc ProvisionerServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { - provisionerServicePingHandler := connect.NewUnaryHandler( - ProvisionerServicePingProcedure, - svc.Ping, - connect.WithIdempotency(connect.IdempotencyNoSideEffects), - connect.WithHandlerOptions(opts...), - ) - provisionerServiceStatusHandler := connect.NewUnaryHandler( - ProvisionerServiceStatusProcedure, - svc.Status, - opts..., - ) - provisionerServiceGetArtefactDiffsHandler := connect.NewUnaryHandler( - ProvisionerServiceGetArtefactDiffsProcedure, - svc.GetArtefactDiffs, - opts..., - ) - provisionerServiceUploadArtefactHandler := connect.NewUnaryHandler( - ProvisionerServiceUploadArtefactProcedure, - svc.UploadArtefact, - opts..., - ) - provisionerServiceCreateDeploymentHandler := connect.NewUnaryHandler( - ProvisionerServiceCreateDeploymentProcedure, - svc.CreateDeployment, - opts..., - ) - provisionerServiceUpdateDeployHandler := connect.NewUnaryHandler( - ProvisionerServiceUpdateDeployProcedure, - svc.UpdateDeploy, - opts..., - ) - provisionerServiceReplaceDeployHandler := connect.NewUnaryHandler( - ProvisionerServiceReplaceDeployProcedure, - svc.ReplaceDeploy, - opts..., - ) - return "/xyz.block.ftl.provisioner.v1beta1.ProvisionerService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - switch r.URL.Path { - case ProvisionerServicePingProcedure: - provisionerServicePingHandler.ServeHTTP(w, r) - case ProvisionerServiceStatusProcedure: - provisionerServiceStatusHandler.ServeHTTP(w, r) - case ProvisionerServiceGetArtefactDiffsProcedure: - provisionerServiceGetArtefactDiffsHandler.ServeHTTP(w, r) - case ProvisionerServiceUploadArtefactProcedure: - provisionerServiceUploadArtefactHandler.ServeHTTP(w, r) - case ProvisionerServiceCreateDeploymentProcedure: - provisionerServiceCreateDeploymentHandler.ServeHTTP(w, r) - case ProvisionerServiceUpdateDeployProcedure: - provisionerServiceUpdateDeployHandler.ServeHTTP(w, r) - case ProvisionerServiceReplaceDeployProcedure: - provisionerServiceReplaceDeployHandler.ServeHTTP(w, r) - default: - http.NotFound(w, r) - } - }) -} - -// UnimplementedProvisionerServiceHandler returns CodeUnimplemented from all methods. -type UnimplementedProvisionerServiceHandler struct{} - -func (UnimplementedProvisionerServiceHandler) Ping(context.Context, *connect.Request[v1.PingRequest]) (*connect.Response[v1.PingResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.provisioner.v1beta1.ProvisionerService.Ping is not implemented")) -} - -func (UnimplementedProvisionerServiceHandler) Status(context.Context, *connect.Request[v1.StatusRequest]) (*connect.Response[v1.StatusResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.provisioner.v1beta1.ProvisionerService.Status is not implemented")) -} - -func (UnimplementedProvisionerServiceHandler) GetArtefactDiffs(context.Context, *connect.Request[v1.GetArtefactDiffsRequest]) (*connect.Response[v1.GetArtefactDiffsResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.provisioner.v1beta1.ProvisionerService.GetArtefactDiffs is not implemented")) -} - -func (UnimplementedProvisionerServiceHandler) UploadArtefact(context.Context, *connect.Request[v1.UploadArtefactRequest]) (*connect.Response[v1.UploadArtefactResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.provisioner.v1beta1.ProvisionerService.UploadArtefact is not implemented")) -} - -func (UnimplementedProvisionerServiceHandler) CreateDeployment(context.Context, *connect.Request[v1.CreateDeploymentRequest]) (*connect.Response[v1.CreateDeploymentResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.provisioner.v1beta1.ProvisionerService.CreateDeployment is not implemented")) -} - -func (UnimplementedProvisionerServiceHandler) UpdateDeploy(context.Context, *connect.Request[v1.UpdateDeployRequest]) (*connect.Response[v1.UpdateDeployResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.provisioner.v1beta1.ProvisionerService.UpdateDeploy is not implemented")) -} - -func (UnimplementedProvisionerServiceHandler) ReplaceDeploy(context.Context, *connect.Request[v1.ReplaceDeployRequest]) (*connect.Response[v1.ReplaceDeployResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.provisioner.v1beta1.ProvisionerService.ReplaceDeploy is not implemented")) -} diff --git a/backend/protos/xyz/block/ftl/provisioner/v1beta1/service.pb.go b/backend/protos/xyz/block/ftl/provisioner/v1beta1/service.pb.go deleted file mode 100644 index 0c9caeabaa..0000000000 --- a/backend/protos/xyz/block/ftl/provisioner/v1beta1/service.pb.go +++ /dev/null @@ -1,146 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.36.3 -// protoc (unknown) -// source: xyz/block/ftl/provisioner/v1beta1/service.proto - -package provisionerpb - -import ( - v1 "github.com/block/ftl/backend/protos/xyz/block/ftl/v1" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -var File_xyz_block_ftl_provisioner_v1beta1_service_proto protoreflect.FileDescriptor - -var file_xyz_block_ftl_provisioner_v1beta1_service_proto_rawDesc = []byte{ - 0x0a, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x21, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x1a, 0x21, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, - 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, - 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x74, 0x6c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x32, 0xa9, 0x05, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, - 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, 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, 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, 0x42, - 0x57, 0x50, 0x01, 0x5a, 0x53, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 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, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x65, 0x72, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var file_xyz_block_ftl_provisioner_v1beta1_service_proto_goTypes = []any{ - (*v1.PingRequest)(nil), // 0: xyz.block.ftl.v1.PingRequest - (*v1.StatusRequest)(nil), // 1: xyz.block.ftl.v1.StatusRequest - (*v1.GetArtefactDiffsRequest)(nil), // 2: xyz.block.ftl.v1.GetArtefactDiffsRequest - (*v1.UploadArtefactRequest)(nil), // 3: xyz.block.ftl.v1.UploadArtefactRequest - (*v1.CreateDeploymentRequest)(nil), // 4: xyz.block.ftl.v1.CreateDeploymentRequest - (*v1.UpdateDeployRequest)(nil), // 5: xyz.block.ftl.v1.UpdateDeployRequest - (*v1.ReplaceDeployRequest)(nil), // 6: xyz.block.ftl.v1.ReplaceDeployRequest - (*v1.PingResponse)(nil), // 7: xyz.block.ftl.v1.PingResponse - (*v1.StatusResponse)(nil), // 8: xyz.block.ftl.v1.StatusResponse - (*v1.GetArtefactDiffsResponse)(nil), // 9: xyz.block.ftl.v1.GetArtefactDiffsResponse - (*v1.UploadArtefactResponse)(nil), // 10: xyz.block.ftl.v1.UploadArtefactResponse - (*v1.CreateDeploymentResponse)(nil), // 11: xyz.block.ftl.v1.CreateDeploymentResponse - (*v1.UpdateDeployResponse)(nil), // 12: xyz.block.ftl.v1.UpdateDeployResponse - (*v1.ReplaceDeployResponse)(nil), // 13: xyz.block.ftl.v1.ReplaceDeployResponse -} -var file_xyz_block_ftl_provisioner_v1beta1_service_proto_depIdxs = []int32{ - 0, // 0: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 1, // 1: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.Status:input_type -> xyz.block.ftl.v1.StatusRequest - 2, // 2: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.GetArtefactDiffs:input_type -> xyz.block.ftl.v1.GetArtefactDiffsRequest - 3, // 3: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.UploadArtefact:input_type -> xyz.block.ftl.v1.UploadArtefactRequest - 4, // 4: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.CreateDeployment:input_type -> xyz.block.ftl.v1.CreateDeploymentRequest - 5, // 5: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.UpdateDeploy:input_type -> xyz.block.ftl.v1.UpdateDeployRequest - 6, // 6: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.ReplaceDeploy:input_type -> xyz.block.ftl.v1.ReplaceDeployRequest - 7, // 7: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 8, // 8: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.Status:output_type -> xyz.block.ftl.v1.StatusResponse - 9, // 9: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.GetArtefactDiffs:output_type -> xyz.block.ftl.v1.GetArtefactDiffsResponse - 10, // 10: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.UploadArtefact:output_type -> xyz.block.ftl.v1.UploadArtefactResponse - 11, // 11: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.CreateDeployment:output_type -> xyz.block.ftl.v1.CreateDeploymentResponse - 12, // 12: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.UpdateDeploy:output_type -> xyz.block.ftl.v1.UpdateDeployResponse - 13, // 13: xyz.block.ftl.provisioner.v1beta1.ProvisionerService.ReplaceDeploy:output_type -> xyz.block.ftl.v1.ReplaceDeployResponse - 7, // [7:14] is the sub-list for method output_type - 0, // [0:7] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_xyz_block_ftl_provisioner_v1beta1_service_proto_init() } -func file_xyz_block_ftl_provisioner_v1beta1_service_proto_init() { - if File_xyz_block_ftl_provisioner_v1beta1_service_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_xyz_block_ftl_provisioner_v1beta1_service_proto_rawDesc, - NumEnums: 0, - NumMessages: 0, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_xyz_block_ftl_provisioner_v1beta1_service_proto_goTypes, - DependencyIndexes: file_xyz_block_ftl_provisioner_v1beta1_service_proto_depIdxs, - }.Build() - File_xyz_block_ftl_provisioner_v1beta1_service_proto = out.File - file_xyz_block_ftl_provisioner_v1beta1_service_proto_rawDesc = nil - file_xyz_block_ftl_provisioner_v1beta1_service_proto_goTypes = nil - file_xyz_block_ftl_provisioner_v1beta1_service_proto_depIdxs = nil -} diff --git a/backend/protos/xyz/block/ftl/provisioner/v1beta1/service.proto b/backend/protos/xyz/block/ftl/provisioner/v1beta1/service.proto deleted file mode 100644 index 9f9fae73a8..0000000000 --- a/backend/protos/xyz/block/ftl/provisioner/v1beta1/service.proto +++ /dev/null @@ -1,24 +0,0 @@ -syntax = "proto3"; - -package xyz.block.ftl.provisioner.v1beta1; - -import "xyz/block/ftl/v1/controller.proto"; -import "xyz/block/ftl/v1/ftl.proto"; - -option go_package = "github.com/block/ftl/backend/protos/xyz/block/ftl/provisioner/v1beta1;provisionerpb"; -option java_multiple_files = true; - -service ProvisionerService { - rpc Ping(xyz.block.ftl.v1.PingRequest) returns (xyz.block.ftl.v1.PingResponse) { - option idempotency_level = NO_SIDE_EFFECTS; - } - - // Deployment Client API - - rpc Status(xyz.block.ftl.v1.StatusRequest) returns (xyz.block.ftl.v1.StatusResponse); - rpc GetArtefactDiffs(xyz.block.ftl.v1.GetArtefactDiffsRequest) returns (xyz.block.ftl.v1.GetArtefactDiffsResponse); - rpc UploadArtefact(xyz.block.ftl.v1.UploadArtefactRequest) returns (xyz.block.ftl.v1.UploadArtefactResponse); - rpc CreateDeployment(xyz.block.ftl.v1.CreateDeploymentRequest) returns (xyz.block.ftl.v1.CreateDeploymentResponse); - rpc UpdateDeploy(xyz.block.ftl.v1.UpdateDeployRequest) returns (xyz.block.ftl.v1.UpdateDeployResponse); - rpc ReplaceDeploy(xyz.block.ftl.v1.ReplaceDeployRequest) returns (xyz.block.ftl.v1.ReplaceDeployResponse); -} diff --git a/backend/protos/xyz/block/ftl/v1/controller.pb.go b/backend/protos/xyz/block/ftl/v1/controller.pb.go index 462acddc50..af40d6bd2c 100644 --- a/backend/protos/xyz/block/ftl/v1/controller.pb.go +++ b/backend/protos/xyz/block/ftl/v1/controller.pb.go @@ -660,94 +660,6 @@ func (*RegisterRunnerResponse) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{12} } -type UpdateDeployRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - DeploymentKey string `protobuf:"bytes,1,opt,name=deployment_key,json=deploymentKey,proto3" json:"deployment_key,omitempty"` - MinReplicas *int32 `protobuf:"varint,2,opt,name=min_replicas,json=minReplicas,proto3,oneof" json:"min_replicas,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *UpdateDeployRequest) Reset() { - *x = UpdateDeployRequest{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateDeployRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateDeployRequest) ProtoMessage() {} - -func (x *UpdateDeployRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[13] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateDeployRequest.ProtoReflect.Descriptor instead. -func (*UpdateDeployRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{13} -} - -func (x *UpdateDeployRequest) GetDeploymentKey() string { - if x != nil { - return x.DeploymentKey - } - return "" -} - -func (x *UpdateDeployRequest) GetMinReplicas() int32 { - if x != nil && x.MinReplicas != nil { - return *x.MinReplicas - } - return 0 -} - -type UpdateDeployResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *UpdateDeployResponse) Reset() { - *x = UpdateDeployResponse{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *UpdateDeployResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateDeployResponse) ProtoMessage() {} - -func (x *UpdateDeployResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[14] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateDeployResponse.ProtoReflect.Descriptor instead. -func (*UpdateDeployResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{14} -} - type ReplaceDeployRequest struct { state protoimpl.MessageState `protogen:"open.v1"` DeploymentKey string `protobuf:"bytes,1,opt,name=deployment_key,json=deploymentKey,proto3" json:"deployment_key,omitempty"` @@ -758,7 +670,7 @@ type ReplaceDeployRequest struct { func (x *ReplaceDeployRequest) Reset() { *x = ReplaceDeployRequest{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[15] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -770,7 +682,7 @@ func (x *ReplaceDeployRequest) String() string { func (*ReplaceDeployRequest) ProtoMessage() {} func (x *ReplaceDeployRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[15] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -783,7 +695,7 @@ func (x *ReplaceDeployRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplaceDeployRequest.ProtoReflect.Descriptor instead. func (*ReplaceDeployRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{15} + return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{13} } func (x *ReplaceDeployRequest) GetDeploymentKey() string { @@ -808,7 +720,7 @@ type ReplaceDeployResponse struct { func (x *ReplaceDeployResponse) Reset() { *x = ReplaceDeployResponse{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[16] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -820,7 +732,7 @@ func (x *ReplaceDeployResponse) String() string { func (*ReplaceDeployResponse) ProtoMessage() {} func (x *ReplaceDeployResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[16] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -833,7 +745,7 @@ func (x *ReplaceDeployResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplaceDeployResponse.ProtoReflect.Descriptor instead. func (*ReplaceDeployResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{16} + return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{14} } type StatusRequest struct { @@ -844,7 +756,7 @@ type StatusRequest struct { func (x *StatusRequest) Reset() { *x = StatusRequest{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[17] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -856,7 +768,7 @@ func (x *StatusRequest) String() string { func (*StatusRequest) ProtoMessage() {} func (x *StatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[17] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -869,7 +781,7 @@ func (x *StatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusRequest.ProtoReflect.Descriptor instead. func (*StatusRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{17} + return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{15} } type StatusResponse struct { @@ -884,7 +796,7 @@ type StatusResponse struct { func (x *StatusResponse) Reset() { *x = StatusResponse{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[18] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -896,7 +808,7 @@ func (x *StatusResponse) String() string { func (*StatusResponse) ProtoMessage() {} func (x *StatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[18] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -909,7 +821,7 @@ func (x *StatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse.ProtoReflect.Descriptor instead. func (*StatusResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{18} + return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{16} } func (x *StatusResponse) GetControllers() []*StatusResponse_Controller { @@ -948,7 +860,7 @@ type ProcessListRequest struct { func (x *ProcessListRequest) Reset() { *x = ProcessListRequest{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[19] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -960,7 +872,7 @@ func (x *ProcessListRequest) String() string { func (*ProcessListRequest) ProtoMessage() {} func (x *ProcessListRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[19] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -973,7 +885,7 @@ func (x *ProcessListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessListRequest.ProtoReflect.Descriptor instead. func (*ProcessListRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{19} + return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{17} } type ProcessListResponse struct { @@ -985,7 +897,7 @@ type ProcessListResponse struct { func (x *ProcessListResponse) Reset() { *x = ProcessListResponse{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[20] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -997,7 +909,7 @@ func (x *ProcessListResponse) String() string { func (*ProcessListResponse) ProtoMessage() {} func (x *ProcessListResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[20] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1010,7 +922,7 @@ func (x *ProcessListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessListResponse.ProtoReflect.Descriptor instead. func (*ProcessListResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{20} + return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{18} } func (x *ProcessListResponse) GetProcesses() []*ProcessListResponse_Process { @@ -1031,7 +943,7 @@ type StatusResponse_Controller struct { func (x *StatusResponse_Controller) Reset() { *x = StatusResponse_Controller{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[21] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1043,7 +955,7 @@ func (x *StatusResponse_Controller) String() string { func (*StatusResponse_Controller) ProtoMessage() {} func (x *StatusResponse_Controller) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[21] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1056,7 +968,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_controller_proto_rawDescGZIP(), []int{18, 0} + return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{16, 0} } func (x *StatusResponse_Controller) GetKey() string { @@ -1092,7 +1004,7 @@ type StatusResponse_Runner struct { func (x *StatusResponse_Runner) Reset() { *x = StatusResponse_Runner{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[22] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1104,7 +1016,7 @@ func (x *StatusResponse_Runner) String() string { func (*StatusResponse_Runner) ProtoMessage() {} func (x *StatusResponse_Runner) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[22] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1117,7 +1029,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_controller_proto_rawDescGZIP(), []int{18, 1} + return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{16, 1} } func (x *StatusResponse_Runner) GetKey() string { @@ -1163,7 +1075,7 @@ type StatusResponse_Deployment struct { func (x *StatusResponse_Deployment) Reset() { *x = StatusResponse_Deployment{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[23] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1175,7 +1087,7 @@ func (x *StatusResponse_Deployment) String() string { func (*StatusResponse_Deployment) ProtoMessage() {} func (x *StatusResponse_Deployment) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[23] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1188,7 +1100,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_controller_proto_rawDescGZIP(), []int{18, 2} + return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{16, 2} } func (x *StatusResponse_Deployment) GetKey() string { @@ -1251,7 +1163,7 @@ type StatusResponse_Route struct { func (x *StatusResponse_Route) Reset() { *x = StatusResponse_Route{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[24] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1263,7 +1175,7 @@ func (x *StatusResponse_Route) String() string { func (*StatusResponse_Route) ProtoMessage() {} func (x *StatusResponse_Route) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[24] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1276,7 +1188,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_controller_proto_rawDescGZIP(), []int{18, 3} + return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{16, 3} } func (x *StatusResponse_Route) GetModule() string { @@ -1311,7 +1223,7 @@ type ProcessListResponse_ProcessRunner struct { func (x *ProcessListResponse_ProcessRunner) Reset() { *x = ProcessListResponse_ProcessRunner{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[25] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1323,7 +1235,7 @@ func (x *ProcessListResponse_ProcessRunner) String() string { func (*ProcessListResponse_ProcessRunner) ProtoMessage() {} func (x *ProcessListResponse_ProcessRunner) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[25] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1336,7 +1248,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_controller_proto_rawDescGZIP(), []int{20, 0} + return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{18, 0} } func (x *ProcessListResponse_ProcessRunner) GetKey() string { @@ -1372,7 +1284,7 @@ type ProcessListResponse_Process struct { func (x *ProcessListResponse_Process) Reset() { *x = ProcessListResponse_Process{} - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[26] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1384,7 +1296,7 @@ func (x *ProcessListResponse_Process) String() string { func (*ProcessListResponse_Process) ProtoMessage() {} func (x *ProcessListResponse_Process) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[26] + mi := &file_xyz_block_ftl_v1_controller_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1397,7 +1309,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_controller_proto_rawDescGZIP(), []int{20, 1} + return file_xyz_block_ftl_v1_controller_proto_rawDescGZIP(), []int{18, 1} } func (x *ProcessListResponse_Process) GetDeployment() string { @@ -1518,182 +1430,155 @@ var file_xyz_block_ftl_v1_controller_proto_rawDesc = []byte{ 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, 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, 0x75, 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, 0x26, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6d, - 0x69, 0x6e, 0x5f, 0x72, 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, 0x0f, - 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0xfc, 0x06, 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, 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, + 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, + 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0xfc, 0x06, 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, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, - 0x74, 0x65, 0x73, 0x1a, 0x54, 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, - 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x9b, 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, 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, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x18, 0x04, 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, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x1a, 0x5b, 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, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x18, 0x02, 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, 0x03, - 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, + 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, 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, 0x54, 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, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x9b, 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, 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, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x04, 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, + 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, 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, 0x32, 0xcc, 0x08, 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, 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, + 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, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x1a, 0x5b, 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, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x02, 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, + 0x03, 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, 0x32, 0xa0, 0x06, 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, 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, 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, + 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, 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, 0x42, 0x3e, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 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, + 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, 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, 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, 0x42, 0x3e, 0x50, 0x01, 0x5a, 0x3a, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 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 ( @@ -1708,7 +1593,7 @@ func file_xyz_block_ftl_v1_controller_proto_rawDescGZIP() []byte { return file_xyz_block_ftl_v1_controller_proto_rawDescData } -var file_xyz_block_ftl_v1_controller_proto_msgTypes = make([]protoimpl.MessageInfo, 27) +var file_xyz_block_ftl_v1_controller_proto_msgTypes = make([]protoimpl.MessageInfo, 25) var file_xyz_block_ftl_v1_controller_proto_goTypes = []any{ (*GetArtefactDiffsRequest)(nil), // 0: xyz.block.ftl.v1.GetArtefactDiffsRequest (*GetArtefactDiffsResponse)(nil), // 1: xyz.block.ftl.v1.GetArtefactDiffsResponse @@ -1723,67 +1608,59 @@ var file_xyz_block_ftl_v1_controller_proto_goTypes = []any{ (*GetDeploymentResponse)(nil), // 10: xyz.block.ftl.v1.GetDeploymentResponse (*RegisterRunnerRequest)(nil), // 11: xyz.block.ftl.v1.RegisterRunnerRequest (*RegisterRunnerResponse)(nil), // 12: xyz.block.ftl.v1.RegisterRunnerResponse - (*UpdateDeployRequest)(nil), // 13: xyz.block.ftl.v1.UpdateDeployRequest - (*UpdateDeployResponse)(nil), // 14: xyz.block.ftl.v1.UpdateDeployResponse - (*ReplaceDeployRequest)(nil), // 15: xyz.block.ftl.v1.ReplaceDeployRequest - (*ReplaceDeployResponse)(nil), // 16: xyz.block.ftl.v1.ReplaceDeployResponse - (*StatusRequest)(nil), // 17: xyz.block.ftl.v1.StatusRequest - (*StatusResponse)(nil), // 18: xyz.block.ftl.v1.StatusResponse - (*ProcessListRequest)(nil), // 19: xyz.block.ftl.v1.ProcessListRequest - (*ProcessListResponse)(nil), // 20: xyz.block.ftl.v1.ProcessListResponse - (*StatusResponse_Controller)(nil), // 21: xyz.block.ftl.v1.StatusResponse.Controller - (*StatusResponse_Runner)(nil), // 22: xyz.block.ftl.v1.StatusResponse.Runner - (*StatusResponse_Deployment)(nil), // 23: xyz.block.ftl.v1.StatusResponse.Deployment - (*StatusResponse_Route)(nil), // 24: xyz.block.ftl.v1.StatusResponse.Route - (*ProcessListResponse_ProcessRunner)(nil), // 25: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner - (*ProcessListResponse_Process)(nil), // 26: xyz.block.ftl.v1.ProcessListResponse.Process - (*v1.Module)(nil), // 27: xyz.block.ftl.schema.v1.Module - (*structpb.Struct)(nil), // 28: google.protobuf.Struct - (*PingRequest)(nil), // 29: xyz.block.ftl.v1.PingRequest - (*PingResponse)(nil), // 30: xyz.block.ftl.v1.PingResponse + (*ReplaceDeployRequest)(nil), // 13: xyz.block.ftl.v1.ReplaceDeployRequest + (*ReplaceDeployResponse)(nil), // 14: xyz.block.ftl.v1.ReplaceDeployResponse + (*StatusRequest)(nil), // 15: xyz.block.ftl.v1.StatusRequest + (*StatusResponse)(nil), // 16: xyz.block.ftl.v1.StatusResponse + (*ProcessListRequest)(nil), // 17: xyz.block.ftl.v1.ProcessListRequest + (*ProcessListResponse)(nil), // 18: xyz.block.ftl.v1.ProcessListResponse + (*StatusResponse_Controller)(nil), // 19: xyz.block.ftl.v1.StatusResponse.Controller + (*StatusResponse_Runner)(nil), // 20: xyz.block.ftl.v1.StatusResponse.Runner + (*StatusResponse_Deployment)(nil), // 21: xyz.block.ftl.v1.StatusResponse.Deployment + (*StatusResponse_Route)(nil), // 22: xyz.block.ftl.v1.StatusResponse.Route + (*ProcessListResponse_ProcessRunner)(nil), // 23: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner + (*ProcessListResponse_Process)(nil), // 24: xyz.block.ftl.v1.ProcessListResponse.Process + (*v1.Module)(nil), // 25: xyz.block.ftl.schema.v1.Module + (*structpb.Struct)(nil), // 26: google.protobuf.Struct + (*PingRequest)(nil), // 27: xyz.block.ftl.v1.PingRequest + (*PingResponse)(nil), // 28: xyz.block.ftl.v1.PingResponse } var file_xyz_block_ftl_v1_controller_proto_depIdxs = []int32{ 4, // 0: xyz.block.ftl.v1.GetArtefactDiffsResponse.client_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 27, // 1: xyz.block.ftl.v1.CreateDeploymentRequest.schema:type_name -> xyz.block.ftl.schema.v1.Module + 25, // 1: xyz.block.ftl.v1.CreateDeploymentRequest.schema:type_name -> xyz.block.ftl.schema.v1.Module 4, // 2: xyz.block.ftl.v1.GetDeploymentArtefactsRequest.have_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact 4, // 3: xyz.block.ftl.v1.GetDeploymentArtefactsResponse.artefact:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 27, // 4: xyz.block.ftl.v1.GetDeploymentResponse.schema:type_name -> xyz.block.ftl.schema.v1.Module - 28, // 5: xyz.block.ftl.v1.RegisterRunnerRequest.labels:type_name -> google.protobuf.Struct - 21, // 6: xyz.block.ftl.v1.StatusResponse.controllers:type_name -> xyz.block.ftl.v1.StatusResponse.Controller - 22, // 7: xyz.block.ftl.v1.StatusResponse.runners:type_name -> xyz.block.ftl.v1.StatusResponse.Runner - 23, // 8: xyz.block.ftl.v1.StatusResponse.deployments:type_name -> xyz.block.ftl.v1.StatusResponse.Deployment - 24, // 9: xyz.block.ftl.v1.StatusResponse.routes:type_name -> xyz.block.ftl.v1.StatusResponse.Route - 26, // 10: xyz.block.ftl.v1.ProcessListResponse.processes:type_name -> xyz.block.ftl.v1.ProcessListResponse.Process - 28, // 11: xyz.block.ftl.v1.StatusResponse.Runner.labels:type_name -> google.protobuf.Struct - 28, // 12: xyz.block.ftl.v1.StatusResponse.Deployment.labels:type_name -> google.protobuf.Struct - 27, // 13: xyz.block.ftl.v1.StatusResponse.Deployment.schema:type_name -> xyz.block.ftl.schema.v1.Module - 28, // 14: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner.labels:type_name -> google.protobuf.Struct - 28, // 15: xyz.block.ftl.v1.ProcessListResponse.Process.labels:type_name -> google.protobuf.Struct - 25, // 16: xyz.block.ftl.v1.ProcessListResponse.Process.runner:type_name -> xyz.block.ftl.v1.ProcessListResponse.ProcessRunner - 29, // 17: xyz.block.ftl.v1.ControllerService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 19, // 18: xyz.block.ftl.v1.ControllerService.ProcessList:input_type -> xyz.block.ftl.v1.ProcessListRequest - 17, // 19: xyz.block.ftl.v1.ControllerService.Status:input_type -> xyz.block.ftl.v1.StatusRequest + 25, // 4: xyz.block.ftl.v1.GetDeploymentResponse.schema:type_name -> xyz.block.ftl.schema.v1.Module + 26, // 5: xyz.block.ftl.v1.RegisterRunnerRequest.labels:type_name -> google.protobuf.Struct + 19, // 6: xyz.block.ftl.v1.StatusResponse.controllers:type_name -> xyz.block.ftl.v1.StatusResponse.Controller + 20, // 7: xyz.block.ftl.v1.StatusResponse.runners:type_name -> xyz.block.ftl.v1.StatusResponse.Runner + 21, // 8: xyz.block.ftl.v1.StatusResponse.deployments:type_name -> xyz.block.ftl.v1.StatusResponse.Deployment + 22, // 9: xyz.block.ftl.v1.StatusResponse.routes:type_name -> xyz.block.ftl.v1.StatusResponse.Route + 24, // 10: xyz.block.ftl.v1.ProcessListResponse.processes:type_name -> xyz.block.ftl.v1.ProcessListResponse.Process + 26, // 11: xyz.block.ftl.v1.StatusResponse.Runner.labels:type_name -> google.protobuf.Struct + 26, // 12: xyz.block.ftl.v1.StatusResponse.Deployment.labels:type_name -> google.protobuf.Struct + 25, // 13: xyz.block.ftl.v1.StatusResponse.Deployment.schema:type_name -> xyz.block.ftl.schema.v1.Module + 26, // 14: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner.labels:type_name -> google.protobuf.Struct + 26, // 15: xyz.block.ftl.v1.ProcessListResponse.Process.labels:type_name -> google.protobuf.Struct + 23, // 16: xyz.block.ftl.v1.ProcessListResponse.Process.runner:type_name -> xyz.block.ftl.v1.ProcessListResponse.ProcessRunner + 27, // 17: xyz.block.ftl.v1.ControllerService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 17, // 18: xyz.block.ftl.v1.ControllerService.ProcessList:input_type -> xyz.block.ftl.v1.ProcessListRequest + 15, // 19: xyz.block.ftl.v1.ControllerService.Status:input_type -> xyz.block.ftl.v1.StatusRequest 0, // 20: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:input_type -> xyz.block.ftl.v1.GetArtefactDiffsRequest 2, // 21: xyz.block.ftl.v1.ControllerService.UploadArtefact:input_type -> xyz.block.ftl.v1.UploadArtefactRequest - 5, // 22: xyz.block.ftl.v1.ControllerService.CreateDeployment:input_type -> xyz.block.ftl.v1.CreateDeploymentRequest - 9, // 23: xyz.block.ftl.v1.ControllerService.GetDeployment:input_type -> xyz.block.ftl.v1.GetDeploymentRequest - 7, // 24: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:input_type -> xyz.block.ftl.v1.GetDeploymentArtefactsRequest - 11, // 25: xyz.block.ftl.v1.ControllerService.RegisterRunner:input_type -> xyz.block.ftl.v1.RegisterRunnerRequest - 13, // 26: xyz.block.ftl.v1.ControllerService.UpdateDeploy:input_type -> xyz.block.ftl.v1.UpdateDeployRequest - 15, // 27: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:input_type -> xyz.block.ftl.v1.ReplaceDeployRequest - 30, // 28: xyz.block.ftl.v1.ControllerService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 20, // 29: xyz.block.ftl.v1.ControllerService.ProcessList:output_type -> xyz.block.ftl.v1.ProcessListResponse - 18, // 30: xyz.block.ftl.v1.ControllerService.Status:output_type -> xyz.block.ftl.v1.StatusResponse - 1, // 31: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:output_type -> xyz.block.ftl.v1.GetArtefactDiffsResponse - 3, // 32: xyz.block.ftl.v1.ControllerService.UploadArtefact:output_type -> xyz.block.ftl.v1.UploadArtefactResponse - 6, // 33: xyz.block.ftl.v1.ControllerService.CreateDeployment:output_type -> xyz.block.ftl.v1.CreateDeploymentResponse - 10, // 34: xyz.block.ftl.v1.ControllerService.GetDeployment:output_type -> xyz.block.ftl.v1.GetDeploymentResponse - 8, // 35: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:output_type -> xyz.block.ftl.v1.GetDeploymentArtefactsResponse - 12, // 36: xyz.block.ftl.v1.ControllerService.RegisterRunner:output_type -> xyz.block.ftl.v1.RegisterRunnerResponse - 14, // 37: xyz.block.ftl.v1.ControllerService.UpdateDeploy:output_type -> xyz.block.ftl.v1.UpdateDeployResponse - 16, // 38: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:output_type -> xyz.block.ftl.v1.ReplaceDeployResponse - 28, // [28:39] is the sub-list for method output_type - 17, // [17:28] is the sub-list for method input_type + 9, // 22: xyz.block.ftl.v1.ControllerService.GetDeployment:input_type -> xyz.block.ftl.v1.GetDeploymentRequest + 7, // 23: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:input_type -> xyz.block.ftl.v1.GetDeploymentArtefactsRequest + 11, // 24: xyz.block.ftl.v1.ControllerService.RegisterRunner:input_type -> xyz.block.ftl.v1.RegisterRunnerRequest + 28, // 25: xyz.block.ftl.v1.ControllerService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 18, // 26: xyz.block.ftl.v1.ControllerService.ProcessList:output_type -> xyz.block.ftl.v1.ProcessListResponse + 16, // 27: xyz.block.ftl.v1.ControllerService.Status:output_type -> xyz.block.ftl.v1.StatusResponse + 1, // 28: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:output_type -> xyz.block.ftl.v1.GetArtefactDiffsResponse + 3, // 29: xyz.block.ftl.v1.ControllerService.UploadArtefact:output_type -> xyz.block.ftl.v1.UploadArtefactResponse + 10, // 30: xyz.block.ftl.v1.ControllerService.GetDeployment:output_type -> xyz.block.ftl.v1.GetDeploymentResponse + 8, // 31: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:output_type -> xyz.block.ftl.v1.GetDeploymentArtefactsResponse + 12, // 32: xyz.block.ftl.v1.ControllerService.RegisterRunner:output_type -> xyz.block.ftl.v1.RegisterRunnerResponse + 25, // [25:33] is the sub-list for method output_type + 17, // [17:25] is the sub-list for method input_type 17, // [17:17] is the sub-list for extension type_name 17, // [17:17] is the sub-list for extension extendee 0, // [0:17] is the sub-list for field type_name @@ -1796,16 +1673,15 @@ func file_xyz_block_ftl_v1_controller_proto_init() { } file_xyz_block_ftl_v1_ftl_proto_init() file_xyz_block_ftl_v1_controller_proto_msgTypes[6].OneofWrappers = []any{} - file_xyz_block_ftl_v1_controller_proto_msgTypes[13].OneofWrappers = []any{} - file_xyz_block_ftl_v1_controller_proto_msgTypes[22].OneofWrappers = []any{} - file_xyz_block_ftl_v1_controller_proto_msgTypes[26].OneofWrappers = []any{} + file_xyz_block_ftl_v1_controller_proto_msgTypes[20].OneofWrappers = []any{} + file_xyz_block_ftl_v1_controller_proto_msgTypes[24].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xyz_block_ftl_v1_controller_proto_rawDesc, NumEnums: 0, - NumMessages: 27, + NumMessages: 25, NumExtensions: 0, NumServices: 1, }, diff --git a/backend/protos/xyz/block/ftl/v1/controller.proto b/backend/protos/xyz/block/ftl/v1/controller.proto index a9e9e767df..fcc6d85c6a 100644 --- a/backend/protos/xyz/block/ftl/v1/controller.proto +++ b/backend/protos/xyz/block/ftl/v1/controller.proto @@ -65,12 +65,6 @@ message RegisterRunnerRequest { message RegisterRunnerResponse {} -message UpdateDeployRequest { - string deployment_key = 1; - optional int32 min_replicas = 2; -} -message UpdateDeployResponse {} - message ReplaceDeployRequest { string deployment_key = 1; int32 min_replicas = 2; @@ -146,9 +140,6 @@ service ControllerService { // Upload an artefact to the server. rpc UploadArtefact(UploadArtefactRequest) returns (UploadArtefactResponse); - // Create a deployment. - rpc CreateDeployment(CreateDeploymentRequest) returns (CreateDeploymentResponse); - // Get the schema and artefact metadata for a deployment. rpc GetDeployment(GetDeploymentRequest) returns (GetDeploymentResponse); @@ -163,13 +154,4 @@ service ControllerService { // Each runner issue a RegisterRunnerRequest to the ControllerService // every 10 seconds to maintain its heartbeat. rpc RegisterRunner(stream RegisterRunnerRequest) returns (RegisterRunnerResponse); - - // Update an existing deployment. - rpc UpdateDeploy(UpdateDeployRequest) returns (UpdateDeployResponse); - - // Gradually replace an existing deployment with a new one. - // - // If a deployment already exists for the module of the new deployment, - // it will be scaled down and replaced by the new one. - rpc ReplaceDeploy(ReplaceDeployRequest) returns (ReplaceDeployResponse); } diff --git a/backend/protos/xyz/block/ftl/v1/ftlv1connect/controller.connect.go b/backend/protos/xyz/block/ftl/v1/ftlv1connect/controller.connect.go index 613af8a796..77c5aa8c8a 100644 --- a/backend/protos/xyz/block/ftl/v1/ftlv1connect/controller.connect.go +++ b/backend/protos/xyz/block/ftl/v1/ftlv1connect/controller.connect.go @@ -47,9 +47,6 @@ const ( // ControllerServiceUploadArtefactProcedure is the fully-qualified name of the ControllerService's // UploadArtefact RPC. ControllerServiceUploadArtefactProcedure = "/xyz.block.ftl.v1.ControllerService/UploadArtefact" - // ControllerServiceCreateDeploymentProcedure is the fully-qualified name of the ControllerService's - // CreateDeployment RPC. - ControllerServiceCreateDeploymentProcedure = "/xyz.block.ftl.v1.ControllerService/CreateDeployment" // ControllerServiceGetDeploymentProcedure is the fully-qualified name of the ControllerService's // GetDeployment RPC. ControllerServiceGetDeploymentProcedure = "/xyz.block.ftl.v1.ControllerService/GetDeployment" @@ -59,12 +56,6 @@ const ( // ControllerServiceRegisterRunnerProcedure is the fully-qualified name of the ControllerService's // RegisterRunner RPC. ControllerServiceRegisterRunnerProcedure = "/xyz.block.ftl.v1.ControllerService/RegisterRunner" - // ControllerServiceUpdateDeployProcedure is the fully-qualified name of the ControllerService's - // UpdateDeploy RPC. - ControllerServiceUpdateDeployProcedure = "/xyz.block.ftl.v1.ControllerService/UpdateDeploy" - // ControllerServiceReplaceDeployProcedure is the fully-qualified name of the ControllerService's - // ReplaceDeploy RPC. - ControllerServiceReplaceDeployProcedure = "/xyz.block.ftl.v1.ControllerService/ReplaceDeploy" ) // ControllerServiceClient is a client for the xyz.block.ftl.v1.ControllerService service. @@ -78,8 +69,6 @@ type ControllerServiceClient interface { GetArtefactDiffs(context.Context, *connect.Request[v1.GetArtefactDiffsRequest]) (*connect.Response[v1.GetArtefactDiffsResponse], error) // Upload an artefact to the server. UploadArtefact(context.Context, *connect.Request[v1.UploadArtefactRequest]) (*connect.Response[v1.UploadArtefactResponse], error) - // Create a deployment. - CreateDeployment(context.Context, *connect.Request[v1.CreateDeploymentRequest]) (*connect.Response[v1.CreateDeploymentResponse], error) // Get the schema and artefact metadata for a deployment. GetDeployment(context.Context, *connect.Request[v1.GetDeploymentRequest]) (*connect.Response[v1.GetDeploymentResponse], error) // Stream deployment artefacts from the server. @@ -92,13 +81,6 @@ type ControllerServiceClient interface { // Each runner issue a RegisterRunnerRequest to the ControllerService // every 10 seconds to maintain its heartbeat. RegisterRunner(context.Context) *connect.ClientStreamForClient[v1.RegisterRunnerRequest, v1.RegisterRunnerResponse] - // Update an existing deployment. - UpdateDeploy(context.Context, *connect.Request[v1.UpdateDeployRequest]) (*connect.Response[v1.UpdateDeployResponse], error) - // Gradually replace an existing deployment with a new one. - // - // If a deployment already exists for the module of the new deployment, - // it will be scaled down and replaced by the new one. - ReplaceDeploy(context.Context, *connect.Request[v1.ReplaceDeployRequest]) (*connect.Response[v1.ReplaceDeployResponse], error) } // NewControllerServiceClient constructs a client for the xyz.block.ftl.v1.ControllerService @@ -137,11 +119,6 @@ func NewControllerServiceClient(httpClient connect.HTTPClient, baseURL string, o baseURL+ControllerServiceUploadArtefactProcedure, opts..., ), - createDeployment: connect.NewClient[v1.CreateDeploymentRequest, v1.CreateDeploymentResponse]( - httpClient, - baseURL+ControllerServiceCreateDeploymentProcedure, - opts..., - ), getDeployment: connect.NewClient[v1.GetDeploymentRequest, v1.GetDeploymentResponse]( httpClient, baseURL+ControllerServiceGetDeploymentProcedure, @@ -157,16 +134,6 @@ func NewControllerServiceClient(httpClient connect.HTTPClient, baseURL string, o baseURL+ControllerServiceRegisterRunnerProcedure, opts..., ), - updateDeploy: connect.NewClient[v1.UpdateDeployRequest, v1.UpdateDeployResponse]( - httpClient, - baseURL+ControllerServiceUpdateDeployProcedure, - opts..., - ), - replaceDeploy: connect.NewClient[v1.ReplaceDeployRequest, v1.ReplaceDeployResponse]( - httpClient, - baseURL+ControllerServiceReplaceDeployProcedure, - opts..., - ), } } @@ -177,12 +144,9 @@ type controllerServiceClient struct { status *connect.Client[v1.StatusRequest, v1.StatusResponse] getArtefactDiffs *connect.Client[v1.GetArtefactDiffsRequest, v1.GetArtefactDiffsResponse] uploadArtefact *connect.Client[v1.UploadArtefactRequest, v1.UploadArtefactResponse] - createDeployment *connect.Client[v1.CreateDeploymentRequest, v1.CreateDeploymentResponse] getDeployment *connect.Client[v1.GetDeploymentRequest, v1.GetDeploymentResponse] getDeploymentArtefacts *connect.Client[v1.GetDeploymentArtefactsRequest, v1.GetDeploymentArtefactsResponse] registerRunner *connect.Client[v1.RegisterRunnerRequest, v1.RegisterRunnerResponse] - updateDeploy *connect.Client[v1.UpdateDeployRequest, v1.UpdateDeployResponse] - replaceDeploy *connect.Client[v1.ReplaceDeployRequest, v1.ReplaceDeployResponse] } // Ping calls xyz.block.ftl.v1.ControllerService.Ping. @@ -210,11 +174,6 @@ func (c *controllerServiceClient) UploadArtefact(ctx context.Context, req *conne return c.uploadArtefact.CallUnary(ctx, req) } -// CreateDeployment calls xyz.block.ftl.v1.ControllerService.CreateDeployment. -func (c *controllerServiceClient) CreateDeployment(ctx context.Context, req *connect.Request[v1.CreateDeploymentRequest]) (*connect.Response[v1.CreateDeploymentResponse], error) { - return c.createDeployment.CallUnary(ctx, req) -} - // GetDeployment calls xyz.block.ftl.v1.ControllerService.GetDeployment. func (c *controllerServiceClient) GetDeployment(ctx context.Context, req *connect.Request[v1.GetDeploymentRequest]) (*connect.Response[v1.GetDeploymentResponse], error) { return c.getDeployment.CallUnary(ctx, req) @@ -230,16 +189,6 @@ func (c *controllerServiceClient) RegisterRunner(ctx context.Context) *connect.C return c.registerRunner.CallClientStream(ctx) } -// UpdateDeploy calls xyz.block.ftl.v1.ControllerService.UpdateDeploy. -func (c *controllerServiceClient) UpdateDeploy(ctx context.Context, req *connect.Request[v1.UpdateDeployRequest]) (*connect.Response[v1.UpdateDeployResponse], error) { - return c.updateDeploy.CallUnary(ctx, req) -} - -// ReplaceDeploy calls xyz.block.ftl.v1.ControllerService.ReplaceDeploy. -func (c *controllerServiceClient) ReplaceDeploy(ctx context.Context, req *connect.Request[v1.ReplaceDeployRequest]) (*connect.Response[v1.ReplaceDeployResponse], error) { - return c.replaceDeploy.CallUnary(ctx, req) -} - // ControllerServiceHandler is an implementation of the xyz.block.ftl.v1.ControllerService service. type ControllerServiceHandler interface { // Ping service for readiness. @@ -251,8 +200,6 @@ type ControllerServiceHandler interface { GetArtefactDiffs(context.Context, *connect.Request[v1.GetArtefactDiffsRequest]) (*connect.Response[v1.GetArtefactDiffsResponse], error) // Upload an artefact to the server. UploadArtefact(context.Context, *connect.Request[v1.UploadArtefactRequest]) (*connect.Response[v1.UploadArtefactResponse], error) - // Create a deployment. - CreateDeployment(context.Context, *connect.Request[v1.CreateDeploymentRequest]) (*connect.Response[v1.CreateDeploymentResponse], error) // Get the schema and artefact metadata for a deployment. GetDeployment(context.Context, *connect.Request[v1.GetDeploymentRequest]) (*connect.Response[v1.GetDeploymentResponse], error) // Stream deployment artefacts from the server. @@ -265,13 +212,6 @@ type ControllerServiceHandler interface { // Each runner issue a RegisterRunnerRequest to the ControllerService // every 10 seconds to maintain its heartbeat. RegisterRunner(context.Context, *connect.ClientStream[v1.RegisterRunnerRequest]) (*connect.Response[v1.RegisterRunnerResponse], error) - // Update an existing deployment. - UpdateDeploy(context.Context, *connect.Request[v1.UpdateDeployRequest]) (*connect.Response[v1.UpdateDeployResponse], error) - // Gradually replace an existing deployment with a new one. - // - // If a deployment already exists for the module of the new deployment, - // it will be scaled down and replaced by the new one. - ReplaceDeploy(context.Context, *connect.Request[v1.ReplaceDeployRequest]) (*connect.Response[v1.ReplaceDeployResponse], error) } // NewControllerServiceHandler builds an HTTP handler from the service implementation. It returns @@ -306,11 +246,6 @@ func NewControllerServiceHandler(svc ControllerServiceHandler, opts ...connect.H svc.UploadArtefact, opts..., ) - controllerServiceCreateDeploymentHandler := connect.NewUnaryHandler( - ControllerServiceCreateDeploymentProcedure, - svc.CreateDeployment, - opts..., - ) controllerServiceGetDeploymentHandler := connect.NewUnaryHandler( ControllerServiceGetDeploymentProcedure, svc.GetDeployment, @@ -326,16 +261,6 @@ func NewControllerServiceHandler(svc ControllerServiceHandler, opts ...connect.H svc.RegisterRunner, opts..., ) - controllerServiceUpdateDeployHandler := connect.NewUnaryHandler( - ControllerServiceUpdateDeployProcedure, - svc.UpdateDeploy, - opts..., - ) - controllerServiceReplaceDeployHandler := connect.NewUnaryHandler( - ControllerServiceReplaceDeployProcedure, - svc.ReplaceDeploy, - opts..., - ) return "/xyz.block.ftl.v1.ControllerService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case ControllerServicePingProcedure: @@ -348,18 +273,12 @@ func NewControllerServiceHandler(svc ControllerServiceHandler, opts ...connect.H controllerServiceGetArtefactDiffsHandler.ServeHTTP(w, r) case ControllerServiceUploadArtefactProcedure: controllerServiceUploadArtefactHandler.ServeHTTP(w, r) - case ControllerServiceCreateDeploymentProcedure: - controllerServiceCreateDeploymentHandler.ServeHTTP(w, r) case ControllerServiceGetDeploymentProcedure: controllerServiceGetDeploymentHandler.ServeHTTP(w, r) case ControllerServiceGetDeploymentArtefactsProcedure: controllerServiceGetDeploymentArtefactsHandler.ServeHTTP(w, r) case ControllerServiceRegisterRunnerProcedure: controllerServiceRegisterRunnerHandler.ServeHTTP(w, r) - case ControllerServiceUpdateDeployProcedure: - controllerServiceUpdateDeployHandler.ServeHTTP(w, r) - case ControllerServiceReplaceDeployProcedure: - controllerServiceReplaceDeployHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -389,10 +308,6 @@ func (UnimplementedControllerServiceHandler) UploadArtefact(context.Context, *co return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.ControllerService.UploadArtefact is not implemented")) } -func (UnimplementedControllerServiceHandler) CreateDeployment(context.Context, *connect.Request[v1.CreateDeploymentRequest]) (*connect.Response[v1.CreateDeploymentResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.ControllerService.CreateDeployment is not implemented")) -} - func (UnimplementedControllerServiceHandler) GetDeployment(context.Context, *connect.Request[v1.GetDeploymentRequest]) (*connect.Response[v1.GetDeploymentResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.ControllerService.GetDeployment is not implemented")) } @@ -404,11 +319,3 @@ func (UnimplementedControllerServiceHandler) GetDeploymentArtefacts(context.Cont func (UnimplementedControllerServiceHandler) RegisterRunner(context.Context, *connect.ClientStream[v1.RegisterRunnerRequest]) (*connect.Response[v1.RegisterRunnerResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.ControllerService.RegisterRunner is not implemented")) } - -func (UnimplementedControllerServiceHandler) UpdateDeploy(context.Context, *connect.Request[v1.UpdateDeployRequest]) (*connect.Response[v1.UpdateDeployResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.ControllerService.UpdateDeploy is not implemented")) -} - -func (UnimplementedControllerServiceHandler) ReplaceDeploy(context.Context, *connect.Request[v1.ReplaceDeployRequest]) (*connect.Response[v1.ReplaceDeployResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.ControllerService.ReplaceDeploy is not implemented")) -} diff --git a/backend/protos/xyz/block/ftl/v1/ftlv1connect/schemaservice.connect.go b/backend/protos/xyz/block/ftl/v1/ftlv1connect/schemaservice.connect.go index 9a74467738..562e746fb7 100644 --- a/backend/protos/xyz/block/ftl/v1/ftlv1connect/schemaservice.connect.go +++ b/backend/protos/xyz/block/ftl/v1/ftlv1connect/schemaservice.connect.go @@ -49,6 +49,15 @@ const ( // SchemaServiceGetDeploymentsProcedure is the fully-qualified name of the SchemaService's // GetDeployments RPC. SchemaServiceGetDeploymentsProcedure = "/xyz.block.ftl.v1.SchemaService/GetDeployments" + // SchemaServiceCreateChangesetProcedure is the fully-qualified name of the SchemaService's + // CreateChangeset RPC. + SchemaServiceCreateChangesetProcedure = "/xyz.block.ftl.v1.SchemaService/CreateChangeset" + // SchemaServiceCommitChangesetProcedure is the fully-qualified name of the SchemaService's + // CommitChangeset RPC. + SchemaServiceCommitChangesetProcedure = "/xyz.block.ftl.v1.SchemaService/CommitChangeset" + // SchemaServiceFailChangesetProcedure is the fully-qualified name of the SchemaService's + // FailChangeset RPC. + SchemaServiceFailChangesetProcedure = "/xyz.block.ftl.v1.SchemaService/FailChangeset" ) // SchemaServiceClient is a client for the xyz.block.ftl.v1.SchemaService service. @@ -68,6 +77,12 @@ type SchemaServiceClient interface { UpdateSchema(context.Context, *connect.Request[v1.UpdateSchemaRequest]) (*connect.Response[v1.UpdateSchemaResponse], error) // GetDeployments is used to get the schema for all deployments. GetDeployments(context.Context, *connect.Request[v1.GetDeploymentsRequest]) (*connect.Response[v1.GetDeploymentsResponse], error) + // CreateChangeset creates a new changeset. + CreateChangeset(context.Context, *connect.Request[v1.CreateChangesetRequest]) (*connect.Response[v1.CreateChangesetResponse], error) + // CommitChangeset makes all deployments for the changeset part of the canonical schema. + CommitChangeset(context.Context, *connect.Request[v1.CommitChangesetRequest]) (*connect.Response[v1.CommitChangesetResponse], error) + // FailChangeset fails an active changeset. + FailChangeset(context.Context, *connect.Request[v1.FailChangesetRequest]) (*connect.Response[v1.FailChangesetResponse], error) } // NewSchemaServiceClient constructs a client for the xyz.block.ftl.v1.SchemaService service. By @@ -113,6 +128,21 @@ func NewSchemaServiceClient(httpClient connect.HTTPClient, baseURL string, opts baseURL+SchemaServiceGetDeploymentsProcedure, opts..., ), + createChangeset: connect.NewClient[v1.CreateChangesetRequest, v1.CreateChangesetResponse]( + httpClient, + baseURL+SchemaServiceCreateChangesetProcedure, + opts..., + ), + commitChangeset: connect.NewClient[v1.CommitChangesetRequest, v1.CommitChangesetResponse]( + httpClient, + baseURL+SchemaServiceCommitChangesetProcedure, + opts..., + ), + failChangeset: connect.NewClient[v1.FailChangesetRequest, v1.FailChangesetResponse]( + httpClient, + baseURL+SchemaServiceFailChangesetProcedure, + opts..., + ), } } @@ -124,6 +154,9 @@ type schemaServiceClient struct { updateDeploymentRuntime *connect.Client[v1.UpdateDeploymentRuntimeRequest, v1.UpdateDeploymentRuntimeResponse] updateSchema *connect.Client[v1.UpdateSchemaRequest, v1.UpdateSchemaResponse] getDeployments *connect.Client[v1.GetDeploymentsRequest, v1.GetDeploymentsResponse] + createChangeset *connect.Client[v1.CreateChangesetRequest, v1.CreateChangesetResponse] + commitChangeset *connect.Client[v1.CommitChangesetRequest, v1.CommitChangesetResponse] + failChangeset *connect.Client[v1.FailChangesetRequest, v1.FailChangesetResponse] } // Ping calls xyz.block.ftl.v1.SchemaService.Ping. @@ -156,6 +189,21 @@ func (c *schemaServiceClient) GetDeployments(ctx context.Context, req *connect.R return c.getDeployments.CallUnary(ctx, req) } +// CreateChangeset calls xyz.block.ftl.v1.SchemaService.CreateChangeset. +func (c *schemaServiceClient) CreateChangeset(ctx context.Context, req *connect.Request[v1.CreateChangesetRequest]) (*connect.Response[v1.CreateChangesetResponse], error) { + return c.createChangeset.CallUnary(ctx, req) +} + +// CommitChangeset calls xyz.block.ftl.v1.SchemaService.CommitChangeset. +func (c *schemaServiceClient) CommitChangeset(ctx context.Context, req *connect.Request[v1.CommitChangesetRequest]) (*connect.Response[v1.CommitChangesetResponse], error) { + return c.commitChangeset.CallUnary(ctx, req) +} + +// FailChangeset calls xyz.block.ftl.v1.SchemaService.FailChangeset. +func (c *schemaServiceClient) FailChangeset(ctx context.Context, req *connect.Request[v1.FailChangesetRequest]) (*connect.Response[v1.FailChangesetResponse], error) { + return c.failChangeset.CallUnary(ctx, req) +} + // SchemaServiceHandler is an implementation of the xyz.block.ftl.v1.SchemaService service. type SchemaServiceHandler interface { // Ping service for readiness. @@ -173,6 +221,12 @@ type SchemaServiceHandler interface { UpdateSchema(context.Context, *connect.Request[v1.UpdateSchemaRequest]) (*connect.Response[v1.UpdateSchemaResponse], error) // GetDeployments is used to get the schema for all deployments. GetDeployments(context.Context, *connect.Request[v1.GetDeploymentsRequest]) (*connect.Response[v1.GetDeploymentsResponse], error) + // CreateChangeset creates a new changeset. + CreateChangeset(context.Context, *connect.Request[v1.CreateChangesetRequest]) (*connect.Response[v1.CreateChangesetResponse], error) + // CommitChangeset makes all deployments for the changeset part of the canonical schema. + CommitChangeset(context.Context, *connect.Request[v1.CommitChangesetRequest]) (*connect.Response[v1.CommitChangesetResponse], error) + // FailChangeset fails an active changeset. + FailChangeset(context.Context, *connect.Request[v1.FailChangesetRequest]) (*connect.Response[v1.FailChangesetResponse], error) } // NewSchemaServiceHandler builds an HTTP handler from the service implementation. It returns the @@ -214,6 +268,21 @@ func NewSchemaServiceHandler(svc SchemaServiceHandler, opts ...connect.HandlerOp svc.GetDeployments, opts..., ) + schemaServiceCreateChangesetHandler := connect.NewUnaryHandler( + SchemaServiceCreateChangesetProcedure, + svc.CreateChangeset, + opts..., + ) + schemaServiceCommitChangesetHandler := connect.NewUnaryHandler( + SchemaServiceCommitChangesetProcedure, + svc.CommitChangeset, + opts..., + ) + schemaServiceFailChangesetHandler := connect.NewUnaryHandler( + SchemaServiceFailChangesetProcedure, + svc.FailChangeset, + opts..., + ) return "/xyz.block.ftl.v1.SchemaService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case SchemaServicePingProcedure: @@ -228,6 +297,12 @@ func NewSchemaServiceHandler(svc SchemaServiceHandler, opts ...connect.HandlerOp schemaServiceUpdateSchemaHandler.ServeHTTP(w, r) case SchemaServiceGetDeploymentsProcedure: schemaServiceGetDeploymentsHandler.ServeHTTP(w, r) + case SchemaServiceCreateChangesetProcedure: + schemaServiceCreateChangesetHandler.ServeHTTP(w, r) + case SchemaServiceCommitChangesetProcedure: + schemaServiceCommitChangesetHandler.ServeHTTP(w, r) + case SchemaServiceFailChangesetProcedure: + schemaServiceFailChangesetHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -260,3 +335,15 @@ func (UnimplementedSchemaServiceHandler) UpdateSchema(context.Context, *connect. func (UnimplementedSchemaServiceHandler) GetDeployments(context.Context, *connect.Request[v1.GetDeploymentsRequest]) (*connect.Response[v1.GetDeploymentsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.SchemaService.GetDeployments is not implemented")) } + +func (UnimplementedSchemaServiceHandler) CreateChangeset(context.Context, *connect.Request[v1.CreateChangesetRequest]) (*connect.Response[v1.CreateChangesetResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.SchemaService.CreateChangeset is not implemented")) +} + +func (UnimplementedSchemaServiceHandler) CommitChangeset(context.Context, *connect.Request[v1.CommitChangesetRequest]) (*connect.Response[v1.CommitChangesetResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.SchemaService.CommitChangeset is not implemented")) +} + +func (UnimplementedSchemaServiceHandler) FailChangeset(context.Context, *connect.Request[v1.FailChangesetRequest]) (*connect.Response[v1.FailChangesetResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.SchemaService.FailChangeset is not implemented")) +} diff --git a/backend/protos/xyz/block/ftl/v1/schemaservice.pb.go b/backend/protos/xyz/block/ftl/v1/schemaservice.pb.go index 2d3cbaba9b..0ecabb13fb 100644 --- a/backend/protos/xyz/block/ftl/v1/schemaservice.pb.go +++ b/backend/protos/xyz/block/ftl/v1/schemaservice.pb.go @@ -21,58 +21,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type DeploymentChangeType int32 - -const ( - DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_UNSPECIFIED DeploymentChangeType = 0 - DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_ADDED DeploymentChangeType = 1 - DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_REMOVED DeploymentChangeType = 2 - DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_CHANGED DeploymentChangeType = 3 -) - -// Enum value maps for DeploymentChangeType. -var ( - DeploymentChangeType_name = map[int32]string{ - 0: "DEPLOYMENT_CHANGE_TYPE_UNSPECIFIED", - 1: "DEPLOYMENT_CHANGE_TYPE_ADDED", - 2: "DEPLOYMENT_CHANGE_TYPE_REMOVED", - 3: "DEPLOYMENT_CHANGE_TYPE_CHANGED", - } - DeploymentChangeType_value = map[string]int32{ - "DEPLOYMENT_CHANGE_TYPE_UNSPECIFIED": 0, - "DEPLOYMENT_CHANGE_TYPE_ADDED": 1, - "DEPLOYMENT_CHANGE_TYPE_REMOVED": 2, - "DEPLOYMENT_CHANGE_TYPE_CHANGED": 3, - } -) - -func (x DeploymentChangeType) Enum() *DeploymentChangeType { - p := new(DeploymentChangeType) - *p = x - return p -} - -func (x DeploymentChangeType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (DeploymentChangeType) Descriptor() protoreflect.EnumDescriptor { - return file_xyz_block_ftl_v1_schemaservice_proto_enumTypes[0].Descriptor() -} - -func (DeploymentChangeType) Type() protoreflect.EnumType { - return &file_xyz_block_ftl_v1_schemaservice_proto_enumTypes[0] -} - -func (x DeploymentChangeType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use DeploymentChangeType.Descriptor instead. -func (DeploymentChangeType) EnumDescriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{0} -} - type GetSchemaRequest struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -112,6 +60,7 @@ func (*GetSchemaRequest) Descriptor() ([]byte, []int) { type GetSchemaResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Schema *v1.Schema `protobuf:"bytes,1,opt,name=schema,proto3" json:"schema,omitempty"` + Changesets []*v1.Changeset `protobuf:"bytes,2,rep,name=changesets,proto3" json:"changesets,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -153,6 +102,13 @@ func (x *GetSchemaResponse) GetSchema() *v1.Schema { return nil } +func (x *GetSchemaResponse) GetChangesets() []*v1.Changeset { + if x != nil { + return x.Changesets + } + return nil +} + type PullSchemaRequest struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -191,17 +147,18 @@ func (*PullSchemaRequest) Descriptor() ([]byte, []int) { type PullSchemaResponse struct { state protoimpl.MessageState `protogen:"open.v1"` - // Will not be set for builtin modules. - DeploymentKey *string `protobuf:"bytes,1,opt,name=deployment_key,json=deploymentKey,proto3,oneof" json:"deployment_key,omitempty"` - ModuleName string `protobuf:"bytes,2,opt,name=module_name,json=moduleName,proto3" json:"module_name,omitempty"` - // For deletes this will not be present. - Schema *v1.Module `protobuf:"bytes,4,opt,name=schema,proto3,oneof" json:"schema,omitempty"` + // Types that are valid to be assigned to Event: + // + // *PullSchemaResponse_ChangesetCreated_ + // *PullSchemaResponse_ChangesetFailed_ + // *PullSchemaResponse_ChangesetCommitted_ + // *PullSchemaResponse_DeploymentCreated_ + // *PullSchemaResponse_DeploymentUpdated_ + // *PullSchemaResponse_DeploymentRemoved_ + Event isPullSchemaResponse_Event `protobuf_oneof:"event"` // If true there are more schema changes immediately following this one as part of the initial batch. // If false this is the last schema change in the initial batch, but others may follow later. - More bool `protobuf:"varint,3,opt,name=more,proto3" json:"more,omitempty"` - ChangeType DeploymentChangeType `protobuf:"varint,5,opt,name=change_type,json=changeType,proto3,enum=xyz.block.ftl.v1.DeploymentChangeType" json:"change_type,omitempty"` - // If this is true then the module was removed as well as the deployment. This is only set for DEPLOYMENT_REMOVED. - ModuleRemoved bool `protobuf:"varint,6,opt,name=module_removed,json=moduleRemoved,proto3" json:"module_removed,omitempty"` + More bool `protobuf:"varint,31634,opt,name=more,proto3" json:"more,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -236,51 +193,119 @@ func (*PullSchemaResponse) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{3} } -func (x *PullSchemaResponse) GetDeploymentKey() string { - if x != nil && x.DeploymentKey != nil { - return *x.DeploymentKey +func (x *PullSchemaResponse) GetEvent() isPullSchemaResponse_Event { + if x != nil { + return x.Event } - return "" + return nil } -func (x *PullSchemaResponse) GetModuleName() string { +func (x *PullSchemaResponse) GetChangesetCreated() *PullSchemaResponse_ChangesetCreated { if x != nil { - return x.ModuleName + if x, ok := x.Event.(*PullSchemaResponse_ChangesetCreated_); ok { + return x.ChangesetCreated + } } - return "" + return nil } -func (x *PullSchemaResponse) GetSchema() *v1.Module { +func (x *PullSchemaResponse) GetChangesetFailed() *PullSchemaResponse_ChangesetFailed { if x != nil { - return x.Schema + if x, ok := x.Event.(*PullSchemaResponse_ChangesetFailed_); ok { + return x.ChangesetFailed + } } return nil } -func (x *PullSchemaResponse) GetMore() bool { +func (x *PullSchemaResponse) GetChangesetCommitted() *PullSchemaResponse_ChangesetCommitted { if x != nil { - return x.More + if x, ok := x.Event.(*PullSchemaResponse_ChangesetCommitted_); ok { + return x.ChangesetCommitted + } } - return false + return nil } -func (x *PullSchemaResponse) GetChangeType() DeploymentChangeType { +func (x *PullSchemaResponse) GetDeploymentCreated() *PullSchemaResponse_DeploymentCreated { if x != nil { - return x.ChangeType + if x, ok := x.Event.(*PullSchemaResponse_DeploymentCreated_); ok { + return x.DeploymentCreated + } } - return DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_UNSPECIFIED + return nil } -func (x *PullSchemaResponse) GetModuleRemoved() bool { +func (x *PullSchemaResponse) GetDeploymentUpdated() *PullSchemaResponse_DeploymentUpdated { if x != nil { - return x.ModuleRemoved + if x, ok := x.Event.(*PullSchemaResponse_DeploymentUpdated_); ok { + return x.DeploymentUpdated + } + } + return nil +} + +func (x *PullSchemaResponse) GetDeploymentRemoved() *PullSchemaResponse_DeploymentRemoved { + if x != nil { + if x, ok := x.Event.(*PullSchemaResponse_DeploymentRemoved_); ok { + return x.DeploymentRemoved + } + } + return nil +} + +func (x *PullSchemaResponse) GetMore() bool { + if x != nil { + return x.More } return false } +type isPullSchemaResponse_Event interface { + isPullSchemaResponse_Event() +} + +type PullSchemaResponse_ChangesetCreated_ struct { + ChangesetCreated *PullSchemaResponse_ChangesetCreated `protobuf:"bytes,4,opt,name=changeset_created,json=changesetCreated,proto3,oneof"` +} + +type PullSchemaResponse_ChangesetFailed_ struct { + ChangesetFailed *PullSchemaResponse_ChangesetFailed `protobuf:"bytes,5,opt,name=changeset_failed,json=changesetFailed,proto3,oneof"` +} + +type PullSchemaResponse_ChangesetCommitted_ struct { + ChangesetCommitted *PullSchemaResponse_ChangesetCommitted `protobuf:"bytes,6,opt,name=changeset_committed,json=changesetCommitted,proto3,oneof"` +} + +type PullSchemaResponse_DeploymentCreated_ struct { + DeploymentCreated *PullSchemaResponse_DeploymentCreated `protobuf:"bytes,7,opt,name=deployment_created,json=deploymentCreated,proto3,oneof"` +} + +type PullSchemaResponse_DeploymentUpdated_ struct { + DeploymentUpdated *PullSchemaResponse_DeploymentUpdated `protobuf:"bytes,8,opt,name=deployment_updated,json=deploymentUpdated,proto3,oneof"` +} + +type PullSchemaResponse_DeploymentRemoved_ struct { + DeploymentRemoved *PullSchemaResponse_DeploymentRemoved `protobuf:"bytes,9,opt,name=deployment_removed,json=deploymentRemoved,proto3,oneof"` +} + +func (*PullSchemaResponse_ChangesetCreated_) isPullSchemaResponse_Event() {} + +func (*PullSchemaResponse_ChangesetFailed_) isPullSchemaResponse_Event() {} + +func (*PullSchemaResponse_ChangesetCommitted_) isPullSchemaResponse_Event() {} + +func (*PullSchemaResponse_DeploymentCreated_) isPullSchemaResponse_Event() {} + +func (*PullSchemaResponse_DeploymentUpdated_) isPullSchemaResponse_Event() {} + +func (*PullSchemaResponse_DeploymentRemoved_) isPullSchemaResponse_Event() {} + type UpdateDeploymentRuntimeRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - Event *v1.ModuleRuntimeEvent `protobuf:"bytes,2,opt,name=event,proto3" json:"event,omitempty"` + Deployment string `protobuf:"bytes,1,opt,name=deployment,proto3" json:"deployment,omitempty"` + Changeset *string `protobuf:"bytes,2,opt,name=changeset,proto3,oneof" json:"changeset,omitempty"` + Event *v1.ModuleRuntimeEvent `protobuf:"bytes,3,opt,name=event,proto3" json:"event,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -315,6 +340,20 @@ func (*UpdateDeploymentRuntimeRequest) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{4} } +func (x *UpdateDeploymentRuntimeRequest) GetDeployment() string { + if x != nil { + return x.Deployment + } + return "" +} + +func (x *UpdateDeploymentRuntimeRequest) GetChangeset() string { + if x != nil && x.Changeset != nil { + return *x.Changeset + } + return "" +} + func (x *UpdateDeploymentRuntimeRequest) GetEvent() *v1.ModuleRuntimeEvent { if x != nil { return x.Event @@ -518,6 +557,95 @@ func (x *GetDeploymentsResponse) GetSchema() []*DeployedSchema { return nil } +type CreateChangesetRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Modules []*v1.Module `protobuf:"bytes,1,rep,name=modules,proto3" json:"modules,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateChangesetRequest) Reset() { + *x = CreateChangesetRequest{} + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateChangesetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateChangesetRequest) ProtoMessage() {} + +func (x *CreateChangesetRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateChangesetRequest.ProtoReflect.Descriptor instead. +func (*CreateChangesetRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{10} +} + +func (x *CreateChangesetRequest) GetModules() []*v1.Module { + if x != nil { + return x.Modules + } + return nil +} + +type CreateChangesetResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The changeset key of the newly created changeset. + Changeset string `protobuf:"bytes,1,opt,name=changeset,proto3" json:"changeset,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CreateChangesetResponse) Reset() { + *x = CreateChangesetResponse{} + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CreateChangesetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateChangesetResponse) ProtoMessage() {} + +func (x *CreateChangesetResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateChangesetResponse.ProtoReflect.Descriptor instead. +func (*CreateChangesetResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{11} +} + +func (x *CreateChangesetResponse) GetChangeset() string { + if x != nil { + return x.Changeset + } + return "" +} + type DeployedSchema struct { state protoimpl.MessageState `protogen:"open.v1"` DeploymentKey string `protobuf:"bytes,1,opt,name=deployment_key,json=deploymentKey,proto3" json:"deployment_key,omitempty"` @@ -529,7 +657,7 @@ type DeployedSchema struct { func (x *DeployedSchema) Reset() { *x = DeployedSchema{} - mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[10] + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -541,7 +669,7 @@ func (x *DeployedSchema) String() string { func (*DeployedSchema) ProtoMessage() {} func (x *DeployedSchema) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[10] + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -554,7 +682,7 @@ func (x *DeployedSchema) ProtoReflect() protoreflect.Message { // Deprecated: Use DeployedSchema.ProtoReflect.Descriptor instead. func (*DeployedSchema) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{10} + return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{12} } func (x *DeployedSchema) GetDeploymentKey() string { @@ -578,6 +706,482 @@ func (x *DeployedSchema) GetIsActive() bool { return false } +type CommitChangesetRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The changeset key to commit. + Changeset string `protobuf:"bytes,1,opt,name=changeset,proto3" json:"changeset,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CommitChangesetRequest) Reset() { + *x = CommitChangesetRequest{} + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CommitChangesetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommitChangesetRequest) ProtoMessage() {} + +func (x *CommitChangesetRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CommitChangesetRequest.ProtoReflect.Descriptor instead. +func (*CommitChangesetRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{13} +} + +func (x *CommitChangesetRequest) GetChangeset() string { + if x != nil { + return x.Changeset + } + return "" +} + +type CommitChangesetResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CommitChangesetResponse) Reset() { + *x = CommitChangesetResponse{} + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CommitChangesetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommitChangesetResponse) ProtoMessage() {} + +func (x *CommitChangesetResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CommitChangesetResponse.ProtoReflect.Descriptor instead. +func (*CommitChangesetResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{14} +} + +type FailChangesetRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The changeset key to fail. + Changeset string `protobuf:"bytes,1,opt,name=changeset,proto3" json:"changeset,omitempty"` + Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FailChangesetRequest) Reset() { + *x = FailChangesetRequest{} + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FailChangesetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FailChangesetRequest) ProtoMessage() {} + +func (x *FailChangesetRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FailChangesetRequest.ProtoReflect.Descriptor instead. +func (*FailChangesetRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{15} +} + +func (x *FailChangesetRequest) GetChangeset() string { + if x != nil { + return x.Changeset + } + return "" +} + +func (x *FailChangesetRequest) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +type FailChangesetResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FailChangesetResponse) Reset() { + *x = FailChangesetResponse{} + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FailChangesetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FailChangesetResponse) ProtoMessage() {} + +func (x *FailChangesetResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FailChangesetResponse.ProtoReflect.Descriptor instead. +func (*FailChangesetResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{16} +} + +// ChangesetCreated is sent when a new changeset is created. +type PullSchemaResponse_ChangesetCreated struct { + state protoimpl.MessageState `protogen:"open.v1"` + Changeset *v1.Changeset `protobuf:"bytes,1,opt,name=changeset,proto3" json:"changeset,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PullSchemaResponse_ChangesetCreated) Reset() { + *x = PullSchemaResponse_ChangesetCreated{} + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PullSchemaResponse_ChangesetCreated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PullSchemaResponse_ChangesetCreated) ProtoMessage() {} + +func (x *PullSchemaResponse_ChangesetCreated) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PullSchemaResponse_ChangesetCreated.ProtoReflect.Descriptor instead. +func (*PullSchemaResponse_ChangesetCreated) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *PullSchemaResponse_ChangesetCreated) GetChangeset() *v1.Changeset { + if x != nil { + return x.Changeset + } + return nil +} + +// ChangesetFailed is sent when a changeset fails. +type PullSchemaResponse_ChangesetFailed struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PullSchemaResponse_ChangesetFailed) Reset() { + *x = PullSchemaResponse_ChangesetFailed{} + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PullSchemaResponse_ChangesetFailed) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PullSchemaResponse_ChangesetFailed) ProtoMessage() {} + +func (x *PullSchemaResponse_ChangesetFailed) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PullSchemaResponse_ChangesetFailed.ProtoReflect.Descriptor instead. +func (*PullSchemaResponse_ChangesetFailed) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{3, 1} +} + +func (x *PullSchemaResponse_ChangesetFailed) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *PullSchemaResponse_ChangesetFailed) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +// ChangesetFailed is sent when a changeset becomes canonical. +type PullSchemaResponse_ChangesetCommitted struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PullSchemaResponse_ChangesetCommitted) Reset() { + *x = PullSchemaResponse_ChangesetCommitted{} + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PullSchemaResponse_ChangesetCommitted) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PullSchemaResponse_ChangesetCommitted) ProtoMessage() {} + +func (x *PullSchemaResponse_ChangesetCommitted) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PullSchemaResponse_ChangesetCommitted.ProtoReflect.Descriptor instead. +func (*PullSchemaResponse_ChangesetCommitted) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{3, 2} +} + +func (x *PullSchemaResponse_ChangesetCommitted) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +// Deployment created is sent when a deployment is new to the listener but is not part of a changeset. +type PullSchemaResponse_DeploymentCreated struct { + state protoimpl.MessageState `protogen:"open.v1"` + Schema *v1.Module `protobuf:"bytes,1,opt,name=schema,proto3,oneof" json:"schema,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PullSchemaResponse_DeploymentCreated) Reset() { + *x = PullSchemaResponse_DeploymentCreated{} + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PullSchemaResponse_DeploymentCreated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PullSchemaResponse_DeploymentCreated) ProtoMessage() {} + +func (x *PullSchemaResponse_DeploymentCreated) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PullSchemaResponse_DeploymentCreated.ProtoReflect.Descriptor instead. +func (*PullSchemaResponse_DeploymentCreated) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{3, 3} +} + +func (x *PullSchemaResponse_DeploymentCreated) GetSchema() *v1.Module { + if x != nil { + return x.Schema + } + return nil +} + +type PullSchemaResponse_DeploymentUpdated struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Will not be set for builtin modules. + // optional string key = 1; + // string module_name = 2; + // If present, the deployment is not yet canonical as it is currently part of a changeset. + Changeset *string `protobuf:"bytes,1,opt,name=changeset,proto3,oneof" json:"changeset,omitempty"` + Schema *v1.Module `protobuf:"bytes,2,opt,name=schema,proto3,oneof" json:"schema,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PullSchemaResponse_DeploymentUpdated) Reset() { + *x = PullSchemaResponse_DeploymentUpdated{} + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PullSchemaResponse_DeploymentUpdated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PullSchemaResponse_DeploymentUpdated) ProtoMessage() {} + +func (x *PullSchemaResponse_DeploymentUpdated) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PullSchemaResponse_DeploymentUpdated.ProtoReflect.Descriptor instead. +func (*PullSchemaResponse_DeploymentUpdated) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{3, 4} +} + +func (x *PullSchemaResponse_DeploymentUpdated) GetChangeset() string { + if x != nil && x.Changeset != nil { + return *x.Changeset + } + return "" +} + +func (x *PullSchemaResponse_DeploymentUpdated) GetSchema() *v1.Module { + if x != nil { + return x.Schema + } + return nil +} + +type PullSchemaResponse_DeploymentRemoved struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Will not be set for builtin modules. + Key *string `protobuf:"bytes,1,opt,name=key,proto3,oneof" json:"key,omitempty"` + ModuleName string `protobuf:"bytes,2,opt,name=module_name,json=moduleName,proto3" json:"module_name,omitempty"` + // If this is true then the module was removed as well as the deployment. + ModuleRemoved bool `protobuf:"varint,3,opt,name=module_removed,json=moduleRemoved,proto3" json:"module_removed,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PullSchemaResponse_DeploymentRemoved) Reset() { + *x = PullSchemaResponse_DeploymentRemoved{} + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PullSchemaResponse_DeploymentRemoved) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PullSchemaResponse_DeploymentRemoved) ProtoMessage() {} + +func (x *PullSchemaResponse_DeploymentRemoved) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PullSchemaResponse_DeploymentRemoved.ProtoReflect.Descriptor instead. +func (*PullSchemaResponse_DeploymentRemoved) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP(), []int{3, 5} +} + +func (x *PullSchemaResponse_DeploymentRemoved) GetKey() string { + if x != nil && x.Key != nil { + return *x.Key + } + return "" +} + +func (x *PullSchemaResponse_DeploymentRemoved) GetModuleName() string { + if x != nil { + return x.ModuleName + } + return "" +} + +func (x *PullSchemaResponse_DeploymentRemoved) GetModuleRemoved() bool { + if x != nil { + return x.ModuleRemoved + } + return false +} + var File_xyz_block_ftl_v1_schemaservice_proto protoreflect.FileDescriptor var file_xyz_block_ftl_v1_schemaservice_proto_rawDesc = []byte{ @@ -589,117 +1193,212 @@ var file_xyz_block_ftl_v1_schemaservice_proto_rawDesc = []byte{ 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1a, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x74, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 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, + 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x90, + 0x01, 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, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x42, 0x0a, + 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x73, 0x65, 0x74, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, + 0x73, 0x22, 0x13, 0x0a, 0x11, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xc6, 0x09, 0x0a, 0x12, 0x50, 0x75, 0x6c, 0x6c, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, + 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 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, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x10, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x12, 0x61, 0x0a, 0x10, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, + 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 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, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, + 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x6a, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x37, 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, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x12, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, + 0x65, 0x64, 0x12, 0x67, 0x0a, 0x12, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, + 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, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x67, 0x0a, 0x12, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 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, 0x2e, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x12, 0x67, 0x0a, 0x12, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x36, 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, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, + 0x04, 0x6d, 0x6f, 0x72, 0x65, 0x18, 0x92, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6d, + 0x6f, 0x72, 0x65, 0x1a, 0x54, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x52, 0x09, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x1a, 0x39, 0x0a, 0x0f, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x26, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x1a, 0x5c, 0x0a, 0x11, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x12, 0x3c, 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, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x88, 0x01, 0x01, 0x42, + 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x8d, 0x01, 0x0a, 0x11, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x12, 0x21, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, + 0x88, 0x01, 0x01, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 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, 0xc1, 0x02, 0x0a, 0x12, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, - 0x79, 0x88, 0x01, 0x01, 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, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x48, 0x01, 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, - 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x63, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x48, 0x01, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x88, 0x01, + 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x42, + 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x7a, 0x0a, 0x11, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, + 0x15, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x88, 0x01, 0x01, 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, 0x25, 0x0a, 0x0e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0d, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x42, 0x06, + 0x0a, 0x04, 0x5f, 0x6b, 0x65, 0x79, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, + 0xb4, 0x01, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 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, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, + 0x65, 0x74, 0x88, 0x01, 0x01, 0x12, 0x41, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x22, 0x21, 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x0a, 0x13, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x34, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, + 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, + 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x52, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x38, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 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, 0x65, 0x64, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x53, 0x0a, 0x16, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x21, 0x0a, 0x1f, 0x55, 0x70, + 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x22, 0x37, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x22, 0x8d, 0x01, 0x0a, 0x0e, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1b, 0x0a, 0x09, + 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x36, 0x0a, 0x16, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, + 0x74, 0x22, 0x19, 0x0a, 0x17, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x0a, 0x14, + 0x46, 0x61, 0x69, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, + 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x17, 0x0a, 0x15, 0x46, 0x61, 0x69, 0x6c, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x32, 0x8c, 0x07, 0x0a, 0x0d, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, + 0x59, 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, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x5e, 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, 0x22, 0x03, 0x90, 0x02, 0x01, 0x30, 0x01, 0x12, 0x7e, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x0a, - 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x52, 0x0a, 0x16, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 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, 0x65, - 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, - 0x8d, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 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, 0x06, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2a, - 0xa8, 0x01, 0x0a, 0x14, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x22, 0x44, 0x45, 0x50, 0x4c, - 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, - 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, - 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, - 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x4d, - 0x4f, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, - 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x03, 0x32, 0xda, 0x04, 0x0a, 0x0d, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x59, 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, 0x22, 0x03, - 0x90, 0x02, 0x01, 0x12, 0x5e, 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, 0x22, 0x03, 0x90, 0x02, - 0x01, 0x30, 0x01, 0x12, 0x7e, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x30, - 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, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x31, 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, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 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, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x30, 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, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 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, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0c, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x64, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 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, 0x73, 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, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 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, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3e, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 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, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, + 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, + 0x74, 0x12, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 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, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x12, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, + 0x0a, 0x0d, 0x46, 0x61, 0x69, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x12, + 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 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, 0x46, 0x61, 0x69, 0x6c, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x42, 0x3e, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 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 ( @@ -714,53 +1413,79 @@ func file_xyz_block_ftl_v1_schemaservice_proto_rawDescGZIP() []byte { return file_xyz_block_ftl_v1_schemaservice_proto_rawDescData } -var file_xyz_block_ftl_v1_schemaservice_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_xyz_block_ftl_v1_schemaservice_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_xyz_block_ftl_v1_schemaservice_proto_msgTypes = make([]protoimpl.MessageInfo, 23) var file_xyz_block_ftl_v1_schemaservice_proto_goTypes = []any{ - (DeploymentChangeType)(0), // 0: xyz.block.ftl.v1.DeploymentChangeType - (*GetSchemaRequest)(nil), // 1: xyz.block.ftl.v1.GetSchemaRequest - (*GetSchemaResponse)(nil), // 2: xyz.block.ftl.v1.GetSchemaResponse - (*PullSchemaRequest)(nil), // 3: xyz.block.ftl.v1.PullSchemaRequest - (*PullSchemaResponse)(nil), // 4: xyz.block.ftl.v1.PullSchemaResponse - (*UpdateDeploymentRuntimeRequest)(nil), // 5: xyz.block.ftl.v1.UpdateDeploymentRuntimeRequest - (*UpdateDeploymentRuntimeResponse)(nil), // 6: xyz.block.ftl.v1.UpdateDeploymentRuntimeResponse - (*UpdateSchemaRequest)(nil), // 7: xyz.block.ftl.v1.UpdateSchemaRequest - (*UpdateSchemaResponse)(nil), // 8: xyz.block.ftl.v1.UpdateSchemaResponse - (*GetDeploymentsRequest)(nil), // 9: xyz.block.ftl.v1.GetDeploymentsRequest - (*GetDeploymentsResponse)(nil), // 10: xyz.block.ftl.v1.GetDeploymentsResponse - (*DeployedSchema)(nil), // 11: xyz.block.ftl.v1.DeployedSchema - (*v1.Schema)(nil), // 12: xyz.block.ftl.schema.v1.Schema - (*v1.Module)(nil), // 13: xyz.block.ftl.schema.v1.Module - (*v1.ModuleRuntimeEvent)(nil), // 14: xyz.block.ftl.schema.v1.ModuleRuntimeEvent - (*v1.Event)(nil), // 15: xyz.block.ftl.schema.v1.Event - (*PingRequest)(nil), // 16: xyz.block.ftl.v1.PingRequest - (*PingResponse)(nil), // 17: xyz.block.ftl.v1.PingResponse + (*GetSchemaRequest)(nil), // 0: xyz.block.ftl.v1.GetSchemaRequest + (*GetSchemaResponse)(nil), // 1: xyz.block.ftl.v1.GetSchemaResponse + (*PullSchemaRequest)(nil), // 2: xyz.block.ftl.v1.PullSchemaRequest + (*PullSchemaResponse)(nil), // 3: xyz.block.ftl.v1.PullSchemaResponse + (*UpdateDeploymentRuntimeRequest)(nil), // 4: xyz.block.ftl.v1.UpdateDeploymentRuntimeRequest + (*UpdateDeploymentRuntimeResponse)(nil), // 5: xyz.block.ftl.v1.UpdateDeploymentRuntimeResponse + (*UpdateSchemaRequest)(nil), // 6: xyz.block.ftl.v1.UpdateSchemaRequest + (*UpdateSchemaResponse)(nil), // 7: xyz.block.ftl.v1.UpdateSchemaResponse + (*GetDeploymentsRequest)(nil), // 8: xyz.block.ftl.v1.GetDeploymentsRequest + (*GetDeploymentsResponse)(nil), // 9: xyz.block.ftl.v1.GetDeploymentsResponse + (*CreateChangesetRequest)(nil), // 10: xyz.block.ftl.v1.CreateChangesetRequest + (*CreateChangesetResponse)(nil), // 11: xyz.block.ftl.v1.CreateChangesetResponse + (*DeployedSchema)(nil), // 12: xyz.block.ftl.v1.DeployedSchema + (*CommitChangesetRequest)(nil), // 13: xyz.block.ftl.v1.CommitChangesetRequest + (*CommitChangesetResponse)(nil), // 14: xyz.block.ftl.v1.CommitChangesetResponse + (*FailChangesetRequest)(nil), // 15: xyz.block.ftl.v1.FailChangesetRequest + (*FailChangesetResponse)(nil), // 16: xyz.block.ftl.v1.FailChangesetResponse + (*PullSchemaResponse_ChangesetCreated)(nil), // 17: xyz.block.ftl.v1.PullSchemaResponse.ChangesetCreated + (*PullSchemaResponse_ChangesetFailed)(nil), // 18: xyz.block.ftl.v1.PullSchemaResponse.ChangesetFailed + (*PullSchemaResponse_ChangesetCommitted)(nil), // 19: xyz.block.ftl.v1.PullSchemaResponse.ChangesetCommitted + (*PullSchemaResponse_DeploymentCreated)(nil), // 20: xyz.block.ftl.v1.PullSchemaResponse.DeploymentCreated + (*PullSchemaResponse_DeploymentUpdated)(nil), // 21: xyz.block.ftl.v1.PullSchemaResponse.DeploymentUpdated + (*PullSchemaResponse_DeploymentRemoved)(nil), // 22: xyz.block.ftl.v1.PullSchemaResponse.DeploymentRemoved + (*v1.Schema)(nil), // 23: xyz.block.ftl.schema.v1.Schema + (*v1.Changeset)(nil), // 24: xyz.block.ftl.schema.v1.Changeset + (*v1.ModuleRuntimeEvent)(nil), // 25: xyz.block.ftl.schema.v1.ModuleRuntimeEvent + (*v1.Event)(nil), // 26: xyz.block.ftl.schema.v1.Event + (*v1.Module)(nil), // 27: xyz.block.ftl.schema.v1.Module + (*PingRequest)(nil), // 28: xyz.block.ftl.v1.PingRequest + (*PingResponse)(nil), // 29: xyz.block.ftl.v1.PingResponse } var file_xyz_block_ftl_v1_schemaservice_proto_depIdxs = []int32{ - 12, // 0: xyz.block.ftl.v1.GetSchemaResponse.schema:type_name -> xyz.block.ftl.schema.v1.Schema - 13, // 1: xyz.block.ftl.v1.PullSchemaResponse.schema:type_name -> xyz.block.ftl.schema.v1.Module - 0, // 2: xyz.block.ftl.v1.PullSchemaResponse.change_type:type_name -> xyz.block.ftl.v1.DeploymentChangeType - 14, // 3: xyz.block.ftl.v1.UpdateDeploymentRuntimeRequest.event:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeEvent - 15, // 4: xyz.block.ftl.v1.UpdateSchemaRequest.event:type_name -> xyz.block.ftl.schema.v1.Event - 11, // 5: xyz.block.ftl.v1.GetDeploymentsResponse.schema:type_name -> xyz.block.ftl.v1.DeployedSchema - 13, // 6: xyz.block.ftl.v1.DeployedSchema.schema:type_name -> xyz.block.ftl.schema.v1.Module - 16, // 7: xyz.block.ftl.v1.SchemaService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 1, // 8: xyz.block.ftl.v1.SchemaService.GetSchema:input_type -> xyz.block.ftl.v1.GetSchemaRequest - 3, // 9: xyz.block.ftl.v1.SchemaService.PullSchema:input_type -> xyz.block.ftl.v1.PullSchemaRequest - 5, // 10: xyz.block.ftl.v1.SchemaService.UpdateDeploymentRuntime:input_type -> xyz.block.ftl.v1.UpdateDeploymentRuntimeRequest - 7, // 11: xyz.block.ftl.v1.SchemaService.UpdateSchema:input_type -> xyz.block.ftl.v1.UpdateSchemaRequest - 9, // 12: xyz.block.ftl.v1.SchemaService.GetDeployments:input_type -> xyz.block.ftl.v1.GetDeploymentsRequest - 17, // 13: xyz.block.ftl.v1.SchemaService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 2, // 14: xyz.block.ftl.v1.SchemaService.GetSchema:output_type -> xyz.block.ftl.v1.GetSchemaResponse - 4, // 15: xyz.block.ftl.v1.SchemaService.PullSchema:output_type -> xyz.block.ftl.v1.PullSchemaResponse - 6, // 16: xyz.block.ftl.v1.SchemaService.UpdateDeploymentRuntime:output_type -> xyz.block.ftl.v1.UpdateDeploymentRuntimeResponse - 8, // 17: xyz.block.ftl.v1.SchemaService.UpdateSchema:output_type -> xyz.block.ftl.v1.UpdateSchemaResponse - 10, // 18: xyz.block.ftl.v1.SchemaService.GetDeployments:output_type -> xyz.block.ftl.v1.GetDeploymentsResponse - 13, // [13:19] is the sub-list for method output_type - 7, // [7:13] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 23, // 0: xyz.block.ftl.v1.GetSchemaResponse.schema:type_name -> xyz.block.ftl.schema.v1.Schema + 24, // 1: xyz.block.ftl.v1.GetSchemaResponse.changesets:type_name -> xyz.block.ftl.schema.v1.Changeset + 17, // 2: xyz.block.ftl.v1.PullSchemaResponse.changeset_created:type_name -> xyz.block.ftl.v1.PullSchemaResponse.ChangesetCreated + 18, // 3: xyz.block.ftl.v1.PullSchemaResponse.changeset_failed:type_name -> xyz.block.ftl.v1.PullSchemaResponse.ChangesetFailed + 19, // 4: xyz.block.ftl.v1.PullSchemaResponse.changeset_committed:type_name -> xyz.block.ftl.v1.PullSchemaResponse.ChangesetCommitted + 20, // 5: xyz.block.ftl.v1.PullSchemaResponse.deployment_created:type_name -> xyz.block.ftl.v1.PullSchemaResponse.DeploymentCreated + 21, // 6: xyz.block.ftl.v1.PullSchemaResponse.deployment_updated:type_name -> xyz.block.ftl.v1.PullSchemaResponse.DeploymentUpdated + 22, // 7: xyz.block.ftl.v1.PullSchemaResponse.deployment_removed:type_name -> xyz.block.ftl.v1.PullSchemaResponse.DeploymentRemoved + 25, // 8: xyz.block.ftl.v1.UpdateDeploymentRuntimeRequest.event:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeEvent + 26, // 9: xyz.block.ftl.v1.UpdateSchemaRequest.event:type_name -> xyz.block.ftl.schema.v1.Event + 12, // 10: xyz.block.ftl.v1.GetDeploymentsResponse.schema:type_name -> xyz.block.ftl.v1.DeployedSchema + 27, // 11: xyz.block.ftl.v1.CreateChangesetRequest.modules:type_name -> xyz.block.ftl.schema.v1.Module + 27, // 12: xyz.block.ftl.v1.DeployedSchema.schema:type_name -> xyz.block.ftl.schema.v1.Module + 24, // 13: xyz.block.ftl.v1.PullSchemaResponse.ChangesetCreated.changeset:type_name -> xyz.block.ftl.schema.v1.Changeset + 27, // 14: xyz.block.ftl.v1.PullSchemaResponse.DeploymentCreated.schema:type_name -> xyz.block.ftl.schema.v1.Module + 27, // 15: xyz.block.ftl.v1.PullSchemaResponse.DeploymentUpdated.schema:type_name -> xyz.block.ftl.schema.v1.Module + 28, // 16: xyz.block.ftl.v1.SchemaService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 0, // 17: xyz.block.ftl.v1.SchemaService.GetSchema:input_type -> xyz.block.ftl.v1.GetSchemaRequest + 2, // 18: xyz.block.ftl.v1.SchemaService.PullSchema:input_type -> xyz.block.ftl.v1.PullSchemaRequest + 4, // 19: xyz.block.ftl.v1.SchemaService.UpdateDeploymentRuntime:input_type -> xyz.block.ftl.v1.UpdateDeploymentRuntimeRequest + 6, // 20: xyz.block.ftl.v1.SchemaService.UpdateSchema:input_type -> xyz.block.ftl.v1.UpdateSchemaRequest + 8, // 21: xyz.block.ftl.v1.SchemaService.GetDeployments:input_type -> xyz.block.ftl.v1.GetDeploymentsRequest + 10, // 22: xyz.block.ftl.v1.SchemaService.CreateChangeset:input_type -> xyz.block.ftl.v1.CreateChangesetRequest + 13, // 23: xyz.block.ftl.v1.SchemaService.CommitChangeset:input_type -> xyz.block.ftl.v1.CommitChangesetRequest + 15, // 24: xyz.block.ftl.v1.SchemaService.FailChangeset:input_type -> xyz.block.ftl.v1.FailChangesetRequest + 29, // 25: xyz.block.ftl.v1.SchemaService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 1, // 26: xyz.block.ftl.v1.SchemaService.GetSchema:output_type -> xyz.block.ftl.v1.GetSchemaResponse + 3, // 27: xyz.block.ftl.v1.SchemaService.PullSchema:output_type -> xyz.block.ftl.v1.PullSchemaResponse + 5, // 28: xyz.block.ftl.v1.SchemaService.UpdateDeploymentRuntime:output_type -> xyz.block.ftl.v1.UpdateDeploymentRuntimeResponse + 7, // 29: xyz.block.ftl.v1.SchemaService.UpdateSchema:output_type -> xyz.block.ftl.v1.UpdateSchemaResponse + 9, // 30: xyz.block.ftl.v1.SchemaService.GetDeployments:output_type -> xyz.block.ftl.v1.GetDeploymentsResponse + 11, // 31: xyz.block.ftl.v1.SchemaService.CreateChangeset:output_type -> xyz.block.ftl.v1.CreateChangesetResponse + 14, // 32: xyz.block.ftl.v1.SchemaService.CommitChangeset:output_type -> xyz.block.ftl.v1.CommitChangesetResponse + 16, // 33: xyz.block.ftl.v1.SchemaService.FailChangeset:output_type -> xyz.block.ftl.v1.FailChangesetResponse + 25, // [25:34] is the sub-list for method output_type + 16, // [16:25] is the sub-list for method input_type + 16, // [16:16] is the sub-list for extension type_name + 16, // [16:16] is the sub-list for extension extendee + 0, // [0:16] is the sub-list for field type_name } func init() { file_xyz_block_ftl_v1_schemaservice_proto_init() } @@ -769,20 +1494,30 @@ func file_xyz_block_ftl_v1_schemaservice_proto_init() { return } file_xyz_block_ftl_v1_ftl_proto_init() - file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[3].OneofWrappers = []any{} + file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[3].OneofWrappers = []any{ + (*PullSchemaResponse_ChangesetCreated_)(nil), + (*PullSchemaResponse_ChangesetFailed_)(nil), + (*PullSchemaResponse_ChangesetCommitted_)(nil), + (*PullSchemaResponse_DeploymentCreated_)(nil), + (*PullSchemaResponse_DeploymentUpdated_)(nil), + (*PullSchemaResponse_DeploymentRemoved_)(nil), + } + file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[4].OneofWrappers = []any{} + file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[20].OneofWrappers = []any{} + file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[21].OneofWrappers = []any{} + file_xyz_block_ftl_v1_schemaservice_proto_msgTypes[22].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xyz_block_ftl_v1_schemaservice_proto_rawDesc, - NumEnums: 1, - NumMessages: 11, + NumEnums: 0, + NumMessages: 23, NumExtensions: 0, NumServices: 1, }, GoTypes: file_xyz_block_ftl_v1_schemaservice_proto_goTypes, DependencyIndexes: file_xyz_block_ftl_v1_schemaservice_proto_depIdxs, - EnumInfos: file_xyz_block_ftl_v1_schemaservice_proto_enumTypes, MessageInfos: file_xyz_block_ftl_v1_schemaservice_proto_msgTypes, }.Build() File_xyz_block_ftl_v1_schemaservice_proto = out.File diff --git a/backend/protos/xyz/block/ftl/v1/schemaservice.proto b/backend/protos/xyz/block/ftl/v1/schemaservice.proto index 016e3fbdac..dbe2f773bc 100644 --- a/backend/protos/xyz/block/ftl/v1/schemaservice.proto +++ b/backend/protos/xyz/block/ftl/v1/schemaservice.proto @@ -11,32 +11,75 @@ option java_multiple_files = true; message GetSchemaRequest {} message GetSchemaResponse { ftl.schema.v1.Schema schema = 1; -} - -enum DeploymentChangeType { - DEPLOYMENT_CHANGE_TYPE_UNSPECIFIED = 0; - DEPLOYMENT_CHANGE_TYPE_ADDED = 1; - DEPLOYMENT_CHANGE_TYPE_REMOVED = 2; - DEPLOYMENT_CHANGE_TYPE_CHANGED = 3; + repeated ftl.schema.v1.Changeset changesets = 2; } message PullSchemaRequest {} message PullSchemaResponse { - // Will not be set for builtin modules. - optional string deployment_key = 1; - string module_name = 2; - // For deletes this will not be present. - optional ftl.schema.v1.Module schema = 4; + // ChangesetCreated is sent when a new changeset is created. + message ChangesetCreated { + ftl.schema.v1.Changeset changeset = 1; + } + + // ChangesetFailed is sent when a changeset fails. + message ChangesetFailed { + string key = 1; + string error = 2; + } + + // ChangesetFailed is sent when a changeset becomes canonical. + message ChangesetCommitted { + string key = 1; + } + + // Deployment created is sent when a deployment is new to the listener but is not part of a changeset. + message DeploymentCreated { + // Will not be set for builtin modules. + // optional string key = 1; + // string module_name = 2; + // If present, the deployment is not yet canonical as it is currently part of a changeset. + // optional string changeset = 3; + + optional ftl.schema.v1.Module schema = 1; + } + + message DeploymentUpdated { + // Will not be set for builtin modules. + // optional string key = 1; + // string module_name = 2; + // If present, the deployment is not yet canonical as it is currently part of a changeset. + optional string changeset = 1; + + optional ftl.schema.v1.Module schema = 2; + } + + message DeploymentRemoved { + // Will not be set for builtin modules. + optional string key = 1; + string module_name = 2; + + // If this is true then the module was removed as well as the deployment. + bool module_removed = 3; + } + + oneof event { + ChangesetCreated changeset_created = 4; + ChangesetFailed changeset_failed = 5; + ChangesetCommitted changeset_committed = 6; + DeploymentCreated deployment_created = 7; + DeploymentUpdated deployment_updated = 8; + DeploymentRemoved deployment_removed = 9; + } + // If true there are more schema changes immediately following this one as part of the initial batch. // If false this is the last schema change in the initial batch, but others may follow later. - bool more = 3; - DeploymentChangeType change_type = 5; - // If this is true then the module was removed as well as the deployment. This is only set for DEPLOYMENT_REMOVED. - bool module_removed = 6; + bool more = 31634; } message UpdateDeploymentRuntimeRequest { - ftl.schema.v1.ModuleRuntimeEvent event = 2; + string deployment = 1; + optional string changeset = 2; + ftl.schema.v1.ModuleRuntimeEvent event = 3; } message UpdateDeploymentRuntimeResponse {} @@ -52,12 +95,34 @@ message GetDeploymentsRequest {} message GetDeploymentsResponse { repeated DeployedSchema schema = 1; } +message CreateChangesetRequest { + repeated ftl.schema.v1.Module modules = 1; +} + +message CreateChangesetResponse { + // The changeset key of the newly created changeset. + string changeset = 1; +} message DeployedSchema { string deployment_key = 1; ftl.schema.v1.Module schema = 2; bool is_active = 3; } +message CommitChangesetRequest { + // The changeset key to commit. + string changeset = 1; +} + +message CommitChangesetResponse {} + +message FailChangesetRequest { + // The changeset key to fail. + string changeset = 1; + string error = 2; +} + +message FailChangesetResponse {} service SchemaService { // Ping service for readiness. @@ -86,4 +151,13 @@ service SchemaService { // GetDeployments is used to get the schema for all deployments. rpc GetDeployments(GetDeploymentsRequest) returns (GetDeploymentsResponse); + + // CreateChangeset creates a new changeset. + rpc CreateChangeset(CreateChangesetRequest) returns (CreateChangesetResponse); + + // CommitChangeset makes all deployments for the changeset part of the canonical schema. + rpc CommitChangeset(CommitChangesetRequest) returns (CommitChangesetResponse); + + // FailChangeset fails an active changeset. + rpc FailChangeset(FailChangesetRequest) returns (FailChangesetResponse); } diff --git a/backend/provisioner/controller_provisioner.go b/backend/provisioner/controller_provisioner.go deleted file mode 100644 index 5a7a15f330..0000000000 --- a/backend/provisioner/controller_provisioner.go +++ /dev/null @@ -1,48 +0,0 @@ -package provisioner - -import ( - "context" - "fmt" - - "connectrpc.com/connect" - "github.com/alecthomas/types/optional" - - ftlv1 "github.com/block/ftl/backend/protos/xyz/block/ftl/v1" - "github.com/block/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" - "github.com/block/ftl/common/schema" - "github.com/block/ftl/internal/key" - "github.com/block/ftl/internal/log" -) - -// NewControllerProvisioner creates a new provisioner that uses the FTL controller to provision modules -func NewControllerProvisioner(client ftlv1connect.ControllerServiceClient) *InMemProvisioner { - return NewEmbeddedProvisioner(map[schema.ResourceType]InMemResourceProvisionerFn{ - schema.ResourceTypeModule: func(ctx context.Context, moduleName string, res schema.Provisioned) (schema.Event, error) { - logger := log.FromContext(ctx) - logger.Debugf("Provisioning module: %s", moduleName) - - module, ok := res.(*schema.Module) - if !ok { - return nil, fmt.Errorf("expected module, got %T", res) - } - - resp, err := client.CreateDeployment(ctx, connect.NewRequest(&ftlv1.CreateDeploymentRequest{ - Schema: module.ToProto(), - })) - if err != nil { - return nil, fmt.Errorf("failed to create deployment: %w", err) - } - deploymentKey, err := key.ParseDeploymentKey(resp.Msg.DeploymentKey) - if err != nil { - return nil, fmt.Errorf("failed to parse deployment key: %w", err) - } - - return &schema.ModuleRuntimeEvent{ - Module: module.Name, - Deployment: optional.Some(schema.ModuleRuntimeDeployment{ - DeploymentKey: deploymentKey, - }), - }, nil - }, - }) -} diff --git a/backend/provisioner/deployment.go b/backend/provisioner/deployment.go index 4dc1f25a2f..30fe1ccbbc 100644 --- a/backend/provisioner/deployment.go +++ b/backend/provisioner/deployment.go @@ -102,7 +102,11 @@ func (t *Task) Progress(ctx context.Context) error { if err != nil { return fmt.Errorf("failed to parse event: %w", err) } - err = t.deployment.DeploymentState.ApplyEvent(event) + err = t.deployment.EventHandler(eventpb) + if err != nil { + return fmt.Errorf("schema server failed to handle provisioning event: %w", err) + } + err = t.deployment.DeploymentState.ApplyEvent(ctx, event) if err != nil { return fmt.Errorf("failed to apply event: %w", err) } @@ -121,6 +125,7 @@ type Deployment struct { DeploymentState *schemaservice.SchemaState Previous *schema.Module + EventHandler func(event *schemapb.Event) error } // next running or pending task. Nil if all tasks are done. diff --git a/backend/provisioner/deployment_test.go b/backend/provisioner/deployment_test.go index a2265ef276..5bd25a28b9 100644 --- a/backend/provisioner/deployment_test.go +++ b/backend/provisioner/deployment_test.go @@ -14,6 +14,7 @@ import ( "github.com/block/ftl/backend/provisioner" schemapb "github.com/block/ftl/common/protos/xyz/block/ftl/schema/v1" "github.com/block/ftl/common/schema" + "github.com/block/ftl/internal/key" "github.com/block/ftl/internal/log" ) @@ -89,11 +90,16 @@ func TestDeployment_Progress(t *testing.T) { dpl := registry.CreateDeployment(ctx, &schema.Module{ Name: "test-module", + Runtime: &schema.ModuleRuntime{ + Deployment: &schema.ModuleRuntimeDeployment{DeploymentKey: key.NewDeploymentKey("test-module")}, + }, Decls: []schema.Decl{ &schema.Database{Name: "a", Type: "mysql"}, &schema.Database{Name: "b", Type: "postgres"}, }, - }, nil) + }, nil, func(event *schemapb.Event) error { + return nil + }) assert.Equal(t, 2, len(dpl.State().Pending)) diff --git a/backend/provisioner/registry.go b/backend/provisioner/registry.go index a849333c33..e196115767 100644 --- a/backend/provisioner/registry.go +++ b/backend/provisioner/registry.go @@ -10,6 +10,7 @@ import ( "github.com/block/ftl/backend/provisioner/scaling" "github.com/block/ftl/backend/schemaservice" "github.com/block/ftl/common/plugin" + schemapb "github.com/block/ftl/common/protos/xyz/block/ftl/schema/v1" "github.com/block/ftl/common/schema" "github.com/block/ftl/internal/log" ) @@ -83,8 +84,6 @@ func registryFromConfig(ctx context.Context, cfg *provisionerPluginConfig, contr func provisionerIDToProvisioner(ctx context.Context, id string, controller ftlv1connect.ControllerServiceClient, scaling scaling.RunnerScaling) (provisionerconnect.ProvisionerPluginServiceClient, error) { switch id { - case "controller": - return NewControllerProvisioner(controller), nil case "kubernetes": // TODO: move this into a plugin return NewRunnerScalingProvisioner(scaling), nil @@ -120,12 +119,12 @@ func (reg *ProvisionerRegistry) Register(id string, handler provisionerconnect.P } // CreateDeployment to take the system to the desired state -func (reg *ProvisionerRegistry) CreateDeployment(ctx context.Context, desiredModule, existingModule *schema.Module) *Deployment { +func (reg *ProvisionerRegistry) CreateDeployment(ctx context.Context, desiredModule, existingModule *schema.Module, eventHandler func(event *schemapb.Event) error) *Deployment { logger := log.FromContext(ctx) module := desiredModule.GetName() state := schemaservice.NewSchemaState() - err := state.ApplyEvent(&schema.ProvisioningCreatedEvent{ + err := state.ApplyEvent(ctx, &schema.ProvisioningCreatedEvent{ DesiredModule: desiredModule, }) if err != nil { @@ -136,6 +135,7 @@ func (reg *ProvisionerRegistry) CreateDeployment(ctx context.Context, desiredMod deployment := &Deployment{ DeploymentState: &state, Previous: existingModule, + EventHandler: eventHandler, } allDesired := schema.GetProvisionedResources(desiredModule) diff --git a/backend/provisioner/runner_scaling_provisioner.go b/backend/provisioner/runner_scaling_provisioner.go index 0185e9af4b..951aa5049d 100644 --- a/backend/provisioner/runner_scaling_provisioner.go +++ b/backend/provisioner/runner_scaling_provisioner.go @@ -39,7 +39,7 @@ func provisionRunner(scaling scaling.RunnerScaling) InMemResourceProvisionerFn { if deployment.IsZero() { return nil, fmt.Errorf("failed to find deployment for runner") } - logger.Debugf("provisioning runner: %s.%s for deployment %s", module, rc.ResourceID(), deployment) + logger.Debugf("Provisioning runner: %s.%s for deployment %s", module.Name, rc.ResourceID(), deployment) cron := false http := false for _, decl := range module.Decls { @@ -87,26 +87,23 @@ func provisionRunner(scaling scaling.RunnerScaling) InMemResourceProvisionerFn { } schemaClient := rpc.ClientFromContext[ftlv1connect.SchemaServiceClient](ctx) - controllerClient := rpc.ClientFromContext[ftlv1connect.ControllerServiceClient](ctx) deps, err := scaling.TerminatePreviousDeployments(ctx, module.Name, deployment.String()) if err != nil { logger.Errorf(err, "failed to terminate previous deployments") } else { - var zero int32 for _, dep := range deps { - _, err := controllerClient.UpdateDeploy(ctx, connect.NewRequest(&ftlv1.UpdateDeployRequest{DeploymentKey: dep, MinReplicas: &zero})) + _, err = schemaClient.UpdateDeploymentRuntime(ctx, connect.NewRequest(&ftlv1.UpdateDeploymentRuntimeRequest{Deployment: deployment.String(), Event: &schemapb.ModuleRuntimeEvent{Scaling: &schemapb.ModuleRuntimeScaling{MinReplicas: 0}}})) if err != nil { logger.Errorf(err, "failed to update deployment %s", dep) } } } - logger.Debugf("updating module runtime for %s with endpoint %s", module, endpointURI) + logger.Debugf("Updating module runtime for %s with endpoint %s", module.Name, endpointURI) dk := deployment.String() _, err = schemaClient.UpdateDeploymentRuntime(ctx, connect.NewRequest(&ftlv1.UpdateDeploymentRuntimeRequest{Event: &schemapb.ModuleRuntimeEvent{ - Module: moduleName, - DeploymentKey: &dk, + DeploymentKey: dk, Deployment: &schemapb.ModuleRuntimeDeployment{ DeploymentKey: deployment.String(), Endpoint: endpointURI, @@ -116,7 +113,7 @@ func provisionRunner(scaling scaling.RunnerScaling) InMemResourceProvisionerFn { return nil, fmt.Errorf("failed to update module runtime: %w", err) } return &schema.ModuleRuntimeEvent{ - Module: moduleName, + DeploymentKey: deployment, Deployment: optional.Some(schema.ModuleRuntimeDeployment{ DeploymentKey: deployment, Endpoint: endpointURI, diff --git a/backend/provisioner/service.go b/backend/provisioner/service.go index 2466291e01..6efff42856 100644 --- a/backend/provisioner/service.go +++ b/backend/provisioner/service.go @@ -12,16 +12,17 @@ import ( "github.com/BurntSushi/toml" "github.com/alecthomas/kong" "github.com/puzpuzpuz/xsync/v3" - "golang.org/x/sync/errgroup" - provisionerconnect "github.com/block/ftl/backend/protos/xyz/block/ftl/provisioner/v1beta1/provisionerpbconnect" ftlv1 "github.com/block/ftl/backend/protos/xyz/block/ftl/v1" - ftlv1connect "github.com/block/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" + schemaconnect "github.com/block/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" "github.com/block/ftl/backend/provisioner/scaling" + schemapb "github.com/block/ftl/common/protos/xyz/block/ftl/schema/v1" "github.com/block/ftl/common/reflect" "github.com/block/ftl/common/schema" + "github.com/block/ftl/internal/channels" + "github.com/block/ftl/internal/key" "github.com/block/ftl/internal/log" - "github.com/block/ftl/internal/rpc" + "github.com/block/ftl/internal/schema/schemaeventsource" ) // CommonProvisionerConfig is shared config between the production controller and development server. @@ -43,23 +44,25 @@ func (c *Config) SetDefaults() { } type Service struct { - currentModules *xsync.MapOf[string, *schema.Module] - controllerClient ftlv1connect.ControllerServiceClient - registry *ProvisionerRegistry + currentModules *xsync.MapOf[string, *schema.Module] + registry *ProvisionerRegistry + eventSource *schemaeventsource.EventSource + schemaClient schemaconnect.SchemaServiceClient } -var _ provisionerconnect.ProvisionerServiceHandler = (*Service)(nil) - func New( ctx context.Context, config Config, - controllerClient ftlv1connect.ControllerServiceClient, registry *ProvisionerRegistry, + schemaClient schemaconnect.SchemaServiceClient, ) (*Service, error) { + + eventSource := schemaeventsource.New(ctx, schemaClient) return &Service{ - controllerClient: controllerClient, - currentModules: xsync.NewMapOf[string, *schema.Module](), - registry: registry, + currentModules: xsync.NewMapOf[string, *schema.Module](), + registry: registry, + eventSource: &eventSource, + schemaClient: schemaClient, }, nil } @@ -67,78 +70,44 @@ func (s *Service) Ping(context.Context, *connect.Request[ftlv1.PingRequest]) (*c return &connect.Response[ftlv1.PingResponse]{}, nil } -func (s *Service) CreateDeployment(ctx context.Context, req *connect.Request[ftlv1.CreateDeploymentRequest]) (*connect.Response[ftlv1.CreateDeploymentResponse], error) { - logger := log.FromContext(ctx) - // TODO: Block deployments to make sure only one module is modified at a time - moduleName := req.Msg.Schema.Name - - existingModule, _ := s.currentModules.Load(moduleName) - desiredModule, err := schema.ValidatedModuleFromProto(req.Msg.Schema) - if err != nil { - return nil, fmt.Errorf("invalid desired module: %w", err) - } - - if existingModule != nil { - syncExistingRuntimes(existingModule, desiredModule) - } - - deployment := s.registry.CreateDeployment(ctx, desiredModule, existingModule) - running := true - logger.Debugf("Running deployment for module %s", moduleName) - for running { - r, err := deployment.Progress(ctx) - if err != nil { - // TODO: Deal with failed deployments - return nil, fmt.Errorf("error running a provisioner: %w", err) - } - running = r - } - logger.Debugf("Finished deployment for module %s", moduleName) - - module, err := deployment.DeploymentState.GetProvisioning(moduleName) - if err != nil { - return nil, fmt.Errorf("error getting module: %w", err) - } - - deploymentKey := module.Runtime.Deployment.DeploymentKey - return connect.NewResponse(&ftlv1.CreateDeploymentResponse{ - DeploymentKey: deploymentKey.String(), - }), nil -} - // Start the Provisioner. Blocks until the context is cancelled. func Start( ctx context.Context, config Config, registry *ProvisionerRegistry, - controllerClient ftlv1connect.ControllerServiceClient, + schemaClient schemaconnect.SchemaServiceClient, ) error { config.SetDefaults() logger := log.FromContext(ctx) logger.Debugf("Starting FTL provisioner") - svc, err := New(ctx, config, controllerClient, registry) + svc, err := New(ctx, config, registry, schemaClient) if err != nil { return err } logger.Debugf("Provisioner available at: %s", config.Bind) logger.Debugf("Using FTL endpoint: %s", config.ControllerEndpoint) - - g, ctx := errgroup.WithContext(ctx) - g.Go(func() error { - return rpc.Serve(ctx, config.Bind, - rpc.GRPC(provisionerconnect.NewProvisionerServiceHandler, svc), - rpc.PProf(), - ) - }) - if err := g.Wait(); err != nil { - return fmt.Errorf("error waiting for rpc.Serve: %w", err) + // Hack: as we only have one changeset at a time at the moment, we can just keep track of the last key + + var lastKey key.Changeset + for event := range channels.IterContext(ctx, svc.eventSource.Events()) { + if cs, ok := event.ActiveChangeset().Get(); ok { + if cs.Key != lastKey { + lastKey = cs.Key + err := svc.ProvisionChangeset(ctx, cs) + if err != nil { + logger.Errorf(err, "Error provisioning changeset") + continue + } + logger.Debugf("Changeset %s provisioned", cs.Key) + } + } } return nil } -func RegistryFromConfigFile(ctx context.Context, file *os.File, controller ftlv1connect.ControllerServiceClient, scaling scaling.RunnerScaling) (*ProvisionerRegistry, error) { +func RegistryFromConfigFile(ctx context.Context, file *os.File, controller schemaconnect.ControllerServiceClient, scaling scaling.RunnerScaling) (*ProvisionerRegistry, error) { config := provisionerPluginConfig{} bytes, err := io.ReadAll(bufio.NewReader(file)) if err != nil { @@ -156,47 +125,47 @@ func RegistryFromConfigFile(ctx context.Context, file *os.File, controller ftlv1 return registry, nil } -// Deployment client calls to ftl-controller +func (s *Service) ProvisionChangeset(ctx context.Context, req *schema.Changeset) error { + logger := log.FromContext(ctx) + // TODO: Block deployments to make sure only one module is modified at a time + for _, module := range req.Modules { + moduleName := module.Name -func (s *Service) GetArtefactDiffs(ctx context.Context, req *connect.Request[ftlv1.GetArtefactDiffsRequest]) (*connect.Response[ftlv1.GetArtefactDiffsResponse], error) { - resp, err := s.controllerClient.GetArtefactDiffs(ctx, req) + existingModule, _ := s.currentModules.Load(moduleName) - if err != nil { - return nil, fmt.Errorf("call to ftl-controller failed: %w", err) - } - return connect.NewResponse(resp.Msg), nil -} + if existingModule != nil { + syncExistingRuntimes(existingModule, module) + } -func (s *Service) ReplaceDeploy(ctx context.Context, req *connect.Request[ftlv1.ReplaceDeployRequest]) (*connect.Response[ftlv1.ReplaceDeployResponse], error) { - resp, err := s.controllerClient.ReplaceDeploy(ctx, req) - if err != nil { - return nil, fmt.Errorf("call to ftl-controller failed: %w", err) - } - return connect.NewResponse(resp.Msg), nil -} + deployment := s.registry.CreateDeployment(ctx, module, existingModule, func(event *schemapb.Event) error { + _, err := s.schemaClient.UpdateSchema(ctx, connect.NewRequest(&ftlv1.UpdateSchemaRequest{Event: event})) + if err != nil { + return fmt.Errorf("error updating schema: %w", err) + } + return nil + }) + running := true + logger.Debugf("Running deployment for module %s", moduleName) + for running { + r, err := deployment.Progress(ctx) + if err != nil { + // TODO: Deal with failed deployments + return fmt.Errorf("error running a provisioner: %w", err) + } + running = r + } -func (s *Service) Status(ctx context.Context, req *connect.Request[ftlv1.StatusRequest]) (*connect.Response[ftlv1.StatusResponse], error) { - resp, err := s.controllerClient.Status(ctx, req) - if err != nil { - return nil, fmt.Errorf("call to ftl-controller failed: %w", err) - } - return connect.NewResponse(resp.Msg), nil -} + logger.Debugf("Finished deployment for module %s", moduleName) -func (s *Service) UpdateDeploy(ctx context.Context, req *connect.Request[ftlv1.UpdateDeployRequest]) (*connect.Response[ftlv1.UpdateDeployResponse], error) { - resp, err := s.controllerClient.UpdateDeploy(ctx, req) - if err != nil { - return nil, fmt.Errorf("call to ftl-controller failed: %w", err) } - return connect.NewResponse(resp.Msg), nil -} -func (s *Service) UploadArtefact(ctx context.Context, req *connect.Request[ftlv1.UploadArtefactRequest]) (*connect.Response[ftlv1.UploadArtefactResponse], error) { - resp, err := s.controllerClient.UploadArtefact(ctx, req) + //TODO: huge hack, this needs be be changed as it means all provisioning has to happen in a single goroutine + // I don't even know if this is the right place to commit the changeset + _, err := s.schemaClient.CommitChangeset(ctx, connect.NewRequest(&ftlv1.CommitChangesetRequest{Changeset: req.Key.String()})) if err != nil { - return nil, fmt.Errorf("call to ftl-controller failed: %w", err) + return fmt.Errorf("error committing changeset: %w", err) } - return connect.NewResponse(resp.Msg), nil + return nil } func syncExistingRuntimes(existingModule, desiredModule *schema.Module) { diff --git a/backend/runner/proxy/proxy.go b/backend/runner/proxy/proxy.go index 2c70e60d02..464d061243 100644 --- a/backend/runner/proxy/proxy.go +++ b/backend/runner/proxy/proxy.go @@ -32,6 +32,7 @@ var _ ftldeploymentconnect.DeploymentServiceHandler = &Service{} type moduleVerbService struct { client ftlv1connect.VerbServiceClient deployment key.Deployment + uri string } type Service struct { @@ -40,15 +41,26 @@ type Service struct { moduleVerbService *xsync.MapOf[string, moduleVerbService] timelineClient *timelineclient.Client queryService *query.MultiService + localModuleName string + bindAddress string + localDeployment key.Deployment } -func New(controllerModuleService ftldeploymentconnect.DeploymentServiceClient, leaseClient ftlleaseconnect.LeaseServiceClient, timelineClient *timelineclient.Client, queryService *query.MultiService) *Service { +func New(controllerModuleService ftldeploymentconnect.DeploymentServiceClient, + leaseClient ftlleaseconnect.LeaseServiceClient, + timelineClient *timelineclient.Client, + queryService *query.MultiService, + bindAddress string, + localDeployment key.Deployment) *Service { proxy := &Service{ controllerDeploymentService: controllerModuleService, controllerLeaseService: leaseClient, moduleVerbService: xsync.NewMapOf[string, moduleVerbService](), timelineClient: timelineClient, queryService: queryService, + localModuleName: localDeployment.Payload.Module, + bindAddress: bindAddress, + localDeployment: localDeployment, } return proxy } @@ -65,7 +77,7 @@ func (r *Service) GetDeploymentContext(ctx context.Context, c *connect.Request[f if rcv { logger.Debugf("Received DeploymentContext from module: %v", moduleContext.Msg()) for _, route := range moduleContext.Msg().Routes { - logger.Debugf("Adding route: %s -> %s", route.Deployment, route.Uri) + logger.Debugf("Adding proxy route: %s -> %s", route.Deployment, route.Uri) deployment, err := key.ParseDeploymentKey(route.Deployment) if err != nil { @@ -76,9 +88,16 @@ func (r *Service) GetDeploymentContext(ctx context.Context, c *connect.Request[f r.moduleVerbService.Store(module, moduleVerbService{ client: rpc.Dial(ftlv1connect.NewVerbServiceClient, route.Uri, log.Error), deployment: deployment, + uri: route.Uri, }) } } + logger.Debugf("Adding localhost route: %s -> %s", r.localDeployment, r.bindAddress) + r.moduleVerbService.Store(r.localModuleName, moduleVerbService{ + client: rpc.Dial(ftlv1connect.NewVerbServiceClient, r.bindAddress, log.Error), + deployment: r.localDeployment, + uri: r.bindAddress, + }) err := c2.Send(moduleContext.Msg()) if err != nil { return fmt.Errorf("failed to send message: %w", err) @@ -164,7 +183,7 @@ func (r *Service) Call(ctx context.Context, req *connect.Request[ftlv1.CallReque callEvent.Response = result.Err[*ftlv1.CallResponse](err) r.timelineClient.Publish(ctx, callEvent) observability.Calls.Request(ctx, req.Msg.Verb, start, optional.Some("verb call failed")) - return nil, fmt.Errorf("failed to proxy verb: %w", err) + return nil, fmt.Errorf("failed to proxy verb to %s: %w", verbService.uri, err) } resp := connect.NewResponse(originalResp.Msg) callEvent.Response = result.Ok(resp.Msg) diff --git a/backend/runner/runner.go b/backend/runner/runner.go index d8e9b74b15..4cda651e97 100644 --- a/backend/runner/runner.go +++ b/backend/runner/runner.go @@ -356,7 +356,8 @@ func (s *Service) deploy(ctx context.Context, key key.Deployment, module *schema leaseServiceClient := rpc.Dial(ftlleaseconnect.NewLeaseServiceClient, s.config.LeaseEndpoint.String(), log.Error) - s.proxy = proxy.New(deploymentServiceClient, leaseServiceClient, s.timelineClient, s.queryServices) + s.proxy = proxy.New(deploymentServiceClient, leaseServiceClient, s.timelineClient, s.queryServices, + s.config.Bind.String(), s.config.Deployment) pubSub, err := pubsub.New(module, key, s, s.timelineClient) if err != nil { diff --git a/backend/schemaservice/changesets.go b/backend/schemaservice/changesets.go new file mode 100644 index 0000000000..f494cdd850 --- /dev/null +++ b/backend/schemaservice/changesets.go @@ -0,0 +1,31 @@ +package schemaservice + +import ( + "fmt" + + "github.com/alecthomas/types/optional" + + "github.com/block/ftl/common/schema" + "github.com/block/ftl/internal/key" +) + +func (r *SchemaState) ActiveChangeset() optional.Option[*ChangesetDetails] { + for _, changeset := range r.changesets { + if changeset.State == schema.ChangesetStatePreparing { + return optional.Some(changeset) + } + } + return optional.None[*ChangesetDetails]() +} + +func (r *SchemaState) GetChangeset(changeset key.Changeset) (*ChangesetDetails, error) { + c, ok := r.changesets[changeset] + if !ok { + return nil, fmt.Errorf("changeset %s not found", changeset) + } + return c, nil +} + +func (r *SchemaState) GetChangesets() map[key.Changeset]*ChangesetDetails { + return r.changesets +} diff --git a/backend/schemaservice/eventextractor.go b/backend/schemaservice/eventextractor.go index 229aa2c4dc..72a18ecd8d 100644 --- a/backend/schemaservice/eventextractor.go +++ b/backend/schemaservice/eventextractor.go @@ -2,11 +2,14 @@ package schemaservice import ( "iter" + "slices" "github.com/alecthomas/types/tuple" + "golang.org/x/exp/maps" "github.com/block/ftl/common/schema" "github.com/block/ftl/internal/iterops" + "github.com/block/ftl/internal/key" ) // EventExtractor calculates controller events from changes to the state. @@ -16,15 +19,76 @@ func EventExtractor(diff tuple.Pair[SchemaState, SchemaState]) iter.Seq[schema.E previous := diff.A current := diff.B - previousAll := previous.GetDeployments() - for key, deployment := range current.GetDeployments() { - pd, ok := previousAll[key] + // previousAllDeployments will be updated with committed changesets so that we only send relevant + // DeploymentCreatedEvent and DeploymentSchemaUpdatedEvent events after changeset events have been processed by the receiver. + previousAllDeployments := previous.GetDeployments() + + previousAllChangesets := previous.GetChangesets() + allChangesets := maps.Values(current.GetChangesets()) + handledDeployments := map[key.Deployment]bool{} + slices.SortFunc(allChangesets, func(a, b *ChangesetDetails) int { + return a.CreatedAt.Compare(b.CreatedAt) + }) + for _, changeset := range allChangesets { + pc, ok := previousAllChangesets[changeset.Key] + if ok { + for _, key := range changeset.Deployments { + pd, ok := previous.deployments[key] + deployment := current.deployments[key] + if ok && !pd.Equals(deployment) { + handledDeployments[key] = true + // TODO: this seems super inefficient, we should not need to do equality checks on every deployment + events = append(events, &schema.DeploymentSchemaUpdatedEvent{ + Key: key, + Schema: deployment, + Changeset: &changeset.Key, + }) + } + } + // Commit final state of changeset + if changeset.State == schema.ChangesetStateCommitted && pc.State != schema.ChangesetStateCommitted { + events = append(events, &schema.ChangesetCommittedEvent{ + Key: changeset.Key, + }) + } else if changeset.State == schema.ChangesetStateFailed && pc.State != schema.ChangesetStateFailed { + events = append(events, &schema.ChangesetFailedEvent{ + Key: changeset.Key, + Error: changeset.Error, + }) + } + } else { + // New changeset and associated modules + events = append(events, &schema.ChangesetCreatedEvent{ + Changeset: hydrateChangeset(¤t, changeset), + }) + // Find new deployments from the changeset + for _, deployment := range changeset.Deployments { + // changeset is always a new deployment + events = append(events, &schema.DeploymentCreatedEvent{ + Key: deployment, + Schema: current.deployments[deployment], + Changeset: &changeset.Key, + }) + handledDeployments[deployment] = true + } + } + } + + for key, deployment := range current.GetAllActiveDeployments() { + if handledDeployments[key] { + // Already handled in the changeset + continue + } + pd, ok := previousAllDeployments[key] if !ok { + // We have lost the changeset that created this, this should only happen + // if the changeset was deleted as part of raft cleanup. events = append(events, &schema.DeploymentCreatedEvent{ Key: key, Schema: deployment, }) } else if !pd.Equals(deployment) { + // TODO: this seems super inefficient, we should not need to do equality checks on every deployment events = append(events, &schema.DeploymentSchemaUpdatedEvent{ Key: key, Schema: deployment, @@ -32,13 +96,13 @@ func EventExtractor(diff tuple.Pair[SchemaState, SchemaState]) iter.Seq[schema.E } } - currentActive := current.GetActiveDeployments() + currentActive := current.GetCanonicalDeployments() currentAll := current.GetDeployments() currentModules := map[string]bool{} for _, deployment := range currentAll { currentModules[deployment.Name] = true } - for key, deployment := range previous.GetActiveDeployments() { + for key, deployment := range previous.GetCanonicalDeployments() { if _, ok := currentActive[key]; !ok { _, ok2 := currentModules[deployment.Name] events = append(events, &schema.DeploymentDeactivatedEvent{ diff --git a/backend/schemaservice/eventextractor_test.go b/backend/schemaservice/eventextractor_test.go index 7fdf10f11b..1a3d4b9b08 100644 --- a/backend/schemaservice/eventextractor_test.go +++ b/backend/schemaservice/eventextractor_test.go @@ -7,6 +7,7 @@ import ( "github.com/alecthomas/assert/v2" "github.com/alecthomas/types/tuple" + "github.com/block/ftl/common/schema" "github.com/block/ftl/internal/key" ) @@ -14,6 +15,8 @@ import ( func TestEventExtractor(t *testing.T) { now := time.Now() + parsed, err := key.ParseDeploymentKey("dpl-test-sjkfislfjslfas") + assert.NoError(t, err) tests := []struct { name string previous SchemaState @@ -24,6 +27,7 @@ func TestEventExtractor(t *testing.T) { name: "new deployment creates deployment event", previous: SchemaState{}, current: SchemaState{ + activeDeployments: map[string]key.Deployment{"test": parsed}, deployments: map[key.Deployment]*schema.Module{ deploymentKey(t, "dpl-test-sjkfislfjslfas"): { Name: "test", @@ -51,6 +55,7 @@ func TestEventExtractor(t *testing.T) { { name: "schema update creates schema updated event", previous: SchemaState{ + activeDeployments: map[string]key.Deployment{"test": parsed}, deployments: map[key.Deployment]*schema.Module{ deploymentKey(t, "dpl-test-sjkfislfjslfas"): { Name: "test", @@ -58,6 +63,7 @@ func TestEventExtractor(t *testing.T) { }, }, current: SchemaState{ + activeDeployments: map[string]key.Deployment{"test": parsed}, deployments: map[key.Deployment]*schema.Module{ deploymentKey(t, "dpl-test-sjkfislfjslfas"): { Name: "test", @@ -80,8 +86,8 @@ func TestEventExtractor(t *testing.T) { Name: "test", }, }, - activeDeployments: map[key.Deployment]bool{ - deploymentKey(t, "dpl-test-sjkfislfjslfas"): true, + activeDeployments: map[string]key.Deployment{ + "test": deploymentKey(t, "dpl-test-sjkfislfjslfas"), }, }, current: SchemaState{ @@ -90,7 +96,7 @@ func TestEventExtractor(t *testing.T) { Name: "test", }, }, - activeDeployments: map[key.Deployment]bool{}, + activeDeployments: map[string]key.Deployment{}, }, want: []schema.Event{ &schema.DeploymentDeactivatedEvent{ @@ -106,8 +112,8 @@ func TestEventExtractor(t *testing.T) { Name: "test", }, }, - activeDeployments: map[key.Deployment]bool{ - deploymentKey(t, "dpl-test-sjkfislfjslfaa"): true, + activeDeployments: map[string]key.Deployment{ + "test": deploymentKey(t, "dpl-test-sjkfislfjslfaa"), }, }, current: SchemaState{ diff --git a/backend/schemaservice/events.go b/backend/schemaservice/events.go index 21b3b47ed6..8479af579c 100644 --- a/backend/schemaservice/events.go +++ b/backend/schemaservice/events.go @@ -1,6 +1,7 @@ package schemaservice import ( + "context" "fmt" "github.com/alecthomas/types/optional" @@ -8,12 +9,13 @@ import ( "github.com/block/ftl/common/schema" "github.com/block/ftl/common/slices" "github.com/block/ftl/internal/key" + "github.com/block/ftl/internal/log" ) // TODO: these should be event methods once we can move them to this package // ApplyEvent applies an event to the schema state -func (r SchemaState) ApplyEvent(event schema.Event) error { +func (r SchemaState) ApplyEvent(ctx context.Context, event schema.Event) error { if err := event.Validate(); err != nil { return fmt.Errorf("invalid event: %w", err) } @@ -38,6 +40,12 @@ func (r SchemaState) ApplyEvent(event schema.Event) error { return handleModuleRuntimeEvent(r, e) case *schema.ProvisioningCreatedEvent: return handleProvisioningCreatedEvent(r, e) + case *schema.ChangesetCreatedEvent: + return handleChangesetCreatedEvent(r, e) + case *schema.ChangesetCommittedEvent: + return handleChangesetCommittedEvent(ctx, r, e) + case *schema.ChangesetFailedEvent: + return handleChangesetFailedEvent(r, e) default: return fmt.Errorf("unknown event type: %T", e) } @@ -73,11 +81,10 @@ func handleDeploymentActivatedEvent(t SchemaState, e *schema.DeploymentActivated existing, ok := t.deployments[e.Key] if !ok { return fmt.Errorf("deployment %s not found", e.Key) - } existing.ModRuntime().ModDeployment().ActivatedAt = optional.Some(e.ActivatedAt) existing.ModRuntime().ModScaling().MinReplicas = int32(e.MinReplicas) - t.activeDeployments[e.Key] = true + t.activeDeployments[existing.Name] = e.Key return nil } @@ -85,17 +92,18 @@ func handleDeploymentDeactivatedEvent(t SchemaState, e *schema.DeploymentDeactiv existing, ok := t.deployments[e.Key] if !ok { return fmt.Errorf("deployment %s not found", e.Key) - } existing.ModRuntime().ModScaling().MinReplicas = 0 - delete(t.activeDeployments, e.Key) + if t.activeDeployments[existing.Name] == e.Key { + delete(t.activeDeployments, existing.Name) + } return nil } func handleVerbRuntimeEvent(t SchemaState, e *schema.VerbRuntimeEvent) error { - m, ok := t.provisioning[e.Module] - if !ok { - return fmt.Errorf("module %s not found", e.Module) + m, err := provisioningModule(&t, e.Module) + if err != nil { + return err } for verb := range slices.FilterVariants[*schema.Verb](m.Decls) { if verb.Name == e.ID { @@ -114,23 +122,36 @@ func handleVerbRuntimeEvent(t SchemaState, e *schema.VerbRuntimeEvent) error { return nil } -func handleTopicRuntimeEvent(t SchemaState, e *schema.TopicRuntimeEvent) error { - m, ok := t.provisioning[e.Module] +func provisioningModule(t *SchemaState, module string) (*schema.Module, error) { + d, ok := t.provisioning[module] if !ok { - return fmt.Errorf("module %s not found", e.Module) + return nil, fmt.Errorf("module %s not found", module) + } + m, ok := t.deployments[d] + if !ok { + return nil, fmt.Errorf("deployment %s not found", d) + } + return m, nil +} + +func handleTopicRuntimeEvent(t SchemaState, e *schema.TopicRuntimeEvent) error { + m, err := provisioningModule(&t, e.Module) + if err != nil { + return err } for topic := range slices.FilterVariants[*schema.Topic](m.Decls) { if topic.Name == e.ID { topic.Runtime = e.Payload + return nil } } - return nil + return fmt.Errorf("topic %s not found", e.ID) } func handleDatabaseRuntimeEvent(t SchemaState, e *schema.DatabaseRuntimeEvent) error { - m, ok := t.provisioning[e.Module] - if !ok { - return fmt.Errorf("module %s not found", e.Module) + m, err := provisioningModule(&t, e.Module) + if err != nil { + return err } for _, decl := range m.Decls { if db, ok := decl.(*schema.Database); ok && db.Name == e.ID { @@ -138,26 +159,16 @@ func handleDatabaseRuntimeEvent(t SchemaState, e *schema.DatabaseRuntimeEvent) e db.Runtime = &schema.DatabaseRuntime{} } db.Runtime.Connections = e.Connections + return nil } } - return nil + return fmt.Errorf("database %s not found", e.ID) } func handleModuleRuntimeEvent(t SchemaState, e *schema.ModuleRuntimeEvent) error { - var module *schema.Module - if dk, ok := e.DeploymentKey.Get(); ok { - deployment, err := key.ParseDeploymentKey(dk) - if err != nil { - return fmt.Errorf("invalid deployment key: %w", err) - } - module = t.deployments[deployment] - } else { - // updating a provisioning module - m, ok := t.provisioning[e.Module] - if !ok { - return fmt.Errorf("module %s not found", e.Module) - } - module = m + module := t.deployments[e.DeploymentKey] + if module == nil { + return fmt.Errorf("deployment %s not found", e.Deployment) } if base, ok := e.Base.Get(); ok { module.ModRuntime().Base = base @@ -172,6 +183,70 @@ func handleModuleRuntimeEvent(t SchemaState, e *schema.ModuleRuntimeEvent) error } func handleProvisioningCreatedEvent(t SchemaState, e *schema.ProvisioningCreatedEvent) error { - t.provisioning[e.DesiredModule.Name] = e.DesiredModule + t.deployments[e.DesiredModule.Runtime.Deployment.DeploymentKey] = e.DesiredModule + t.provisioning[e.DesiredModule.Name] = e.DesiredModule.Runtime.Deployment.DeploymentKey + return nil +} + +func handleChangesetCreatedEvent(t SchemaState, e *schema.ChangesetCreatedEvent) error { + if existing := t.changesets[e.Changeset.Key]; existing != nil { + return nil + } + if e.Changeset.State == schema.ChangesetStatePreparing { + if active, ok := t.ActiveChangeset().Get(); ok { + // TODO: make unit test for this + // TODO: how does error handling work here? Does the changeset need to be added but immediately failed? Or is this error propagated to the caller? + return fmt.Errorf("can not create active changeset: %s already active", active.Key) + } + } + deployments := []key.Deployment{} + for _, mod := range e.Changeset.Modules { + if mod.Runtime == nil { + return fmt.Errorf("module %s has no runtime", mod.Name) + } + if mod.Runtime.Deployment == nil { + return fmt.Errorf("module %s has no deployment", mod.Name) + } + if mod.Runtime.Deployment.DeploymentKey.IsZero() { + return fmt.Errorf("module %s has no deployment key", mod.Name) + } + deploymentKey := mod.Runtime.Deployment.DeploymentKey + deployments = append(deployments, deploymentKey) + t.deployments[deploymentKey] = mod + t.provisioning[mod.Name] = deploymentKey + } + t.changesets[e.Changeset.Key] = &ChangesetDetails{ + Key: e.Changeset.Key, + CreatedAt: e.Changeset.CreatedAt, + Deployments: deployments, + State: e.Changeset.State, + Error: e.Changeset.Error, + } + return nil +} + +func handleChangesetCommittedEvent(ctx context.Context, t SchemaState, e *schema.ChangesetCommittedEvent) error { + changeset, ok := t.changesets[e.Key] + if !ok { + return fmt.Errorf("changeset %s not found", e.Key) + } + logger := log.FromContext(ctx) + changeset.State = schema.ChangesetStateCommitted + for _, depName := range changeset.Deployments { + logger.Debugf("activating deployment %s", t.deployments[depName].GetRuntime().GetDeployment().Endpoint) + dep := t.deployments[depName] + t.activeDeployments[dep.Name] = depName + // We need proper cleanup + } + return nil +} + +func handleChangesetFailedEvent(t SchemaState, e *schema.ChangesetFailedEvent) error { + changeset, ok := t.changesets[e.Key] + if !ok { + return fmt.Errorf("changeset %s not found", e.Key) + } + changeset.State = schema.ChangesetStateFailed + changeset.Error = e.Error return nil } diff --git a/backend/schemaservice/schemaservice.go b/backend/schemaservice/schemaservice.go index f5cd9a2d88..9be20883b3 100644 --- a/backend/schemaservice/schemaservice.go +++ b/backend/schemaservice/schemaservice.go @@ -6,6 +6,7 @@ import ( "net/url" "connectrpc.com/connect" + "github.com/alecthomas/types/optional" "golang.org/x/sync/errgroup" "google.golang.org/protobuf/proto" @@ -35,12 +36,38 @@ func New(ctx context.Context) *Service { return &Service{State: NewInMemorySchemaState(ctx)} } +// Start the SchemaService. Blocks until the context is cancelled. +func Start( + ctx context.Context, + config Config, +) error { + logger := log.FromContext(ctx) + logger.Debugf("Starting FTL schema service") + + svc := New(ctx) + logger.Debugf("Listening on %s", config.Bind) + + g, ctx := errgroup.WithContext(ctx) + + g.Go(func() error { + return rpc.Serve(ctx, config.Bind, + rpc.GRPC(ftlv1connect.NewSchemaServiceHandler, svc), + rpc.PProf(), + ) + }) + + err := g.Wait() + if err != nil { + return fmt.Errorf("failed to start schema service: %w", err) + } + return nil +} func (s *Service) GetSchema(ctx context.Context, c *connect.Request[ftlv1.GetSchemaRequest]) (*connect.Response[ftlv1.GetSchemaResponse], error) { view, err := s.State.View(ctx) if err != nil { return nil, fmt.Errorf("failed to get controller state: %w", err) } - schemas := view.GetActiveDeploymentSchemas() + schemas := view.GetCanonicalDeploymentSchemas() modules := []*schemapb.Module{ schema.Builtins().ToProto(), } @@ -55,15 +82,23 @@ func (s *Service) PullSchema(ctx context.Context, req *connect.Request[ftlv1.Pul } func (s *Service) UpdateDeploymentRuntime(ctx context.Context, req *connect.Request[ftlv1.UpdateDeploymentRuntimeRequest]) (*connect.Response[ftlv1.UpdateDeploymentRuntimeResponse], error) { - deployment, err := key.ParseDeploymentKey(*req.Msg.Event.DeploymentKey) + deployment, err := key.ParseDeploymentKey(req.Msg.Event.DeploymentKey) if err != nil { return nil, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("invalid deployment key: %w", err)) } + var changeset optional.Option[key.Changeset] + if req.Msg.GetChangeset() != "" { + c, err := key.ParseChangesetKey(req.Msg.GetChangeset()) + if err != nil { + return nil, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("invalid changeset key: %w", err)) + } + changeset = optional.Some(c) + } view, err := s.State.View(ctx) if err != nil { return nil, fmt.Errorf("failed to get controller state: %w", err) } - module, err := view.GetDeployment(deployment) + module, err := view.GetDeployment(deployment, changeset) if err != nil { return nil, fmt.Errorf("could not get schema: %w", err) } @@ -74,7 +109,7 @@ func (s *Service) UpdateDeploymentRuntime(ctx context.Context, req *connect.Requ if err != nil { return nil, fmt.Errorf("could not parse event: %w", err) } - err = view.ApplyEvent(event) + err = view.ApplyEvent(ctx, event) if err != nil { return nil, fmt.Errorf("could not apply event: %w", err) } @@ -99,41 +134,13 @@ func (s *Service) UpdateSchema(ctx context.Context, req *connect.Request[ftlv1.U } return connect.NewResponse(&ftlv1.UpdateSchemaResponse{}), nil } - -// Start the SchemaService. Blocks until the context is cancelled. -func Start( - ctx context.Context, - config Config, -) error { - logger := log.FromContext(ctx) - logger.Debugf("Starting FTL schema service") - - svc := New(ctx) - logger.Debugf("Listening on %s", config.Bind) - - g, ctx := errgroup.WithContext(ctx) - - g.Go(func() error { - return rpc.Serve(ctx, config.Bind, - rpc.GRPC(ftlv1connect.NewSchemaServiceHandler, svc), - rpc.PProf(), - ) - }) - - err := g.Wait() - if err != nil { - return fmt.Errorf("failed to start schema service: %w", err) - } - return nil -} - func (s *Service) GetDeployments(ctx context.Context, req *connect.Request[ftlv1.GetDeploymentsRequest]) (*connect.Response[ftlv1.GetDeploymentsResponse], error) { view, err := s.State.View(ctx) if err != nil { return nil, fmt.Errorf("failed to get schema state: %w", err) } deployments := view.GetDeployments() - activeDeployments := view.GetActiveDeployments() + activeDeployments := view.GetCanonicalDeployments() var result []*ftlv1.DeployedSchema for key, deployment := range deployments { _, activeOk := activeDeployments[key] @@ -146,6 +153,60 @@ func (s *Service) GetDeployments(ctx context.Context, req *connect.Request[ftlv1 return connect.NewResponse(&ftlv1.GetDeploymentsResponse{Schema: result}), nil } +// CreateChangeset creates a new changeset. +func (s *Service) CreateChangeset(ctx context.Context, req *connect.Request[ftlv1.CreateChangesetRequest]) (*connect.Response[ftlv1.CreateChangesetResponse], error) { + modules, err := slices.MapErr(req.Msg.Modules, func(m *schemapb.Module) (*schema.Module, error) { + out, err := schema.ModuleFromProto(m) + if err != nil { + return nil, fmt.Errorf("invalid module %s: %w", m.Name, err) + } + // Allocate a deployment key for the module. + out.Runtime = &schema.ModuleRuntime{} + out.Runtime.Deployment = &schema.ModuleRuntimeDeployment{ + DeploymentKey: key.NewDeploymentKey(m.Name), + } + return out, nil + }) + if err != nil { + return nil, connect.NewError(connect.CodeInvalidArgument, err) + } + changeset := &schema.Changeset{ + Key: key.NewChangesetKey(), + State: schema.ChangesetStatePreparing, + Modules: modules, + } + + // TODO: validate changeset schema with canonical schema + err = s.State.Publish(ctx, &schema.ChangesetCreatedEvent{ + Changeset: changeset, + }) + if err != nil { + return nil, fmt.Errorf("could not create changeset %w", err) + } + + return connect.NewResponse(&ftlv1.CreateChangesetResponse{Changeset: changeset.Key.String()}), nil +} + +// CommitChangeset makes all deployments for the changeset part of the canonical schema. +func (s *Service) CommitChangeset(ctx context.Context, req *connect.Request[ftlv1.CommitChangesetRequest]) (*connect.Response[ftlv1.CommitChangesetResponse], error) { + changesetKey, err := key.ParseChangesetKey(req.Msg.Changeset) + if err != nil { + return nil, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("invalid changeset key: %w", err)) + } + err = s.State.Publish(ctx, &schema.ChangesetCommittedEvent{ + Key: changesetKey, + }) + if err != nil { + return nil, fmt.Errorf("could not commit changeset %w", err) + } + return connect.NewResponse(&ftlv1.CommitChangesetResponse{}), nil +} + +// FailChangeset fails an active changeset. +func (s *Service) FailChangeset(context.Context, *connect.Request[ftlv1.FailChangesetRequest]) (*connect.Response[ftlv1.FailChangesetResponse], error) { + return connect.NewResponse(&ftlv1.FailChangesetResponse{}), nil +} + func (s *Service) watchModuleChanges(ctx context.Context, sendChange func(response *ftlv1.PullSchemaResponse) error) error { logger := log.FromContext(ctx) @@ -161,31 +222,35 @@ func (s *Service) watchModuleChanges(ctx context.Context, sendChange func(respon return fmt.Errorf("failed to get schema state: %w", err) } + // TODO: update this to send changesets as well + // Seed the notification channel with the current deployments. - seedDeployments := view.GetActiveDeployments() + seedDeployments := view.GetCanonicalDeployments() initialCount := len(seedDeployments) builtins := schema.Builtins().ToProto() builtinsResponse := &ftlv1.PullSchemaResponse{ - ModuleName: builtins.Name, - Schema: builtins, - ChangeType: ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_ADDED, - More: initialCount > 0, + Event: &ftlv1.PullSchemaResponse_DeploymentCreated_{ + DeploymentCreated: &ftlv1.PullSchemaResponse_DeploymentCreated{ + Schema: builtins, + }, + }, + More: initialCount > 0, } - err = sendChange(builtinsResponse) if err != nil { return err } - for key, initial := range seedDeployments { + for _, initial := range seedDeployments { initialCount-- module := initial.ToProto() err := sendChange(&ftlv1.PullSchemaResponse{ - ModuleName: module.Name, - DeploymentKey: proto.String(key.String()), - Schema: module, - ChangeType: ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_ADDED, - More: initialCount > 0, + Event: &ftlv1.PullSchemaResponse_DeploymentCreated_{ + DeploymentCreated: &ftlv1.PullSchemaResponse_DeploymentCreated{ + Schema: module, + }, + }, + More: initialCount > 0, }) if err != nil { return err @@ -197,10 +262,11 @@ func (s *Service) watchModuleChanges(ctx context.Context, sendChange func(respon switch event := notification.(type) { case *schema.DeploymentCreatedEvent: err := sendChange(&ftlv1.PullSchemaResponse{ //nolint:forcetypeassert - ModuleName: event.Schema.Name, - DeploymentKey: proto.String(event.Key.String()), - Schema: event.Schema.ToProto(), - ChangeType: ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_ADDED, + Event: &ftlv1.PullSchemaResponse_DeploymentCreated_{ + DeploymentCreated: &ftlv1.PullSchemaResponse_DeploymentCreated{ + Schema: event.Schema.ToProto(), + }, + }, }) if err != nil { return err @@ -210,17 +276,20 @@ func (s *Service) watchModuleChanges(ctx context.Context, sendChange func(respon if err != nil { return fmt.Errorf("failed to get schema state: %w", err) } - dep, err := view.GetDeployment(event.Key) + dep, err := view.GetDeployment(event.Key, optional.Ptr(event.Changeset)) if err != nil { logger.Errorf(err, "Deployment not found: %s", event.Key) continue } err = sendChange(&ftlv1.PullSchemaResponse{ //nolint:forcetypeassert - ModuleName: dep.Name, - DeploymentKey: proto.String(event.Key.String()), - Schema: dep.ToProto(), - ChangeType: ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_REMOVED, - ModuleRemoved: event.ModuleRemoved, + Event: &ftlv1.PullSchemaResponse_DeploymentRemoved_{ + DeploymentRemoved: &ftlv1.PullSchemaResponse_DeploymentRemoved{ + Key: proto.String(event.Key.String()), + ModuleName: dep.Name, + // If this is true then the module was removed as well as the deployment. + ModuleRemoved: event.ModuleRemoved, + }, + }, }) if err != nil { return err @@ -230,16 +299,60 @@ func (s *Service) watchModuleChanges(ctx context.Context, sendChange func(respon if err != nil { return fmt.Errorf("failed to get schema state: %w", err) } - dep, err := view.GetDeployment(event.Key) + dep, err := view.GetDeployment(event.Key, optional.Ptr(event.Changeset)) if err != nil { logger.Errorf(err, "Deployment not found: %s", event.Key) continue } + changeset := "" + if event.Changeset != nil { + changeset = event.Changeset.String() + } + err = sendChange(&ftlv1.PullSchemaResponse{ //nolint:forcetypeassert + Event: &ftlv1.PullSchemaResponse_DeploymentUpdated_{ + DeploymentUpdated: &ftlv1.PullSchemaResponse_DeploymentUpdated{ + // TODO: include changeset info + Changeset: &changeset, + Schema: dep.ToProto(), + }, + }, + }) + if err != nil { + return err + } + case *schema.ChangesetCreatedEvent: + err = sendChange(&ftlv1.PullSchemaResponse{ //nolint:forcetypeassert + Event: &ftlv1.PullSchemaResponse_ChangesetCreated_{ + ChangesetCreated: &ftlv1.PullSchemaResponse_ChangesetCreated{ + // TODO: include changeset info + Changeset: event.Changeset.ToProto(), + }, + }, + }) + if err != nil { + return err + } + case *schema.ChangesetFailedEvent: + err = sendChange(&ftlv1.PullSchemaResponse{ //nolint:forcetypeassert + Event: &ftlv1.PullSchemaResponse_ChangesetFailed_{ + ChangesetFailed: &ftlv1.PullSchemaResponse_ChangesetFailed{ + // TODO: include changeset info + Key: event.Key.String(), + Error: event.Error, + }, + }, + }) + if err != nil { + return err + } + case *schema.ChangesetCommittedEvent: err = sendChange(&ftlv1.PullSchemaResponse{ //nolint:forcetypeassert - ModuleName: dep.Name, - DeploymentKey: proto.String(event.Key.String()), - Schema: dep.ToProto(), - ChangeType: ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_CHANGED, + Event: &ftlv1.PullSchemaResponse_ChangesetCommitted_{ + ChangesetCommitted: &ftlv1.PullSchemaResponse_ChangesetCommitted{ + // TODO: include changeset info + Key: event.Key.String(), + }, + }, }) if err != nil { return err diff --git a/backend/schemaservice/state.go b/backend/schemaservice/state.go index 9fb5161459..409bc0891a 100644 --- a/backend/schemaservice/state.go +++ b/backend/schemaservice/state.go @@ -7,7 +7,10 @@ import ( "maps" "slices" "sync" + "time" + "github.com/alecthomas/types/optional" + expmaps "golang.org/x/exp/maps" "google.golang.org/protobuf/proto" schemapb "github.com/block/ftl/common/protos/xyz/block/ftl/schema/v1" @@ -19,23 +22,34 @@ import ( ) type SchemaState struct { - deployments map[key.Deployment]*schema.Module - activeDeployments map[key.Deployment]bool - // modules being provisioned - provisioning map[string]*schema.Module + deployments map[key.Deployment]*schema.Module + // currently active deployments for a given module name. This represents the canonical state of the schema. + activeDeployments map[string]key.Deployment + changesets map[key.Changeset]*ChangesetDetails + provisioning map[string]key.Deployment +} + +type ChangesetDetails struct { + Key key.Changeset + CreatedAt time.Time + Deployments []key.Deployment + State schema.ChangesetState + // Error is present if state is failed. + Error string } func NewSchemaState() SchemaState { return SchemaState{ deployments: map[key.Deployment]*schema.Module{}, - activeDeployments: map[key.Deployment]bool{}, - provisioning: map[string]*schema.Module{}, + activeDeployments: map[string]key.Deployment{}, + changesets: map[key.Changeset]*ChangesetDetails{}, + provisioning: map[string]key.Deployment{}, } } func NewInMemorySchemaState(ctx context.Context) *statemachine.SingleQueryHandle[struct{}, SchemaState, schema.Event] { notifier := channels.NewNotifier(ctx) - handle := statemachine.NewLocalHandle(&schemaStateMachine{ + handle := statemachine.NewLocalHandle[struct{}, SchemaState, schema.Event](&schemaStateMachine{ notifier: notifier, runningCtx: ctx, state: NewSchemaState(), @@ -45,13 +59,27 @@ func NewInMemorySchemaState(ctx context.Context) *statemachine.SingleQueryHandle } func (r *SchemaState) Marshal() ([]byte, error) { - var activeDeployments []string - for deployment := range r.activeDeployments { - activeDeployments = append(activeDeployments, deployment.String()) + provisioning := []string{} + for _, v := range r.provisioning { + provisioning = append(provisioning, v.String()) + } + activeDeployments := []string{} + for _, v := range r.activeDeployments { + activeDeployments = append(activeDeployments, v.String()) + } + cs := []*schema.SerializedChangeset{} + for _, v := range r.changesets { + deps := []string{} + for _, v := range v.Deployments { + deps = append(deps, v.String()) + } + cs = append(cs, &schema.SerializedChangeset{Key: v.Key.String(), CreatedAt: v.CreatedAt, Deployments: deps, State: v.State, Error: v.Error}) } state := &schema.SchemaState{ - Modules: append(slices.Collect(maps.Values(r.deployments)), slices.Collect(maps.Values(r.provisioning))...), - ActiveDeployments: activeDeployments, + Modules: slices.Collect(maps.Values(r.deployments)), + Provisioning: provisioning, + ActiveDeployments: activeDeployments, + SerializedChangeset: cs, } stateProto := state.ToProto() bytes, err := proto.Marshal(stateProto) @@ -71,23 +99,31 @@ func (r *SchemaState) Unmarshal(data []byte) error { if err != nil { return fmt.Errorf("failed to unmarshal schema state: %w", err) } - for _, module := range state.Modules { dkey := module.GetRuntime().GetDeployment().GetDeploymentKey() - if dkey.IsZero() { - r.provisioning[module.Name] = module - } else { - r.deployments[dkey] = module - if slices.Contains(state.ActiveDeployments, dkey.String()) { - r.activeDeployments[dkey] = true - } + r.deployments[dkey] = module + } + for _, a := range state.ActiveDeployments { + deploymentKey, err := key.ParseDeploymentKey(a) + if err != nil { + return fmt.Errorf("failed to parse deployment key: %w", err) + } + r.activeDeployments[deploymentKey.Payload.Module] = deploymentKey + } + for _, a := range state.Provisioning { + deploymentKey, err := key.ParseDeploymentKey(a) + if err != nil { + return fmt.Errorf("failed to parse deployment key: %w", err) } + r.provisioning[deploymentKey.Payload.Module] = deploymentKey } return nil } -func (r *SchemaState) GetDeployment(deployment key.Deployment) (*schema.Module, error) { +// GetDeployment returns a deployment based on the deployment key and changeset. +func (r *SchemaState) GetDeployment(deployment key.Deployment, changeset optional.Option[key.Changeset]) (*schema.Module, error) { + //TODO: remove this d, ok := r.deployments[deployment] if !ok { return nil, fmt.Errorf("deployment %s not found", deployment) @@ -95,22 +131,45 @@ func (r *SchemaState) GetDeployment(deployment key.Deployment) (*schema.Module, return d, nil } +// FindDeployment returns a deployment and which changeset it is in based on the deployment key. +func (r *SchemaState) FindDeployment(deploymentKey key.Deployment) (deployment *schema.Module, changeset optional.Option[key.Changeset], err error) { + // TODO: add unit tests: + // - deployment in ended changeset + canonical + // - deployment in ended changeset + main list but no longer canonical + // - deployment in failed changeset + d, ok := r.deployments[deploymentKey] + if ok { + return d, optional.None[key.Changeset](), nil + } + return nil, optional.None[key.Changeset](), fmt.Errorf("deployment %s not found", deploymentKey) +} + func (r *SchemaState) GetDeployments() map[key.Deployment]*schema.Module { return r.deployments } -func (r *SchemaState) GetActiveDeployments() map[key.Deployment]*schema.Module { +// GetCanonicalDeployments returns all active deployments (excluding those in changesets). +func (r *SchemaState) GetCanonicalDeployments() map[key.Deployment]*schema.Module { deployments := map[key.Deployment]*schema.Module{} - for key, active := range r.activeDeployments { - if active { - deployments[key] = r.deployments[key] + for _, dep := range r.activeDeployments { + deployments[dep] = r.deployments[dep] + } + return deployments +} + +// GetAllActiveDeployments returns all active deployments, including those in changesets. +func (r *SchemaState) GetAllActiveDeployments() map[key.Deployment]*schema.Module { + deployments := r.GetCanonicalDeployments() + for _, cs := range r.changesets { + for _, dep := range cs.Deployments { + deployments[dep] = r.deployments[dep] } } return deployments } -func (r *SchemaState) GetActiveDeploymentSchemas() []*schema.Module { - return slices.Collect(maps.Values(r.GetActiveDeployments())) +func (r *SchemaState) GetCanonicalDeploymentSchemas() []*schema.Module { + return expmaps.Values(r.GetCanonicalDeployments()) } func (r *SchemaState) GetProvisioning(moduleName string) (*schema.Module, error) { @@ -118,7 +177,7 @@ func (r *SchemaState) GetProvisioning(moduleName string) (*schema.Module, error) if !ok { return nil, fmt.Errorf("provisioning for module %s not found", moduleName) } - return d, nil + return r.deployments[d], nil } type schemaStateMachine struct { @@ -142,7 +201,7 @@ func (c *schemaStateMachine) Lookup(key struct{}) (SchemaState, error) { func (c *schemaStateMachine) Publish(msg schema.Event) error { c.lock.Lock() defer c.lock.Unlock() - err := c.state.ApplyEvent(msg) + err := c.state.ApplyEvent(c.runningCtx, msg) if err != nil { return fmt.Errorf("update: %w", err) } @@ -181,3 +240,17 @@ func (c *schemaStateMachine) Save(w io.Writer) error { } return nil } + +func hydrateChangeset(current *SchemaState, changeset *ChangesetDetails) *schema.Changeset { + changesetModules := make([]*schema.Module, len(changeset.Deployments)) + for i, deployment := range changeset.Deployments { + changesetModules[i] = current.deployments[deployment] + } + return &schema.Changeset{ + Key: changeset.Key, + CreatedAt: changeset.CreatedAt, + State: changeset.State, + Modules: changesetModules, + Error: changeset.Error, + } +} diff --git a/backend/schemaservice/state_test.go b/backend/schemaservice/state_test.go index 843058773a..6c22366e43 100644 --- a/backend/schemaservice/state_test.go +++ b/backend/schemaservice/state_test.go @@ -1,9 +1,11 @@ package schemaservice import ( + "context" "testing" "github.com/alecthomas/assert/v2" + "github.com/block/ftl/common/schema" "github.com/block/ftl/internal/key" ) @@ -28,11 +30,11 @@ func TestSchemaStateMarshalling(t *testing.T) { func TestStateMarshallingAfterCommonEvents(t *testing.T) { state := NewSchemaState() - assert.NoError(t, state.ApplyEvent(&schema.ProvisioningCreatedEvent{ - DesiredModule: &schema.Module{Name: "test1"}, + assert.NoError(t, state.ApplyEvent(context.Background(), &schema.ProvisioningCreatedEvent{ + DesiredModule: &schema.Module{Name: "test1", Runtime: &schema.ModuleRuntime{Deployment: &schema.ModuleRuntimeDeployment{DeploymentKey: key.NewDeploymentKey("test1")}}}, })) deploymentKey := key.NewDeploymentKey("test2") - assert.NoError(t, state.ApplyEvent(&schema.DeploymentCreatedEvent{ + assert.NoError(t, state.ApplyEvent(context.Background(), &schema.DeploymentCreatedEvent{ Key: deploymentKey, Schema: &schema.Module{ Name: "test2", @@ -41,7 +43,7 @@ func TestStateMarshallingAfterCommonEvents(t *testing.T) { }, }, })) - assert.NoError(t, state.ApplyEvent(&schema.DeploymentActivatedEvent{ + assert.NoError(t, state.ApplyEvent(context.Background(), &schema.DeploymentActivatedEvent{ Key: deploymentKey, MinReplicas: 1, // No ActivatedAt, as proto conversion does not retain timezone diff --git a/cmd/ftl-console/main.go b/cmd/ftl-console/main.go index 550c3ae8f9..4dc3f3d528 100644 --- a/cmd/ftl-console/main.go +++ b/cmd/ftl-console/main.go @@ -40,7 +40,7 @@ func main() { kong.Vars{"version": ftl.FormattedVersion}, ) - ctx := log.ContextWithLogger(context.Background(), log.Configure(os.Stderr, cli.LogConfig)) + ctx := log.ContextWithLogger(context.Background(), log.Configure(os.Stderr, cli.LogConfig).Scope("console")) err := observability.Init(ctx, false, "", "ftl-console", ftl.Version, cli.ObservabilityConfig) kctx.FatalIfErrorf(err, "failed to initialize observability") diff --git a/cmd/ftl-cron/main.go b/cmd/ftl-cron/main.go index 87b13e0cc9..d2e79b6c1c 100644 --- a/cmd/ftl-cron/main.go +++ b/cmd/ftl-cron/main.go @@ -32,7 +32,7 @@ func main() { kong.Vars{"version": ftl.FormattedVersion}, ) - ctx := log.ContextWithLogger(context.Background(), log.Configure(os.Stderr, cli.LogConfig)) + ctx := log.ContextWithLogger(context.Background(), log.Configure(os.Stderr, cli.LogConfig).Scope("cron")) err := observability.Init(ctx, false, "", "ftl-cron", ftl.Version, cli.ObservabilityConfig) kctx.FatalIfErrorf(err, "failed to initialize observability") diff --git a/cmd/ftl-http-ingress/main.go b/cmd/ftl-http-ingress/main.go index e5f949989d..14a700281e 100644 --- a/cmd/ftl-http-ingress/main.go +++ b/cmd/ftl-http-ingress/main.go @@ -35,14 +35,13 @@ func main() { kong.Vars{"version": ftl.FormattedVersion}, ) - ctx := log.ContextWithLogger(context.Background(), log.Configure(os.Stderr, cli.LogConfig)) + ctx := log.ContextWithLogger(context.Background(), log.Configure(os.Stderr, cli.LogConfig).Scope("http-ingress")) err := observability.Init(ctx, false, "", "ftl-http-ingress", ftl.Version, cli.ObservabilityConfig) kctx.FatalIfErrorf(err, "failed to initialize observability") schemaClient := rpc.Dial(ftlv1connect.NewSchemaServiceClient, cli.SchemaServerEndpoint.String(), log.Error) - eventSource := schemaeventsource.New(ctx, schemaClient) timelineClient := timelineclient.NewClient(ctx, cli.TimelineEndpoint) routeManager := routing.NewVerbRouter(ctx, schemaeventsource.New(ctx, schemaClient), timelineClient) - err = ingress.Start(ctx, cli.HTTPIngressConfig, eventSource, routeManager, timelineClient) + err = ingress.Start(ctx, cli.HTTPIngressConfig, schemaClient, routeManager, timelineClient) kctx.FatalIfErrorf(err, "failed to start HTTP ingress") } diff --git a/cmd/ftl-provisioner/main.go b/cmd/ftl-provisioner/main.go index e861e16286..f0e11d6173 100644 --- a/cmd/ftl-provisioner/main.go +++ b/cmd/ftl-provisioner/main.go @@ -48,6 +48,6 @@ func main() { kctx.FatalIfErrorf(err, "failed to create provisioner registry") - err = provisioner.Start(ctx, cli.ProvisionerConfig, registry, controllerClient) + err = provisioner.Start(ctx, cli.ProvisionerConfig, registry, schemaClient) kctx.FatalIfErrorf(err, "failed to start provisioner") } diff --git a/cmd/ftl/cmd_build.go b/cmd/ftl/cmd_build.go index c8a739ce44..d1ee093322 100644 --- a/cmd/ftl/cmd_build.go +++ b/cmd/ftl/cmd_build.go @@ -23,6 +23,7 @@ type buildCmd struct { func (b *buildCmd) Run( ctx context.Context, controllerClient ftlv1connect.ControllerServiceClient, + schemaServiceClient ftlv1connect.SchemaServiceClient, schemaSourceFactory func() schemaeventsource.EventSource, projConfig projectconfig.Config, ) error { @@ -40,6 +41,7 @@ func (b *buildCmd) Run( engine, err := buildengine.New( ctx, controllerClient, + schemaServiceClient, schemaSourceFactory(), projConfig, b.Dirs, diff --git a/cmd/ftl/cmd_deploy.go b/cmd/ftl/cmd_deploy.go index b5fd8c2e52..09948494b8 100644 --- a/cmd/ftl/cmd_deploy.go +++ b/cmd/ftl/cmd_deploy.go @@ -5,7 +5,7 @@ import ( "fmt" "time" - provisionerconnect "github.com/block/ftl/backend/protos/xyz/block/ftl/provisioner/v1beta1/provisionerpbconnect" + "github.com/block/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" "github.com/block/ftl/internal/buildengine" "github.com/block/ftl/internal/log" "github.com/block/ftl/internal/projectconfig" @@ -22,7 +22,8 @@ type deployCmd struct { func (d *deployCmd) Run( ctx context.Context, projConfig projectconfig.Config, - provisionerClient provisionerconnect.ProvisionerServiceClient, + controllerClient ftlv1connect.ControllerServiceClient, + schemaServiceClient ftlv1connect.SchemaServiceClient, schemaSourceFactory func() schemaeventsource.EventSource, ) error { logger := log.FromContext(ctx) @@ -37,7 +38,7 @@ func (d *deployCmd) Run( defer cancel(fmt.Errorf("stopping deploy: %w", context.Canceled)) } engine, err := buildengine.New( - ctx, provisionerClient, schemaSourceFactory(), projConfig, d.Build.Dirs, d.Build.UpdatesEndpoint, + ctx, controllerClient, schemaServiceClient, schemaSourceFactory(), projConfig, d.Build.Dirs, d.Build.UpdatesEndpoint, buildengine.BuildEnv(d.Build.BuildEnv), buildengine.Parallelism(d.Build.Parallelism), ) diff --git a/cmd/ftl/cmd_dev.go b/cmd/ftl/cmd_dev.go index 299c6a66d7..1b55377013 100644 --- a/cmd/ftl/cmd_dev.go +++ b/cmd/ftl/cmd_dev.go @@ -13,7 +13,6 @@ import ( "github.com/block/ftl/backend/admin" "github.com/block/ftl/backend/protos/xyz/block/ftl/buildengine/v1/buildenginepbconnect" - provisionerconnect "github.com/block/ftl/backend/protos/xyz/block/ftl/provisioner/v1beta1/provisionerpbconnect" "github.com/block/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" "github.com/block/ftl/internal/bind" "github.com/block/ftl/internal/buildengine" @@ -22,7 +21,6 @@ import ( "github.com/block/ftl/internal/dev" "github.com/block/ftl/internal/log" "github.com/block/ftl/internal/projectconfig" - "github.com/block/ftl/internal/rpc" "github.com/block/ftl/internal/schema/schemaeventsource" "github.com/block/ftl/internal/terminal" "github.com/block/ftl/internal/timelineclient" @@ -44,7 +42,7 @@ func (d *devCmd) Run( bindContext terminal.KongContextBinder, schemaEventSourceFactory func() schemaeventsource.EventSource, controllerClient ftlv1connect.ControllerServiceClient, - provisionerClient provisionerconnect.ProvisionerServiceClient, + schemaServiceClient ftlv1connect.SchemaServiceClient, timelineClient *timelineclient.Client, adminClient admin.Client, schemaClient ftlv1connect.SchemaServiceClient, @@ -62,10 +60,7 @@ func (d *devCmd) Run( } terminal.LaunchEmbeddedConsole(ctx, k, bindContext, schemaEventSourceFactory()) - var client buildengine.DeployClient = controllerClient - if d.ServeCmd.Provisioners > 0 { - client = rpc.ClientFromContext[provisionerconnect.ProvisionerServiceClient](ctx) - } + var deployClient buildengine.DeployClient = controllerClient g, ctx := errgroup.WithContext(ctx) @@ -92,7 +87,7 @@ func (d *devCmd) Run( controllerReady := make(chan bool, 1) if !d.NoServe { if d.ServeCmd.Stop { - err := d.ServeCmd.run(ctx, projConfig, cm, sm, optional.Some(controllerReady), true, bindAllocator, controllerClient, provisionerClient, timelineClient, adminClient, schemaClient, schemaEventSourceFactory, verbClient, buildEngineClient, true, devModeEndpointUpdates) + err := d.ServeCmd.run(ctx, projConfig, cm, sm, optional.Some(controllerReady), true, bindAllocator, controllerClient, timelineClient, adminClient, schemaClient, schemaEventSourceFactory, buildEngineClient, true, devModeEndpointUpdates) if err != nil { return fmt.Errorf("failed to stop server: %w", err) } @@ -100,7 +95,7 @@ func (d *devCmd) Run( } g.Go(func() error { - err := d.ServeCmd.run(ctx, projConfig, cm, sm, optional.Some(controllerReady), true, bindAllocator, controllerClient, provisionerClient, timelineClient, adminClient, schemaClient, schemaEventSourceFactory, verbClient, buildEngineClient, true, devModeEndpointUpdates) + err := d.ServeCmd.run(ctx, projConfig, cm, sm, optional.Some(controllerReady), true, bindAllocator, controllerClient, timelineClient, adminClient, schemaClient, schemaEventSourceFactory, buildEngineClient, true, devModeEndpointUpdates) if err != nil { cancel(fmt.Errorf("dev server failed: %w: %w", context.Canceled, err)) } else { @@ -119,7 +114,7 @@ func (d *devCmd) Run( starting.Close() opts := []buildengine.Option{buildengine.Parallelism(d.Build.Parallelism), buildengine.BuildEnv(d.Build.BuildEnv), buildengine.WithDevMode(devModeEndpointUpdates), buildengine.WithStartTime(startTime)} - engine, err := buildengine.New(ctx, client, schemaEventSourceFactory(), projConfig, d.Build.Dirs, d.Build.UpdatesEndpoint, opts...) + engine, err := buildengine.New(ctx, deployClient, schemaServiceClient, schemaEventSourceFactory(), projConfig, d.Build.Dirs, d.Build.UpdatesEndpoint, opts...) if err != nil { return err } diff --git a/cmd/ftl/cmd_kill.go b/cmd/ftl/cmd_kill.go index f6f4efa3b1..03af4aa617 100644 --- a/cmd/ftl/cmd_kill.go +++ b/cmd/ftl/cmd_kill.go @@ -2,11 +2,13 @@ package main import ( "context" + "fmt" "connectrpc.com/connect" ftlv1 "github.com/block/ftl/backend/protos/xyz/block/ftl/v1" "github.com/block/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" + schemapb "github.com/block/ftl/common/protos/xyz/block/ftl/schema/v1" "github.com/block/ftl/internal/key" ) @@ -14,10 +16,17 @@ type killCmd struct { Deployment key.Deployment `arg:"" help:"Deployment to kill."` } -func (k *killCmd) Run(ctx context.Context, client ftlv1connect.ControllerServiceClient) error { - _, err := client.UpdateDeploy(ctx, connect.NewRequest(&ftlv1.UpdateDeployRequest{DeploymentKey: k.Deployment.String()})) +func (k *killCmd) Run(ctx context.Context, client ftlv1connect.SchemaServiceClient) error { + //TODO: implement this as a changeset + _, err := client.UpdateDeploymentRuntime(ctx, connect.NewRequest(&ftlv1.UpdateDeploymentRuntimeRequest{ + Deployment: k.Deployment.String(), + Event: &schemapb.ModuleRuntimeEvent{ + DeploymentKey: k.Deployment.String(), + Scaling: &schemapb.ModuleRuntimeScaling{MinReplicas: 0}, + }, + })) if err != nil { - return err + return fmt.Errorf("failed to kill deployment: %w", err) } return nil } diff --git a/cmd/ftl/cmd_schema_generate.go b/cmd/ftl/cmd_schema_generate.go index 0e6db8391d..2d73e6d0fd 100644 --- a/cmd/ftl/cmd_schema_generate.go +++ b/cmd/ftl/cmd_schema_generate.go @@ -87,26 +87,33 @@ func (s *schemaGenerateCmd) hotReload(ctx context.Context, client ftlv1connect.S regenerate := false for stream.Receive() { msg := stream.Msg() - switch msg.ChangeType { - case ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_ADDED, ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_CHANGED: - if msg.Schema == nil { - return fmt.Errorf("schema is nil for added/changed deployment %q", msg.GetDeploymentKey()) - } - module, err := schema.ValidatedModuleFromProto(msg.Schema) + switch msg := msg.Event.(type) { + case *ftlv1.PullSchemaResponse_ChangesetCreated_: + + case *ftlv1.PullSchemaResponse_ChangesetFailed_: + + case *ftlv1.PullSchemaResponse_ChangesetCommitted_: + // TODO: need to implement this so we can move deployments from changeset to canonical + case *ftlv1.PullSchemaResponse_DeploymentCreated_: + event := msg.DeploymentCreated + module, err := schema.ValidatedModuleFromProto(event.Schema) if err != nil { return fmt.Errorf("invalid module: %w", err) } modules[module.Name] = module - case ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_REMOVED: - if msg.Schema == nil { - return fmt.Errorf("schema is nil for removed deployment %q", msg.GetDeploymentKey()) - } - if msg.ModuleRemoved { - delete(modules, msg.Schema.Name) + case *ftlv1.PullSchemaResponse_DeploymentUpdated_: + event := msg.DeploymentUpdated + module, err := schema.ValidatedModuleFromProto(event.Schema) + if err != nil { + return fmt.Errorf("invalid module: %w", err) } - default: + modules[module.Name] = module + case *ftlv1.PullSchemaResponse_DeploymentRemoved_: + event := msg.DeploymentRemoved + delete(modules, event.ModuleName) } + if !msg.More { regenerate = true } diff --git a/cmd/ftl/cmd_schema_get.go b/cmd/ftl/cmd_schema_get.go index 636795c685..e227593494 100644 --- a/cmd/ftl/cmd_schema_get.go +++ b/cmd/ftl/cmd_schema_get.go @@ -5,7 +5,6 @@ import ( "fmt" "os" "slices" - "strings" "connectrpc.com/connect" "golang.org/x/exp/maps" @@ -15,7 +14,6 @@ import ( ftlv1 "github.com/block/ftl/backend/protos/xyz/block/ftl/v1" "github.com/block/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" schemapb "github.com/block/ftl/common/protos/xyz/block/ftl/schema/v1" - "github.com/block/ftl/common/schema" ) type getSchemaCmd struct { @@ -42,43 +40,51 @@ func (g *getSchemaCmd) Run(ctx context.Context, client ftlv1connect.SchemaServic } for resp.Receive() { msg := resp.Msg() - switch msg.ChangeType { - case ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_ADDED, ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_CHANGED: - if msg.Schema == nil { - return fmt.Errorf("schema is nil for added/changed deployment %q", msg.GetDeploymentKey()) - } - module, err := schema.ValidatedModuleFromProto(msg.Schema) - if err != nil { - return fmt.Errorf("invalid module: %w", err) - } - if len(g.Modules) == 0 || remainingNames[msg.Schema.Name] { - fmt.Println(module) - delete(remainingNames, msg.Schema.Name) - } - if !msg.More { - missingNames := maps.Keys(remainingNames) - slices.Sort(missingNames) - if len(missingNames) > 0 { - if g.Watch { - fmt.Printf("missing modules: %s\n", strings.Join(missingNames, ", ")) - } else { - return fmt.Errorf("missing modules: %s", strings.Join(missingNames, ", ")) - } - } - if !g.Watch { - return nil - } - } - case ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_REMOVED: - if msg.Schema == nil { - return fmt.Errorf("schema is nil for removed deployment %q", msg.GetDeploymentKey()) - } - if msg.ModuleRemoved { - delete(remainingNames, msg.Schema.Name) - } - fmt.Printf("deployment %s removed\n", msg.GetDeploymentKey()) - case ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_UNSPECIFIED: - return fmt.Errorf("unexpected unspecified deployment change type for deployment %q", msg.GetDeploymentKey()) + switch msg.Event.(type) { + case *ftlv1.PullSchemaResponse_ChangesetCreated_: + + case *ftlv1.PullSchemaResponse_ChangesetFailed_: + + case *ftlv1.PullSchemaResponse_ChangesetCommitted_: + + case *ftlv1.PullSchemaResponse_DeploymentCreated_: + // TODO: originally this code handled DeploymentCreated and DeploymentUpdated. Clean up? + // if msg.Schema == nil { + // return fmt.Errorf("schema is nil for added/changed deployment %q", msg.GetDeploymentKey()) + // } + // module, err := schema.ValidatedModuleFromProto(msg.Schema) + // if err != nil { + // return fmt.Errorf("invalid module: %w", err) + // } + // if len(g.Modules) == 0 || remainingNames[msg.Schema.Name] { + // fmt.Println(module) + // delete(remainingNames, msg.Schema.Name) + // } + // if !msg.More { + // missingNames := maps.Keys(remainingNames) + // slices.Sort(missingNames) + // if len(missingNames) > 0 { + // if g.Watch { + // fmt.Printf("missing modules: %s\n", strings.Join(missingNames, ", ")) + // } else { + // return fmt.Errorf("missing modules: %s", strings.Join(missingNames, ", ")) + // } + // } + // if !g.Watch { + // return nil + // } + // } + + case *ftlv1.PullSchemaResponse_DeploymentUpdated_: + // TODO: implement or combine logic with DeploymentCreated + case *ftlv1.PullSchemaResponse_DeploymentRemoved_: + // if msg.Schema == nil { + // return fmt.Errorf("schema is nil for removed deployment %q", msg.GetDeploymentKey()) + // } + // if msg.ModuleRemoved { + // delete(remainingNames, msg.Schema.Name) + // } + // fmt.Printf("deployment %s removed\n", msg.GetDeploymentKey()) } } @@ -96,10 +102,11 @@ func (g *getSchemaCmd) generateJSON(resp *connect.ServerStreamForClient[ftlv1.Pu schema := &schemapb.Schema{} for resp.Receive() { msg := resp.Msg() - if len(g.Modules) == 0 || remainingNames[msg.Schema.Name] { - schema.Modules = append(schema.Modules, msg.Schema) - delete(remainingNames, msg.Schema.Name) - } + // TODO: reimplement + // if len(g.Modules) == 0 || remainingNames[msg.Schema.Name] { + // schema.Modules = append(schema.Modules, msg.Schema) + // delete(remainingNames, msg.Schema.Name) + // } if !msg.More { break } @@ -128,10 +135,11 @@ func (g *getSchemaCmd) generateProto(resp *connect.ServerStreamForClient[ftlv1.P schema := &schemapb.Schema{} for resp.Receive() { msg := resp.Msg() - if len(g.Modules) == 0 || remainingNames[msg.Schema.Name] { - schema.Modules = append(schema.Modules, msg.Schema) - delete(remainingNames, msg.Schema.Name) - } + // TODO: reimplement + // if len(g.Modules) == 0 || remainingNames[msg.Schema.Name] { + // schema.Modules = append(schema.Modules, msg.Schema) + // delete(remainingNames, msg.Schema.Name) + // } if !msg.More { break } diff --git a/cmd/ftl/cmd_serve.go b/cmd/ftl/cmd_serve.go index 0ff0fe7c0e..2987528457 100644 --- a/cmd/ftl/cmd_serve.go +++ b/cmd/ftl/cmd_serve.go @@ -14,7 +14,6 @@ import ( "connectrpc.com/connect" "github.com/alecthomas/types/optional" - "github.com/jpillora/backoff" "golang.org/x/sync/errgroup" "github.com/block/ftl" @@ -26,7 +25,6 @@ import ( "github.com/block/ftl/backend/ingress" "github.com/block/ftl/backend/lease" "github.com/block/ftl/backend/protos/xyz/block/ftl/buildengine/v1/buildenginepbconnect" - provisionerconnect "github.com/block/ftl/backend/protos/xyz/block/ftl/provisioner/v1beta1/provisionerpbconnect" ftlv1 "github.com/block/ftl/backend/protos/xyz/block/ftl/v1" "github.com/block/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" "github.com/block/ftl/backend/provisioner" @@ -46,7 +44,6 @@ import ( "github.com/block/ftl/internal/observability" "github.com/block/ftl/internal/projectconfig" "github.com/block/ftl/internal/routing" - "github.com/block/ftl/internal/rpc" "github.com/block/ftl/internal/schema/schemaeventsource" "github.com/block/ftl/internal/timelineclient" ) @@ -90,19 +87,17 @@ func (s *serveCmd) Run( sm *manager.Manager[configuration.Secrets], projConfig projectconfig.Config, controllerClient ftlv1connect.ControllerServiceClient, - provisionerClient provisionerconnect.ProvisionerServiceClient, timelineClient *timelineclient.Client, adminClient admin.Client, schemaClient ftlv1connect.SchemaServiceClient, schemaEventSourceFactory func() schemaeventsource.EventSource, - verbClient ftlv1connect.VerbServiceClient, buildEngineClient buildenginepbconnect.BuildEngineServiceClient, ) error { bindAllocator, err := bind.NewBindAllocator(s.Bind, 2) if err != nil { return fmt.Errorf("could not create bind allocator: %w", err) } - return s.run(ctx, projConfig, cm, sm, optional.None[chan bool](), false, bindAllocator, controllerClient, provisionerClient, timelineClient, adminClient, schemaClient, schemaEventSourceFactory, verbClient, buildEngineClient, s.Recreate, nil) + return s.run(ctx, projConfig, cm, sm, optional.None[chan bool](), false, bindAllocator, controllerClient, timelineClient, adminClient, schemaClient, schemaEventSourceFactory, buildEngineClient, s.Recreate, nil) } //nolint:maintidx @@ -115,12 +110,10 @@ func (s *serveCommonConfig) run( devMode bool, bindAllocator *bind.BindAllocator, controllerClient ftlv1connect.ControllerServiceClient, - provisionerClient provisionerconnect.ProvisionerServiceClient, timelineClient *timelineclient.Client, adminClient admin.Client, schemaClient ftlv1connect.SchemaServiceClient, schemaEventSourceFactory func() schemaeventsource.EventSource, - verbClient ftlv1connect.VerbServiceClient, buildEngineClient buildenginepbconnect.BuildEngineServiceClient, recreate bool, devModeEndpoints <-chan dev.LocalEndpoint, @@ -145,11 +138,6 @@ func (s *serveCommonConfig) run( if err := waitForControllerOnline(ctx, s.StartupTimeout, controllerClient); err != nil { return err } - if s.Provisioners > 0 { - if err := rpc.Wait(ctx, backoff.Backoff{Max: s.StartupTimeout}, s.StartupTimeout, provisionerClient); err != nil { - return fmt.Errorf("provisioner failed to start: %w", err) - } - } os.Exit(0) } @@ -289,6 +277,7 @@ func (s *serveCommonConfig) run( } wg.Go(func() error { // Deliberately start Console in the foreground. + ctx = log.ContextWithLogger(ctx, log.FromContext(ctx).Scope("console")) err := console.Start(ctx, s.Console, schemaEventSourceFactory(), controllerClient, timelineClient, adminClient, routing.NewVerbRouter(ctx, schemaEventSourceFactory(), timelineClient), buildEngineClient) if err != nil { return fmt.Errorf("failed to start console server: %w", err) @@ -328,11 +317,6 @@ func (s *serveCommonConfig) run( Types: []schema.ResourceType{schema.ResourceTypeSQLMigration}, ID: "migration", }, - { - Provisioner: provisioner.NewControllerProvisioner(controllerClient), - Types: []schema.ResourceType{schema.ResourceTypeModule}, - ID: "controller", - }, { Provisioner: provisioner.NewRunnerScalingProvisioner(runnerScaling), Types: []schema.ResourceType{schema.ResourceTypeRunner}, @@ -351,7 +335,7 @@ func (s *serveCommonConfig) run( } wg.Go(func() error { - if err := provisioner.Start(provisionerCtx, config, provisionerRegistry, controllerClient); err != nil { + if err := provisioner.Start(provisionerCtx, config, provisionerRegistry, schemaClient); err != nil { logger.Errorf(err, "provisioner%d failed: %v", i, err) return fmt.Errorf("provisioner%d failed: %w", i, err) } @@ -369,6 +353,7 @@ func (s *serveCommonConfig) run( }) // Start Cron wg.Go(func() error { + ctx = log.ContextWithLogger(ctx, log.FromContext(ctx).Scope("cron")) err := cron.Start(ctx, schemaEventSourceFactory(), routing.NewVerbRouter(ctx, schemaEventSourceFactory(), timelineClient), timelineClient) if err != nil { return fmt.Errorf("cron failed: %w", err) @@ -377,7 +362,8 @@ func (s *serveCommonConfig) run( }) // Start Ingress wg.Go(func() error { - err := ingress.Start(ctx, s.Ingress, schemaEventSourceFactory(), routing.NewVerbRouter(ctx, schemaEventSourceFactory(), timelineClient), timelineClient) + ctx = log.ContextWithLogger(ctx, log.FromContext(ctx).Scope("http-ingress")) + err := ingress.Start(ctx, s.Ingress, schemaClient, routing.NewVerbRouter(ctx, schemaEventSourceFactory(), timelineClient), timelineClient) if err != nil { return fmt.Errorf("ingress failed: %w", err) } @@ -405,11 +391,6 @@ func (s *serveCommonConfig) run( if err := waitForControllerOnline(ctx, s.StartupTimeout, controllerClient); err != nil { return fmt.Errorf("controller failed to start: %w", err) } - if s.Provisioners > 0 { - if err := rpc.Wait(ctx, backoff.Backoff{Max: s.StartupTimeout}, s.StartupTimeout, provisionerClient); err != nil { - return fmt.Errorf("provisioner failed to start: %w", err) - } - } logger.Infof("Controller started in %.2fs", time.Since(start).Seconds()) if len(projConfig.Commands.Startup) > 0 { diff --git a/cmd/ftl/cmd_update.go b/cmd/ftl/cmd_update.go index 7e15d07f01..c1cb443129 100644 --- a/cmd/ftl/cmd_update.go +++ b/cmd/ftl/cmd_update.go @@ -2,11 +2,13 @@ package main import ( "context" + "fmt" "connectrpc.com/connect" ftlv1 "github.com/block/ftl/backend/protos/xyz/block/ftl/v1" "github.com/block/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" + schemapb "github.com/block/ftl/common/protos/xyz/block/ftl/schema/v1" "github.com/block/ftl/internal/key" ) @@ -15,13 +17,17 @@ type updateCmd struct { Deployment key.Deployment `arg:"" help:"Deployment to update."` } -func (u *updateCmd) Run(ctx context.Context, client ftlv1connect.ControllerServiceClient) error { - _, err := client.UpdateDeploy(ctx, connect.NewRequest(&ftlv1.UpdateDeployRequest{ - DeploymentKey: u.Deployment.String(), - MinReplicas: &u.Replicas, +func (u *updateCmd) Run(ctx context.Context, client ftlv1connect.SchemaServiceClient) error { + //TODO: implement this as a changeset + _, err := client.UpdateDeploymentRuntime(ctx, connect.NewRequest(&ftlv1.UpdateDeploymentRuntimeRequest{ + Deployment: u.Deployment.String(), + Event: &schemapb.ModuleRuntimeEvent{ + DeploymentKey: u.Deployment.String(), + Scaling: &schemapb.ModuleRuntimeScaling{MinReplicas: u.Replicas}, + }, })) if err != nil { - return err + return fmt.Errorf("failed to update deployment: %w", err) } return nil } diff --git a/cmd/ftl/main.go b/cmd/ftl/main.go index baf6b6bc30..28caff7cb3 100644 --- a/cmd/ftl/main.go +++ b/cmd/ftl/main.go @@ -22,7 +22,6 @@ import ( "github.com/block/ftl/backend/admin" "github.com/block/ftl/backend/protos/xyz/block/ftl/buildengine/v1/buildenginepbconnect" "github.com/block/ftl/backend/protos/xyz/block/ftl/lease/v1/leasepbconnect" - provisionerconnect "github.com/block/ftl/backend/protos/xyz/block/ftl/provisioner/v1beta1/provisionerpbconnect" "github.com/block/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" "github.com/block/ftl/internal" _ "github.com/block/ftl/internal/automaxprocs" // Set GOMAXPROCS to match Linux container CPU quota. @@ -254,10 +253,6 @@ func makeBindContext(logger *log.Logger, cancel context.CancelCauseFunc) termina ctx = rpc.ContextWithClient(ctx, controllerServiceClient) kctx.BindTo(controllerServiceClient, (*ftlv1connect.ControllerServiceClient)(nil)) - provisionerServiceClient := rpc.Dial(provisionerconnect.NewProvisionerServiceClient, cli.ProvisionerEndpoint.String(), log.Error) - ctx = rpc.ContextWithClient(ctx, provisionerServiceClient) - kctx.BindTo(provisionerServiceClient, (*provisionerconnect.ProvisionerServiceClient)(nil)) - timelineClient := timelineclient.NewClient(ctx, cli.TimelineEndpoint) kctx.Bind(timelineClient) diff --git a/cmd/go2proto/testdata/testdatapb/model.pb.go b/cmd/go2proto/testdata/testdatapb/model.pb.go index 66dd7efc36..7e164467fe 100644 --- a/cmd/go2proto/testdata/testdatapb/model.pb.go +++ b/cmd/go2proto/testdata/testdatapb/model.pb.go @@ -2,8 +2,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.3 -// protoc v5.29.3 +// protoc-gen-go v1.36.1 +// protoc v5.29.2 // source: model.proto package testdatapb diff --git a/common/protos/xyz/block/ftl/schema/v1/schema.pb.go b/common/protos/xyz/block/ftl/schema/v1/schema.pb.go index cfdc62e525..d0d41bc0aa 100644 --- a/common/protos/xyz/block/ftl/schema/v1/schema.pb.go +++ b/common/protos/xyz/block/ftl/schema/v1/schema.pb.go @@ -70,6 +70,67 @@ func (AliasKind) EnumDescriptor() ([]byte, []int) { return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{0} } +type ChangesetState int32 + +const ( + ChangesetState_CHANGESET_STATE_UNSPECIFIED ChangesetState = 0 + ChangesetState_CHANGESET_STATE_PREPARING ChangesetState = 1 + ChangesetState_CHANGESET_STATE_PREPARED ChangesetState = 2 + ChangesetState_CHANGESET_STATE_CLEANING_UP ChangesetState = 3 + ChangesetState_CHANGESET_STATE_COMMITTED ChangesetState = 4 + ChangesetState_CHANGESET_STATE_ROLLING_BACK ChangesetState = 5 + ChangesetState_CHANGESET_STATE_FAILED ChangesetState = 6 +) + +// Enum value maps for ChangesetState. +var ( + ChangesetState_name = map[int32]string{ + 0: "CHANGESET_STATE_UNSPECIFIED", + 1: "CHANGESET_STATE_PREPARING", + 2: "CHANGESET_STATE_PREPARED", + 3: "CHANGESET_STATE_CLEANING_UP", + 4: "CHANGESET_STATE_COMMITTED", + 5: "CHANGESET_STATE_ROLLING_BACK", + 6: "CHANGESET_STATE_FAILED", + } + ChangesetState_value = map[string]int32{ + "CHANGESET_STATE_UNSPECIFIED": 0, + "CHANGESET_STATE_PREPARING": 1, + "CHANGESET_STATE_PREPARED": 2, + "CHANGESET_STATE_CLEANING_UP": 3, + "CHANGESET_STATE_COMMITTED": 4, + "CHANGESET_STATE_ROLLING_BACK": 5, + "CHANGESET_STATE_FAILED": 6, + } +) + +func (x ChangesetState) Enum() *ChangesetState { + p := new(ChangesetState) + *p = x + return p +} + +func (x ChangesetState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ChangesetState) Descriptor() protoreflect.EnumDescriptor { + return file_xyz_block_ftl_schema_v1_schema_proto_enumTypes[1].Descriptor() +} + +func (ChangesetState) Type() protoreflect.EnumType { + return &file_xyz_block_ftl_schema_v1_schema_proto_enumTypes[1] +} + +func (x ChangesetState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ChangesetState.Descriptor instead. +func (ChangesetState) EnumDescriptor() ([]byte, []int) { + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{1} +} + type FromOffset int32 const ( @@ -103,11 +164,11 @@ func (x FromOffset) String() string { } func (FromOffset) Descriptor() protoreflect.EnumDescriptor { - return file_xyz_block_ftl_schema_v1_schema_proto_enumTypes[1].Descriptor() + return file_xyz_block_ftl_schema_v1_schema_proto_enumTypes[2].Descriptor() } func (FromOffset) Type() protoreflect.EnumType { - return &file_xyz_block_ftl_schema_v1_schema_proto_enumTypes[1] + return &file_xyz_block_ftl_schema_v1_schema_proto_enumTypes[2] } func (x FromOffset) Number() protoreflect.EnumNumber { @@ -116,7 +177,74 @@ func (x FromOffset) Number() protoreflect.EnumNumber { // Deprecated: Use FromOffset.Descriptor instead. func (FromOffset) EnumDescriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{1} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{2} +} + +type ModuleState int32 + +const ( + ModuleState_MODULE_STATE_UNSPECIFIED ModuleState = 0 + ModuleState_MODULE_STATE_PROVISIONING ModuleState = 1 + ModuleState_MODULE_STATE_READY ModuleState = 2 + ModuleState_MODULE_STATE_CANARY ModuleState = 3 + ModuleState_MODULE_STATE_CANONICAL ModuleState = 4 + ModuleState_MODULE_STATE_DRAINING ModuleState = 5 + ModuleState_MODULE_STATE_DE_PROVISIONING ModuleState = 6 + ModuleState_MODULE_STATE_DELETED ModuleState = 7 + ModuleState_MODULE_STATE_FAILED ModuleState = 8 +) + +// Enum value maps for ModuleState. +var ( + ModuleState_name = map[int32]string{ + 0: "MODULE_STATE_UNSPECIFIED", + 1: "MODULE_STATE_PROVISIONING", + 2: "MODULE_STATE_READY", + 3: "MODULE_STATE_CANARY", + 4: "MODULE_STATE_CANONICAL", + 5: "MODULE_STATE_DRAINING", + 6: "MODULE_STATE_DE_PROVISIONING", + 7: "MODULE_STATE_DELETED", + 8: "MODULE_STATE_FAILED", + } + ModuleState_value = map[string]int32{ + "MODULE_STATE_UNSPECIFIED": 0, + "MODULE_STATE_PROVISIONING": 1, + "MODULE_STATE_READY": 2, + "MODULE_STATE_CANARY": 3, + "MODULE_STATE_CANONICAL": 4, + "MODULE_STATE_DRAINING": 5, + "MODULE_STATE_DE_PROVISIONING": 6, + "MODULE_STATE_DELETED": 7, + "MODULE_STATE_FAILED": 8, + } +) + +func (x ModuleState) Enum() *ModuleState { + p := new(ModuleState) + *p = x + return p +} + +func (x ModuleState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ModuleState) Descriptor() protoreflect.EnumDescriptor { + return file_xyz_block_ftl_schema_v1_schema_proto_enumTypes[3].Descriptor() +} + +func (ModuleState) Type() protoreflect.EnumType { + return &file_xyz_block_ftl_schema_v1_schema_proto_enumTypes[3] +} + +func (x ModuleState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ModuleState.Descriptor instead. +func (ModuleState) EnumDescriptor() ([]byte, []int) { + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{3} } type AWSIAMAuthDatabaseConnector struct { @@ -371,6 +499,222 @@ func (x *Bytes) GetPos() *Position { return nil } +type Changeset struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + Modules []*Module `protobuf:"bytes,3,rep,name=modules,proto3" json:"modules,omitempty"` + State ChangesetState `protobuf:"varint,4,opt,name=state,proto3,enum=xyz.block.ftl.schema.v1.ChangesetState" json:"state,omitempty"` + Error *string `protobuf:"bytes,5,opt,name=error,proto3,oneof" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Changeset) Reset() { + *x = Changeset{} + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Changeset) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Changeset) ProtoMessage() {} + +func (x *Changeset) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Changeset.ProtoReflect.Descriptor instead. +func (*Changeset) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{5} +} + +func (x *Changeset) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *Changeset) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *Changeset) GetModules() []*Module { + if x != nil { + return x.Modules + } + return nil +} + +func (x *Changeset) GetState() ChangesetState { + if x != nil { + return x.State + } + return ChangesetState_CHANGESET_STATE_UNSPECIFIED +} + +func (x *Changeset) GetError() string { + if x != nil && x.Error != nil { + return *x.Error + } + return "" +} + +type ChangesetCommittedEvent struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ChangesetCommittedEvent) Reset() { + *x = ChangesetCommittedEvent{} + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ChangesetCommittedEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangesetCommittedEvent) ProtoMessage() {} + +func (x *ChangesetCommittedEvent) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChangesetCommittedEvent.ProtoReflect.Descriptor instead. +func (*ChangesetCommittedEvent) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{6} +} + +func (x *ChangesetCommittedEvent) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +type ChangesetCreatedEvent struct { + state protoimpl.MessageState `protogen:"open.v1"` + Changeset *Changeset `protobuf:"bytes,1,opt,name=changeset,proto3" json:"changeset,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ChangesetCreatedEvent) Reset() { + *x = ChangesetCreatedEvent{} + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ChangesetCreatedEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangesetCreatedEvent) ProtoMessage() {} + +func (x *ChangesetCreatedEvent) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChangesetCreatedEvent.ProtoReflect.Descriptor instead. +func (*ChangesetCreatedEvent) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{7} +} + +func (x *ChangesetCreatedEvent) GetChangeset() *Changeset { + if x != nil { + return x.Changeset + } + return nil +} + +type ChangesetFailedEvent struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ChangesetFailedEvent) Reset() { + *x = ChangesetFailedEvent{} + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ChangesetFailedEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChangesetFailedEvent) ProtoMessage() {} + +func (x *ChangesetFailedEvent) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChangesetFailedEvent.ProtoReflect.Descriptor instead. +func (*ChangesetFailedEvent) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{8} +} + +func (x *ChangesetFailedEvent) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *ChangesetFailedEvent) GetError() string { + if x != nil { + return x.Error + } + return "" +} + type Config struct { state protoimpl.MessageState `protogen:"open.v1"` Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` @@ -383,7 +727,7 @@ type Config struct { func (x *Config) Reset() { *x = Config{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[5] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -395,7 +739,7 @@ func (x *Config) String() string { func (*Config) ProtoMessage() {} func (x *Config) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[5] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -408,7 +752,7 @@ func (x *Config) ProtoReflect() protoreflect.Message { // Deprecated: Use Config.ProtoReflect.Descriptor instead. func (*Config) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{5} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{9} } func (x *Config) GetPos() *Position { @@ -449,7 +793,7 @@ type DSNDatabaseConnector struct { func (x *DSNDatabaseConnector) Reset() { *x = DSNDatabaseConnector{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[6] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -461,7 +805,7 @@ func (x *DSNDatabaseConnector) String() string { func (*DSNDatabaseConnector) ProtoMessage() {} func (x *DSNDatabaseConnector) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[6] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -474,7 +818,7 @@ func (x *DSNDatabaseConnector) ProtoReflect() protoreflect.Message { // Deprecated: Use DSNDatabaseConnector.ProtoReflect.Descriptor instead. func (*DSNDatabaseConnector) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{6} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{10} } func (x *DSNDatabaseConnector) GetPos() *Position { @@ -507,7 +851,7 @@ type Data struct { func (x *Data) Reset() { *x = Data{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[7] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -519,7 +863,7 @@ func (x *Data) String() string { func (*Data) ProtoMessage() {} func (x *Data) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[7] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -532,7 +876,7 @@ func (x *Data) ProtoReflect() protoreflect.Message { // Deprecated: Use Data.ProtoReflect.Descriptor instead. func (*Data) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{7} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{11} } func (x *Data) GetPos() *Position { @@ -598,7 +942,7 @@ type Database struct { func (x *Database) Reset() { *x = Database{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[8] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -610,7 +954,7 @@ func (x *Database) String() string { func (*Database) ProtoMessage() {} func (x *Database) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[8] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -623,7 +967,7 @@ func (x *Database) ProtoReflect() protoreflect.Message { // Deprecated: Use Database.ProtoReflect.Descriptor instead. func (*Database) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{8} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{12} } func (x *Database) GetPos() *Position { @@ -681,7 +1025,7 @@ type DatabaseConnector struct { func (x *DatabaseConnector) Reset() { *x = DatabaseConnector{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[9] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -693,7 +1037,7 @@ func (x *DatabaseConnector) String() string { func (*DatabaseConnector) ProtoMessage() {} func (x *DatabaseConnector) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[9] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -706,7 +1050,7 @@ func (x *DatabaseConnector) ProtoReflect() protoreflect.Message { // Deprecated: Use DatabaseConnector.ProtoReflect.Descriptor instead. func (*DatabaseConnector) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{9} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{13} } func (x *DatabaseConnector) GetValue() isDatabaseConnector_Value { @@ -759,7 +1103,7 @@ type DatabaseRuntime struct { func (x *DatabaseRuntime) Reset() { *x = DatabaseRuntime{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[10] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -771,7 +1115,7 @@ func (x *DatabaseRuntime) String() string { func (*DatabaseRuntime) ProtoMessage() {} func (x *DatabaseRuntime) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[10] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -784,7 +1128,7 @@ func (x *DatabaseRuntime) ProtoReflect() protoreflect.Message { // Deprecated: Use DatabaseRuntime.ProtoReflect.Descriptor instead. func (*DatabaseRuntime) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{10} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{14} } func (x *DatabaseRuntime) GetConnections() *DatabaseRuntimeConnections { @@ -804,7 +1148,7 @@ type DatabaseRuntimeConnections struct { func (x *DatabaseRuntimeConnections) Reset() { *x = DatabaseRuntimeConnections{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[11] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -816,7 +1160,7 @@ func (x *DatabaseRuntimeConnections) String() string { func (*DatabaseRuntimeConnections) ProtoMessage() {} func (x *DatabaseRuntimeConnections) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[11] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -829,7 +1173,7 @@ func (x *DatabaseRuntimeConnections) ProtoReflect() protoreflect.Message { // Deprecated: Use DatabaseRuntimeConnections.ProtoReflect.Descriptor instead. func (*DatabaseRuntimeConnections) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{11} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{15} } func (x *DatabaseRuntimeConnections) GetRead() *DatabaseConnector { @@ -857,7 +1201,7 @@ type DatabaseRuntimeEvent struct { func (x *DatabaseRuntimeEvent) Reset() { *x = DatabaseRuntimeEvent{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[12] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -869,7 +1213,7 @@ func (x *DatabaseRuntimeEvent) String() string { func (*DatabaseRuntimeEvent) ProtoMessage() {} func (x *DatabaseRuntimeEvent) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[12] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -882,7 +1226,7 @@ func (x *DatabaseRuntimeEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use DatabaseRuntimeEvent.ProtoReflect.Descriptor instead. func (*DatabaseRuntimeEvent) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{12} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{16} } func (x *DatabaseRuntimeEvent) GetModule() string { @@ -926,7 +1270,7 @@ type Decl struct { func (x *Decl) Reset() { *x = Decl{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[13] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -938,7 +1282,7 @@ func (x *Decl) String() string { func (*Decl) ProtoMessage() {} func (x *Decl) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[13] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -951,7 +1295,7 @@ func (x *Decl) ProtoReflect() protoreflect.Message { // Deprecated: Use Decl.ProtoReflect.Descriptor instead. func (*Decl) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{13} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{17} } func (x *Decl) GetValue() isDecl_Value { @@ -1090,13 +1434,14 @@ type DeploymentActivatedEvent struct { Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` ActivatedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=activated_at,json=activatedAt,proto3" json:"activated_at,omitempty"` MinReplicas int64 `protobuf:"varint,3,opt,name=min_replicas,json=minReplicas,proto3" json:"min_replicas,omitempty"` + Changeset string `protobuf:"bytes,4,opt,name=changeset,proto3" json:"changeset,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *DeploymentActivatedEvent) Reset() { *x = DeploymentActivatedEvent{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[14] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1108,7 +1453,7 @@ func (x *DeploymentActivatedEvent) String() string { func (*DeploymentActivatedEvent) ProtoMessage() {} func (x *DeploymentActivatedEvent) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[14] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1121,7 +1466,7 @@ func (x *DeploymentActivatedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentActivatedEvent.ProtoReflect.Descriptor instead. func (*DeploymentActivatedEvent) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{14} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{18} } func (x *DeploymentActivatedEvent) GetKey() string { @@ -1145,17 +1490,25 @@ func (x *DeploymentActivatedEvent) GetMinReplicas() int64 { return 0 } +func (x *DeploymentActivatedEvent) GetChangeset() string { + if x != nil { + return x.Changeset + } + return "" +} + type DeploymentCreatedEvent struct { state protoimpl.MessageState `protogen:"open.v1"` Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` Schema *Module `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` + Changeset string `protobuf:"bytes,3,opt,name=changeset,proto3" json:"changeset,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *DeploymentCreatedEvent) Reset() { *x = DeploymentCreatedEvent{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[15] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1167,7 +1520,7 @@ func (x *DeploymentCreatedEvent) String() string { func (*DeploymentCreatedEvent) ProtoMessage() {} func (x *DeploymentCreatedEvent) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[15] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1180,7 +1533,7 @@ func (x *DeploymentCreatedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentCreatedEvent.ProtoReflect.Descriptor instead. func (*DeploymentCreatedEvent) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{15} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{19} } func (x *DeploymentCreatedEvent) GetKey() string { @@ -1197,17 +1550,25 @@ func (x *DeploymentCreatedEvent) GetSchema() *Module { return nil } +func (x *DeploymentCreatedEvent) GetChangeset() string { + if x != nil { + return x.Changeset + } + return "" +} + type DeploymentDeactivatedEvent struct { state protoimpl.MessageState `protogen:"open.v1"` Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` ModuleRemoved bool `protobuf:"varint,2,opt,name=module_removed,json=moduleRemoved,proto3" json:"module_removed,omitempty"` + Changeset string `protobuf:"bytes,3,opt,name=changeset,proto3" json:"changeset,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *DeploymentDeactivatedEvent) Reset() { *x = DeploymentDeactivatedEvent{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[16] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1219,7 +1580,7 @@ func (x *DeploymentDeactivatedEvent) String() string { func (*DeploymentDeactivatedEvent) ProtoMessage() {} func (x *DeploymentDeactivatedEvent) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[16] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1232,7 +1593,7 @@ func (x *DeploymentDeactivatedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentDeactivatedEvent.ProtoReflect.Descriptor instead. func (*DeploymentDeactivatedEvent) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{16} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{20} } func (x *DeploymentDeactivatedEvent) GetKey() string { @@ -1249,17 +1610,25 @@ func (x *DeploymentDeactivatedEvent) GetModuleRemoved() bool { return false } +func (x *DeploymentDeactivatedEvent) GetChangeset() string { + if x != nil { + return x.Changeset + } + return "" +} + type DeploymentReplicasUpdatedEvent struct { state protoimpl.MessageState `protogen:"open.v1"` Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` Replicas int64 `protobuf:"varint,2,opt,name=replicas,proto3" json:"replicas,omitempty"` + Changeset string `protobuf:"bytes,3,opt,name=changeset,proto3" json:"changeset,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *DeploymentReplicasUpdatedEvent) Reset() { *x = DeploymentReplicasUpdatedEvent{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[17] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1271,7 +1640,7 @@ func (x *DeploymentReplicasUpdatedEvent) String() string { func (*DeploymentReplicasUpdatedEvent) ProtoMessage() {} func (x *DeploymentReplicasUpdatedEvent) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[17] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1284,7 +1653,7 @@ func (x *DeploymentReplicasUpdatedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentReplicasUpdatedEvent.ProtoReflect.Descriptor instead. func (*DeploymentReplicasUpdatedEvent) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{17} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{21} } func (x *DeploymentReplicasUpdatedEvent) GetKey() string { @@ -1301,17 +1670,25 @@ func (x *DeploymentReplicasUpdatedEvent) GetReplicas() int64 { return 0 } +func (x *DeploymentReplicasUpdatedEvent) GetChangeset() string { + if x != nil { + return x.Changeset + } + return "" +} + type DeploymentSchemaUpdatedEvent struct { state protoimpl.MessageState `protogen:"open.v1"` Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` Schema *Module `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` + Changeset string `protobuf:"bytes,3,opt,name=changeset,proto3" json:"changeset,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *DeploymentSchemaUpdatedEvent) Reset() { *x = DeploymentSchemaUpdatedEvent{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[18] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1323,7 +1700,7 @@ func (x *DeploymentSchemaUpdatedEvent) String() string { func (*DeploymentSchemaUpdatedEvent) ProtoMessage() {} func (x *DeploymentSchemaUpdatedEvent) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[18] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1336,7 +1713,7 @@ func (x *DeploymentSchemaUpdatedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentSchemaUpdatedEvent.ProtoReflect.Descriptor instead. func (*DeploymentSchemaUpdatedEvent) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{18} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{22} } func (x *DeploymentSchemaUpdatedEvent) GetKey() string { @@ -1353,6 +1730,13 @@ func (x *DeploymentSchemaUpdatedEvent) GetSchema() *Module { return nil } +func (x *DeploymentSchemaUpdatedEvent) GetChangeset() string { + if x != nil { + return x.Changeset + } + return "" +} + type Enum struct { state protoimpl.MessageState `protogen:"open.v1"` Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` @@ -1367,7 +1751,7 @@ type Enum struct { func (x *Enum) Reset() { *x = Enum{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[19] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1379,7 +1763,7 @@ func (x *Enum) String() string { func (*Enum) ProtoMessage() {} func (x *Enum) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[19] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1392,7 +1776,7 @@ func (x *Enum) ProtoReflect() protoreflect.Message { // Deprecated: Use Enum.ProtoReflect.Descriptor instead. func (*Enum) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{19} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{23} } func (x *Enum) GetPos() *Position { @@ -1449,7 +1833,7 @@ type EnumVariant struct { func (x *EnumVariant) Reset() { *x = EnumVariant{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[20] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1461,7 +1845,7 @@ func (x *EnumVariant) String() string { func (*EnumVariant) ProtoMessage() {} func (x *EnumVariant) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[20] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1474,7 +1858,7 @@ func (x *EnumVariant) ProtoReflect() protoreflect.Message { // Deprecated: Use EnumVariant.ProtoReflect.Descriptor instead. func (*EnumVariant) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{20} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{24} } func (x *EnumVariant) GetPos() *Position { @@ -1509,6 +1893,9 @@ type Event struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Value: // + // *Event_ChangesetCommittedEvent + // *Event_ChangesetCreatedEvent + // *Event_ChangesetFailedEvent // *Event_DatabaseRuntimeEvent // *Event_DeploymentActivatedEvent // *Event_DeploymentCreatedEvent @@ -1526,7 +1913,7 @@ type Event struct { func (x *Event) Reset() { *x = Event{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[21] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1538,7 +1925,7 @@ func (x *Event) String() string { func (*Event) ProtoMessage() {} func (x *Event) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[21] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1551,7 +1938,7 @@ func (x *Event) ProtoReflect() protoreflect.Message { // Deprecated: Use Event.ProtoReflect.Descriptor instead. func (*Event) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{21} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{25} } func (x *Event) GetValue() isEvent_Value { @@ -1561,6 +1948,33 @@ func (x *Event) GetValue() isEvent_Value { return nil } +func (x *Event) GetChangesetCommittedEvent() *ChangesetCommittedEvent { + if x != nil { + if x, ok := x.Value.(*Event_ChangesetCommittedEvent); ok { + return x.ChangesetCommittedEvent + } + } + return nil +} + +func (x *Event) GetChangesetCreatedEvent() *ChangesetCreatedEvent { + if x != nil { + if x, ok := x.Value.(*Event_ChangesetCreatedEvent); ok { + return x.ChangesetCreatedEvent + } + } + return nil +} + +func (x *Event) GetChangesetFailedEvent() *ChangesetFailedEvent { + if x != nil { + if x, ok := x.Value.(*Event_ChangesetFailedEvent); ok { + return x.ChangesetFailedEvent + } + } + return nil +} + func (x *Event) GetDatabaseRuntimeEvent() *DatabaseRuntimeEvent { if x != nil { if x, ok := x.Value.(*Event_DatabaseRuntimeEvent); ok { @@ -1655,6 +2069,18 @@ type isEvent_Value interface { isEvent_Value() } +type Event_ChangesetCommittedEvent struct { + ChangesetCommittedEvent *ChangesetCommittedEvent `protobuf:"bytes,12,opt,name=changeset_committed_event,json=changesetCommittedEvent,proto3,oneof"` +} + +type Event_ChangesetCreatedEvent struct { + ChangesetCreatedEvent *ChangesetCreatedEvent `protobuf:"bytes,11,opt,name=changeset_created_event,json=changesetCreatedEvent,proto3,oneof"` +} + +type Event_ChangesetFailedEvent struct { + ChangesetFailedEvent *ChangesetFailedEvent `protobuf:"bytes,13,opt,name=changeset_failed_event,json=changesetFailedEvent,proto3,oneof"` +} + type Event_DatabaseRuntimeEvent struct { DatabaseRuntimeEvent *DatabaseRuntimeEvent `protobuf:"bytes,8,opt,name=database_runtime_event,json=databaseRuntimeEvent,proto3,oneof"` } @@ -1695,6 +2121,12 @@ type Event_VerbRuntimeEvent struct { VerbRuntimeEvent *VerbRuntimeEvent `protobuf:"bytes,6,opt,name=verb_runtime_event,json=verbRuntimeEvent,proto3,oneof"` } +func (*Event_ChangesetCommittedEvent) isEvent_Value() {} + +func (*Event_ChangesetCreatedEvent) isEvent_Value() {} + +func (*Event_ChangesetFailedEvent) isEvent_Value() {} + func (*Event_DatabaseRuntimeEvent) isEvent_Value() {} func (*Event_DeploymentActivatedEvent) isEvent_Value() {} @@ -1728,7 +2160,7 @@ type Field struct { func (x *Field) Reset() { *x = Field{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[22] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1740,7 +2172,7 @@ func (x *Field) String() string { func (*Field) ProtoMessage() {} func (x *Field) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[22] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1753,7 +2185,7 @@ func (x *Field) ProtoReflect() protoreflect.Message { // Deprecated: Use Field.ProtoReflect.Descriptor instead. func (*Field) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{22} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{26} } func (x *Field) GetPos() *Position { @@ -1800,7 +2232,7 @@ type Float struct { func (x *Float) Reset() { *x = Float{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[23] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1812,7 +2244,7 @@ func (x *Float) String() string { func (*Float) ProtoMessage() {} func (x *Float) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[23] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1825,7 +2257,7 @@ func (x *Float) ProtoReflect() protoreflect.Message { // Deprecated: Use Float.ProtoReflect.Descriptor instead. func (*Float) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{23} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{27} } func (x *Float) GetPos() *Position { @@ -1848,7 +2280,7 @@ type IngressPathComponent struct { func (x *IngressPathComponent) Reset() { *x = IngressPathComponent{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[24] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1860,7 +2292,7 @@ func (x *IngressPathComponent) String() string { func (*IngressPathComponent) ProtoMessage() {} func (x *IngressPathComponent) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[24] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1873,7 +2305,7 @@ func (x *IngressPathComponent) ProtoReflect() protoreflect.Message { // Deprecated: Use IngressPathComponent.ProtoReflect.Descriptor instead. func (*IngressPathComponent) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{24} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{28} } func (x *IngressPathComponent) GetValue() isIngressPathComponent_Value { @@ -1927,7 +2359,7 @@ type IngressPathLiteral struct { func (x *IngressPathLiteral) Reset() { *x = IngressPathLiteral{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[25] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1939,7 +2371,7 @@ func (x *IngressPathLiteral) String() string { func (*IngressPathLiteral) ProtoMessage() {} func (x *IngressPathLiteral) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[25] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1952,7 +2384,7 @@ func (x *IngressPathLiteral) ProtoReflect() protoreflect.Message { // Deprecated: Use IngressPathLiteral.ProtoReflect.Descriptor instead. func (*IngressPathLiteral) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{25} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{29} } func (x *IngressPathLiteral) GetPos() *Position { @@ -1979,7 +2411,7 @@ type IngressPathParameter struct { func (x *IngressPathParameter) Reset() { *x = IngressPathParameter{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[26] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1991,7 +2423,7 @@ func (x *IngressPathParameter) String() string { func (*IngressPathParameter) ProtoMessage() {} func (x *IngressPathParameter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[26] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2004,7 +2436,7 @@ func (x *IngressPathParameter) ProtoReflect() protoreflect.Message { // Deprecated: Use IngressPathParameter.ProtoReflect.Descriptor instead. func (*IngressPathParameter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{26} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{30} } func (x *IngressPathParameter) GetPos() *Position { @@ -2030,7 +2462,7 @@ type Int struct { func (x *Int) Reset() { *x = Int{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[27] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2042,7 +2474,7 @@ func (x *Int) String() string { func (*Int) ProtoMessage() {} func (x *Int) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[27] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2055,7 +2487,7 @@ func (x *Int) ProtoReflect() protoreflect.Message { // Deprecated: Use Int.ProtoReflect.Descriptor instead. func (*Int) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{27} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{31} } func (x *Int) GetPos() *Position { @@ -2075,7 +2507,7 @@ type IntValue struct { func (x *IntValue) Reset() { *x = IntValue{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[28] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2087,7 +2519,7 @@ func (x *IntValue) String() string { func (*IntValue) ProtoMessage() {} func (x *IntValue) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[28] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2100,7 +2532,7 @@ func (x *IntValue) ProtoReflect() protoreflect.Message { // Deprecated: Use IntValue.ProtoReflect.Descriptor instead. func (*IntValue) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{28} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{32} } func (x *IntValue) GetPos() *Position { @@ -2128,7 +2560,7 @@ type Map struct { func (x *Map) Reset() { *x = Map{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[29] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2140,7 +2572,7 @@ func (x *Map) String() string { func (*Map) ProtoMessage() {} func (x *Map) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[29] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2153,7 +2585,7 @@ func (x *Map) ProtoReflect() protoreflect.Message { // Deprecated: Use Map.ProtoReflect.Descriptor instead. func (*Map) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{29} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{33} } func (x *Map) GetPos() *Position { @@ -2206,7 +2638,7 @@ type Metadata struct { func (x *Metadata) Reset() { *x = Metadata{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[30] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2218,7 +2650,7 @@ func (x *Metadata) String() string { func (*Metadata) ProtoMessage() {} func (x *Metadata) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[30] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2231,7 +2663,7 @@ func (x *Metadata) ProtoReflect() protoreflect.Message { // Deprecated: Use Metadata.ProtoReflect.Descriptor instead. func (*Metadata) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{30} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{34} } func (x *Metadata) GetValue() isMetadata_Value { @@ -2511,7 +2943,7 @@ type MetadataAlias struct { func (x *MetadataAlias) Reset() { *x = MetadataAlias{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[31] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2523,7 +2955,7 @@ func (x *MetadataAlias) String() string { func (*MetadataAlias) ProtoMessage() {} func (x *MetadataAlias) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[31] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2536,7 +2968,7 @@ func (x *MetadataAlias) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataAlias.ProtoReflect.Descriptor instead. func (*MetadataAlias) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{31} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{35} } func (x *MetadataAlias) GetPos() *Position { @@ -2572,7 +3004,7 @@ type MetadataArtefact struct { func (x *MetadataArtefact) Reset() { *x = MetadataArtefact{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[32] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2584,7 +3016,7 @@ func (x *MetadataArtefact) String() string { func (*MetadataArtefact) ProtoMessage() {} func (x *MetadataArtefact) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[32] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2597,7 +3029,7 @@ func (x *MetadataArtefact) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataArtefact.ProtoReflect.Descriptor instead. func (*MetadataArtefact) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{32} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{36} } func (x *MetadataArtefact) GetPos() *Position { @@ -2639,7 +3071,7 @@ type MetadataCalls struct { func (x *MetadataCalls) Reset() { *x = MetadataCalls{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[33] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2651,7 +3083,7 @@ func (x *MetadataCalls) String() string { func (*MetadataCalls) ProtoMessage() {} func (x *MetadataCalls) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[33] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2664,7 +3096,7 @@ func (x *MetadataCalls) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataCalls.ProtoReflect.Descriptor instead. func (*MetadataCalls) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{33} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{37} } func (x *MetadataCalls) GetPos() *Position { @@ -2692,7 +3124,7 @@ type MetadataConfig struct { func (x *MetadataConfig) Reset() { *x = MetadataConfig{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[34] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2704,7 +3136,7 @@ func (x *MetadataConfig) String() string { func (*MetadataConfig) ProtoMessage() {} func (x *MetadataConfig) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[34] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2717,7 +3149,7 @@ func (x *MetadataConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataConfig.ProtoReflect.Descriptor instead. func (*MetadataConfig) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{34} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{38} } func (x *MetadataConfig) GetPos() *Position { @@ -2744,7 +3176,7 @@ type MetadataCronJob struct { func (x *MetadataCronJob) Reset() { *x = MetadataCronJob{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[35] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2756,7 +3188,7 @@ func (x *MetadataCronJob) String() string { func (*MetadataCronJob) ProtoMessage() {} func (x *MetadataCronJob) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[35] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2769,7 +3201,7 @@ func (x *MetadataCronJob) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataCronJob.ProtoReflect.Descriptor instead. func (*MetadataCronJob) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{35} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{39} } func (x *MetadataCronJob) GetPos() *Position { @@ -2796,7 +3228,7 @@ type MetadataDatabases struct { func (x *MetadataDatabases) Reset() { *x = MetadataDatabases{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[36] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2808,7 +3240,7 @@ func (x *MetadataDatabases) String() string { func (*MetadataDatabases) ProtoMessage() {} func (x *MetadataDatabases) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[36] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2821,7 +3253,7 @@ func (x *MetadataDatabases) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataDatabases.ProtoReflect.Descriptor instead. func (*MetadataDatabases) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{36} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{40} } func (x *MetadataDatabases) GetPos() *Position { @@ -2849,7 +3281,7 @@ type MetadataEncoding struct { func (x *MetadataEncoding) Reset() { *x = MetadataEncoding{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[37] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2861,7 +3293,7 @@ func (x *MetadataEncoding) String() string { func (*MetadataEncoding) ProtoMessage() {} func (x *MetadataEncoding) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[37] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2874,7 +3306,7 @@ func (x *MetadataEncoding) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataEncoding.ProtoReflect.Descriptor instead. func (*MetadataEncoding) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{37} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{41} } func (x *MetadataEncoding) GetPos() *Position { @@ -2910,7 +3342,7 @@ type MetadataIngress struct { func (x *MetadataIngress) Reset() { *x = MetadataIngress{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[38] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2922,7 +3354,7 @@ func (x *MetadataIngress) String() string { func (*MetadataIngress) ProtoMessage() {} func (x *MetadataIngress) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[38] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2935,7 +3367,7 @@ func (x *MetadataIngress) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataIngress.ProtoReflect.Descriptor instead. func (*MetadataIngress) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{38} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{42} } func (x *MetadataIngress) GetPos() *Position { @@ -2976,7 +3408,7 @@ type MetadataPartitions struct { func (x *MetadataPartitions) Reset() { *x = MetadataPartitions{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[39] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2988,7 +3420,7 @@ func (x *MetadataPartitions) String() string { func (*MetadataPartitions) ProtoMessage() {} func (x *MetadataPartitions) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[39] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3001,7 +3433,7 @@ func (x *MetadataPartitions) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataPartitions.ProtoReflect.Descriptor instead. func (*MetadataPartitions) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{39} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{43} } func (x *MetadataPartitions) GetPos() *Position { @@ -3028,7 +3460,7 @@ type MetadataPublisher struct { func (x *MetadataPublisher) Reset() { *x = MetadataPublisher{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[40] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3040,7 +3472,7 @@ func (x *MetadataPublisher) String() string { func (*MetadataPublisher) ProtoMessage() {} func (x *MetadataPublisher) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[40] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3053,7 +3485,7 @@ func (x *MetadataPublisher) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataPublisher.ProtoReflect.Descriptor instead. func (*MetadataPublisher) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{40} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{44} } func (x *MetadataPublisher) GetPos() *Position { @@ -3083,7 +3515,7 @@ type MetadataRetry struct { func (x *MetadataRetry) Reset() { *x = MetadataRetry{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[41] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3095,7 +3527,7 @@ func (x *MetadataRetry) String() string { func (*MetadataRetry) ProtoMessage() {} func (x *MetadataRetry) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[41] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3108,7 +3540,7 @@ func (x *MetadataRetry) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataRetry.ProtoReflect.Descriptor instead. func (*MetadataRetry) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{41} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{45} } func (x *MetadataRetry) GetPos() *Position { @@ -3158,7 +3590,7 @@ type MetadataSQLColumn struct { func (x *MetadataSQLColumn) Reset() { *x = MetadataSQLColumn{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[42] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3170,7 +3602,7 @@ func (x *MetadataSQLColumn) String() string { func (*MetadataSQLColumn) ProtoMessage() {} func (x *MetadataSQLColumn) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[42] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3183,7 +3615,7 @@ func (x *MetadataSQLColumn) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataSQLColumn.ProtoReflect.Descriptor instead. func (*MetadataSQLColumn) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{42} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{46} } func (x *MetadataSQLColumn) GetPos() *Position { @@ -3217,7 +3649,7 @@ type MetadataSQLMigration struct { func (x *MetadataSQLMigration) Reset() { *x = MetadataSQLMigration{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[43] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3229,7 +3661,7 @@ func (x *MetadataSQLMigration) String() string { func (*MetadataSQLMigration) ProtoMessage() {} func (x *MetadataSQLMigration) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[43] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3242,7 +3674,7 @@ func (x *MetadataSQLMigration) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataSQLMigration.ProtoReflect.Descriptor instead. func (*MetadataSQLMigration) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{43} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{47} } func (x *MetadataSQLMigration) GetPos() *Position { @@ -3271,7 +3703,7 @@ type MetadataSQLQuery struct { func (x *MetadataSQLQuery) Reset() { *x = MetadataSQLQuery{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[44] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3283,7 +3715,7 @@ func (x *MetadataSQLQuery) String() string { func (*MetadataSQLQuery) ProtoMessage() {} func (x *MetadataSQLQuery) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[44] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3296,7 +3728,7 @@ func (x *MetadataSQLQuery) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataSQLQuery.ProtoReflect.Descriptor instead. func (*MetadataSQLQuery) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{44} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{48} } func (x *MetadataSQLQuery) GetPos() *Position { @@ -3331,7 +3763,7 @@ type MetadataSecrets struct { func (x *MetadataSecrets) Reset() { *x = MetadataSecrets{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[45] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3343,7 +3775,7 @@ func (x *MetadataSecrets) String() string { func (*MetadataSecrets) ProtoMessage() {} func (x *MetadataSecrets) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[45] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3356,7 +3788,7 @@ func (x *MetadataSecrets) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataSecrets.ProtoReflect.Descriptor instead. func (*MetadataSecrets) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{45} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{49} } func (x *MetadataSecrets) GetPos() *Position { @@ -3385,7 +3817,7 @@ type MetadataSubscriber struct { func (x *MetadataSubscriber) Reset() { *x = MetadataSubscriber{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[46] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3397,7 +3829,7 @@ func (x *MetadataSubscriber) String() string { func (*MetadataSubscriber) ProtoMessage() {} func (x *MetadataSubscriber) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[46] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3410,7 +3842,7 @@ func (x *MetadataSubscriber) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataSubscriber.ProtoReflect.Descriptor instead. func (*MetadataSubscriber) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{46} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{50} } func (x *MetadataSubscriber) GetPos() *Position { @@ -3452,7 +3884,7 @@ type MetadataTypeMap struct { func (x *MetadataTypeMap) Reset() { *x = MetadataTypeMap{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[47] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3464,7 +3896,7 @@ func (x *MetadataTypeMap) String() string { func (*MetadataTypeMap) ProtoMessage() {} func (x *MetadataTypeMap) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[47] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3477,7 +3909,7 @@ func (x *MetadataTypeMap) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataTypeMap.ProtoReflect.Descriptor instead. func (*MetadataTypeMap) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{47} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{51} } func (x *MetadataTypeMap) GetPos() *Position { @@ -3516,7 +3948,7 @@ type Module struct { func (x *Module) Reset() { *x = Module{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[48] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3528,7 +3960,7 @@ func (x *Module) String() string { func (*Module) ProtoMessage() {} func (x *Module) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[48] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3541,7 +3973,7 @@ func (x *Module) ProtoReflect() protoreflect.Message { // Deprecated: Use Module.ProtoReflect.Descriptor instead. func (*Module) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{48} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{52} } func (x *Module) GetPos() *Position { @@ -3605,7 +4037,7 @@ type ModuleRuntime struct { func (x *ModuleRuntime) Reset() { *x = ModuleRuntime{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[49] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3617,7 +4049,7 @@ func (x *ModuleRuntime) String() string { func (*ModuleRuntime) ProtoMessage() {} func (x *ModuleRuntime) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[49] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3630,7 +4062,7 @@ func (x *ModuleRuntime) ProtoReflect() protoreflect.Message { // Deprecated: Use ModuleRuntime.ProtoReflect.Descriptor instead. func (*ModuleRuntime) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{49} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{53} } func (x *ModuleRuntime) GetBase() *ModuleRuntimeBase { @@ -3667,7 +4099,7 @@ type ModuleRuntimeBase struct { func (x *ModuleRuntimeBase) Reset() { *x = ModuleRuntimeBase{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[50] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3679,7 +4111,7 @@ func (x *ModuleRuntimeBase) String() string { func (*ModuleRuntimeBase) ProtoMessage() {} func (x *ModuleRuntimeBase) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[50] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3692,7 +4124,7 @@ func (x *ModuleRuntimeBase) ProtoReflect() protoreflect.Message { // Deprecated: Use ModuleRuntimeBase.ProtoReflect.Descriptor instead. func (*ModuleRuntimeBase) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{50} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{54} } func (x *ModuleRuntimeBase) GetCreateTime() *timestamppb.Timestamp { @@ -3736,13 +4168,14 @@ type ModuleRuntimeDeployment struct { DeploymentKey string `protobuf:"bytes,2,opt,name=deployment_key,json=deploymentKey,proto3" json:"deployment_key,omitempty"` CreatedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` ActivatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=activated_at,json=activatedAt,proto3,oneof" json:"activated_at,omitempty"` + State ModuleState `protobuf:"varint,5,opt,name=state,proto3,enum=xyz.block.ftl.schema.v1.ModuleState" json:"state,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ModuleRuntimeDeployment) Reset() { *x = ModuleRuntimeDeployment{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[51] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3754,7 +4187,7 @@ func (x *ModuleRuntimeDeployment) String() string { func (*ModuleRuntimeDeployment) ProtoMessage() {} func (x *ModuleRuntimeDeployment) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[51] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3767,7 +4200,7 @@ func (x *ModuleRuntimeDeployment) ProtoReflect() protoreflect.Message { // Deprecated: Use ModuleRuntimeDeployment.ProtoReflect.Descriptor instead. func (*ModuleRuntimeDeployment) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{51} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{55} } func (x *ModuleRuntimeDeployment) GetEndpoint() string { @@ -3798,20 +4231,26 @@ func (x *ModuleRuntimeDeployment) GetActivatedAt() *timestamppb.Timestamp { return nil } +func (x *ModuleRuntimeDeployment) GetState() ModuleState { + if x != nil { + return x.State + } + return ModuleState_MODULE_STATE_UNSPECIFIED +} + type ModuleRuntimeEvent struct { state protoimpl.MessageState `protogen:"open.v1"` - Module string `protobuf:"bytes,1,opt,name=module,proto3" json:"module,omitempty"` - DeploymentKey *string `protobuf:"bytes,2,opt,name=deployment_key,json=deploymentKey,proto3,oneof" json:"deployment_key,omitempty"` - Base *ModuleRuntimeBase `protobuf:"bytes,3,opt,name=base,proto3,oneof" json:"base,omitempty"` - Scaling *ModuleRuntimeScaling `protobuf:"bytes,4,opt,name=scaling,proto3,oneof" json:"scaling,omitempty"` - Deployment *ModuleRuntimeDeployment `protobuf:"bytes,5,opt,name=deployment,proto3,oneof" json:"deployment,omitempty"` + DeploymentKey string `protobuf:"bytes,1,opt,name=deployment_key,json=deploymentKey,proto3" json:"deployment_key,omitempty"` + Base *ModuleRuntimeBase `protobuf:"bytes,2,opt,name=base,proto3,oneof" json:"base,omitempty"` + Scaling *ModuleRuntimeScaling `protobuf:"bytes,3,opt,name=scaling,proto3,oneof" json:"scaling,omitempty"` + Deployment *ModuleRuntimeDeployment `protobuf:"bytes,4,opt,name=deployment,proto3,oneof" json:"deployment,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ModuleRuntimeEvent) Reset() { *x = ModuleRuntimeEvent{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[52] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3823,7 +4262,7 @@ func (x *ModuleRuntimeEvent) String() string { func (*ModuleRuntimeEvent) ProtoMessage() {} func (x *ModuleRuntimeEvent) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[52] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3836,19 +4275,12 @@ func (x *ModuleRuntimeEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use ModuleRuntimeEvent.ProtoReflect.Descriptor instead. func (*ModuleRuntimeEvent) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{52} -} - -func (x *ModuleRuntimeEvent) GetModule() string { - if x != nil { - return x.Module - } - return "" + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{56} } func (x *ModuleRuntimeEvent) GetDeploymentKey() string { - if x != nil && x.DeploymentKey != nil { - return *x.DeploymentKey + if x != nil { + return x.DeploymentKey } return "" } @@ -3883,7 +4315,7 @@ type ModuleRuntimeScaling struct { func (x *ModuleRuntimeScaling) Reset() { *x = ModuleRuntimeScaling{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[53] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3895,7 +4327,7 @@ func (x *ModuleRuntimeScaling) String() string { func (*ModuleRuntimeScaling) ProtoMessage() {} func (x *ModuleRuntimeScaling) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[53] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3908,7 +4340,7 @@ func (x *ModuleRuntimeScaling) ProtoReflect() protoreflect.Message { // Deprecated: Use ModuleRuntimeScaling.ProtoReflect.Descriptor instead. func (*ModuleRuntimeScaling) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{53} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{57} } func (x *ModuleRuntimeScaling) GetMinReplicas() int32 { @@ -3929,7 +4361,7 @@ type Optional struct { func (x *Optional) Reset() { *x = Optional{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[54] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3941,7 +4373,7 @@ func (x *Optional) String() string { func (*Optional) ProtoMessage() {} func (x *Optional) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[54] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3954,7 +4386,7 @@ func (x *Optional) ProtoReflect() protoreflect.Message { // Deprecated: Use Optional.ProtoReflect.Descriptor instead. func (*Optional) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{54} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{58} } func (x *Optional) GetPos() *Position { @@ -3982,7 +4414,7 @@ type Position struct { func (x *Position) Reset() { *x = Position{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[55] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3994,7 +4426,7 @@ func (x *Position) String() string { func (*Position) ProtoMessage() {} func (x *Position) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[55] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4007,7 +4439,7 @@ func (x *Position) ProtoReflect() protoreflect.Message { // Deprecated: Use Position.ProtoReflect.Descriptor instead. func (*Position) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{55} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{59} } func (x *Position) GetFilename() string { @@ -4040,7 +4472,7 @@ type ProvisioningCreatedEvent struct { func (x *ProvisioningCreatedEvent) Reset() { *x = ProvisioningCreatedEvent{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[56] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4052,7 +4484,7 @@ func (x *ProvisioningCreatedEvent) String() string { func (*ProvisioningCreatedEvent) ProtoMessage() {} func (x *ProvisioningCreatedEvent) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[56] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4065,7 +4497,7 @@ func (x *ProvisioningCreatedEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use ProvisioningCreatedEvent.ProtoReflect.Descriptor instead. func (*ProvisioningCreatedEvent) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{56} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{60} } func (x *ProvisioningCreatedEvent) GetDesiredModule() *Module { @@ -4088,7 +4520,7 @@ type Ref struct { func (x *Ref) Reset() { *x = Ref{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[57] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4100,7 +4532,7 @@ func (x *Ref) String() string { func (*Ref) ProtoMessage() {} func (x *Ref) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[57] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4113,7 +4545,7 @@ func (x *Ref) ProtoReflect() protoreflect.Message { // Deprecated: Use Ref.ProtoReflect.Descriptor instead. func (*Ref) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{57} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{61} } func (x *Ref) GetPos() *Position { @@ -4154,7 +4586,7 @@ type Schema struct { func (x *Schema) Reset() { *x = Schema{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[58] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4166,7 +4598,7 @@ func (x *Schema) String() string { func (*Schema) ProtoMessage() {} func (x *Schema) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[58] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4179,7 +4611,7 @@ func (x *Schema) ProtoReflect() protoreflect.Message { // Deprecated: Use Schema.ProtoReflect.Descriptor instead. func (*Schema) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{58} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{62} } func (x *Schema) GetPos() *Position { @@ -4198,16 +4630,18 @@ func (x *Schema) GetModules() []*Module { // SchemaState is the schema service state as persisted in Raft type SchemaState struct { - state protoimpl.MessageState `protogen:"open.v1"` - Modules []*Module `protobuf:"bytes,1,rep,name=modules,proto3" json:"modules,omitempty"` - ActiveDeployments []string `protobuf:"bytes,2,rep,name=active_deployments,json=activeDeployments,proto3" json:"active_deployments,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Modules []*Module `protobuf:"bytes,1,rep,name=modules,proto3" json:"modules,omitempty"` + ActiveDeployments []string `protobuf:"bytes,2,rep,name=active_deployments,json=activeDeployments,proto3" json:"active_deployments,omitempty"` + SerializedChangeset []*SerializedChangeset `protobuf:"bytes,3,rep,name=serialized_changeset,json=serializedChangeset,proto3" json:"serialized_changeset,omitempty"` + Provisioning []string `protobuf:"bytes,4,rep,name=provisioning,proto3" json:"provisioning,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SchemaState) Reset() { *x = SchemaState{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[59] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4219,7 +4653,7 @@ func (x *SchemaState) String() string { func (*SchemaState) ProtoMessage() {} func (x *SchemaState) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[59] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4232,7 +4666,7 @@ func (x *SchemaState) ProtoReflect() protoreflect.Message { // Deprecated: Use SchemaState.ProtoReflect.Descriptor instead. func (*SchemaState) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{59} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{63} } func (x *SchemaState) GetModules() []*Module { @@ -4249,6 +4683,20 @@ func (x *SchemaState) GetActiveDeployments() []string { return nil } +func (x *SchemaState) GetSerializedChangeset() []*SerializedChangeset { + if x != nil { + return x.SerializedChangeset + } + return nil +} + +func (x *SchemaState) GetProvisioning() []string { + if x != nil { + return x.Provisioning + } + return nil +} + type Secret struct { state protoimpl.MessageState `protogen:"open.v1"` Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` @@ -4261,7 +4709,7 @@ type Secret struct { func (x *Secret) Reset() { *x = Secret{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[60] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4273,7 +4721,7 @@ func (x *Secret) String() string { func (*Secret) ProtoMessage() {} func (x *Secret) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[60] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4286,7 +4734,7 @@ func (x *Secret) ProtoReflect() protoreflect.Message { // Deprecated: Use Secret.ProtoReflect.Descriptor instead. func (*Secret) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{60} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{64} } func (x *Secret) GetPos() *Position { @@ -4317,6 +4765,83 @@ func (x *Secret) GetType() *Type { return nil } +// SerializedChangeset is a temp hack that needs to go away +type SerializedChangeset struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + Deployments []string `protobuf:"bytes,3,rep,name=deployments,proto3" json:"deployments,omitempty"` + State ChangesetState `protobuf:"varint,4,opt,name=state,proto3,enum=xyz.block.ftl.schema.v1.ChangesetState" json:"state,omitempty"` + Error string `protobuf:"bytes,5,opt,name=error,proto3" json:"error,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SerializedChangeset) Reset() { + *x = SerializedChangeset{} + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SerializedChangeset) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SerializedChangeset) ProtoMessage() {} + +func (x *SerializedChangeset) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[65] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SerializedChangeset.ProtoReflect.Descriptor instead. +func (*SerializedChangeset) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{65} +} + +func (x *SerializedChangeset) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *SerializedChangeset) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *SerializedChangeset) GetDeployments() []string { + if x != nil { + return x.Deployments + } + return nil +} + +func (x *SerializedChangeset) GetState() ChangesetState { + if x != nil { + return x.State + } + return ChangesetState_CHANGESET_STATE_UNSPECIFIED +} + +func (x *SerializedChangeset) GetError() string { + if x != nil { + return x.Error + } + return "" +} + type String struct { state protoimpl.MessageState `protogen:"open.v1"` Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` @@ -4326,7 +4851,7 @@ type String struct { func (x *String) Reset() { *x = String{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[61] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4338,7 +4863,7 @@ func (x *String) String() string { func (*String) ProtoMessage() {} func (x *String) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[61] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4351,7 +4876,7 @@ func (x *String) ProtoReflect() protoreflect.Message { // Deprecated: Use String.ProtoReflect.Descriptor instead. func (*String) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{61} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{66} } func (x *String) GetPos() *Position { @@ -4371,7 +4896,7 @@ type StringValue struct { func (x *StringValue) Reset() { *x = StringValue{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[62] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4383,7 +4908,7 @@ func (x *StringValue) String() string { func (*StringValue) ProtoMessage() {} func (x *StringValue) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[62] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4396,7 +4921,7 @@ func (x *StringValue) ProtoReflect() protoreflect.Message { // Deprecated: Use StringValue.ProtoReflect.Descriptor instead. func (*StringValue) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{62} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{67} } func (x *StringValue) GetPos() *Position { @@ -4422,7 +4947,7 @@ type Time struct { func (x *Time) Reset() { *x = Time{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[63] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4434,7 +4959,7 @@ func (x *Time) String() string { func (*Time) ProtoMessage() {} func (x *Time) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[63] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4447,7 +4972,7 @@ func (x *Time) ProtoReflect() protoreflect.Message { // Deprecated: Use Time.ProtoReflect.Descriptor instead. func (*Time) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{63} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{68} } func (x *Time) GetPos() *Position { @@ -4472,7 +4997,7 @@ type Topic struct { func (x *Topic) Reset() { *x = Topic{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[64] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4484,7 +5009,7 @@ func (x *Topic) String() string { func (*Topic) ProtoMessage() {} func (x *Topic) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[64] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4497,7 +5022,7 @@ func (x *Topic) ProtoReflect() protoreflect.Message { // Deprecated: Use Topic.ProtoReflect.Descriptor instead. func (*Topic) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{64} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{69} } func (x *Topic) GetPos() *Position { @@ -4559,7 +5084,7 @@ type TopicRuntime struct { func (x *TopicRuntime) Reset() { *x = TopicRuntime{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[65] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4571,7 +5096,7 @@ func (x *TopicRuntime) String() string { func (*TopicRuntime) ProtoMessage() {} func (x *TopicRuntime) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[65] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4584,7 +5109,7 @@ func (x *TopicRuntime) ProtoReflect() protoreflect.Message { // Deprecated: Use TopicRuntime.ProtoReflect.Descriptor instead. func (*TopicRuntime) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{65} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{70} } func (x *TopicRuntime) GetKafkaBrokers() []string { @@ -4612,7 +5137,7 @@ type TopicRuntimeEvent struct { func (x *TopicRuntimeEvent) Reset() { *x = TopicRuntimeEvent{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[66] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4624,7 +5149,7 @@ func (x *TopicRuntimeEvent) String() string { func (*TopicRuntimeEvent) ProtoMessage() {} func (x *TopicRuntimeEvent) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[66] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4637,7 +5162,7 @@ func (x *TopicRuntimeEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use TopicRuntimeEvent.ProtoReflect.Descriptor instead. func (*TopicRuntimeEvent) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{66} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{71} } func (x *TopicRuntimeEvent) GetModule() string { @@ -4685,7 +5210,7 @@ type Type struct { func (x *Type) Reset() { *x = Type{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[67] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4697,7 +5222,7 @@ func (x *Type) String() string { func (*Type) ProtoMessage() {} func (x *Type) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[67] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4710,7 +5235,7 @@ func (x *Type) ProtoReflect() protoreflect.Message { // Deprecated: Use Type.ProtoReflect.Descriptor instead. func (*Type) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{67} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{72} } func (x *Type) GetValue() isType_Value { @@ -4918,7 +5443,7 @@ type TypeAlias struct { func (x *TypeAlias) Reset() { *x = TypeAlias{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[68] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4930,7 +5455,7 @@ func (x *TypeAlias) String() string { func (*TypeAlias) ProtoMessage() {} func (x *TypeAlias) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[68] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4943,7 +5468,7 @@ func (x *TypeAlias) ProtoReflect() protoreflect.Message { // Deprecated: Use TypeAlias.ProtoReflect.Descriptor instead. func (*TypeAlias) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{68} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{73} } func (x *TypeAlias) GetPos() *Position { @@ -4998,7 +5523,7 @@ type TypeParameter struct { func (x *TypeParameter) Reset() { *x = TypeParameter{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[69] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5010,7 +5535,7 @@ func (x *TypeParameter) String() string { func (*TypeParameter) ProtoMessage() {} func (x *TypeParameter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[69] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5023,7 +5548,7 @@ func (x *TypeParameter) ProtoReflect() protoreflect.Message { // Deprecated: Use TypeParameter.ProtoReflect.Descriptor instead. func (*TypeParameter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{69} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{74} } func (x *TypeParameter) GetPos() *Position { @@ -5050,7 +5575,7 @@ type TypeValue struct { func (x *TypeValue) Reset() { *x = TypeValue{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[70] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5062,7 +5587,7 @@ func (x *TypeValue) String() string { func (*TypeValue) ProtoMessage() {} func (x *TypeValue) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[70] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5075,7 +5600,7 @@ func (x *TypeValue) ProtoReflect() protoreflect.Message { // Deprecated: Use TypeValue.ProtoReflect.Descriptor instead. func (*TypeValue) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{70} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{75} } func (x *TypeValue) GetPos() *Position { @@ -5101,7 +5626,7 @@ type Unit struct { func (x *Unit) Reset() { *x = Unit{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[71] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5113,7 +5638,7 @@ func (x *Unit) String() string { func (*Unit) ProtoMessage() {} func (x *Unit) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[71] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5126,7 +5651,7 @@ func (x *Unit) ProtoReflect() protoreflect.Message { // Deprecated: Use Unit.ProtoReflect.Descriptor instead. func (*Unit) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{71} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{76} } func (x *Unit) GetPos() *Position { @@ -5151,7 +5676,7 @@ type Value struct { func (x *Value) Reset() { *x = Value{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[72] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5163,7 +5688,7 @@ func (x *Value) String() string { func (*Value) ProtoMessage() {} func (x *Value) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[72] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5176,7 +5701,7 @@ func (x *Value) ProtoReflect() protoreflect.Message { // Deprecated: Use Value.ProtoReflect.Descriptor instead. func (*Value) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{72} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{77} } func (x *Value) GetValue() isValue_Value { @@ -5251,7 +5776,7 @@ type Verb struct { func (x *Verb) Reset() { *x = Verb{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[73] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5263,7 +5788,7 @@ func (x *Verb) String() string { func (*Verb) ProtoMessage() {} func (x *Verb) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[73] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5276,7 +5801,7 @@ func (x *Verb) ProtoReflect() protoreflect.Message { // Deprecated: Use Verb.ProtoReflect.Descriptor instead. func (*Verb) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{73} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{78} } func (x *Verb) GetPos() *Position { @@ -5345,7 +5870,7 @@ type VerbRuntime struct { func (x *VerbRuntime) Reset() { *x = VerbRuntime{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[74] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5357,7 +5882,7 @@ func (x *VerbRuntime) String() string { func (*VerbRuntime) ProtoMessage() {} func (x *VerbRuntime) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[74] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5370,7 +5895,7 @@ func (x *VerbRuntime) ProtoReflect() protoreflect.Message { // Deprecated: Use VerbRuntime.ProtoReflect.Descriptor instead. func (*VerbRuntime) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{74} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{79} } func (x *VerbRuntime) GetBase() *VerbRuntimeBase { @@ -5397,7 +5922,7 @@ type VerbRuntimeBase struct { func (x *VerbRuntimeBase) Reset() { *x = VerbRuntimeBase{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[75] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5409,7 +5934,7 @@ func (x *VerbRuntimeBase) String() string { func (*VerbRuntimeBase) ProtoMessage() {} func (x *VerbRuntimeBase) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[75] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5422,7 +5947,7 @@ func (x *VerbRuntimeBase) ProtoReflect() protoreflect.Message { // Deprecated: Use VerbRuntimeBase.ProtoReflect.Descriptor instead. func (*VerbRuntimeBase) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{75} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{80} } func (x *VerbRuntimeBase) GetCreateTime() *timestamppb.Timestamp { @@ -5451,7 +5976,7 @@ type VerbRuntimeEvent struct { func (x *VerbRuntimeEvent) Reset() { *x = VerbRuntimeEvent{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[76] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5463,7 +5988,7 @@ func (x *VerbRuntimeEvent) String() string { func (*VerbRuntimeEvent) ProtoMessage() {} func (x *VerbRuntimeEvent) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[76] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5476,7 +6001,7 @@ func (x *VerbRuntimeEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use VerbRuntimeEvent.ProtoReflect.Descriptor instead. func (*VerbRuntimeEvent) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{76} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{81} } func (x *VerbRuntimeEvent) GetModule() string { @@ -5516,7 +6041,7 @@ type VerbRuntimeSubscription struct { func (x *VerbRuntimeSubscription) Reset() { *x = VerbRuntimeSubscription{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[77] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5528,7 +6053,7 @@ func (x *VerbRuntimeSubscription) String() string { func (*VerbRuntimeSubscription) ProtoMessage() {} func (x *VerbRuntimeSubscription) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[77] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5541,7 +6066,7 @@ func (x *VerbRuntimeSubscription) ProtoReflect() protoreflect.Message { // Deprecated: Use VerbRuntimeSubscription.ProtoReflect.Descriptor instead. func (*VerbRuntimeSubscription) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{77} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{82} } func (x *VerbRuntimeSubscription) GetKafkaBrokers() []string { @@ -5593,960 +6118,1072 @@ var file_xyz_block_ftl_schema_v1_schema_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, - 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x06, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, - 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, + 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x09, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, + 0x3d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x19, + 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x22, 0x2b, 0x0a, 0x17, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x22, 0x59, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x40, 0x0a, 0x09, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x6a, 0x0a, 0x14, 0x44, 0x53, 0x4e, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, + 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x22, 0x3e, 0x0a, 0x14, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xad, 0x01, 0x0a, 0x06, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, + 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x10, 0x0a, 0x03, 0x64, - 0x73, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x73, 0x6e, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xd8, 0x02, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x38, - 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x4f, 0x0a, 0x0f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x52, 0x0e, 0x74, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x36, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x6a, 0x0a, 0x14, 0x44, + 0x53, 0x4e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x10, 0x0a, + 0x03, 0x64, 0x73, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x73, 0x6e, 0x42, + 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xd8, 0x02, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x4f, 0x0a, 0x0f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, - 0x22, 0xa6, 0x02, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x38, 0x0a, - 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x49, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x92, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x48, 0x01, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x88, - 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x0a, 0x0a, - 0x08, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x80, 0x02, 0x0a, 0x11, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, - 0x7b, 0x0a, 0x1e, 0x61, 0x77, 0x73, 0x69, 0x61, 0x6d, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x57, 0x53, 0x49, 0x41, 0x4d, 0x41, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, - 0x1b, 0x61, 0x77, 0x73, 0x69, 0x61, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x65, 0x0a, 0x16, - 0x64, 0x73, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x53, 0x4e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x14, 0x64, - 0x73, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, 0x0a, 0x0f, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, - 0x5a, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x1a, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x04, 0x72, 0x65, - 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x40, 0x0a, 0x05, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x22, 0x95, 0x01, 0x0a, - 0x14, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x45, 0x76, 0x65, 0x6e, 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, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x55, 0x0a, - 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe2, 0x03, 0x0a, 0x04, 0x44, 0x65, 0x63, 0x6c, 0x12, 0x39, 0x0a, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x52, 0x0e, 0x74, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x12, 0x36, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, + 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x3d, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x33, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3f, 0x0a, - 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, - 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x33, - 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, + 0x6f, 0x73, 0x22, 0xa6, 0x02, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, + 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x48, 0x00, 0x52, 0x04, 0x65, - 0x6e, 0x75, 0x6d, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x36, - 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x48, 0x00, 0x52, - 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x61, - 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x49, 0x0a, 0x07, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x92, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x48, 0x01, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x48, 0x00, - 0x52, 0x09, 0x74, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x33, 0x0a, 0x04, 0x76, - 0x65, 0x72, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, + 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x80, 0x02, 0x0a, 0x11, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x12, 0x7b, 0x0a, 0x1e, 0x61, 0x77, 0x73, 0x69, 0x61, 0x6d, 0x5f, 0x61, 0x75, 0x74, 0x68, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x48, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, - 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x18, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, - 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x22, 0x63, 0x0a, 0x16, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x57, 0x53, 0x49, 0x41, 0x4d, 0x41, 0x75, 0x74, 0x68, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, + 0x00, 0x52, 0x1b, 0x61, 0x77, 0x73, 0x69, 0x61, 0x6d, 0x41, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, + 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x65, + 0x0a, 0x16, 0x64, 0x73, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x53, 0x4e, 0x44, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, + 0x14, 0x64, 0x73, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, + 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x12, 0x5a, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, - 0x55, 0x0a, 0x1a, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x25, 0x0a, 0x0e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x22, 0x4e, 0x0a, 0x1e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x45, 0x76, 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, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x22, 0x69, 0x0a, 0x1c, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x22, 0x93, 0x02, 0x0a, 0x04, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0b, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, + 0x0c, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x9e, 0x01, + 0x0a, 0x1a, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x04, + 0x72, 0x65, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x52, 0x08, 0x76, 0x61, - 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x07, - 0x0a, 0x05, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0xb5, 0x01, 0x0a, 0x0b, 0x45, 0x6e, 0x75, 0x6d, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, - 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, - 0xe4, 0x08, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x16, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x71, 0x0a, 0x1a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x72, 0x65, 0x61, 0x64, 0x12, 0x40, 0x0a, 0x05, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x05, 0x77, 0x72, 0x69, 0x74, 0x65, 0x22, 0x95, + 0x01, 0x0a, 0x14, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 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, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x55, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x6b, 0x0a, 0x18, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x77, 0x0a, 0x1c, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x64, - 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x84, 0x01, 0x0a, 0x21, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x1e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x7e, 0x0a, 0x1f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x1c, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x5f, 0x0a, 0x14, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe2, 0x03, 0x0a, 0x04, 0x44, 0x65, 0x63, 0x6c, 0x12, + 0x39, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x33, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x3f, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, + 0x62, 0x61, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x12, 0x33, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x6d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x12, 0x71, 0x0a, 0x1a, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, - 0x67, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x48, 0x00, 0x52, + 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5c, 0x0a, 0x13, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x11, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x12, 0x76, 0x65, 0x72, 0x62, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x12, 0x36, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x48, + 0x00, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, + 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, + 0x48, 0x00, 0x52, 0x09, 0x74, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x33, 0x0a, + 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x48, 0x00, 0x52, 0x04, 0x76, 0x65, + 0x72, 0x62, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xac, 0x01, 0x0a, 0x18, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, + 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x1c, 0x0a, 0x09, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x22, 0x81, 0x01, 0x0a, 0x16, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x22, 0x73, + 0x0a, 0x1a, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x25, + 0x0a, 0x0e, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, + 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x73, 0x65, 0x74, 0x22, 0x6c, 0x0a, 0x1e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x45, 0x76, 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, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, + 0x74, 0x22, 0x87, 0x01, 0x0a, 0x1c, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1c, 0x0a, + 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x22, 0x93, 0x02, 0x0a, 0x04, + 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, + 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, + 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, + 0x79, 0x70, 0x65, 0x48, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x40, + 0x0a, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x52, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, + 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x22, 0xb5, 0x01, 0x0a, 0x0b, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, + 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x76, 0x65, 0x72, - 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x07, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xeb, 0x01, 0x0a, 0x05, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, - 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, - 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, - 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x49, 0x0a, 0x05, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x38, 0x0a, - 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, - 0xe7, 0x01, 0x0a, 0x14, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x5f, 0x0a, 0x14, 0x69, 0x6e, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xa5, 0x0b, 0x0a, 0x05, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x6e, 0x0a, 0x19, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, + 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, - 0x72, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x12, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, - 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x65, 0x0a, 0x16, 0x69, 0x6e, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x68, 0x0a, 0x17, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, + 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, + 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x65, 0x0a, + 0x16, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, + 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x16, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x71, 0x0a, 0x1a, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6b, + 0x0a, 0x18, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x16, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x77, 0x0a, 0x1c, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x84, 0x01, 0x0a, 0x21, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x5f, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x37, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x7e, 0x0a, 0x1f, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5f, 0x0a, 0x14, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x14, 0x69, 0x6e, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6a, 0x0a, 0x12, 0x49, 0x6e, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x12, - 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x71, 0x0a, 0x1a, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x31, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x69, 0x6e, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x5c, 0x0a, 0x13, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x6c, 0x0a, 0x14, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x50, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x38, 0x0a, - 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x59, 0x0a, + 0x12, 0x76, 0x65, 0x72, 0x62, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x76, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0xeb, 0x01, 0x0a, 0x05, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x38, 0x0a, 0x03, 0x70, + 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, + 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, - 0x70, 0x6f, 0x73, 0x22, 0x47, 0x0a, 0x03, 0x49, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x62, 0x0a, 0x08, - 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, + 0x49, 0x0a, 0x05, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, - 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, - 0x22, 0xad, 0x01, 0x0a, 0x03, 0x4d, 0x61, 0x70, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, + 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xe7, 0x01, 0x0a, 0x14, 0x49, + 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, + 0x65, 0x6e, 0x74, 0x12, 0x5f, 0x0a, 0x14, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x48, 0x00, + 0x52, 0x12, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, + 0x65, 0x72, 0x61, 0x6c, 0x12, 0x65, 0x0a, 0x16, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x14, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, + 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6a, 0x0a, 0x12, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, + 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, + 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, + 0x22, 0x6c, 0x0a, 0x14, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, - 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, - 0x22, 0xe5, 0x09, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, - 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, - 0x6c, 0x69, 0x61, 0x73, 0x48, 0x00, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x47, 0x0a, - 0x08, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x48, 0x00, 0x52, 0x08, 0x61, 0x72, - 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, - 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x41, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x47, + 0x0a, 0x03, 0x49, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, + 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x62, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x03, + 0x4d, 0x61, 0x70, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xe5, 0x09, 0x0a, 0x08, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x48, + 0x00, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x47, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x65, + 0x66, 0x61, 0x63, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, 0x72, 0x74, + 0x65, 0x66, 0x61, 0x63, 0x74, 0x48, 0x00, 0x52, 0x08, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, + 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, + 0x73, 0x12, 0x41, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x45, 0x0a, 0x08, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x6a, 0x6f, 0x62, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, - 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x45, 0x0a, 0x08, 0x63, 0x72, 0x6f, - 0x6e, 0x5f, 0x6a, 0x6f, 0x62, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x72, - 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x48, 0x00, 0x52, 0x07, 0x63, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, - 0x12, 0x4a, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x48, - 0x00, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x08, - 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, + 0x48, 0x00, 0x52, 0x07, 0x63, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x4a, 0x0a, 0x09, 0x64, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x08, 0x65, 0x6e, 0x63, - 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x44, 0x0a, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x48, 0x00, 0x52, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0a, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x61, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, + 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x63, 0x6f, + 0x64, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, + 0x12, 0x44, 0x0a, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x07, 0x69, + 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4a, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, + 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x73, 0x68, 0x65, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, + 0x72, 0x12, 0x3e, 0x0a, 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x65, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x05, 0x72, 0x65, 0x74, 0x72, + 0x79, 0x12, 0x4b, 0x0a, 0x0a, 0x73, 0x71, 0x6c, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x48, 0x00, 0x52, 0x09, 0x73, 0x71, 0x6c, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x54, + 0x0a, 0x0d, 0x73, 0x71, 0x6c, 0x5f, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, 0x4d, 0x69, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x71, 0x6c, 0x4d, 0x69, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x09, 0x73, 0x71, 0x6c, 0x5f, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x48, 0x00, 0x52, 0x08, 0x73, 0x71, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x44, + 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0a, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4a, 0x0a, 0x09, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x74, 0x61, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x48, 0x00, 0x52, 0x07, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, - 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 0x12, 0x4b, 0x0a, 0x0a, 0x73, 0x71, 0x6c, 0x5f, 0x63, 0x6f, - 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, - 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x73, 0x71, 0x6c, 0x43, 0x6f, 0x6c, - 0x75, 0x6d, 0x6e, 0x12, 0x54, 0x0a, 0x0d, 0x73, 0x71, 0x6c, 0x5f, 0x6d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x71, 0x6c, - 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x09, 0x73, 0x71, 0x6c, - 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, - 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x08, 0x73, 0x71, 0x6c, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x48, 0x00, - 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x0a, 0x73, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, 0x48, + 0x00, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, + 0x36, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, - 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, - 0x65, 0x4d, 0x61, 0x70, 0x48, 0x00, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, 0x42, - 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x4b, 0x69, 0x6e, + 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x42, 0x06, 0x0a, + 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, - 0x61, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x10, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, - 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, - 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x85, 0x01, - 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, - 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, 0x63, 0x61, 0x6c, - 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, - 0x01, 0x01, 0x12, 0x34, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, - 0x22, 0x67, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x72, 0x6f, 0x6e, - 0x4a, 0x6f, 0x62, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, - 0x04, 0x63, 0x72, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x72, 0x6f, - 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x11, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, - 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, 0x63, 0x61, 0x6c, - 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, + 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x65, 0x6e, 0x69, - 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6c, 0x65, 0x6e, 0x69, 0x65, - 0x6e, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x0f, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, + 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, + 0x66, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, + 0x22, 0x88, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x67, 0x0a, 0x0f, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 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, 0x41, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, - 0x76, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x72, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x72, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, + 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, + 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, + 0x66, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, + 0x22, 0x82, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x63, + 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, - 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, - 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x12, 0x38, 0x0a, - 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xfb, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, - 0x01, 0x12, 0x19, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, - 0x48, 0x01, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x0b, - 0x6d, 0x69, 0x6e, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x6d, 0x69, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x1f, 0x0a, - 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x37, - 0x0a, 0x05, 0x63, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6c, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x74, 0x42, 0x06, 0x0a, + 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, + 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 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, + 0x41, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x48, 0x02, 0x52, 0x05, 0x63, - 0x61, 0x74, 0x63, 0x68, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, - 0x08, 0x0a, 0x06, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x63, 0x61, - 0x74, 0x63, 0x68, 0x22, 0x7f, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, - 0x51, 0x4c, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, + 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x76, 0x0a, 0x12, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, + 0x6f, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, - 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, - 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x70, 0x0a, 0x14, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x53, 0x51, 0x4c, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x03, + 0x01, 0x01, 0x12, 0x34, 0x0a, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, + 0x52, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, + 0x22, 0xfb, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x74, + 0x72, 0x79, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x69, 0x6e, 0x5f, 0x62, + 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x69, + 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, + 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, + 0x61, 0x78, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x61, 0x74, + 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x48, 0x02, 0x52, 0x05, 0x63, 0x61, 0x74, 0x63, 0x68, 0x88, + 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x22, 0x7f, + 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, 0x43, 0x6f, 0x6c, + 0x75, 0x6d, 0x6e, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, + 0x70, 0x0a, 0x14, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, 0x4d, 0x69, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, + 0x01, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, + 0x73, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, + 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, + 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, - 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x06, - 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x03, 0x70, - 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x42, 0x06, + 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xf1, 0x01, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x12, 0x38, 0x0a, + 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x66, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x44, 0x0a, 0x0b, 0x66, + 0x72, 0x6f, 0x6d, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x4f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x4f, 0x66, 0x66, 0x73, 0x65, + 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x61, 0x64, 0x4c, 0x65, 0x74, 0x74, + 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x0f, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, 0x12, 0x38, + 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xcc, 0x02, 0x0a, 0x06, + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, + 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x62, + 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x05, 0x64, 0x65, 0x63, + 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, - 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x8b, 0x01, - 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x52, 0x05, 0x64, 0x65, 0x63, 0x6c, 0x73, 0x12, 0x42, + 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x92, 0xf7, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x8f, 0x02, 0x0a, 0x0d, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x04, + 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x07, + 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x07, + 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x12, 0x55, 0x0a, 0x0a, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x48, 0x01, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, + 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x42, 0x0d, 0x0a, + 0x0b, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xcf, 0x01, 0x0a, + 0x11, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, + 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x01, 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, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 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, 0x13, 0x0a, 0x02, 0x6f, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x73, 0x88, 0x01, 0x01, + 0x12, 0x17, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, + 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x69, 0x6d, 0x61, + 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, + 0x65, 0x88, 0x01, 0x01, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x6f, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, + 0x61, 0x72, 0x63, 0x68, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0xa8, + 0x02, 0x0a, 0x17, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x39, 0x0a, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x42, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 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, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x22, 0xc9, 0x02, 0x0a, 0x12, 0x4d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 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, 0x43, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, + 0x65, 0x48, 0x00, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4c, 0x0a, 0x07, + 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x48, 0x01, 0x52, 0x07, + 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x12, 0x55, 0x0a, 0x0a, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x48, 0x02, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, + 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, + 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x39, 0x0a, 0x14, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, + 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, + 0x22, 0x8d, 0x01, 0x0a, 0x08, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x38, 0x0a, + 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x79, 0x70, 0x65, 0x48, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, + 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x52, 0x0a, 0x08, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0x62, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x46, 0x0a, 0x0e, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x73, 0x69, 0x72, + 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0xbb, 0x01, 0x0a, 0x03, 0x52, 0x65, 0x66, + 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x0f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, + 0x74, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, 0x06, + 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x07, 0x73, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, + 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x07, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xf1, 0x01, 0x0a, 0x12, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x72, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x12, 0x44, 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x07, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xfc, + 0x01, 0x0a, 0x0b, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x39, + 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5f, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x73, 0x65, 0x74, 0x52, 0x13, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x22, 0xad, 0x01, + 0x0a, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, - 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x61, 0x64, 0x5f, 0x6c, - 0x65, 0x74, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x61, - 0x64, 0x4c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, - 0x8e, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, - 0x4d, 0x61, 0x70, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, + 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xd9, 0x01, + 0x0a, 0x13, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x73, 0x65, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x41, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x06, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x18, 0x0a, - 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, - 0x74, 0x69, 0x76, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, - 0x22, 0xcc, 0x02, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, - 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, - 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, + 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x65, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x48, 0x0a, 0x04, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, + 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xd9, 0x02, 0x0a, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, + 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x46, 0x0a, 0x07, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x92, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x48, 0x01, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x88, + 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x33, - 0x0a, 0x05, 0x64, 0x65, 0x63, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x52, 0x05, 0x64, 0x65, - 0x63, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x92, - 0xf7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x07, - 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, - 0x8f, 0x02, 0x0a, 0x0d, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x12, 0x3e, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, - 0x65, 0x12, 0x4c, 0x0a, 0x07, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, - 0x67, 0x48, 0x00, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x12, - 0x55, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x01, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x69, - 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x22, 0xcf, 0x01, 0x0a, 0x11, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 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, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 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, 0x13, 0x0a, 0x02, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, - 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x19, - 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, - 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x6f, 0x73, - 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x61, 0x72, 0x63, 0x68, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x22, 0xec, 0x01, 0x0a, 0x17, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, - 0x65, 0x79, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, - 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, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x42, 0x0a, - 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 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, 0x48, - 0x00, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x88, 0x01, - 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x61, 0x74, 0x22, 0xf9, 0x02, 0x0a, 0x12, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 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, 0x2a, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x12, 0x43, 0x0a, - 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x48, 0x01, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x88, - 0x01, 0x01, 0x12, 0x4c, 0x0a, 0x07, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x69, - 0x6e, 0x67, 0x48, 0x02, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, - 0x12, 0x55, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x03, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x62, - 0x61, 0x73, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x42, - 0x0d, 0x0a, 0x0b, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x39, - 0x0a, 0x14, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, - 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, - 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x08, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, - 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x01, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, - 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x52, 0x0a, 0x08, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0x62, 0x0a, - 0x18, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x0e, 0x64, 0x65, 0x73, - 0x69, 0x72, 0x65, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x52, 0x0d, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x22, 0xbb, 0x01, 0x0a, 0x03, 0x52, 0x65, 0x66, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, + 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x22, 0x4e, 0x0a, 0x0c, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x5f, 0x62, 0x72, 0x6f, 0x6b, + 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6b, 0x61, 0x66, 0x6b, 0x61, + 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x11, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 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, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x3f, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, + 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x22, 0x9a, 0x05, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x61, 0x6e, 0x79, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, - 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x46, 0x0a, 0x0f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x74, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, - 0x85, 0x01, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x03, 0x61, 0x6e, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x61, + 0x72, 0x72, 0x61, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x72, 0x61, 0x79, 0x48, 0x00, 0x52, 0x05, 0x61, 0x72, + 0x72, 0x61, 0x79, 0x12, 0x33, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, + 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x36, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x31, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x48, 0x00, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x12, 0x36, 0x0a, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x48, + 0x00, 0x52, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x30, 0x0a, 0x03, 0x69, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x42, - 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x77, 0x0a, 0x0b, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x49, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x03, 0x69, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x03, 0x6d, 0x61, + 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x61, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x22, 0xad, 0x01, 0x0a, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, + 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x61, 0x70, 0x12, 0x3f, 0x0a, 0x08, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x30, 0x0a, + 0x03, 0x72, 0x65, 0x66, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x48, 0x00, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, + 0x39, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x33, 0x0a, 0x04, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, + 0x33, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x48, 0x00, 0x52, 0x04, + 0x75, 0x6e, 0x69, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x87, 0x02, + 0x0a, 0x09, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, - 0x22, 0x4a, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x65, 0x0a, 0x0b, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, + 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x65, 0x0a, 0x0d, 0x54, 0x79, 0x70, 0x65, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, + 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x82, + 0x01, 0x0a, 0x09, 0x54, 0x79, 0x70, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x03, + 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, + 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, + 0x70, 0x6f, 0x73, 0x22, 0x48, 0x0a, 0x04, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, - 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, - 0x70, 0x6f, 0x73, 0x22, 0x48, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, + 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xe2, 0x01, + 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, + 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, + 0x74, 0x79, 0x70, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x96, 0x03, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, - 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xd9, 0x02, - 0x0a, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, - 0x01, 0x12, 0x46, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x92, 0xf7, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, - 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x48, 0x01, 0x52, 0x07, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x33, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x0a, 0x0a, - 0x08, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x4e, 0x0a, 0x0c, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6b, 0x61, 0x66, - 0x6b, 0x61, 0x5f, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0c, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x19, - 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x11, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 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, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3f, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x07, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x9a, 0x05, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x30, 0x0a, 0x03, 0x61, 0x6e, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x03, 0x61, - 0x6e, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x72, 0x61, - 0x79, 0x48, 0x00, 0x52, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x12, 0x33, 0x0a, 0x04, 0x62, 0x6f, - 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x12, - 0x36, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x48, 0x00, - 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x48, 0x00, 0x52, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x12, - 0x30, 0x0a, 0x03, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x03, 0x69, 0x6e, - 0x74, 0x12, 0x30, 0x0a, 0x03, 0x6d, 0x61, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, + 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x48, 0x00, 0x52, 0x03, - 0x6d, 0x61, 0x70, 0x12, 0x3f, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x30, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x48, - 0x00, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x12, 0x33, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x48, 0x00, - 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x6e, 0x69, 0x74, 0x48, 0x00, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x87, 0x02, 0x0a, 0x09, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, - 0x61, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, - 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x45, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x92, 0xf7, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, + 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x48, 0x01, 0x52, 0x07, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, + 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xb7, 0x01, 0x0a, 0x0b, + 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x04, 0x62, + 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x65, - 0x0a, 0x0d, 0x54, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, - 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x09, 0x54, 0x79, 0x70, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x48, 0x0a, 0x04, 0x55, 0x6e, - 0x69, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, - 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xe2, 0x01, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, - 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x49, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0b, - 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x74, - 0x79, 0x70, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x74, 0x79, 0x70, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x96, 0x03, 0x0a, 0x04, 0x56, 0x65, - 0x72, 0x62, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, - 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, - 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, + 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0c, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb2, 0x01, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 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, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x0a, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x01, 0x52, 0x09, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xf2, 0x01, 0x0a, 0x10, 0x56, + 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 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, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x41, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, - 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x45, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x92, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x48, 0x01, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x06, - 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x22, 0xb7, 0x01, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x48, + 0x00, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x59, 0x0a, 0x0c, 0x73, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, - 0x12, 0x59, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, - 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb2, 0x01, 0x0a, - 0x0f, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, - 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x01, 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, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x88, - 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x48, 0x01, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x88, - 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x22, 0xf2, 0x01, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x45, 0x76, 0x65, 0x6e, 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, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x41, - 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x48, 0x00, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x88, 0x01, - 0x01, 0x12, 0x59, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x0c, 0x73, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, - 0x5f, 0x62, 0x61, 0x73, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3e, 0x0a, 0x17, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x5f, 0x62, 0x72, 0x6f, 0x6b, 0x65, - 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x42, - 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x2a, 0x3c, 0x0a, 0x09, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x4b, - 0x69, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x4c, 0x49, 0x41, 0x53, 0x5f, 0x4b, 0x49, 0x4e, - 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x13, 0x0a, 0x0f, 0x41, 0x4c, 0x49, 0x41, 0x53, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x53, - 0x4f, 0x4e, 0x10, 0x01, 0x2a, 0x5c, 0x0a, 0x0a, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, - 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x19, 0x0a, 0x15, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x42, - 0x45, 0x47, 0x49, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x52, - 0x4f, 0x4d, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x4c, 0x41, 0x54, 0x45, 0x53, 0x54, - 0x10, 0x02, 0x42, 0x47, 0x50, 0x01, 0x5a, 0x43, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, - 0x76, 0x31, 0x3b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x42, 0x0f, + 0x0a, 0x0d, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x3e, 0x0a, 0x17, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6b, 0x61, + 0x66, 0x6b, 0x61, 0x5f, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0c, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x2a, + 0x3c, 0x0a, 0x09, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x16, + 0x41, 0x4c, 0x49, 0x41, 0x53, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x4c, 0x49, 0x41, + 0x53, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x01, 0x2a, 0xec, 0x01, + 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x12, 0x1f, 0x0a, 0x1b, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, + 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1f, + 0x0a, 0x1b, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x43, 0x4c, 0x45, 0x41, 0x4e, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x50, 0x10, 0x03, 0x12, + 0x1d, 0x0a, 0x19, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x20, + 0x0a, 0x1c, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x05, + 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x53, 0x45, 0x54, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x5c, 0x0a, 0x0a, + 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x52, + 0x4f, 0x4d, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x52, 0x4f, 0x4d, 0x5f, + 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x4e, 0x49, 0x4e, 0x47, + 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, + 0x54, 0x5f, 0x4c, 0x41, 0x54, 0x45, 0x53, 0x54, 0x10, 0x02, 0x2a, 0x87, 0x02, 0x0a, 0x0b, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x18, 0x4d, 0x4f, + 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x4d, 0x4f, 0x44, 0x55, + 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, + 0x4f, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4d, 0x4f, 0x44, 0x55, 0x4c, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x02, 0x12, + 0x17, 0x0a, 0x13, 0x4d, 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x43, 0x41, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x4d, 0x4f, 0x44, 0x55, + 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x4f, 0x4e, 0x49, 0x43, + 0x41, 0x4c, 0x10, 0x04, 0x12, 0x19, 0x0a, 0x15, 0x4d, 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x52, 0x41, 0x49, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, + 0x20, 0x0a, 0x1c, 0x4d, 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x44, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, 0x10, + 0x06, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x4d, + 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x10, 0x08, 0x42, 0x47, 0x50, 0x01, 0x5a, 0x43, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, + 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x62, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6561,266 +7198,284 @@ func file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP() []byte { return file_xyz_block_ftl_schema_v1_schema_proto_rawDescData } -var file_xyz_block_ftl_schema_v1_schema_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_xyz_block_ftl_schema_v1_schema_proto_msgTypes = make([]protoimpl.MessageInfo, 78) +var file_xyz_block_ftl_schema_v1_schema_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_xyz_block_ftl_schema_v1_schema_proto_msgTypes = make([]protoimpl.MessageInfo, 83) var file_xyz_block_ftl_schema_v1_schema_proto_goTypes = []any{ (AliasKind)(0), // 0: xyz.block.ftl.schema.v1.AliasKind - (FromOffset)(0), // 1: xyz.block.ftl.schema.v1.FromOffset - (*AWSIAMAuthDatabaseConnector)(nil), // 2: xyz.block.ftl.schema.v1.AWSIAMAuthDatabaseConnector - (*Any)(nil), // 3: xyz.block.ftl.schema.v1.Any - (*Array)(nil), // 4: xyz.block.ftl.schema.v1.Array - (*Bool)(nil), // 5: xyz.block.ftl.schema.v1.Bool - (*Bytes)(nil), // 6: xyz.block.ftl.schema.v1.Bytes - (*Config)(nil), // 7: xyz.block.ftl.schema.v1.Config - (*DSNDatabaseConnector)(nil), // 8: xyz.block.ftl.schema.v1.DSNDatabaseConnector - (*Data)(nil), // 9: xyz.block.ftl.schema.v1.Data - (*Database)(nil), // 10: xyz.block.ftl.schema.v1.Database - (*DatabaseConnector)(nil), // 11: xyz.block.ftl.schema.v1.DatabaseConnector - (*DatabaseRuntime)(nil), // 12: xyz.block.ftl.schema.v1.DatabaseRuntime - (*DatabaseRuntimeConnections)(nil), // 13: xyz.block.ftl.schema.v1.DatabaseRuntimeConnections - (*DatabaseRuntimeEvent)(nil), // 14: xyz.block.ftl.schema.v1.DatabaseRuntimeEvent - (*Decl)(nil), // 15: xyz.block.ftl.schema.v1.Decl - (*DeploymentActivatedEvent)(nil), // 16: xyz.block.ftl.schema.v1.DeploymentActivatedEvent - (*DeploymentCreatedEvent)(nil), // 17: xyz.block.ftl.schema.v1.DeploymentCreatedEvent - (*DeploymentDeactivatedEvent)(nil), // 18: xyz.block.ftl.schema.v1.DeploymentDeactivatedEvent - (*DeploymentReplicasUpdatedEvent)(nil), // 19: xyz.block.ftl.schema.v1.DeploymentReplicasUpdatedEvent - (*DeploymentSchemaUpdatedEvent)(nil), // 20: xyz.block.ftl.schema.v1.DeploymentSchemaUpdatedEvent - (*Enum)(nil), // 21: xyz.block.ftl.schema.v1.Enum - (*EnumVariant)(nil), // 22: xyz.block.ftl.schema.v1.EnumVariant - (*Event)(nil), // 23: xyz.block.ftl.schema.v1.Event - (*Field)(nil), // 24: xyz.block.ftl.schema.v1.Field - (*Float)(nil), // 25: xyz.block.ftl.schema.v1.Float - (*IngressPathComponent)(nil), // 26: xyz.block.ftl.schema.v1.IngressPathComponent - (*IngressPathLiteral)(nil), // 27: xyz.block.ftl.schema.v1.IngressPathLiteral - (*IngressPathParameter)(nil), // 28: xyz.block.ftl.schema.v1.IngressPathParameter - (*Int)(nil), // 29: xyz.block.ftl.schema.v1.Int - (*IntValue)(nil), // 30: xyz.block.ftl.schema.v1.IntValue - (*Map)(nil), // 31: xyz.block.ftl.schema.v1.Map - (*Metadata)(nil), // 32: xyz.block.ftl.schema.v1.Metadata - (*MetadataAlias)(nil), // 33: xyz.block.ftl.schema.v1.MetadataAlias - (*MetadataArtefact)(nil), // 34: xyz.block.ftl.schema.v1.MetadataArtefact - (*MetadataCalls)(nil), // 35: xyz.block.ftl.schema.v1.MetadataCalls - (*MetadataConfig)(nil), // 36: xyz.block.ftl.schema.v1.MetadataConfig - (*MetadataCronJob)(nil), // 37: xyz.block.ftl.schema.v1.MetadataCronJob - (*MetadataDatabases)(nil), // 38: xyz.block.ftl.schema.v1.MetadataDatabases - (*MetadataEncoding)(nil), // 39: xyz.block.ftl.schema.v1.MetadataEncoding - (*MetadataIngress)(nil), // 40: xyz.block.ftl.schema.v1.MetadataIngress - (*MetadataPartitions)(nil), // 41: xyz.block.ftl.schema.v1.MetadataPartitions - (*MetadataPublisher)(nil), // 42: xyz.block.ftl.schema.v1.MetadataPublisher - (*MetadataRetry)(nil), // 43: xyz.block.ftl.schema.v1.MetadataRetry - (*MetadataSQLColumn)(nil), // 44: xyz.block.ftl.schema.v1.MetadataSQLColumn - (*MetadataSQLMigration)(nil), // 45: xyz.block.ftl.schema.v1.MetadataSQLMigration - (*MetadataSQLQuery)(nil), // 46: xyz.block.ftl.schema.v1.MetadataSQLQuery - (*MetadataSecrets)(nil), // 47: xyz.block.ftl.schema.v1.MetadataSecrets - (*MetadataSubscriber)(nil), // 48: xyz.block.ftl.schema.v1.MetadataSubscriber - (*MetadataTypeMap)(nil), // 49: xyz.block.ftl.schema.v1.MetadataTypeMap - (*Module)(nil), // 50: xyz.block.ftl.schema.v1.Module - (*ModuleRuntime)(nil), // 51: xyz.block.ftl.schema.v1.ModuleRuntime - (*ModuleRuntimeBase)(nil), // 52: xyz.block.ftl.schema.v1.ModuleRuntimeBase - (*ModuleRuntimeDeployment)(nil), // 53: xyz.block.ftl.schema.v1.ModuleRuntimeDeployment - (*ModuleRuntimeEvent)(nil), // 54: xyz.block.ftl.schema.v1.ModuleRuntimeEvent - (*ModuleRuntimeScaling)(nil), // 55: xyz.block.ftl.schema.v1.ModuleRuntimeScaling - (*Optional)(nil), // 56: xyz.block.ftl.schema.v1.Optional - (*Position)(nil), // 57: xyz.block.ftl.schema.v1.Position - (*ProvisioningCreatedEvent)(nil), // 58: xyz.block.ftl.schema.v1.ProvisioningCreatedEvent - (*Ref)(nil), // 59: xyz.block.ftl.schema.v1.Ref - (*Schema)(nil), // 60: xyz.block.ftl.schema.v1.Schema - (*SchemaState)(nil), // 61: xyz.block.ftl.schema.v1.SchemaState - (*Secret)(nil), // 62: xyz.block.ftl.schema.v1.Secret - (*String)(nil), // 63: xyz.block.ftl.schema.v1.String - (*StringValue)(nil), // 64: xyz.block.ftl.schema.v1.StringValue - (*Time)(nil), // 65: xyz.block.ftl.schema.v1.Time - (*Topic)(nil), // 66: xyz.block.ftl.schema.v1.Topic - (*TopicRuntime)(nil), // 67: xyz.block.ftl.schema.v1.TopicRuntime - (*TopicRuntimeEvent)(nil), // 68: xyz.block.ftl.schema.v1.TopicRuntimeEvent - (*Type)(nil), // 69: xyz.block.ftl.schema.v1.Type - (*TypeAlias)(nil), // 70: xyz.block.ftl.schema.v1.TypeAlias - (*TypeParameter)(nil), // 71: xyz.block.ftl.schema.v1.TypeParameter - (*TypeValue)(nil), // 72: xyz.block.ftl.schema.v1.TypeValue - (*Unit)(nil), // 73: xyz.block.ftl.schema.v1.Unit - (*Value)(nil), // 74: xyz.block.ftl.schema.v1.Value - (*Verb)(nil), // 75: xyz.block.ftl.schema.v1.Verb - (*VerbRuntime)(nil), // 76: xyz.block.ftl.schema.v1.VerbRuntime - (*VerbRuntimeBase)(nil), // 77: xyz.block.ftl.schema.v1.VerbRuntimeBase - (*VerbRuntimeEvent)(nil), // 78: xyz.block.ftl.schema.v1.VerbRuntimeEvent - (*VerbRuntimeSubscription)(nil), // 79: xyz.block.ftl.schema.v1.VerbRuntimeSubscription - (*timestamppb.Timestamp)(nil), // 80: google.protobuf.Timestamp + (ChangesetState)(0), // 1: xyz.block.ftl.schema.v1.ChangesetState + (FromOffset)(0), // 2: xyz.block.ftl.schema.v1.FromOffset + (ModuleState)(0), // 3: xyz.block.ftl.schema.v1.ModuleState + (*AWSIAMAuthDatabaseConnector)(nil), // 4: xyz.block.ftl.schema.v1.AWSIAMAuthDatabaseConnector + (*Any)(nil), // 5: xyz.block.ftl.schema.v1.Any + (*Array)(nil), // 6: xyz.block.ftl.schema.v1.Array + (*Bool)(nil), // 7: xyz.block.ftl.schema.v1.Bool + (*Bytes)(nil), // 8: xyz.block.ftl.schema.v1.Bytes + (*Changeset)(nil), // 9: xyz.block.ftl.schema.v1.Changeset + (*ChangesetCommittedEvent)(nil), // 10: xyz.block.ftl.schema.v1.ChangesetCommittedEvent + (*ChangesetCreatedEvent)(nil), // 11: xyz.block.ftl.schema.v1.ChangesetCreatedEvent + (*ChangesetFailedEvent)(nil), // 12: xyz.block.ftl.schema.v1.ChangesetFailedEvent + (*Config)(nil), // 13: xyz.block.ftl.schema.v1.Config + (*DSNDatabaseConnector)(nil), // 14: xyz.block.ftl.schema.v1.DSNDatabaseConnector + (*Data)(nil), // 15: xyz.block.ftl.schema.v1.Data + (*Database)(nil), // 16: xyz.block.ftl.schema.v1.Database + (*DatabaseConnector)(nil), // 17: xyz.block.ftl.schema.v1.DatabaseConnector + (*DatabaseRuntime)(nil), // 18: xyz.block.ftl.schema.v1.DatabaseRuntime + (*DatabaseRuntimeConnections)(nil), // 19: xyz.block.ftl.schema.v1.DatabaseRuntimeConnections + (*DatabaseRuntimeEvent)(nil), // 20: xyz.block.ftl.schema.v1.DatabaseRuntimeEvent + (*Decl)(nil), // 21: xyz.block.ftl.schema.v1.Decl + (*DeploymentActivatedEvent)(nil), // 22: xyz.block.ftl.schema.v1.DeploymentActivatedEvent + (*DeploymentCreatedEvent)(nil), // 23: xyz.block.ftl.schema.v1.DeploymentCreatedEvent + (*DeploymentDeactivatedEvent)(nil), // 24: xyz.block.ftl.schema.v1.DeploymentDeactivatedEvent + (*DeploymentReplicasUpdatedEvent)(nil), // 25: xyz.block.ftl.schema.v1.DeploymentReplicasUpdatedEvent + (*DeploymentSchemaUpdatedEvent)(nil), // 26: xyz.block.ftl.schema.v1.DeploymentSchemaUpdatedEvent + (*Enum)(nil), // 27: xyz.block.ftl.schema.v1.Enum + (*EnumVariant)(nil), // 28: xyz.block.ftl.schema.v1.EnumVariant + (*Event)(nil), // 29: xyz.block.ftl.schema.v1.Event + (*Field)(nil), // 30: xyz.block.ftl.schema.v1.Field + (*Float)(nil), // 31: xyz.block.ftl.schema.v1.Float + (*IngressPathComponent)(nil), // 32: xyz.block.ftl.schema.v1.IngressPathComponent + (*IngressPathLiteral)(nil), // 33: xyz.block.ftl.schema.v1.IngressPathLiteral + (*IngressPathParameter)(nil), // 34: xyz.block.ftl.schema.v1.IngressPathParameter + (*Int)(nil), // 35: xyz.block.ftl.schema.v1.Int + (*IntValue)(nil), // 36: xyz.block.ftl.schema.v1.IntValue + (*Map)(nil), // 37: xyz.block.ftl.schema.v1.Map + (*Metadata)(nil), // 38: xyz.block.ftl.schema.v1.Metadata + (*MetadataAlias)(nil), // 39: xyz.block.ftl.schema.v1.MetadataAlias + (*MetadataArtefact)(nil), // 40: xyz.block.ftl.schema.v1.MetadataArtefact + (*MetadataCalls)(nil), // 41: xyz.block.ftl.schema.v1.MetadataCalls + (*MetadataConfig)(nil), // 42: xyz.block.ftl.schema.v1.MetadataConfig + (*MetadataCronJob)(nil), // 43: xyz.block.ftl.schema.v1.MetadataCronJob + (*MetadataDatabases)(nil), // 44: xyz.block.ftl.schema.v1.MetadataDatabases + (*MetadataEncoding)(nil), // 45: xyz.block.ftl.schema.v1.MetadataEncoding + (*MetadataIngress)(nil), // 46: xyz.block.ftl.schema.v1.MetadataIngress + (*MetadataPartitions)(nil), // 47: xyz.block.ftl.schema.v1.MetadataPartitions + (*MetadataPublisher)(nil), // 48: xyz.block.ftl.schema.v1.MetadataPublisher + (*MetadataRetry)(nil), // 49: xyz.block.ftl.schema.v1.MetadataRetry + (*MetadataSQLColumn)(nil), // 50: xyz.block.ftl.schema.v1.MetadataSQLColumn + (*MetadataSQLMigration)(nil), // 51: xyz.block.ftl.schema.v1.MetadataSQLMigration + (*MetadataSQLQuery)(nil), // 52: xyz.block.ftl.schema.v1.MetadataSQLQuery + (*MetadataSecrets)(nil), // 53: xyz.block.ftl.schema.v1.MetadataSecrets + (*MetadataSubscriber)(nil), // 54: xyz.block.ftl.schema.v1.MetadataSubscriber + (*MetadataTypeMap)(nil), // 55: xyz.block.ftl.schema.v1.MetadataTypeMap + (*Module)(nil), // 56: xyz.block.ftl.schema.v1.Module + (*ModuleRuntime)(nil), // 57: xyz.block.ftl.schema.v1.ModuleRuntime + (*ModuleRuntimeBase)(nil), // 58: xyz.block.ftl.schema.v1.ModuleRuntimeBase + (*ModuleRuntimeDeployment)(nil), // 59: xyz.block.ftl.schema.v1.ModuleRuntimeDeployment + (*ModuleRuntimeEvent)(nil), // 60: xyz.block.ftl.schema.v1.ModuleRuntimeEvent + (*ModuleRuntimeScaling)(nil), // 61: xyz.block.ftl.schema.v1.ModuleRuntimeScaling + (*Optional)(nil), // 62: xyz.block.ftl.schema.v1.Optional + (*Position)(nil), // 63: xyz.block.ftl.schema.v1.Position + (*ProvisioningCreatedEvent)(nil), // 64: xyz.block.ftl.schema.v1.ProvisioningCreatedEvent + (*Ref)(nil), // 65: xyz.block.ftl.schema.v1.Ref + (*Schema)(nil), // 66: xyz.block.ftl.schema.v1.Schema + (*SchemaState)(nil), // 67: xyz.block.ftl.schema.v1.SchemaState + (*Secret)(nil), // 68: xyz.block.ftl.schema.v1.Secret + (*SerializedChangeset)(nil), // 69: xyz.block.ftl.schema.v1.SerializedChangeset + (*String)(nil), // 70: xyz.block.ftl.schema.v1.String + (*StringValue)(nil), // 71: xyz.block.ftl.schema.v1.StringValue + (*Time)(nil), // 72: xyz.block.ftl.schema.v1.Time + (*Topic)(nil), // 73: xyz.block.ftl.schema.v1.Topic + (*TopicRuntime)(nil), // 74: xyz.block.ftl.schema.v1.TopicRuntime + (*TopicRuntimeEvent)(nil), // 75: xyz.block.ftl.schema.v1.TopicRuntimeEvent + (*Type)(nil), // 76: xyz.block.ftl.schema.v1.Type + (*TypeAlias)(nil), // 77: xyz.block.ftl.schema.v1.TypeAlias + (*TypeParameter)(nil), // 78: xyz.block.ftl.schema.v1.TypeParameter + (*TypeValue)(nil), // 79: xyz.block.ftl.schema.v1.TypeValue + (*Unit)(nil), // 80: xyz.block.ftl.schema.v1.Unit + (*Value)(nil), // 81: xyz.block.ftl.schema.v1.Value + (*Verb)(nil), // 82: xyz.block.ftl.schema.v1.Verb + (*VerbRuntime)(nil), // 83: xyz.block.ftl.schema.v1.VerbRuntime + (*VerbRuntimeBase)(nil), // 84: xyz.block.ftl.schema.v1.VerbRuntimeBase + (*VerbRuntimeEvent)(nil), // 85: xyz.block.ftl.schema.v1.VerbRuntimeEvent + (*VerbRuntimeSubscription)(nil), // 86: xyz.block.ftl.schema.v1.VerbRuntimeSubscription + (*timestamppb.Timestamp)(nil), // 87: google.protobuf.Timestamp } var file_xyz_block_ftl_schema_v1_schema_proto_depIdxs = []int32{ - 57, // 0: xyz.block.ftl.schema.v1.AWSIAMAuthDatabaseConnector.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 1: xyz.block.ftl.schema.v1.Any.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 2: xyz.block.ftl.schema.v1.Array.pos:type_name -> xyz.block.ftl.schema.v1.Position - 69, // 3: xyz.block.ftl.schema.v1.Array.element:type_name -> xyz.block.ftl.schema.v1.Type - 57, // 4: xyz.block.ftl.schema.v1.Bool.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 5: xyz.block.ftl.schema.v1.Bytes.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 6: xyz.block.ftl.schema.v1.Config.pos:type_name -> xyz.block.ftl.schema.v1.Position - 69, // 7: xyz.block.ftl.schema.v1.Config.type:type_name -> xyz.block.ftl.schema.v1.Type - 57, // 8: xyz.block.ftl.schema.v1.DSNDatabaseConnector.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 9: xyz.block.ftl.schema.v1.Data.pos:type_name -> xyz.block.ftl.schema.v1.Position - 71, // 10: xyz.block.ftl.schema.v1.Data.type_parameters:type_name -> xyz.block.ftl.schema.v1.TypeParameter - 24, // 11: xyz.block.ftl.schema.v1.Data.fields:type_name -> xyz.block.ftl.schema.v1.Field - 32, // 12: xyz.block.ftl.schema.v1.Data.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata - 57, // 13: xyz.block.ftl.schema.v1.Database.pos:type_name -> xyz.block.ftl.schema.v1.Position - 12, // 14: xyz.block.ftl.schema.v1.Database.runtime:type_name -> xyz.block.ftl.schema.v1.DatabaseRuntime - 32, // 15: xyz.block.ftl.schema.v1.Database.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata - 2, // 16: xyz.block.ftl.schema.v1.DatabaseConnector.awsiam_auth_database_connector:type_name -> xyz.block.ftl.schema.v1.AWSIAMAuthDatabaseConnector - 8, // 17: xyz.block.ftl.schema.v1.DatabaseConnector.dsn_database_connector:type_name -> xyz.block.ftl.schema.v1.DSNDatabaseConnector - 13, // 18: xyz.block.ftl.schema.v1.DatabaseRuntime.connections:type_name -> xyz.block.ftl.schema.v1.DatabaseRuntimeConnections - 11, // 19: xyz.block.ftl.schema.v1.DatabaseRuntimeConnections.read:type_name -> xyz.block.ftl.schema.v1.DatabaseConnector - 11, // 20: xyz.block.ftl.schema.v1.DatabaseRuntimeConnections.write:type_name -> xyz.block.ftl.schema.v1.DatabaseConnector - 13, // 21: xyz.block.ftl.schema.v1.DatabaseRuntimeEvent.connections:type_name -> xyz.block.ftl.schema.v1.DatabaseRuntimeConnections - 7, // 22: xyz.block.ftl.schema.v1.Decl.config:type_name -> xyz.block.ftl.schema.v1.Config - 9, // 23: xyz.block.ftl.schema.v1.Decl.data:type_name -> xyz.block.ftl.schema.v1.Data - 10, // 24: xyz.block.ftl.schema.v1.Decl.database:type_name -> xyz.block.ftl.schema.v1.Database - 21, // 25: xyz.block.ftl.schema.v1.Decl.enum:type_name -> xyz.block.ftl.schema.v1.Enum - 62, // 26: xyz.block.ftl.schema.v1.Decl.secret:type_name -> xyz.block.ftl.schema.v1.Secret - 66, // 27: xyz.block.ftl.schema.v1.Decl.topic:type_name -> xyz.block.ftl.schema.v1.Topic - 70, // 28: xyz.block.ftl.schema.v1.Decl.type_alias:type_name -> xyz.block.ftl.schema.v1.TypeAlias - 75, // 29: xyz.block.ftl.schema.v1.Decl.verb:type_name -> xyz.block.ftl.schema.v1.Verb - 80, // 30: xyz.block.ftl.schema.v1.DeploymentActivatedEvent.activated_at:type_name -> google.protobuf.Timestamp - 50, // 31: xyz.block.ftl.schema.v1.DeploymentCreatedEvent.schema:type_name -> xyz.block.ftl.schema.v1.Module - 50, // 32: xyz.block.ftl.schema.v1.DeploymentSchemaUpdatedEvent.schema:type_name -> xyz.block.ftl.schema.v1.Module - 57, // 33: xyz.block.ftl.schema.v1.Enum.pos:type_name -> xyz.block.ftl.schema.v1.Position - 69, // 34: xyz.block.ftl.schema.v1.Enum.type:type_name -> xyz.block.ftl.schema.v1.Type - 22, // 35: xyz.block.ftl.schema.v1.Enum.variants:type_name -> xyz.block.ftl.schema.v1.EnumVariant - 57, // 36: xyz.block.ftl.schema.v1.EnumVariant.pos:type_name -> xyz.block.ftl.schema.v1.Position - 74, // 37: xyz.block.ftl.schema.v1.EnumVariant.value:type_name -> xyz.block.ftl.schema.v1.Value - 14, // 38: xyz.block.ftl.schema.v1.Event.database_runtime_event:type_name -> xyz.block.ftl.schema.v1.DatabaseRuntimeEvent - 16, // 39: xyz.block.ftl.schema.v1.Event.deployment_activated_event:type_name -> xyz.block.ftl.schema.v1.DeploymentActivatedEvent - 17, // 40: xyz.block.ftl.schema.v1.Event.deployment_created_event:type_name -> xyz.block.ftl.schema.v1.DeploymentCreatedEvent - 18, // 41: xyz.block.ftl.schema.v1.Event.deployment_deactivated_event:type_name -> xyz.block.ftl.schema.v1.DeploymentDeactivatedEvent - 19, // 42: xyz.block.ftl.schema.v1.Event.deployment_replicas_updated_event:type_name -> xyz.block.ftl.schema.v1.DeploymentReplicasUpdatedEvent - 20, // 43: xyz.block.ftl.schema.v1.Event.deployment_schema_updated_event:type_name -> xyz.block.ftl.schema.v1.DeploymentSchemaUpdatedEvent - 54, // 44: xyz.block.ftl.schema.v1.Event.module_runtime_event:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeEvent - 58, // 45: xyz.block.ftl.schema.v1.Event.provisioning_created_event:type_name -> xyz.block.ftl.schema.v1.ProvisioningCreatedEvent - 68, // 46: xyz.block.ftl.schema.v1.Event.topic_runtime_event:type_name -> xyz.block.ftl.schema.v1.TopicRuntimeEvent - 78, // 47: xyz.block.ftl.schema.v1.Event.verb_runtime_event:type_name -> xyz.block.ftl.schema.v1.VerbRuntimeEvent - 57, // 48: xyz.block.ftl.schema.v1.Field.pos:type_name -> xyz.block.ftl.schema.v1.Position - 69, // 49: xyz.block.ftl.schema.v1.Field.type:type_name -> xyz.block.ftl.schema.v1.Type - 32, // 50: xyz.block.ftl.schema.v1.Field.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata - 57, // 51: xyz.block.ftl.schema.v1.Float.pos:type_name -> xyz.block.ftl.schema.v1.Position - 27, // 52: xyz.block.ftl.schema.v1.IngressPathComponent.ingress_path_literal:type_name -> xyz.block.ftl.schema.v1.IngressPathLiteral - 28, // 53: xyz.block.ftl.schema.v1.IngressPathComponent.ingress_path_parameter:type_name -> xyz.block.ftl.schema.v1.IngressPathParameter - 57, // 54: xyz.block.ftl.schema.v1.IngressPathLiteral.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 55: xyz.block.ftl.schema.v1.IngressPathParameter.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 56: xyz.block.ftl.schema.v1.Int.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 57: xyz.block.ftl.schema.v1.IntValue.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 58: xyz.block.ftl.schema.v1.Map.pos:type_name -> xyz.block.ftl.schema.v1.Position - 69, // 59: xyz.block.ftl.schema.v1.Map.key:type_name -> xyz.block.ftl.schema.v1.Type - 69, // 60: xyz.block.ftl.schema.v1.Map.value:type_name -> xyz.block.ftl.schema.v1.Type - 33, // 61: xyz.block.ftl.schema.v1.Metadata.alias:type_name -> xyz.block.ftl.schema.v1.MetadataAlias - 34, // 62: xyz.block.ftl.schema.v1.Metadata.artefact:type_name -> xyz.block.ftl.schema.v1.MetadataArtefact - 35, // 63: xyz.block.ftl.schema.v1.Metadata.calls:type_name -> xyz.block.ftl.schema.v1.MetadataCalls - 36, // 64: xyz.block.ftl.schema.v1.Metadata.config:type_name -> xyz.block.ftl.schema.v1.MetadataConfig - 37, // 65: xyz.block.ftl.schema.v1.Metadata.cron_job:type_name -> xyz.block.ftl.schema.v1.MetadataCronJob - 38, // 66: xyz.block.ftl.schema.v1.Metadata.databases:type_name -> xyz.block.ftl.schema.v1.MetadataDatabases - 39, // 67: xyz.block.ftl.schema.v1.Metadata.encoding:type_name -> xyz.block.ftl.schema.v1.MetadataEncoding - 40, // 68: xyz.block.ftl.schema.v1.Metadata.ingress:type_name -> xyz.block.ftl.schema.v1.MetadataIngress - 41, // 69: xyz.block.ftl.schema.v1.Metadata.partitions:type_name -> xyz.block.ftl.schema.v1.MetadataPartitions - 42, // 70: xyz.block.ftl.schema.v1.Metadata.publisher:type_name -> xyz.block.ftl.schema.v1.MetadataPublisher - 43, // 71: xyz.block.ftl.schema.v1.Metadata.retry:type_name -> xyz.block.ftl.schema.v1.MetadataRetry - 44, // 72: xyz.block.ftl.schema.v1.Metadata.sql_column:type_name -> xyz.block.ftl.schema.v1.MetadataSQLColumn - 45, // 73: xyz.block.ftl.schema.v1.Metadata.sql_migration:type_name -> xyz.block.ftl.schema.v1.MetadataSQLMigration - 46, // 74: xyz.block.ftl.schema.v1.Metadata.sql_query:type_name -> xyz.block.ftl.schema.v1.MetadataSQLQuery - 47, // 75: xyz.block.ftl.schema.v1.Metadata.secrets:type_name -> xyz.block.ftl.schema.v1.MetadataSecrets - 48, // 76: xyz.block.ftl.schema.v1.Metadata.subscriber:type_name -> xyz.block.ftl.schema.v1.MetadataSubscriber - 49, // 77: xyz.block.ftl.schema.v1.Metadata.type_map:type_name -> xyz.block.ftl.schema.v1.MetadataTypeMap - 57, // 78: xyz.block.ftl.schema.v1.MetadataAlias.pos:type_name -> xyz.block.ftl.schema.v1.Position - 0, // 79: xyz.block.ftl.schema.v1.MetadataAlias.kind:type_name -> xyz.block.ftl.schema.v1.AliasKind - 57, // 80: xyz.block.ftl.schema.v1.MetadataArtefact.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 81: xyz.block.ftl.schema.v1.MetadataCalls.pos:type_name -> xyz.block.ftl.schema.v1.Position - 59, // 82: xyz.block.ftl.schema.v1.MetadataCalls.calls:type_name -> xyz.block.ftl.schema.v1.Ref - 57, // 83: xyz.block.ftl.schema.v1.MetadataConfig.pos:type_name -> xyz.block.ftl.schema.v1.Position - 59, // 84: xyz.block.ftl.schema.v1.MetadataConfig.config:type_name -> xyz.block.ftl.schema.v1.Ref - 57, // 85: xyz.block.ftl.schema.v1.MetadataCronJob.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 86: xyz.block.ftl.schema.v1.MetadataDatabases.pos:type_name -> xyz.block.ftl.schema.v1.Position - 59, // 87: xyz.block.ftl.schema.v1.MetadataDatabases.calls:type_name -> xyz.block.ftl.schema.v1.Ref - 57, // 88: xyz.block.ftl.schema.v1.MetadataEncoding.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 89: xyz.block.ftl.schema.v1.MetadataIngress.pos:type_name -> xyz.block.ftl.schema.v1.Position - 26, // 90: xyz.block.ftl.schema.v1.MetadataIngress.path:type_name -> xyz.block.ftl.schema.v1.IngressPathComponent - 57, // 91: xyz.block.ftl.schema.v1.MetadataPartitions.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 92: xyz.block.ftl.schema.v1.MetadataPublisher.pos:type_name -> xyz.block.ftl.schema.v1.Position - 59, // 93: xyz.block.ftl.schema.v1.MetadataPublisher.topics:type_name -> xyz.block.ftl.schema.v1.Ref - 57, // 94: xyz.block.ftl.schema.v1.MetadataRetry.pos:type_name -> xyz.block.ftl.schema.v1.Position - 59, // 95: xyz.block.ftl.schema.v1.MetadataRetry.catch:type_name -> xyz.block.ftl.schema.v1.Ref - 57, // 96: xyz.block.ftl.schema.v1.MetadataSQLColumn.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 97: xyz.block.ftl.schema.v1.MetadataSQLMigration.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 98: xyz.block.ftl.schema.v1.MetadataSQLQuery.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 99: xyz.block.ftl.schema.v1.MetadataSecrets.pos:type_name -> xyz.block.ftl.schema.v1.Position - 59, // 100: xyz.block.ftl.schema.v1.MetadataSecrets.secrets:type_name -> xyz.block.ftl.schema.v1.Ref - 57, // 101: xyz.block.ftl.schema.v1.MetadataSubscriber.pos:type_name -> xyz.block.ftl.schema.v1.Position - 59, // 102: xyz.block.ftl.schema.v1.MetadataSubscriber.topic:type_name -> xyz.block.ftl.schema.v1.Ref - 1, // 103: xyz.block.ftl.schema.v1.MetadataSubscriber.from_offset:type_name -> xyz.block.ftl.schema.v1.FromOffset - 57, // 104: xyz.block.ftl.schema.v1.MetadataTypeMap.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 105: xyz.block.ftl.schema.v1.Module.pos:type_name -> xyz.block.ftl.schema.v1.Position - 32, // 106: xyz.block.ftl.schema.v1.Module.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata - 15, // 107: xyz.block.ftl.schema.v1.Module.decls:type_name -> xyz.block.ftl.schema.v1.Decl - 51, // 108: xyz.block.ftl.schema.v1.Module.runtime:type_name -> xyz.block.ftl.schema.v1.ModuleRuntime - 52, // 109: xyz.block.ftl.schema.v1.ModuleRuntime.base:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeBase - 55, // 110: xyz.block.ftl.schema.v1.ModuleRuntime.scaling:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeScaling - 53, // 111: xyz.block.ftl.schema.v1.ModuleRuntime.deployment:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeDeployment - 80, // 112: xyz.block.ftl.schema.v1.ModuleRuntimeBase.create_time:type_name -> google.protobuf.Timestamp - 80, // 113: xyz.block.ftl.schema.v1.ModuleRuntimeDeployment.created_at:type_name -> google.protobuf.Timestamp - 80, // 114: xyz.block.ftl.schema.v1.ModuleRuntimeDeployment.activated_at:type_name -> google.protobuf.Timestamp - 52, // 115: xyz.block.ftl.schema.v1.ModuleRuntimeEvent.base:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeBase - 55, // 116: xyz.block.ftl.schema.v1.ModuleRuntimeEvent.scaling:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeScaling - 53, // 117: xyz.block.ftl.schema.v1.ModuleRuntimeEvent.deployment:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeDeployment - 57, // 118: xyz.block.ftl.schema.v1.Optional.pos:type_name -> xyz.block.ftl.schema.v1.Position - 69, // 119: xyz.block.ftl.schema.v1.Optional.type:type_name -> xyz.block.ftl.schema.v1.Type - 50, // 120: xyz.block.ftl.schema.v1.ProvisioningCreatedEvent.desired_module:type_name -> xyz.block.ftl.schema.v1.Module - 57, // 121: xyz.block.ftl.schema.v1.Ref.pos:type_name -> xyz.block.ftl.schema.v1.Position - 69, // 122: xyz.block.ftl.schema.v1.Ref.type_parameters:type_name -> xyz.block.ftl.schema.v1.Type - 57, // 123: xyz.block.ftl.schema.v1.Schema.pos:type_name -> xyz.block.ftl.schema.v1.Position - 50, // 124: xyz.block.ftl.schema.v1.Schema.modules:type_name -> xyz.block.ftl.schema.v1.Module - 50, // 125: xyz.block.ftl.schema.v1.SchemaState.modules:type_name -> xyz.block.ftl.schema.v1.Module - 57, // 126: xyz.block.ftl.schema.v1.Secret.pos:type_name -> xyz.block.ftl.schema.v1.Position - 69, // 127: xyz.block.ftl.schema.v1.Secret.type:type_name -> xyz.block.ftl.schema.v1.Type - 57, // 128: xyz.block.ftl.schema.v1.String.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 129: xyz.block.ftl.schema.v1.StringValue.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 130: xyz.block.ftl.schema.v1.Time.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 131: xyz.block.ftl.schema.v1.Topic.pos:type_name -> xyz.block.ftl.schema.v1.Position - 67, // 132: xyz.block.ftl.schema.v1.Topic.runtime:type_name -> xyz.block.ftl.schema.v1.TopicRuntime - 69, // 133: xyz.block.ftl.schema.v1.Topic.event:type_name -> xyz.block.ftl.schema.v1.Type - 32, // 134: xyz.block.ftl.schema.v1.Topic.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata - 67, // 135: xyz.block.ftl.schema.v1.TopicRuntimeEvent.payload:type_name -> xyz.block.ftl.schema.v1.TopicRuntime - 3, // 136: xyz.block.ftl.schema.v1.Type.any:type_name -> xyz.block.ftl.schema.v1.Any - 4, // 137: xyz.block.ftl.schema.v1.Type.array:type_name -> xyz.block.ftl.schema.v1.Array - 5, // 138: xyz.block.ftl.schema.v1.Type.bool:type_name -> xyz.block.ftl.schema.v1.Bool - 6, // 139: xyz.block.ftl.schema.v1.Type.bytes:type_name -> xyz.block.ftl.schema.v1.Bytes - 25, // 140: xyz.block.ftl.schema.v1.Type.float:type_name -> xyz.block.ftl.schema.v1.Float - 29, // 141: xyz.block.ftl.schema.v1.Type.int:type_name -> xyz.block.ftl.schema.v1.Int - 31, // 142: xyz.block.ftl.schema.v1.Type.map:type_name -> xyz.block.ftl.schema.v1.Map - 56, // 143: xyz.block.ftl.schema.v1.Type.optional:type_name -> xyz.block.ftl.schema.v1.Optional - 59, // 144: xyz.block.ftl.schema.v1.Type.ref:type_name -> xyz.block.ftl.schema.v1.Ref - 63, // 145: xyz.block.ftl.schema.v1.Type.string:type_name -> xyz.block.ftl.schema.v1.String - 65, // 146: xyz.block.ftl.schema.v1.Type.time:type_name -> xyz.block.ftl.schema.v1.Time - 73, // 147: xyz.block.ftl.schema.v1.Type.unit:type_name -> xyz.block.ftl.schema.v1.Unit - 57, // 148: xyz.block.ftl.schema.v1.TypeAlias.pos:type_name -> xyz.block.ftl.schema.v1.Position - 69, // 149: xyz.block.ftl.schema.v1.TypeAlias.type:type_name -> xyz.block.ftl.schema.v1.Type - 32, // 150: xyz.block.ftl.schema.v1.TypeAlias.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata - 57, // 151: xyz.block.ftl.schema.v1.TypeParameter.pos:type_name -> xyz.block.ftl.schema.v1.Position - 57, // 152: xyz.block.ftl.schema.v1.TypeValue.pos:type_name -> xyz.block.ftl.schema.v1.Position - 69, // 153: xyz.block.ftl.schema.v1.TypeValue.value:type_name -> xyz.block.ftl.schema.v1.Type - 57, // 154: xyz.block.ftl.schema.v1.Unit.pos:type_name -> xyz.block.ftl.schema.v1.Position - 30, // 155: xyz.block.ftl.schema.v1.Value.int_value:type_name -> xyz.block.ftl.schema.v1.IntValue - 64, // 156: xyz.block.ftl.schema.v1.Value.string_value:type_name -> xyz.block.ftl.schema.v1.StringValue - 72, // 157: xyz.block.ftl.schema.v1.Value.type_value:type_name -> xyz.block.ftl.schema.v1.TypeValue - 57, // 158: xyz.block.ftl.schema.v1.Verb.pos:type_name -> xyz.block.ftl.schema.v1.Position - 69, // 159: xyz.block.ftl.schema.v1.Verb.request:type_name -> xyz.block.ftl.schema.v1.Type - 69, // 160: xyz.block.ftl.schema.v1.Verb.response:type_name -> xyz.block.ftl.schema.v1.Type - 32, // 161: xyz.block.ftl.schema.v1.Verb.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata - 76, // 162: xyz.block.ftl.schema.v1.Verb.runtime:type_name -> xyz.block.ftl.schema.v1.VerbRuntime - 77, // 163: xyz.block.ftl.schema.v1.VerbRuntime.base:type_name -> xyz.block.ftl.schema.v1.VerbRuntimeBase - 79, // 164: xyz.block.ftl.schema.v1.VerbRuntime.subscription:type_name -> xyz.block.ftl.schema.v1.VerbRuntimeSubscription - 80, // 165: xyz.block.ftl.schema.v1.VerbRuntimeBase.create_time:type_name -> google.protobuf.Timestamp - 80, // 166: xyz.block.ftl.schema.v1.VerbRuntimeBase.start_time:type_name -> google.protobuf.Timestamp - 77, // 167: xyz.block.ftl.schema.v1.VerbRuntimeEvent.base:type_name -> xyz.block.ftl.schema.v1.VerbRuntimeBase - 79, // 168: xyz.block.ftl.schema.v1.VerbRuntimeEvent.subscription:type_name -> xyz.block.ftl.schema.v1.VerbRuntimeSubscription - 169, // [169:169] is the sub-list for method output_type - 169, // [169:169] is the sub-list for method input_type - 169, // [169:169] is the sub-list for extension type_name - 169, // [169:169] is the sub-list for extension extendee - 0, // [0:169] is the sub-list for field type_name + 63, // 0: xyz.block.ftl.schema.v1.AWSIAMAuthDatabaseConnector.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 1: xyz.block.ftl.schema.v1.Any.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 2: xyz.block.ftl.schema.v1.Array.pos:type_name -> xyz.block.ftl.schema.v1.Position + 76, // 3: xyz.block.ftl.schema.v1.Array.element:type_name -> xyz.block.ftl.schema.v1.Type + 63, // 4: xyz.block.ftl.schema.v1.Bool.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 5: xyz.block.ftl.schema.v1.Bytes.pos:type_name -> xyz.block.ftl.schema.v1.Position + 87, // 6: xyz.block.ftl.schema.v1.Changeset.created_at:type_name -> google.protobuf.Timestamp + 56, // 7: xyz.block.ftl.schema.v1.Changeset.modules:type_name -> xyz.block.ftl.schema.v1.Module + 1, // 8: xyz.block.ftl.schema.v1.Changeset.state:type_name -> xyz.block.ftl.schema.v1.ChangesetState + 9, // 9: xyz.block.ftl.schema.v1.ChangesetCreatedEvent.changeset:type_name -> xyz.block.ftl.schema.v1.Changeset + 63, // 10: xyz.block.ftl.schema.v1.Config.pos:type_name -> xyz.block.ftl.schema.v1.Position + 76, // 11: xyz.block.ftl.schema.v1.Config.type:type_name -> xyz.block.ftl.schema.v1.Type + 63, // 12: xyz.block.ftl.schema.v1.DSNDatabaseConnector.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 13: xyz.block.ftl.schema.v1.Data.pos:type_name -> xyz.block.ftl.schema.v1.Position + 78, // 14: xyz.block.ftl.schema.v1.Data.type_parameters:type_name -> xyz.block.ftl.schema.v1.TypeParameter + 30, // 15: xyz.block.ftl.schema.v1.Data.fields:type_name -> xyz.block.ftl.schema.v1.Field + 38, // 16: xyz.block.ftl.schema.v1.Data.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata + 63, // 17: xyz.block.ftl.schema.v1.Database.pos:type_name -> xyz.block.ftl.schema.v1.Position + 18, // 18: xyz.block.ftl.schema.v1.Database.runtime:type_name -> xyz.block.ftl.schema.v1.DatabaseRuntime + 38, // 19: xyz.block.ftl.schema.v1.Database.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata + 4, // 20: xyz.block.ftl.schema.v1.DatabaseConnector.awsiam_auth_database_connector:type_name -> xyz.block.ftl.schema.v1.AWSIAMAuthDatabaseConnector + 14, // 21: xyz.block.ftl.schema.v1.DatabaseConnector.dsn_database_connector:type_name -> xyz.block.ftl.schema.v1.DSNDatabaseConnector + 19, // 22: xyz.block.ftl.schema.v1.DatabaseRuntime.connections:type_name -> xyz.block.ftl.schema.v1.DatabaseRuntimeConnections + 17, // 23: xyz.block.ftl.schema.v1.DatabaseRuntimeConnections.read:type_name -> xyz.block.ftl.schema.v1.DatabaseConnector + 17, // 24: xyz.block.ftl.schema.v1.DatabaseRuntimeConnections.write:type_name -> xyz.block.ftl.schema.v1.DatabaseConnector + 19, // 25: xyz.block.ftl.schema.v1.DatabaseRuntimeEvent.connections:type_name -> xyz.block.ftl.schema.v1.DatabaseRuntimeConnections + 13, // 26: xyz.block.ftl.schema.v1.Decl.config:type_name -> xyz.block.ftl.schema.v1.Config + 15, // 27: xyz.block.ftl.schema.v1.Decl.data:type_name -> xyz.block.ftl.schema.v1.Data + 16, // 28: xyz.block.ftl.schema.v1.Decl.database:type_name -> xyz.block.ftl.schema.v1.Database + 27, // 29: xyz.block.ftl.schema.v1.Decl.enum:type_name -> xyz.block.ftl.schema.v1.Enum + 68, // 30: xyz.block.ftl.schema.v1.Decl.secret:type_name -> xyz.block.ftl.schema.v1.Secret + 73, // 31: xyz.block.ftl.schema.v1.Decl.topic:type_name -> xyz.block.ftl.schema.v1.Topic + 77, // 32: xyz.block.ftl.schema.v1.Decl.type_alias:type_name -> xyz.block.ftl.schema.v1.TypeAlias + 82, // 33: xyz.block.ftl.schema.v1.Decl.verb:type_name -> xyz.block.ftl.schema.v1.Verb + 87, // 34: xyz.block.ftl.schema.v1.DeploymentActivatedEvent.activated_at:type_name -> google.protobuf.Timestamp + 56, // 35: xyz.block.ftl.schema.v1.DeploymentCreatedEvent.schema:type_name -> xyz.block.ftl.schema.v1.Module + 56, // 36: xyz.block.ftl.schema.v1.DeploymentSchemaUpdatedEvent.schema:type_name -> xyz.block.ftl.schema.v1.Module + 63, // 37: xyz.block.ftl.schema.v1.Enum.pos:type_name -> xyz.block.ftl.schema.v1.Position + 76, // 38: xyz.block.ftl.schema.v1.Enum.type:type_name -> xyz.block.ftl.schema.v1.Type + 28, // 39: xyz.block.ftl.schema.v1.Enum.variants:type_name -> xyz.block.ftl.schema.v1.EnumVariant + 63, // 40: xyz.block.ftl.schema.v1.EnumVariant.pos:type_name -> xyz.block.ftl.schema.v1.Position + 81, // 41: xyz.block.ftl.schema.v1.EnumVariant.value:type_name -> xyz.block.ftl.schema.v1.Value + 10, // 42: xyz.block.ftl.schema.v1.Event.changeset_committed_event:type_name -> xyz.block.ftl.schema.v1.ChangesetCommittedEvent + 11, // 43: xyz.block.ftl.schema.v1.Event.changeset_created_event:type_name -> xyz.block.ftl.schema.v1.ChangesetCreatedEvent + 12, // 44: xyz.block.ftl.schema.v1.Event.changeset_failed_event:type_name -> xyz.block.ftl.schema.v1.ChangesetFailedEvent + 20, // 45: xyz.block.ftl.schema.v1.Event.database_runtime_event:type_name -> xyz.block.ftl.schema.v1.DatabaseRuntimeEvent + 22, // 46: xyz.block.ftl.schema.v1.Event.deployment_activated_event:type_name -> xyz.block.ftl.schema.v1.DeploymentActivatedEvent + 23, // 47: xyz.block.ftl.schema.v1.Event.deployment_created_event:type_name -> xyz.block.ftl.schema.v1.DeploymentCreatedEvent + 24, // 48: xyz.block.ftl.schema.v1.Event.deployment_deactivated_event:type_name -> xyz.block.ftl.schema.v1.DeploymentDeactivatedEvent + 25, // 49: xyz.block.ftl.schema.v1.Event.deployment_replicas_updated_event:type_name -> xyz.block.ftl.schema.v1.DeploymentReplicasUpdatedEvent + 26, // 50: xyz.block.ftl.schema.v1.Event.deployment_schema_updated_event:type_name -> xyz.block.ftl.schema.v1.DeploymentSchemaUpdatedEvent + 60, // 51: xyz.block.ftl.schema.v1.Event.module_runtime_event:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeEvent + 64, // 52: xyz.block.ftl.schema.v1.Event.provisioning_created_event:type_name -> xyz.block.ftl.schema.v1.ProvisioningCreatedEvent + 75, // 53: xyz.block.ftl.schema.v1.Event.topic_runtime_event:type_name -> xyz.block.ftl.schema.v1.TopicRuntimeEvent + 85, // 54: xyz.block.ftl.schema.v1.Event.verb_runtime_event:type_name -> xyz.block.ftl.schema.v1.VerbRuntimeEvent + 63, // 55: xyz.block.ftl.schema.v1.Field.pos:type_name -> xyz.block.ftl.schema.v1.Position + 76, // 56: xyz.block.ftl.schema.v1.Field.type:type_name -> xyz.block.ftl.schema.v1.Type + 38, // 57: xyz.block.ftl.schema.v1.Field.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata + 63, // 58: xyz.block.ftl.schema.v1.Float.pos:type_name -> xyz.block.ftl.schema.v1.Position + 33, // 59: xyz.block.ftl.schema.v1.IngressPathComponent.ingress_path_literal:type_name -> xyz.block.ftl.schema.v1.IngressPathLiteral + 34, // 60: xyz.block.ftl.schema.v1.IngressPathComponent.ingress_path_parameter:type_name -> xyz.block.ftl.schema.v1.IngressPathParameter + 63, // 61: xyz.block.ftl.schema.v1.IngressPathLiteral.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 62: xyz.block.ftl.schema.v1.IngressPathParameter.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 63: xyz.block.ftl.schema.v1.Int.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 64: xyz.block.ftl.schema.v1.IntValue.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 65: xyz.block.ftl.schema.v1.Map.pos:type_name -> xyz.block.ftl.schema.v1.Position + 76, // 66: xyz.block.ftl.schema.v1.Map.key:type_name -> xyz.block.ftl.schema.v1.Type + 76, // 67: xyz.block.ftl.schema.v1.Map.value:type_name -> xyz.block.ftl.schema.v1.Type + 39, // 68: xyz.block.ftl.schema.v1.Metadata.alias:type_name -> xyz.block.ftl.schema.v1.MetadataAlias + 40, // 69: xyz.block.ftl.schema.v1.Metadata.artefact:type_name -> xyz.block.ftl.schema.v1.MetadataArtefact + 41, // 70: xyz.block.ftl.schema.v1.Metadata.calls:type_name -> xyz.block.ftl.schema.v1.MetadataCalls + 42, // 71: xyz.block.ftl.schema.v1.Metadata.config:type_name -> xyz.block.ftl.schema.v1.MetadataConfig + 43, // 72: xyz.block.ftl.schema.v1.Metadata.cron_job:type_name -> xyz.block.ftl.schema.v1.MetadataCronJob + 44, // 73: xyz.block.ftl.schema.v1.Metadata.databases:type_name -> xyz.block.ftl.schema.v1.MetadataDatabases + 45, // 74: xyz.block.ftl.schema.v1.Metadata.encoding:type_name -> xyz.block.ftl.schema.v1.MetadataEncoding + 46, // 75: xyz.block.ftl.schema.v1.Metadata.ingress:type_name -> xyz.block.ftl.schema.v1.MetadataIngress + 47, // 76: xyz.block.ftl.schema.v1.Metadata.partitions:type_name -> xyz.block.ftl.schema.v1.MetadataPartitions + 48, // 77: xyz.block.ftl.schema.v1.Metadata.publisher:type_name -> xyz.block.ftl.schema.v1.MetadataPublisher + 49, // 78: xyz.block.ftl.schema.v1.Metadata.retry:type_name -> xyz.block.ftl.schema.v1.MetadataRetry + 50, // 79: xyz.block.ftl.schema.v1.Metadata.sql_column:type_name -> xyz.block.ftl.schema.v1.MetadataSQLColumn + 51, // 80: xyz.block.ftl.schema.v1.Metadata.sql_migration:type_name -> xyz.block.ftl.schema.v1.MetadataSQLMigration + 52, // 81: xyz.block.ftl.schema.v1.Metadata.sql_query:type_name -> xyz.block.ftl.schema.v1.MetadataSQLQuery + 53, // 82: xyz.block.ftl.schema.v1.Metadata.secrets:type_name -> xyz.block.ftl.schema.v1.MetadataSecrets + 54, // 83: xyz.block.ftl.schema.v1.Metadata.subscriber:type_name -> xyz.block.ftl.schema.v1.MetadataSubscriber + 55, // 84: xyz.block.ftl.schema.v1.Metadata.type_map:type_name -> xyz.block.ftl.schema.v1.MetadataTypeMap + 63, // 85: xyz.block.ftl.schema.v1.MetadataAlias.pos:type_name -> xyz.block.ftl.schema.v1.Position + 0, // 86: xyz.block.ftl.schema.v1.MetadataAlias.kind:type_name -> xyz.block.ftl.schema.v1.AliasKind + 63, // 87: xyz.block.ftl.schema.v1.MetadataArtefact.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 88: xyz.block.ftl.schema.v1.MetadataCalls.pos:type_name -> xyz.block.ftl.schema.v1.Position + 65, // 89: xyz.block.ftl.schema.v1.MetadataCalls.calls:type_name -> xyz.block.ftl.schema.v1.Ref + 63, // 90: xyz.block.ftl.schema.v1.MetadataConfig.pos:type_name -> xyz.block.ftl.schema.v1.Position + 65, // 91: xyz.block.ftl.schema.v1.MetadataConfig.config:type_name -> xyz.block.ftl.schema.v1.Ref + 63, // 92: xyz.block.ftl.schema.v1.MetadataCronJob.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 93: xyz.block.ftl.schema.v1.MetadataDatabases.pos:type_name -> xyz.block.ftl.schema.v1.Position + 65, // 94: xyz.block.ftl.schema.v1.MetadataDatabases.calls:type_name -> xyz.block.ftl.schema.v1.Ref + 63, // 95: xyz.block.ftl.schema.v1.MetadataEncoding.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 96: xyz.block.ftl.schema.v1.MetadataIngress.pos:type_name -> xyz.block.ftl.schema.v1.Position + 32, // 97: xyz.block.ftl.schema.v1.MetadataIngress.path:type_name -> xyz.block.ftl.schema.v1.IngressPathComponent + 63, // 98: xyz.block.ftl.schema.v1.MetadataPartitions.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 99: xyz.block.ftl.schema.v1.MetadataPublisher.pos:type_name -> xyz.block.ftl.schema.v1.Position + 65, // 100: xyz.block.ftl.schema.v1.MetadataPublisher.topics:type_name -> xyz.block.ftl.schema.v1.Ref + 63, // 101: xyz.block.ftl.schema.v1.MetadataRetry.pos:type_name -> xyz.block.ftl.schema.v1.Position + 65, // 102: xyz.block.ftl.schema.v1.MetadataRetry.catch:type_name -> xyz.block.ftl.schema.v1.Ref + 63, // 103: xyz.block.ftl.schema.v1.MetadataSQLColumn.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 104: xyz.block.ftl.schema.v1.MetadataSQLMigration.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 105: xyz.block.ftl.schema.v1.MetadataSQLQuery.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 106: xyz.block.ftl.schema.v1.MetadataSecrets.pos:type_name -> xyz.block.ftl.schema.v1.Position + 65, // 107: xyz.block.ftl.schema.v1.MetadataSecrets.secrets:type_name -> xyz.block.ftl.schema.v1.Ref + 63, // 108: xyz.block.ftl.schema.v1.MetadataSubscriber.pos:type_name -> xyz.block.ftl.schema.v1.Position + 65, // 109: xyz.block.ftl.schema.v1.MetadataSubscriber.topic:type_name -> xyz.block.ftl.schema.v1.Ref + 2, // 110: xyz.block.ftl.schema.v1.MetadataSubscriber.from_offset:type_name -> xyz.block.ftl.schema.v1.FromOffset + 63, // 111: xyz.block.ftl.schema.v1.MetadataTypeMap.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 112: xyz.block.ftl.schema.v1.Module.pos:type_name -> xyz.block.ftl.schema.v1.Position + 38, // 113: xyz.block.ftl.schema.v1.Module.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata + 21, // 114: xyz.block.ftl.schema.v1.Module.decls:type_name -> xyz.block.ftl.schema.v1.Decl + 57, // 115: xyz.block.ftl.schema.v1.Module.runtime:type_name -> xyz.block.ftl.schema.v1.ModuleRuntime + 58, // 116: xyz.block.ftl.schema.v1.ModuleRuntime.base:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeBase + 61, // 117: xyz.block.ftl.schema.v1.ModuleRuntime.scaling:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeScaling + 59, // 118: xyz.block.ftl.schema.v1.ModuleRuntime.deployment:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeDeployment + 87, // 119: xyz.block.ftl.schema.v1.ModuleRuntimeBase.create_time:type_name -> google.protobuf.Timestamp + 87, // 120: xyz.block.ftl.schema.v1.ModuleRuntimeDeployment.created_at:type_name -> google.protobuf.Timestamp + 87, // 121: xyz.block.ftl.schema.v1.ModuleRuntimeDeployment.activated_at:type_name -> google.protobuf.Timestamp + 3, // 122: xyz.block.ftl.schema.v1.ModuleRuntimeDeployment.state:type_name -> xyz.block.ftl.schema.v1.ModuleState + 58, // 123: xyz.block.ftl.schema.v1.ModuleRuntimeEvent.base:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeBase + 61, // 124: xyz.block.ftl.schema.v1.ModuleRuntimeEvent.scaling:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeScaling + 59, // 125: xyz.block.ftl.schema.v1.ModuleRuntimeEvent.deployment:type_name -> xyz.block.ftl.schema.v1.ModuleRuntimeDeployment + 63, // 126: xyz.block.ftl.schema.v1.Optional.pos:type_name -> xyz.block.ftl.schema.v1.Position + 76, // 127: xyz.block.ftl.schema.v1.Optional.type:type_name -> xyz.block.ftl.schema.v1.Type + 56, // 128: xyz.block.ftl.schema.v1.ProvisioningCreatedEvent.desired_module:type_name -> xyz.block.ftl.schema.v1.Module + 63, // 129: xyz.block.ftl.schema.v1.Ref.pos:type_name -> xyz.block.ftl.schema.v1.Position + 76, // 130: xyz.block.ftl.schema.v1.Ref.type_parameters:type_name -> xyz.block.ftl.schema.v1.Type + 63, // 131: xyz.block.ftl.schema.v1.Schema.pos:type_name -> xyz.block.ftl.schema.v1.Position + 56, // 132: xyz.block.ftl.schema.v1.Schema.modules:type_name -> xyz.block.ftl.schema.v1.Module + 56, // 133: xyz.block.ftl.schema.v1.SchemaState.modules:type_name -> xyz.block.ftl.schema.v1.Module + 69, // 134: xyz.block.ftl.schema.v1.SchemaState.serialized_changeset:type_name -> xyz.block.ftl.schema.v1.SerializedChangeset + 63, // 135: xyz.block.ftl.schema.v1.Secret.pos:type_name -> xyz.block.ftl.schema.v1.Position + 76, // 136: xyz.block.ftl.schema.v1.Secret.type:type_name -> xyz.block.ftl.schema.v1.Type + 87, // 137: xyz.block.ftl.schema.v1.SerializedChangeset.created_at:type_name -> google.protobuf.Timestamp + 1, // 138: xyz.block.ftl.schema.v1.SerializedChangeset.state:type_name -> xyz.block.ftl.schema.v1.ChangesetState + 63, // 139: xyz.block.ftl.schema.v1.String.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 140: xyz.block.ftl.schema.v1.StringValue.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 141: xyz.block.ftl.schema.v1.Time.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 142: xyz.block.ftl.schema.v1.Topic.pos:type_name -> xyz.block.ftl.schema.v1.Position + 74, // 143: xyz.block.ftl.schema.v1.Topic.runtime:type_name -> xyz.block.ftl.schema.v1.TopicRuntime + 76, // 144: xyz.block.ftl.schema.v1.Topic.event:type_name -> xyz.block.ftl.schema.v1.Type + 38, // 145: xyz.block.ftl.schema.v1.Topic.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata + 74, // 146: xyz.block.ftl.schema.v1.TopicRuntimeEvent.payload:type_name -> xyz.block.ftl.schema.v1.TopicRuntime + 5, // 147: xyz.block.ftl.schema.v1.Type.any:type_name -> xyz.block.ftl.schema.v1.Any + 6, // 148: xyz.block.ftl.schema.v1.Type.array:type_name -> xyz.block.ftl.schema.v1.Array + 7, // 149: xyz.block.ftl.schema.v1.Type.bool:type_name -> xyz.block.ftl.schema.v1.Bool + 8, // 150: xyz.block.ftl.schema.v1.Type.bytes:type_name -> xyz.block.ftl.schema.v1.Bytes + 31, // 151: xyz.block.ftl.schema.v1.Type.float:type_name -> xyz.block.ftl.schema.v1.Float + 35, // 152: xyz.block.ftl.schema.v1.Type.int:type_name -> xyz.block.ftl.schema.v1.Int + 37, // 153: xyz.block.ftl.schema.v1.Type.map:type_name -> xyz.block.ftl.schema.v1.Map + 62, // 154: xyz.block.ftl.schema.v1.Type.optional:type_name -> xyz.block.ftl.schema.v1.Optional + 65, // 155: xyz.block.ftl.schema.v1.Type.ref:type_name -> xyz.block.ftl.schema.v1.Ref + 70, // 156: xyz.block.ftl.schema.v1.Type.string:type_name -> xyz.block.ftl.schema.v1.String + 72, // 157: xyz.block.ftl.schema.v1.Type.time:type_name -> xyz.block.ftl.schema.v1.Time + 80, // 158: xyz.block.ftl.schema.v1.Type.unit:type_name -> xyz.block.ftl.schema.v1.Unit + 63, // 159: xyz.block.ftl.schema.v1.TypeAlias.pos:type_name -> xyz.block.ftl.schema.v1.Position + 76, // 160: xyz.block.ftl.schema.v1.TypeAlias.type:type_name -> xyz.block.ftl.schema.v1.Type + 38, // 161: xyz.block.ftl.schema.v1.TypeAlias.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata + 63, // 162: xyz.block.ftl.schema.v1.TypeParameter.pos:type_name -> xyz.block.ftl.schema.v1.Position + 63, // 163: xyz.block.ftl.schema.v1.TypeValue.pos:type_name -> xyz.block.ftl.schema.v1.Position + 76, // 164: xyz.block.ftl.schema.v1.TypeValue.value:type_name -> xyz.block.ftl.schema.v1.Type + 63, // 165: xyz.block.ftl.schema.v1.Unit.pos:type_name -> xyz.block.ftl.schema.v1.Position + 36, // 166: xyz.block.ftl.schema.v1.Value.int_value:type_name -> xyz.block.ftl.schema.v1.IntValue + 71, // 167: xyz.block.ftl.schema.v1.Value.string_value:type_name -> xyz.block.ftl.schema.v1.StringValue + 79, // 168: xyz.block.ftl.schema.v1.Value.type_value:type_name -> xyz.block.ftl.schema.v1.TypeValue + 63, // 169: xyz.block.ftl.schema.v1.Verb.pos:type_name -> xyz.block.ftl.schema.v1.Position + 76, // 170: xyz.block.ftl.schema.v1.Verb.request:type_name -> xyz.block.ftl.schema.v1.Type + 76, // 171: xyz.block.ftl.schema.v1.Verb.response:type_name -> xyz.block.ftl.schema.v1.Type + 38, // 172: xyz.block.ftl.schema.v1.Verb.metadata:type_name -> xyz.block.ftl.schema.v1.Metadata + 83, // 173: xyz.block.ftl.schema.v1.Verb.runtime:type_name -> xyz.block.ftl.schema.v1.VerbRuntime + 84, // 174: xyz.block.ftl.schema.v1.VerbRuntime.base:type_name -> xyz.block.ftl.schema.v1.VerbRuntimeBase + 86, // 175: xyz.block.ftl.schema.v1.VerbRuntime.subscription:type_name -> xyz.block.ftl.schema.v1.VerbRuntimeSubscription + 87, // 176: xyz.block.ftl.schema.v1.VerbRuntimeBase.create_time:type_name -> google.protobuf.Timestamp + 87, // 177: xyz.block.ftl.schema.v1.VerbRuntimeBase.start_time:type_name -> google.protobuf.Timestamp + 84, // 178: xyz.block.ftl.schema.v1.VerbRuntimeEvent.base:type_name -> xyz.block.ftl.schema.v1.VerbRuntimeBase + 86, // 179: xyz.block.ftl.schema.v1.VerbRuntimeEvent.subscription:type_name -> xyz.block.ftl.schema.v1.VerbRuntimeSubscription + 180, // [180:180] is the sub-list for method output_type + 180, // [180:180] is the sub-list for method input_type + 180, // [180:180] is the sub-list for extension type_name + 180, // [180:180] is the sub-list for extension extendee + 0, // [0:180] is the sub-list for field type_name } func init() { file_xyz_block_ftl_schema_v1_schema_proto_init() } @@ -6834,15 +7489,16 @@ func file_xyz_block_ftl_schema_v1_schema_proto_init() { file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[3].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[4].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[5].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[6].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[7].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[8].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[9].OneofWrappers = []any{ + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[9].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[10].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[11].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[12].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[13].OneofWrappers = []any{ (*DatabaseConnector_AwsiamAuthDatabaseConnector)(nil), (*DatabaseConnector_DsnDatabaseConnector)(nil), } - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[10].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[13].OneofWrappers = []any{ + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[14].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[17].OneofWrappers = []any{ (*Decl_Config)(nil), (*Decl_Data)(nil), (*Decl_Database)(nil), @@ -6852,9 +7508,12 @@ func file_xyz_block_ftl_schema_v1_schema_proto_init() { (*Decl_TypeAlias)(nil), (*Decl_Verb)(nil), } - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[19].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[20].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[21].OneofWrappers = []any{ + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[23].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[24].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[25].OneofWrappers = []any{ + (*Event_ChangesetCommittedEvent)(nil), + (*Event_ChangesetCreatedEvent)(nil), + (*Event_ChangesetFailedEvent)(nil), (*Event_DatabaseRuntimeEvent)(nil), (*Event_DeploymentActivatedEvent)(nil), (*Event_DeploymentCreatedEvent)(nil), @@ -6866,18 +7525,18 @@ func file_xyz_block_ftl_schema_v1_schema_proto_init() { (*Event_TopicRuntimeEvent)(nil), (*Event_VerbRuntimeEvent)(nil), } - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[22].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[23].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[24].OneofWrappers = []any{ + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[26].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[27].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[28].OneofWrappers = []any{ (*IngressPathComponent_IngressPathLiteral)(nil), (*IngressPathComponent_IngressPathParameter)(nil), } - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[25].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[26].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[27].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[28].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[29].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[30].OneofWrappers = []any{ + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[30].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[31].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[32].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[33].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[34].OneofWrappers = []any{ (*Metadata_Alias)(nil), (*Metadata_Artefact)(nil), (*Metadata_Calls)(nil), @@ -6896,10 +7555,6 @@ func file_xyz_block_ftl_schema_v1_schema_proto_init() { (*Metadata_Subscriber)(nil), (*Metadata_TypeMap)(nil), } - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[31].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[32].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[33].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[34].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[35].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[36].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[37].OneofWrappers = []any{} @@ -6918,15 +7573,19 @@ func file_xyz_block_ftl_schema_v1_schema_proto_init() { file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[50].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[51].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[52].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[53].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[54].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[57].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[55].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[56].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[58].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[60].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[61].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[62].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[63].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[64].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[67].OneofWrappers = []any{ + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[66].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[67].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[68].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[69].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[72].OneofWrappers = []any{ (*Type_Any)(nil), (*Type_Array)(nil), (*Type_Bool)(nil), @@ -6940,26 +7599,26 @@ func file_xyz_block_ftl_schema_v1_schema_proto_init() { (*Type_Time)(nil), (*Type_Unit)(nil), } - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[68].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[69].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[70].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[71].OneofWrappers = []any{} - file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[72].OneofWrappers = []any{ - (*Value_IntValue)(nil), - (*Value_StringValue)(nil), - (*Value_TypeValue)(nil), - } file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[73].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[74].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[75].OneofWrappers = []any{} file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[76].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[77].OneofWrappers = []any{ + (*Value_IntValue)(nil), + (*Value_StringValue)(nil), + (*Value_TypeValue)(nil), + } + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[78].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[79].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[80].OneofWrappers = []any{} + file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[81].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xyz_block_ftl_schema_v1_schema_proto_rawDesc, - NumEnums: 2, - NumMessages: 78, + NumEnums: 4, + NumMessages: 83, NumExtensions: 0, NumServices: 0, }, diff --git a/common/protos/xyz/block/ftl/schema/v1/schema.proto b/common/protos/xyz/block/ftl/schema/v1/schema.proto index f7c3819406..d9ebf8a292 100644 --- a/common/protos/xyz/block/ftl/schema/v1/schema.proto +++ b/common/protos/xyz/block/ftl/schema/v1/schema.proto @@ -38,6 +38,37 @@ message Bytes { optional Position pos = 1; } +message Changeset { + string key = 1; + google.protobuf.Timestamp created_at = 2; + repeated Module modules = 3; + ChangesetState state = 4; + optional string error = 5; +} + +message ChangesetCommittedEvent { + string key = 1; +} + +message ChangesetCreatedEvent { + Changeset changeset = 1; +} + +message ChangesetFailedEvent { + string key = 1; + string error = 2; +} + +enum ChangesetState { + CHANGESET_STATE_UNSPECIFIED = 0; + CHANGESET_STATE_PREPARING = 1; + CHANGESET_STATE_PREPARED = 2; + CHANGESET_STATE_CLEANING_UP = 3; + CHANGESET_STATE_COMMITTED = 4; + CHANGESET_STATE_ROLLING_BACK = 5; + CHANGESET_STATE_FAILED = 6; +} + message Config { optional Position pos = 1; repeated string comments = 2; @@ -110,26 +141,31 @@ message DeploymentActivatedEvent { string key = 1; google.protobuf.Timestamp activated_at = 2; int64 min_replicas = 3; + string changeset = 4; } message DeploymentCreatedEvent { string key = 1; Module schema = 2; + string changeset = 3; } message DeploymentDeactivatedEvent { string key = 1; bool module_removed = 2; + string changeset = 3; } message DeploymentReplicasUpdatedEvent { string key = 1; int64 replicas = 2; + string changeset = 3; } message DeploymentSchemaUpdatedEvent { string key = 1; Module schema = 2; + string changeset = 3; } message Enum { @@ -150,6 +186,9 @@ message EnumVariant { message Event { oneof value { + ChangesetCommittedEvent changeset_committed_event = 12; + ChangesetCreatedEvent changeset_created_event = 11; + ChangesetFailedEvent changeset_failed_event = 13; DatabaseRuntimeEvent database_runtime_event = 8; DeploymentActivatedEvent deployment_activated_event = 4; DeploymentCreatedEvent deployment_created_event = 1; @@ -370,20 +409,32 @@ message ModuleRuntimeDeployment { string deployment_key = 2; google.protobuf.Timestamp created_at = 3; optional google.protobuf.Timestamp activated_at = 4; + ModuleState state = 5; } message ModuleRuntimeEvent { - string module = 1; - optional string deployment_key = 2; - optional ModuleRuntimeBase base = 3; - optional ModuleRuntimeScaling scaling = 4; - optional ModuleRuntimeDeployment deployment = 5; + string deployment_key = 1; + optional ModuleRuntimeBase base = 2; + optional ModuleRuntimeScaling scaling = 3; + optional ModuleRuntimeDeployment deployment = 4; } message ModuleRuntimeScaling { int32 min_replicas = 1; } +enum ModuleState { + MODULE_STATE_UNSPECIFIED = 0; + MODULE_STATE_PROVISIONING = 1; + MODULE_STATE_READY = 2; + MODULE_STATE_CANARY = 3; + MODULE_STATE_CANONICAL = 4; + MODULE_STATE_DRAINING = 5; + MODULE_STATE_DE_PROVISIONING = 6; + MODULE_STATE_DELETED = 7; + MODULE_STATE_FAILED = 8; +} + // Optional represents a Type whose value may be optional. message Optional { optional Position pos = 1; @@ -417,6 +468,8 @@ message Schema { message SchemaState { repeated Module modules = 1; repeated string active_deployments = 2; + repeated SerializedChangeset serialized_changeset = 3; + repeated string provisioning = 4; } message Secret { @@ -426,6 +479,15 @@ message Secret { Type type = 4; } +// SerializedChangeset is a temp hack that needs to go away +message SerializedChangeset { + string key = 1; + google.protobuf.Timestamp created_at = 2; + repeated string deployments = 3; + ChangesetState state = 4; + string error = 5; +} + message String { optional Position pos = 1; } diff --git a/common/schema/changeset.go b/common/schema/changeset.go new file mode 100644 index 0000000000..261c1022a9 --- /dev/null +++ b/common/schema/changeset.go @@ -0,0 +1,30 @@ +package schema + +import ( + "time" + + "github.com/block/ftl/internal/key" +) + +type ChangesetState int + +const ( + ChangesetStateUnspecified ChangesetState = iota + ChangesetStatePreparing + ChangesetStatePrepared + ChangesetStateCleaningUp + ChangesetStateCommitted + ChangesetStateRollingBack + ChangesetStateFailed +) + +//protobuf:export +type Changeset struct { + Key key.Changeset `protobuf:"1"` + CreatedAt time.Time `protobuf:"2"` + Modules []*Module `protobuf:"3"` + + State ChangesetState `protobuf:"4"` + // Error is present if state is failed. + Error string `protobuf:"5,optional"` +} diff --git a/common/schema/events.go b/common/schema/events.go index 8b83b864d0..37b5a29722 100644 --- a/common/schema/events.go +++ b/common/schema/events.go @@ -32,8 +32,9 @@ var _ Event = (*ModuleRuntimeEvent)(nil) //protobuf:1 type DeploymentCreatedEvent struct { - Key key.Deployment `protobuf:"1"` - Schema *Module `protobuf:"2"` + Key key.Deployment `protobuf:"1"` + Schema *Module `protobuf:"2"` + Changeset *key.Changeset `protobuf:"3"` } func (r *DeploymentCreatedEvent) event() {} @@ -44,8 +45,9 @@ func (r *DeploymentCreatedEvent) Validate() error { //protobuf:2 type DeploymentSchemaUpdatedEvent struct { - Key key.Deployment `protobuf:"1"` - Schema *Module `protobuf:"2"` + Key key.Deployment `protobuf:"1"` + Schema *Module `protobuf:"2"` + Changeset *key.Changeset `protobuf:"3"` } func (r *DeploymentSchemaUpdatedEvent) event() {} @@ -56,8 +58,9 @@ func (r *DeploymentSchemaUpdatedEvent) Validate() error { //protobuf:3 type DeploymentReplicasUpdatedEvent struct { - Key key.Deployment `protobuf:"1"` - Replicas int `protobuf:"2"` + Key key.Deployment `protobuf:"1"` + Replicas int `protobuf:"2"` + Changeset *key.Changeset `protobuf:"3"` } func (r *DeploymentReplicasUpdatedEvent) event() {} @@ -71,6 +74,7 @@ type DeploymentActivatedEvent struct { Key key.Deployment `protobuf:"1"` ActivatedAt time.Time `protobuf:"2"` MinReplicas int `protobuf:"3"` + Changeset *key.Changeset `protobuf:"4"` } func (r *DeploymentActivatedEvent) event() {} @@ -83,6 +87,7 @@ func (r *DeploymentActivatedEvent) Validate() error { type DeploymentDeactivatedEvent struct { Key key.Deployment `protobuf:"1"` ModuleRemoved bool `protobuf:"2"` + Changeset *key.Changeset `protobuf:"3"` } func (r *DeploymentDeactivatedEvent) event() {} @@ -133,13 +138,10 @@ func (e *DatabaseRuntimeEvent) Validate() error { //protobuf:9 type ModuleRuntimeEvent struct { - Module string `protobuf:"1"` - // None if updating at provisioning - DeploymentKey optional.Option[string] `protobuf:"2"` - - Base optional.Option[ModuleRuntimeBase] `protobuf:"3"` - Scaling optional.Option[ModuleRuntimeScaling] `protobuf:"4"` - Deployment optional.Option[ModuleRuntimeDeployment] `protobuf:"5"` + DeploymentKey key.Deployment `protobuf:"1"` + Base optional.Option[ModuleRuntimeBase] `protobuf:"2"` + Scaling optional.Option[ModuleRuntimeScaling] `protobuf:"3"` + Deployment optional.Option[ModuleRuntimeDeployment] `protobuf:"4"` } func (e *ModuleRuntimeEvent) event() {} @@ -158,3 +160,37 @@ func (e *ProvisioningCreatedEvent) event() {} func (e *ProvisioningCreatedEvent) Validate() error { return nil } + +//protobuf:11 +type ChangesetCreatedEvent struct { + Changeset *Changeset `protobuf:"1"` +} + +func (e *ChangesetCreatedEvent) event() {} + +func (e *ChangesetCreatedEvent) Validate() error { + return nil +} + +//protobuf:12 +type ChangesetCommittedEvent struct { + Key key.Changeset `protobuf:"1"` +} + +func (e *ChangesetCommittedEvent) event() {} + +func (e *ChangesetCommittedEvent) Validate() error { + return nil +} + +//protobuf:13 +type ChangesetFailedEvent struct { + Key key.Changeset `protobuf:"1"` + Error string `protobuf:"2"` +} + +func (e *ChangesetFailedEvent) event() {} + +func (e *ChangesetFailedEvent) Validate() error { + return nil +} diff --git a/common/schema/go2proto.to.go b/common/schema/go2proto.to.go index eb717a7d7a..ceca714fb8 100644 --- a/common/schema/go2proto.to.go +++ b/common/schema/go2proto.to.go @@ -277,6 +277,128 @@ func BytesFromProto(v *destpb.Bytes) (out *Bytes, err error) { return out, nil } +func (x *Changeset) ToProto() *destpb.Changeset { + if x == nil { + return nil + } + return &destpb.Changeset{ + Key: orZero(ptr(string(protoMust(x.Key.MarshalText())))), + CreatedAt: timestamppb.New(x.CreatedAt), + Modules: sliceMap(x.Modules, func(v *Module) *destpb.Module { return v.ToProto() }), + State: orZero(ptr(x.State.ToProto())), + Error: ptr(string(x.Error)), + } +} + +func ChangesetFromProto(v *destpb.Changeset) (out *Changeset, err error) { + if v == nil { + return nil, nil + } + + out = &Changeset{} + if out.Key, err = orZeroR(unmarshallText([]byte(v.Key), &out.Key)).Result(); err != nil { + return nil, fmt.Errorf("Key: %w", err) + } + if out.CreatedAt, err = orZeroR(result.From(setNil(ptr(v.CreatedAt.AsTime()), v.CreatedAt), nil)).Result(); err != nil { + return nil, fmt.Errorf("CreatedAt: %w", err) + } + if out.Modules, err = sliceMapR(v.Modules, func(v *destpb.Module) result.Result[*Module] { return result.From(ModuleFromProto(v)) }).Result(); err != nil { + return nil, fmt.Errorf("Modules: %w", err) + } + if out.State, err = orZeroR(ptrR(result.From(ChangesetStateFromProto(v.State)))).Result(); err != nil { + return nil, fmt.Errorf("State: %w", err) + } + if out.Error, err = orZeroR(result.From(setNil(ptr(string(orZero(v.Error))), v.Error), nil)).Result(); err != nil { + return nil, fmt.Errorf("Error: %w", err) + } + return out, nil +} + +func (x *ChangesetCommittedEvent) ToProto() *destpb.ChangesetCommittedEvent { + if x == nil { + return nil + } + return &destpb.ChangesetCommittedEvent{ + Key: orZero(ptr(string(protoMust(x.Key.MarshalText())))), + } +} + +func ChangesetCommittedEventFromProto(v *destpb.ChangesetCommittedEvent) (out *ChangesetCommittedEvent, err error) { + if v == nil { + return nil, nil + } + + out = &ChangesetCommittedEvent{} + if out.Key, err = orZeroR(unmarshallText([]byte(v.Key), &out.Key)).Result(); err != nil { + return nil, fmt.Errorf("Key: %w", err) + } + if err := out.Validate(); err != nil { + return nil, err + } + return out, nil +} + +func (x *ChangesetCreatedEvent) ToProto() *destpb.ChangesetCreatedEvent { + if x == nil { + return nil + } + return &destpb.ChangesetCreatedEvent{ + Changeset: x.Changeset.ToProto(), + } +} + +func ChangesetCreatedEventFromProto(v *destpb.ChangesetCreatedEvent) (out *ChangesetCreatedEvent, err error) { + if v == nil { + return nil, nil + } + + out = &ChangesetCreatedEvent{} + if out.Changeset, err = result.From(ChangesetFromProto(v.Changeset)).Result(); err != nil { + return nil, fmt.Errorf("Changeset: %w", err) + } + if err := out.Validate(); err != nil { + return nil, err + } + return out, nil +} + +func (x *ChangesetFailedEvent) ToProto() *destpb.ChangesetFailedEvent { + if x == nil { + return nil + } + return &destpb.ChangesetFailedEvent{ + Key: orZero(ptr(string(protoMust(x.Key.MarshalText())))), + Error: orZero(ptr(string(x.Error))), + } +} + +func ChangesetFailedEventFromProto(v *destpb.ChangesetFailedEvent) (out *ChangesetFailedEvent, err error) { + if v == nil { + return nil, nil + } + + out = &ChangesetFailedEvent{} + if out.Key, err = orZeroR(unmarshallText([]byte(v.Key), &out.Key)).Result(); err != nil { + return nil, fmt.Errorf("Key: %w", err) + } + if out.Error, err = orZeroR(result.From(ptr(string(v.Error)), nil)).Result(); err != nil { + return nil, fmt.Errorf("Error: %w", err) + } + if err := out.Validate(); err != nil { + return nil, err + } + return out, nil +} + +func (x ChangesetState) ToProto() destpb.ChangesetState { + return destpb.ChangesetState(x) +} + +func ChangesetStateFromProto(v destpb.ChangesetState) (ChangesetState, error) { + // TODO: Check if the value is valid. + return ChangesetState(v), nil +} + func (x *Config) ToProto() *destpb.Config { if x == nil { return nil @@ -531,6 +653,9 @@ func DatabaseRuntimeEventFromProto(v *destpb.DatabaseRuntimeEvent) (out *Databas if out.Connections, err = result.From(DatabaseRuntimeConnectionsFromProto(v.Connections)).Result(); err != nil { return nil, fmt.Errorf("Connections: %w", err) } + if err := out.Validate(); err != nil { + return nil, err + } return out, nil } @@ -610,6 +735,7 @@ func (x *DeploymentActivatedEvent) ToProto() *destpb.DeploymentActivatedEvent { Key: orZero(ptr(string(protoMust(x.Key.MarshalText())))), ActivatedAt: timestamppb.New(x.ActivatedAt), MinReplicas: orZero(ptr(int64(x.MinReplicas))), + Changeset: orZero(ptr(string(protoMust(x.Changeset.MarshalText())))), } } @@ -628,6 +754,12 @@ func DeploymentActivatedEventFromProto(v *destpb.DeploymentActivatedEvent) (out if out.MinReplicas, err = orZeroR(result.From(ptr(int(v.MinReplicas)), nil)).Result(); err != nil { return nil, fmt.Errorf("MinReplicas: %w", err) } + if out.Changeset, err = unmarshallText([]byte(v.Changeset), out.Changeset).Result(); err != nil { + return nil, fmt.Errorf("Changeset: %w", err) + } + if err := out.Validate(); err != nil { + return nil, err + } return out, nil } @@ -636,8 +768,9 @@ func (x *DeploymentCreatedEvent) ToProto() *destpb.DeploymentCreatedEvent { return nil } return &destpb.DeploymentCreatedEvent{ - Key: orZero(ptr(string(protoMust(x.Key.MarshalText())))), - Schema: x.Schema.ToProto(), + Key: orZero(ptr(string(protoMust(x.Key.MarshalText())))), + Schema: x.Schema.ToProto(), + Changeset: orZero(ptr(string(protoMust(x.Changeset.MarshalText())))), } } @@ -653,6 +786,12 @@ func DeploymentCreatedEventFromProto(v *destpb.DeploymentCreatedEvent) (out *Dep if out.Schema, err = result.From(ModuleFromProto(v.Schema)).Result(); err != nil { return nil, fmt.Errorf("Schema: %w", err) } + if out.Changeset, err = unmarshallText([]byte(v.Changeset), out.Changeset).Result(); err != nil { + return nil, fmt.Errorf("Changeset: %w", err) + } + if err := out.Validate(); err != nil { + return nil, err + } return out, nil } @@ -663,6 +802,7 @@ func (x *DeploymentDeactivatedEvent) ToProto() *destpb.DeploymentDeactivatedEven return &destpb.DeploymentDeactivatedEvent{ Key: orZero(ptr(string(protoMust(x.Key.MarshalText())))), ModuleRemoved: orZero(ptr(bool(x.ModuleRemoved))), + Changeset: orZero(ptr(string(protoMust(x.Changeset.MarshalText())))), } } @@ -678,6 +818,12 @@ func DeploymentDeactivatedEventFromProto(v *destpb.DeploymentDeactivatedEvent) ( if out.ModuleRemoved, err = orZeroR(result.From(ptr(bool(v.ModuleRemoved)), nil)).Result(); err != nil { return nil, fmt.Errorf("ModuleRemoved: %w", err) } + if out.Changeset, err = unmarshallText([]byte(v.Changeset), out.Changeset).Result(); err != nil { + return nil, fmt.Errorf("Changeset: %w", err) + } + if err := out.Validate(); err != nil { + return nil, err + } return out, nil } @@ -686,8 +832,9 @@ func (x *DeploymentReplicasUpdatedEvent) ToProto() *destpb.DeploymentReplicasUpd return nil } return &destpb.DeploymentReplicasUpdatedEvent{ - Key: orZero(ptr(string(protoMust(x.Key.MarshalText())))), - Replicas: orZero(ptr(int64(x.Replicas))), + Key: orZero(ptr(string(protoMust(x.Key.MarshalText())))), + Replicas: orZero(ptr(int64(x.Replicas))), + Changeset: orZero(ptr(string(protoMust(x.Changeset.MarshalText())))), } } @@ -703,6 +850,12 @@ func DeploymentReplicasUpdatedEventFromProto(v *destpb.DeploymentReplicasUpdated if out.Replicas, err = orZeroR(result.From(ptr(int(v.Replicas)), nil)).Result(); err != nil { return nil, fmt.Errorf("Replicas: %w", err) } + if out.Changeset, err = unmarshallText([]byte(v.Changeset), out.Changeset).Result(); err != nil { + return nil, fmt.Errorf("Changeset: %w", err) + } + if err := out.Validate(); err != nil { + return nil, err + } return out, nil } @@ -711,8 +864,9 @@ func (x *DeploymentSchemaUpdatedEvent) ToProto() *destpb.DeploymentSchemaUpdated return nil } return &destpb.DeploymentSchemaUpdatedEvent{ - Key: orZero(ptr(string(protoMust(x.Key.MarshalText())))), - Schema: x.Schema.ToProto(), + Key: orZero(ptr(string(protoMust(x.Key.MarshalText())))), + Schema: x.Schema.ToProto(), + Changeset: orZero(ptr(string(protoMust(x.Changeset.MarshalText())))), } } @@ -728,6 +882,12 @@ func DeploymentSchemaUpdatedEventFromProto(v *destpb.DeploymentSchemaUpdatedEven if out.Schema, err = result.From(ModuleFromProto(v.Schema)).Result(); err != nil { return nil, fmt.Errorf("Schema: %w", err) } + if out.Changeset, err = unmarshallText([]byte(v.Changeset), out.Changeset).Result(); err != nil { + return nil, fmt.Errorf("Changeset: %w", err) + } + if err := out.Validate(); err != nil { + return nil, err + } return out, nil } @@ -810,6 +970,18 @@ func EventToProto(value Event) *destpb.Event { switch value := value.(type) { case nil: return nil + case *ChangesetCommittedEvent: + return &destpb.Event{ + Value: &destpb.Event_ChangesetCommittedEvent{value.ToProto()}, + } + case *ChangesetCreatedEvent: + return &destpb.Event{ + Value: &destpb.Event_ChangesetCreatedEvent{value.ToProto()}, + } + case *ChangesetFailedEvent: + return &destpb.Event{ + Value: &destpb.Event_ChangesetFailedEvent{value.ToProto()}, + } case *DatabaseRuntimeEvent: return &destpb.Event{ Value: &destpb.Event_DatabaseRuntimeEvent{value.ToProto()}, @@ -860,6 +1032,12 @@ func EventFromProto(v *destpb.Event) (Event, error) { return nil, nil } switch v.Value.(type) { + case *destpb.Event_ChangesetCommittedEvent: + return ChangesetCommittedEventFromProto(v.GetChangesetCommittedEvent()) + case *destpb.Event_ChangesetCreatedEvent: + return ChangesetCreatedEventFromProto(v.GetChangesetCreatedEvent()) + case *destpb.Event_ChangesetFailedEvent: + return ChangesetFailedEventFromProto(v.GetChangesetFailedEvent()) case *destpb.Event_DatabaseRuntimeEvent: return DatabaseRuntimeEventFromProto(v.GetDatabaseRuntimeEvent()) case *destpb.Event_DeploymentActivatedEvent: @@ -1841,6 +2019,7 @@ func (x *ModuleRuntimeDeployment) ToProto() *destpb.ModuleRuntimeDeployment { DeploymentKey: orZero(ptr(string(protoMust(x.DeploymentKey.MarshalText())))), CreatedAt: timestamppb.New(x.CreatedAt), ActivatedAt: setNil(timestamppb.New(orZero(x.ActivatedAt.Ptr())), x.ActivatedAt.Ptr()), + State: orZero(ptr(x.State.ToProto())), } } @@ -1862,6 +2041,9 @@ func ModuleRuntimeDeploymentFromProto(v *destpb.ModuleRuntimeDeployment) (out *M if out.ActivatedAt, err = optionalR(result.From(setNil(ptr(v.ActivatedAt.AsTime()), v.ActivatedAt), nil)).Result(); err != nil { return nil, fmt.Errorf("ActivatedAt: %w", err) } + if out.State, err = orZeroR(ptrR(result.From(ModuleStateFromProto(v.State)))).Result(); err != nil { + return nil, fmt.Errorf("State: %w", err) + } return out, nil } @@ -1870,8 +2052,7 @@ func (x *ModuleRuntimeEvent) ToProto() *destpb.ModuleRuntimeEvent { return nil } return &destpb.ModuleRuntimeEvent{ - Module: orZero(ptr(string(x.Module))), - DeploymentKey: setNil(ptr(string(orZero(x.DeploymentKey.Ptr()))), x.DeploymentKey.Ptr()), + DeploymentKey: orZero(ptr(string(protoMust(x.DeploymentKey.MarshalText())))), Base: x.Base.Ptr().ToProto(), Scaling: x.Scaling.Ptr().ToProto(), Deployment: x.Deployment.Ptr().ToProto(), @@ -1884,10 +2065,7 @@ func ModuleRuntimeEventFromProto(v *destpb.ModuleRuntimeEvent) (out *ModuleRunti } out = &ModuleRuntimeEvent{} - if out.Module, err = orZeroR(result.From(ptr(string(v.Module)), nil)).Result(); err != nil { - return nil, fmt.Errorf("Module: %w", err) - } - if out.DeploymentKey, err = optionalR(result.From(setNil(ptr(string(orZero(v.DeploymentKey))), v.DeploymentKey), nil)).Result(); err != nil { + if out.DeploymentKey, err = orZeroR(unmarshallText([]byte(v.DeploymentKey), &out.DeploymentKey)).Result(); err != nil { return nil, fmt.Errorf("DeploymentKey: %w", err) } if out.Base, err = optionalR(result.From(ModuleRuntimeBaseFromProto(v.Base))).Result(); err != nil { @@ -1899,6 +2077,9 @@ func ModuleRuntimeEventFromProto(v *destpb.ModuleRuntimeEvent) (out *ModuleRunti if out.Deployment, err = optionalR(result.From(ModuleRuntimeDeploymentFromProto(v.Deployment))).Result(); err != nil { return nil, fmt.Errorf("Deployment: %w", err) } + if err := out.Validate(); err != nil { + return nil, err + } return out, nil } @@ -1923,6 +2104,15 @@ func ModuleRuntimeScalingFromProto(v *destpb.ModuleRuntimeScaling) (out *ModuleR return out, nil } +func (x ModuleState) ToProto() destpb.ModuleState { + return destpb.ModuleState(x) +} + +func ModuleStateFromProto(v destpb.ModuleState) (ModuleState, error) { + // TODO: Check if the value is valid. + return ModuleState(v), nil +} + func (x *Optional) ToProto() *destpb.Optional { if x == nil { return nil @@ -1995,6 +2185,9 @@ func ProvisioningCreatedEventFromProto(v *destpb.ProvisioningCreatedEvent) (out if out.DesiredModule, err = result.From(ModuleFromProto(v.DesiredModule)).Result(); err != nil { return nil, fmt.Errorf("DesiredModule: %w", err) } + if err := out.Validate(); err != nil { + return nil, err + } return out, nil } @@ -2061,8 +2254,10 @@ func (x *SchemaState) ToProto() *destpb.SchemaState { return nil } return &destpb.SchemaState{ - Modules: sliceMap(x.Modules, func(v *Module) *destpb.Module { return v.ToProto() }), - ActiveDeployments: sliceMap(x.ActiveDeployments, func(v string) string { return orZero(ptr(string(v))) }), + Modules: sliceMap(x.Modules, func(v *Module) *destpb.Module { return v.ToProto() }), + ActiveDeployments: sliceMap(x.ActiveDeployments, func(v string) string { return orZero(ptr(string(v))) }), + SerializedChangeset: sliceMap(x.SerializedChangeset, func(v *SerializedChangeset) *destpb.SerializedChangeset { return v.ToProto() }), + Provisioning: sliceMap(x.Provisioning, func(v string) string { return orZero(ptr(string(v))) }), } } @@ -2078,6 +2273,14 @@ func SchemaStateFromProto(v *destpb.SchemaState) (out *SchemaState, err error) { if out.ActiveDeployments, err = sliceMapR(v.ActiveDeployments, func(v string) result.Result[string] { return orZeroR(result.From(ptr(string(v)), nil)) }).Result(); err != nil { return nil, fmt.Errorf("ActiveDeployments: %w", err) } + if out.SerializedChangeset, err = sliceMapR(v.SerializedChangeset, func(v *destpb.SerializedChangeset) result.Result[*SerializedChangeset] { + return result.From(SerializedChangesetFromProto(v)) + }).Result(); err != nil { + return nil, fmt.Errorf("SerializedChangeset: %w", err) + } + if out.Provisioning, err = sliceMapR(v.Provisioning, func(v string) result.Result[string] { return orZeroR(result.From(ptr(string(v)), nil)) }).Result(); err != nil { + return nil, fmt.Errorf("Provisioning: %w", err) + } return out, nil } @@ -2114,6 +2317,43 @@ func SecretFromProto(v *destpb.Secret) (out *Secret, err error) { return out, nil } +func (x *SerializedChangeset) ToProto() *destpb.SerializedChangeset { + if x == nil { + return nil + } + return &destpb.SerializedChangeset{ + Key: orZero(ptr(string(x.Key))), + CreatedAt: timestamppb.New(x.CreatedAt), + Deployments: sliceMap(x.Deployments, func(v string) string { return orZero(ptr(string(v))) }), + State: orZero(ptr(x.State.ToProto())), + Error: orZero(ptr(string(x.Error))), + } +} + +func SerializedChangesetFromProto(v *destpb.SerializedChangeset) (out *SerializedChangeset, err error) { + if v == nil { + return nil, nil + } + + out = &SerializedChangeset{} + if out.Key, err = orZeroR(result.From(ptr(string(v.Key)), nil)).Result(); err != nil { + return nil, fmt.Errorf("Key: %w", err) + } + if out.CreatedAt, err = orZeroR(result.From(setNil(ptr(v.CreatedAt.AsTime()), v.CreatedAt), nil)).Result(); err != nil { + return nil, fmt.Errorf("CreatedAt: %w", err) + } + if out.Deployments, err = sliceMapR(v.Deployments, func(v string) result.Result[string] { return orZeroR(result.From(ptr(string(v)), nil)) }).Result(); err != nil { + return nil, fmt.Errorf("Deployments: %w", err) + } + if out.State, err = orZeroR(ptrR(result.From(ChangesetStateFromProto(v.State)))).Result(); err != nil { + return nil, fmt.Errorf("State: %w", err) + } + if out.Error, err = orZeroR(result.From(ptr(string(v.Error)), nil)).Result(); err != nil { + return nil, fmt.Errorf("Error: %w", err) + } + return out, nil +} + func (x *String) ToProto() *destpb.String { if x == nil { return nil @@ -2279,6 +2519,9 @@ func TopicRuntimeEventFromProto(v *destpb.TopicRuntimeEvent) (out *TopicRuntimeE if out.Payload, err = result.From(TopicRuntimeFromProto(v.Payload)).Result(); err != nil { return nil, fmt.Errorf("Payload: %w", err) } + if err := out.Validate(); err != nil { + return nil, err + } return out, nil } @@ -2657,6 +2900,9 @@ func VerbRuntimeEventFromProto(v *destpb.VerbRuntimeEvent) (out *VerbRuntimeEven if out.Subscription, err = optionalR(result.From(VerbRuntimeSubscriptionFromProto(v.Subscription))).Result(); err != nil { return nil, fmt.Errorf("Subscription: %w", err) } + if err := out.Validate(); err != nil { + return nil, err + } return out, nil } diff --git a/common/schema/module.go b/common/schema/module.go index 2a8b369cdc..2c8e594c2b 100644 --- a/common/schema/module.go +++ b/common/schema/module.go @@ -67,10 +67,6 @@ func (m *Module) ResourceID() string { func (m *Module) GetProvisioned() ResourceSet { return ResourceSet{ - { - Kind: ResourceTypeModule, - Config: struct{}{}, - }, { Kind: ResourceTypeRunner, Config: struct{}{}, diff --git a/common/schema/moduleruntime.go b/common/schema/moduleruntime.go index ae63bbfb51..717e9496b8 100644 --- a/common/schema/moduleruntime.go +++ b/common/schema/moduleruntime.go @@ -8,6 +8,20 @@ import ( "github.com/block/ftl/internal/key" ) +type ModuleState int + +const ( + ModuleStateUnspecified ModuleState = iota + ModuleStateProvisioning + ModuleStateReady + ModuleStateCanary + ModuleStateCanonical + ModuleStateDraining + ModuleStateDeProvisioning + ModuleStateDeleted + ModuleStateFailed +) + // ModuleRuntime is runtime configuration for a module that can be dynamically updated. type ModuleRuntime struct { Base ModuleRuntimeBase `protobuf:"1"` // Base is always present. @@ -35,6 +49,7 @@ type ModuleRuntimeDeployment struct { DeploymentKey key.Deployment `protobuf:"2"` CreatedAt time.Time `protobuf:"3"` ActivatedAt optional.Option[time.Time] `protobuf:"4"` + State ModuleState `protobuf:"5"` } func (m *ModuleRuntime) GetScaling() *ModuleRuntimeScaling { diff --git a/common/schema/provisioned.go b/common/schema/provisioned.go index 31f2d693da..596bdd1aaf 100644 --- a/common/schema/provisioned.go +++ b/common/schema/provisioned.go @@ -16,7 +16,6 @@ const ( ResourceTypeUnknown ResourceType = "unknown" ResourceTypePostgres ResourceType = "postgres" ResourceTypeMysql ResourceType = "mysql" - ResourceTypeModule ResourceType = "module" ResourceTypeSQLMigration ResourceType = "sql-migration" ResourceTypeTopic ResourceType = "topic" ResourceTypeSubscription ResourceType = "subscription" diff --git a/common/schema/schema.go b/common/schema/schema.go index 069d728cc8..9a6d1c1939 100644 --- a/common/schema/schema.go +++ b/common/schema/schema.go @@ -9,6 +9,7 @@ import ( "fmt" "reflect" "strings" + "time" "github.com/alecthomas/types/optional" @@ -279,6 +280,19 @@ func ValidatedModuleFromProto(v *schemapb.Module) (*Module, error) { // //protobuf:export type SchemaState struct { - Modules []*Module `protobuf:"1"` - ActiveDeployments []string `protobuf:"2"` + Modules []*Module `protobuf:"1"` + ActiveDeployments []string `protobuf:"2"` + SerializedChangeset []*SerializedChangeset `protobuf:"3"` + Provisioning []string `protobuf:"4"` +} + +// SerializedChangeset is a temp hack that needs to go away +// +//protobuf:export +type SerializedChangeset struct { + Key string `protobuf:"1"` + CreatedAt time.Time `protobuf:"2"` + Deployments []string `protobuf:"3"` + State ChangesetState `protobuf:"4"` + Error string `protobuf:"5"` } diff --git a/examples/go/cron/cron.go b/examples/go/cron/cron.go index 1c10eee789..6cf88d0522 100644 --- a/examples/go/cron/cron.go +++ b/examples/go/cron/cron.go @@ -8,12 +8,12 @@ import ( //ftl:cron 30s func ThirtySeconds(ctx context.Context) error { - ftl.LoggerFromContext(ctx).Debugf("Frequent cron job triggered.") + ftl.LoggerFromContext(ctx).Infof("Frequent cron job triggered.") return nil } //ftl:cron 0 * * * * func Hourly(ctx context.Context) error { - ftl.LoggerFromContext(ctx).Debugf("Hourly cron job triggered.") + ftl.LoggerFromContext(ctx).Infof("Hourly cron job triggered.") return nil } diff --git a/frontend/console/e2e/cron.spec.ts b/frontend/console/e2e/cron.spec.ts index 1b7643cba9..a03c71f7f1 100644 --- a/frontend/console/e2e/cron.spec.ts +++ b/frontend/console/e2e/cron.spec.ts @@ -1,5 +1,5 @@ import { expect, test } from '@playwright/test' -import { navigateToDecl, pressShortcut } from './helpers' +import { navigateToDecl, pressShortcut, setVerbRequestBody } from './helpers' test('shows cron verb form', async ({ page }) => { await navigateToDecl(page, 'cron', 'thirtySeconds') @@ -14,6 +14,7 @@ test('shows cron verb form', async ({ page }) => { test('send cron request', async ({ page }) => { await navigateToDecl(page, 'cron', 'thirtySeconds') + await setVerbRequestBody(page, '{}') await page.getByRole('button', { name: 'Send' }).click() const responseEditor = page.locator('#response-editor .cm-content[role="textbox"]') @@ -28,6 +29,7 @@ test('send cron request', async ({ page }) => { test('submit cron form using ⌘+⏎ shortcut', async ({ page }) => { await navigateToDecl(page, 'cron', 'thirtySeconds') + await setVerbRequestBody(page, '{}') await pressShortcut(page, 'Enter') const responseEditor = page.locator('#response-editor .cm-content[role="textbox"]') diff --git a/frontend/console/e2e/global-setup.ts b/frontend/console/e2e/global-setup.ts index 06a20ec6f5..79459c8c40 100644 --- a/frontend/console/e2e/global-setup.ts +++ b/frontend/console/e2e/global-setup.ts @@ -8,19 +8,25 @@ const globalSetup = async (config: FullConfig) => { const page = await context.newPage() await page.goto('http://localhost:8899/modules') - console.log('Waiting for modules to load...') + console.log('Waiting for modules to be ready...') const moduleNames = ['time', 'echo', 'cron', 'http', 'pubsub'] await page.waitForFunction( (modules) => { - const loadedModules = modules.filter((module) => document.querySelector(`li#module-tree-module-${module}`) !== null) - console.log('Loaded modules:', loadedModules.join(', ')) - return loadedModules.length === modules.length + const readyModules = modules.filter((module) => { + const moduleElement = document.querySelector(`li#module-tree-module-${module}`) + if (!moduleElement) return false + + const greenDot = moduleElement.querySelector('.bg-green-400') + return greenDot !== null + }) + console.log('Ready modules:', readyModules.join(', ')) + return readyModules.length === modules.length }, moduleNames, { timeout: 240000 }, ) - console.log('Modules loaded!') + console.log('All modules are ready!') await browser.close() } diff --git a/frontend/console/src/protos/xyz/block/ftl/provisioner/v1beta1/service_connect.ts b/frontend/console/src/protos/xyz/block/ftl/provisioner/v1beta1/service_connect.ts index 11d72bf5a2..d925831b4a 100644 --- a/frontend/console/src/protos/xyz/block/ftl/provisioner/v1beta1/service_connect.ts +++ b/frontend/console/src/protos/xyz/block/ftl/provisioner/v1beta1/service_connect.ts @@ -5,7 +5,7 @@ import { PingRequest, PingResponse } from "../../v1/ftl_pb.js"; import { MethodIdempotency, MethodKind } from "@bufbuild/protobuf"; -import { CreateDeploymentRequest, CreateDeploymentResponse, GetArtefactDiffsRequest, GetArtefactDiffsResponse, ReplaceDeployRequest, ReplaceDeployResponse, StatusRequest, StatusResponse, UpdateDeployRequest, UpdateDeployResponse, UploadArtefactRequest, UploadArtefactResponse } from "../../v1/controller_pb.js"; +import { GetArtefactDiffsRequest, GetArtefactDiffsResponse, StatusRequest, StatusResponse, UpdateDeployRequest, UpdateDeployResponse, UploadArtefactRequest, UploadArtefactResponse } from "../../v1/controller_pb.js"; /** * @generated from service xyz.block.ftl.provisioner.v1beta1.ProvisionerService @@ -50,15 +50,6 @@ export const ProvisionerService = { O: UploadArtefactResponse, kind: MethodKind.Unary, }, - /** - * @generated from rpc xyz.block.ftl.provisioner.v1beta1.ProvisionerService.CreateDeployment - */ - createDeployment: { - name: "CreateDeployment", - I: CreateDeploymentRequest, - O: CreateDeploymentResponse, - kind: MethodKind.Unary, - }, /** * @generated from rpc xyz.block.ftl.provisioner.v1beta1.ProvisionerService.UpdateDeploy */ @@ -68,15 +59,6 @@ export const ProvisionerService = { O: UpdateDeployResponse, kind: MethodKind.Unary, }, - /** - * @generated from rpc xyz.block.ftl.provisioner.v1beta1.ProvisionerService.ReplaceDeploy - */ - replaceDeploy: { - name: "ReplaceDeploy", - I: ReplaceDeployRequest, - O: ReplaceDeployResponse, - kind: MethodKind.Unary, - }, } } as const; diff --git a/frontend/console/src/protos/xyz/block/ftl/schema/v1/schema_pb.ts b/frontend/console/src/protos/xyz/block/ftl/schema/v1/schema_pb.ts index 7a597f2fe9..7a89128a83 100644 --- a/frontend/console/src/protos/xyz/block/ftl/schema/v1/schema_pb.ts +++ b/frontend/console/src/protos/xyz/block/ftl/schema/v1/schema_pb.ts @@ -30,6 +30,56 @@ proto3.util.setEnumType(AliasKind, "xyz.block.ftl.schema.v1.AliasKind", [ { no: 1, name: "ALIAS_KIND_JSON" }, ]); +/** + * @generated from enum xyz.block.ftl.schema.v1.ChangesetState + */ +export enum ChangesetState { + /** + * @generated from enum value: CHANGESET_STATE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: CHANGESET_STATE_PREPARING = 1; + */ + PREPARING = 1, + + /** + * @generated from enum value: CHANGESET_STATE_PREPARED = 2; + */ + PREPARED = 2, + + /** + * @generated from enum value: CHANGESET_STATE_CLEANING_UP = 3; + */ + CLEANING_UP = 3, + + /** + * @generated from enum value: CHANGESET_STATE_COMMITTED = 4; + */ + COMMITTED = 4, + + /** + * @generated from enum value: CHANGESET_STATE_ROLLING_BACK = 5; + */ + ROLLING_BACK = 5, + + /** + * @generated from enum value: CHANGESET_STATE_FAILED = 6; + */ + FAILED = 6, +} +// Retrieve enum metadata with: proto3.getEnumType(ChangesetState) +proto3.util.setEnumType(ChangesetState, "xyz.block.ftl.schema.v1.ChangesetState", [ + { no: 0, name: "CHANGESET_STATE_UNSPECIFIED" }, + { no: 1, name: "CHANGESET_STATE_PREPARING" }, + { no: 2, name: "CHANGESET_STATE_PREPARED" }, + { no: 3, name: "CHANGESET_STATE_CLEANING_UP" }, + { no: 4, name: "CHANGESET_STATE_COMMITTED" }, + { no: 5, name: "CHANGESET_STATE_ROLLING_BACK" }, + { no: 6, name: "CHANGESET_STATE_FAILED" }, +]); + /** * @generated from enum xyz.block.ftl.schema.v1.FromOffset */ @@ -56,6 +106,68 @@ proto3.util.setEnumType(FromOffset, "xyz.block.ftl.schema.v1.FromOffset", [ { no: 2, name: "FROM_OFFSET_LATEST" }, ]); +/** + * @generated from enum xyz.block.ftl.schema.v1.ModuleState + */ +export enum ModuleState { + /** + * @generated from enum value: MODULE_STATE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: MODULE_STATE_PROVISIONING = 1; + */ + PROVISIONING = 1, + + /** + * @generated from enum value: MODULE_STATE_READY = 2; + */ + READY = 2, + + /** + * @generated from enum value: MODULE_STATE_CANARY = 3; + */ + CANARY = 3, + + /** + * @generated from enum value: MODULE_STATE_CANONICAL = 4; + */ + CANONICAL = 4, + + /** + * @generated from enum value: MODULE_STATE_DRAINING = 5; + */ + DRAINING = 5, + + /** + * @generated from enum value: MODULE_STATE_DE_PROVISIONING = 6; + */ + DE_PROVISIONING = 6, + + /** + * @generated from enum value: MODULE_STATE_DELETED = 7; + */ + DELETED = 7, + + /** + * @generated from enum value: MODULE_STATE_FAILED = 8; + */ + FAILED = 8, +} +// Retrieve enum metadata with: proto3.getEnumType(ModuleState) +proto3.util.setEnumType(ModuleState, "xyz.block.ftl.schema.v1.ModuleState", [ + { no: 0, name: "MODULE_STATE_UNSPECIFIED" }, + { no: 1, name: "MODULE_STATE_PROVISIONING" }, + { no: 2, name: "MODULE_STATE_READY" }, + { no: 3, name: "MODULE_STATE_CANARY" }, + { no: 4, name: "MODULE_STATE_CANONICAL" }, + { no: 5, name: "MODULE_STATE_DRAINING" }, + { no: 6, name: "MODULE_STATE_DE_PROVISIONING" }, + { no: 7, name: "MODULE_STATE_DELETED" }, + { no: 8, name: "MODULE_STATE_FAILED" }, +]); + /** * @generated from message xyz.block.ftl.schema.v1.AWSIAMAuthDatabaseConnector */ @@ -265,6 +377,184 @@ export class Bytes extends Message { } } +/** + * @generated from message xyz.block.ftl.schema.v1.Changeset + */ +export class Changeset extends Message { + /** + * @generated from field: string key = 1; + */ + key = ""; + + /** + * @generated from field: google.protobuf.Timestamp created_at = 2; + */ + createdAt?: Timestamp; + + /** + * @generated from field: repeated xyz.block.ftl.schema.v1.Module modules = 3; + */ + modules: Module[] = []; + + /** + * @generated from field: xyz.block.ftl.schema.v1.ChangesetState state = 4; + */ + state = ChangesetState.UNSPECIFIED; + + /** + * @generated from field: optional string error = 5; + */ + error?: string; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.schema.v1.Changeset"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "created_at", kind: "message", T: Timestamp }, + { no: 3, name: "modules", kind: "message", T: Module, repeated: true }, + { no: 4, name: "state", kind: "enum", T: proto3.getEnumType(ChangesetState) }, + { no: 5, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): Changeset { + return new Changeset().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): Changeset { + return new Changeset().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): Changeset { + return new Changeset().fromJsonString(jsonString, options); + } + + static equals(a: Changeset | PlainMessage | undefined, b: Changeset | PlainMessage | undefined): boolean { + return proto3.util.equals(Changeset, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.schema.v1.ChangesetCommittedEvent + */ +export class ChangesetCommittedEvent extends Message { + /** + * @generated from field: string key = 1; + */ + key = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.schema.v1.ChangesetCommittedEvent"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ChangesetCommittedEvent { + return new ChangesetCommittedEvent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ChangesetCommittedEvent { + return new ChangesetCommittedEvent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ChangesetCommittedEvent { + return new ChangesetCommittedEvent().fromJsonString(jsonString, options); + } + + static equals(a: ChangesetCommittedEvent | PlainMessage | undefined, b: ChangesetCommittedEvent | PlainMessage | undefined): boolean { + return proto3.util.equals(ChangesetCommittedEvent, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.schema.v1.ChangesetCreatedEvent + */ +export class ChangesetCreatedEvent extends Message { + /** + * @generated from field: xyz.block.ftl.schema.v1.Changeset changeset = 1; + */ + changeset?: Changeset; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.schema.v1.ChangesetCreatedEvent"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "changeset", kind: "message", T: Changeset }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ChangesetCreatedEvent { + return new ChangesetCreatedEvent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ChangesetCreatedEvent { + return new ChangesetCreatedEvent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ChangesetCreatedEvent { + return new ChangesetCreatedEvent().fromJsonString(jsonString, options); + } + + static equals(a: ChangesetCreatedEvent | PlainMessage | undefined, b: ChangesetCreatedEvent | PlainMessage | undefined): boolean { + return proto3.util.equals(ChangesetCreatedEvent, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.schema.v1.ChangesetFailedEvent + */ +export class ChangesetFailedEvent extends Message { + /** + * @generated from field: string key = 1; + */ + key = ""; + + /** + * @generated from field: string error = 2; + */ + error = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.schema.v1.ChangesetFailedEvent"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ChangesetFailedEvent { + return new ChangesetFailedEvent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ChangesetFailedEvent { + return new ChangesetFailedEvent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ChangesetFailedEvent { + return new ChangesetFailedEvent().fromJsonString(jsonString, options); + } + + static equals(a: ChangesetFailedEvent | PlainMessage | undefined, b: ChangesetFailedEvent | PlainMessage | undefined): boolean { + return proto3.util.equals(ChangesetFailedEvent, a, b); + } +} + /** * @generated from message xyz.block.ftl.schema.v1.Config */ @@ -797,6 +1087,11 @@ export class DeploymentActivatedEvent extends Message */ minReplicas = protoInt64.zero; + /** + * @generated from field: string changeset = 4; + */ + changeset = ""; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -808,6 +1103,7 @@ export class DeploymentActivatedEvent extends Message { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 2, name: "activated_at", kind: "message", T: Timestamp }, { no: 3, name: "min_replicas", kind: "scalar", T: 3 /* ScalarType.INT64 */ }, + { no: 4, name: "changeset", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): DeploymentActivatedEvent { @@ -841,6 +1137,11 @@ export class DeploymentCreatedEvent extends Message { */ schema?: Module; + /** + * @generated from field: string changeset = 3; + */ + changeset = ""; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -851,6 +1152,7 @@ export class DeploymentCreatedEvent extends Message { static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 2, name: "schema", kind: "message", T: Module }, + { no: 3, name: "changeset", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): DeploymentCreatedEvent { @@ -884,6 +1186,11 @@ export class DeploymentDeactivatedEvent extends Message) { super(); proto3.util.initPartial(data, this); @@ -894,6 +1201,7 @@ export class DeploymentDeactivatedEvent extends Message [ { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 2, name: "module_removed", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 3, name: "changeset", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): DeploymentDeactivatedEvent { @@ -927,6 +1235,11 @@ export class DeploymentReplicasUpdatedEvent extends Message) { super(); proto3.util.initPartial(data, this); @@ -937,6 +1250,7 @@ export class DeploymentReplicasUpdatedEvent extends Message [ { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 2, name: "replicas", kind: "scalar", T: 3 /* ScalarType.INT64 */ }, + { no: 3, name: "changeset", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): DeploymentReplicasUpdatedEvent { @@ -970,6 +1284,11 @@ export class DeploymentSchemaUpdatedEvent extends Message) { super(); proto3.util.initPartial(data, this); @@ -980,6 +1299,7 @@ export class DeploymentSchemaUpdatedEvent extends Message [ { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 2, name: "schema", kind: "message", T: Module }, + { no: 3, name: "changeset", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): DeploymentSchemaUpdatedEvent { @@ -1129,6 +1449,24 @@ export class Event extends Message { * @generated from oneof xyz.block.ftl.schema.v1.Event.value */ value: { + /** + * @generated from field: xyz.block.ftl.schema.v1.ChangesetCommittedEvent changeset_committed_event = 12; + */ + value: ChangesetCommittedEvent; + case: "changesetCommittedEvent"; + } | { + /** + * @generated from field: xyz.block.ftl.schema.v1.ChangesetCreatedEvent changeset_created_event = 11; + */ + value: ChangesetCreatedEvent; + case: "changesetCreatedEvent"; + } | { + /** + * @generated from field: xyz.block.ftl.schema.v1.ChangesetFailedEvent changeset_failed_event = 13; + */ + value: ChangesetFailedEvent; + case: "changesetFailedEvent"; + } | { /** * @generated from field: xyz.block.ftl.schema.v1.DatabaseRuntimeEvent database_runtime_event = 8; */ @@ -1198,6 +1536,9 @@ export class Event extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "xyz.block.ftl.schema.v1.Event"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 12, name: "changeset_committed_event", kind: "message", T: ChangesetCommittedEvent, oneof: "value" }, + { no: 11, name: "changeset_created_event", kind: "message", T: ChangesetCreatedEvent, oneof: "value" }, + { no: 13, name: "changeset_failed_event", kind: "message", T: ChangesetFailedEvent, oneof: "value" }, { no: 8, name: "database_runtime_event", kind: "message", T: DatabaseRuntimeEvent, oneof: "value" }, { no: 4, name: "deployment_activated_event", kind: "message", T: DeploymentActivatedEvent, oneof: "value" }, { no: 1, name: "deployment_created_event", kind: "message", T: DeploymentCreatedEvent, oneof: "value" }, @@ -2781,6 +3122,11 @@ export class ModuleRuntimeDeployment extends Message { */ activatedAt?: Timestamp; + /** + * @generated from field: xyz.block.ftl.schema.v1.ModuleState state = 5; + */ + state = ModuleState.UNSPECIFIED; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -2793,6 +3139,7 @@ export class ModuleRuntimeDeployment extends Message { { no: 2, name: "deployment_key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 3, name: "created_at", kind: "message", T: Timestamp }, { no: 4, name: "activated_at", kind: "message", T: Timestamp, opt: true }, + { no: 5, name: "state", kind: "enum", T: proto3.getEnumType(ModuleState) }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): ModuleRuntimeDeployment { @@ -2817,27 +3164,22 @@ export class ModuleRuntimeDeployment extends Message { */ export class ModuleRuntimeEvent extends Message { /** - * @generated from field: string module = 1; - */ - module = ""; - - /** - * @generated from field: optional string deployment_key = 2; + * @generated from field: string deployment_key = 1; */ - deploymentKey?: string; + deploymentKey = ""; /** - * @generated from field: optional xyz.block.ftl.schema.v1.ModuleRuntimeBase base = 3; + * @generated from field: optional xyz.block.ftl.schema.v1.ModuleRuntimeBase base = 2; */ base?: ModuleRuntimeBase; /** - * @generated from field: optional xyz.block.ftl.schema.v1.ModuleRuntimeScaling scaling = 4; + * @generated from field: optional xyz.block.ftl.schema.v1.ModuleRuntimeScaling scaling = 3; */ scaling?: ModuleRuntimeScaling; /** - * @generated from field: optional xyz.block.ftl.schema.v1.ModuleRuntimeDeployment deployment = 5; + * @generated from field: optional xyz.block.ftl.schema.v1.ModuleRuntimeDeployment deployment = 4; */ deployment?: ModuleRuntimeDeployment; @@ -2849,11 +3191,10 @@ export class ModuleRuntimeEvent extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "xyz.block.ftl.schema.v1.ModuleRuntimeEvent"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "module", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "deployment_key", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, - { no: 3, name: "base", kind: "message", T: ModuleRuntimeBase, opt: true }, - { no: 4, name: "scaling", kind: "message", T: ModuleRuntimeScaling, opt: true }, - { no: 5, name: "deployment", kind: "message", T: ModuleRuntimeDeployment, opt: true }, + { no: 1, name: "deployment_key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "base", kind: "message", T: ModuleRuntimeBase, opt: true }, + { no: 3, name: "scaling", kind: "message", T: ModuleRuntimeScaling, opt: true }, + { no: 4, name: "deployment", kind: "message", T: ModuleRuntimeDeployment, opt: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): ModuleRuntimeEvent { @@ -3157,6 +3498,16 @@ export class SchemaState extends Message { */ activeDeployments: string[] = []; + /** + * @generated from field: repeated xyz.block.ftl.schema.v1.SerializedChangeset serialized_changeset = 3; + */ + serializedChangeset: SerializedChangeset[] = []; + + /** + * @generated from field: repeated string provisioning = 4; + */ + provisioning: string[] = []; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -3167,6 +3518,8 @@ export class SchemaState extends Message { static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "modules", kind: "message", T: Module, repeated: true }, { no: 2, name: "active_deployments", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 3, name: "serialized_changeset", kind: "message", T: SerializedChangeset, repeated: true }, + { no: 4, name: "provisioning", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): SchemaState { @@ -3241,6 +3594,69 @@ export class Secret extends Message { } } +/** + * SerializedChangeset is a temp hack that needs to go away + * + * @generated from message xyz.block.ftl.schema.v1.SerializedChangeset + */ +export class SerializedChangeset extends Message { + /** + * @generated from field: string key = 1; + */ + key = ""; + + /** + * @generated from field: google.protobuf.Timestamp created_at = 2; + */ + createdAt?: Timestamp; + + /** + * @generated from field: repeated string deployments = 3; + */ + deployments: string[] = []; + + /** + * @generated from field: xyz.block.ftl.schema.v1.ChangesetState state = 4; + */ + state = ChangesetState.UNSPECIFIED; + + /** + * @generated from field: string error = 5; + */ + error = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.schema.v1.SerializedChangeset"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "created_at", kind: "message", T: Timestamp }, + { no: 3, name: "deployments", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 4, name: "state", kind: "enum", T: proto3.getEnumType(ChangesetState) }, + { no: 5, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SerializedChangeset { + return new SerializedChangeset().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SerializedChangeset { + return new SerializedChangeset().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SerializedChangeset { + return new SerializedChangeset().fromJsonString(jsonString, options); + } + + static equals(a: SerializedChangeset | PlainMessage | undefined, b: SerializedChangeset | PlainMessage | undefined): boolean { + return proto3.util.equals(SerializedChangeset, a, b); + } +} + /** * @generated from message xyz.block.ftl.schema.v1.String */ diff --git a/frontend/console/src/protos/xyz/block/ftl/v1/controller_connect.ts b/frontend/console/src/protos/xyz/block/ftl/v1/controller_connect.ts index 54544c65f4..0d5c632fad 100644 --- a/frontend/console/src/protos/xyz/block/ftl/v1/controller_connect.ts +++ b/frontend/console/src/protos/xyz/block/ftl/v1/controller_connect.ts @@ -5,7 +5,7 @@ import { PingRequest, PingResponse } from "./ftl_pb.js"; import { MethodIdempotency, MethodKind } from "@bufbuild/protobuf"; -import { CreateDeploymentRequest, CreateDeploymentResponse, GetArtefactDiffsRequest, GetArtefactDiffsResponse, GetDeploymentArtefactsRequest, GetDeploymentArtefactsResponse, GetDeploymentRequest, GetDeploymentResponse, ProcessListRequest, ProcessListResponse, RegisterRunnerRequest, RegisterRunnerResponse, ReplaceDeployRequest, ReplaceDeployResponse, StatusRequest, StatusResponse, UpdateDeployRequest, UpdateDeployResponse, UploadArtefactRequest, UploadArtefactResponse } from "./controller_pb.js"; +import { GetArtefactDiffsRequest, GetArtefactDiffsResponse, GetDeploymentArtefactsRequest, GetDeploymentArtefactsResponse, GetDeploymentRequest, GetDeploymentResponse, ProcessListRequest, ProcessListResponse, RegisterRunnerRequest, RegisterRunnerResponse, StatusRequest, StatusResponse, UploadArtefactRequest, UploadArtefactResponse } from "./controller_pb.js"; /** * @generated from service xyz.block.ftl.v1.ControllerService @@ -67,17 +67,6 @@ export const ControllerService = { O: UploadArtefactResponse, kind: MethodKind.Unary, }, - /** - * Create a deployment. - * - * @generated from rpc xyz.block.ftl.v1.ControllerService.CreateDeployment - */ - createDeployment: { - name: "CreateDeployment", - I: CreateDeploymentRequest, - O: CreateDeploymentResponse, - kind: MethodKind.Unary, - }, /** * Get the schema and artefact metadata for a deployment. * @@ -117,31 +106,6 @@ export const ControllerService = { O: RegisterRunnerResponse, kind: MethodKind.ClientStreaming, }, - /** - * Update an existing deployment. - * - * @generated from rpc xyz.block.ftl.v1.ControllerService.UpdateDeploy - */ - updateDeploy: { - name: "UpdateDeploy", - I: UpdateDeployRequest, - O: UpdateDeployResponse, - kind: MethodKind.Unary, - }, - /** - * Gradually replace an existing deployment with a new one. - * - * If a deployment already exists for the module of the new deployment, - * it will be scaled down and replaced by the new one. - * - * @generated from rpc xyz.block.ftl.v1.ControllerService.ReplaceDeploy - */ - replaceDeploy: { - name: "ReplaceDeploy", - I: ReplaceDeployRequest, - O: ReplaceDeployResponse, - kind: MethodKind.Unary, - }, } } as const; diff --git a/frontend/console/src/protos/xyz/block/ftl/v1/controller_pb.ts b/frontend/console/src/protos/xyz/block/ftl/v1/controller_pb.ts index 508e605a8a..4e2241301c 100644 --- a/frontend/console/src/protos/xyz/block/ftl/v1/controller_pb.ts +++ b/frontend/console/src/protos/xyz/block/ftl/v1/controller_pb.ts @@ -540,80 +540,6 @@ export class RegisterRunnerResponse extends Message { } } -/** - * @generated from message xyz.block.ftl.v1.UpdateDeployRequest - */ -export class UpdateDeployRequest extends Message { - /** - * @generated from field: string deployment_key = 1; - */ - deploymentKey = ""; - - /** - * @generated from field: optional int32 min_replicas = 2; - */ - minReplicas?: number; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.v1.UpdateDeployRequest"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "deployment_key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 2, name: "min_replicas", kind: "scalar", T: 5 /* ScalarType.INT32 */, opt: true }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): UpdateDeployRequest { - return new UpdateDeployRequest().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): UpdateDeployRequest { - return new UpdateDeployRequest().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): UpdateDeployRequest { - return new UpdateDeployRequest().fromJsonString(jsonString, options); - } - - static equals(a: UpdateDeployRequest | PlainMessage | undefined, b: UpdateDeployRequest | PlainMessage | undefined): boolean { - return proto3.util.equals(UpdateDeployRequest, a, b); - } -} - -/** - * @generated from message xyz.block.ftl.v1.UpdateDeployResponse - */ -export class UpdateDeployResponse extends Message { - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.v1.UpdateDeployResponse"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): UpdateDeployResponse { - return new UpdateDeployResponse().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): UpdateDeployResponse { - return new UpdateDeployResponse().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): UpdateDeployResponse { - return new UpdateDeployResponse().fromJsonString(jsonString, options); - } - - static equals(a: UpdateDeployResponse | PlainMessage | undefined, b: UpdateDeployResponse | PlainMessage | undefined): boolean { - return proto3.util.equals(UpdateDeployResponse, a, b); - } -} - /** * @generated from message xyz.block.ftl.v1.ReplaceDeployRequest */ diff --git a/frontend/console/src/protos/xyz/block/ftl/v1/schemaservice_connect.ts b/frontend/console/src/protos/xyz/block/ftl/v1/schemaservice_connect.ts index a8ccf661cd..4718e57f1d 100644 --- a/frontend/console/src/protos/xyz/block/ftl/v1/schemaservice_connect.ts +++ b/frontend/console/src/protos/xyz/block/ftl/v1/schemaservice_connect.ts @@ -5,7 +5,7 @@ import { PingRequest, PingResponse } from "./ftl_pb.js"; import { MethodIdempotency, MethodKind } from "@bufbuild/protobuf"; -import { GetDeploymentsRequest, GetDeploymentsResponse, GetSchemaRequest, GetSchemaResponse, PullSchemaRequest, PullSchemaResponse, UpdateDeploymentRuntimeRequest, UpdateDeploymentRuntimeResponse, UpdateSchemaRequest, UpdateSchemaResponse } from "./schemaservice_pb.js"; +import { CommitChangesetRequest, CommitChangesetResponse, CreateChangesetRequest, CreateChangesetResponse, FailChangesetRequest, FailChangesetResponse, GetDeploymentsRequest, GetDeploymentsResponse, GetSchemaRequest, GetSchemaResponse, PullSchemaRequest, PullSchemaResponse, UpdateDeploymentRuntimeRequest, UpdateDeploymentRuntimeResponse, UpdateSchemaRequest, UpdateSchemaResponse } from "./schemaservice_pb.js"; /** * @generated from service xyz.block.ftl.v1.SchemaService @@ -85,6 +85,39 @@ export const SchemaService = { O: GetDeploymentsResponse, kind: MethodKind.Unary, }, + /** + * CreateChangeset creates a new changeset. + * + * @generated from rpc xyz.block.ftl.v1.SchemaService.CreateChangeset + */ + createChangeset: { + name: "CreateChangeset", + I: CreateChangesetRequest, + O: CreateChangesetResponse, + kind: MethodKind.Unary, + }, + /** + * CommitChangeset makes all deployments for the changeset part of the canonical schema. + * + * @generated from rpc xyz.block.ftl.v1.SchemaService.CommitChangeset + */ + commitChangeset: { + name: "CommitChangeset", + I: CommitChangesetRequest, + O: CommitChangesetResponse, + kind: MethodKind.Unary, + }, + /** + * FailChangeset fails an active changeset. + * + * @generated from rpc xyz.block.ftl.v1.SchemaService.FailChangeset + */ + failChangeset: { + name: "FailChangeset", + I: FailChangesetRequest, + O: FailChangesetResponse, + kind: MethodKind.Unary, + }, } } as const; diff --git a/frontend/console/src/protos/xyz/block/ftl/v1/schemaservice_pb.ts b/frontend/console/src/protos/xyz/block/ftl/v1/schemaservice_pb.ts index aa792c184d..4d52153cdd 100644 --- a/frontend/console/src/protos/xyz/block/ftl/v1/schemaservice_pb.ts +++ b/frontend/console/src/protos/xyz/block/ftl/v1/schemaservice_pb.ts @@ -5,39 +5,7 @@ import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; import { Message, proto3 } from "@bufbuild/protobuf"; -import { Event, Module, ModuleRuntimeEvent, Schema } from "../schema/v1/schema_pb.js"; - -/** - * @generated from enum xyz.block.ftl.v1.DeploymentChangeType - */ -export enum DeploymentChangeType { - /** - * @generated from enum value: DEPLOYMENT_CHANGE_TYPE_UNSPECIFIED = 0; - */ - UNSPECIFIED = 0, - - /** - * @generated from enum value: DEPLOYMENT_CHANGE_TYPE_ADDED = 1; - */ - ADDED = 1, - - /** - * @generated from enum value: DEPLOYMENT_CHANGE_TYPE_REMOVED = 2; - */ - REMOVED = 2, - - /** - * @generated from enum value: DEPLOYMENT_CHANGE_TYPE_CHANGED = 3; - */ - CHANGED = 3, -} -// Retrieve enum metadata with: proto3.getEnumType(DeploymentChangeType) -proto3.util.setEnumType(DeploymentChangeType, "xyz.block.ftl.v1.DeploymentChangeType", [ - { no: 0, name: "DEPLOYMENT_CHANGE_TYPE_UNSPECIFIED" }, - { no: 1, name: "DEPLOYMENT_CHANGE_TYPE_ADDED" }, - { no: 2, name: "DEPLOYMENT_CHANGE_TYPE_REMOVED" }, - { no: 3, name: "DEPLOYMENT_CHANGE_TYPE_CHANGED" }, -]); +import { Changeset, Event, Module, ModuleRuntimeEvent, Schema } from "../schema/v1/schema_pb.js"; /** * @generated from message xyz.block.ftl.v1.GetSchemaRequest @@ -79,6 +47,11 @@ export class GetSchemaResponse extends Message { */ schema?: Schema; + /** + * @generated from field: repeated xyz.block.ftl.schema.v1.Changeset changesets = 2; + */ + changesets: Changeset[] = []; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -88,6 +61,7 @@ export class GetSchemaResponse extends Message { static readonly typeName = "xyz.block.ftl.v1.GetSchemaResponse"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "schema", kind: "message", T: Schema }, + { no: 2, name: "changesets", kind: "message", T: Changeset, repeated: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): GetSchemaResponse { @@ -143,74 +117,354 @@ export class PullSchemaRequest extends Message { */ export class PullSchemaResponse extends Message { /** - * Will not be set for builtin modules. + * @generated from oneof xyz.block.ftl.v1.PullSchemaResponse.event + */ + event: { + /** + * @generated from field: xyz.block.ftl.v1.PullSchemaResponse.ChangesetCreated changeset_created = 4; + */ + value: PullSchemaResponse_ChangesetCreated; + case: "changesetCreated"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.PullSchemaResponse.ChangesetFailed changeset_failed = 5; + */ + value: PullSchemaResponse_ChangesetFailed; + case: "changesetFailed"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.PullSchemaResponse.ChangesetCommitted changeset_committed = 6; + */ + value: PullSchemaResponse_ChangesetCommitted; + case: "changesetCommitted"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.PullSchemaResponse.DeploymentCreated deployment_created = 7; + */ + value: PullSchemaResponse_DeploymentCreated; + case: "deploymentCreated"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.PullSchemaResponse.DeploymentUpdated deployment_updated = 8; + */ + value: PullSchemaResponse_DeploymentUpdated; + case: "deploymentUpdated"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.PullSchemaResponse.DeploymentRemoved deployment_removed = 9; + */ + value: PullSchemaResponse_DeploymentRemoved; + case: "deploymentRemoved"; + } | { case: undefined; value?: undefined } = { case: undefined }; + + /** + * If true there are more schema changes immediately following this one as part of the initial batch. + * If false this is the last schema change in the initial batch, but others may follow later. * - * @generated from field: optional string deployment_key = 1; + * @generated from field: bool more = 31634; */ - deploymentKey?: string; + more = false; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.PullSchemaResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 4, name: "changeset_created", kind: "message", T: PullSchemaResponse_ChangesetCreated, oneof: "event" }, + { no: 5, name: "changeset_failed", kind: "message", T: PullSchemaResponse_ChangesetFailed, oneof: "event" }, + { no: 6, name: "changeset_committed", kind: "message", T: PullSchemaResponse_ChangesetCommitted, oneof: "event" }, + { no: 7, name: "deployment_created", kind: "message", T: PullSchemaResponse_DeploymentCreated, oneof: "event" }, + { no: 8, name: "deployment_updated", kind: "message", T: PullSchemaResponse_DeploymentUpdated, oneof: "event" }, + { no: 9, name: "deployment_removed", kind: "message", T: PullSchemaResponse_DeploymentRemoved, oneof: "event" }, + { no: 31634, name: "more", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PullSchemaResponse { + return new PullSchemaResponse().fromBinary(bytes, options); + } + static fromJson(jsonValue: JsonValue, options?: Partial): PullSchemaResponse { + return new PullSchemaResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PullSchemaResponse { + return new PullSchemaResponse().fromJsonString(jsonString, options); + } + + static equals(a: PullSchemaResponse | PlainMessage | undefined, b: PullSchemaResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(PullSchemaResponse, a, b); + } +} + +/** + * ChangesetCreated is sent when a new changeset is created. + * + * @generated from message xyz.block.ftl.v1.PullSchemaResponse.ChangesetCreated + */ +export class PullSchemaResponse_ChangesetCreated extends Message { /** - * @generated from field: string module_name = 2; + * @generated from field: xyz.block.ftl.schema.v1.Changeset changeset = 1; */ - moduleName = ""; + changeset?: Changeset; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.PullSchemaResponse.ChangesetCreated"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "changeset", kind: "message", T: Changeset }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PullSchemaResponse_ChangesetCreated { + return new PullSchemaResponse_ChangesetCreated().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PullSchemaResponse_ChangesetCreated { + return new PullSchemaResponse_ChangesetCreated().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PullSchemaResponse_ChangesetCreated { + return new PullSchemaResponse_ChangesetCreated().fromJsonString(jsonString, options); + } + + static equals(a: PullSchemaResponse_ChangesetCreated | PlainMessage | undefined, b: PullSchemaResponse_ChangesetCreated | PlainMessage | undefined): boolean { + return proto3.util.equals(PullSchemaResponse_ChangesetCreated, a, b); + } +} + +/** + * ChangesetFailed is sent when a changeset fails. + * + * @generated from message xyz.block.ftl.v1.PullSchemaResponse.ChangesetFailed + */ +export class PullSchemaResponse_ChangesetFailed extends Message { + /** + * @generated from field: string key = 1; + */ + key = ""; /** - * For deletes this will not be present. + * @generated from field: string error = 2; + */ + error = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.PullSchemaResponse.ChangesetFailed"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PullSchemaResponse_ChangesetFailed { + return new PullSchemaResponse_ChangesetFailed().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PullSchemaResponse_ChangesetFailed { + return new PullSchemaResponse_ChangesetFailed().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PullSchemaResponse_ChangesetFailed { + return new PullSchemaResponse_ChangesetFailed().fromJsonString(jsonString, options); + } + + static equals(a: PullSchemaResponse_ChangesetFailed | PlainMessage | undefined, b: PullSchemaResponse_ChangesetFailed | PlainMessage | undefined): boolean { + return proto3.util.equals(PullSchemaResponse_ChangesetFailed, a, b); + } +} + +/** + * ChangesetFailed is sent when a changeset becomes canonical. + * + * @generated from message xyz.block.ftl.v1.PullSchemaResponse.ChangesetCommitted + */ +export class PullSchemaResponse_ChangesetCommitted extends Message { + /** + * @generated from field: string key = 1; + */ + key = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.PullSchemaResponse.ChangesetCommitted"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PullSchemaResponse_ChangesetCommitted { + return new PullSchemaResponse_ChangesetCommitted().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PullSchemaResponse_ChangesetCommitted { + return new PullSchemaResponse_ChangesetCommitted().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PullSchemaResponse_ChangesetCommitted { + return new PullSchemaResponse_ChangesetCommitted().fromJsonString(jsonString, options); + } + + static equals(a: PullSchemaResponse_ChangesetCommitted | PlainMessage | undefined, b: PullSchemaResponse_ChangesetCommitted | PlainMessage | undefined): boolean { + return proto3.util.equals(PullSchemaResponse_ChangesetCommitted, a, b); + } +} + +/** + * Deployment created is sent when a deployment is new to the listener but is not part of a changeset. + * + * Will not be set for builtin modules. + * optional string key = 1; + * string module_name = 2; + * If present, the deployment is not yet canonical as it is currently part of a changeset. + * optional string changeset = 3; + * + * @generated from message xyz.block.ftl.v1.PullSchemaResponse.DeploymentCreated + */ +export class PullSchemaResponse_DeploymentCreated extends Message { + /** + * @generated from field: optional xyz.block.ftl.schema.v1.Module schema = 1; + */ + schema?: Module; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.PullSchemaResponse.DeploymentCreated"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "schema", kind: "message", T: Module, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PullSchemaResponse_DeploymentCreated { + return new PullSchemaResponse_DeploymentCreated().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PullSchemaResponse_DeploymentCreated { + return new PullSchemaResponse_DeploymentCreated().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PullSchemaResponse_DeploymentCreated { + return new PullSchemaResponse_DeploymentCreated().fromJsonString(jsonString, options); + } + + static equals(a: PullSchemaResponse_DeploymentCreated | PlainMessage | undefined, b: PullSchemaResponse_DeploymentCreated | PlainMessage | undefined): boolean { + return proto3.util.equals(PullSchemaResponse_DeploymentCreated, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.PullSchemaResponse.DeploymentUpdated + */ +export class PullSchemaResponse_DeploymentUpdated extends Message { + /** + * Will not be set for builtin modules. + * optional string key = 1; + * string module_name = 2; + * If present, the deployment is not yet canonical as it is currently part of a changeset. * - * @generated from field: optional xyz.block.ftl.schema.v1.Module schema = 4; + * @generated from field: optional string changeset = 1; + */ + changeset?: string; + + /** + * @generated from field: optional xyz.block.ftl.schema.v1.Module schema = 2; */ schema?: Module; + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.PullSchemaResponse.DeploymentUpdated"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "changeset", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 2, name: "schema", kind: "message", T: Module, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): PullSchemaResponse_DeploymentUpdated { + return new PullSchemaResponse_DeploymentUpdated().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): PullSchemaResponse_DeploymentUpdated { + return new PullSchemaResponse_DeploymentUpdated().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): PullSchemaResponse_DeploymentUpdated { + return new PullSchemaResponse_DeploymentUpdated().fromJsonString(jsonString, options); + } + + static equals(a: PullSchemaResponse_DeploymentUpdated | PlainMessage | undefined, b: PullSchemaResponse_DeploymentUpdated | PlainMessage | undefined): boolean { + return proto3.util.equals(PullSchemaResponse_DeploymentUpdated, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.PullSchemaResponse.DeploymentRemoved + */ +export class PullSchemaResponse_DeploymentRemoved extends Message { /** - * If true there are more schema changes immediately following this one as part of the initial batch. - * If false this is the last schema change in the initial batch, but others may follow later. + * Will not be set for builtin modules. * - * @generated from field: bool more = 3; + * @generated from field: optional string key = 1; */ - more = false; + key?: string; /** - * @generated from field: xyz.block.ftl.v1.DeploymentChangeType change_type = 5; + * @generated from field: string module_name = 2; */ - changeType = DeploymentChangeType.UNSPECIFIED; + moduleName = ""; /** - * If this is true then the module was removed as well as the deployment. This is only set for DEPLOYMENT_REMOVED. + * If this is true then the module was removed as well as the deployment. * - * @generated from field: bool module_removed = 6; + * @generated from field: bool module_removed = 3; */ moduleRemoved = false; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.v1.PullSchemaResponse"; + static readonly typeName = "xyz.block.ftl.v1.PullSchemaResponse.DeploymentRemoved"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "deployment_key", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 1, name: "key", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, { no: 2, name: "module_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 4, name: "schema", kind: "message", T: Module, opt: true }, - { no: 3, name: "more", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, - { no: 5, name: "change_type", kind: "enum", T: proto3.getEnumType(DeploymentChangeType) }, - { no: 6, name: "module_removed", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, + { no: 3, name: "module_removed", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): PullSchemaResponse { - return new PullSchemaResponse().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): PullSchemaResponse_DeploymentRemoved { + return new PullSchemaResponse_DeploymentRemoved().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): PullSchemaResponse { - return new PullSchemaResponse().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): PullSchemaResponse_DeploymentRemoved { + return new PullSchemaResponse_DeploymentRemoved().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): PullSchemaResponse { - return new PullSchemaResponse().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): PullSchemaResponse_DeploymentRemoved { + return new PullSchemaResponse_DeploymentRemoved().fromJsonString(jsonString, options); } - static equals(a: PullSchemaResponse | PlainMessage | undefined, b: PullSchemaResponse | PlainMessage | undefined): boolean { - return proto3.util.equals(PullSchemaResponse, a, b); + static equals(a: PullSchemaResponse_DeploymentRemoved | PlainMessage | undefined, b: PullSchemaResponse_DeploymentRemoved | PlainMessage | undefined): boolean { + return proto3.util.equals(PullSchemaResponse_DeploymentRemoved, a, b); } } @@ -219,7 +473,17 @@ export class PullSchemaResponse extends Message { */ export class UpdateDeploymentRuntimeRequest extends Message { /** - * @generated from field: xyz.block.ftl.schema.v1.ModuleRuntimeEvent event = 2; + * @generated from field: string deployment = 1; + */ + deployment = ""; + + /** + * @generated from field: optional string changeset = 2; + */ + changeset?: string; + + /** + * @generated from field: xyz.block.ftl.schema.v1.ModuleRuntimeEvent event = 3; */ event?: ModuleRuntimeEvent; @@ -231,7 +495,9 @@ export class UpdateDeploymentRuntimeRequest extends Message [ - { no: 2, name: "event", kind: "message", T: ModuleRuntimeEvent }, + { no: 1, name: "deployment", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "changeset", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 3, name: "event", kind: "message", T: ModuleRuntimeEvent }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): UpdateDeploymentRuntimeRequest { @@ -418,6 +684,82 @@ export class GetDeploymentsResponse extends Message { } } +/** + * @generated from message xyz.block.ftl.v1.CreateChangesetRequest + */ +export class CreateChangesetRequest extends Message { + /** + * @generated from field: repeated xyz.block.ftl.schema.v1.Module modules = 1; + */ + modules: Module[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.CreateChangesetRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "modules", kind: "message", T: Module, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CreateChangesetRequest { + return new CreateChangesetRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CreateChangesetRequest { + return new CreateChangesetRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CreateChangesetRequest { + return new CreateChangesetRequest().fromJsonString(jsonString, options); + } + + static equals(a: CreateChangesetRequest | PlainMessage | undefined, b: CreateChangesetRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(CreateChangesetRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.CreateChangesetResponse + */ +export class CreateChangesetResponse extends Message { + /** + * The changeset key of the newly created changeset. + * + * @generated from field: string changeset = 1; + */ + changeset = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.CreateChangesetResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "changeset", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CreateChangesetResponse { + return new CreateChangesetResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CreateChangesetResponse { + return new CreateChangesetResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CreateChangesetResponse { + return new CreateChangesetResponse().fromJsonString(jsonString, options); + } + + static equals(a: CreateChangesetResponse | PlainMessage | undefined, b: CreateChangesetResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(CreateChangesetResponse, a, b); + } +} + /** * @generated from message xyz.block.ftl.v1.DeployedSchema */ @@ -467,3 +809,149 @@ export class DeployedSchema extends Message { } } +/** + * @generated from message xyz.block.ftl.v1.CommitChangesetRequest + */ +export class CommitChangesetRequest extends Message { + /** + * The changeset key to commit. + * + * @generated from field: string changeset = 1; + */ + changeset = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.CommitChangesetRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "changeset", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CommitChangesetRequest { + return new CommitChangesetRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CommitChangesetRequest { + return new CommitChangesetRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CommitChangesetRequest { + return new CommitChangesetRequest().fromJsonString(jsonString, options); + } + + static equals(a: CommitChangesetRequest | PlainMessage | undefined, b: CommitChangesetRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(CommitChangesetRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.CommitChangesetResponse + */ +export class CommitChangesetResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.CommitChangesetResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CommitChangesetResponse { + return new CommitChangesetResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CommitChangesetResponse { + return new CommitChangesetResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CommitChangesetResponse { + return new CommitChangesetResponse().fromJsonString(jsonString, options); + } + + static equals(a: CommitChangesetResponse | PlainMessage | undefined, b: CommitChangesetResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(CommitChangesetResponse, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.FailChangesetRequest + */ +export class FailChangesetRequest extends Message { + /** + * The changeset key to fail. + * + * @generated from field: string changeset = 1; + */ + changeset = ""; + + /** + * @generated from field: string error = 2; + */ + error = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.FailChangesetRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "changeset", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "error", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FailChangesetRequest { + return new FailChangesetRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FailChangesetRequest { + return new FailChangesetRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FailChangesetRequest { + return new FailChangesetRequest().fromJsonString(jsonString, options); + } + + static equals(a: FailChangesetRequest | PlainMessage | undefined, b: FailChangesetRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(FailChangesetRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.FailChangesetResponse + */ +export class FailChangesetResponse extends Message { + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.FailChangesetResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): FailChangesetResponse { + return new FailChangesetResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): FailChangesetResponse { + return new FailChangesetResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): FailChangesetResponse { + return new FailChangesetResponse().fromJsonString(jsonString, options); + } + + static equals(a: FailChangesetResponse | PlainMessage | undefined, b: FailChangesetResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(FailChangesetResponse, a, b); + } +} + diff --git a/ftl-provisioner-config.toml b/ftl-provisioner-config.toml index a1e2dc08d0..ebf6427b17 100644 --- a/ftl-provisioner-config.toml +++ b/ftl-provisioner-config.toml @@ -1,5 +1,4 @@ plugins = [ { id = "cloudformation", resources = ["postgres"] }, - { id = "controller", resources = ["module"] }, { id = "kubernetes", resources = ["runner"] }, ] \ No newline at end of file diff --git a/internal/buildengine/deploy.go b/internal/buildengine/deploy.go index 619d7d3298..9066738d2c 100644 --- a/internal/buildengine/deploy.go +++ b/internal/buildengine/deploy.go @@ -10,6 +10,7 @@ import ( "connectrpc.com/connect" "golang.org/x/exp/maps" + "golang.org/x/sync/errgroup" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/timestamppb" @@ -30,39 +31,113 @@ type deploymentArtefact struct { type DeployClient interface { GetArtefactDiffs(ctx context.Context, req *connect.Request[ftlv1.GetArtefactDiffsRequest]) (*connect.Response[ftlv1.GetArtefactDiffsResponse], error) UploadArtefact(ctx context.Context, req *connect.Request[ftlv1.UploadArtefactRequest]) (*connect.Response[ftlv1.UploadArtefactResponse], error) - CreateDeployment(ctx context.Context, req *connect.Request[ftlv1.CreateDeploymentRequest]) (*connect.Response[ftlv1.CreateDeploymentResponse], error) - ReplaceDeploy(ctx context.Context, req *connect.Request[ftlv1.ReplaceDeployRequest]) (*connect.Response[ftlv1.ReplaceDeployResponse], error) Status(ctx context.Context, req *connect.Request[ftlv1.StatusRequest]) (*connect.Response[ftlv1.StatusResponse], error) - UpdateDeploy(ctx context.Context, req *connect.Request[ftlv1.UpdateDeployRequest]) (*connect.Response[ftlv1.UpdateDeployResponse], error) Ping(ctx context.Context, req *connect.Request[ftlv1.PingRequest]) (*connect.Response[ftlv1.PingResponse], error) } +type SchemaServiceClient interface { + CreateChangeset(ctx context.Context, req *connect.Request[ftlv1.CreateChangesetRequest]) (*connect.Response[ftlv1.CreateChangesetResponse], error) + PullSchema(ctx context.Context, req *connect.Request[ftlv1.PullSchemaRequest]) (*connect.ServerStreamForClient[ftlv1.PullSchemaResponse], error) + Ping(ctx context.Context, req *connect.Request[ftlv1.PingRequest]) (*connect.Response[ftlv1.PingResponse], error) + UpdateDeploymentRuntime(ctx context.Context, req *connect.Request[ftlv1.UpdateDeploymentRuntimeRequest]) (*connect.Response[ftlv1.UpdateDeploymentRuntimeResponse], error) +} + // Deploy a module to the FTL controller with the given number of replicas. Optionally wait for the deployment to become ready. -func Deploy(ctx context.Context, projectConfig projectconfig.Config, module Module, deploy []string, replicas int32, waitForDeployOnline bool, client DeployClient) error { +func Deploy(ctx context.Context, projectConfig projectconfig.Config, modules []Module, replicas int32, waitForDeployOnline bool, deployClient DeployClient, schemaserviceClient SchemaServiceClient) error { + logger := log.FromContext(ctx) + uploadGroup := errgroup.Group{} + moduleSchemas := make(chan *schemapb.Module, len(modules)) + for _, module := range modules { + uploadGroup.Go(func() error { + sch, err := uploadArtefacts(ctx, projectConfig, module, deployClient) + if err != nil { + return err + } + moduleSchemas <- sch + return nil + }) + } + if err := uploadGroup.Wait(); err != nil { + return fmt.Errorf("failed to upload artefacts: %w", err) + } + close(moduleSchemas) + collectedSchemas := []*schemapb.Module{} + for { + sch, ok := <-moduleSchemas + if !ok { + break + } + collectedSchemas = append(collectedSchemas, sch) + } + resp, err := schemaserviceClient.CreateChangeset(ctx, connect.NewRequest(&ftlv1.CreateChangesetRequest{ + Modules: collectedSchemas, + })) + logger.Debugf("Created changeset with %d modules", len(collectedSchemas)) + if err != nil { + return fmt.Errorf("failed to create changeset: %w", err) + } + key := resp.Msg.Changeset + + ctx, closeStream := context.WithCancelCause(ctx) + stream, err := schemaserviceClient.PullSchema(ctx, connect.NewRequest(&ftlv1.PullSchemaRequest{})) + if err != nil { + return fmt.Errorf("failed to pull schema: %w", err) + } + defer closeStream(fmt.Errorf("function is complete")) + for { + if !stream.Receive() { + return fmt.Errorf("failed to pull schema: %w", stream.Err()) + } + msg := stream.Msg() + switch msg := msg.Event.(type) { + case *ftlv1.PullSchemaResponse_ChangesetCommitted_: + if msg.ChangesetCommitted.Key != key { + logger.Warnf("Expecting changeset %s to complete but got commit for %s", key, msg.ChangesetCommitted.Key) + continue + } + logger.Infof("Changeset %s deployed and ready", key) + return nil + case *ftlv1.PullSchemaResponse_ChangesetFailed_: + if msg.ChangesetFailed.Key != key { + logger.Warnf("Expecting changeset %s to complete but got failure for %s", key, msg.ChangesetFailed.Key) + continue + } + return fmt.Errorf("changeset %s failed: %s", key, msg.ChangesetFailed.Error) + + case *ftlv1.PullSchemaResponse_ChangesetCreated_: + // TODO: handle this case where stream starts after changeset ends. Or reconnects when changeset has ended + case *ftlv1.PullSchemaResponse_DeploymentCreated_, + *ftlv1.PullSchemaResponse_DeploymentUpdated_, + *ftlv1.PullSchemaResponse_DeploymentRemoved_: + } + } +} + +func uploadArtefacts(ctx context.Context, projectConfig projectconfig.Config, module Module, client DeployClient) (*schemapb.Module, error) { logger := log.FromContext(ctx).Module(module.Config.Module).Scope("deploy") ctx = log.ContextWithLogger(ctx, logger) logger.Infof("Deploying module") moduleConfig := module.Config.Abs() - files, err := FindFilesToDeploy(moduleConfig, deploy) + files, err := FindFilesToDeploy(moduleConfig, module.Deploy) if err != nil { logger.Errorf(err, "failed to find files in %s", moduleConfig) - return err + return nil, err } filesByHash, err := hashFiles(moduleConfig.DeployDir, files) if err != nil { - return err + return nil, err } gadResp, err := client.GetArtefactDiffs(ctx, connect.NewRequest(&ftlv1.GetArtefactDiffsRequest{ClientDigests: maps.Keys(filesByHash)})) if err != nil { - return fmt.Errorf("failed to get artefact diffs: %w", err) + return nil, fmt.Errorf("failed to get artefact diffs: %w", err) } moduleSchema, err := loadProtoSchema(projectConfig, moduleConfig) if err != nil { - return err + return nil, err } logger.Debugf("Uploading %d/%d files", len(gadResp.Msg.MissingDigests), len(files)) @@ -70,14 +145,14 @@ func Deploy(ctx context.Context, projectConfig projectconfig.Config, module Modu file := filesByHash[missing] content, err := os.ReadFile(file.localPath) if err != nil { - return err + return nil, fmt.Errorf("failed to read file %w", err) } - logger.Tracef("Uploading %s", relToCWD(file.localPath)) + logger.Debugf("Uploading %s", relToCWD(file.localPath)) resp, err := client.UploadArtefact(ctx, connect.NewRequest(&ftlv1.UploadArtefactRequest{ Content: content, })) if err != nil { - return err + return nil, fmt.Errorf("failed to upload artefact: %w", err) } logger.Debugf("Uploaded %s as %s:%s", relToCWD(file.localPath), sha256.FromBytes(resp.Msg.Digest), file.Path) } @@ -93,32 +168,10 @@ func Deploy(ctx context.Context, projectConfig projectconfig.Config, module Modu }, }) } - - resp, err := client.CreateDeployment(ctx, connect.NewRequest(&ftlv1.CreateDeploymentRequest{ - Schema: moduleSchema, - })) - if err != nil { - return err - } - - _, err = client.ReplaceDeploy(ctx, connect.NewRequest(&ftlv1.ReplaceDeployRequest{DeploymentKey: resp.Msg.GetDeploymentKey(), MinReplicas: replicas})) - if err != nil { - return err - } - - if waitForDeployOnline { - logger.Debugf("Waiting for deployment %s to become ready", resp.Msg.DeploymentKey) - err = checkReadiness(ctx, client, resp.Msg.DeploymentKey, replicas, moduleSchema) - if err != nil { - return err - } - logger.Infof("Deployment %s became ready", resp.Msg.DeploymentKey) - } - - return nil + return moduleSchema, nil } -func terminateModuleDeployment(ctx context.Context, client DeployClient, module string) error { +func terminateModuleDeployment(ctx context.Context, client DeployClient, schemaClient SchemaServiceClient, module string) error { logger := log.FromContext(ctx).Module(module).Scope("terminate") status, err := client.Status(ctx, connect.NewRequest(&ftlv1.StatusRequest{})) @@ -139,8 +192,17 @@ func terminateModuleDeployment(ctx context.Context, client DeployClient, module } logger.Infof("Terminating deployment %s", key) - _, err = client.UpdateDeploy(ctx, connect.NewRequest(&ftlv1.UpdateDeployRequest{DeploymentKey: key})) - return err + _, err = schemaClient.UpdateDeploymentRuntime(ctx, connect.NewRequest(&ftlv1.UpdateDeploymentRuntimeRequest{ + Deployment: key, + Event: &schemapb.ModuleRuntimeEvent{ + DeploymentKey: key, + Scaling: &schemapb.ModuleRuntimeScaling{MinReplicas: 0}, + }, + })) + if err != nil { + return fmt.Errorf("failed to kill deployment: %w", err) + } + return nil } func loadProtoSchema(projectConfig projectconfig.Config, config moduleconfig.AbsModuleConfig) (*schemapb.Module, error) { diff --git a/internal/buildengine/engine.go b/internal/buildengine/engine.go index 129c95b386..d153d7e321 100644 --- a/internal/buildengine/engine.go +++ b/internal/buildengine/engine.go @@ -81,19 +81,20 @@ func (autoRebuildCompletedEvent) rebuildEvent() {} // Engine for building a set of modules. type Engine struct { - client DeployClient - schemaSource schemaeventsource.EventSource - moduleMetas *xsync.MapOf[string, moduleMeta] - projectConfig projectconfig.Config - moduleDirs []string - watcher *watch.Watcher // only watches for module toml changes - controllerSchema *xsync.MapOf[string, *schema.Module] - schemaChanges *pubsub.Topic[schemaeventsource.Event] - cancel context.CancelCauseFunc - parallelism int - modulesToBuild *xsync.MapOf[string, bool] - buildEnv []string - startTime optional.Option[time.Time] + deployClient DeployClient + schemaServiceClient SchemaServiceClient + schemaSource schemaeventsource.EventSource + moduleMetas *xsync.MapOf[string, moduleMeta] + projectConfig projectconfig.Config + moduleDirs []string + watcher *watch.Watcher // only watches for module toml changes + controllerSchema *xsync.MapOf[string, *schema.Module] + schemaChanges *pubsub.Topic[schemaeventsource.Event] + cancel context.CancelCauseFunc + parallelism int + modulesToBuild *xsync.MapOf[string, bool] + buildEnv []string + startTime optional.Option[time.Time] // events coming in from plugins pluginEvents chan languageplugin.PluginEvent @@ -149,29 +150,32 @@ func WithStartTime(startTime time.Time) Option { // "dirs" are directories to scan for local modules. func New( ctx context.Context, - client DeployClient, + deployClient DeployClient, + schemaServiceClient SchemaServiceClient, schemaSource schemaeventsource.EventSource, projectConfig projectconfig.Config, moduleDirs []string, updatesEndpoint *url.URL, options ...Option, ) (*Engine, error) { - ctx = rpc.ContextWithClient(ctx, client) + ctx = log.ContextWithLogger(ctx, log.FromContext(ctx).Scope("build-engine")) + ctx = rpc.ContextWithClient(rpc.ContextWithClient(ctx, deployClient), schemaServiceClient) e := &Engine{ - client: client, - schemaSource: schemaSource, - projectConfig: projectConfig, - moduleDirs: moduleDirs, - moduleMetas: xsync.NewMapOf[string, moduleMeta](), - watcher: watch.NewWatcher(optional.Some(projectConfig.WatchModulesLockPath()), "ftl.toml"), - controllerSchema: xsync.NewMapOf[string, *schema.Module](), - schemaChanges: pubsub.New[schemaeventsource.Event](), - pluginEvents: make(chan languageplugin.PluginEvent, 128), - parallelism: runtime.NumCPU(), - modulesToBuild: xsync.NewMapOf[string, bool](), - rebuildEvents: make(chan rebuildEvent, 128), - rawEngineUpdates: make(chan *buildenginepb.EngineEvent, 128), - EngineUpdates: pubsub.New[*buildenginepb.EngineEvent](), + deployClient: deployClient, + schemaServiceClient: schemaServiceClient, + schemaSource: schemaSource, + projectConfig: projectConfig, + moduleDirs: moduleDirs, + moduleMetas: xsync.NewMapOf[string, moduleMeta](), + watcher: watch.NewWatcher(optional.Some(projectConfig.WatchModulesLockPath()), "ftl.toml"), + controllerSchema: xsync.NewMapOf[string, *schema.Module](), + schemaChanges: pubsub.New[schemaeventsource.Event](), + pluginEvents: make(chan languageplugin.PluginEvent, 128), + parallelism: runtime.NumCPU(), + modulesToBuild: xsync.NewMapOf[string, bool](), + rebuildEvents: make(chan rebuildEvent, 128), + rawEngineUpdates: make(chan *buildenginepb.EngineEvent, 128), + EngineUpdates: pubsub.New[*buildenginepb.EngineEvent](), } for _, option := range options { option(e) @@ -227,7 +231,7 @@ func New( if err := wg.Wait(); err != nil { return nil, err //nolint:wrapcheck } - if client == nil { + if deployClient == nil || schemaServiceClient == nil { return e, nil } e.startSchemaSync(ctx) @@ -260,10 +264,13 @@ func (e *Engine) startSchemaSync(ctx context.Context) { func (e *Engine) processEvent(event schemaeventsource.Event) { switch event := event.(type) { case schemaeventsource.EventUpsert: + // TODO: timing issue? Changeset updates modules, then canonical deployment is updated? edge case... e.controllerSchema.Store(event.Module.Name, event.Module) case schemaeventsource.EventRemove: - e.controllerSchema.Delete(event.Module.Name) + e.controllerSchema.Delete(event.Module) + + case schemaeventsource.EventChangesetEnded, schemaeventsource.EventChangesetStarted: } e.schemaChanges.Publish(event) } @@ -347,75 +354,6 @@ func (e *Engine) Each(fn func(Module) error) (err error) { return } -// Deploy attempts to deploy all (already compiled) local modules. -// -// If waitForDeployOnline is true, this function will block until all deployments are online. -func (e *Engine) Deploy(ctx context.Context, replicas int32, waitForDeployOnline bool) error { - graph, err := e.Graph(e.Modules()...) - if err != nil { - return err - } - - groups, err := TopologicalSort(graph) - if err != nil { - return fmt.Errorf("topological sort failed: %w", err) - } - - for _, group := range groups { - deployGroup, ctx := errgroup.WithContext(ctx) - for _, moduleName := range group { - if moduleName == "builtin" { - continue - } - deployGroup.Go(func() error { - meta, ok := e.moduleMetas.Load(moduleName) - if !ok { - return fmt.Errorf("module %q not found", moduleName) - } - if len(meta.module.Deploy) == 0 { - return fmt.Errorf("no files found to deploy for %q", moduleName) - } - e.rawEngineUpdates <- &buildenginepb.EngineEvent{ - Timestamp: timestamppb.Now(), - Event: &buildenginepb.EngineEvent_ModuleDeployStarted{ - ModuleDeployStarted: &buildenginepb.ModuleDeployStarted{ - Module: moduleName, - }, - }, - } - err := Deploy(ctx, e.projectConfig, meta.module, meta.module.Deploy, replicas, waitForDeployOnline, e.client) - if err != nil { - e.rawEngineUpdates <- &buildenginepb.EngineEvent{ - Timestamp: timestamppb.Now(), - Event: &buildenginepb.EngineEvent_ModuleDeployFailed{ - ModuleDeployFailed: &buildenginepb.ModuleDeployFailed{ - Module: moduleName, - Errors: &langpb.ErrorList{ - Errors: errorToLangError(err), - }, - }, - }, - } - return err - } - e.rawEngineUpdates <- &buildenginepb.EngineEvent{ - Timestamp: timestamppb.Now(), - Event: &buildenginepb.EngineEvent_ModuleDeploySuccess{ - ModuleDeploySuccess: &buildenginepb.ModuleDeploySuccess{ - Module: moduleName, - }, - }, - } - return nil - }) - } - if err := deployGroup.Wait(); err != nil { - return fmt.Errorf("deploy failed: %w", err) - } - } - return nil -} - // Modules returns the names of all modules. func (e *Engine) Modules() []string { var moduleNames []string @@ -479,9 +417,11 @@ func (e *Engine) watchForModuleChanges(ctx context.Context, period time.Duration case event := <-watchEvents: switch event := event.(type) { case watch.WatchEventModuleAdded: + logger.Debugf("Module %q added", event.Config.Module) config := event.Config if _, exists := e.moduleMetas.Load(config.Module); !exists { meta, err := e.newModuleMeta(ctx, config) + logger.Debugf("generated meta for %q", event.Config.Module) if err != nil { logger.Errorf(err, "could not add module %s", config.Module) continue @@ -495,10 +435,11 @@ func (e *Engine) watchForModuleChanges(ctx context.Context, period time.Duration }, }, } + logger.Debugf("calling build and deploy %q", event.Config.Module) _ = e.BuildAndDeploy(ctx, 1, true, config.Module) //nolint:errcheck } case watch.WatchEventModuleRemoved: - err := terminateModuleDeployment(ctx, e.client, event.Config.Module) + err := terminateModuleDeployment(ctx, e.deployClient, e.schemaServiceClient, event.Config.Module) if err != nil { logger.Errorf(err, "terminate %s failed", event.Config.Module) } @@ -569,6 +510,8 @@ func (e *Engine) watchForModuleChanges(ctx context.Context, period time.Duration logger.Infof("%s's schema changed; processing %s", event.Module.Name, strings.Join(dependentModuleNames, ", ")) _ = e.BuildAndDeploy(ctx, 1, true, dependentModuleNames...) //nolint:errcheck } + default: + } case event := <-e.rebuildEvents: @@ -586,30 +529,70 @@ func (e *Engine) watchForModuleChanges(ctx context.Context, period time.Duration // Batch generate stubs for all auto rebuilds // // This is normally part of each group in the build topology, but auto rebuilds do not go through that flow - modulesToStub := map[string]*schema.Module{} + builtModules := map[string]*schema.Module{} for _, event := range events { event, ok := event.(autoRebuildCompletedEvent) if !ok { continue } - modulesToStub[event.module] = event.schema + builtModules[event.module] = event.schema } - if len(modulesToStub) > 0 { + if len(builtModules) > 0 { metasMap := map[string]moduleMeta{} e.moduleMetas.Range(func(name string, meta moduleMeta) bool { metasMap[name] = meta return true }) - err = GenerateStubs(ctx, e.projectConfig.Root(), maps.Values(modulesToStub), metasMap) + err = GenerateStubs(ctx, e.projectConfig.Root(), maps.Values(builtModules), metasMap) if err != nil { logger.Errorf(err, "Failed to generate stubs") } // Sync references to stubs if needed by the runtime - err = e.syncNewStubReferences(ctx, modulesToStub, metasMap) + err = e.syncNewStubReferences(ctx, builtModules, metasMap) if err != nil { logger.Errorf(err, "Failed to sync stub references") } + + // Deploy modules + var modulesToDeploy = []Module{} + for _, module := range builtModules { + moduleToDeploy, ok := e.moduleMetas.Load(module.Name) + if ok { + modulesToDeploy = append(modulesToDeploy, moduleToDeploy.module) + } + e.rawEngineUpdates <- &buildenginepb.EngineEvent{ + Event: &buildenginepb.EngineEvent_ModuleDeployStarted{ + ModuleDeployStarted: &buildenginepb.ModuleDeployStarted{ + Module: module.Name, + }, + }, + } + } + if err := Deploy(ctx, e.projectConfig, modulesToDeploy, 1, true, e.deployClient, e.schemaServiceClient); err != nil { + for _, module := range modulesToDeploy { + e.rawEngineUpdates <- &buildenginepb.EngineEvent{ + Event: &buildenginepb.EngineEvent_ModuleDeployFailed{ + ModuleDeployFailed: &buildenginepb.ModuleDeployFailed{ + Module: module.Config.Module, + Errors: &langpb.ErrorList{ + Errors: errorToLangError(err), + }, + }, + }, + } + } + continue + } + for _, module := range modulesToDeploy { + e.rawEngineUpdates <- &buildenginepb.EngineEvent{ + Event: &buildenginepb.EngineEvent_ModuleDeploySuccess{ + ModuleDeploySuccess: &buildenginepb.ModuleDeploySuccess{ + Module: module.Config.Module, + }, + }, + } + } } // Batch together all new builds requested @@ -804,14 +787,36 @@ func (e *Engine) getDependentModuleNames(moduleName string) []string { } // BuildAndDeploy attempts to build and deploy all local modules. -func (e *Engine) BuildAndDeploy(ctx context.Context, replicas int32, waitForDeployOnline bool, moduleNames ...string) error { +func (e *Engine) BuildAndDeploy(ctx context.Context, replicas int32, waitForDeployOnline bool, moduleNames ...string) (err error) { logger := log.FromContext(ctx) if len(moduleNames) == 0 { moduleNames = e.Modules() } + if len(moduleNames) == 0 { + return nil + } + + defer func() { + if err == nil { + return + } + pendingInitialBuilds := []string{} + e.modulesToBuild.Range(func(name string, value bool) bool { + if value { + pendingInitialBuilds = append(pendingInitialBuilds, name) + } + return true + }) + + // Print out all modules that have yet to build if there are any errors + if len(pendingInitialBuilds) > 0 { + logger.Infof("Modules waiting to build: %s", strings.Join(pendingInitialBuilds, ", ")) + } + }() buildGroup := errgroup.Group{} + modulesToDeploy := []Module{} buildGroup.Go(func() error { return e.buildWithCallback(ctx, func(buildCtx context.Context, module Module) error { e.modulesToBuild.Store(module.Config.Module, false) @@ -823,50 +828,44 @@ func (e *Engine) BuildAndDeploy(ctx context.Context, replicas int32, waitForDepl }, }, } - err := Deploy(buildCtx, e.projectConfig, module, module.Deploy, replicas, true, e.client) - if err != nil { - e.rawEngineUpdates <- &buildenginepb.EngineEvent{ - Timestamp: timestamppb.Now(), - Event: &buildenginepb.EngineEvent_ModuleDeployFailed{ - ModuleDeployFailed: &buildenginepb.ModuleDeployFailed{ - Module: module.Config.Module, - Errors: &langpb.ErrorList{ - Errors: errorToLangError(err), - }, - }, - }, - } - return err - } - e.rawEngineUpdates <- &buildenginepb.EngineEvent{ - Timestamp: timestamppb.Now(), - Event: &buildenginepb.EngineEvent_ModuleDeploySuccess{ - ModuleDeploySuccess: &buildenginepb.ModuleDeploySuccess{ - Module: module.Config.Module, - }, - }, - } + modulesToDeploy = append(modulesToDeploy, module) return nil }, moduleNames...) }) - // Wait for all build and deploy attempts to complete + // Wait for all build attempts to complete buildErr := buildGroup.Wait() + if buildErr != nil { + return fmt.Errorf("build failed: %w", buildErr) + } - pendingInitialBuilds := []string{} - e.modulesToBuild.Range(func(name string, value bool) bool { - if value { - pendingInitialBuilds = append(pendingInitialBuilds, name) + err = Deploy(ctx, e.projectConfig, modulesToDeploy, replicas, waitForDeployOnline, e.deployClient, e.schemaServiceClient) + if err != nil { + // TODO: redesign deploy events around changesets + for _, module := range modulesToDeploy { + e.rawEngineUpdates <- &buildenginepb.EngineEvent{ + Event: &buildenginepb.EngineEvent_ModuleDeployFailed{ + ModuleDeployFailed: &buildenginepb.ModuleDeployFailed{ + Module: module.Config.Module, + Errors: &langpb.ErrorList{ + Errors: errorToLangError(err), + }, + }, + }, + } } - return true - }) - - // Print out all modules that have yet to build if there are any errors - if len(pendingInitialBuilds) > 0 { - logger.Infof("Modules waiting to build: %s", strings.Join(pendingInitialBuilds, ", ")) + return err } - - return buildErr + for _, module := range modulesToDeploy { + e.rawEngineUpdates <- &buildenginepb.EngineEvent{ + Event: &buildenginepb.EngineEvent_ModuleDeploySuccess{ + ModuleDeploySuccess: &buildenginepb.ModuleDeploySuccess{ + Module: module.Config.Module, + }, + }, + } + } + return nil } type buildCallback func(ctx context.Context, module Module) error @@ -1149,7 +1148,7 @@ func (e *Engine) gatherSchemas( func (e *Engine) syncNewStubReferences(ctx context.Context, newModules map[string]*schema.Module, metasMap map[string]moduleMeta) error { fullSchema := &schema.Schema{Modules: maps.Values(newModules)} - for _, module := range e.schemaSource.View().Modules { + for _, module := range e.schemaSource.LatestView().Modules { if _, ok := newModules[module.Name]; !ok { fullSchema.Modules = append(fullSchema.Modules, module) } @@ -1259,6 +1258,9 @@ func (e *Engine) watchForPluginEvents(originalCtx context.Context) { } continue } + meta.module.Deploy = deploy + e.moduleMetas.Store(event.ModuleName(), meta) + e.rawEngineUpdates <- &buildenginepb.EngineEvent{ Timestamp: timestamppb.Now(), Event: &buildenginepb.EngineEvent_ModuleBuildSuccess{ @@ -1269,39 +1271,6 @@ func (e *Engine) watchForPluginEvents(originalCtx context.Context) { }, } e.rebuildEvents <- autoRebuildCompletedEvent{module: event.ModuleName(), schema: moduleSch} - - e.rawEngineUpdates <- &buildenginepb.EngineEvent{ - Timestamp: timestamppb.Now(), - Event: &buildenginepb.EngineEvent_ModuleDeployStarted{ - ModuleDeployStarted: &buildenginepb.ModuleDeployStarted{ - Module: event.Module, - }, - }, - } - - if err := Deploy(ctx, e.projectConfig, meta.module, deploy, 1, true, e.client); err != nil { - e.rawEngineUpdates <- &buildenginepb.EngineEvent{ - Timestamp: timestamppb.Now(), - Event: &buildenginepb.EngineEvent_ModuleDeployFailed{ - ModuleDeployFailed: &buildenginepb.ModuleDeployFailed{ - Module: event.Module, - Errors: &langpb.ErrorList{ - Errors: errorToLangError(err), - }, - }, - }, - } - continue - } - - e.rawEngineUpdates <- &buildenginepb.EngineEvent{ - Timestamp: timestamppb.Now(), - Event: &buildenginepb.EngineEvent_ModuleDeploySuccess{ - ModuleDeploySuccess: &buildenginepb.ModuleDeploySuccess{ - Module: event.Module, - }, - }, - } } case languageplugin.PluginDiedEvent: e.moduleMetas.Range(func(name string, meta moduleMeta) bool { diff --git a/internal/buildengine/engine_test.go b/internal/buildengine/engine_test.go index 17547a1993..e3f8e3c96f 100644 --- a/internal/buildengine/engine_test.go +++ b/internal/buildengine/engine_test.go @@ -31,7 +31,7 @@ func TestGraph(t *testing.T) { endpoint, err := url.Parse("http://localhost:8900") assert.NoError(t, err) - engine, err := buildengine.New(ctx, nil, schemaeventsource.NewUnattached(), projConfig, []string{"testdata/alpha", "testdata/other", "testdata/another"}, endpoint) + engine, err := buildengine.New(ctx, nil, nil, schemaeventsource.NewUnattached(), projConfig, []string{"testdata/alpha", "testdata/other", "testdata/another"}, endpoint) assert.NoError(t, err) defer engine.Close() diff --git a/internal/buildengine/updates.go b/internal/buildengine/updates.go index cd60f75a18..5d1818b69e 100644 --- a/internal/buildengine/updates.go +++ b/internal/buildengine/updates.go @@ -78,7 +78,12 @@ func (u *updatesService) Ping(context.Context, *connect.Request[ftlv1.PingReques } func (u *updatesService) StreamEngineEvents(ctx context.Context, req *connect.Request[buildenginepb.StreamEngineEventsRequest], stream *connect.ServerStream[buildenginepb.StreamEngineEventsResponse]) error { - // Only send cached events if replay_history is true + // First subscribe to new events to avoid missing any + events := make(chan *buildenginepb.EngineEvent, 64) + u.engine.EngineUpdates.Subscribe(events) + defer u.engine.EngineUpdates.Unsubscribe(events) + + // Then send cached events if replay_history is true if req.Msg.ReplayHistory { u.lock.RLock() for _, event := range u.events { @@ -93,11 +98,7 @@ func (u *updatesService) StreamEngineEvents(ctx context.Context, req *connect.Re u.lock.RUnlock() } - // Then subscribe to new events - events := make(chan *buildenginepb.EngineEvent, 64) - u.engine.EngineUpdates.Subscribe(events) - defer u.engine.EngineUpdates.Unsubscribe(events) - + // Process new events for event := range channels.IterContext(ctx, events) { // Add timestamp to event if event.Timestamp == nil { diff --git a/internal/flock/flock.go b/internal/flock/flock.go index 48ae9303df..6ea13e8b8d 100644 --- a/internal/flock/flock.go +++ b/internal/flock/flock.go @@ -10,6 +10,8 @@ import ( "time" "golang.org/x/sys/unix" + + "github.com/block/ftl/internal/log" ) var ErrLocked = errors.New("locked") @@ -18,6 +20,8 @@ var ErrLocked = errors.New("locked") // // The lock is released when the returned function is called. func Acquire(ctx context.Context, path string, timeout time.Duration) (release func() error, err error) { + logger := log.FromContext(ctx) + logger.Tracef("Acquiring lock %s", path) absPath, err := filepath.Abs(path) if err != nil { return nil, err @@ -26,7 +30,11 @@ func Acquire(ctx context.Context, path string, timeout time.Duration) (release f for { release, err := acquire(absPath) if err == nil { - return release, nil + logger.Tracef("Locked %s", path) + return func() error { + logger.Tracef("Releasing lock %s", path) + return release() + }, nil } if !errors.Is(err, ErrLocked) { return nil, fmt.Errorf("failed to acquire lock %s: %w", absPath, err) diff --git a/internal/flock/flock_test.go b/internal/flock/flock_test.go index 1db2e5807b..64adc8e6cf 100644 --- a/internal/flock/flock_test.go +++ b/internal/flock/flock_test.go @@ -6,12 +6,14 @@ import ( "testing" "github.com/alecthomas/assert/v2" + + "github.com/block/ftl/internal/log" ) func TestFlock(t *testing.T) { dir := t.TempDir() lockfile := filepath.Join(dir, "lock") - ctx := context.Background() + ctx := log.ContextWithNewDefaultLogger(context.Background()) release, err := Acquire(ctx, lockfile, 0) assert.NoError(t, err) diff --git a/internal/integration/actions.go b/internal/integration/actions.go index fbb1a3544e..4db2b8fce9 100644 --- a/internal/integration/actions.go +++ b/internal/integration/actions.go @@ -225,9 +225,6 @@ func Deploy(module string) Action { return Chain( func(t testing.TB, ic TestContext) { args := []string{"deploy", "-t", "4m"} - if ic.Provisioner != nil { - args = append(args, "--provisioner-endpoint=http://localhost:8893") - } if ic.kubeClient.Ok() { args = append(args, "--build-env", "GOOS=linux", "--build-env", "GOARCH=amd64", "--build-env", "CGO_ENABLED=0") } diff --git a/internal/integration/harness.go b/internal/integration/harness.go index 36cf625376..36674a66b2 100644 --- a/internal/integration/harness.go +++ b/internal/integration/harness.go @@ -31,7 +31,6 @@ import ( "sigs.k8s.io/yaml" "github.com/block/ftl/backend/protos/xyz/block/ftl/console/v1/consolepbconnect" - provisionerconnect "github.com/block/ftl/backend/protos/xyz/block/ftl/provisioner/v1beta1/provisionerpbconnect" "github.com/block/ftl/backend/protos/xyz/block/ftl/timeline/v1/timelinepbconnect" ftlv1 "github.com/block/ftl/backend/protos/xyz/block/ftl/v1" "github.com/block/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" @@ -325,7 +324,6 @@ func run(t *testing.T, actionsOrOptions ...ActionOrOption) { var controller ftlv1connect.ControllerServiceClient var console consolepbconnect.ConsoleServiceClient - var provisioner provisionerconnect.ProvisionerServiceClient var schema ftlv1connect.SchemaServiceClient if opts.startController { Infof("Starting ftl cluster") @@ -355,9 +353,6 @@ func run(t *testing.T, actionsOrOptions ...ActionOrOption) { console = rpc.Dial(consolepbconnect.NewConsoleServiceClient, "http://localhost:8899", log.Debug) schema = rpc.Dial(ftlv1connect.NewSchemaServiceClient, "http://localhost:8897", log.Debug) } - if opts.startProvisioner { - provisioner = rpc.Dial(provisionerconnect.NewProvisionerServiceClient, "http://localhost:8893", log.Debug) - } testData := filepath.Join(cwd, "testdata", language) if opts.testDataDir != "" { @@ -391,16 +386,6 @@ func run(t *testing.T, actionsOrOptions ...ActionOrOption) { }, time.Minute*2) } - if opts.startProvisioner { - ic.Provisioner = provisioner - - Infof("Waiting for provisioner to be ready") - ic.AssertWithRetry(t, func(t testing.TB, ic TestContext) { - _, err := ic.Provisioner.Ping(ic, connect.NewRequest(&ftlv1.PingRequest{})) - assert.NoError(t, err) - }) - } - if opts.startTimeline && !opts.kube { ic.Timeline = rpc.Dial(timelinepbconnect.NewTimelineServiceClient, "http://localhost:8894", log.Debug) @@ -524,12 +509,11 @@ type TestContext struct { kubeNamespace string devMode bool - Controller ftlv1connect.ControllerServiceClient - Provisioner provisionerconnect.ProvisionerServiceClient - Schema ftlv1connect.SchemaServiceClient - Console consolepbconnect.ConsoleServiceClient - Verbs ftlv1connect.VerbServiceClient - Timeline timelinepbconnect.TimelineServiceClient + Controller ftlv1connect.ControllerServiceClient + Schema ftlv1connect.SchemaServiceClient + Console consolepbconnect.ConsoleServiceClient + Verbs ftlv1connect.VerbServiceClient + Timeline timelinepbconnect.TimelineServiceClient realT *testing.T } diff --git a/internal/key/changeset_key.go b/internal/key/changeset_key.go new file mode 100644 index 0000000000..4f1033ea27 --- /dev/null +++ b/internal/key/changeset_key.go @@ -0,0 +1,40 @@ +package key + +import ( + "database/sql" + "database/sql/driver" + "encoding" + "errors" +) + +type Changeset = KeyType[ChangesetPayload, *ChangesetPayload] + +var _ interface { + sql.Scanner + driver.Valuer + encoding.TextUnmarshaler + encoding.TextMarshaler +} = (*Changeset)(nil) + +func NewChangesetKey() Changeset { return newKey[ChangesetPayload]() } +func ParseChangesetKey(key string) (Changeset, error) { + return parseKey[ChangesetPayload](key) +} + +type ChangesetPayload struct { + // Content is just included to make the payload non-empty. + // Non empty payloads do not work with go2proto + Content string +} + +var _ KeyPayload = (*ChangesetPayload)(nil) + +func (c *ChangesetPayload) Kind() string { return "chs" } +func (c *ChangesetPayload) String() string { return "" } +func (c *ChangesetPayload) Parse(parts []string) error { + if len(parts) != 0 { + return errors.New("expected no content") + } + return nil +} +func (c *ChangesetPayload) RandomBytes() int { return 10 } diff --git a/internal/routing/routing.go b/internal/routing/routing.go index edea919d7c..bf639ee7b5 100644 --- a/internal/routing/routing.go +++ b/internal/routing/routing.go @@ -29,7 +29,7 @@ type RouteTable struct { func New(ctx context.Context, changes schemaeventsource.EventSource) *RouteTable { r := &RouteTable{ - routes: atomic.New(extractRoutes(ctx, changes.View())), + routes: atomic.New(extractRoutes(ctx, changes.CanonicalView())), changeNotification: pubsub.New[string](), } go r.run(ctx, changes) @@ -39,7 +39,7 @@ func New(ctx context.Context, changes schemaeventsource.EventSource) *RouteTable func (r *RouteTable) run(ctx context.Context, changes schemaeventsource.EventSource) { for range channels.IterContext(ctx, changes.Events()) { old := r.routes.Load() - routes := extractRoutes(ctx, changes.View()) + routes := extractRoutes(ctx, changes.CanonicalView()) for module, rd := range old.moduleToDeployment { if old.byDeployment[rd.String()] != routes.byDeployment[rd.String()] { r.changeNotification.Publish(module) @@ -103,10 +103,14 @@ func extractRoutes(ctx context.Context, sch *schema.Schema) RouteView { moduleToDeployment := make(map[string]key.Deployment, len(sch.Modules)) byDeployment := make(map[string]*url.URL, len(sch.Modules)) for _, module := range sch.Modules { - if module.GetRuntime().GetDeployment().GetDeploymentKey().IsZero() { + if module.GetRuntime() == nil { continue } rt := module.Runtime.Deployment + if rt.Endpoint == "" { + logger.Debugf("Skipping route for %s/%s as it is not ready yet", module.Name, rt.DeploymentKey) + continue + } u, err := url.Parse(rt.Endpoint) if err != nil { logger.Warnf("Failed to parse endpoint URL for module %q: %v", module.Name, err) diff --git a/internal/routing/verb_routing.go b/internal/routing/verb_routing.go index ca8f9a4a6c..92c96abc89 100644 --- a/internal/routing/verb_routing.go +++ b/internal/routing/verb_routing.go @@ -39,7 +39,7 @@ type VerbCallRouter struct { func (s *VerbCallRouter) Call(ctx context.Context, req *connect.Request[ftlv1.CallRequest]) (*connect.Response[ftlv1.CallResponse], error) { start := time.Now() - client, deployment, ok := s.LookupClient(req.Msg.Verb.Module) + client, deployment, ok := s.LookupClient(ctx, req.Msg.Verb.Module) if !ok { observability.Calls.Request(ctx, req.Msg.Verb, start, optional.Some("failed to find deployment for module")) return nil, connect.NewError(connect.CodeNotFound, fmt.Errorf("deployment not found")) @@ -95,8 +95,10 @@ func NewVerbRouterFromTable(ctx context.Context, routeTable *RouteTable, timelin timelineClient: timelineClient, } routeUpdates := svc.routingTable.Subscribe() + logger := log.FromContext(ctx) go func() { for module := range channels.IterContext(ctx, routeUpdates) { + logger.Debugf("Removing client for module %s", module) svc.moduleClients.Delete(module) } }() @@ -106,7 +108,8 @@ func NewVerbRouter(ctx context.Context, changes schemaeventsource.EventSource, t return NewVerbRouterFromTable(ctx, New(ctx, changes), timelineClient) } -func (s *VerbCallRouter) LookupClient(module string) (client ftlv1connect.VerbServiceClient, deployment key.Deployment, ok bool) { +func (s *VerbCallRouter) LookupClient(ctx context.Context, module string) (client ftlv1connect.VerbServiceClient, deployment key.Deployment, ok bool) { + logger := log.FromContext(ctx) current := s.routingTable.Current() deployment, ok = current.GetDeployment(module).Get() if !ok { @@ -116,8 +119,10 @@ func (s *VerbCallRouter) LookupClient(module string) (client ftlv1connect.VerbSe res, _ := s.moduleClients.LoadOrCompute(module, func() optional.Option[ftlv1connect.VerbServiceClient] { route, ok := current.Get(deployment).Get() if !ok { + logger.Debugf("Failed to find route for deployment %s", deployment) return optional.None[ftlv1connect.VerbServiceClient]() } + logger.Debugf("Found route for deployment %s: %s", deployment, route.String()) return optional.Some(rpc.Dial(ftlv1connect.NewVerbServiceClient, route.String(), log.Error)) }) diff --git a/internal/schema/schemaeventsource/schemaeventsource.go b/internal/schema/schemaeventsource/schemaeventsource.go index 0f7780df8f..7a00b5186c 100644 --- a/internal/schema/schemaeventsource/schemaeventsource.go +++ b/internal/schema/schemaeventsource/schemaeventsource.go @@ -15,6 +15,7 @@ import ( "github.com/block/ftl/backend/protos/xyz/block/ftl/v1/ftlv1connect" "github.com/block/ftl/common/reflect" "github.com/block/ftl/common/schema" + islices "github.com/block/ftl/common/slices" "github.com/block/ftl/internal/key" "github.com/block/ftl/internal/log" "github.com/block/ftl/internal/rpc" @@ -22,11 +23,39 @@ import ( // View is a read-only view of the schema. type View struct { - view *atomic.Value[*schema.Schema] + view *atomic.Value[*schema.Schema] + activeChangeset *atomic.Value[optional.Option[*schema.Changeset]] } -// Get returns the current schema. -func (v *View) Get() *schema.Schema { return v.view.Load() } +// GetCanonical returns the current canonical schema (ie: without any changes applied from active changesets) +func (v *View) GetCanonical() *schema.Schema { return v.view.Load() } + +// GetLatest returns the latest schema, by applying active deployments in changesetz to the canonical schema. +func (v *View) GetLatest() *schema.Schema { + return latestSchema(v.GetCanonical(), v.GetActiveChangeset()) +} + +// latest schema calculates the latest schema by applying active deployments in changeset to the canonical schema. +func latestSchema(canonical *schema.Schema, changeset optional.Option[*schema.Changeset]) *schema.Schema { + ch, ok := changeset.Get() + if !ok { + return canonical + } + sch := reflect.DeepCopy(canonical) + for _, module := range ch.Modules { + if i := slices.IndexFunc(sch.Modules, func(m *schema.Module) bool { return m.Name == module.Name }); i != -1 { + sch.Modules[i] = module + } else { + sch.Modules = append(sch.Modules, module) + } + } + return sch +} + +// GetActiveChangeset returns the current active changeset. +func (v *View) GetActiveChangeset() optional.Option[*schema.Changeset] { + return v.activeChangeset.Load() +} // Event represents a change in the schema. // @@ -34,46 +63,123 @@ func (v *View) Get() *schema.Schema { return v.view.Load() } type Event interface { // More returns true if there are more changes to come as part of the initial sync. More() bool - // Schema is the READ-ONLY full schema after this event was applied. - Schema() *schema.Schema + // GetCanonical is the READ-ONLY canonical schema after this event was applied. + GetCanonical() *schema.Schema + // GetLatest is the READ-ONLY latest schema, by applying active deployments in changesetz to the canonical schema. + GetLatest() *schema.Schema + // ActiveChangeset is the READ-ONLY active changeset after this event was applied. + ActiveChangeset() optional.Option[*schema.Changeset] + finalize(canonical *schema.Schema, activeChangeset optional.Option[*schema.Changeset]) Event change() } -// EventRemove represents that a deployment (or module) was removed. +// EventRemove represents that a deployment (or module) was removed from the active canonical schema. +// This is different than when a deployment is replaced by a changeset successfully being committed. See EventChangesetEnded type EventRemove struct { // None for builtin modules. Deployment optional.Option[key.Deployment] - Module *schema.Module + Module string - schema *schema.Schema - more bool + schema *schema.Schema + activeChangeset optional.Option[*schema.Changeset] + more bool } -func (c EventRemove) change() {} -func (c EventRemove) More() bool { return c.more } -func (c EventRemove) Schema() *schema.Schema { return c.schema } +func (c EventRemove) change() {} +func (c EventRemove) More() bool { return c.more } +func (c EventRemove) GetCanonical() *schema.Schema { return c.schema } +func (c EventRemove) GetLatest() *schema.Schema { + return latestSchema(c.schema, c.activeChangeset) +} +func (c EventRemove) ActiveChangeset() optional.Option[*schema.Changeset] { return c.activeChangeset } +func (c EventRemove) finalize(sch *schema.Schema, activeChangeset optional.Option[*schema.Changeset]) Event { + c.schema = sch + c.activeChangeset = activeChangeset + return c +} // EventUpsert represents that a module has been added or updated in the schema. type EventUpsert struct { - // schema is the READ-ONLY full schema after this event was applied. - schema *schema.Schema - // None for builtin modules. - Deployment optional.Option[key.Deployment] - Module *schema.Module + Module *schema.Module + Changeset optional.Option[key.Changeset] + + schema *schema.Schema + activeChangeset optional.Option[*schema.Changeset] + more bool +} - more bool +func (c EventUpsert) change() {} +func (c EventUpsert) More() bool { return c.more } +func (c EventUpsert) GetCanonical() *schema.Schema { return c.schema } +func (c EventUpsert) GetLatest() *schema.Schema { + return latestSchema(c.schema, c.activeChangeset) +} +func (c EventUpsert) ActiveChangeset() optional.Option[*schema.Changeset] { return c.activeChangeset } +func (c EventUpsert) finalize(sch *schema.Schema, activeChangeset optional.Option[*schema.Changeset]) Event { + c.schema = sch + c.activeChangeset = activeChangeset + return c } -func (c EventUpsert) change() {} -func (c EventUpsert) More() bool { return c.more } -func (c EventUpsert) Schema() *schema.Schema { return c.schema } +type EventChangesetStarted struct { + Changeset *schema.Changeset + + schema *schema.Schema + activeChangeset optional.Option[*schema.Changeset] + more bool +} + +func (c EventChangesetStarted) change() {} +func (c EventChangesetStarted) More() bool { return c.more } +func (c EventChangesetStarted) GetCanonical() *schema.Schema { return c.schema } +func (c EventChangesetStarted) GetLatest() *schema.Schema { + return latestSchema(c.schema, c.activeChangeset) +} +func (c EventChangesetStarted) ActiveChangeset() optional.Option[*schema.Changeset] { + return c.activeChangeset +} +func (c EventChangesetStarted) finalize(sch *schema.Schema, activeChangeset optional.Option[*schema.Changeset]) Event { + c.schema = sch + c.activeChangeset = activeChangeset + return c +} + +type EventChangesetEnded struct { + Key key.Changeset + Success bool + Error string + + // ReplacedDeloyments contains each deployment that was superseeded by this changeset + // If Success is false it is empty + ReplacedDeloyments []key.Deployment + + schema *schema.Schema + activeChangeset optional.Option[*schema.Changeset] + more bool +} + +func (c EventChangesetEnded) change() {} +func (c EventChangesetEnded) More() bool { return c.more } +func (c EventChangesetEnded) GetCanonical() *schema.Schema { return c.schema } +func (c EventChangesetEnded) GetLatest() *schema.Schema { + return latestSchema(c.schema, c.activeChangeset) +} +func (c EventChangesetEnded) ActiveChangeset() optional.Option[*schema.Changeset] { + return c.activeChangeset +} +func (c EventChangesetEnded) finalize(sch *schema.Schema, activeChangeset optional.Option[*schema.Changeset]) Event { + c.schema = sch + c.activeChangeset = activeChangeset + return c +} // NewUnattached creates a new EventSource that is not attached to a SchemaService. func NewUnattached() EventSource { return EventSource{ events: make(chan Event, 1024), - view: atomic.New[*schema.Schema](&schema.Schema{}), + view: atomic.New(&schema.Schema{}), + activeChangeset: atomic.New(optional.None[*schema.Changeset]()), live: atomic.New[bool](false), initialSyncComplete: make(chan struct{}), } @@ -83,6 +189,7 @@ func NewUnattached() EventSource { type EventSource struct { events chan Event view *atomic.Value[*schema.Schema] + activeChangeset *atomic.Value[optional.Option[*schema.Changeset]] live *atomic.Value[bool] initialSyncComplete chan struct{} } @@ -102,7 +209,10 @@ func (e EventSource) ViewOnly() View { for range e.Events() { //nolint:revive } }() - return View{e.view} + return View{ + view: e.view, + activeChangeset: e.activeChangeset, + } } // Live returns true if the EventSource is connected to the SchemaService. @@ -121,8 +231,17 @@ func (e EventSource) WaitForInitialSync(ctx context.Context) bool { } } -// View is the materialised view of the schema from "Events". -func (e EventSource) View() *schema.Schema { return e.view.Load() } +// CanonicalView is the materialised view of the schema from "Events". +func (e EventSource) CanonicalView() *schema.Schema { return e.view.Load() } + +// LatestView is the materialised view of the schema from "Events" taking into account active deployments in changesets. +func (e EventSource) LatestView() *schema.Schema { + return latestSchema(e.view.Load(), e.activeChangeset.Load()) +} + +func (e EventSource) ActiveChangeset() optional.Option[*schema.Changeset] { + return e.activeChangeset.Load() +} // Publish an event to the EventSource. // @@ -131,24 +250,65 @@ func (e EventSource) View() *schema.Schema { return e.view.Load() } // // This is mostly useful in conjunction with NewUnattached, for testing. func (e EventSource) Publish(event Event) { - clone := reflect.DeepCopy(e.View()) switch event := event.(type) { case EventRemove: - clone.Modules = slices.DeleteFunc(clone.Modules, func(m *schema.Module) bool { return m.Name == event.Module.Name }) - event.schema = clone + clone := reflect.DeepCopy(e.CanonicalView()) + clone.Modules = slices.DeleteFunc(clone.Modules, func(m *schema.Module) bool { + if deploymentKey, ok := event.Deployment.Get(); ok { + return m.Runtime != nil && m.Runtime.Deployment != nil && m.Runtime.Deployment.DeploymentKey == deploymentKey + } + return m.Name == event.Module + }) e.view.Store(clone) - e.events <- event case EventUpsert: - if i := slices.IndexFunc(clone.Modules, func(m *schema.Module) bool { return m.Name == event.Module.Name }); i != -1 { - clone.Modules[i] = event.Module + clone := reflect.DeepCopy(e.CanonicalView()) + changeset := reflect.DeepCopy(e.ActiveChangeset()) + var modules []*schema.Module + if changesetKey, ok := event.Changeset.Get(); ok { + changeset, ok := changeset.Get() + if !ok || changeset.Key != changesetKey { + // Upsert is for a non active changeset + return + } + modules = changeset.Modules + } else { + modules = clone.Modules + } + if i := slices.IndexFunc(modules, func(m *schema.Module) bool { return m.Name == event.Module.Name }); i != -1 { + modules[i] = event.Module + } else { + modules = append(modules, event.Module) + } + if _, ok := event.Changeset.Get(); ok { + changeset.MustGet().Modules = modules } else { - clone.Modules = append(clone.Modules, event.Module) + clone.Modules = modules } - event.schema = clone e.view.Store(clone) - e.events <- event + e.activeChangeset.Store(changeset) + + case EventChangesetStarted: + if event.Changeset.State == schema.ChangesetStatePreparing { + e.activeChangeset.Store(optional.Some(event.Changeset)) + } + case EventChangesetEnded: + activeChangeset, ok := e.activeChangeset.Load().Get() + if !ok || activeChangeset.Key != event.Key { + break + } + if !event.Success { + e.activeChangeset.Store(optional.None[*schema.Changeset]()) + break + } + allDeps := islices.Map(islices.Filter(e.view.Load().Modules, func(module *schema.Module) bool { return !module.Builtin }), func(m *schema.Module) key.Deployment { return m.Runtime.Deployment.DeploymentKey }) + final := latestSchema(e.CanonicalView(), optional.Some(activeChangeset)) + removedDeps := islices.Filter(allDeps, func(d key.Deployment) bool { return slices.Index(event.ReplacedDeloyments, d) == -1 }) + event.ReplacedDeloyments = removedDeps + e.view.Store(final) } + event = event.finalize(e.CanonicalView(), e.ActiveChangeset()) + e.events <- event } // New creates a new EventSource that pulls schema changes from the SchemaService into an event channel and a @@ -170,46 +330,94 @@ func New(ctx context.Context, client ftlv1connect.SchemaServiceClient) EventSour go rpc.RetryStreamingServerStream(ctx, "schema-sync", backoff.Backoff{}, &ftlv1.PullSchemaRequest{}, client.PullSchema, func(_ context.Context, resp *ftlv1.PullSchemaResponse) error { out.live.Store(true) - sch, err := schema.ValidatedModuleFromProto(resp.Schema) - if err != nil { - return fmt.Errorf("invalid module: %w", err) - } - var someDeploymentKey optional.Option[key.Deployment] - if resp.DeploymentKey != nil { - deploymentKey, err := key.ParseDeploymentKey(resp.GetDeploymentKey()) - if err != nil { - return fmt.Errorf("schema-sync: invalid deployment key %q: %w", resp.GetDeploymentKey(), err) - } - someDeploymentKey = optional.Some(deploymentKey) - } // resp.More can become true again if the streaming client reconnects, but we don't want downstream to have to // care about a new initial sync restarting. more = more && resp.More - switch resp.ChangeType { - case ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_REMOVED: - if !resp.ModuleRemoved { - return nil + + switch event := resp.Event.(type) { + case *ftlv1.PullSchemaResponse_ChangesetCreated_: + changeset, err := schema.ChangesetFromProto(event.ChangesetCreated.Changeset) + if err != nil { + return fmt.Errorf("invalid changeset: %w", err) } - logger.Debugf("Module %s removed", sch.Name) - event := EventRemove{ - Deployment: someDeploymentKey, - Module: sch, - more: more, + out.Publish(EventChangesetStarted{ + Changeset: changeset, + more: more, + }) + case *ftlv1.PullSchemaResponse_ChangesetFailed_: + key, err := key.ParseChangesetKey(event.ChangesetFailed.Key) + if err != nil { + return fmt.Errorf("invalid changeset key: %w", err) } - out.Publish(event) - - case ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_ADDED, ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_CHANGED: - logger.Tracef("Module %s upserted", sch.Name) - event := EventUpsert{ - Deployment: someDeploymentKey, - Module: sch, - more: more, + out.Publish(EventChangesetEnded{ + Key: key, + Success: false, + Error: event.ChangesetFailed.Error, + more: more, + }) + case *ftlv1.PullSchemaResponse_ChangesetCommitted_: + key, err := key.ParseChangesetKey(event.ChangesetCommitted.Key) + if err != nil { + return fmt.Errorf("invalid changeset key: %w", err) } - out.Publish(event) + out.Publish(EventChangesetEnded{ + Key: key, + Success: true, + more: more, + }) + case *ftlv1.PullSchemaResponse_DeploymentCreated_: + module, err := schema.ValidatedModuleFromProto(event.DeploymentCreated.Schema) + if err != nil { + return fmt.Errorf("invalid module: %w", err) + } + logger.Tracef("Module %s upserted", module.Name) + out.Publish(EventUpsert{ + Module: module, + more: more, + }) + case *ftlv1.PullSchemaResponse_DeploymentUpdated_: + module, err := schema.ValidatedModuleFromProto(event.DeploymentUpdated.Schema) + if err != nil { + return fmt.Errorf("invalid module: %w", err) + } + var changeset optional.Option[key.Changeset] + if event.DeploymentUpdated.GetChangeset() != "" { + c, err := key.ParseChangesetKey(event.DeploymentUpdated.GetChangeset()) + if err != nil { + return fmt.Errorf("invalid changeset key: %w", err) + } + changeset = optional.Some(c) + } + logger.Tracef("Module %s upserted", module.Name) + out.Publish(EventUpsert{ + Module: module, + Changeset: changeset, + more: more, + }) + case *ftlv1.PullSchemaResponse_DeploymentRemoved_: + // TODO: bring this back? but we can't right because there can be multiple? + // if !resp.ModuleRemoved { + // return nil + // } + var deploymentKey optional.Option[key.Deployment] + if event.DeploymentRemoved.GetKey() != "" { + k, err := key.ParseDeploymentKey(event.DeploymentRemoved.GetKey()) + if err != nil { + return fmt.Errorf("invalid deployment key: %w", err) + } + deploymentKey = optional.Some(k) + } + logger.Debugf("Deployment %s removed", optional.Ptr(event.DeploymentRemoved.Key).Default(event.DeploymentRemoved.ModuleName)) + out.Publish(EventRemove{ + Deployment: deploymentKey, + Module: event.DeploymentRemoved.ModuleName, + more: more, + }) default: - return fmt.Errorf("schema-sync: unknown change type %q", resp.ChangeType) + return fmt.Errorf("schema-sync: unknown change type %T", event) } + if !more && !initialSyncComplete { initialSyncComplete = true close(out.initialSyncComplete) diff --git a/internal/schema/schemaeventsource/schemaeventsource_test.go b/internal/schema/schemaeventsource/schemaeventsource_test.go index 0e2bd0307f..f16099c1aa 100644 --- a/internal/schema/schemaeventsource/schemaeventsource_test.go +++ b/internal/schema/schemaeventsource/schemaeventsource_test.go @@ -8,7 +8,6 @@ import ( "time" "connectrpc.com/connect" - "google.golang.org/protobuf/proto" "github.com/alecthomas/assert/v2" "github.com/alecthomas/types/must" @@ -39,8 +38,6 @@ func TestSchemaEventSource(t *testing.T) { changes := New(ctx, rpc.Dial(ftlv1connect.NewSchemaServiceClient, bind.String(), log.Debug)) send := func(t testing.TB, resp *ftlv1.PullSchemaResponse) { - resp.ModuleName = resp.Schema.Name - resp.DeploymentKey = proto.String(key.NewDeploymentKey(resp.ModuleName).String()) select { case <-ctx.Done(): t.Fatal(ctx.Err()) @@ -99,9 +96,12 @@ func TestSchemaEventSource(t *testing.T) { t.Run("InitialSend", func(t *testing.T) { send(t, &ftlv1.PullSchemaResponse{ - More: true, - Schema: (time1).ToProto(), - ChangeType: ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_ADDED, + More: true, + Event: &ftlv1.PullSchemaResponse_DeploymentCreated_{ + DeploymentCreated: &ftlv1.PullSchemaResponse_DeploymentCreated{ + Schema: (time1).ToProto(), + }, + }, }) waitCtx, cancel := context.WithTimeout(ctx, time.Second) @@ -109,9 +109,12 @@ func TestSchemaEventSource(t *testing.T) { assert.False(t, changes.WaitForInitialSync(waitCtx)) send(t, &ftlv1.PullSchemaResponse{ - More: false, - Schema: (echo1).ToProto(), - ChangeType: ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_ADDED, + More: false, + Event: &ftlv1.PullSchemaResponse_DeploymentCreated_{ + DeploymentCreated: &ftlv1.PullSchemaResponse_DeploymentCreated{ + Schema: (echo1).ToProto(), + }, + }, }) waitCtx, cancel = context.WithTimeout(ctx, time.Second) @@ -124,35 +127,44 @@ func TestSchemaEventSource(t *testing.T) { expected = EventUpsert{Module: echo1} actual := recv(t) assertEqual(t, expected, actual) - assertEqual(t, &schema.Schema{Modules: []*schema.Module{time1, echo1}}, changes.View()) - assertEqual(t, changes.View(), actual.Schema()) + assertEqual(t, &schema.Schema{Modules: []*schema.Module{time1, echo1}}, changes.LatestView()) + assertEqual(t, changes.LatestView(), actual.GetLatest()) }) t.Run("Mutation", func(t *testing.T) { send(t, &ftlv1.PullSchemaResponse{ - More: false, - Schema: (time2).ToProto(), - ChangeType: ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_ADDED, + More: false, + Event: &ftlv1.PullSchemaResponse_DeploymentCreated_{ + DeploymentCreated: &ftlv1.PullSchemaResponse_DeploymentCreated{ + Schema: (time2).ToProto(), + }, + }, }) var expected Event = EventUpsert{Module: time2} actual := recv(t) assertEqual(t, expected, actual) - assertEqual(t, &schema.Schema{Modules: []*schema.Module{time2, echo1}}, changes.View()) - assertEqual(t, changes.View(), actual.Schema()) + assertEqual(t, &schema.Schema{Modules: []*schema.Module{time2, echo1}}, changes.LatestView()) + assertEqual(t, changes.LatestView(), actual.GetLatest()) }) // Verify that schemasync doesn't propagate "initial" again. t.Run("SimulatedReconnect", func(t *testing.T) { send(t, &ftlv1.PullSchemaResponse{ - More: true, - Schema: (time2).ToProto(), - ChangeType: ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_ADDED, + More: true, + Event: &ftlv1.PullSchemaResponse_DeploymentCreated_{ + DeploymentCreated: &ftlv1.PullSchemaResponse_DeploymentCreated{ + Schema: (time2).ToProto(), + }, + }, }) send(t, &ftlv1.PullSchemaResponse{ - More: false, - Schema: (echo1).ToProto(), - ChangeType: ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_ADDED, + More: false, + Event: &ftlv1.PullSchemaResponse_DeploymentCreated_{ + DeploymentCreated: &ftlv1.PullSchemaResponse_DeploymentCreated{ + Schema: (echo1).ToProto(), + }, + }, }) var expected Event = EventUpsert{Module: time2} @@ -160,21 +172,24 @@ func TestSchemaEventSource(t *testing.T) { expected = EventUpsert{Module: echo1, more: false} actual := recv(t) assertEqual(t, expected, actual) - assertEqual(t, &schema.Schema{Modules: []*schema.Module{time2, echo1}}, changes.View()) - assertEqual(t, changes.View(), actual.Schema()) + assertEqual(t, &schema.Schema{Modules: []*schema.Module{time2, echo1}}, changes.LatestView()) + assertEqual(t, changes.LatestView(), actual.GetLatest()) }) t.Run("Delete", func(t *testing.T) { send(t, &ftlv1.PullSchemaResponse{ - Schema: (echo1).ToProto(), - ChangeType: ftlv1.DeploymentChangeType_DEPLOYMENT_CHANGE_TYPE_REMOVED, - ModuleRemoved: true, + Event: &ftlv1.PullSchemaResponse_DeploymentRemoved_{ + DeploymentRemoved: &ftlv1.PullSchemaResponse_DeploymentRemoved{ + ModuleName: echo1.GetName(), + ModuleRemoved: true, + }, + }, }) - var expected Event = EventRemove{Module: echo1} + var expected Event = EventRemove{Module: echo1.Name} actual := recv(t) assertEqual(t, expected, actual) - assertEqual(t, &schema.Schema{Modules: []*schema.Module{time2}}, changes.View()) - assertEqual(t, changes.View(), actual.Schema()) + assertEqual(t, &schema.Schema{Modules: []*schema.Module{time2}}, changes.LatestView()) + assertEqual(t, changes.LatestView(), actual.GetLatest()) }) } diff --git a/internal/terminal/predictors.go b/internal/terminal/predictors.go index ab1b676bda..c5f8de198a 100644 --- a/internal/terminal/predictors.go +++ b/internal/terminal/predictors.go @@ -18,7 +18,7 @@ type verbPredictor struct { } func (v *verbPredictor) Predict(args complete.Args) []string { - sch := v.view.Get() + sch := v.view.GetCanonical() ret := []string{} for _, module := range sch.Modules { for _, dec := range module.Decls { diff --git a/internal/watch/watch.go b/internal/watch/watch.go index fac2cf3380..2eb3818daf 100644 --- a/internal/watch/watch.go +++ b/internal/watch/watch.go @@ -105,6 +105,7 @@ func (w *Watcher) Watch(ctx context.Context, period time.Duration, moduleDirs [] logger := log.FromContext(ctx) topic := pubsub.New[WatchEvent]() + logger.Debugf("Starting watch %v", moduleDirs) go func() { wait := topic.Wait() diff --git a/jvm-runtime/jvm_hot_reload_test.go b/jvm-runtime/jvm_hot_reload_test.go index d87f7fe9b8..a564dc8a8d 100644 --- a/jvm-runtime/jvm_hot_reload_test.go +++ b/jvm-runtime/jvm_hot_reload_test.go @@ -72,6 +72,7 @@ func TestLifecycleJVM(t *testing.T) { assert.Equal(t, "Bye, Bob!", response) }), in.VerifyControllerStatus(func(ctx context.Context, t testing.TB, status *ftlv1.StatusResponse) { + t.Logf("status %v", status) assert.Equal(t, 1, len(status.Deployments)) assert.NotEqual(t, deployment, status.Deployments[0].Key) }), diff --git a/jvm-runtime/plugin/common/jvmcommon.go b/jvm-runtime/plugin/common/jvmcommon.go index d05ec2579a..f094772648 100644 --- a/jvm-runtime/plugin/common/jvmcommon.go +++ b/jvm-runtime/plugin/common/jvmcommon.go @@ -538,13 +538,11 @@ func (s *Service) runQuarkusDev(ctx context.Context, req *connect.Request[langpb reloadEvents <- &buildResult{state: result.Msg.GetState(), forceReload: true, buildContextUpdated: true} case <-schemaChangeTicker.C: changed := false - logger.Debugf("Calling reload") result, err := client.Reload(ctx, connect.NewRequest(&hotreloadpb.ReloadRequest{Force: false})) - logger.Debugf("Called reload") if err != nil { return fmt.Errorf("failed to invoke hot reload for build context update %w", err) } - logger.Debugf("Checking for schema changes") + logger.Tracef("Checking for schema changes") if fileExists(buildCtx.Config.SQLMigrationDirectory) { newMigrationHash, err := watch.ComputeFileHashes(buildCtx.Config.SQLMigrationDirectory, true, []string{"**/*.sql"}) diff --git a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/provisioner/v1beta1/service_pb2.py b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/provisioner/v1beta1/service_pb2.py index f4a2c1ad43..b3a2d8e971 100644 --- a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/provisioner/v1beta1/service_pb2.py +++ b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/provisioner/v1beta1/service_pb2.py @@ -26,7 +26,7 @@ from xyz.block.ftl.v1 import ftl_pb2 as xyz_dot_block_dot_ftl_dot_v1_dot_ftl__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n/xyz/block/ftl/provisioner/v1beta1/service.proto\x12!xyz.block.ftl.provisioner.v1beta1\x1a!xyz/block/ftl/v1/controller.proto\x1a\x1axyz/block/ftl/v1/ftl.proto2\xa9\x05\n\x12ProvisionerService\x12J\n\x04Ping\x12\x1d.xyz.block.ftl.v1.PingRequest\x1a\x1e.xyz.block.ftl.v1.PingResponse\"\x03\x90\x02\x01\x12K\n\x06Status\x12\x1f.xyz.block.ftl.v1.StatusRequest\x1a .xyz.block.ftl.v1.StatusResponse\x12i\n\x10GetArtefactDiffs\x12).xyz.block.ftl.v1.GetArtefactDiffsRequest\x1a*.xyz.block.ftl.v1.GetArtefactDiffsResponse\x12\x63\n\x0eUploadArtefact\x12\'.xyz.block.ftl.v1.UploadArtefactRequest\x1a(.xyz.block.ftl.v1.UploadArtefactResponse\x12i\n\x10\x43reateDeployment\x12).xyz.block.ftl.v1.CreateDeploymentRequest\x1a*.xyz.block.ftl.v1.CreateDeploymentResponse\x12]\n\x0cUpdateDeploy\x12%.xyz.block.ftl.v1.UpdateDeployRequest\x1a&.xyz.block.ftl.v1.UpdateDeployResponse\x12`\n\rReplaceDeploy\x12&.xyz.block.ftl.v1.ReplaceDeployRequest\x1a\'.xyz.block.ftl.v1.ReplaceDeployResponseBWP\x01ZSgithub.com/block/ftl/backend/protos/xyz/block/ftl/provisioner/v1beta1;provisionerpbb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n/xyz/block/ftl/provisioner/v1beta1/service.proto\x12!xyz.block.ftl.provisioner.v1beta1\x1a!xyz/block/ftl/v1/controller.proto\x1a\x1axyz/block/ftl/v1/ftl.proto2\xdc\x03\n\x12ProvisionerService\x12J\n\x04Ping\x12\x1d.xyz.block.ftl.v1.PingRequest\x1a\x1e.xyz.block.ftl.v1.PingResponse\"\x03\x90\x02\x01\x12K\n\x06Status\x12\x1f.xyz.block.ftl.v1.StatusRequest\x1a .xyz.block.ftl.v1.StatusResponse\x12i\n\x10GetArtefactDiffs\x12).xyz.block.ftl.v1.GetArtefactDiffsRequest\x1a*.xyz.block.ftl.v1.GetArtefactDiffsResponse\x12\x63\n\x0eUploadArtefact\x12\'.xyz.block.ftl.v1.UploadArtefactRequest\x1a(.xyz.block.ftl.v1.UploadArtefactResponse\x12]\n\x0cUpdateDeploy\x12%.xyz.block.ftl.v1.UpdateDeployRequest\x1a&.xyz.block.ftl.v1.UpdateDeployResponseBWP\x01ZSgithub.com/block/ftl/backend/protos/xyz/block/ftl/provisioner/v1beta1;provisionerpbb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -37,5 +37,5 @@ _globals['_PROVISIONERSERVICE'].methods_by_name['Ping']._loaded_options = None _globals['_PROVISIONERSERVICE'].methods_by_name['Ping']._serialized_options = b'\220\002\001' _globals['_PROVISIONERSERVICE']._serialized_start=150 - _globals['_PROVISIONERSERVICE']._serialized_end=831 + _globals['_PROVISIONERSERVICE']._serialized_end=626 # @@protoc_insertion_point(module_scope) diff --git a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.py b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.py index 4970625217..9dc7b538b9 100644 --- a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.py +++ b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.py @@ -25,7 +25,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$xyz/block/ftl/schema/v1/schema.proto\x12\x17xyz.block.ftl.schema.v1\x1a\x1fgoogle/protobuf/timestamp.proto\"\xb3\x01\n\x1b\x41WSIAMAuthDatabaseConnector\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08username\x18\x02 \x01(\tR\x08username\x12\x1a\n\x08\x65ndpoint\x18\x03 \x01(\tR\x08\x65ndpoint\x12\x1a\n\x08\x64\x61tabase\x18\x04 \x01(\tR\x08\x64\x61tabaseB\x06\n\x04_pos\"G\n\x03\x41ny\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\x82\x01\n\x05\x41rray\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x37\n\x07\x65lement\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x07\x65lementB\x06\n\x04_pos\"H\n\x04\x42ool\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"I\n\x05\x42ytes\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xad\x01\n\x06\x43onfig\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x31\n\x04type\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04typeB\x06\n\x04_pos\"j\n\x14\x44SNDatabaseConnector\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x10\n\x03\x64sn\x18\x02 \x01(\tR\x03\x64snB\x06\n\x04_pos\"\xd8\x02\n\x04\x44\x61ta\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12O\n\x0ftype_parameters\x18\x05 \x03(\x0b\x32&.xyz.block.ftl.schema.v1.TypeParameterR\x0etypeParameters\x12\x36\n\x06\x66ields\x18\x06 \x03(\x0b\x32\x1e.xyz.block.ftl.schema.v1.FieldR\x06\x66ields\x12=\n\x08metadata\x18\x07 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_pos\"\xa6\x02\n\x08\x44\x61tabase\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12I\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.DatabaseRuntimeH\x01R\x07runtime\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04type\x18\x04 \x01(\tR\x04type\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12=\n\x08metadata\x18\x05 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_posB\n\n\x08_runtime\"\x80\x02\n\x11\x44\x61tabaseConnector\x12{\n\x1e\x61wsiam_auth_database_connector\x18\x02 \x01(\x0b\x32\x34.xyz.block.ftl.schema.v1.AWSIAMAuthDatabaseConnectorH\x00R\x1b\x61wsiamAuthDatabaseConnector\x12\x65\n\x16\x64sn_database_connector\x18\x01 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.DSNDatabaseConnectorH\x00R\x14\x64snDatabaseConnectorB\x07\n\x05value\"}\n\x0f\x44\x61tabaseRuntime\x12Z\n\x0b\x63onnections\x18\x01 \x01(\x0b\x32\x33.xyz.block.ftl.schema.v1.DatabaseRuntimeConnectionsH\x00R\x0b\x63onnections\x88\x01\x01\x42\x0e\n\x0c_connections\"\x9e\x01\n\x1a\x44\x61tabaseRuntimeConnections\x12>\n\x04read\x18\x01 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.DatabaseConnectorR\x04read\x12@\n\x05write\x18\x02 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.DatabaseConnectorR\x05write\"\x95\x01\n\x14\x44\x61tabaseRuntimeEvent\x12\x16\n\x06module\x18\x01 \x01(\tR\x06module\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12U\n\x0b\x63onnections\x18\x03 \x01(\x0b\x32\x33.xyz.block.ftl.schema.v1.DatabaseRuntimeConnectionsR\x0b\x63onnections\"\xe2\x03\n\x04\x44\x65\x63l\x12\x39\n\x06\x63onfig\x18\x06 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ConfigH\x00R\x06\x63onfig\x12\x33\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.DataH\x00R\x04\x64\x61ta\x12?\n\x08\x64\x61tabase\x18\x03 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.DatabaseH\x00R\x08\x64\x61tabase\x12\x33\n\x04\x65num\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.EnumH\x00R\x04\x65num\x12\x39\n\x06secret\x18\x07 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.SecretH\x00R\x06secret\x12\x36\n\x05topic\x18\t \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.TopicH\x00R\x05topic\x12\x43\n\ntype_alias\x18\x05 \x01(\x0b\x32\".xyz.block.ftl.schema.v1.TypeAliasH\x00R\ttypeAlias\x12\x33\n\x04verb\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.VerbH\x00R\x04verbB\x07\n\x05value\"\x8e\x01\n\x18\x44\x65ploymentActivatedEvent\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12=\n\x0c\x61\x63tivated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0b\x61\x63tivatedAt\x12!\n\x0cmin_replicas\x18\x03 \x01(\x03R\x0bminReplicas\"c\n\x16\x44\x65ploymentCreatedEvent\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x37\n\x06schema\x18\x02 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x06schema\"U\n\x1a\x44\x65ploymentDeactivatedEvent\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12%\n\x0emodule_removed\x18\x02 \x01(\x08R\rmoduleRemoved\"N\n\x1e\x44\x65ploymentReplicasUpdatedEvent\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x1a\n\x08replicas\x18\x02 \x01(\x03R\x08replicas\"i\n\x1c\x44\x65ploymentSchemaUpdatedEvent\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x37\n\x06schema\x18\x02 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x06schema\"\x93\x02\n\x04\x45num\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x36\n\x04type\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeH\x01R\x04type\x88\x01\x01\x12@\n\x08variants\x18\x06 \x03(\x0b\x32$.xyz.block.ftl.schema.v1.EnumVariantR\x08variantsB\x06\n\x04_posB\x07\n\x05_type\"\xb5\x01\n\x0b\x45numVariant\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x34\n\x05value\x18\x04 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.ValueR\x05valueB\x06\n\x04_pos\"\xe4\x08\n\x05\x45vent\x12\x65\n\x16\x64\x61tabase_runtime_event\x18\x08 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.DatabaseRuntimeEventH\x00R\x14\x64\x61tabaseRuntimeEvent\x12q\n\x1a\x64\x65ployment_activated_event\x18\x04 \x01(\x0b\x32\x31.xyz.block.ftl.schema.v1.DeploymentActivatedEventH\x00R\x18\x64\x65ploymentActivatedEvent\x12k\n\x18\x64\x65ployment_created_event\x18\x01 \x01(\x0b\x32/.xyz.block.ftl.schema.v1.DeploymentCreatedEventH\x00R\x16\x64\x65ploymentCreatedEvent\x12w\n\x1c\x64\x65ployment_deactivated_event\x18\x05 \x01(\x0b\x32\x33.xyz.block.ftl.schema.v1.DeploymentDeactivatedEventH\x00R\x1a\x64\x65ploymentDeactivatedEvent\x12\x84\x01\n!deployment_replicas_updated_event\x18\x03 \x01(\x0b\x32\x37.xyz.block.ftl.schema.v1.DeploymentReplicasUpdatedEventH\x00R\x1e\x64\x65ploymentReplicasUpdatedEvent\x12~\n\x1f\x64\x65ployment_schema_updated_event\x18\x02 \x01(\x0b\x32\x35.xyz.block.ftl.schema.v1.DeploymentSchemaUpdatedEventH\x00R\x1c\x64\x65ploymentSchemaUpdatedEvent\x12_\n\x14module_runtime_event\x18\t \x01(\x0b\x32+.xyz.block.ftl.schema.v1.ModuleRuntimeEventH\x00R\x12moduleRuntimeEvent\x12q\n\x1aprovisioning_created_event\x18\n \x01(\x0b\x32\x31.xyz.block.ftl.schema.v1.ProvisioningCreatedEventH\x00R\x18provisioningCreatedEvent\x12\\\n\x13topic_runtime_event\x18\x07 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.TopicRuntimeEventH\x00R\x11topicRuntimeEvent\x12Y\n\x12verb_runtime_event\x18\x06 \x01(\x0b\x32).xyz.block.ftl.schema.v1.VerbRuntimeEventH\x00R\x10verbRuntimeEventB\x07\n\x05value\"\xeb\x01\n\x05\x46ield\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x03 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x31\n\x04type\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04type\x12=\n\x08metadata\x18\x05 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_pos\"I\n\x05\x46loat\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xe7\x01\n\x14IngressPathComponent\x12_\n\x14ingress_path_literal\x18\x01 \x01(\x0b\x32+.xyz.block.ftl.schema.v1.IngressPathLiteralH\x00R\x12ingressPathLiteral\x12\x65\n\x16ingress_path_parameter\x18\x02 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.IngressPathParameterH\x00R\x14ingressPathParameterB\x07\n\x05value\"j\n\x12IngressPathLiteral\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04text\x18\x02 \x01(\tR\x04textB\x06\n\x04_pos\"l\n\x14IngressPathParameter\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04name\x18\x02 \x01(\tR\x04nameB\x06\n\x04_pos\"G\n\x03Int\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"b\n\x08IntValue\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x14\n\x05value\x18\x02 \x01(\x03R\x05valueB\x06\n\x04_pos\"\xad\x01\n\x03Map\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12/\n\x03key\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x03key\x12\x33\n\x05value\x18\x03 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x05valueB\x06\n\x04_pos\"\xe5\t\n\x08Metadata\x12>\n\x05\x61lias\x18\x05 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.MetadataAliasH\x00R\x05\x61lias\x12G\n\x08\x61rtefact\x18\x0e \x01(\x0b\x32).xyz.block.ftl.schema.v1.MetadataArtefactH\x00R\x08\x61rtefact\x12>\n\x05\x63\x61lls\x18\x01 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.MetadataCallsH\x00R\x05\x63\x61lls\x12\x41\n\x06\x63onfig\x18\n \x01(\x0b\x32\'.xyz.block.ftl.schema.v1.MetadataConfigH\x00R\x06\x63onfig\x12\x45\n\x08\x63ron_job\x18\x03 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataCronJobH\x00R\x07\x63ronJob\x12J\n\tdatabases\x18\x04 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.MetadataDatabasesH\x00R\tdatabases\x12G\n\x08\x65ncoding\x18\t \x01(\x0b\x32).xyz.block.ftl.schema.v1.MetadataEncodingH\x00R\x08\x65ncoding\x12\x44\n\x07ingress\x18\x02 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataIngressH\x00R\x07ingress\x12M\n\npartitions\x18\x0f \x01(\x0b\x32+.xyz.block.ftl.schema.v1.MetadataPartitionsH\x00R\npartitions\x12J\n\tpublisher\x18\x0c \x01(\x0b\x32*.xyz.block.ftl.schema.v1.MetadataPublisherH\x00R\tpublisher\x12>\n\x05retry\x18\x06 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.MetadataRetryH\x00R\x05retry\x12K\n\nsql_column\x18\x11 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.MetadataSQLColumnH\x00R\tsqlColumn\x12T\n\rsql_migration\x18\r \x01(\x0b\x32-.xyz.block.ftl.schema.v1.MetadataSQLMigrationH\x00R\x0csqlMigration\x12H\n\tsql_query\x18\x10 \x01(\x0b\x32).xyz.block.ftl.schema.v1.MetadataSQLQueryH\x00R\x08sqlQuery\x12\x44\n\x07secrets\x18\x0b \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataSecretsH\x00R\x07secrets\x12M\n\nsubscriber\x18\x07 \x01(\x0b\x32+.xyz.block.ftl.schema.v1.MetadataSubscriberH\x00R\nsubscriber\x12\x45\n\x08type_map\x18\x08 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataTypeMapH\x00R\x07typeMapB\x07\n\x05value\"\x9f\x01\n\rMetadataAlias\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x36\n\x04kind\x18\x02 \x01(\x0e\x32\".xyz.block.ftl.schema.v1.AliasKindR\x04kind\x12\x14\n\x05\x61lias\x18\x03 \x01(\tR\x05\x61liasB\x06\n\x04_pos\"\xa0\x01\n\x10MetadataArtefact\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\x16\n\x06\x64igest\x18\x03 \x01(\tR\x06\x64igest\x12\x1e\n\nexecutable\x18\x04 \x01(\x08R\nexecutableB\x06\n\x04_pos\"\x85\x01\n\rMetadataCalls\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x32\n\x05\x63\x61lls\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x05\x63\x61llsB\x06\n\x04_pos\"\x88\x01\n\x0eMetadataConfig\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x34\n\x06\x63onfig\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x06\x63onfigB\x06\n\x04_pos\"g\n\x0fMetadataCronJob\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04\x63ron\x18\x02 \x01(\tR\x04\x63ronB\x06\n\x04_pos\"\x89\x01\n\x11MetadataDatabases\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x32\n\x05\x63\x61lls\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x05\x63\x61llsB\x06\n\x04_pos\"\x82\x01\n\x10MetadataEncoding\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x18\n\x07lenient\x18\x03 \x01(\x08R\x07lenientB\x06\n\x04_pos\"\xc2\x01\n\x0fMetadataIngress\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x16\n\x06method\x18\x03 \x01(\tR\x06method\x12\x41\n\x04path\x18\x04 \x03(\x0b\x32-.xyz.block.ftl.schema.v1.IngressPathComponentR\x04pathB\x06\n\x04_pos\"v\n\x12MetadataPartitions\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1e\n\npartitions\x18\x02 \x01(\x03R\npartitionsB\x06\n\x04_pos\"\x8b\x01\n\x11MetadataPublisher\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x34\n\x06topics\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x06topicsB\x06\n\x04_pos\"\xfb\x01\n\rMetadataRetry\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x19\n\x05\x63ount\x18\x02 \x01(\x03H\x01R\x05\x63ount\x88\x01\x01\x12\x1f\n\x0bmin_backoff\x18\x03 \x01(\tR\nminBackoff\x12\x1f\n\x0bmax_backoff\x18\x04 \x01(\tR\nmaxBackoff\x12\x37\n\x05\x63\x61tch\x18\x05 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefH\x02R\x05\x63\x61tch\x88\x01\x01\x42\x06\n\x04_posB\x08\n\x06_countB\x08\n\x06_catch\"\x7f\n\x11MetadataSQLColumn\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\x12\x12\n\x04name\x18\x03 \x01(\tR\x04nameB\x06\n\x04_pos\"p\n\x14MetadataSQLMigration\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x16\n\x06\x64igest\x18\x02 \x01(\tR\x06\x64igestB\x06\n\x04_pos\"\x84\x01\n\x10MetadataSQLQuery\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x18\n\x07\x63ommand\x18\x02 \x01(\tR\x07\x63ommand\x12\x14\n\x05query\x18\x03 \x01(\tR\x05queryB\x06\n\x04_pos\"\x8b\x01\n\x0fMetadataSecrets\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x36\n\x07secrets\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x07secretsB\x06\n\x04_pos\"\xf1\x01\n\x12MetadataSubscriber\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x32\n\x05topic\x18\x02 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x05topic\x12\x44\n\x0b\x66rom_offset\x18\x03 \x01(\x0e\x32#.xyz.block.ftl.schema.v1.FromOffsetR\nfromOffset\x12\x1f\n\x0b\x64\x65\x61\x64_letter\x18\x04 \x01(\x08R\ndeadLetterB\x06\n\x04_pos\"\x8e\x01\n\x0fMetadataTypeMap\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x18\n\x07runtime\x18\x02 \x01(\tR\x07runtime\x12\x1f\n\x0bnative_name\x18\x03 \x01(\tR\nnativeNameB\x06\n\x04_pos\"\xcc\x02\n\x06Module\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x18\n\x07\x62uiltin\x18\x03 \x01(\x08R\x07\x62uiltin\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12=\n\x08metadata\x18\x06 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadata\x12\x33\n\x05\x64\x65\x63ls\x18\x05 \x03(\x0b\x32\x1d.xyz.block.ftl.schema.v1.DeclR\x05\x64\x65\x63ls\x12\x42\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.ModuleRuntimeR\x07runtimeB\x06\n\x04_pos\"\x8f\x02\n\rModuleRuntime\x12>\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.ModuleRuntimeBaseR\x04\x62\x61se\x12L\n\x07scaling\x18\x02 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.ModuleRuntimeScalingH\x00R\x07scaling\x88\x01\x01\x12U\n\ndeployment\x18\x03 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.ModuleRuntimeDeploymentH\x01R\ndeployment\x88\x01\x01\x42\n\n\x08_scalingB\r\n\x0b_deployment\"\xcf\x01\n\x11ModuleRuntimeBase\x12;\n\x0b\x63reate_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12\x1a\n\x08language\x18\x02 \x01(\tR\x08language\x12\x13\n\x02os\x18\x03 \x01(\tH\x00R\x02os\x88\x01\x01\x12\x17\n\x04\x61rch\x18\x04 \x01(\tH\x01R\x04\x61rch\x88\x01\x01\x12\x19\n\x05image\x18\x05 \x01(\tH\x02R\x05image\x88\x01\x01\x42\x05\n\x03_osB\x07\n\x05_archB\x08\n\x06_image\"\xec\x01\n\x17ModuleRuntimeDeployment\x12\x1a\n\x08\x65ndpoint\x18\x01 \x01(\tR\x08\x65ndpoint\x12%\n\x0e\x64\x65ployment_key\x18\x02 \x01(\tR\rdeploymentKey\x12\x39\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x42\n\x0c\x61\x63tivated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x0b\x61\x63tivatedAt\x88\x01\x01\x42\x0f\n\r_activated_at\"\xf9\x02\n\x12ModuleRuntimeEvent\x12\x16\n\x06module\x18\x01 \x01(\tR\x06module\x12*\n\x0e\x64\x65ployment_key\x18\x02 \x01(\tH\x00R\rdeploymentKey\x88\x01\x01\x12\x43\n\x04\x62\x61se\x18\x03 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.ModuleRuntimeBaseH\x01R\x04\x62\x61se\x88\x01\x01\x12L\n\x07scaling\x18\x04 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.ModuleRuntimeScalingH\x02R\x07scaling\x88\x01\x01\x12U\n\ndeployment\x18\x05 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.ModuleRuntimeDeploymentH\x03R\ndeployment\x88\x01\x01\x42\x11\n\x0f_deployment_keyB\x07\n\x05_baseB\n\n\x08_scalingB\r\n\x0b_deployment\"9\n\x14ModuleRuntimeScaling\x12!\n\x0cmin_replicas\x18\x01 \x01(\x05R\x0bminReplicas\"\x8d\x01\n\x08Optional\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x36\n\x04type\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeH\x01R\x04type\x88\x01\x01\x42\x06\n\x04_posB\x07\n\x05_type\"R\n\x08Position\x12\x1a\n\x08\x66ilename\x18\x01 \x01(\tR\x08\x66ilename\x12\x12\n\x04line\x18\x02 \x01(\x03R\x04line\x12\x16\n\x06\x63olumn\x18\x03 \x01(\x03R\x06\x63olumn\"b\n\x18ProvisioningCreatedEvent\x12\x46\n\x0e\x64\x65sired_module\x18\x01 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\rdesiredModule\"\xbb\x01\n\x03Ref\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x16\n\x06module\x18\x03 \x01(\tR\x06module\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x46\n\x0ftype_parameters\x18\x04 \x03(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x0etypeParametersB\x06\n\x04_pos\"\x85\x01\n\x06Schema\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x39\n\x07modules\x18\x02 \x03(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x07modulesB\x06\n\x04_pos\"w\n\x0bSchemaState\x12\x39\n\x07modules\x18\x01 \x03(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x07modules\x12-\n\x12\x61\x63tive_deployments\x18\x02 \x03(\tR\x11\x61\x63tiveDeployments\"\xad\x01\n\x06Secret\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x31\n\x04type\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04typeB\x06\n\x04_pos\"J\n\x06String\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"e\n\x0bStringValue\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x14\n\x05value\x18\x02 \x01(\tR\x05valueB\x06\n\x04_pos\"H\n\x04Time\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xd9\x02\n\x05Topic\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x46\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32%.xyz.block.ftl.schema.v1.TopicRuntimeH\x01R\x07runtime\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x33\n\x05\x65vent\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x05\x65vent\x12=\n\x08metadata\x18\x06 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_posB\n\n\x08_runtime\"N\n\x0cTopicRuntime\x12#\n\rkafka_brokers\x18\x01 \x03(\tR\x0ckafkaBrokers\x12\x19\n\x08topic_id\x18\x02 \x01(\tR\x07topicId\"|\n\x11TopicRuntimeEvent\x12\x16\n\x06module\x18\x01 \x01(\tR\x06module\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12?\n\x07payload\x18\x03 \x01(\x0b\x32%.xyz.block.ftl.schema.v1.TopicRuntimeR\x07payload\"\x9a\x05\n\x04Type\x12\x30\n\x03\x61ny\x18\t \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.AnyH\x00R\x03\x61ny\x12\x36\n\x05\x61rray\x18\x07 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.ArrayH\x00R\x05\x61rray\x12\x33\n\x04\x62ool\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.BoolH\x00R\x04\x62ool\x12\x36\n\x05\x62ytes\x18\x04 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.BytesH\x00R\x05\x62ytes\x12\x36\n\x05\x66loat\x18\x02 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.FloatH\x00R\x05\x66loat\x12\x30\n\x03int\x18\x01 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.IntH\x00R\x03int\x12\x30\n\x03map\x18\x08 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.MapH\x00R\x03map\x12?\n\x08optional\x18\x0c \x01(\x0b\x32!.xyz.block.ftl.schema.v1.OptionalH\x00R\x08optional\x12\x30\n\x03ref\x18\x0b \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefH\x00R\x03ref\x12\x39\n\x06string\x18\x03 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.StringH\x00R\x06string\x12\x33\n\x04time\x18\x06 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TimeH\x00R\x04time\x12\x33\n\x04unit\x18\n \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.UnitH\x00R\x04unitB\x07\n\x05value\"\x87\x02\n\tTypeAlias\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x31\n\x04type\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04type\x12=\n\x08metadata\x18\x06 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_pos\"e\n\rTypeParameter\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04name\x18\x02 \x01(\tR\x04nameB\x06\n\x04_pos\"\x82\x01\n\tTypeValue\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x05valueB\x06\n\x04_pos\"H\n\x04Unit\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xe2\x01\n\x05Value\x12@\n\tint_value\x18\x02 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.IntValueH\x00R\x08intValue\x12I\n\x0cstring_value\x18\x01 \x01(\x0b\x32$.xyz.block.ftl.schema.v1.StringValueH\x00R\x0bstringValue\x12\x43\n\ntype_value\x18\x03 \x01(\x0b\x32\".xyz.block.ftl.schema.v1.TypeValueH\x00R\ttypeValueB\x07\n\x05value\"\x96\x03\n\x04Verb\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x37\n\x07request\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x07request\x12\x39\n\x08response\x18\x06 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x08response\x12=\n\x08metadata\x18\x07 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadata\x12\x45\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32$.xyz.block.ftl.schema.v1.VerbRuntimeH\x01R\x07runtime\x88\x01\x01\x42\x06\n\x04_posB\n\n\x08_runtime\"\xb7\x01\n\x0bVerbRuntime\x12<\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.VerbRuntimeBaseR\x04\x62\x61se\x12Y\n\x0csubscription\x18\x02 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.VerbRuntimeSubscriptionH\x00R\x0csubscription\x88\x01\x01\x42\x0f\n\r_subscription\"\xb2\x01\n\x0fVerbRuntimeBase\x12@\n\x0b\x63reate_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\ncreateTime\x88\x01\x01\x12>\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\tstartTime\x88\x01\x01\x42\x0e\n\x0c_create_timeB\r\n\x0b_start_time\"\xf2\x01\n\x10VerbRuntimeEvent\x12\x16\n\x06module\x18\x01 \x01(\tR\x06module\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x41\n\x04\x62\x61se\x18\x03 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.VerbRuntimeBaseH\x00R\x04\x62\x61se\x88\x01\x01\x12Y\n\x0csubscription\x18\x04 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.VerbRuntimeSubscriptionH\x01R\x0csubscription\x88\x01\x01\x42\x07\n\x05_baseB\x0f\n\r_subscription\">\n\x17VerbRuntimeSubscription\x12#\n\rkafka_brokers\x18\x01 \x03(\tR\x0ckafkaBrokers*<\n\tAliasKind\x12\x1a\n\x16\x41LIAS_KIND_UNSPECIFIED\x10\x00\x12\x13\n\x0f\x41LIAS_KIND_JSON\x10\x01*\\\n\nFromOffset\x12\x1b\n\x17\x46ROM_OFFSET_UNSPECIFIED\x10\x00\x12\x19\n\x15\x46ROM_OFFSET_BEGINNING\x10\x01\x12\x16\n\x12\x46ROM_OFFSET_LATEST\x10\x02\x42GP\x01ZCgithub.com/block/ftl/common/protos/xyz/block/ftl/schema/v1;schemapbb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$xyz/block/ftl/schema/v1/schema.proto\x12\x17xyz.block.ftl.schema.v1\x1a\x1fgoogle/protobuf/timestamp.proto\"\xb3\x01\n\x1b\x41WSIAMAuthDatabaseConnector\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08username\x18\x02 \x01(\tR\x08username\x12\x1a\n\x08\x65ndpoint\x18\x03 \x01(\tR\x08\x65ndpoint\x12\x1a\n\x08\x64\x61tabase\x18\x04 \x01(\tR\x08\x64\x61tabaseB\x06\n\x04_pos\"G\n\x03\x41ny\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\x82\x01\n\x05\x41rray\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x37\n\x07\x65lement\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x07\x65lementB\x06\n\x04_pos\"H\n\x04\x42ool\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"I\n\x05\x42ytes\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xf7\x01\n\tChangeset\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x39\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\x07modules\x18\x03 \x03(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x07modules\x12=\n\x05state\x18\x04 \x01(\x0e\x32\'.xyz.block.ftl.schema.v1.ChangesetStateR\x05state\x12\x19\n\x05\x65rror\x18\x05 \x01(\tH\x00R\x05\x65rror\x88\x01\x01\x42\x08\n\x06_error\"+\n\x17\x43hangesetCommittedEvent\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\"Y\n\x15\x43hangesetCreatedEvent\x12@\n\tchangeset\x18\x01 \x01(\x0b\x32\".xyz.block.ftl.schema.v1.ChangesetR\tchangeset\">\n\x14\x43hangesetFailedEvent\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05\x65rror\x18\x02 \x01(\tR\x05\x65rror\"\xad\x01\n\x06\x43onfig\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x31\n\x04type\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04typeB\x06\n\x04_pos\"j\n\x14\x44SNDatabaseConnector\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x10\n\x03\x64sn\x18\x02 \x01(\tR\x03\x64snB\x06\n\x04_pos\"\xd8\x02\n\x04\x44\x61ta\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12O\n\x0ftype_parameters\x18\x05 \x03(\x0b\x32&.xyz.block.ftl.schema.v1.TypeParameterR\x0etypeParameters\x12\x36\n\x06\x66ields\x18\x06 \x03(\x0b\x32\x1e.xyz.block.ftl.schema.v1.FieldR\x06\x66ields\x12=\n\x08metadata\x18\x07 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_pos\"\xa6\x02\n\x08\x44\x61tabase\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12I\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.DatabaseRuntimeH\x01R\x07runtime\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04type\x18\x04 \x01(\tR\x04type\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12=\n\x08metadata\x18\x05 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_posB\n\n\x08_runtime\"\x80\x02\n\x11\x44\x61tabaseConnector\x12{\n\x1e\x61wsiam_auth_database_connector\x18\x02 \x01(\x0b\x32\x34.xyz.block.ftl.schema.v1.AWSIAMAuthDatabaseConnectorH\x00R\x1b\x61wsiamAuthDatabaseConnector\x12\x65\n\x16\x64sn_database_connector\x18\x01 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.DSNDatabaseConnectorH\x00R\x14\x64snDatabaseConnectorB\x07\n\x05value\"}\n\x0f\x44\x61tabaseRuntime\x12Z\n\x0b\x63onnections\x18\x01 \x01(\x0b\x32\x33.xyz.block.ftl.schema.v1.DatabaseRuntimeConnectionsH\x00R\x0b\x63onnections\x88\x01\x01\x42\x0e\n\x0c_connections\"\x9e\x01\n\x1a\x44\x61tabaseRuntimeConnections\x12>\n\x04read\x18\x01 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.DatabaseConnectorR\x04read\x12@\n\x05write\x18\x02 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.DatabaseConnectorR\x05write\"\x95\x01\n\x14\x44\x61tabaseRuntimeEvent\x12\x16\n\x06module\x18\x01 \x01(\tR\x06module\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12U\n\x0b\x63onnections\x18\x03 \x01(\x0b\x32\x33.xyz.block.ftl.schema.v1.DatabaseRuntimeConnectionsR\x0b\x63onnections\"\xe2\x03\n\x04\x44\x65\x63l\x12\x39\n\x06\x63onfig\x18\x06 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ConfigH\x00R\x06\x63onfig\x12\x33\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.DataH\x00R\x04\x64\x61ta\x12?\n\x08\x64\x61tabase\x18\x03 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.DatabaseH\x00R\x08\x64\x61tabase\x12\x33\n\x04\x65num\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.EnumH\x00R\x04\x65num\x12\x39\n\x06secret\x18\x07 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.SecretH\x00R\x06secret\x12\x36\n\x05topic\x18\t \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.TopicH\x00R\x05topic\x12\x43\n\ntype_alias\x18\x05 \x01(\x0b\x32\".xyz.block.ftl.schema.v1.TypeAliasH\x00R\ttypeAlias\x12\x33\n\x04verb\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.VerbH\x00R\x04verbB\x07\n\x05value\"\xac\x01\n\x18\x44\x65ploymentActivatedEvent\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12=\n\x0c\x61\x63tivated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0b\x61\x63tivatedAt\x12!\n\x0cmin_replicas\x18\x03 \x01(\x03R\x0bminReplicas\x12\x1c\n\tchangeset\x18\x04 \x01(\tR\tchangeset\"\x81\x01\n\x16\x44\x65ploymentCreatedEvent\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x37\n\x06schema\x18\x02 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x06schema\x12\x1c\n\tchangeset\x18\x03 \x01(\tR\tchangeset\"s\n\x1a\x44\x65ploymentDeactivatedEvent\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12%\n\x0emodule_removed\x18\x02 \x01(\x08R\rmoduleRemoved\x12\x1c\n\tchangeset\x18\x03 \x01(\tR\tchangeset\"l\n\x1e\x44\x65ploymentReplicasUpdatedEvent\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x1a\n\x08replicas\x18\x02 \x01(\x03R\x08replicas\x12\x1c\n\tchangeset\x18\x03 \x01(\tR\tchangeset\"\x87\x01\n\x1c\x44\x65ploymentSchemaUpdatedEvent\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x37\n\x06schema\x18\x02 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x06schema\x12\x1c\n\tchangeset\x18\x03 \x01(\tR\tchangeset\"\x93\x02\n\x04\x45num\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x36\n\x04type\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeH\x01R\x04type\x88\x01\x01\x12@\n\x08variants\x18\x06 \x03(\x0b\x32$.xyz.block.ftl.schema.v1.EnumVariantR\x08variantsB\x06\n\x04_posB\x07\n\x05_type\"\xb5\x01\n\x0b\x45numVariant\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x34\n\x05value\x18\x04 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.ValueR\x05valueB\x06\n\x04_pos\"\xa5\x0b\n\x05\x45vent\x12n\n\x19\x63hangeset_committed_event\x18\x0c \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.ChangesetCommittedEventH\x00R\x17\x63hangesetCommittedEvent\x12h\n\x17\x63hangeset_created_event\x18\x0b \x01(\x0b\x32..xyz.block.ftl.schema.v1.ChangesetCreatedEventH\x00R\x15\x63hangesetCreatedEvent\x12\x65\n\x16\x63hangeset_failed_event\x18\r \x01(\x0b\x32-.xyz.block.ftl.schema.v1.ChangesetFailedEventH\x00R\x14\x63hangesetFailedEvent\x12\x65\n\x16\x64\x61tabase_runtime_event\x18\x08 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.DatabaseRuntimeEventH\x00R\x14\x64\x61tabaseRuntimeEvent\x12q\n\x1a\x64\x65ployment_activated_event\x18\x04 \x01(\x0b\x32\x31.xyz.block.ftl.schema.v1.DeploymentActivatedEventH\x00R\x18\x64\x65ploymentActivatedEvent\x12k\n\x18\x64\x65ployment_created_event\x18\x01 \x01(\x0b\x32/.xyz.block.ftl.schema.v1.DeploymentCreatedEventH\x00R\x16\x64\x65ploymentCreatedEvent\x12w\n\x1c\x64\x65ployment_deactivated_event\x18\x05 \x01(\x0b\x32\x33.xyz.block.ftl.schema.v1.DeploymentDeactivatedEventH\x00R\x1a\x64\x65ploymentDeactivatedEvent\x12\x84\x01\n!deployment_replicas_updated_event\x18\x03 \x01(\x0b\x32\x37.xyz.block.ftl.schema.v1.DeploymentReplicasUpdatedEventH\x00R\x1e\x64\x65ploymentReplicasUpdatedEvent\x12~\n\x1f\x64\x65ployment_schema_updated_event\x18\x02 \x01(\x0b\x32\x35.xyz.block.ftl.schema.v1.DeploymentSchemaUpdatedEventH\x00R\x1c\x64\x65ploymentSchemaUpdatedEvent\x12_\n\x14module_runtime_event\x18\t \x01(\x0b\x32+.xyz.block.ftl.schema.v1.ModuleRuntimeEventH\x00R\x12moduleRuntimeEvent\x12q\n\x1aprovisioning_created_event\x18\n \x01(\x0b\x32\x31.xyz.block.ftl.schema.v1.ProvisioningCreatedEventH\x00R\x18provisioningCreatedEvent\x12\\\n\x13topic_runtime_event\x18\x07 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.TopicRuntimeEventH\x00R\x11topicRuntimeEvent\x12Y\n\x12verb_runtime_event\x18\x06 \x01(\x0b\x32).xyz.block.ftl.schema.v1.VerbRuntimeEventH\x00R\x10verbRuntimeEventB\x07\n\x05value\"\xeb\x01\n\x05\x46ield\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x03 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x31\n\x04type\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04type\x12=\n\x08metadata\x18\x05 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_pos\"I\n\x05\x46loat\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xe7\x01\n\x14IngressPathComponent\x12_\n\x14ingress_path_literal\x18\x01 \x01(\x0b\x32+.xyz.block.ftl.schema.v1.IngressPathLiteralH\x00R\x12ingressPathLiteral\x12\x65\n\x16ingress_path_parameter\x18\x02 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.IngressPathParameterH\x00R\x14ingressPathParameterB\x07\n\x05value\"j\n\x12IngressPathLiteral\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04text\x18\x02 \x01(\tR\x04textB\x06\n\x04_pos\"l\n\x14IngressPathParameter\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04name\x18\x02 \x01(\tR\x04nameB\x06\n\x04_pos\"G\n\x03Int\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"b\n\x08IntValue\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x14\n\x05value\x18\x02 \x01(\x03R\x05valueB\x06\n\x04_pos\"\xad\x01\n\x03Map\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12/\n\x03key\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x03key\x12\x33\n\x05value\x18\x03 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x05valueB\x06\n\x04_pos\"\xe5\t\n\x08Metadata\x12>\n\x05\x61lias\x18\x05 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.MetadataAliasH\x00R\x05\x61lias\x12G\n\x08\x61rtefact\x18\x0e \x01(\x0b\x32).xyz.block.ftl.schema.v1.MetadataArtefactH\x00R\x08\x61rtefact\x12>\n\x05\x63\x61lls\x18\x01 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.MetadataCallsH\x00R\x05\x63\x61lls\x12\x41\n\x06\x63onfig\x18\n \x01(\x0b\x32\'.xyz.block.ftl.schema.v1.MetadataConfigH\x00R\x06\x63onfig\x12\x45\n\x08\x63ron_job\x18\x03 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataCronJobH\x00R\x07\x63ronJob\x12J\n\tdatabases\x18\x04 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.MetadataDatabasesH\x00R\tdatabases\x12G\n\x08\x65ncoding\x18\t \x01(\x0b\x32).xyz.block.ftl.schema.v1.MetadataEncodingH\x00R\x08\x65ncoding\x12\x44\n\x07ingress\x18\x02 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataIngressH\x00R\x07ingress\x12M\n\npartitions\x18\x0f \x01(\x0b\x32+.xyz.block.ftl.schema.v1.MetadataPartitionsH\x00R\npartitions\x12J\n\tpublisher\x18\x0c \x01(\x0b\x32*.xyz.block.ftl.schema.v1.MetadataPublisherH\x00R\tpublisher\x12>\n\x05retry\x18\x06 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.MetadataRetryH\x00R\x05retry\x12K\n\nsql_column\x18\x11 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.MetadataSQLColumnH\x00R\tsqlColumn\x12T\n\rsql_migration\x18\r \x01(\x0b\x32-.xyz.block.ftl.schema.v1.MetadataSQLMigrationH\x00R\x0csqlMigration\x12H\n\tsql_query\x18\x10 \x01(\x0b\x32).xyz.block.ftl.schema.v1.MetadataSQLQueryH\x00R\x08sqlQuery\x12\x44\n\x07secrets\x18\x0b \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataSecretsH\x00R\x07secrets\x12M\n\nsubscriber\x18\x07 \x01(\x0b\x32+.xyz.block.ftl.schema.v1.MetadataSubscriberH\x00R\nsubscriber\x12\x45\n\x08type_map\x18\x08 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataTypeMapH\x00R\x07typeMapB\x07\n\x05value\"\x9f\x01\n\rMetadataAlias\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x36\n\x04kind\x18\x02 \x01(\x0e\x32\".xyz.block.ftl.schema.v1.AliasKindR\x04kind\x12\x14\n\x05\x61lias\x18\x03 \x01(\tR\x05\x61liasB\x06\n\x04_pos\"\xa0\x01\n\x10MetadataArtefact\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\x16\n\x06\x64igest\x18\x03 \x01(\tR\x06\x64igest\x12\x1e\n\nexecutable\x18\x04 \x01(\x08R\nexecutableB\x06\n\x04_pos\"\x85\x01\n\rMetadataCalls\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x32\n\x05\x63\x61lls\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x05\x63\x61llsB\x06\n\x04_pos\"\x88\x01\n\x0eMetadataConfig\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x34\n\x06\x63onfig\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x06\x63onfigB\x06\n\x04_pos\"g\n\x0fMetadataCronJob\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04\x63ron\x18\x02 \x01(\tR\x04\x63ronB\x06\n\x04_pos\"\x89\x01\n\x11MetadataDatabases\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x32\n\x05\x63\x61lls\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x05\x63\x61llsB\x06\n\x04_pos\"\x82\x01\n\x10MetadataEncoding\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x18\n\x07lenient\x18\x03 \x01(\x08R\x07lenientB\x06\n\x04_pos\"\xc2\x01\n\x0fMetadataIngress\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x16\n\x06method\x18\x03 \x01(\tR\x06method\x12\x41\n\x04path\x18\x04 \x03(\x0b\x32-.xyz.block.ftl.schema.v1.IngressPathComponentR\x04pathB\x06\n\x04_pos\"v\n\x12MetadataPartitions\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1e\n\npartitions\x18\x02 \x01(\x03R\npartitionsB\x06\n\x04_pos\"\x8b\x01\n\x11MetadataPublisher\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x34\n\x06topics\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x06topicsB\x06\n\x04_pos\"\xfb\x01\n\rMetadataRetry\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x19\n\x05\x63ount\x18\x02 \x01(\x03H\x01R\x05\x63ount\x88\x01\x01\x12\x1f\n\x0bmin_backoff\x18\x03 \x01(\tR\nminBackoff\x12\x1f\n\x0bmax_backoff\x18\x04 \x01(\tR\nmaxBackoff\x12\x37\n\x05\x63\x61tch\x18\x05 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefH\x02R\x05\x63\x61tch\x88\x01\x01\x42\x06\n\x04_posB\x08\n\x06_countB\x08\n\x06_catch\"\x7f\n\x11MetadataSQLColumn\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\x12\x12\n\x04name\x18\x03 \x01(\tR\x04nameB\x06\n\x04_pos\"p\n\x14MetadataSQLMigration\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x16\n\x06\x64igest\x18\x02 \x01(\tR\x06\x64igestB\x06\n\x04_pos\"\x84\x01\n\x10MetadataSQLQuery\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x18\n\x07\x63ommand\x18\x02 \x01(\tR\x07\x63ommand\x12\x14\n\x05query\x18\x03 \x01(\tR\x05queryB\x06\n\x04_pos\"\x8b\x01\n\x0fMetadataSecrets\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x36\n\x07secrets\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x07secretsB\x06\n\x04_pos\"\xf1\x01\n\x12MetadataSubscriber\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x32\n\x05topic\x18\x02 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x05topic\x12\x44\n\x0b\x66rom_offset\x18\x03 \x01(\x0e\x32#.xyz.block.ftl.schema.v1.FromOffsetR\nfromOffset\x12\x1f\n\x0b\x64\x65\x61\x64_letter\x18\x04 \x01(\x08R\ndeadLetterB\x06\n\x04_pos\"\x8e\x01\n\x0fMetadataTypeMap\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x18\n\x07runtime\x18\x02 \x01(\tR\x07runtime\x12\x1f\n\x0bnative_name\x18\x03 \x01(\tR\nnativeNameB\x06\n\x04_pos\"\xcc\x02\n\x06Module\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x18\n\x07\x62uiltin\x18\x03 \x01(\x08R\x07\x62uiltin\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12=\n\x08metadata\x18\x06 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadata\x12\x33\n\x05\x64\x65\x63ls\x18\x05 \x03(\x0b\x32\x1d.xyz.block.ftl.schema.v1.DeclR\x05\x64\x65\x63ls\x12\x42\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.ModuleRuntimeR\x07runtimeB\x06\n\x04_pos\"\x8f\x02\n\rModuleRuntime\x12>\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.ModuleRuntimeBaseR\x04\x62\x61se\x12L\n\x07scaling\x18\x02 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.ModuleRuntimeScalingH\x00R\x07scaling\x88\x01\x01\x12U\n\ndeployment\x18\x03 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.ModuleRuntimeDeploymentH\x01R\ndeployment\x88\x01\x01\x42\n\n\x08_scalingB\r\n\x0b_deployment\"\xcf\x01\n\x11ModuleRuntimeBase\x12;\n\x0b\x63reate_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12\x1a\n\x08language\x18\x02 \x01(\tR\x08language\x12\x13\n\x02os\x18\x03 \x01(\tH\x00R\x02os\x88\x01\x01\x12\x17\n\x04\x61rch\x18\x04 \x01(\tH\x01R\x04\x61rch\x88\x01\x01\x12\x19\n\x05image\x18\x05 \x01(\tH\x02R\x05image\x88\x01\x01\x42\x05\n\x03_osB\x07\n\x05_archB\x08\n\x06_image\"\xa8\x02\n\x17ModuleRuntimeDeployment\x12\x1a\n\x08\x65ndpoint\x18\x01 \x01(\tR\x08\x65ndpoint\x12%\n\x0e\x64\x65ployment_key\x18\x02 \x01(\tR\rdeploymentKey\x12\x39\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x42\n\x0c\x61\x63tivated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\x0b\x61\x63tivatedAt\x88\x01\x01\x12:\n\x05state\x18\x05 \x01(\x0e\x32$.xyz.block.ftl.schema.v1.ModuleStateR\x05stateB\x0f\n\r_activated_at\"\xc9\x02\n\x12ModuleRuntimeEvent\x12%\n\x0e\x64\x65ployment_key\x18\x01 \x01(\tR\rdeploymentKey\x12\x43\n\x04\x62\x61se\x18\x02 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.ModuleRuntimeBaseH\x00R\x04\x62\x61se\x88\x01\x01\x12L\n\x07scaling\x18\x03 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.ModuleRuntimeScalingH\x01R\x07scaling\x88\x01\x01\x12U\n\ndeployment\x18\x04 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.ModuleRuntimeDeploymentH\x02R\ndeployment\x88\x01\x01\x42\x07\n\x05_baseB\n\n\x08_scalingB\r\n\x0b_deployment\"9\n\x14ModuleRuntimeScaling\x12!\n\x0cmin_replicas\x18\x01 \x01(\x05R\x0bminReplicas\"\x8d\x01\n\x08Optional\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x36\n\x04type\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeH\x01R\x04type\x88\x01\x01\x42\x06\n\x04_posB\x07\n\x05_type\"R\n\x08Position\x12\x1a\n\x08\x66ilename\x18\x01 \x01(\tR\x08\x66ilename\x12\x12\n\x04line\x18\x02 \x01(\x03R\x04line\x12\x16\n\x06\x63olumn\x18\x03 \x01(\x03R\x06\x63olumn\"b\n\x18ProvisioningCreatedEvent\x12\x46\n\x0e\x64\x65sired_module\x18\x01 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\rdesiredModule\"\xbb\x01\n\x03Ref\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x16\n\x06module\x18\x03 \x01(\tR\x06module\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x46\n\x0ftype_parameters\x18\x04 \x03(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x0etypeParametersB\x06\n\x04_pos\"\x85\x01\n\x06Schema\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x39\n\x07modules\x18\x02 \x03(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x07modulesB\x06\n\x04_pos\"\xfc\x01\n\x0bSchemaState\x12\x39\n\x07modules\x18\x01 \x03(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x07modules\x12-\n\x12\x61\x63tive_deployments\x18\x02 \x03(\tR\x11\x61\x63tiveDeployments\x12_\n\x14serialized_changeset\x18\x03 \x03(\x0b\x32,.xyz.block.ftl.schema.v1.SerializedChangesetR\x13serializedChangeset\x12\"\n\x0cprovisioning\x18\x04 \x03(\tR\x0cprovisioning\"\xad\x01\n\x06Secret\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x31\n\x04type\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04typeB\x06\n\x04_pos\"\xd9\x01\n\x13SerializedChangeset\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x39\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12 \n\x0b\x64\x65ployments\x18\x03 \x03(\tR\x0b\x64\x65ployments\x12=\n\x05state\x18\x04 \x01(\x0e\x32\'.xyz.block.ftl.schema.v1.ChangesetStateR\x05state\x12\x14\n\x05\x65rror\x18\x05 \x01(\tR\x05\x65rror\"J\n\x06String\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"e\n\x0bStringValue\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x14\n\x05value\x18\x02 \x01(\tR\x05valueB\x06\n\x04_pos\"H\n\x04Time\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xd9\x02\n\x05Topic\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x46\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32%.xyz.block.ftl.schema.v1.TopicRuntimeH\x01R\x07runtime\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x33\n\x05\x65vent\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x05\x65vent\x12=\n\x08metadata\x18\x06 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_posB\n\n\x08_runtime\"N\n\x0cTopicRuntime\x12#\n\rkafka_brokers\x18\x01 \x03(\tR\x0ckafkaBrokers\x12\x19\n\x08topic_id\x18\x02 \x01(\tR\x07topicId\"|\n\x11TopicRuntimeEvent\x12\x16\n\x06module\x18\x01 \x01(\tR\x06module\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12?\n\x07payload\x18\x03 \x01(\x0b\x32%.xyz.block.ftl.schema.v1.TopicRuntimeR\x07payload\"\x9a\x05\n\x04Type\x12\x30\n\x03\x61ny\x18\t \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.AnyH\x00R\x03\x61ny\x12\x36\n\x05\x61rray\x18\x07 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.ArrayH\x00R\x05\x61rray\x12\x33\n\x04\x62ool\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.BoolH\x00R\x04\x62ool\x12\x36\n\x05\x62ytes\x18\x04 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.BytesH\x00R\x05\x62ytes\x12\x36\n\x05\x66loat\x18\x02 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.FloatH\x00R\x05\x66loat\x12\x30\n\x03int\x18\x01 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.IntH\x00R\x03int\x12\x30\n\x03map\x18\x08 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.MapH\x00R\x03map\x12?\n\x08optional\x18\x0c \x01(\x0b\x32!.xyz.block.ftl.schema.v1.OptionalH\x00R\x08optional\x12\x30\n\x03ref\x18\x0b \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefH\x00R\x03ref\x12\x39\n\x06string\x18\x03 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.StringH\x00R\x06string\x12\x33\n\x04time\x18\x06 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TimeH\x00R\x04time\x12\x33\n\x04unit\x18\n \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.UnitH\x00R\x04unitB\x07\n\x05value\"\x87\x02\n\tTypeAlias\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x31\n\x04type\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04type\x12=\n\x08metadata\x18\x06 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_pos\"e\n\rTypeParameter\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04name\x18\x02 \x01(\tR\x04nameB\x06\n\x04_pos\"\x82\x01\n\tTypeValue\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x05valueB\x06\n\x04_pos\"H\n\x04Unit\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xe2\x01\n\x05Value\x12@\n\tint_value\x18\x02 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.IntValueH\x00R\x08intValue\x12I\n\x0cstring_value\x18\x01 \x01(\x0b\x32$.xyz.block.ftl.schema.v1.StringValueH\x00R\x0bstringValue\x12\x43\n\ntype_value\x18\x03 \x01(\x0b\x32\".xyz.block.ftl.schema.v1.TypeValueH\x00R\ttypeValueB\x07\n\x05value\"\x96\x03\n\x04Verb\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x37\n\x07request\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x07request\x12\x39\n\x08response\x18\x06 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x08response\x12=\n\x08metadata\x18\x07 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadata\x12\x45\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32$.xyz.block.ftl.schema.v1.VerbRuntimeH\x01R\x07runtime\x88\x01\x01\x42\x06\n\x04_posB\n\n\x08_runtime\"\xb7\x01\n\x0bVerbRuntime\x12<\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.VerbRuntimeBaseR\x04\x62\x61se\x12Y\n\x0csubscription\x18\x02 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.VerbRuntimeSubscriptionH\x00R\x0csubscription\x88\x01\x01\x42\x0f\n\r_subscription\"\xb2\x01\n\x0fVerbRuntimeBase\x12@\n\x0b\x63reate_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\ncreateTime\x88\x01\x01\x12>\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\tstartTime\x88\x01\x01\x42\x0e\n\x0c_create_timeB\r\n\x0b_start_time\"\xf2\x01\n\x10VerbRuntimeEvent\x12\x16\n\x06module\x18\x01 \x01(\tR\x06module\x12\x0e\n\x02id\x18\x02 \x01(\tR\x02id\x12\x41\n\x04\x62\x61se\x18\x03 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.VerbRuntimeBaseH\x00R\x04\x62\x61se\x88\x01\x01\x12Y\n\x0csubscription\x18\x04 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.VerbRuntimeSubscriptionH\x01R\x0csubscription\x88\x01\x01\x42\x07\n\x05_baseB\x0f\n\r_subscription\">\n\x17VerbRuntimeSubscription\x12#\n\rkafka_brokers\x18\x01 \x03(\tR\x0ckafkaBrokers*<\n\tAliasKind\x12\x1a\n\x16\x41LIAS_KIND_UNSPECIFIED\x10\x00\x12\x13\n\x0f\x41LIAS_KIND_JSON\x10\x01*\xec\x01\n\x0e\x43hangesetState\x12\x1f\n\x1b\x43HANGESET_STATE_UNSPECIFIED\x10\x00\x12\x1d\n\x19\x43HANGESET_STATE_PREPARING\x10\x01\x12\x1c\n\x18\x43HANGESET_STATE_PREPARED\x10\x02\x12\x1f\n\x1b\x43HANGESET_STATE_CLEANING_UP\x10\x03\x12\x1d\n\x19\x43HANGESET_STATE_COMMITTED\x10\x04\x12 \n\x1c\x43HANGESET_STATE_ROLLING_BACK\x10\x05\x12\x1a\n\x16\x43HANGESET_STATE_FAILED\x10\x06*\\\n\nFromOffset\x12\x1b\n\x17\x46ROM_OFFSET_UNSPECIFIED\x10\x00\x12\x19\n\x15\x46ROM_OFFSET_BEGINNING\x10\x01\x12\x16\n\x12\x46ROM_OFFSET_LATEST\x10\x02*\x87\x02\n\x0bModuleState\x12\x1c\n\x18MODULE_STATE_UNSPECIFIED\x10\x00\x12\x1d\n\x19MODULE_STATE_PROVISIONING\x10\x01\x12\x16\n\x12MODULE_STATE_READY\x10\x02\x12\x17\n\x13MODULE_STATE_CANARY\x10\x03\x12\x1a\n\x16MODULE_STATE_CANONICAL\x10\x04\x12\x19\n\x15MODULE_STATE_DRAINING\x10\x05\x12 \n\x1cMODULE_STATE_DE_PROVISIONING\x10\x06\x12\x18\n\x14MODULE_STATE_DELETED\x10\x07\x12\x17\n\x13MODULE_STATE_FAILED\x10\x08\x42GP\x01ZCgithub.com/block/ftl/common/protos/xyz/block/ftl/schema/v1;schemapbb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -33,10 +33,14 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'P\001ZCgithub.com/block/ftl/common/protos/xyz/block/ftl/schema/v1;schemapb' - _globals['_ALIASKIND']._serialized_start=15640 - _globals['_ALIASKIND']._serialized_end=15700 - _globals['_FROMOFFSET']._serialized_start=15702 - _globals['_FROMOFFSET']._serialized_end=15794 + _globals['_ALIASKIND']._serialized_start=16929 + _globals['_ALIASKIND']._serialized_end=16989 + _globals['_CHANGESETSTATE']._serialized_start=16992 + _globals['_CHANGESETSTATE']._serialized_end=17228 + _globals['_FROMOFFSET']._serialized_start=17230 + _globals['_FROMOFFSET']._serialized_end=17322 + _globals['_MODULESTATE']._serialized_start=17325 + _globals['_MODULESTATE']._serialized_end=17588 _globals['_AWSIAMAUTHDATABASECONNECTOR']._serialized_start=99 _globals['_AWSIAMAUTHDATABASECONNECTOR']._serialized_end=278 _globals['_ANY']._serialized_start=280 @@ -47,150 +51,160 @@ _globals['_BOOL']._serialized_end=558 _globals['_BYTES']._serialized_start=560 _globals['_BYTES']._serialized_end=633 - _globals['_CONFIG']._serialized_start=636 - _globals['_CONFIG']._serialized_end=809 - _globals['_DSNDATABASECONNECTOR']._serialized_start=811 - _globals['_DSNDATABASECONNECTOR']._serialized_end=917 - _globals['_DATA']._serialized_start=920 - _globals['_DATA']._serialized_end=1264 - _globals['_DATABASE']._serialized_start=1267 - _globals['_DATABASE']._serialized_end=1561 - _globals['_DATABASECONNECTOR']._serialized_start=1564 - _globals['_DATABASECONNECTOR']._serialized_end=1820 - _globals['_DATABASERUNTIME']._serialized_start=1822 - _globals['_DATABASERUNTIME']._serialized_end=1947 - _globals['_DATABASERUNTIMECONNECTIONS']._serialized_start=1950 - _globals['_DATABASERUNTIMECONNECTIONS']._serialized_end=2108 - _globals['_DATABASERUNTIMEEVENT']._serialized_start=2111 - _globals['_DATABASERUNTIMEEVENT']._serialized_end=2260 - _globals['_DECL']._serialized_start=2263 - _globals['_DECL']._serialized_end=2745 - _globals['_DEPLOYMENTACTIVATEDEVENT']._serialized_start=2748 - _globals['_DEPLOYMENTACTIVATEDEVENT']._serialized_end=2890 - _globals['_DEPLOYMENTCREATEDEVENT']._serialized_start=2892 - _globals['_DEPLOYMENTCREATEDEVENT']._serialized_end=2991 - _globals['_DEPLOYMENTDEACTIVATEDEVENT']._serialized_start=2993 - _globals['_DEPLOYMENTDEACTIVATEDEVENT']._serialized_end=3078 - _globals['_DEPLOYMENTREPLICASUPDATEDEVENT']._serialized_start=3080 - _globals['_DEPLOYMENTREPLICASUPDATEDEVENT']._serialized_end=3158 - _globals['_DEPLOYMENTSCHEMAUPDATEDEVENT']._serialized_start=3160 - _globals['_DEPLOYMENTSCHEMAUPDATEDEVENT']._serialized_end=3265 - _globals['_ENUM']._serialized_start=3268 - _globals['_ENUM']._serialized_end=3543 - _globals['_ENUMVARIANT']._serialized_start=3546 - _globals['_ENUMVARIANT']._serialized_end=3727 - _globals['_EVENT']._serialized_start=3730 - _globals['_EVENT']._serialized_end=4854 - _globals['_FIELD']._serialized_start=4857 - _globals['_FIELD']._serialized_end=5092 - _globals['_FLOAT']._serialized_start=5094 - _globals['_FLOAT']._serialized_end=5167 - _globals['_INGRESSPATHCOMPONENT']._serialized_start=5170 - _globals['_INGRESSPATHCOMPONENT']._serialized_end=5401 - _globals['_INGRESSPATHLITERAL']._serialized_start=5403 - _globals['_INGRESSPATHLITERAL']._serialized_end=5509 - _globals['_INGRESSPATHPARAMETER']._serialized_start=5511 - _globals['_INGRESSPATHPARAMETER']._serialized_end=5619 - _globals['_INT']._serialized_start=5621 - _globals['_INT']._serialized_end=5692 - _globals['_INTVALUE']._serialized_start=5694 - _globals['_INTVALUE']._serialized_end=5792 - _globals['_MAP']._serialized_start=5795 - _globals['_MAP']._serialized_end=5968 - _globals['_METADATA']._serialized_start=5971 - _globals['_METADATA']._serialized_end=7224 - _globals['_METADATAALIAS']._serialized_start=7227 - _globals['_METADATAALIAS']._serialized_end=7386 - _globals['_METADATAARTEFACT']._serialized_start=7389 - _globals['_METADATAARTEFACT']._serialized_end=7549 - _globals['_METADATACALLS']._serialized_start=7552 - _globals['_METADATACALLS']._serialized_end=7685 - _globals['_METADATACONFIG']._serialized_start=7688 - _globals['_METADATACONFIG']._serialized_end=7824 - _globals['_METADATACRONJOB']._serialized_start=7826 - _globals['_METADATACRONJOB']._serialized_end=7929 - _globals['_METADATADATABASES']._serialized_start=7932 - _globals['_METADATADATABASES']._serialized_end=8069 - _globals['_METADATAENCODING']._serialized_start=8072 - _globals['_METADATAENCODING']._serialized_end=8202 - _globals['_METADATAINGRESS']._serialized_start=8205 - _globals['_METADATAINGRESS']._serialized_end=8399 - _globals['_METADATAPARTITIONS']._serialized_start=8401 - _globals['_METADATAPARTITIONS']._serialized_end=8519 - _globals['_METADATAPUBLISHER']._serialized_start=8522 - _globals['_METADATAPUBLISHER']._serialized_end=8661 - _globals['_METADATARETRY']._serialized_start=8664 - _globals['_METADATARETRY']._serialized_end=8915 - _globals['_METADATASQLCOLUMN']._serialized_start=8917 - _globals['_METADATASQLCOLUMN']._serialized_end=9044 - _globals['_METADATASQLMIGRATION']._serialized_start=9046 - _globals['_METADATASQLMIGRATION']._serialized_end=9158 - _globals['_METADATASQLQUERY']._serialized_start=9161 - _globals['_METADATASQLQUERY']._serialized_end=9293 - _globals['_METADATASECRETS']._serialized_start=9296 - _globals['_METADATASECRETS']._serialized_end=9435 - _globals['_METADATASUBSCRIBER']._serialized_start=9438 - _globals['_METADATASUBSCRIBER']._serialized_end=9679 - _globals['_METADATATYPEMAP']._serialized_start=9682 - _globals['_METADATATYPEMAP']._serialized_end=9824 - _globals['_MODULE']._serialized_start=9827 - _globals['_MODULE']._serialized_end=10159 - _globals['_MODULERUNTIME']._serialized_start=10162 - _globals['_MODULERUNTIME']._serialized_end=10433 - _globals['_MODULERUNTIMEBASE']._serialized_start=10436 - _globals['_MODULERUNTIMEBASE']._serialized_end=10643 - _globals['_MODULERUNTIMEDEPLOYMENT']._serialized_start=10646 - _globals['_MODULERUNTIMEDEPLOYMENT']._serialized_end=10882 - _globals['_MODULERUNTIMEEVENT']._serialized_start=10885 - _globals['_MODULERUNTIMEEVENT']._serialized_end=11262 - _globals['_MODULERUNTIMESCALING']._serialized_start=11264 - _globals['_MODULERUNTIMESCALING']._serialized_end=11321 - _globals['_OPTIONAL']._serialized_start=11324 - _globals['_OPTIONAL']._serialized_end=11465 - _globals['_POSITION']._serialized_start=11467 - _globals['_POSITION']._serialized_end=11549 - _globals['_PROVISIONINGCREATEDEVENT']._serialized_start=11551 - _globals['_PROVISIONINGCREATEDEVENT']._serialized_end=11649 - _globals['_REF']._serialized_start=11652 - _globals['_REF']._serialized_end=11839 - _globals['_SCHEMA']._serialized_start=11842 - _globals['_SCHEMA']._serialized_end=11975 - _globals['_SCHEMASTATE']._serialized_start=11977 - _globals['_SCHEMASTATE']._serialized_end=12096 - _globals['_SECRET']._serialized_start=12099 - _globals['_SECRET']._serialized_end=12272 - _globals['_STRING']._serialized_start=12274 - _globals['_STRING']._serialized_end=12348 - _globals['_STRINGVALUE']._serialized_start=12350 - _globals['_STRINGVALUE']._serialized_end=12451 - _globals['_TIME']._serialized_start=12453 - _globals['_TIME']._serialized_end=12525 - _globals['_TOPIC']._serialized_start=12528 - _globals['_TOPIC']._serialized_end=12873 - _globals['_TOPICRUNTIME']._serialized_start=12875 - _globals['_TOPICRUNTIME']._serialized_end=12953 - _globals['_TOPICRUNTIMEEVENT']._serialized_start=12955 - _globals['_TOPICRUNTIMEEVENT']._serialized_end=13079 - _globals['_TYPE']._serialized_start=13082 - _globals['_TYPE']._serialized_end=13748 - _globals['_TYPEALIAS']._serialized_start=13751 - _globals['_TYPEALIAS']._serialized_end=14014 - _globals['_TYPEPARAMETER']._serialized_start=14016 - _globals['_TYPEPARAMETER']._serialized_end=14117 - _globals['_TYPEVALUE']._serialized_start=14120 - _globals['_TYPEVALUE']._serialized_end=14250 - _globals['_UNIT']._serialized_start=14252 - _globals['_UNIT']._serialized_end=14324 - _globals['_VALUE']._serialized_start=14327 - _globals['_VALUE']._serialized_end=14553 - _globals['_VERB']._serialized_start=14556 - _globals['_VERB']._serialized_end=14962 - _globals['_VERBRUNTIME']._serialized_start=14965 - _globals['_VERBRUNTIME']._serialized_end=15148 - _globals['_VERBRUNTIMEBASE']._serialized_start=15151 - _globals['_VERBRUNTIMEBASE']._serialized_end=15329 - _globals['_VERBRUNTIMEEVENT']._serialized_start=15332 - _globals['_VERBRUNTIMEEVENT']._serialized_end=15574 - _globals['_VERBRUNTIMESUBSCRIPTION']._serialized_start=15576 - _globals['_VERBRUNTIMESUBSCRIPTION']._serialized_end=15638 + _globals['_CHANGESET']._serialized_start=636 + _globals['_CHANGESET']._serialized_end=883 + _globals['_CHANGESETCOMMITTEDEVENT']._serialized_start=885 + _globals['_CHANGESETCOMMITTEDEVENT']._serialized_end=928 + _globals['_CHANGESETCREATEDEVENT']._serialized_start=930 + _globals['_CHANGESETCREATEDEVENT']._serialized_end=1019 + _globals['_CHANGESETFAILEDEVENT']._serialized_start=1021 + _globals['_CHANGESETFAILEDEVENT']._serialized_end=1083 + _globals['_CONFIG']._serialized_start=1086 + _globals['_CONFIG']._serialized_end=1259 + _globals['_DSNDATABASECONNECTOR']._serialized_start=1261 + _globals['_DSNDATABASECONNECTOR']._serialized_end=1367 + _globals['_DATA']._serialized_start=1370 + _globals['_DATA']._serialized_end=1714 + _globals['_DATABASE']._serialized_start=1717 + _globals['_DATABASE']._serialized_end=2011 + _globals['_DATABASECONNECTOR']._serialized_start=2014 + _globals['_DATABASECONNECTOR']._serialized_end=2270 + _globals['_DATABASERUNTIME']._serialized_start=2272 + _globals['_DATABASERUNTIME']._serialized_end=2397 + _globals['_DATABASERUNTIMECONNECTIONS']._serialized_start=2400 + _globals['_DATABASERUNTIMECONNECTIONS']._serialized_end=2558 + _globals['_DATABASERUNTIMEEVENT']._serialized_start=2561 + _globals['_DATABASERUNTIMEEVENT']._serialized_end=2710 + _globals['_DECL']._serialized_start=2713 + _globals['_DECL']._serialized_end=3195 + _globals['_DEPLOYMENTACTIVATEDEVENT']._serialized_start=3198 + _globals['_DEPLOYMENTACTIVATEDEVENT']._serialized_end=3370 + _globals['_DEPLOYMENTCREATEDEVENT']._serialized_start=3373 + _globals['_DEPLOYMENTCREATEDEVENT']._serialized_end=3502 + _globals['_DEPLOYMENTDEACTIVATEDEVENT']._serialized_start=3504 + _globals['_DEPLOYMENTDEACTIVATEDEVENT']._serialized_end=3619 + _globals['_DEPLOYMENTREPLICASUPDATEDEVENT']._serialized_start=3621 + _globals['_DEPLOYMENTREPLICASUPDATEDEVENT']._serialized_end=3729 + _globals['_DEPLOYMENTSCHEMAUPDATEDEVENT']._serialized_start=3732 + _globals['_DEPLOYMENTSCHEMAUPDATEDEVENT']._serialized_end=3867 + _globals['_ENUM']._serialized_start=3870 + _globals['_ENUM']._serialized_end=4145 + _globals['_ENUMVARIANT']._serialized_start=4148 + _globals['_ENUMVARIANT']._serialized_end=4329 + _globals['_EVENT']._serialized_start=4332 + _globals['_EVENT']._serialized_end=5777 + _globals['_FIELD']._serialized_start=5780 + _globals['_FIELD']._serialized_end=6015 + _globals['_FLOAT']._serialized_start=6017 + _globals['_FLOAT']._serialized_end=6090 + _globals['_INGRESSPATHCOMPONENT']._serialized_start=6093 + _globals['_INGRESSPATHCOMPONENT']._serialized_end=6324 + _globals['_INGRESSPATHLITERAL']._serialized_start=6326 + _globals['_INGRESSPATHLITERAL']._serialized_end=6432 + _globals['_INGRESSPATHPARAMETER']._serialized_start=6434 + _globals['_INGRESSPATHPARAMETER']._serialized_end=6542 + _globals['_INT']._serialized_start=6544 + _globals['_INT']._serialized_end=6615 + _globals['_INTVALUE']._serialized_start=6617 + _globals['_INTVALUE']._serialized_end=6715 + _globals['_MAP']._serialized_start=6718 + _globals['_MAP']._serialized_end=6891 + _globals['_METADATA']._serialized_start=6894 + _globals['_METADATA']._serialized_end=8147 + _globals['_METADATAALIAS']._serialized_start=8150 + _globals['_METADATAALIAS']._serialized_end=8309 + _globals['_METADATAARTEFACT']._serialized_start=8312 + _globals['_METADATAARTEFACT']._serialized_end=8472 + _globals['_METADATACALLS']._serialized_start=8475 + _globals['_METADATACALLS']._serialized_end=8608 + _globals['_METADATACONFIG']._serialized_start=8611 + _globals['_METADATACONFIG']._serialized_end=8747 + _globals['_METADATACRONJOB']._serialized_start=8749 + _globals['_METADATACRONJOB']._serialized_end=8852 + _globals['_METADATADATABASES']._serialized_start=8855 + _globals['_METADATADATABASES']._serialized_end=8992 + _globals['_METADATAENCODING']._serialized_start=8995 + _globals['_METADATAENCODING']._serialized_end=9125 + _globals['_METADATAINGRESS']._serialized_start=9128 + _globals['_METADATAINGRESS']._serialized_end=9322 + _globals['_METADATAPARTITIONS']._serialized_start=9324 + _globals['_METADATAPARTITIONS']._serialized_end=9442 + _globals['_METADATAPUBLISHER']._serialized_start=9445 + _globals['_METADATAPUBLISHER']._serialized_end=9584 + _globals['_METADATARETRY']._serialized_start=9587 + _globals['_METADATARETRY']._serialized_end=9838 + _globals['_METADATASQLCOLUMN']._serialized_start=9840 + _globals['_METADATASQLCOLUMN']._serialized_end=9967 + _globals['_METADATASQLMIGRATION']._serialized_start=9969 + _globals['_METADATASQLMIGRATION']._serialized_end=10081 + _globals['_METADATASQLQUERY']._serialized_start=10084 + _globals['_METADATASQLQUERY']._serialized_end=10216 + _globals['_METADATASECRETS']._serialized_start=10219 + _globals['_METADATASECRETS']._serialized_end=10358 + _globals['_METADATASUBSCRIBER']._serialized_start=10361 + _globals['_METADATASUBSCRIBER']._serialized_end=10602 + _globals['_METADATATYPEMAP']._serialized_start=10605 + _globals['_METADATATYPEMAP']._serialized_end=10747 + _globals['_MODULE']._serialized_start=10750 + _globals['_MODULE']._serialized_end=11082 + _globals['_MODULERUNTIME']._serialized_start=11085 + _globals['_MODULERUNTIME']._serialized_end=11356 + _globals['_MODULERUNTIMEBASE']._serialized_start=11359 + _globals['_MODULERUNTIMEBASE']._serialized_end=11566 + _globals['_MODULERUNTIMEDEPLOYMENT']._serialized_start=11569 + _globals['_MODULERUNTIMEDEPLOYMENT']._serialized_end=11865 + _globals['_MODULERUNTIMEEVENT']._serialized_start=11868 + _globals['_MODULERUNTIMEEVENT']._serialized_end=12197 + _globals['_MODULERUNTIMESCALING']._serialized_start=12199 + _globals['_MODULERUNTIMESCALING']._serialized_end=12256 + _globals['_OPTIONAL']._serialized_start=12259 + _globals['_OPTIONAL']._serialized_end=12400 + _globals['_POSITION']._serialized_start=12402 + _globals['_POSITION']._serialized_end=12484 + _globals['_PROVISIONINGCREATEDEVENT']._serialized_start=12486 + _globals['_PROVISIONINGCREATEDEVENT']._serialized_end=12584 + _globals['_REF']._serialized_start=12587 + _globals['_REF']._serialized_end=12774 + _globals['_SCHEMA']._serialized_start=12777 + _globals['_SCHEMA']._serialized_end=12910 + _globals['_SCHEMASTATE']._serialized_start=12913 + _globals['_SCHEMASTATE']._serialized_end=13165 + _globals['_SECRET']._serialized_start=13168 + _globals['_SECRET']._serialized_end=13341 + _globals['_SERIALIZEDCHANGESET']._serialized_start=13344 + _globals['_SERIALIZEDCHANGESET']._serialized_end=13561 + _globals['_STRING']._serialized_start=13563 + _globals['_STRING']._serialized_end=13637 + _globals['_STRINGVALUE']._serialized_start=13639 + _globals['_STRINGVALUE']._serialized_end=13740 + _globals['_TIME']._serialized_start=13742 + _globals['_TIME']._serialized_end=13814 + _globals['_TOPIC']._serialized_start=13817 + _globals['_TOPIC']._serialized_end=14162 + _globals['_TOPICRUNTIME']._serialized_start=14164 + _globals['_TOPICRUNTIME']._serialized_end=14242 + _globals['_TOPICRUNTIMEEVENT']._serialized_start=14244 + _globals['_TOPICRUNTIMEEVENT']._serialized_end=14368 + _globals['_TYPE']._serialized_start=14371 + _globals['_TYPE']._serialized_end=15037 + _globals['_TYPEALIAS']._serialized_start=15040 + _globals['_TYPEALIAS']._serialized_end=15303 + _globals['_TYPEPARAMETER']._serialized_start=15305 + _globals['_TYPEPARAMETER']._serialized_end=15406 + _globals['_TYPEVALUE']._serialized_start=15409 + _globals['_TYPEVALUE']._serialized_end=15539 + _globals['_UNIT']._serialized_start=15541 + _globals['_UNIT']._serialized_end=15613 + _globals['_VALUE']._serialized_start=15616 + _globals['_VALUE']._serialized_end=15842 + _globals['_VERB']._serialized_start=15845 + _globals['_VERB']._serialized_end=16251 + _globals['_VERBRUNTIME']._serialized_start=16254 + _globals['_VERBRUNTIME']._serialized_end=16437 + _globals['_VERBRUNTIMEBASE']._serialized_start=16440 + _globals['_VERBRUNTIMEBASE']._serialized_end=16618 + _globals['_VERBRUNTIMEEVENT']._serialized_start=16621 + _globals['_VERBRUNTIMEEVENT']._serialized_end=16863 + _globals['_VERBRUNTIMESUBSCRIPTION']._serialized_start=16865 + _globals['_VERBRUNTIMESUBSCRIPTION']._serialized_end=16927 # @@protoc_insertion_point(module_scope) diff --git a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.pyi b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.pyi index a233f669a5..528a612834 100644 --- a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.pyi +++ b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.pyi @@ -12,16 +12,54 @@ class AliasKind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): ALIAS_KIND_UNSPECIFIED: _ClassVar[AliasKind] ALIAS_KIND_JSON: _ClassVar[AliasKind] +class ChangesetState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + CHANGESET_STATE_UNSPECIFIED: _ClassVar[ChangesetState] + CHANGESET_STATE_PREPARING: _ClassVar[ChangesetState] + CHANGESET_STATE_PREPARED: _ClassVar[ChangesetState] + CHANGESET_STATE_CLEANING_UP: _ClassVar[ChangesetState] + CHANGESET_STATE_COMMITTED: _ClassVar[ChangesetState] + CHANGESET_STATE_ROLLING_BACK: _ClassVar[ChangesetState] + CHANGESET_STATE_FAILED: _ClassVar[ChangesetState] + class FromOffset(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () FROM_OFFSET_UNSPECIFIED: _ClassVar[FromOffset] FROM_OFFSET_BEGINNING: _ClassVar[FromOffset] FROM_OFFSET_LATEST: _ClassVar[FromOffset] + +class ModuleState(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + MODULE_STATE_UNSPECIFIED: _ClassVar[ModuleState] + MODULE_STATE_PROVISIONING: _ClassVar[ModuleState] + MODULE_STATE_READY: _ClassVar[ModuleState] + MODULE_STATE_CANARY: _ClassVar[ModuleState] + MODULE_STATE_CANONICAL: _ClassVar[ModuleState] + MODULE_STATE_DRAINING: _ClassVar[ModuleState] + MODULE_STATE_DE_PROVISIONING: _ClassVar[ModuleState] + MODULE_STATE_DELETED: _ClassVar[ModuleState] + MODULE_STATE_FAILED: _ClassVar[ModuleState] ALIAS_KIND_UNSPECIFIED: AliasKind ALIAS_KIND_JSON: AliasKind +CHANGESET_STATE_UNSPECIFIED: ChangesetState +CHANGESET_STATE_PREPARING: ChangesetState +CHANGESET_STATE_PREPARED: ChangesetState +CHANGESET_STATE_CLEANING_UP: ChangesetState +CHANGESET_STATE_COMMITTED: ChangesetState +CHANGESET_STATE_ROLLING_BACK: ChangesetState +CHANGESET_STATE_FAILED: ChangesetState FROM_OFFSET_UNSPECIFIED: FromOffset FROM_OFFSET_BEGINNING: FromOffset FROM_OFFSET_LATEST: FromOffset +MODULE_STATE_UNSPECIFIED: ModuleState +MODULE_STATE_PROVISIONING: ModuleState +MODULE_STATE_READY: ModuleState +MODULE_STATE_CANARY: ModuleState +MODULE_STATE_CANONICAL: ModuleState +MODULE_STATE_DRAINING: ModuleState +MODULE_STATE_DE_PROVISIONING: ModuleState +MODULE_STATE_DELETED: ModuleState +MODULE_STATE_FAILED: ModuleState class AWSIAMAuthDatabaseConnector(_message.Message): __slots__ = ("pos", "username", "endpoint", "database") @@ -61,6 +99,40 @@ class Bytes(_message.Message): pos: Position def __init__(self, pos: _Optional[_Union[Position, _Mapping]] = ...) -> None: ... +class Changeset(_message.Message): + __slots__ = ("key", "created_at", "modules", "state", "error") + KEY_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_FIELD_NUMBER: _ClassVar[int] + MODULES_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + key: str + created_at: _timestamp_pb2.Timestamp + modules: _containers.RepeatedCompositeFieldContainer[Module] + state: ChangesetState + error: str + def __init__(self, key: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., modules: _Optional[_Iterable[_Union[Module, _Mapping]]] = ..., state: _Optional[_Union[ChangesetState, str]] = ..., error: _Optional[str] = ...) -> None: ... + +class ChangesetCommittedEvent(_message.Message): + __slots__ = ("key",) + KEY_FIELD_NUMBER: _ClassVar[int] + key: str + def __init__(self, key: _Optional[str] = ...) -> None: ... + +class ChangesetCreatedEvent(_message.Message): + __slots__ = ("changeset",) + CHANGESET_FIELD_NUMBER: _ClassVar[int] + changeset: Changeset + def __init__(self, changeset: _Optional[_Union[Changeset, _Mapping]] = ...) -> None: ... + +class ChangesetFailedEvent(_message.Message): + __slots__ = ("key", "error") + KEY_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + key: str + error: str + def __init__(self, key: _Optional[str] = ..., error: _Optional[str] = ...) -> None: ... + class Config(_message.Message): __slots__ = ("pos", "comments", "name", "type") POS_FIELD_NUMBER: _ClassVar[int] @@ -168,46 +240,56 @@ class Decl(_message.Message): def __init__(self, config: _Optional[_Union[Config, _Mapping]] = ..., data: _Optional[_Union[Data, _Mapping]] = ..., database: _Optional[_Union[Database, _Mapping]] = ..., enum: _Optional[_Union[Enum, _Mapping]] = ..., secret: _Optional[_Union[Secret, _Mapping]] = ..., topic: _Optional[_Union[Topic, _Mapping]] = ..., type_alias: _Optional[_Union[TypeAlias, _Mapping]] = ..., verb: _Optional[_Union[Verb, _Mapping]] = ...) -> None: ... class DeploymentActivatedEvent(_message.Message): - __slots__ = ("key", "activated_at", "min_replicas") + __slots__ = ("key", "activated_at", "min_replicas", "changeset") KEY_FIELD_NUMBER: _ClassVar[int] ACTIVATED_AT_FIELD_NUMBER: _ClassVar[int] MIN_REPLICAS_FIELD_NUMBER: _ClassVar[int] + CHANGESET_FIELD_NUMBER: _ClassVar[int] key: str activated_at: _timestamp_pb2.Timestamp min_replicas: int - def __init__(self, key: _Optional[str] = ..., activated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., min_replicas: _Optional[int] = ...) -> None: ... + changeset: str + def __init__(self, key: _Optional[str] = ..., activated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., min_replicas: _Optional[int] = ..., changeset: _Optional[str] = ...) -> None: ... class DeploymentCreatedEvent(_message.Message): - __slots__ = ("key", "schema") + __slots__ = ("key", "schema", "changeset") KEY_FIELD_NUMBER: _ClassVar[int] SCHEMA_FIELD_NUMBER: _ClassVar[int] + CHANGESET_FIELD_NUMBER: _ClassVar[int] key: str schema: Module - def __init__(self, key: _Optional[str] = ..., schema: _Optional[_Union[Module, _Mapping]] = ...) -> None: ... + changeset: str + def __init__(self, key: _Optional[str] = ..., schema: _Optional[_Union[Module, _Mapping]] = ..., changeset: _Optional[str] = ...) -> None: ... class DeploymentDeactivatedEvent(_message.Message): - __slots__ = ("key", "module_removed") + __slots__ = ("key", "module_removed", "changeset") KEY_FIELD_NUMBER: _ClassVar[int] MODULE_REMOVED_FIELD_NUMBER: _ClassVar[int] + CHANGESET_FIELD_NUMBER: _ClassVar[int] key: str module_removed: bool - def __init__(self, key: _Optional[str] = ..., module_removed: bool = ...) -> None: ... + changeset: str + def __init__(self, key: _Optional[str] = ..., module_removed: bool = ..., changeset: _Optional[str] = ...) -> None: ... class DeploymentReplicasUpdatedEvent(_message.Message): - __slots__ = ("key", "replicas") + __slots__ = ("key", "replicas", "changeset") KEY_FIELD_NUMBER: _ClassVar[int] REPLICAS_FIELD_NUMBER: _ClassVar[int] + CHANGESET_FIELD_NUMBER: _ClassVar[int] key: str replicas: int - def __init__(self, key: _Optional[str] = ..., replicas: _Optional[int] = ...) -> None: ... + changeset: str + def __init__(self, key: _Optional[str] = ..., replicas: _Optional[int] = ..., changeset: _Optional[str] = ...) -> None: ... class DeploymentSchemaUpdatedEvent(_message.Message): - __slots__ = ("key", "schema") + __slots__ = ("key", "schema", "changeset") KEY_FIELD_NUMBER: _ClassVar[int] SCHEMA_FIELD_NUMBER: _ClassVar[int] + CHANGESET_FIELD_NUMBER: _ClassVar[int] key: str schema: Module - def __init__(self, key: _Optional[str] = ..., schema: _Optional[_Union[Module, _Mapping]] = ...) -> None: ... + changeset: str + def __init__(self, key: _Optional[str] = ..., schema: _Optional[_Union[Module, _Mapping]] = ..., changeset: _Optional[str] = ...) -> None: ... class Enum(_message.Message): __slots__ = ("pos", "comments", "export", "name", "type", "variants") @@ -238,7 +320,10 @@ class EnumVariant(_message.Message): def __init__(self, pos: _Optional[_Union[Position, _Mapping]] = ..., comments: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., value: _Optional[_Union[Value, _Mapping]] = ...) -> None: ... class Event(_message.Message): - __slots__ = ("database_runtime_event", "deployment_activated_event", "deployment_created_event", "deployment_deactivated_event", "deployment_replicas_updated_event", "deployment_schema_updated_event", "module_runtime_event", "provisioning_created_event", "topic_runtime_event", "verb_runtime_event") + __slots__ = ("changeset_committed_event", "changeset_created_event", "changeset_failed_event", "database_runtime_event", "deployment_activated_event", "deployment_created_event", "deployment_deactivated_event", "deployment_replicas_updated_event", "deployment_schema_updated_event", "module_runtime_event", "provisioning_created_event", "topic_runtime_event", "verb_runtime_event") + CHANGESET_COMMITTED_EVENT_FIELD_NUMBER: _ClassVar[int] + CHANGESET_CREATED_EVENT_FIELD_NUMBER: _ClassVar[int] + CHANGESET_FAILED_EVENT_FIELD_NUMBER: _ClassVar[int] DATABASE_RUNTIME_EVENT_FIELD_NUMBER: _ClassVar[int] DEPLOYMENT_ACTIVATED_EVENT_FIELD_NUMBER: _ClassVar[int] DEPLOYMENT_CREATED_EVENT_FIELD_NUMBER: _ClassVar[int] @@ -249,6 +334,9 @@ class Event(_message.Message): PROVISIONING_CREATED_EVENT_FIELD_NUMBER: _ClassVar[int] TOPIC_RUNTIME_EVENT_FIELD_NUMBER: _ClassVar[int] VERB_RUNTIME_EVENT_FIELD_NUMBER: _ClassVar[int] + changeset_committed_event: ChangesetCommittedEvent + changeset_created_event: ChangesetCreatedEvent + changeset_failed_event: ChangesetFailedEvent database_runtime_event: DatabaseRuntimeEvent deployment_activated_event: DeploymentActivatedEvent deployment_created_event: DeploymentCreatedEvent @@ -259,7 +347,7 @@ class Event(_message.Message): provisioning_created_event: ProvisioningCreatedEvent topic_runtime_event: TopicRuntimeEvent verb_runtime_event: VerbRuntimeEvent - def __init__(self, database_runtime_event: _Optional[_Union[DatabaseRuntimeEvent, _Mapping]] = ..., deployment_activated_event: _Optional[_Union[DeploymentActivatedEvent, _Mapping]] = ..., deployment_created_event: _Optional[_Union[DeploymentCreatedEvent, _Mapping]] = ..., deployment_deactivated_event: _Optional[_Union[DeploymentDeactivatedEvent, _Mapping]] = ..., deployment_replicas_updated_event: _Optional[_Union[DeploymentReplicasUpdatedEvent, _Mapping]] = ..., deployment_schema_updated_event: _Optional[_Union[DeploymentSchemaUpdatedEvent, _Mapping]] = ..., module_runtime_event: _Optional[_Union[ModuleRuntimeEvent, _Mapping]] = ..., provisioning_created_event: _Optional[_Union[ProvisioningCreatedEvent, _Mapping]] = ..., topic_runtime_event: _Optional[_Union[TopicRuntimeEvent, _Mapping]] = ..., verb_runtime_event: _Optional[_Union[VerbRuntimeEvent, _Mapping]] = ...) -> None: ... + def __init__(self, changeset_committed_event: _Optional[_Union[ChangesetCommittedEvent, _Mapping]] = ..., changeset_created_event: _Optional[_Union[ChangesetCreatedEvent, _Mapping]] = ..., changeset_failed_event: _Optional[_Union[ChangesetFailedEvent, _Mapping]] = ..., database_runtime_event: _Optional[_Union[DatabaseRuntimeEvent, _Mapping]] = ..., deployment_activated_event: _Optional[_Union[DeploymentActivatedEvent, _Mapping]] = ..., deployment_created_event: _Optional[_Union[DeploymentCreatedEvent, _Mapping]] = ..., deployment_deactivated_event: _Optional[_Union[DeploymentDeactivatedEvent, _Mapping]] = ..., deployment_replicas_updated_event: _Optional[_Union[DeploymentReplicasUpdatedEvent, _Mapping]] = ..., deployment_schema_updated_event: _Optional[_Union[DeploymentSchemaUpdatedEvent, _Mapping]] = ..., module_runtime_event: _Optional[_Union[ModuleRuntimeEvent, _Mapping]] = ..., provisioning_created_event: _Optional[_Union[ProvisioningCreatedEvent, _Mapping]] = ..., topic_runtime_event: _Optional[_Union[TopicRuntimeEvent, _Mapping]] = ..., verb_runtime_event: _Optional[_Union[VerbRuntimeEvent, _Mapping]] = ...) -> None: ... class Field(_message.Message): __slots__ = ("pos", "comments", "name", "type", "metadata") @@ -574,30 +662,30 @@ class ModuleRuntimeBase(_message.Message): def __init__(self, create_time: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., language: _Optional[str] = ..., os: _Optional[str] = ..., arch: _Optional[str] = ..., image: _Optional[str] = ...) -> None: ... class ModuleRuntimeDeployment(_message.Message): - __slots__ = ("endpoint", "deployment_key", "created_at", "activated_at") + __slots__ = ("endpoint", "deployment_key", "created_at", "activated_at", "state") ENDPOINT_FIELD_NUMBER: _ClassVar[int] DEPLOYMENT_KEY_FIELD_NUMBER: _ClassVar[int] CREATED_AT_FIELD_NUMBER: _ClassVar[int] ACTIVATED_AT_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] endpoint: str deployment_key: str created_at: _timestamp_pb2.Timestamp activated_at: _timestamp_pb2.Timestamp - def __init__(self, endpoint: _Optional[str] = ..., deployment_key: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., activated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ...) -> None: ... + state: ModuleState + def __init__(self, endpoint: _Optional[str] = ..., deployment_key: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., activated_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., state: _Optional[_Union[ModuleState, str]] = ...) -> None: ... class ModuleRuntimeEvent(_message.Message): - __slots__ = ("module", "deployment_key", "base", "scaling", "deployment") - MODULE_FIELD_NUMBER: _ClassVar[int] + __slots__ = ("deployment_key", "base", "scaling", "deployment") DEPLOYMENT_KEY_FIELD_NUMBER: _ClassVar[int] BASE_FIELD_NUMBER: _ClassVar[int] SCALING_FIELD_NUMBER: _ClassVar[int] DEPLOYMENT_FIELD_NUMBER: _ClassVar[int] - module: str deployment_key: str base: ModuleRuntimeBase scaling: ModuleRuntimeScaling deployment: ModuleRuntimeDeployment - def __init__(self, module: _Optional[str] = ..., deployment_key: _Optional[str] = ..., base: _Optional[_Union[ModuleRuntimeBase, _Mapping]] = ..., scaling: _Optional[_Union[ModuleRuntimeScaling, _Mapping]] = ..., deployment: _Optional[_Union[ModuleRuntimeDeployment, _Mapping]] = ...) -> None: ... + def __init__(self, deployment_key: _Optional[str] = ..., base: _Optional[_Union[ModuleRuntimeBase, _Mapping]] = ..., scaling: _Optional[_Union[ModuleRuntimeScaling, _Mapping]] = ..., deployment: _Optional[_Union[ModuleRuntimeDeployment, _Mapping]] = ...) -> None: ... class ModuleRuntimeScaling(_message.Message): __slots__ = ("min_replicas",) @@ -650,12 +738,16 @@ class Schema(_message.Message): def __init__(self, pos: _Optional[_Union[Position, _Mapping]] = ..., modules: _Optional[_Iterable[_Union[Module, _Mapping]]] = ...) -> None: ... class SchemaState(_message.Message): - __slots__ = ("modules", "active_deployments") + __slots__ = ("modules", "active_deployments", "serialized_changeset", "provisioning") MODULES_FIELD_NUMBER: _ClassVar[int] ACTIVE_DEPLOYMENTS_FIELD_NUMBER: _ClassVar[int] + SERIALIZED_CHANGESET_FIELD_NUMBER: _ClassVar[int] + PROVISIONING_FIELD_NUMBER: _ClassVar[int] modules: _containers.RepeatedCompositeFieldContainer[Module] active_deployments: _containers.RepeatedScalarFieldContainer[str] - def __init__(self, modules: _Optional[_Iterable[_Union[Module, _Mapping]]] = ..., active_deployments: _Optional[_Iterable[str]] = ...) -> None: ... + serialized_changeset: _containers.RepeatedCompositeFieldContainer[SerializedChangeset] + provisioning: _containers.RepeatedScalarFieldContainer[str] + def __init__(self, modules: _Optional[_Iterable[_Union[Module, _Mapping]]] = ..., active_deployments: _Optional[_Iterable[str]] = ..., serialized_changeset: _Optional[_Iterable[_Union[SerializedChangeset, _Mapping]]] = ..., provisioning: _Optional[_Iterable[str]] = ...) -> None: ... class Secret(_message.Message): __slots__ = ("pos", "comments", "name", "type") @@ -669,6 +761,20 @@ class Secret(_message.Message): type: Type def __init__(self, pos: _Optional[_Union[Position, _Mapping]] = ..., comments: _Optional[_Iterable[str]] = ..., name: _Optional[str] = ..., type: _Optional[_Union[Type, _Mapping]] = ...) -> None: ... +class SerializedChangeset(_message.Message): + __slots__ = ("key", "created_at", "deployments", "state", "error") + KEY_FIELD_NUMBER: _ClassVar[int] + CREATED_AT_FIELD_NUMBER: _ClassVar[int] + DEPLOYMENTS_FIELD_NUMBER: _ClassVar[int] + STATE_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + key: str + created_at: _timestamp_pb2.Timestamp + deployments: _containers.RepeatedScalarFieldContainer[str] + state: ChangesetState + error: str + def __init__(self, key: _Optional[str] = ..., created_at: _Optional[_Union[_timestamp_pb2.Timestamp, _Mapping]] = ..., deployments: _Optional[_Iterable[str]] = ..., state: _Optional[_Union[ChangesetState, str]] = ..., error: _Optional[str] = ...) -> None: ... + class String(_message.Message): __slots__ = ("pos",) POS_FIELD_NUMBER: _ClassVar[int] diff --git a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/controller_pb2.py b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/controller_pb2.py index 7abd733137..bebdb53d6f 100644 --- a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/controller_pb2.py +++ b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/controller_pb2.py @@ -27,7 +27,7 @@ from xyz.block.ftl.v1 import ftl_pb2 as xyz_dot_block_dot_ftl_dot_v1_dot_ftl__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!xyz/block/ftl/v1/controller.proto\x12\x10xyz.block.ftl.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a$xyz/block/ftl/schema/v1/schema.proto\x1a\x1axyz/block/ftl/v1/ftl.proto\"@\n\x17GetArtefactDiffsRequest\x12%\n\x0e\x63lient_digests\x18\x01 \x03(\tR\rclientDigests\"\x94\x01\n\x18GetArtefactDiffsResponse\x12\'\n\x0fmissing_digests\x18\x01 \x03(\tR\x0emissingDigests\x12O\n\x10\x63lient_artefacts\x18\x02 \x03(\x0b\x32$.xyz.block.ftl.v1.DeploymentArtefactR\x0f\x63lientArtefacts\"1\n\x15UploadArtefactRequest\x12\x18\n\x07\x63ontent\x18\x01 \x01(\x0cR\x07\x63ontent\"0\n\x16UploadArtefactResponse\x12\x16\n\x06\x64igest\x18\x02 \x01(\x0cR\x06\x64igest\"`\n\x12\x44\x65ploymentArtefact\x12\x16\n\x06\x64igest\x18\x01 \x01(\tR\x06\x64igest\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\x1e\n\nexecutable\x18\x03 \x01(\x08R\nexecutable\"R\n\x17\x43reateDeploymentRequest\x12\x37\n\x06schema\x18\x01 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x06schema\"\x94\x01\n\x18\x43reateDeploymentResponse\x12%\n\x0e\x64\x65ployment_key\x18\x01 \x01(\tR\rdeploymentKey\x12\x37\n\x15\x61\x63tive_deployment_key\x18\x02 \x01(\tH\x00R\x13\x61\x63tiveDeploymentKey\x88\x01\x01\x42\x18\n\x16_active_deployment_key\"\x93\x01\n\x1dGetDeploymentArtefactsRequest\x12%\n\x0e\x64\x65ployment_key\x18\x01 \x01(\tR\rdeploymentKey\x12K\n\x0ehave_artefacts\x18\x02 \x03(\x0b\x32$.xyz.block.ftl.v1.DeploymentArtefactR\rhaveArtefacts\"x\n\x1eGetDeploymentArtefactsResponse\x12@\n\x08\x61rtefact\x18\x01 \x01(\x0b\x32$.xyz.block.ftl.v1.DeploymentArtefactR\x08\x61rtefact\x12\x14\n\x05\x63hunk\x18\x02 \x01(\x0cR\x05\x63hunk\"=\n\x14GetDeploymentRequest\x12%\n\x0e\x64\x65ployment_key\x18\x01 \x01(\tR\rdeploymentKey\"P\n\x15GetDeploymentResponse\x12\x37\n\x06schema\x18\x01 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x06schema\"\x96\x01\n\x15RegisterRunnerRequest\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12\x1e\n\ndeployment\x18\x03 \x01(\tR\ndeployment\x12/\n\x06labels\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06labels\"\x18\n\x16RegisterRunnerResponse\"u\n\x13UpdateDeployRequest\x12%\n\x0e\x64\x65ployment_key\x18\x01 \x01(\tR\rdeploymentKey\x12&\n\x0cmin_replicas\x18\x02 \x01(\x05H\x00R\x0bminReplicas\x88\x01\x01\x42\x0f\n\r_min_replicas\"\x16\n\x14UpdateDeployResponse\"`\n\x14ReplaceDeployRequest\x12%\n\x0e\x64\x65ployment_key\x18\x01 \x01(\tR\rdeploymentKey\x12!\n\x0cmin_replicas\x18\x02 \x01(\x05R\x0bminReplicas\"\x17\n\x15ReplaceDeployResponse\"\x0f\n\rStatusRequest\"\xfc\x06\n\x0eStatusResponse\x12M\n\x0b\x63ontrollers\x18\x01 \x03(\x0b\x32+.xyz.block.ftl.v1.StatusResponse.ControllerR\x0b\x63ontrollers\x12\x41\n\x07runners\x18\x02 \x03(\x0b\x32\'.xyz.block.ftl.v1.StatusResponse.RunnerR\x07runners\x12M\n\x0b\x64\x65ployments\x18\x03 \x03(\x0b\x32+.xyz.block.ftl.v1.StatusResponse.DeploymentR\x0b\x64\x65ployments\x12>\n\x06routes\x18\x05 \x03(\x0b\x32&.xyz.block.ftl.v1.StatusResponse.RouteR\x06routes\x1aT\n\nController\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12\x18\n\x07version\x18\x03 \x01(\tR\x07version\x1a\x9b\x01\n\x06Runner\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12#\n\ndeployment\x18\x03 \x01(\tH\x00R\ndeployment\x88\x01\x01\x12/\n\x06labels\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructR\x06labelsB\r\n\x0b_deployment\x1a\xf7\x01\n\nDeployment\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x1a\n\x08language\x18\x02 \x01(\tR\x08language\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12!\n\x0cmin_replicas\x18\x04 \x01(\x05R\x0bminReplicas\x12\x1a\n\x08replicas\x18\x07 \x01(\x05R\x08replicas\x12/\n\x06labels\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06labels\x12\x37\n\x06schema\x18\x06 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x06schema\x1a[\n\x05Route\x12\x16\n\x06module\x18\x01 \x01(\tR\x06module\x12\x1e\n\ndeployment\x18\x02 \x01(\tR\ndeployment\x12\x1a\n\x08\x65ndpoint\x18\x03 \x01(\tR\x08\x65ndpoint\"\x14\n\x12ProcessListRequest\"\xaf\x03\n\x13ProcessListResponse\x12K\n\tprocesses\x18\x01 \x03(\x0b\x32-.xyz.block.ftl.v1.ProcessListResponse.ProcessR\tprocesses\x1an\n\rProcessRunner\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12/\n\x06labels\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x06labels\x1a\xda\x01\n\x07Process\x12\x1e\n\ndeployment\x18\x01 \x01(\tR\ndeployment\x12!\n\x0cmin_replicas\x18\x02 \x01(\x05R\x0bminReplicas\x12/\n\x06labels\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x06labels\x12P\n\x06runner\x18\x04 \x01(\x0b\x32\x33.xyz.block.ftl.v1.ProcessListResponse.ProcessRunnerH\x00R\x06runner\x88\x01\x01\x42\t\n\x07_runner2\xcc\x08\n\x11\x43ontrollerService\x12J\n\x04Ping\x12\x1d.xyz.block.ftl.v1.PingRequest\x1a\x1e.xyz.block.ftl.v1.PingResponse\"\x03\x90\x02\x01\x12Z\n\x0bProcessList\x12$.xyz.block.ftl.v1.ProcessListRequest\x1a%.xyz.block.ftl.v1.ProcessListResponse\x12K\n\x06Status\x12\x1f.xyz.block.ftl.v1.StatusRequest\x1a .xyz.block.ftl.v1.StatusResponse\x12i\n\x10GetArtefactDiffs\x12).xyz.block.ftl.v1.GetArtefactDiffsRequest\x1a*.xyz.block.ftl.v1.GetArtefactDiffsResponse\x12\x63\n\x0eUploadArtefact\x12\'.xyz.block.ftl.v1.UploadArtefactRequest\x1a(.xyz.block.ftl.v1.UploadArtefactResponse\x12i\n\x10\x43reateDeployment\x12).xyz.block.ftl.v1.CreateDeploymentRequest\x1a*.xyz.block.ftl.v1.CreateDeploymentResponse\x12`\n\rGetDeployment\x12&.xyz.block.ftl.v1.GetDeploymentRequest\x1a\'.xyz.block.ftl.v1.GetDeploymentResponse\x12}\n\x16GetDeploymentArtefacts\x12/.xyz.block.ftl.v1.GetDeploymentArtefactsRequest\x1a\x30.xyz.block.ftl.v1.GetDeploymentArtefactsResponse0\x01\x12\x65\n\x0eRegisterRunner\x12\'.xyz.block.ftl.v1.RegisterRunnerRequest\x1a(.xyz.block.ftl.v1.RegisterRunnerResponse(\x01\x12]\n\x0cUpdateDeploy\x12%.xyz.block.ftl.v1.UpdateDeployRequest\x1a&.xyz.block.ftl.v1.UpdateDeployResponse\x12`\n\rReplaceDeploy\x12&.xyz.block.ftl.v1.ReplaceDeployRequest\x1a\'.xyz.block.ftl.v1.ReplaceDeployResponseB>P\x01Z:github.com/block/ftl/backend/protos/xyz/block/ftl/v1;ftlv1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!xyz/block/ftl/v1/controller.proto\x12\x10xyz.block.ftl.v1\x1a\x1cgoogle/protobuf/struct.proto\x1a$xyz/block/ftl/schema/v1/schema.proto\x1a\x1axyz/block/ftl/v1/ftl.proto\"@\n\x17GetArtefactDiffsRequest\x12%\n\x0e\x63lient_digests\x18\x01 \x03(\tR\rclientDigests\"\x94\x01\n\x18GetArtefactDiffsResponse\x12\'\n\x0fmissing_digests\x18\x01 \x03(\tR\x0emissingDigests\x12O\n\x10\x63lient_artefacts\x18\x02 \x03(\x0b\x32$.xyz.block.ftl.v1.DeploymentArtefactR\x0f\x63lientArtefacts\"1\n\x15UploadArtefactRequest\x12\x18\n\x07\x63ontent\x18\x01 \x01(\x0cR\x07\x63ontent\"0\n\x16UploadArtefactResponse\x12\x16\n\x06\x64igest\x18\x02 \x01(\x0cR\x06\x64igest\"`\n\x12\x44\x65ploymentArtefact\x12\x16\n\x06\x64igest\x18\x01 \x01(\tR\x06\x64igest\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\x1e\n\nexecutable\x18\x03 \x01(\x08R\nexecutable\"R\n\x17\x43reateDeploymentRequest\x12\x37\n\x06schema\x18\x01 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x06schema\"\x94\x01\n\x18\x43reateDeploymentResponse\x12%\n\x0e\x64\x65ployment_key\x18\x01 \x01(\tR\rdeploymentKey\x12\x37\n\x15\x61\x63tive_deployment_key\x18\x02 \x01(\tH\x00R\x13\x61\x63tiveDeploymentKey\x88\x01\x01\x42\x18\n\x16_active_deployment_key\"\x93\x01\n\x1dGetDeploymentArtefactsRequest\x12%\n\x0e\x64\x65ployment_key\x18\x01 \x01(\tR\rdeploymentKey\x12K\n\x0ehave_artefacts\x18\x02 \x03(\x0b\x32$.xyz.block.ftl.v1.DeploymentArtefactR\rhaveArtefacts\"x\n\x1eGetDeploymentArtefactsResponse\x12@\n\x08\x61rtefact\x18\x01 \x01(\x0b\x32$.xyz.block.ftl.v1.DeploymentArtefactR\x08\x61rtefact\x12\x14\n\x05\x63hunk\x18\x02 \x01(\x0cR\x05\x63hunk\"=\n\x14GetDeploymentRequest\x12%\n\x0e\x64\x65ployment_key\x18\x01 \x01(\tR\rdeploymentKey\"P\n\x15GetDeploymentResponse\x12\x37\n\x06schema\x18\x01 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x06schema\"\x96\x01\n\x15RegisterRunnerRequest\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12\x1e\n\ndeployment\x18\x03 \x01(\tR\ndeployment\x12/\n\x06labels\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06labels\"\x18\n\x16RegisterRunnerResponse\"`\n\x14ReplaceDeployRequest\x12%\n\x0e\x64\x65ployment_key\x18\x01 \x01(\tR\rdeploymentKey\x12!\n\x0cmin_replicas\x18\x02 \x01(\x05R\x0bminReplicas\"\x17\n\x15ReplaceDeployResponse\"\x0f\n\rStatusRequest\"\xfc\x06\n\x0eStatusResponse\x12M\n\x0b\x63ontrollers\x18\x01 \x03(\x0b\x32+.xyz.block.ftl.v1.StatusResponse.ControllerR\x0b\x63ontrollers\x12\x41\n\x07runners\x18\x02 \x03(\x0b\x32\'.xyz.block.ftl.v1.StatusResponse.RunnerR\x07runners\x12M\n\x0b\x64\x65ployments\x18\x03 \x03(\x0b\x32+.xyz.block.ftl.v1.StatusResponse.DeploymentR\x0b\x64\x65ployments\x12>\n\x06routes\x18\x05 \x03(\x0b\x32&.xyz.block.ftl.v1.StatusResponse.RouteR\x06routes\x1aT\n\nController\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12\x18\n\x07version\x18\x03 \x01(\tR\x07version\x1a\x9b\x01\n\x06Runner\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12#\n\ndeployment\x18\x03 \x01(\tH\x00R\ndeployment\x88\x01\x01\x12/\n\x06labels\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructR\x06labelsB\r\n\x0b_deployment\x1a\xf7\x01\n\nDeployment\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x1a\n\x08language\x18\x02 \x01(\tR\x08language\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12!\n\x0cmin_replicas\x18\x04 \x01(\x05R\x0bminReplicas\x12\x1a\n\x08replicas\x18\x07 \x01(\x05R\x08replicas\x12/\n\x06labels\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructR\x06labels\x12\x37\n\x06schema\x18\x06 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x06schema\x1a[\n\x05Route\x12\x16\n\x06module\x18\x01 \x01(\tR\x06module\x12\x1e\n\ndeployment\x18\x02 \x01(\tR\ndeployment\x12\x1a\n\x08\x65ndpoint\x18\x03 \x01(\tR\x08\x65ndpoint\"\x14\n\x12ProcessListRequest\"\xaf\x03\n\x13ProcessListResponse\x12K\n\tprocesses\x18\x01 \x03(\x0b\x32-.xyz.block.ftl.v1.ProcessListResponse.ProcessR\tprocesses\x1an\n\rProcessRunner\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x1a\n\x08\x65ndpoint\x18\x02 \x01(\tR\x08\x65ndpoint\x12/\n\x06labels\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x06labels\x1a\xda\x01\n\x07Process\x12\x1e\n\ndeployment\x18\x01 \x01(\tR\ndeployment\x12!\n\x0cmin_replicas\x18\x02 \x01(\x05R\x0bminReplicas\x12/\n\x06labels\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructR\x06labels\x12P\n\x06runner\x18\x04 \x01(\x0b\x32\x33.xyz.block.ftl.v1.ProcessListResponse.ProcessRunnerH\x00R\x06runner\x88\x01\x01\x42\t\n\x07_runner2\xa0\x06\n\x11\x43ontrollerService\x12J\n\x04Ping\x12\x1d.xyz.block.ftl.v1.PingRequest\x1a\x1e.xyz.block.ftl.v1.PingResponse\"\x03\x90\x02\x01\x12Z\n\x0bProcessList\x12$.xyz.block.ftl.v1.ProcessListRequest\x1a%.xyz.block.ftl.v1.ProcessListResponse\x12K\n\x06Status\x12\x1f.xyz.block.ftl.v1.StatusRequest\x1a .xyz.block.ftl.v1.StatusResponse\x12i\n\x10GetArtefactDiffs\x12).xyz.block.ftl.v1.GetArtefactDiffsRequest\x1a*.xyz.block.ftl.v1.GetArtefactDiffsResponse\x12\x63\n\x0eUploadArtefact\x12\'.xyz.block.ftl.v1.UploadArtefactRequest\x1a(.xyz.block.ftl.v1.UploadArtefactResponse\x12`\n\rGetDeployment\x12&.xyz.block.ftl.v1.GetDeploymentRequest\x1a\'.xyz.block.ftl.v1.GetDeploymentResponse\x12}\n\x16GetDeploymentArtefacts\x12/.xyz.block.ftl.v1.GetDeploymentArtefactsRequest\x1a\x30.xyz.block.ftl.v1.GetDeploymentArtefactsResponse0\x01\x12\x65\n\x0eRegisterRunner\x12\'.xyz.block.ftl.v1.RegisterRunnerRequest\x1a(.xyz.block.ftl.v1.RegisterRunnerResponse(\x01\x42>P\x01Z:github.com/block/ftl/backend/protos/xyz/block/ftl/v1;ftlv1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -63,34 +63,30 @@ _globals['_REGISTERRUNNERREQUEST']._serialized_end=1370 _globals['_REGISTERRUNNERRESPONSE']._serialized_start=1372 _globals['_REGISTERRUNNERRESPONSE']._serialized_end=1396 - _globals['_UPDATEDEPLOYREQUEST']._serialized_start=1398 - _globals['_UPDATEDEPLOYREQUEST']._serialized_end=1515 - _globals['_UPDATEDEPLOYRESPONSE']._serialized_start=1517 - _globals['_UPDATEDEPLOYRESPONSE']._serialized_end=1539 - _globals['_REPLACEDEPLOYREQUEST']._serialized_start=1541 - _globals['_REPLACEDEPLOYREQUEST']._serialized_end=1637 - _globals['_REPLACEDEPLOYRESPONSE']._serialized_start=1639 - _globals['_REPLACEDEPLOYRESPONSE']._serialized_end=1662 - _globals['_STATUSREQUEST']._serialized_start=1664 - _globals['_STATUSREQUEST']._serialized_end=1679 - _globals['_STATUSRESPONSE']._serialized_start=1682 - _globals['_STATUSRESPONSE']._serialized_end=2574 - _globals['_STATUSRESPONSE_CONTROLLER']._serialized_start=1989 - _globals['_STATUSRESPONSE_CONTROLLER']._serialized_end=2073 - _globals['_STATUSRESPONSE_RUNNER']._serialized_start=2076 - _globals['_STATUSRESPONSE_RUNNER']._serialized_end=2231 - _globals['_STATUSRESPONSE_DEPLOYMENT']._serialized_start=2234 - _globals['_STATUSRESPONSE_DEPLOYMENT']._serialized_end=2481 - _globals['_STATUSRESPONSE_ROUTE']._serialized_start=2483 - _globals['_STATUSRESPONSE_ROUTE']._serialized_end=2574 - _globals['_PROCESSLISTREQUEST']._serialized_start=2576 - _globals['_PROCESSLISTREQUEST']._serialized_end=2596 - _globals['_PROCESSLISTRESPONSE']._serialized_start=2599 - _globals['_PROCESSLISTRESPONSE']._serialized_end=3030 - _globals['_PROCESSLISTRESPONSE_PROCESSRUNNER']._serialized_start=2699 - _globals['_PROCESSLISTRESPONSE_PROCESSRUNNER']._serialized_end=2809 - _globals['_PROCESSLISTRESPONSE_PROCESS']._serialized_start=2812 - _globals['_PROCESSLISTRESPONSE_PROCESS']._serialized_end=3030 - _globals['_CONTROLLERSERVICE']._serialized_start=3033 - _globals['_CONTROLLERSERVICE']._serialized_end=4133 + _globals['_REPLACEDEPLOYREQUEST']._serialized_start=1398 + _globals['_REPLACEDEPLOYREQUEST']._serialized_end=1494 + _globals['_REPLACEDEPLOYRESPONSE']._serialized_start=1496 + _globals['_REPLACEDEPLOYRESPONSE']._serialized_end=1519 + _globals['_STATUSREQUEST']._serialized_start=1521 + _globals['_STATUSREQUEST']._serialized_end=1536 + _globals['_STATUSRESPONSE']._serialized_start=1539 + _globals['_STATUSRESPONSE']._serialized_end=2431 + _globals['_STATUSRESPONSE_CONTROLLER']._serialized_start=1846 + _globals['_STATUSRESPONSE_CONTROLLER']._serialized_end=1930 + _globals['_STATUSRESPONSE_RUNNER']._serialized_start=1933 + _globals['_STATUSRESPONSE_RUNNER']._serialized_end=2088 + _globals['_STATUSRESPONSE_DEPLOYMENT']._serialized_start=2091 + _globals['_STATUSRESPONSE_DEPLOYMENT']._serialized_end=2338 + _globals['_STATUSRESPONSE_ROUTE']._serialized_start=2340 + _globals['_STATUSRESPONSE_ROUTE']._serialized_end=2431 + _globals['_PROCESSLISTREQUEST']._serialized_start=2433 + _globals['_PROCESSLISTREQUEST']._serialized_end=2453 + _globals['_PROCESSLISTRESPONSE']._serialized_start=2456 + _globals['_PROCESSLISTRESPONSE']._serialized_end=2887 + _globals['_PROCESSLISTRESPONSE_PROCESSRUNNER']._serialized_start=2556 + _globals['_PROCESSLISTRESPONSE_PROCESSRUNNER']._serialized_end=2666 + _globals['_PROCESSLISTRESPONSE_PROCESS']._serialized_start=2669 + _globals['_PROCESSLISTRESPONSE_PROCESS']._serialized_end=2887 + _globals['_CONTROLLERSERVICE']._serialized_start=2890 + _globals['_CONTROLLERSERVICE']._serialized_end=3690 # @@protoc_insertion_point(module_scope) diff --git a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/controller_pb2.pyi b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/controller_pb2.pyi index ef409aef6a..f9bf98a732 100644 --- a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/controller_pb2.pyi +++ b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/controller_pb2.pyi @@ -102,18 +102,6 @@ class RegisterRunnerResponse(_message.Message): __slots__ = () def __init__(self) -> None: ... -class UpdateDeployRequest(_message.Message): - __slots__ = ("deployment_key", "min_replicas") - DEPLOYMENT_KEY_FIELD_NUMBER: _ClassVar[int] - MIN_REPLICAS_FIELD_NUMBER: _ClassVar[int] - deployment_key: str - min_replicas: int - def __init__(self, deployment_key: _Optional[str] = ..., min_replicas: _Optional[int] = ...) -> None: ... - -class UpdateDeployResponse(_message.Message): - __slots__ = () - def __init__(self) -> None: ... - class ReplaceDeployRequest(_message.Message): __slots__ = ("deployment_key", "min_replicas") DEPLOYMENT_KEY_FIELD_NUMBER: _ClassVar[int] diff --git a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/schemaservice_pb2.py b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/schemaservice_pb2.py index 1c87d3368d..46aec900c8 100644 --- a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/schemaservice_pb2.py +++ b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/schemaservice_pb2.py @@ -26,7 +26,7 @@ from xyz.block.ftl.v1 import ftl_pb2 as xyz_dot_block_dot_ftl_dot_v1_dot_ftl__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$xyz/block/ftl/v1/schemaservice.proto\x12\x10xyz.block.ftl.v1\x1a$xyz/block/ftl/schema/v1/schema.proto\x1a\x1axyz/block/ftl/v1/ftl.proto\"\x12\n\x10GetSchemaRequest\"L\n\x11GetSchemaResponse\x12\x37\n\x06schema\x18\x01 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.SchemaR\x06schema\"\x13\n\x11PullSchemaRequest\"\xc1\x02\n\x12PullSchemaResponse\x12*\n\x0e\x64\x65ployment_key\x18\x01 \x01(\tH\x00R\rdeploymentKey\x88\x01\x01\x12\x1f\n\x0bmodule_name\x18\x02 \x01(\tR\nmoduleName\x12<\n\x06schema\x18\x04 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleH\x01R\x06schema\x88\x01\x01\x12\x12\n\x04more\x18\x03 \x01(\x08R\x04more\x12G\n\x0b\x63hange_type\x18\x05 \x01(\x0e\x32&.xyz.block.ftl.v1.DeploymentChangeTypeR\nchangeType\x12%\n\x0emodule_removed\x18\x06 \x01(\x08R\rmoduleRemovedB\x11\n\x0f_deployment_keyB\t\n\x07_schema\"c\n\x1eUpdateDeploymentRuntimeRequest\x12\x41\n\x05\x65vent\x18\x02 \x01(\x0b\x32+.xyz.block.ftl.schema.v1.ModuleRuntimeEventR\x05\x65vent\"!\n\x1fUpdateDeploymentRuntimeResponse\"K\n\x13UpdateSchemaRequest\x12\x34\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.EventR\x05\x65vent\"\x16\n\x14UpdateSchemaResponse\"\x17\n\x15GetDeploymentsRequest\"R\n\x16GetDeploymentsResponse\x12\x38\n\x06schema\x18\x01 \x03(\x0b\x32 .xyz.block.ftl.v1.DeployedSchemaR\x06schema\"\x8d\x01\n\x0e\x44\x65ployedSchema\x12%\n\x0e\x64\x65ployment_key\x18\x01 \x01(\tR\rdeploymentKey\x12\x37\n\x06schema\x18\x02 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x06schema\x12\x1b\n\tis_active\x18\x03 \x01(\x08R\x08isActive*\xa8\x01\n\x14\x44\x65ploymentChangeType\x12&\n\"DEPLOYMENT_CHANGE_TYPE_UNSPECIFIED\x10\x00\x12 \n\x1c\x44\x45PLOYMENT_CHANGE_TYPE_ADDED\x10\x01\x12\"\n\x1e\x44\x45PLOYMENT_CHANGE_TYPE_REMOVED\x10\x02\x12\"\n\x1e\x44\x45PLOYMENT_CHANGE_TYPE_CHANGED\x10\x03\x32\xda\x04\n\rSchemaService\x12J\n\x04Ping\x12\x1d.xyz.block.ftl.v1.PingRequest\x1a\x1e.xyz.block.ftl.v1.PingResponse\"\x03\x90\x02\x01\x12Y\n\tGetSchema\x12\".xyz.block.ftl.v1.GetSchemaRequest\x1a#.xyz.block.ftl.v1.GetSchemaResponse\"\x03\x90\x02\x01\x12^\n\nPullSchema\x12#.xyz.block.ftl.v1.PullSchemaRequest\x1a$.xyz.block.ftl.v1.PullSchemaResponse\"\x03\x90\x02\x01\x30\x01\x12~\n\x17UpdateDeploymentRuntime\x12\x30.xyz.block.ftl.v1.UpdateDeploymentRuntimeRequest\x1a\x31.xyz.block.ftl.v1.UpdateDeploymentRuntimeResponse\x12]\n\x0cUpdateSchema\x12%.xyz.block.ftl.v1.UpdateSchemaRequest\x1a&.xyz.block.ftl.v1.UpdateSchemaResponse\x12\x63\n\x0eGetDeployments\x12\'.xyz.block.ftl.v1.GetDeploymentsRequest\x1a(.xyz.block.ftl.v1.GetDeploymentsResponseB>P\x01Z:github.com/block/ftl/backend/protos/xyz/block/ftl/v1;ftlv1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$xyz/block/ftl/v1/schemaservice.proto\x12\x10xyz.block.ftl.v1\x1a$xyz/block/ftl/schema/v1/schema.proto\x1a\x1axyz/block/ftl/v1/ftl.proto\"\x12\n\x10GetSchemaRequest\"\x90\x01\n\x11GetSchemaResponse\x12\x37\n\x06schema\x18\x01 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.SchemaR\x06schema\x12\x42\n\nchangesets\x18\x02 \x03(\x0b\x32\".xyz.block.ftl.schema.v1.ChangesetR\nchangesets\"\x13\n\x11PullSchemaRequest\"\xc6\t\n\x12PullSchemaResponse\x12\x64\n\x11\x63hangeset_created\x18\x04 \x01(\x0b\x32\x35.xyz.block.ftl.v1.PullSchemaResponse.ChangesetCreatedH\x00R\x10\x63hangesetCreated\x12\x61\n\x10\x63hangeset_failed\x18\x05 \x01(\x0b\x32\x34.xyz.block.ftl.v1.PullSchemaResponse.ChangesetFailedH\x00R\x0f\x63hangesetFailed\x12j\n\x13\x63hangeset_committed\x18\x06 \x01(\x0b\x32\x37.xyz.block.ftl.v1.PullSchemaResponse.ChangesetCommittedH\x00R\x12\x63hangesetCommitted\x12g\n\x12\x64\x65ployment_created\x18\x07 \x01(\x0b\x32\x36.xyz.block.ftl.v1.PullSchemaResponse.DeploymentCreatedH\x00R\x11\x64\x65ploymentCreated\x12g\n\x12\x64\x65ployment_updated\x18\x08 \x01(\x0b\x32\x36.xyz.block.ftl.v1.PullSchemaResponse.DeploymentUpdatedH\x00R\x11\x64\x65ploymentUpdated\x12g\n\x12\x64\x65ployment_removed\x18\t \x01(\x0b\x32\x36.xyz.block.ftl.v1.PullSchemaResponse.DeploymentRemovedH\x00R\x11\x64\x65ploymentRemoved\x12\x14\n\x04more\x18\x92\xf7\x01 \x01(\x08R\x04more\x1aT\n\x10\x43hangesetCreated\x12@\n\tchangeset\x18\x01 \x01(\x0b\x32\".xyz.block.ftl.schema.v1.ChangesetR\tchangeset\x1a\x39\n\x0f\x43hangesetFailed\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05\x65rror\x18\x02 \x01(\tR\x05\x65rror\x1a&\n\x12\x43hangesetCommitted\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x1a\\\n\x11\x44\x65ploymentCreated\x12<\n\x06schema\x18\x01 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleH\x00R\x06schema\x88\x01\x01\x42\t\n\x07_schema\x1a\x8d\x01\n\x11\x44\x65ploymentUpdated\x12!\n\tchangeset\x18\x01 \x01(\tH\x00R\tchangeset\x88\x01\x01\x12<\n\x06schema\x18\x02 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleH\x01R\x06schema\x88\x01\x01\x42\x0c\n\n_changesetB\t\n\x07_schema\x1az\n\x11\x44\x65ploymentRemoved\x12\x15\n\x03key\x18\x01 \x01(\tH\x00R\x03key\x88\x01\x01\x12\x1f\n\x0bmodule_name\x18\x02 \x01(\tR\nmoduleName\x12%\n\x0emodule_removed\x18\x03 \x01(\x08R\rmoduleRemovedB\x06\n\x04_keyB\x07\n\x05\x65vent\"\xb4\x01\n\x1eUpdateDeploymentRuntimeRequest\x12\x1e\n\ndeployment\x18\x01 \x01(\tR\ndeployment\x12!\n\tchangeset\x18\x02 \x01(\tH\x00R\tchangeset\x88\x01\x01\x12\x41\n\x05\x65vent\x18\x03 \x01(\x0b\x32+.xyz.block.ftl.schema.v1.ModuleRuntimeEventR\x05\x65ventB\x0c\n\n_changeset\"!\n\x1fUpdateDeploymentRuntimeResponse\"K\n\x13UpdateSchemaRequest\x12\x34\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.EventR\x05\x65vent\"\x16\n\x14UpdateSchemaResponse\"\x17\n\x15GetDeploymentsRequest\"R\n\x16GetDeploymentsResponse\x12\x38\n\x06schema\x18\x01 \x03(\x0b\x32 .xyz.block.ftl.v1.DeployedSchemaR\x06schema\"S\n\x16\x43reateChangesetRequest\x12\x39\n\x07modules\x18\x01 \x03(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x07modules\"7\n\x17\x43reateChangesetResponse\x12\x1c\n\tchangeset\x18\x01 \x01(\tR\tchangeset\"\x8d\x01\n\x0e\x44\x65ployedSchema\x12%\n\x0e\x64\x65ployment_key\x18\x01 \x01(\tR\rdeploymentKey\x12\x37\n\x06schema\x18\x02 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x06schema\x12\x1b\n\tis_active\x18\x03 \x01(\x08R\x08isActive\"6\n\x16\x43ommitChangesetRequest\x12\x1c\n\tchangeset\x18\x01 \x01(\tR\tchangeset\"\x19\n\x17\x43ommitChangesetResponse\"J\n\x14\x46\x61ilChangesetRequest\x12\x1c\n\tchangeset\x18\x01 \x01(\tR\tchangeset\x12\x14\n\x05\x65rror\x18\x02 \x01(\tR\x05\x65rror\"\x17\n\x15\x46\x61ilChangesetResponse2\x8c\x07\n\rSchemaService\x12J\n\x04Ping\x12\x1d.xyz.block.ftl.v1.PingRequest\x1a\x1e.xyz.block.ftl.v1.PingResponse\"\x03\x90\x02\x01\x12Y\n\tGetSchema\x12\".xyz.block.ftl.v1.GetSchemaRequest\x1a#.xyz.block.ftl.v1.GetSchemaResponse\"\x03\x90\x02\x01\x12^\n\nPullSchema\x12#.xyz.block.ftl.v1.PullSchemaRequest\x1a$.xyz.block.ftl.v1.PullSchemaResponse\"\x03\x90\x02\x01\x30\x01\x12~\n\x17UpdateDeploymentRuntime\x12\x30.xyz.block.ftl.v1.UpdateDeploymentRuntimeRequest\x1a\x31.xyz.block.ftl.v1.UpdateDeploymentRuntimeResponse\x12]\n\x0cUpdateSchema\x12%.xyz.block.ftl.v1.UpdateSchemaRequest\x1a&.xyz.block.ftl.v1.UpdateSchemaResponse\x12\x63\n\x0eGetDeployments\x12\'.xyz.block.ftl.v1.GetDeploymentsRequest\x1a(.xyz.block.ftl.v1.GetDeploymentsResponse\x12\x66\n\x0f\x43reateChangeset\x12(.xyz.block.ftl.v1.CreateChangesetRequest\x1a).xyz.block.ftl.v1.CreateChangesetResponse\x12\x66\n\x0f\x43ommitChangeset\x12(.xyz.block.ftl.v1.CommitChangesetRequest\x1a).xyz.block.ftl.v1.CommitChangesetResponse\x12`\n\rFailChangeset\x12&.xyz.block.ftl.v1.FailChangesetRequest\x1a\'.xyz.block.ftl.v1.FailChangesetResponseB>P\x01Z:github.com/block/ftl/backend/protos/xyz/block/ftl/v1;ftlv1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -40,30 +40,52 @@ _globals['_SCHEMASERVICE'].methods_by_name['GetSchema']._serialized_options = b'\220\002\001' _globals['_SCHEMASERVICE'].methods_by_name['PullSchema']._loaded_options = None _globals['_SCHEMASERVICE'].methods_by_name['PullSchema']._serialized_options = b'\220\002\001' - _globals['_DEPLOYMENTCHANGETYPE']._serialized_start=1058 - _globals['_DEPLOYMENTCHANGETYPE']._serialized_end=1226 _globals['_GETSCHEMAREQUEST']._serialized_start=124 _globals['_GETSCHEMAREQUEST']._serialized_end=142 - _globals['_GETSCHEMARESPONSE']._serialized_start=144 - _globals['_GETSCHEMARESPONSE']._serialized_end=220 - _globals['_PULLSCHEMAREQUEST']._serialized_start=222 - _globals['_PULLSCHEMAREQUEST']._serialized_end=241 - _globals['_PULLSCHEMARESPONSE']._serialized_start=244 - _globals['_PULLSCHEMARESPONSE']._serialized_end=565 - _globals['_UPDATEDEPLOYMENTRUNTIMEREQUEST']._serialized_start=567 - _globals['_UPDATEDEPLOYMENTRUNTIMEREQUEST']._serialized_end=666 - _globals['_UPDATEDEPLOYMENTRUNTIMERESPONSE']._serialized_start=668 - _globals['_UPDATEDEPLOYMENTRUNTIMERESPONSE']._serialized_end=701 - _globals['_UPDATESCHEMAREQUEST']._serialized_start=703 - _globals['_UPDATESCHEMAREQUEST']._serialized_end=778 - _globals['_UPDATESCHEMARESPONSE']._serialized_start=780 - _globals['_UPDATESCHEMARESPONSE']._serialized_end=802 - _globals['_GETDEPLOYMENTSREQUEST']._serialized_start=804 - _globals['_GETDEPLOYMENTSREQUEST']._serialized_end=827 - _globals['_GETDEPLOYMENTSRESPONSE']._serialized_start=829 - _globals['_GETDEPLOYMENTSRESPONSE']._serialized_end=911 - _globals['_DEPLOYEDSCHEMA']._serialized_start=914 - _globals['_DEPLOYEDSCHEMA']._serialized_end=1055 - _globals['_SCHEMASERVICE']._serialized_start=1229 - _globals['_SCHEMASERVICE']._serialized_end=1831 + _globals['_GETSCHEMARESPONSE']._serialized_start=145 + _globals['_GETSCHEMARESPONSE']._serialized_end=289 + _globals['_PULLSCHEMAREQUEST']._serialized_start=291 + _globals['_PULLSCHEMAREQUEST']._serialized_end=310 + _globals['_PULLSCHEMARESPONSE']._serialized_start=313 + _globals['_PULLSCHEMARESPONSE']._serialized_end=1535 + _globals['_PULLSCHEMARESPONSE_CHANGESETCREATED']._serialized_start=981 + _globals['_PULLSCHEMARESPONSE_CHANGESETCREATED']._serialized_end=1065 + _globals['_PULLSCHEMARESPONSE_CHANGESETFAILED']._serialized_start=1067 + _globals['_PULLSCHEMARESPONSE_CHANGESETFAILED']._serialized_end=1124 + _globals['_PULLSCHEMARESPONSE_CHANGESETCOMMITTED']._serialized_start=1126 + _globals['_PULLSCHEMARESPONSE_CHANGESETCOMMITTED']._serialized_end=1164 + _globals['_PULLSCHEMARESPONSE_DEPLOYMENTCREATED']._serialized_start=1166 + _globals['_PULLSCHEMARESPONSE_DEPLOYMENTCREATED']._serialized_end=1258 + _globals['_PULLSCHEMARESPONSE_DEPLOYMENTUPDATED']._serialized_start=1261 + _globals['_PULLSCHEMARESPONSE_DEPLOYMENTUPDATED']._serialized_end=1402 + _globals['_PULLSCHEMARESPONSE_DEPLOYMENTREMOVED']._serialized_start=1404 + _globals['_PULLSCHEMARESPONSE_DEPLOYMENTREMOVED']._serialized_end=1526 + _globals['_UPDATEDEPLOYMENTRUNTIMEREQUEST']._serialized_start=1538 + _globals['_UPDATEDEPLOYMENTRUNTIMEREQUEST']._serialized_end=1718 + _globals['_UPDATEDEPLOYMENTRUNTIMERESPONSE']._serialized_start=1720 + _globals['_UPDATEDEPLOYMENTRUNTIMERESPONSE']._serialized_end=1753 + _globals['_UPDATESCHEMAREQUEST']._serialized_start=1755 + _globals['_UPDATESCHEMAREQUEST']._serialized_end=1830 + _globals['_UPDATESCHEMARESPONSE']._serialized_start=1832 + _globals['_UPDATESCHEMARESPONSE']._serialized_end=1854 + _globals['_GETDEPLOYMENTSREQUEST']._serialized_start=1856 + _globals['_GETDEPLOYMENTSREQUEST']._serialized_end=1879 + _globals['_GETDEPLOYMENTSRESPONSE']._serialized_start=1881 + _globals['_GETDEPLOYMENTSRESPONSE']._serialized_end=1963 + _globals['_CREATECHANGESETREQUEST']._serialized_start=1965 + _globals['_CREATECHANGESETREQUEST']._serialized_end=2048 + _globals['_CREATECHANGESETRESPONSE']._serialized_start=2050 + _globals['_CREATECHANGESETRESPONSE']._serialized_end=2105 + _globals['_DEPLOYEDSCHEMA']._serialized_start=2108 + _globals['_DEPLOYEDSCHEMA']._serialized_end=2249 + _globals['_COMMITCHANGESETREQUEST']._serialized_start=2251 + _globals['_COMMITCHANGESETREQUEST']._serialized_end=2305 + _globals['_COMMITCHANGESETRESPONSE']._serialized_start=2307 + _globals['_COMMITCHANGESETRESPONSE']._serialized_end=2332 + _globals['_FAILCHANGESETREQUEST']._serialized_start=2334 + _globals['_FAILCHANGESETREQUEST']._serialized_end=2408 + _globals['_FAILCHANGESETRESPONSE']._serialized_start=2410 + _globals['_FAILCHANGESETRESPONSE']._serialized_end=2433 + _globals['_SCHEMASERVICE']._serialized_start=2436 + _globals['_SCHEMASERVICE']._serialized_end=3344 # @@protoc_insertion_point(module_scope) diff --git a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/schemaservice_pb2.pyi b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/schemaservice_pb2.pyi index cf068c81df..3d84cfc11c 100644 --- a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/schemaservice_pb2.pyi +++ b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/v1/schemaservice_pb2.pyi @@ -1,59 +1,93 @@ from xyz.block.ftl.schema.v1 import schema_pb2 as _schema_pb2 from xyz.block.ftl.v1 import ftl_pb2 as _ftl_pb2 from google.protobuf.internal import containers as _containers -from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union DESCRIPTOR: _descriptor.FileDescriptor -class DeploymentChangeType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): - __slots__ = () - DEPLOYMENT_CHANGE_TYPE_UNSPECIFIED: _ClassVar[DeploymentChangeType] - DEPLOYMENT_CHANGE_TYPE_ADDED: _ClassVar[DeploymentChangeType] - DEPLOYMENT_CHANGE_TYPE_REMOVED: _ClassVar[DeploymentChangeType] - DEPLOYMENT_CHANGE_TYPE_CHANGED: _ClassVar[DeploymentChangeType] -DEPLOYMENT_CHANGE_TYPE_UNSPECIFIED: DeploymentChangeType -DEPLOYMENT_CHANGE_TYPE_ADDED: DeploymentChangeType -DEPLOYMENT_CHANGE_TYPE_REMOVED: DeploymentChangeType -DEPLOYMENT_CHANGE_TYPE_CHANGED: DeploymentChangeType - class GetSchemaRequest(_message.Message): __slots__ = () def __init__(self) -> None: ... class GetSchemaResponse(_message.Message): - __slots__ = ("schema",) + __slots__ = ("schema", "changesets") SCHEMA_FIELD_NUMBER: _ClassVar[int] + CHANGESETS_FIELD_NUMBER: _ClassVar[int] schema: _schema_pb2.Schema - def __init__(self, schema: _Optional[_Union[_schema_pb2.Schema, _Mapping]] = ...) -> None: ... + changesets: _containers.RepeatedCompositeFieldContainer[_schema_pb2.Changeset] + def __init__(self, schema: _Optional[_Union[_schema_pb2.Schema, _Mapping]] = ..., changesets: _Optional[_Iterable[_Union[_schema_pb2.Changeset, _Mapping]]] = ...) -> None: ... class PullSchemaRequest(_message.Message): __slots__ = () def __init__(self) -> None: ... class PullSchemaResponse(_message.Message): - __slots__ = ("deployment_key", "module_name", "schema", "more", "change_type", "module_removed") - DEPLOYMENT_KEY_FIELD_NUMBER: _ClassVar[int] - MODULE_NAME_FIELD_NUMBER: _ClassVar[int] - SCHEMA_FIELD_NUMBER: _ClassVar[int] + __slots__ = ("changeset_created", "changeset_failed", "changeset_committed", "deployment_created", "deployment_updated", "deployment_removed", "more") + class ChangesetCreated(_message.Message): + __slots__ = ("changeset",) + CHANGESET_FIELD_NUMBER: _ClassVar[int] + changeset: _schema_pb2.Changeset + def __init__(self, changeset: _Optional[_Union[_schema_pb2.Changeset, _Mapping]] = ...) -> None: ... + class ChangesetFailed(_message.Message): + __slots__ = ("key", "error") + KEY_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + key: str + error: str + def __init__(self, key: _Optional[str] = ..., error: _Optional[str] = ...) -> None: ... + class ChangesetCommitted(_message.Message): + __slots__ = ("key",) + KEY_FIELD_NUMBER: _ClassVar[int] + key: str + def __init__(self, key: _Optional[str] = ...) -> None: ... + class DeploymentCreated(_message.Message): + __slots__ = ("schema",) + SCHEMA_FIELD_NUMBER: _ClassVar[int] + schema: _schema_pb2.Module + def __init__(self, schema: _Optional[_Union[_schema_pb2.Module, _Mapping]] = ...) -> None: ... + class DeploymentUpdated(_message.Message): + __slots__ = ("changeset", "schema") + CHANGESET_FIELD_NUMBER: _ClassVar[int] + SCHEMA_FIELD_NUMBER: _ClassVar[int] + changeset: str + schema: _schema_pb2.Module + def __init__(self, changeset: _Optional[str] = ..., schema: _Optional[_Union[_schema_pb2.Module, _Mapping]] = ...) -> None: ... + class DeploymentRemoved(_message.Message): + __slots__ = ("key", "module_name", "module_removed") + KEY_FIELD_NUMBER: _ClassVar[int] + MODULE_NAME_FIELD_NUMBER: _ClassVar[int] + MODULE_REMOVED_FIELD_NUMBER: _ClassVar[int] + key: str + module_name: str + module_removed: bool + def __init__(self, key: _Optional[str] = ..., module_name: _Optional[str] = ..., module_removed: bool = ...) -> None: ... + CHANGESET_CREATED_FIELD_NUMBER: _ClassVar[int] + CHANGESET_FAILED_FIELD_NUMBER: _ClassVar[int] + CHANGESET_COMMITTED_FIELD_NUMBER: _ClassVar[int] + DEPLOYMENT_CREATED_FIELD_NUMBER: _ClassVar[int] + DEPLOYMENT_UPDATED_FIELD_NUMBER: _ClassVar[int] + DEPLOYMENT_REMOVED_FIELD_NUMBER: _ClassVar[int] MORE_FIELD_NUMBER: _ClassVar[int] - CHANGE_TYPE_FIELD_NUMBER: _ClassVar[int] - MODULE_REMOVED_FIELD_NUMBER: _ClassVar[int] - deployment_key: str - module_name: str - schema: _schema_pb2.Module + changeset_created: PullSchemaResponse.ChangesetCreated + changeset_failed: PullSchemaResponse.ChangesetFailed + changeset_committed: PullSchemaResponse.ChangesetCommitted + deployment_created: PullSchemaResponse.DeploymentCreated + deployment_updated: PullSchemaResponse.DeploymentUpdated + deployment_removed: PullSchemaResponse.DeploymentRemoved more: bool - change_type: DeploymentChangeType - module_removed: bool - def __init__(self, deployment_key: _Optional[str] = ..., module_name: _Optional[str] = ..., schema: _Optional[_Union[_schema_pb2.Module, _Mapping]] = ..., more: bool = ..., change_type: _Optional[_Union[DeploymentChangeType, str]] = ..., module_removed: bool = ...) -> None: ... + def __init__(self, changeset_created: _Optional[_Union[PullSchemaResponse.ChangesetCreated, _Mapping]] = ..., changeset_failed: _Optional[_Union[PullSchemaResponse.ChangesetFailed, _Mapping]] = ..., changeset_committed: _Optional[_Union[PullSchemaResponse.ChangesetCommitted, _Mapping]] = ..., deployment_created: _Optional[_Union[PullSchemaResponse.DeploymentCreated, _Mapping]] = ..., deployment_updated: _Optional[_Union[PullSchemaResponse.DeploymentUpdated, _Mapping]] = ..., deployment_removed: _Optional[_Union[PullSchemaResponse.DeploymentRemoved, _Mapping]] = ..., more: bool = ...) -> None: ... class UpdateDeploymentRuntimeRequest(_message.Message): - __slots__ = ("event",) + __slots__ = ("deployment", "changeset", "event") + DEPLOYMENT_FIELD_NUMBER: _ClassVar[int] + CHANGESET_FIELD_NUMBER: _ClassVar[int] EVENT_FIELD_NUMBER: _ClassVar[int] + deployment: str + changeset: str event: _schema_pb2.ModuleRuntimeEvent - def __init__(self, event: _Optional[_Union[_schema_pb2.ModuleRuntimeEvent, _Mapping]] = ...) -> None: ... + def __init__(self, deployment: _Optional[str] = ..., changeset: _Optional[str] = ..., event: _Optional[_Union[_schema_pb2.ModuleRuntimeEvent, _Mapping]] = ...) -> None: ... class UpdateDeploymentRuntimeResponse(_message.Message): __slots__ = () @@ -79,6 +113,18 @@ class GetDeploymentsResponse(_message.Message): schema: _containers.RepeatedCompositeFieldContainer[DeployedSchema] def __init__(self, schema: _Optional[_Iterable[_Union[DeployedSchema, _Mapping]]] = ...) -> None: ... +class CreateChangesetRequest(_message.Message): + __slots__ = ("modules",) + MODULES_FIELD_NUMBER: _ClassVar[int] + modules: _containers.RepeatedCompositeFieldContainer[_schema_pb2.Module] + def __init__(self, modules: _Optional[_Iterable[_Union[_schema_pb2.Module, _Mapping]]] = ...) -> None: ... + +class CreateChangesetResponse(_message.Message): + __slots__ = ("changeset",) + CHANGESET_FIELD_NUMBER: _ClassVar[int] + changeset: str + def __init__(self, changeset: _Optional[str] = ...) -> None: ... + class DeployedSchema(_message.Message): __slots__ = ("deployment_key", "schema", "is_active") DEPLOYMENT_KEY_FIELD_NUMBER: _ClassVar[int] @@ -88,3 +134,25 @@ class DeployedSchema(_message.Message): schema: _schema_pb2.Module is_active: bool def __init__(self, deployment_key: _Optional[str] = ..., schema: _Optional[_Union[_schema_pb2.Module, _Mapping]] = ..., is_active: bool = ...) -> None: ... + +class CommitChangesetRequest(_message.Message): + __slots__ = ("changeset",) + CHANGESET_FIELD_NUMBER: _ClassVar[int] + changeset: str + def __init__(self, changeset: _Optional[str] = ...) -> None: ... + +class CommitChangesetResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + +class FailChangesetRequest(_message.Message): + __slots__ = ("changeset", "error") + CHANGESET_FIELD_NUMBER: _ClassVar[int] + ERROR_FIELD_NUMBER: _ClassVar[int] + changeset: str + error: str + def __init__(self, changeset: _Optional[str] = ..., error: _Optional[str] = ...) -> None: ... + +class FailChangesetResponse(_message.Message): + __slots__ = () + def __init__(self) -> None: ...