From e0de59dd9b5b6bc7ac5f0cf5fc46e0db1e7177fb Mon Sep 17 00:00:00 2001 From: Tomas Valenta Date: Sat, 30 May 2026 14:29:50 -0700 Subject: [PATCH 01/15] feat(snapshot): persist scheduling metadata Return compact build-chain metadata from snapshot creation so API placement can later use real build ancestry for resume affinity. --- .../internal/orchestrator/pause_instance.go | 36 +- .../orchestrator/snapshot_template.go | 9 +- .../update_snapshot_scheduling_metadata.sql | 9 + ...update_snapshot_scheduling_metadata.sql.go | 31 ++ packages/orchestrator/orchestrator.proto | 17 +- .../orchestrator/pkg/dummyserver/sandbox.go | 4 +- packages/orchestrator/pkg/sandbox/sandbox.go | 20 +- packages/orchestrator/pkg/sandbox/snapshot.go | 126 ++++- packages/orchestrator/pkg/server/sandboxes.go | 10 +- packages/shared/pkg/featureflags/flags.go | 3 +- .../pkg/grpc/orchestrator/orchestrator.pb.go | 489 +++++++++++++----- .../grpc/orchestrator/orchestrator_grpc.pb.go | 12 +- 12 files changed, 591 insertions(+), 175 deletions(-) create mode 100644 packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql create mode 100644 packages/db/queries/update_snapshot_scheduling_metadata.sql.go diff --git a/packages/api/internal/orchestrator/pause_instance.go b/packages/api/internal/orchestrator/pause_instance.go index c1863cebd8..66c09822e6 100644 --- a/packages/api/internal/orchestrator/pause_instance.go +++ b/packages/api/internal/orchestrator/pause_instance.go @@ -10,6 +10,7 @@ import ( "github.com/google/uuid" "github.com/jackc/pgx/v5/pgtype" "google.golang.org/grpc/codes" + "google.golang.org/protobuf/encoding/protojson" "github.com/e2b-dev/infra/packages/api/internal/orchestrator/nodemanager" "github.com/e2b-dev/infra/packages/api/internal/sandbox" @@ -37,7 +38,7 @@ func (o *Orchestrator) pauseSandbox(ctx context.Context, node *nodemanager.Node, return err } - err = snapshotInstance(ctx, node, sbx, result.TemplateID, result.BuildID.String()) + schedulingMetadata, err := snapshotInstance(ctx, node, sbx, result.TemplateID, result.BuildID.String()) if errors.Is(err, PauseQueueExhaustedError{}) { telemetry.ReportCriticalError(ctx, "pause queue exhausted", err) @@ -49,6 +50,11 @@ func (o *Orchestrator) pauseSandbox(ctx context.Context, node *nodemanager.Node, return fmt.Errorf("error pausing sandbox: %w", err) } + if schedulingMetadata != nil { + if err := o.updateSnapshotSchedulingMetadata(ctx, sbx.SandboxID, schedulingMetadata); err != nil { + return err + } + } now := time.Now() err = o.sqlcDB.UpdateEnvBuildStatus(ctx, queries.UpdateEnvBuildStatusParams{ @@ -68,12 +74,12 @@ func (o *Orchestrator) pauseSandbox(ctx context.Context, node *nodemanager.Node, return nil } -func snapshotInstance(ctx context.Context, node *nodemanager.Node, sbx sandbox.Sandbox, templateID, buildID string) error { +func snapshotInstance(ctx context.Context, node *nodemanager.Node, sbx sandbox.Sandbox, templateID, buildID string) (*orchestrator.SnapshotSchedulingMetadata, error) { childCtx, childSpan := tracer.Start(ctx, "snapshot-instance") defer childSpan.End() client, childCtx := node.GetSandboxDeleteCtx(childCtx, sbx.SandboxID, sbx.ExecutionID) - _, err := client.Sandbox.Pause( + res, err := client.Sandbox.Pause( childCtx, &orchestrator.SandboxPauseRequest{ SandboxId: sbx.SandboxID, TemplateId: templateID, @@ -84,19 +90,35 @@ func snapshotInstance(ctx context.Context, node *nodemanager.Node, sbx sandbox.S if err == nil { telemetry.ReportEvent(ctx, "Paused sandbox") - return nil + return res.GetSchedulingMetadata(), nil } st, ok := status.FromError(err) if !ok { - return err + return nil, err } if st.Code() == codes.ResourceExhausted { - return PauseQueueExhaustedError{} + return nil, PauseQueueExhaustedError{} + } + + return nil, fmt.Errorf("failed to pause sandbox '%s': %w", sbx.SandboxID, err) +} + +func (o *Orchestrator) updateSnapshotSchedulingMetadata(ctx context.Context, sandboxID string, metadata *orchestrator.SnapshotSchedulingMetadata) error { + data, err := protojson.MarshalOptions{UseProtoNames: true}.Marshal(metadata) + if err != nil { + return fmt.Errorf("marshal snapshot scheduling metadata: %w", err) } + if err := o.sqlcDB.UpdateSnapshotSchedulingMetadata(ctx, queries.UpdateSnapshotSchedulingMetadataParams{ + SandboxID: sandboxID, + Metadata: string(data), + }); err != nil { + return fmt.Errorf("update snapshot scheduling metadata: %w", err) + } + o.snapshotCache.Invalidate(context.WithoutCancel(ctx), sandboxID) - return fmt.Errorf("failed to pause sandbox '%s': %w", sbx.SandboxID, err) + return nil } func (o *Orchestrator) WaitForStateChange(ctx context.Context, teamID uuid.UUID, sandboxID string) error { diff --git a/packages/api/internal/orchestrator/snapshot_template.go b/packages/api/internal/orchestrator/snapshot_template.go index 4d08816d1e..06b459297b 100644 --- a/packages/api/internal/orchestrator/snapshot_template.go +++ b/packages/api/internal/orchestrator/snapshot_template.go @@ -84,7 +84,7 @@ func (o *Orchestrator) CreateSnapshotTemplate(ctx context.Context, teamID uuid.U // kills the sandbox itself; RemoveSandbox is still needed to clean up // API-side state (store, routing, analytics). client, childCtx := node.GetClient(ctx) - _, err = client.Sandbox.Checkpoint(childCtx, &orchestrator.SandboxCheckpointRequest{ + checkpointRes, err := client.Sandbox.Checkpoint(childCtx, &orchestrator.SandboxCheckpointRequest{ SandboxId: sbx.SandboxID, BuildId: upsertResult.BuildID.String(), }) @@ -102,6 +102,13 @@ func (o *Orchestrator) CreateSnapshotTemplate(ctx context.Context, teamID uuid.U return SnapshotTemplateResult{}, fmt.Errorf("checkpoint failed: %w", err) } + if metadata := checkpointRes.GetSchedulingMetadata(); metadata != nil { + if err := o.updateSnapshotSchedulingMetadata(ctx, sbx.SandboxID, metadata); err != nil { + o.failSnapshotBuild(ctx, upsertResult.BuildID, err) + + return SnapshotTemplateResult{}, err + } + } now := time.Now() err = o.sqlcDB.UpdateEnvBuildStatus(ctx, queries.UpdateEnvBuildStatusParams{ diff --git a/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql b/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql new file mode 100644 index 0000000000..36583142f5 --- /dev/null +++ b/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql @@ -0,0 +1,9 @@ +-- name: UpdateSnapshotSchedulingMetadata :exec +UPDATE "public"."snapshots" +SET metadata = jsonb_set( + metadata, + '{snapshot_scheduling_metadata}', + to_jsonb(@metadata::text), + true +) +WHERE sandbox_id = @sandbox_id; diff --git a/packages/db/queries/update_snapshot_scheduling_metadata.sql.go b/packages/db/queries/update_snapshot_scheduling_metadata.sql.go new file mode 100644 index 0000000000..bebfb4c306 --- /dev/null +++ b/packages/db/queries/update_snapshot_scheduling_metadata.sql.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.31.1 +// source: update_snapshot_scheduling_metadata.sql + +package queries + +import ( + "context" +) + +const updateSnapshotSchedulingMetadata = `-- name: UpdateSnapshotSchedulingMetadata :exec +UPDATE "public"."snapshots" +SET metadata = jsonb_set( + metadata, + '{snapshot_scheduling_metadata}', + to_jsonb($1::text), + true +) +WHERE sandbox_id = $2 +` + +type UpdateSnapshotSchedulingMetadataParams struct { + Metadata string + SandboxID string +} + +func (q *Queries) UpdateSnapshotSchedulingMetadata(ctx context.Context, arg UpdateSnapshotSchedulingMetadataParams) error { + _, err := q.db.Exec(ctx, updateSnapshotSchedulingMetadata, arg.Metadata, arg.SandboxID) + return err +} diff --git a/packages/orchestrator/orchestrator.proto b/packages/orchestrator/orchestrator.proto index e44c2135c1..8d0ae95597 100644 --- a/packages/orchestrator/orchestrator.proto +++ b/packages/orchestrator/orchestrator.proto @@ -126,12 +126,27 @@ message SandboxPauseRequest { string build_id = 3; } +message SnapshotSchedulingMetadata { + string base_build_id = 1; + uint64 generation = 2; + uint64 memfile_mapping_count = 3; + uint64 rootfs_mapping_count = 4; + repeated string chain_build_ids = 5; + repeated uint64 chain_memfile_bytes = 6; + repeated uint64 chain_rootfs_bytes = 7; +} + +message SandboxPauseResponse { + SnapshotSchedulingMetadata scheduling_metadata = 1; +} + message SandboxCheckpointRequest { string sandbox_id = 1; string build_id = 3; } message SandboxCheckpointResponse { + SnapshotSchedulingMetadata scheduling_metadata = 1; } message RunningSandbox { @@ -160,7 +175,7 @@ service SandboxService { rpc Update(SandboxUpdateRequest) returns (google.protobuf.Empty); rpc List(google.protobuf.Empty) returns (SandboxListResponse); rpc Delete(SandboxDeleteRequest) returns (google.protobuf.Empty); - rpc Pause(SandboxPauseRequest) returns (google.protobuf.Empty); + rpc Pause(SandboxPauseRequest) returns (SandboxPauseResponse); rpc Checkpoint(SandboxCheckpointRequest) returns (SandboxCheckpointResponse); rpc ListCachedBuilds(google.protobuf.Empty) returns (SandboxListCachedBuildsResponse); diff --git a/packages/orchestrator/pkg/dummyserver/sandbox.go b/packages/orchestrator/pkg/dummyserver/sandbox.go index 9ba15bc858..441ecaa501 100644 --- a/packages/orchestrator/pkg/dummyserver/sandbox.go +++ b/packages/orchestrator/pkg/dummyserver/sandbox.go @@ -129,7 +129,7 @@ func (s *SandboxServer) Delete(_ context.Context, req *orchestrator.SandboxDelet return &emptypb.Empty{}, nil } -func (s *SandboxServer) Pause(_ context.Context, req *orchestrator.SandboxPauseRequest) (*emptypb.Empty, error) { +func (s *SandboxServer) Pause(_ context.Context, req *orchestrator.SandboxPauseRequest) (*orchestrator.SandboxPauseResponse, error) { if req.GetSandboxId() == "" { return nil, status.Error(codes.InvalidArgument, "sandbox_id is required") } @@ -139,7 +139,7 @@ func (s *SandboxServer) Pause(_ context.Context, req *orchestrator.SandboxPauseR delete(s.sandboxes, req.GetSandboxId()) s.mu.Unlock() - return &emptypb.Empty{}, nil + return &orchestrator.SandboxPauseResponse{}, nil } func (s *SandboxServer) Checkpoint(_ context.Context, _ *orchestrator.SandboxCheckpointRequest) (*orchestrator.SandboxCheckpointResponse, error) { diff --git a/packages/orchestrator/pkg/sandbox/sandbox.go b/packages/orchestrator/pkg/sandbox/sandbox.go index f57fa26bd4..85ca83e55b 100644 --- a/packages/orchestrator/pkg/sandbox/sandbox.go +++ b/packages/orchestrator/pkg/sandbox/sandbox.go @@ -1185,6 +1185,9 @@ func (s *Sandbox) Pause( } cleanup.AddNoContext(ctx, rootfsDiff.Close) + chainLimit := int(s.featureFlags.IntFlag(ctx, featureflags.SnapshotSchedulingMetadataChainLimit)) + schedulingMetadata := NewSnapshotSchedulingMetadata(originalMemfile.Header(), originalRootfs.Header(), chainLimit) + metadataFileLink := template.NewLocalFileLink(cachePaths.CacheMetadata()) cleanup.AddNoContext(ctx, metadataFileLink.Close) @@ -1194,14 +1197,15 @@ func (s *Sandbox) Pause( } return &Snapshot{ - Snapfile: snapfile, - Metafile: metadataFileLink, - MemfileDiff: memfileDiff, - MemfileDiffHeader: memfileDiffHeader, - RootfsDiff: rootfsDiff, - RootfsDiffHeader: NewResolvedDiffHeader(rootfsHeader), - MemfileBlockSize: originalMemfile.Header().Metadata.BlockSize, - RootfsBlockSize: originalRootfs.Header().Metadata.BlockSize, + Snapfile: snapfile, + Metafile: metadataFileLink, + MemfileDiff: memfileDiff, + MemfileDiffHeader: memfileDiffHeader, + RootfsDiff: rootfsDiff, + RootfsDiffHeader: NewResolvedDiffHeader(rootfsHeader), + SchedulingMetadata: schedulingMetadata, + MemfileBlockSize: originalMemfile.Header().Metadata.BlockSize, + RootfsBlockSize: originalRootfs.Header().Metadata.BlockSize, BuildID: buildID, diff --git a/packages/orchestrator/pkg/sandbox/snapshot.go b/packages/orchestrator/pkg/sandbox/snapshot.go index c597dc629c..6dd10e9173 100644 --- a/packages/orchestrator/pkg/sandbox/snapshot.go +++ b/packages/orchestrator/pkg/sandbox/snapshot.go @@ -5,11 +5,13 @@ package sandbox import ( "context" "fmt" + "sort" "github.com/google/uuid" "github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/build" "github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/template" + "github.com/e2b-dev/infra/packages/shared/pkg/grpc/orchestrator" "github.com/e2b-dev/infra/packages/shared/pkg/storage/header" "github.com/e2b-dev/infra/packages/shared/pkg/utils" ) @@ -26,13 +28,14 @@ func NewResolvedDiffHeader(h *header.Header) *DiffHeader { } type Snapshot struct { - MemfileDiff build.Diff - MemfileDiffHeader *DiffHeader - RootfsDiff build.Diff - RootfsDiffHeader *DiffHeader - Snapfile template.File - Metafile template.File - BuildID uuid.UUID + MemfileDiff build.Diff + MemfileDiffHeader *DiffHeader + RootfsDiff build.Diff + RootfsDiffHeader *DiffHeader + Snapfile template.File + Metafile template.File + BuildID uuid.UUID + SchedulingMetadata *orchestrator.SnapshotSchedulingMetadata // Template block sizes captured sync at Pause time. They equal // MemfileDiffHeader.Metadata.BlockSize once that header resolves, but @@ -53,3 +56,112 @@ func (s *Snapshot) Close(ctx context.Context) error { return nil } + +type schedulingBuildContribution struct { + buildID uuid.UUID + memfileBytes uint64 + rootfsBytes uint64 +} + +func NewSnapshotSchedulingMetadata(memfileHeader, rootfsHeader *header.Header, limit int) *orchestrator.SnapshotSchedulingMetadata { + if memfileHeader == nil || memfileHeader.Metadata == nil || rootfsHeader == nil || rootfsHeader.Metadata == nil { + return nil + } + if limit < 0 { + limit = 0 + } + if limit > 128 { + limit = 128 + } + + contributions := make(map[uuid.UUID]*schedulingBuildContribution) + add := func(buildID uuid.UUID, memfileBytes, rootfsBytes uint64) { + if buildID == uuid.Nil { + return + } + c, ok := contributions[buildID] + if !ok { + c = &schedulingBuildContribution{buildID: buildID} + contributions[buildID] = c + } + c.memfileBytes += memfileBytes + c.rootfsBytes += rootfsBytes + } + + for _, m := range memfileHeader.Mapping.All() { + add(m.BuildId, m.Length, 0) + } + for _, m := range rootfsHeader.Mapping.All() { + add(m.BuildId, 0, m.Length) + } + + baseBuildID := memfileHeader.Metadata.BaseBuildId + if baseBuildID == uuid.Nil { + baseBuildID = rootfsHeader.Metadata.BaseBuildId + } + + chain := make([]schedulingBuildContribution, 0, len(contributions)) + for _, c := range contributions { + chain = append(chain, *c) + } + sort.Slice(chain, func(i, j int) bool { + iBytes := chain[i].memfileBytes + chain[i].rootfsBytes + jBytes := chain[j].memfileBytes + chain[j].rootfsBytes + if iBytes == jBytes { + return chain[i].buildID.String() < chain[j].buildID.String() + } + + return iBytes > jBytes + }) + parentBuildID := memfileHeader.Metadata.BuildId + if parentBuildID == uuid.Nil { + parentBuildID = rootfsHeader.Metadata.BuildId + } + for i, c := range chain { + if c.buildID == parentBuildID { + copy(chain[1:i+1], chain[:i]) + chain[0] = c + + break + } + } + if limit == 0 { + chain = nil + } else if len(chain) > limit { + chain = chain[:limit] + if baseBuildID != uuid.Nil { + hasBase := false + for _, c := range chain { + if c.buildID == baseBuildID { + hasBase = true + + break + } + } + if !hasBase { + if c, ok := contributions[baseBuildID]; ok { + chain[len(chain)-1] = *c + } else { + chain[len(chain)-1] = schedulingBuildContribution{buildID: baseBuildID} + } + } + } + } + + res := &orchestrator.SnapshotSchedulingMetadata{ + BaseBuildId: baseBuildID.String(), + Generation: max(memfileHeader.Metadata.Generation, rootfsHeader.Metadata.Generation) + 1, + MemfileMappingCount: uint64(memfileHeader.Mapping.Len()), + RootfsMappingCount: uint64(rootfsHeader.Mapping.Len()), + ChainBuildIds: make([]string, 0, len(chain)), + ChainMemfileBytes: make([]uint64, 0, len(chain)), + ChainRootfsBytes: make([]uint64, 0, len(chain)), + } + for _, c := range chain { + res.ChainBuildIds = append(res.ChainBuildIds, c.buildID.String()) + res.ChainMemfileBytes = append(res.ChainMemfileBytes, c.memfileBytes) + res.ChainRootfsBytes = append(res.ChainRootfsBytes, c.rootfsBytes) + } + + return res +} diff --git a/packages/orchestrator/pkg/server/sandboxes.go b/packages/orchestrator/pkg/server/sandboxes.go index cfd4a507f8..9417fad321 100644 --- a/packages/orchestrator/pkg/server/sandboxes.go +++ b/packages/orchestrator/pkg/server/sandboxes.go @@ -512,7 +512,7 @@ func recordSandboxKill(ctx context.Context, counter metric.Int64Counter, killRea counter.Add(ctx, 1, metric.WithAttributes(attribute.String("kill_reason", killReason))) } -func (s *Server) Pause(ctx context.Context, in *orchestrator.SandboxPauseRequest) (*emptypb.Empty, error) { +func (s *Server) Pause(ctx context.Context, in *orchestrator.SandboxPauseRequest) (*orchestrator.SandboxPauseResponse, error) { ctx, childSpan := tracer.Start(ctx, "sandbox-pause") defer childSpan.End() @@ -590,7 +590,9 @@ func (s *Server) Pause(ctx context.Context, in *orchestrator.SandboxPauseRequest }, ) - return &emptypb.Empty{}, nil + return &orchestrator.SandboxPauseResponse{ + SchedulingMetadata: res.SchedulingMetadata, + }, nil } func (s *Server) Checkpoint(ctx context.Context, in *orchestrator.SandboxCheckpointRequest) (*orchestrator.SandboxCheckpointResponse, error) { @@ -741,7 +743,9 @@ func (s *Server) Checkpoint(ctx context.Context, in *orchestrator.SandboxCheckpo telemetry.ReportEvent(ctx, "Checkpoint completed") - return &orchestrator.SandboxCheckpointResponse{}, nil + return &orchestrator.SandboxCheckpointResponse{ + SchedulingMetadata: res.SchedulingMetadata, + }, nil } // Extracts common data needed for sandbox events diff --git a/packages/shared/pkg/featureflags/flags.go b/packages/shared/pkg/featureflags/flags.go index 28b6f8e370..58324b28ee 100644 --- a/packages/shared/pkg/featureflags/flags.go +++ b/packages/shared/pkg/featureflags/flags.go @@ -265,7 +265,8 @@ var ( MaxConcurrentSandboxListQueries = NewIntFlag("max-concurrent-sandbox-list-queries", 0) // MaxConcurrentSnapshotBuildQueries limits concurrent GetSnapshotBuilds calls (e.g. sandbox delete). // 0 or negative disables throttling (unlimited concurrency). - MaxConcurrentSnapshotBuildQueries = NewIntFlag("max-concurrent-snapshot-build-queries", 0) + MaxConcurrentSnapshotBuildQueries = NewIntFlag("max-concurrent-snapshot-build-queries", 0) + SnapshotSchedulingMetadataChainLimit = NewIntFlag("snapshot-scheduling-metadata-chain-limit", 32) MinChunkerReadSizeKB = NewIntFlag("min-chunker-read-size-kb", 16) ) diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go index ea9a9a5a19..2bb8819606 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v5.29.3 +// protoc v5.26.1 // source: orchestrator.proto package orchestrator @@ -1002,6 +1002,148 @@ func (x *SandboxPauseRequest) GetBuildId() string { return "" } +type SnapshotSchedulingMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BaseBuildId string `protobuf:"bytes,1,opt,name=base_build_id,json=baseBuildId,proto3" json:"base_build_id,omitempty"` + Generation uint64 `protobuf:"varint,2,opt,name=generation,proto3" json:"generation,omitempty"` + MemfileMappingCount uint64 `protobuf:"varint,3,opt,name=memfile_mapping_count,json=memfileMappingCount,proto3" json:"memfile_mapping_count,omitempty"` + RootfsMappingCount uint64 `protobuf:"varint,4,opt,name=rootfs_mapping_count,json=rootfsMappingCount,proto3" json:"rootfs_mapping_count,omitempty"` + ChainBuildIds []string `protobuf:"bytes,5,rep,name=chain_build_ids,json=chainBuildIds,proto3" json:"chain_build_ids,omitempty"` + ChainMemfileBytes []uint64 `protobuf:"varint,6,rep,packed,name=chain_memfile_bytes,json=chainMemfileBytes,proto3" json:"chain_memfile_bytes,omitempty"` + ChainRootfsBytes []uint64 `protobuf:"varint,7,rep,packed,name=chain_rootfs_bytes,json=chainRootfsBytes,proto3" json:"chain_rootfs_bytes,omitempty"` +} + +func (x *SnapshotSchedulingMetadata) Reset() { + *x = SnapshotSchedulingMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_orchestrator_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SnapshotSchedulingMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SnapshotSchedulingMetadata) ProtoMessage() {} + +func (x *SnapshotSchedulingMetadata) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SnapshotSchedulingMetadata.ProtoReflect.Descriptor instead. +func (*SnapshotSchedulingMetadata) Descriptor() ([]byte, []int) { + return file_orchestrator_proto_rawDescGZIP(), []int{14} +} + +func (x *SnapshotSchedulingMetadata) GetBaseBuildId() string { + if x != nil { + return x.BaseBuildId + } + return "" +} + +func (x *SnapshotSchedulingMetadata) GetGeneration() uint64 { + if x != nil { + return x.Generation + } + return 0 +} + +func (x *SnapshotSchedulingMetadata) GetMemfileMappingCount() uint64 { + if x != nil { + return x.MemfileMappingCount + } + return 0 +} + +func (x *SnapshotSchedulingMetadata) GetRootfsMappingCount() uint64 { + if x != nil { + return x.RootfsMappingCount + } + return 0 +} + +func (x *SnapshotSchedulingMetadata) GetChainBuildIds() []string { + if x != nil { + return x.ChainBuildIds + } + return nil +} + +func (x *SnapshotSchedulingMetadata) GetChainMemfileBytes() []uint64 { + if x != nil { + return x.ChainMemfileBytes + } + return nil +} + +func (x *SnapshotSchedulingMetadata) GetChainRootfsBytes() []uint64 { + if x != nil { + return x.ChainRootfsBytes + } + return nil +} + +type SandboxPauseResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SchedulingMetadata *SnapshotSchedulingMetadata `protobuf:"bytes,1,opt,name=scheduling_metadata,json=schedulingMetadata,proto3" json:"scheduling_metadata,omitempty"` +} + +func (x *SandboxPauseResponse) Reset() { + *x = SandboxPauseResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_orchestrator_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SandboxPauseResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SandboxPauseResponse) ProtoMessage() {} + +func (x *SandboxPauseResponse) ProtoReflect() protoreflect.Message { + mi := &file_orchestrator_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SandboxPauseResponse.ProtoReflect.Descriptor instead. +func (*SandboxPauseResponse) Descriptor() ([]byte, []int) { + return file_orchestrator_proto_rawDescGZIP(), []int{15} +} + +func (x *SandboxPauseResponse) GetSchedulingMetadata() *SnapshotSchedulingMetadata { + if x != nil { + return x.SchedulingMetadata + } + return nil +} + type SandboxCheckpointRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1014,7 +1156,7 @@ type SandboxCheckpointRequest struct { func (x *SandboxCheckpointRequest) Reset() { *x = SandboxCheckpointRequest{} if protoimpl.UnsafeEnabled { - mi := &file_orchestrator_proto_msgTypes[14] + mi := &file_orchestrator_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1027,7 +1169,7 @@ func (x *SandboxCheckpointRequest) String() string { func (*SandboxCheckpointRequest) ProtoMessage() {} func (x *SandboxCheckpointRequest) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_proto_msgTypes[14] + mi := &file_orchestrator_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1040,7 +1182,7 @@ func (x *SandboxCheckpointRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SandboxCheckpointRequest.ProtoReflect.Descriptor instead. func (*SandboxCheckpointRequest) Descriptor() ([]byte, []int) { - return file_orchestrator_proto_rawDescGZIP(), []int{14} + return file_orchestrator_proto_rawDescGZIP(), []int{16} } func (x *SandboxCheckpointRequest) GetSandboxId() string { @@ -1061,12 +1203,14 @@ type SandboxCheckpointResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + SchedulingMetadata *SnapshotSchedulingMetadata `protobuf:"bytes,1,opt,name=scheduling_metadata,json=schedulingMetadata,proto3" json:"scheduling_metadata,omitempty"` } func (x *SandboxCheckpointResponse) Reset() { *x = SandboxCheckpointResponse{} if protoimpl.UnsafeEnabled { - mi := &file_orchestrator_proto_msgTypes[15] + mi := &file_orchestrator_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1079,7 +1223,7 @@ func (x *SandboxCheckpointResponse) String() string { func (*SandboxCheckpointResponse) ProtoMessage() {} func (x *SandboxCheckpointResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_proto_msgTypes[15] + mi := &file_orchestrator_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1092,7 +1236,14 @@ func (x *SandboxCheckpointResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SandboxCheckpointResponse.ProtoReflect.Descriptor instead. func (*SandboxCheckpointResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_proto_rawDescGZIP(), []int{15} + return file_orchestrator_proto_rawDescGZIP(), []int{17} +} + +func (x *SandboxCheckpointResponse) GetSchedulingMetadata() *SnapshotSchedulingMetadata { + if x != nil { + return x.SchedulingMetadata + } + return nil } type RunningSandbox struct { @@ -1109,7 +1260,7 @@ type RunningSandbox struct { func (x *RunningSandbox) Reset() { *x = RunningSandbox{} if protoimpl.UnsafeEnabled { - mi := &file_orchestrator_proto_msgTypes[16] + mi := &file_orchestrator_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1122,7 +1273,7 @@ func (x *RunningSandbox) String() string { func (*RunningSandbox) ProtoMessage() {} func (x *RunningSandbox) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_proto_msgTypes[16] + mi := &file_orchestrator_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1135,7 +1286,7 @@ func (x *RunningSandbox) ProtoReflect() protoreflect.Message { // Deprecated: Use RunningSandbox.ProtoReflect.Descriptor instead. func (*RunningSandbox) Descriptor() ([]byte, []int) { - return file_orchestrator_proto_rawDescGZIP(), []int{16} + return file_orchestrator_proto_rawDescGZIP(), []int{18} } func (x *RunningSandbox) GetConfig() *SandboxConfig { @@ -1177,7 +1328,7 @@ type SandboxListResponse struct { func (x *SandboxListResponse) Reset() { *x = SandboxListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_orchestrator_proto_msgTypes[17] + mi := &file_orchestrator_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1190,7 +1341,7 @@ func (x *SandboxListResponse) String() string { func (*SandboxListResponse) ProtoMessage() {} func (x *SandboxListResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_proto_msgTypes[17] + mi := &file_orchestrator_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1203,7 +1354,7 @@ func (x *SandboxListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SandboxListResponse.ProtoReflect.Descriptor instead. func (*SandboxListResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_proto_rawDescGZIP(), []int{17} + return file_orchestrator_proto_rawDescGZIP(), []int{19} } func (x *SandboxListResponse) GetSandboxes() []*RunningSandbox { @@ -1225,7 +1376,7 @@ type CachedBuildInfo struct { func (x *CachedBuildInfo) Reset() { *x = CachedBuildInfo{} if protoimpl.UnsafeEnabled { - mi := &file_orchestrator_proto_msgTypes[18] + mi := &file_orchestrator_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1238,7 +1389,7 @@ func (x *CachedBuildInfo) String() string { func (*CachedBuildInfo) ProtoMessage() {} func (x *CachedBuildInfo) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_proto_msgTypes[18] + mi := &file_orchestrator_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1251,7 +1402,7 @@ func (x *CachedBuildInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use CachedBuildInfo.ProtoReflect.Descriptor instead. func (*CachedBuildInfo) Descriptor() ([]byte, []int) { - return file_orchestrator_proto_rawDescGZIP(), []int{18} + return file_orchestrator_proto_rawDescGZIP(), []int{20} } func (x *CachedBuildInfo) GetBuildId() string { @@ -1279,7 +1430,7 @@ type SandboxListCachedBuildsResponse struct { func (x *SandboxListCachedBuildsResponse) Reset() { *x = SandboxListCachedBuildsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_orchestrator_proto_msgTypes[19] + mi := &file_orchestrator_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1292,7 +1443,7 @@ func (x *SandboxListCachedBuildsResponse) String() string { func (*SandboxListCachedBuildsResponse) ProtoMessage() {} func (x *SandboxListCachedBuildsResponse) ProtoReflect() protoreflect.Message { - mi := &file_orchestrator_proto_msgTypes[19] + mi := &file_orchestrator_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1305,7 +1456,7 @@ func (x *SandboxListCachedBuildsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SandboxListCachedBuildsResponse.ProtoReflect.Descriptor instead. func (*SandboxListCachedBuildsResponse) Descriptor() ([]byte, []int) { - return file_orchestrator_proto_rawDescGZIP(), []int{19} + return file_orchestrator_proto_rawDescGZIP(), []int{21} } func (x *SandboxListCachedBuildsResponse) GetBuilds() []*CachedBuildInfo { @@ -1510,75 +1661,107 @@ var file_orchestrator_proto_rawDesc = []byte{ 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x54, 0x0a, 0x18, 0x53, 0x61, 0x6e, 0x64, 0x62, - 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x1b, 0x0a, - 0x19, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc7, 0x01, 0x0a, 0x0e, 0x52, - 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x26, 0x0a, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 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, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, - 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x52, 0x07, 0x65, 0x6e, 0x64, - 0x54, 0x69, 0x6d, 0x65, 0x22, 0x44, 0x0a, 0x13, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x73, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, - 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x22, 0x71, 0x0a, 0x0f, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, - 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x52, 0x0e, 0x65, - 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x4b, 0x0a, - 0x1f, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x28, 0x0a, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x32, 0xbb, 0x03, 0x0a, 0x0e, 0x53, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, - 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x34, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x35, - 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x43, 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, - 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x10, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0xcc, 0x02, 0x0a, 0x1a, 0x53, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, + 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, + 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x65, + 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x6d, 0x65, 0x6d, 0x66, 0x69, + 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, + 0x0a, 0x14, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x72, 0x6f, + 0x6f, 0x74, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, + 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x04, 0x52, 0x11, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x6d, 0x66, + 0x69, 0x6c, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x04, 0x52, 0x10, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x74, 0x66, + 0x73, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x64, 0x0a, 0x14, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, + 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x54, 0x0a, 0x18, + 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, + 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x49, 0x64, 0x22, 0x69, 0x0a, 0x19, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4c, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, + 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc7, 0x01, + 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x12, 0x26, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 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, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x52, 0x07, + 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x44, 0x0a, 0x13, 0x53, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, + 0x0a, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x22, 0x71, 0x0a, + 0x0f, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x0f, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, + 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x22, 0x4b, 0x0a, 0x1f, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x32, 0xba, 0x03, + 0x0a, 0x0e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x37, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x12, 0x34, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x12, 0x34, 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x14, 0x2e, 0x53, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1a, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2f, 0x5a, 0x2d, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, - 0x32, 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x6f, 0x72, 0x63, - 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2f, 0x5a, 0x2d, 0x68, 0x74, + 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x65, 0x32, 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x6f, + 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -1593,7 +1776,7 @@ func file_orchestrator_proto_rawDescGZIP() []byte { return file_orchestrator_proto_rawDescData } -var file_orchestrator_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_orchestrator_proto_msgTypes = make([]protoimpl.MessageInfo, 26) var file_orchestrator_proto_goTypes = []interface{}{ (*SandboxConfig)(nil), // 0: SandboxConfig (*SandboxAutoResumeConfig)(nil), // 1: SandboxAutoResumeConfig @@ -1609,62 +1792,66 @@ var file_orchestrator_proto_goTypes = []interface{}{ (*SandboxUpdateRequest)(nil), // 11: SandboxUpdateRequest (*SandboxDeleteRequest)(nil), // 12: SandboxDeleteRequest (*SandboxPauseRequest)(nil), // 13: SandboxPauseRequest - (*SandboxCheckpointRequest)(nil), // 14: SandboxCheckpointRequest - (*SandboxCheckpointResponse)(nil), // 15: SandboxCheckpointResponse - (*RunningSandbox)(nil), // 16: RunningSandbox - (*SandboxListResponse)(nil), // 17: SandboxListResponse - (*CachedBuildInfo)(nil), // 18: CachedBuildInfo - (*SandboxListCachedBuildsResponse)(nil), // 19: SandboxListCachedBuildsResponse - nil, // 20: SandboxConfig.EnvVarsEntry - nil, // 21: SandboxConfig.MetadataEntry - nil, // 22: SandboxNetworkTransform.HeadersEntry - nil, // 23: SandboxNetworkEgressConfig.RulesEntry - (*timestamppb.Timestamp)(nil), // 24: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 25: google.protobuf.Empty + (*SnapshotSchedulingMetadata)(nil), // 14: SnapshotSchedulingMetadata + (*SandboxPauseResponse)(nil), // 15: SandboxPauseResponse + (*SandboxCheckpointRequest)(nil), // 16: SandboxCheckpointRequest + (*SandboxCheckpointResponse)(nil), // 17: SandboxCheckpointResponse + (*RunningSandbox)(nil), // 18: RunningSandbox + (*SandboxListResponse)(nil), // 19: SandboxListResponse + (*CachedBuildInfo)(nil), // 20: CachedBuildInfo + (*SandboxListCachedBuildsResponse)(nil), // 21: SandboxListCachedBuildsResponse + nil, // 22: SandboxConfig.EnvVarsEntry + nil, // 23: SandboxConfig.MetadataEntry + nil, // 24: SandboxNetworkTransform.HeadersEntry + nil, // 25: SandboxNetworkEgressConfig.RulesEntry + (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 27: google.protobuf.Empty } var file_orchestrator_proto_depIdxs = []int32{ - 20, // 0: SandboxConfig.env_vars:type_name -> SandboxConfig.EnvVarsEntry - 21, // 1: SandboxConfig.metadata:type_name -> SandboxConfig.MetadataEntry + 22, // 0: SandboxConfig.env_vars:type_name -> SandboxConfig.EnvVarsEntry + 23, // 1: SandboxConfig.metadata:type_name -> SandboxConfig.MetadataEntry 3, // 2: SandboxConfig.network:type_name -> SandboxNetworkConfig 2, // 3: SandboxConfig.volumeMounts:type_name -> SandboxVolumeMount 1, // 4: SandboxConfig.auto_resume:type_name -> SandboxAutoResumeConfig 7, // 5: SandboxNetworkConfig.egress:type_name -> SandboxNetworkEgressConfig 8, // 6: SandboxNetworkConfig.ingress:type_name -> SandboxNetworkIngressConfig - 22, // 7: SandboxNetworkTransform.headers:type_name -> SandboxNetworkTransform.HeadersEntry + 24, // 7: SandboxNetworkTransform.headers:type_name -> SandboxNetworkTransform.HeadersEntry 4, // 8: SandboxNetworkRule.transform:type_name -> SandboxNetworkTransform 5, // 9: SandboxNetworkDomainRules.rules:type_name -> SandboxNetworkRule - 23, // 10: SandboxNetworkEgressConfig.rules:type_name -> SandboxNetworkEgressConfig.RulesEntry + 25, // 10: SandboxNetworkEgressConfig.rules:type_name -> SandboxNetworkEgressConfig.RulesEntry 0, // 11: SandboxCreateRequest.sandbox:type_name -> SandboxConfig - 24, // 12: SandboxCreateRequest.start_time:type_name -> google.protobuf.Timestamp - 24, // 13: SandboxCreateRequest.end_time:type_name -> google.protobuf.Timestamp - 24, // 14: SandboxUpdateRequest.end_time:type_name -> google.protobuf.Timestamp + 26, // 12: SandboxCreateRequest.start_time:type_name -> google.protobuf.Timestamp + 26, // 13: SandboxCreateRequest.end_time:type_name -> google.protobuf.Timestamp + 26, // 14: SandboxUpdateRequest.end_time:type_name -> google.protobuf.Timestamp 7, // 15: SandboxUpdateRequest.egress:type_name -> SandboxNetworkEgressConfig - 0, // 16: RunningSandbox.config:type_name -> SandboxConfig - 24, // 17: RunningSandbox.start_time:type_name -> google.protobuf.Timestamp - 24, // 18: RunningSandbox.end_time:type_name -> google.protobuf.Timestamp - 16, // 19: SandboxListResponse.sandboxes:type_name -> RunningSandbox - 24, // 20: CachedBuildInfo.expiration_time:type_name -> google.protobuf.Timestamp - 18, // 21: SandboxListCachedBuildsResponse.builds:type_name -> CachedBuildInfo - 6, // 22: SandboxNetworkEgressConfig.RulesEntry.value:type_name -> SandboxNetworkDomainRules - 9, // 23: SandboxService.Create:input_type -> SandboxCreateRequest - 11, // 24: SandboxService.Update:input_type -> SandboxUpdateRequest - 25, // 25: SandboxService.List:input_type -> google.protobuf.Empty - 12, // 26: SandboxService.Delete:input_type -> SandboxDeleteRequest - 13, // 27: SandboxService.Pause:input_type -> SandboxPauseRequest - 14, // 28: SandboxService.Checkpoint:input_type -> SandboxCheckpointRequest - 25, // 29: SandboxService.ListCachedBuilds:input_type -> google.protobuf.Empty - 10, // 30: SandboxService.Create:output_type -> SandboxCreateResponse - 25, // 31: SandboxService.Update:output_type -> google.protobuf.Empty - 17, // 32: SandboxService.List:output_type -> SandboxListResponse - 25, // 33: SandboxService.Delete:output_type -> google.protobuf.Empty - 25, // 34: SandboxService.Pause:output_type -> google.protobuf.Empty - 15, // 35: SandboxService.Checkpoint:output_type -> SandboxCheckpointResponse - 19, // 36: SandboxService.ListCachedBuilds:output_type -> SandboxListCachedBuildsResponse - 30, // [30:37] is the sub-list for method output_type - 23, // [23:30] is the sub-list for method input_type - 23, // [23:23] is the sub-list for extension type_name - 23, // [23:23] is the sub-list for extension extendee - 0, // [0:23] is the sub-list for field type_name + 14, // 16: SandboxPauseResponse.scheduling_metadata:type_name -> SnapshotSchedulingMetadata + 14, // 17: SandboxCheckpointResponse.scheduling_metadata:type_name -> SnapshotSchedulingMetadata + 0, // 18: RunningSandbox.config:type_name -> SandboxConfig + 26, // 19: RunningSandbox.start_time:type_name -> google.protobuf.Timestamp + 26, // 20: RunningSandbox.end_time:type_name -> google.protobuf.Timestamp + 18, // 21: SandboxListResponse.sandboxes:type_name -> RunningSandbox + 26, // 22: CachedBuildInfo.expiration_time:type_name -> google.protobuf.Timestamp + 20, // 23: SandboxListCachedBuildsResponse.builds:type_name -> CachedBuildInfo + 6, // 24: SandboxNetworkEgressConfig.RulesEntry.value:type_name -> SandboxNetworkDomainRules + 9, // 25: SandboxService.Create:input_type -> SandboxCreateRequest + 11, // 26: SandboxService.Update:input_type -> SandboxUpdateRequest + 27, // 27: SandboxService.List:input_type -> google.protobuf.Empty + 12, // 28: SandboxService.Delete:input_type -> SandboxDeleteRequest + 13, // 29: SandboxService.Pause:input_type -> SandboxPauseRequest + 16, // 30: SandboxService.Checkpoint:input_type -> SandboxCheckpointRequest + 27, // 31: SandboxService.ListCachedBuilds:input_type -> google.protobuf.Empty + 10, // 32: SandboxService.Create:output_type -> SandboxCreateResponse + 27, // 33: SandboxService.Update:output_type -> google.protobuf.Empty + 19, // 34: SandboxService.List:output_type -> SandboxListResponse + 27, // 35: SandboxService.Delete:output_type -> google.protobuf.Empty + 15, // 36: SandboxService.Pause:output_type -> SandboxPauseResponse + 17, // 37: SandboxService.Checkpoint:output_type -> SandboxCheckpointResponse + 21, // 38: SandboxService.ListCachedBuilds:output_type -> SandboxListCachedBuildsResponse + 32, // [32:39] is the sub-list for method output_type + 25, // [25:32] is the sub-list for method input_type + 25, // [25:25] is the sub-list for extension type_name + 25, // [25:25] is the sub-list for extension extendee + 0, // [0:25] is the sub-list for field type_name } func init() { file_orchestrator_proto_init() } @@ -1842,7 +2029,7 @@ func file_orchestrator_proto_init() { } } file_orchestrator_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SandboxCheckpointRequest); i { + switch v := v.(*SnapshotSchedulingMetadata); i { case 0: return &v.state case 1: @@ -1854,7 +2041,7 @@ func file_orchestrator_proto_init() { } } file_orchestrator_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SandboxCheckpointResponse); i { + switch v := v.(*SandboxPauseResponse); i { case 0: return &v.state case 1: @@ -1866,7 +2053,7 @@ func file_orchestrator_proto_init() { } } file_orchestrator_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RunningSandbox); i { + switch v := v.(*SandboxCheckpointRequest); i { case 0: return &v.state case 1: @@ -1878,7 +2065,7 @@ func file_orchestrator_proto_init() { } } file_orchestrator_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SandboxListResponse); i { + switch v := v.(*SandboxCheckpointResponse); i { case 0: return &v.state case 1: @@ -1890,7 +2077,7 @@ func file_orchestrator_proto_init() { } } file_orchestrator_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CachedBuildInfo); i { + switch v := v.(*RunningSandbox); i { case 0: return &v.state case 1: @@ -1902,6 +2089,30 @@ func file_orchestrator_proto_init() { } } file_orchestrator_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SandboxListResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_orchestrator_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CachedBuildInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_orchestrator_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SandboxListCachedBuildsResponse); i { case 0: return &v.state @@ -1926,7 +2137,7 @@ func file_orchestrator_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_orchestrator_proto_rawDesc, NumEnums: 0, - NumMessages: 24, + NumMessages: 26, NumExtensions: 0, NumServices: 1, }, diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go index 123f5ae38d..f48f4ccd5b 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 -// - protoc v5.29.3 +// - protoc v5.26.1 // source: orchestrator.proto package orchestrator @@ -37,7 +37,7 @@ type SandboxServiceClient interface { Update(ctx context.Context, in *SandboxUpdateRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) List(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*SandboxListResponse, error) Delete(ctx context.Context, in *SandboxDeleteRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - Pause(ctx context.Context, in *SandboxPauseRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + Pause(ctx context.Context, in *SandboxPauseRequest, opts ...grpc.CallOption) (*SandboxPauseResponse, error) Checkpoint(ctx context.Context, in *SandboxCheckpointRequest, opts ...grpc.CallOption) (*SandboxCheckpointResponse, error) ListCachedBuilds(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*SandboxListCachedBuildsResponse, error) } @@ -90,9 +90,9 @@ func (c *sandboxServiceClient) Delete(ctx context.Context, in *SandboxDeleteRequ return out, nil } -func (c *sandboxServiceClient) Pause(ctx context.Context, in *SandboxPauseRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { +func (c *sandboxServiceClient) Pause(ctx context.Context, in *SandboxPauseRequest, opts ...grpc.CallOption) (*SandboxPauseResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(emptypb.Empty) + out := new(SandboxPauseResponse) err := c.cc.Invoke(ctx, SandboxService_Pause_FullMethodName, in, out, cOpts...) if err != nil { return nil, err @@ -128,7 +128,7 @@ type SandboxServiceServer interface { Update(context.Context, *SandboxUpdateRequest) (*emptypb.Empty, error) List(context.Context, *emptypb.Empty) (*SandboxListResponse, error) Delete(context.Context, *SandboxDeleteRequest) (*emptypb.Empty, error) - Pause(context.Context, *SandboxPauseRequest) (*emptypb.Empty, error) + Pause(context.Context, *SandboxPauseRequest) (*SandboxPauseResponse, error) Checkpoint(context.Context, *SandboxCheckpointRequest) (*SandboxCheckpointResponse, error) ListCachedBuilds(context.Context, *emptypb.Empty) (*SandboxListCachedBuildsResponse, error) mustEmbedUnimplementedSandboxServiceServer() @@ -153,7 +153,7 @@ func (UnimplementedSandboxServiceServer) List(context.Context, *emptypb.Empty) ( func (UnimplementedSandboxServiceServer) Delete(context.Context, *SandboxDeleteRequest) (*emptypb.Empty, error) { return nil, status.Error(codes.Unimplemented, "method Delete not implemented") } -func (UnimplementedSandboxServiceServer) Pause(context.Context, *SandboxPauseRequest) (*emptypb.Empty, error) { +func (UnimplementedSandboxServiceServer) Pause(context.Context, *SandboxPauseRequest) (*SandboxPauseResponse, error) { return nil, status.Error(codes.Unimplemented, "method Pause not implemented") } func (UnimplementedSandboxServiceServer) Checkpoint(context.Context, *SandboxCheckpointRequest) (*SandboxCheckpointResponse, error) { From 03514633e032ad29b9e608eab125c5af54e68af7 Mon Sep 17 00:00:00 2001 From: Tomas Valenta Date: Sat, 30 May 2026 14:36:21 -0700 Subject: [PATCH 02/15] fix(snapshot): return scheduling metadata Populate pause/checkpoint responses from snapshot results and store scheduling metadata as JSONB. --- .../update_snapshot_scheduling_metadata.sql | 2 +- .../update_snapshot_scheduling_metadata.sql.go | 2 +- packages/orchestrator/pkg/server/sandboxes.go | 18 ++++++++++-------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql b/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql index 36583142f5..3db742532a 100644 --- a/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql +++ b/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql @@ -3,7 +3,7 @@ UPDATE "public"."snapshots" SET metadata = jsonb_set( metadata, '{snapshot_scheduling_metadata}', - to_jsonb(@metadata::text), + (@metadata::text)::jsonb, true ) WHERE sandbox_id = @sandbox_id; diff --git a/packages/db/queries/update_snapshot_scheduling_metadata.sql.go b/packages/db/queries/update_snapshot_scheduling_metadata.sql.go index bebfb4c306..5701dc14f1 100644 --- a/packages/db/queries/update_snapshot_scheduling_metadata.sql.go +++ b/packages/db/queries/update_snapshot_scheduling_metadata.sql.go @@ -14,7 +14,7 @@ UPDATE "public"."snapshots" SET metadata = jsonb_set( metadata, '{snapshot_scheduling_metadata}', - to_jsonb($1::text), + ($1::text)::jsonb, true ) WHERE sandbox_id = $2 diff --git a/packages/orchestrator/pkg/server/sandboxes.go b/packages/orchestrator/pkg/server/sandboxes.go index 9417fad321..b7557d4217 100644 --- a/packages/orchestrator/pkg/server/sandboxes.go +++ b/packages/orchestrator/pkg/server/sandboxes.go @@ -591,7 +591,7 @@ func (s *Server) Pause(ctx context.Context, in *orchestrator.SandboxPauseRequest ) return &orchestrator.SandboxPauseResponse{ - SchedulingMetadata: res.SchedulingMetadata, + SchedulingMetadata: res.schedulingMetadata, }, nil } @@ -744,7 +744,7 @@ func (s *Server) Checkpoint(ctx context.Context, in *orchestrator.SandboxCheckpo telemetry.ReportEvent(ctx, "Checkpoint completed") return &orchestrator.SandboxCheckpointResponse{ - SchedulingMetadata: res.SchedulingMetadata, + SchedulingMetadata: res.schedulingMetadata, }, nil } @@ -782,9 +782,10 @@ func (s *Server) getSandboxExecutionData(sbx *sandbox.Sandbox) map[string]any { // snapshotResult holds the data produced by snapshotAndCacheSandbox that // callers need to start the background remote storage upload. type snapshotResult struct { - meta metadata.Template - upload *sandbox.Upload - completeUpload func(ctx context.Context, uploadErr error) + meta metadata.Template + schedulingMetadata *orchestrator.SnapshotSchedulingMetadata + upload *sandbox.Upload + completeUpload func(ctx context.Context, uploadErr error) } // snapshotAndCacheSandbox creates a snapshot of a sandbox and adds it to the @@ -863,9 +864,10 @@ func (s *Server) snapshotAndCacheSandbox( } return &snapshotResult{ - meta: meta, - upload: upload, - completeUpload: completeUpload, + meta: meta, + schedulingMetadata: snapshot.SchedulingMetadata, + upload: upload, + completeUpload: completeUpload, }, nil } From 58f62fec63906aaef80a5171ae4ad5ce958559d1 Mon Sep 17 00:00:00 2001 From: Tomas Valenta Date: Sat, 30 May 2026 14:38:14 -0700 Subject: [PATCH 03/15] fix(snapshot): make scheduling metadata best effort Do not fail a successful pause or checkpoint if persisting optional scheduling metadata fails. --- packages/api/internal/orchestrator/pause_instance.go | 2 +- packages/api/internal/orchestrator/snapshot_template.go | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/api/internal/orchestrator/pause_instance.go b/packages/api/internal/orchestrator/pause_instance.go index 66c09822e6..40923418e1 100644 --- a/packages/api/internal/orchestrator/pause_instance.go +++ b/packages/api/internal/orchestrator/pause_instance.go @@ -52,7 +52,7 @@ func (o *Orchestrator) pauseSandbox(ctx context.Context, node *nodemanager.Node, } if schedulingMetadata != nil { if err := o.updateSnapshotSchedulingMetadata(ctx, sbx.SandboxID, schedulingMetadata); err != nil { - return err + telemetry.ReportError(ctx, "error updating snapshot scheduling metadata", err) } } diff --git a/packages/api/internal/orchestrator/snapshot_template.go b/packages/api/internal/orchestrator/snapshot_template.go index 06b459297b..ff637b3798 100644 --- a/packages/api/internal/orchestrator/snapshot_template.go +++ b/packages/api/internal/orchestrator/snapshot_template.go @@ -104,9 +104,7 @@ func (o *Orchestrator) CreateSnapshotTemplate(ctx context.Context, teamID uuid.U } if metadata := checkpointRes.GetSchedulingMetadata(); metadata != nil { if err := o.updateSnapshotSchedulingMetadata(ctx, sbx.SandboxID, metadata); err != nil { - o.failSnapshotBuild(ctx, upsertResult.BuildID, err) - - return SnapshotTemplateResult{}, err + telemetry.ReportError(ctx, "error updating snapshot scheduling metadata", err) } } From 172d8fb625d86d2003d11c86a44bd9a1824243c3 Mon Sep 17 00:00:00 2001 From: Tomas Valenta Date: Sat, 30 May 2026 14:43:58 -0700 Subject: [PATCH 04/15] fix(snapshot): resolve scheduling metadata lint Use slices.SortFunc and remove an unnecessary conversion in metadata generation. --- packages/orchestrator/pkg/sandbox/sandbox.go | 2 +- packages/orchestrator/pkg/sandbox/snapshot.go | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/orchestrator/pkg/sandbox/sandbox.go b/packages/orchestrator/pkg/sandbox/sandbox.go index 85ca83e55b..1a7c1a6f54 100644 --- a/packages/orchestrator/pkg/sandbox/sandbox.go +++ b/packages/orchestrator/pkg/sandbox/sandbox.go @@ -1185,7 +1185,7 @@ func (s *Sandbox) Pause( } cleanup.AddNoContext(ctx, rootfsDiff.Close) - chainLimit := int(s.featureFlags.IntFlag(ctx, featureflags.SnapshotSchedulingMetadataChainLimit)) + chainLimit := s.featureFlags.IntFlag(ctx, featureflags.SnapshotSchedulingMetadataChainLimit) schedulingMetadata := NewSnapshotSchedulingMetadata(originalMemfile.Header(), originalRootfs.Header(), chainLimit) metadataFileLink := template.NewLocalFileLink(cachePaths.CacheMetadata()) diff --git a/packages/orchestrator/pkg/sandbox/snapshot.go b/packages/orchestrator/pkg/sandbox/snapshot.go index 6dd10e9173..2626676464 100644 --- a/packages/orchestrator/pkg/sandbox/snapshot.go +++ b/packages/orchestrator/pkg/sandbox/snapshot.go @@ -3,9 +3,10 @@ package sandbox import ( + "cmp" "context" "fmt" - "sort" + "slices" "github.com/google/uuid" @@ -104,14 +105,14 @@ func NewSnapshotSchedulingMetadata(memfileHeader, rootfsHeader *header.Header, l for _, c := range contributions { chain = append(chain, *c) } - sort.Slice(chain, func(i, j int) bool { - iBytes := chain[i].memfileBytes + chain[i].rootfsBytes - jBytes := chain[j].memfileBytes + chain[j].rootfsBytes - if iBytes == jBytes { - return chain[i].buildID.String() < chain[j].buildID.String() + slices.SortFunc(chain, func(a, b schedulingBuildContribution) int { + aBytes := a.memfileBytes + a.rootfsBytes + bBytes := b.memfileBytes + b.rootfsBytes + if aBytes == bBytes { + return cmp.Compare(a.buildID.String(), b.buildID.String()) } - return iBytes > jBytes + return cmp.Compare(bBytes, aBytes) }) parentBuildID := memfileHeader.Metadata.BuildId if parentBuildID == uuid.Nil { From af997d550f689f0d133e2a121ba2a18a8e3841d3 Mon Sep 17 00:00:00 2001 From: Tomas Valenta Date: Sat, 30 May 2026 14:47:53 -0700 Subject: [PATCH 05/15] fix(snapshot): preserve parent at chain limit one Avoid replacing the only chain entry with the base build because base build is already stored separately. --- packages/orchestrator/pkg/sandbox/snapshot.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/orchestrator/pkg/sandbox/snapshot.go b/packages/orchestrator/pkg/sandbox/snapshot.go index 2626676464..e2b620d7f3 100644 --- a/packages/orchestrator/pkg/sandbox/snapshot.go +++ b/packages/orchestrator/pkg/sandbox/snapshot.go @@ -130,7 +130,7 @@ func NewSnapshotSchedulingMetadata(memfileHeader, rootfsHeader *header.Header, l chain = nil } else if len(chain) > limit { chain = chain[:limit] - if baseBuildID != uuid.Nil { + if baseBuildID != uuid.Nil && limit > 1 { hasBase := false for _, c := range chain { if c.buildID == baseBuildID { From dab370e4604cd2d284a8a383ad235cfdd7c6c15c Mon Sep 17 00:00:00 2001 From: Tomas Valenta Date: Sat, 30 May 2026 14:52:00 -0700 Subject: [PATCH 06/15] fix(snapshot): preserve scheduling metadata on upsert Store scheduling metadata as a string value in the existing metadata map and keep it across snapshot upserts until refreshed. --- packages/db/queries/create_new_snapshot.sql.go | 8 ++++++-- packages/db/queries/snapshots/create_new_snapshot.sql | 6 +++++- .../snapshots/update_snapshot_scheduling_metadata.sql | 2 +- .../db/queries/update_snapshot_scheduling_metadata.sql.go | 2 +- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/db/queries/create_new_snapshot.sql.go b/packages/db/queries/create_new_snapshot.sql.go index 5a9765ed35..d796473f0e 100644 --- a/packages/db/queries/create_new_snapshot.sql.go +++ b/packages/db/queries/create_new_snapshot.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.29.0 +// sqlc v1.31.1 // source: create_new_snapshot.sql package queries @@ -55,7 +55,11 @@ snapshot as ( now() ) ON CONFLICT (sandbox_id) DO UPDATE SET - metadata = excluded.metadata, + metadata = CASE + WHEN snapshots.metadata ? 'snapshot_scheduling_metadata' + THEN excluded.metadata || jsonb_build_object('snapshot_scheduling_metadata', snapshots.metadata->'snapshot_scheduling_metadata') + ELSE excluded.metadata + END, sandbox_started_at = excluded.sandbox_started_at, allow_internet_access = COALESCE(excluded.allow_internet_access, snapshots.allow_internet_access), origin_node_id = excluded.origin_node_id, diff --git a/packages/db/queries/snapshots/create_new_snapshot.sql b/packages/db/queries/snapshots/create_new_snapshot.sql index b5aa9f97fb..4edf9b744a 100644 --- a/packages/db/queries/snapshots/create_new_snapshot.sql +++ b/packages/db/queries/snapshots/create_new_snapshot.sql @@ -41,7 +41,11 @@ snapshot as ( now() ) ON CONFLICT (sandbox_id) DO UPDATE SET - metadata = excluded.metadata, + metadata = CASE + WHEN snapshots.metadata ? 'snapshot_scheduling_metadata' + THEN excluded.metadata || jsonb_build_object('snapshot_scheduling_metadata', snapshots.metadata->'snapshot_scheduling_metadata') + ELSE excluded.metadata + END, sandbox_started_at = excluded.sandbox_started_at, allow_internet_access = COALESCE(excluded.allow_internet_access, snapshots.allow_internet_access), origin_node_id = excluded.origin_node_id, diff --git a/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql b/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql index 3db742532a..36583142f5 100644 --- a/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql +++ b/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql @@ -3,7 +3,7 @@ UPDATE "public"."snapshots" SET metadata = jsonb_set( metadata, '{snapshot_scheduling_metadata}', - (@metadata::text)::jsonb, + to_jsonb(@metadata::text), true ) WHERE sandbox_id = @sandbox_id; diff --git a/packages/db/queries/update_snapshot_scheduling_metadata.sql.go b/packages/db/queries/update_snapshot_scheduling_metadata.sql.go index 5701dc14f1..bebfb4c306 100644 --- a/packages/db/queries/update_snapshot_scheduling_metadata.sql.go +++ b/packages/db/queries/update_snapshot_scheduling_metadata.sql.go @@ -14,7 +14,7 @@ UPDATE "public"."snapshots" SET metadata = jsonb_set( metadata, '{snapshot_scheduling_metadata}', - ($1::text)::jsonb, + to_jsonb($1::text), true ) WHERE sandbox_id = $2 From e55b31bbbb8c89a436048504cd693687bed46f5a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 30 May 2026 21:58:20 +0000 Subject: [PATCH 07/15] chore: auto-commit generated changes --- packages/db/queries/create_new_snapshot.sql.go | 2 +- packages/db/queries/update_snapshot_scheduling_metadata.sql.go | 2 +- packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go | 2 +- packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/db/queries/create_new_snapshot.sql.go b/packages/db/queries/create_new_snapshot.sql.go index d796473f0e..772830592c 100644 --- a/packages/db/queries/create_new_snapshot.sql.go +++ b/packages/db/queries/create_new_snapshot.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.31.1 +// sqlc v1.29.0 // source: create_new_snapshot.sql package queries diff --git a/packages/db/queries/update_snapshot_scheduling_metadata.sql.go b/packages/db/queries/update_snapshot_scheduling_metadata.sql.go index bebfb4c306..abe897ecd2 100644 --- a/packages/db/queries/update_snapshot_scheduling_metadata.sql.go +++ b/packages/db/queries/update_snapshot_scheduling_metadata.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.31.1 +// sqlc v1.29.0 // source: update_snapshot_scheduling_metadata.sql package queries diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go index 2bb8819606..c61ce1b979 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v5.26.1 +// protoc v5.29.3 // source: orchestrator.proto package orchestrator diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go index f48f4ccd5b..61d933d3d1 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 -// - protoc v5.26.1 +// - protoc v5.29.3 // source: orchestrator.proto package orchestrator From 055b4e0d2a0b2fb9f1d166e4e9799cd8037fb60d Mon Sep 17 00:00:00 2001 From: Tomas Valenta Date: Sat, 30 May 2026 21:08:53 -0700 Subject: [PATCH 08/15] fix(orch): expose scheduling metadata internally --- .../internal/orchestrator/pause_instance.go | 36 +- .../orchestrator/snapshot_template.go | 7 +- .../db/queries/create_new_snapshot.sql.go | 6 +- .../queries/snapshots/create_new_snapshot.sql | 6 +- .../update_snapshot_scheduling_metadata.sql | 9 - ...update_snapshot_scheduling_metadata.sql.go | 31 -- packages/orchestrator/orchestrator.proto | 19 +- packages/orchestrator/pkg/sandbox/sandbox.go | 3 +- packages/orchestrator/pkg/sandbox/snapshot.go | 114 +---- .../pkg/sandbox/template/storage_template.go | 12 + .../orchestrator/pkg/scheduling/metadata.go | 116 +++++ packages/orchestrator/pkg/server/sandboxes.go | 2 +- .../orchestrator/pkg/server/template_cache.go | 11 +- .../pkg/template/build/builder.go | 37 ++ .../pkg/template/server/create_template.go | 1 + packages/orchestrator/template-manager.proto | 13 + packages/shared/pkg/featureflags/flags.go | 3 +- .../pkg/grpc/orchestrator/orchestrator.pb.go | 356 +++++++++------- .../grpc/orchestrator/orchestrator_grpc.pb.go | 2 +- .../template-manager/template-manager.pb.go | 403 +++++++++++++----- .../template-manager_grpc.pb.go | 2 +- 21 files changed, 698 insertions(+), 491 deletions(-) delete mode 100644 packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql delete mode 100644 packages/db/queries/update_snapshot_scheduling_metadata.sql.go create mode 100644 packages/orchestrator/pkg/scheduling/metadata.go diff --git a/packages/api/internal/orchestrator/pause_instance.go b/packages/api/internal/orchestrator/pause_instance.go index 40923418e1..c1863cebd8 100644 --- a/packages/api/internal/orchestrator/pause_instance.go +++ b/packages/api/internal/orchestrator/pause_instance.go @@ -10,7 +10,6 @@ import ( "github.com/google/uuid" "github.com/jackc/pgx/v5/pgtype" "google.golang.org/grpc/codes" - "google.golang.org/protobuf/encoding/protojson" "github.com/e2b-dev/infra/packages/api/internal/orchestrator/nodemanager" "github.com/e2b-dev/infra/packages/api/internal/sandbox" @@ -38,7 +37,7 @@ func (o *Orchestrator) pauseSandbox(ctx context.Context, node *nodemanager.Node, return err } - schedulingMetadata, err := snapshotInstance(ctx, node, sbx, result.TemplateID, result.BuildID.String()) + err = snapshotInstance(ctx, node, sbx, result.TemplateID, result.BuildID.String()) if errors.Is(err, PauseQueueExhaustedError{}) { telemetry.ReportCriticalError(ctx, "pause queue exhausted", err) @@ -50,11 +49,6 @@ func (o *Orchestrator) pauseSandbox(ctx context.Context, node *nodemanager.Node, return fmt.Errorf("error pausing sandbox: %w", err) } - if schedulingMetadata != nil { - if err := o.updateSnapshotSchedulingMetadata(ctx, sbx.SandboxID, schedulingMetadata); err != nil { - telemetry.ReportError(ctx, "error updating snapshot scheduling metadata", err) - } - } now := time.Now() err = o.sqlcDB.UpdateEnvBuildStatus(ctx, queries.UpdateEnvBuildStatusParams{ @@ -74,12 +68,12 @@ func (o *Orchestrator) pauseSandbox(ctx context.Context, node *nodemanager.Node, return nil } -func snapshotInstance(ctx context.Context, node *nodemanager.Node, sbx sandbox.Sandbox, templateID, buildID string) (*orchestrator.SnapshotSchedulingMetadata, error) { +func snapshotInstance(ctx context.Context, node *nodemanager.Node, sbx sandbox.Sandbox, templateID, buildID string) error { childCtx, childSpan := tracer.Start(ctx, "snapshot-instance") defer childSpan.End() client, childCtx := node.GetSandboxDeleteCtx(childCtx, sbx.SandboxID, sbx.ExecutionID) - res, err := client.Sandbox.Pause( + _, err := client.Sandbox.Pause( childCtx, &orchestrator.SandboxPauseRequest{ SandboxId: sbx.SandboxID, TemplateId: templateID, @@ -90,35 +84,19 @@ func snapshotInstance(ctx context.Context, node *nodemanager.Node, sbx sandbox.S if err == nil { telemetry.ReportEvent(ctx, "Paused sandbox") - return res.GetSchedulingMetadata(), nil + return nil } st, ok := status.FromError(err) if !ok { - return nil, err + return err } if st.Code() == codes.ResourceExhausted { - return nil, PauseQueueExhaustedError{} - } - - return nil, fmt.Errorf("failed to pause sandbox '%s': %w", sbx.SandboxID, err) -} - -func (o *Orchestrator) updateSnapshotSchedulingMetadata(ctx context.Context, sandboxID string, metadata *orchestrator.SnapshotSchedulingMetadata) error { - data, err := protojson.MarshalOptions{UseProtoNames: true}.Marshal(metadata) - if err != nil { - return fmt.Errorf("marshal snapshot scheduling metadata: %w", err) - } - if err := o.sqlcDB.UpdateSnapshotSchedulingMetadata(ctx, queries.UpdateSnapshotSchedulingMetadataParams{ - SandboxID: sandboxID, - Metadata: string(data), - }); err != nil { - return fmt.Errorf("update snapshot scheduling metadata: %w", err) + return PauseQueueExhaustedError{} } - o.snapshotCache.Invalidate(context.WithoutCancel(ctx), sandboxID) - return nil + return fmt.Errorf("failed to pause sandbox '%s': %w", sbx.SandboxID, err) } func (o *Orchestrator) WaitForStateChange(ctx context.Context, teamID uuid.UUID, sandboxID string) error { diff --git a/packages/api/internal/orchestrator/snapshot_template.go b/packages/api/internal/orchestrator/snapshot_template.go index ff637b3798..4d08816d1e 100644 --- a/packages/api/internal/orchestrator/snapshot_template.go +++ b/packages/api/internal/orchestrator/snapshot_template.go @@ -84,7 +84,7 @@ func (o *Orchestrator) CreateSnapshotTemplate(ctx context.Context, teamID uuid.U // kills the sandbox itself; RemoveSandbox is still needed to clean up // API-side state (store, routing, analytics). client, childCtx := node.GetClient(ctx) - checkpointRes, err := client.Sandbox.Checkpoint(childCtx, &orchestrator.SandboxCheckpointRequest{ + _, err = client.Sandbox.Checkpoint(childCtx, &orchestrator.SandboxCheckpointRequest{ SandboxId: sbx.SandboxID, BuildId: upsertResult.BuildID.String(), }) @@ -102,11 +102,6 @@ func (o *Orchestrator) CreateSnapshotTemplate(ctx context.Context, teamID uuid.U return SnapshotTemplateResult{}, fmt.Errorf("checkpoint failed: %w", err) } - if metadata := checkpointRes.GetSchedulingMetadata(); metadata != nil { - if err := o.updateSnapshotSchedulingMetadata(ctx, sbx.SandboxID, metadata); err != nil { - telemetry.ReportError(ctx, "error updating snapshot scheduling metadata", err) - } - } now := time.Now() err = o.sqlcDB.UpdateEnvBuildStatus(ctx, queries.UpdateEnvBuildStatusParams{ diff --git a/packages/db/queries/create_new_snapshot.sql.go b/packages/db/queries/create_new_snapshot.sql.go index 772830592c..5a9765ed35 100644 --- a/packages/db/queries/create_new_snapshot.sql.go +++ b/packages/db/queries/create_new_snapshot.sql.go @@ -55,11 +55,7 @@ snapshot as ( now() ) ON CONFLICT (sandbox_id) DO UPDATE SET - metadata = CASE - WHEN snapshots.metadata ? 'snapshot_scheduling_metadata' - THEN excluded.metadata || jsonb_build_object('snapshot_scheduling_metadata', snapshots.metadata->'snapshot_scheduling_metadata') - ELSE excluded.metadata - END, + metadata = excluded.metadata, sandbox_started_at = excluded.sandbox_started_at, allow_internet_access = COALESCE(excluded.allow_internet_access, snapshots.allow_internet_access), origin_node_id = excluded.origin_node_id, diff --git a/packages/db/queries/snapshots/create_new_snapshot.sql b/packages/db/queries/snapshots/create_new_snapshot.sql index 4edf9b744a..b5aa9f97fb 100644 --- a/packages/db/queries/snapshots/create_new_snapshot.sql +++ b/packages/db/queries/snapshots/create_new_snapshot.sql @@ -41,11 +41,7 @@ snapshot as ( now() ) ON CONFLICT (sandbox_id) DO UPDATE SET - metadata = CASE - WHEN snapshots.metadata ? 'snapshot_scheduling_metadata' - THEN excluded.metadata || jsonb_build_object('snapshot_scheduling_metadata', snapshots.metadata->'snapshot_scheduling_metadata') - ELSE excluded.metadata - END, + metadata = excluded.metadata, sandbox_started_at = excluded.sandbox_started_at, allow_internet_access = COALESCE(excluded.allow_internet_access, snapshots.allow_internet_access), origin_node_id = excluded.origin_node_id, diff --git a/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql b/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql deleted file mode 100644 index 36583142f5..0000000000 --- a/packages/db/queries/snapshots/update_snapshot_scheduling_metadata.sql +++ /dev/null @@ -1,9 +0,0 @@ --- name: UpdateSnapshotSchedulingMetadata :exec -UPDATE "public"."snapshots" -SET metadata = jsonb_set( - metadata, - '{snapshot_scheduling_metadata}', - to_jsonb(@metadata::text), - true -) -WHERE sandbox_id = @sandbox_id; diff --git a/packages/db/queries/update_snapshot_scheduling_metadata.sql.go b/packages/db/queries/update_snapshot_scheduling_metadata.sql.go deleted file mode 100644 index abe897ecd2..0000000000 --- a/packages/db/queries/update_snapshot_scheduling_metadata.sql.go +++ /dev/null @@ -1,31 +0,0 @@ -// Code generated by sqlc. DO NOT EDIT. -// versions: -// sqlc v1.29.0 -// source: update_snapshot_scheduling_metadata.sql - -package queries - -import ( - "context" -) - -const updateSnapshotSchedulingMetadata = `-- name: UpdateSnapshotSchedulingMetadata :exec -UPDATE "public"."snapshots" -SET metadata = jsonb_set( - metadata, - '{snapshot_scheduling_metadata}', - to_jsonb($1::text), - true -) -WHERE sandbox_id = $2 -` - -type UpdateSnapshotSchedulingMetadataParams struct { - Metadata string - SandboxID string -} - -func (q *Queries) UpdateSnapshotSchedulingMetadata(ctx context.Context, arg UpdateSnapshotSchedulingMetadataParams) error { - _, err := q.db.Exec(ctx, updateSnapshotSchedulingMetadata, arg.Metadata, arg.SandboxID) - return err -} diff --git a/packages/orchestrator/orchestrator.proto b/packages/orchestrator/orchestrator.proto index 8d0ae95597..fd338b71de 100644 --- a/packages/orchestrator/orchestrator.proto +++ b/packages/orchestrator/orchestrator.proto @@ -126,18 +126,20 @@ message SandboxPauseRequest { string build_id = 3; } -message SnapshotSchedulingMetadata { +message SchedulingMetadata { string base_build_id = 1; uint64 generation = 2; - uint64 memfile_mapping_count = 3; - uint64 rootfs_mapping_count = 4; - repeated string chain_build_ids = 5; - repeated uint64 chain_memfile_bytes = 6; - repeated uint64 chain_rootfs_bytes = 7; + repeated string chain_build_ids = 3; + repeated uint64 memfile_logical_bytes = 4; + repeated uint32 memfile_chunk_counts = 5; + repeated uint32 memfile_mapping_counts = 6; + repeated uint64 rootfs_logical_bytes = 7; + repeated uint32 rootfs_chunk_counts = 8; + repeated uint32 rootfs_mapping_counts = 9; } message SandboxPauseResponse { - SnapshotSchedulingMetadata scheduling_metadata = 1; + SchedulingMetadata scheduling_metadata = 1; } message SandboxCheckpointRequest { @@ -146,7 +148,7 @@ message SandboxCheckpointRequest { } message SandboxCheckpointResponse { - SnapshotSchedulingMetadata scheduling_metadata = 1; + SchedulingMetadata scheduling_metadata = 1; } message RunningSandbox { @@ -164,6 +166,7 @@ message SandboxListResponse { message CachedBuildInfo { string build_id = 1; google.protobuf.Timestamp expiration_time = 2; + SchedulingMetadata scheduling_metadata = 3; } message SandboxListCachedBuildsResponse { diff --git a/packages/orchestrator/pkg/sandbox/sandbox.go b/packages/orchestrator/pkg/sandbox/sandbox.go index 1a7c1a6f54..85a702e186 100644 --- a/packages/orchestrator/pkg/sandbox/sandbox.go +++ b/packages/orchestrator/pkg/sandbox/sandbox.go @@ -1185,8 +1185,7 @@ func (s *Sandbox) Pause( } cleanup.AddNoContext(ctx, rootfsDiff.Close) - chainLimit := s.featureFlags.IntFlag(ctx, featureflags.SnapshotSchedulingMetadataChainLimit) - schedulingMetadata := NewSnapshotSchedulingMetadata(originalMemfile.Header(), originalRootfs.Header(), chainLimit) + schedulingMetadata := NewSnapshotSchedulingMetadata(originalMemfile.Header(), originalRootfs.Header()) metadataFileLink := template.NewLocalFileLink(cachePaths.CacheMetadata()) cleanup.AddNoContext(ctx, metadataFileLink.Close) diff --git a/packages/orchestrator/pkg/sandbox/snapshot.go b/packages/orchestrator/pkg/sandbox/snapshot.go index e2b620d7f3..a1d6553efa 100644 --- a/packages/orchestrator/pkg/sandbox/snapshot.go +++ b/packages/orchestrator/pkg/sandbox/snapshot.go @@ -3,15 +3,14 @@ package sandbox import ( - "cmp" "context" "fmt" - "slices" "github.com/google/uuid" "github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/build" "github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/template" + "github.com/e2b-dev/infra/packages/orchestrator/pkg/scheduling" "github.com/e2b-dev/infra/packages/shared/pkg/grpc/orchestrator" "github.com/e2b-dev/infra/packages/shared/pkg/storage/header" "github.com/e2b-dev/infra/packages/shared/pkg/utils" @@ -36,7 +35,7 @@ type Snapshot struct { Snapfile template.File Metafile template.File BuildID uuid.UUID - SchedulingMetadata *orchestrator.SnapshotSchedulingMetadata + SchedulingMetadata *orchestrator.SchedulingMetadata // Template block sizes captured sync at Pause time. They equal // MemfileDiffHeader.Metadata.BlockSize once that header resolves, but @@ -58,111 +57,6 @@ func (s *Snapshot) Close(ctx context.Context) error { return nil } -type schedulingBuildContribution struct { - buildID uuid.UUID - memfileBytes uint64 - rootfsBytes uint64 -} - -func NewSnapshotSchedulingMetadata(memfileHeader, rootfsHeader *header.Header, limit int) *orchestrator.SnapshotSchedulingMetadata { - if memfileHeader == nil || memfileHeader.Metadata == nil || rootfsHeader == nil || rootfsHeader.Metadata == nil { - return nil - } - if limit < 0 { - limit = 0 - } - if limit > 128 { - limit = 128 - } - - contributions := make(map[uuid.UUID]*schedulingBuildContribution) - add := func(buildID uuid.UUID, memfileBytes, rootfsBytes uint64) { - if buildID == uuid.Nil { - return - } - c, ok := contributions[buildID] - if !ok { - c = &schedulingBuildContribution{buildID: buildID} - contributions[buildID] = c - } - c.memfileBytes += memfileBytes - c.rootfsBytes += rootfsBytes - } - - for _, m := range memfileHeader.Mapping.All() { - add(m.BuildId, m.Length, 0) - } - for _, m := range rootfsHeader.Mapping.All() { - add(m.BuildId, 0, m.Length) - } - - baseBuildID := memfileHeader.Metadata.BaseBuildId - if baseBuildID == uuid.Nil { - baseBuildID = rootfsHeader.Metadata.BaseBuildId - } - - chain := make([]schedulingBuildContribution, 0, len(contributions)) - for _, c := range contributions { - chain = append(chain, *c) - } - slices.SortFunc(chain, func(a, b schedulingBuildContribution) int { - aBytes := a.memfileBytes + a.rootfsBytes - bBytes := b.memfileBytes + b.rootfsBytes - if aBytes == bBytes { - return cmp.Compare(a.buildID.String(), b.buildID.String()) - } - - return cmp.Compare(bBytes, aBytes) - }) - parentBuildID := memfileHeader.Metadata.BuildId - if parentBuildID == uuid.Nil { - parentBuildID = rootfsHeader.Metadata.BuildId - } - for i, c := range chain { - if c.buildID == parentBuildID { - copy(chain[1:i+1], chain[:i]) - chain[0] = c - - break - } - } - if limit == 0 { - chain = nil - } else if len(chain) > limit { - chain = chain[:limit] - if baseBuildID != uuid.Nil && limit > 1 { - hasBase := false - for _, c := range chain { - if c.buildID == baseBuildID { - hasBase = true - - break - } - } - if !hasBase { - if c, ok := contributions[baseBuildID]; ok { - chain[len(chain)-1] = *c - } else { - chain[len(chain)-1] = schedulingBuildContribution{buildID: baseBuildID} - } - } - } - } - - res := &orchestrator.SnapshotSchedulingMetadata{ - BaseBuildId: baseBuildID.String(), - Generation: max(memfileHeader.Metadata.Generation, rootfsHeader.Metadata.Generation) + 1, - MemfileMappingCount: uint64(memfileHeader.Mapping.Len()), - RootfsMappingCount: uint64(rootfsHeader.Mapping.Len()), - ChainBuildIds: make([]string, 0, len(chain)), - ChainMemfileBytes: make([]uint64, 0, len(chain)), - ChainRootfsBytes: make([]uint64, 0, len(chain)), - } - for _, c := range chain { - res.ChainBuildIds = append(res.ChainBuildIds, c.buildID.String()) - res.ChainMemfileBytes = append(res.ChainMemfileBytes, c.memfileBytes) - res.ChainRootfsBytes = append(res.ChainRootfsBytes, c.rootfsBytes) - } - - return res +func NewSnapshotSchedulingMetadata(memfileHeader, rootfsHeader *header.Header) *orchestrator.SchedulingMetadata { + return scheduling.FromHeaders(memfileHeader, rootfsHeader) } diff --git a/packages/orchestrator/pkg/sandbox/template/storage_template.go b/packages/orchestrator/pkg/sandbox/template/storage_template.go index 99f90249b9..fd9ee9ec34 100644 --- a/packages/orchestrator/pkg/sandbox/template/storage_template.go +++ b/packages/orchestrator/pkg/sandbox/template/storage_template.go @@ -16,7 +16,9 @@ import ( "github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/block" blockmetrics "github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/block/metrics" "github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/build" + "github.com/e2b-dev/infra/packages/orchestrator/pkg/scheduling" "github.com/e2b-dev/infra/packages/orchestrator/pkg/template/metadata" + "github.com/e2b-dev/infra/packages/shared/pkg/grpc/orchestrator" "github.com/e2b-dev/infra/packages/shared/pkg/logger" "github.com/e2b-dev/infra/packages/shared/pkg/storage" "github.com/e2b-dev/infra/packages/shared/pkg/storage/header" @@ -270,6 +272,16 @@ func (t *storageTemplate) Files() storage.CachePaths { return t.paths } +func (t *storageTemplate) SchedulingMetadata() *orchestrator.SchedulingMetadata { + memfileHeader, memfileErr := t.memfileHeader.Result() + rootfsHeader, rootfsErr := t.rootfsHeader.Result() + if memfileErr != nil || rootfsErr != nil { + return nil + } + + return scheduling.FromHeaders(memfileHeader, rootfsHeader) +} + func (t *storageTemplate) Memfile(ctx context.Context) (block.ReadonlyDevice, error) { _, span := tracer.Start(ctx, "storage-template-memfile") defer span.End() diff --git a/packages/orchestrator/pkg/scheduling/metadata.go b/packages/orchestrator/pkg/scheduling/metadata.go new file mode 100644 index 0000000000..2368b0937c --- /dev/null +++ b/packages/orchestrator/pkg/scheduling/metadata.go @@ -0,0 +1,116 @@ +package scheduling + +import ( + "cmp" + "slices" + + "github.com/google/uuid" + + "github.com/e2b-dev/infra/packages/shared/pkg/grpc/orchestrator" + "github.com/e2b-dev/infra/packages/shared/pkg/storage/header" +) + +const ( + chainLimit = 32 + chunkSize = 2 << 20 +) + +type buildContribution struct { + buildID uuid.UUID + memfileBytes uint64 + memfileChunks map[uint64]struct{} + memfileMappingCount uint32 + rootfsBytes uint64 + rootfsChunks map[uint64]struct{} + rootfsMappingCount uint32 +} + +func FromHeaders(memfileHeader, rootfsHeader *header.Header) *orchestrator.SchedulingMetadata { + if memfileHeader == nil || memfileHeader.Metadata == nil || rootfsHeader == nil || rootfsHeader.Metadata == nil { + return nil + } + + contributions := make(map[uuid.UUID]*buildContribution) + add := func(buildID uuid.UUID, storageOffset, length uint64, isMemfile bool) { + if buildID == uuid.Nil || length == 0 { + return + } + c, ok := contributions[buildID] + if !ok { + c = &buildContribution{ + buildID: buildID, + memfileChunks: make(map[uint64]struct{}), + rootfsChunks: make(map[uint64]struct{}), + } + contributions[buildID] = c + } + + startChunk := storageOffset / chunkSize + endChunk := (storageOffset + length - 1) / chunkSize + if isMemfile { + c.memfileBytes += length + c.memfileMappingCount++ + for i := startChunk; i <= endChunk; i++ { + c.memfileChunks[i] = struct{}{} + } + } else { + c.rootfsBytes += length + c.rootfsMappingCount++ + for i := startChunk; i <= endChunk; i++ { + c.rootfsChunks[i] = struct{}{} + } + } + } + + for _, m := range memfileHeader.Mapping.All() { + add(m.BuildId, m.BuildStorageOffset, m.Length, true) + } + for _, m := range rootfsHeader.Mapping.All() { + add(m.BuildId, m.BuildStorageOffset, m.Length, false) + } + + baseBuildID := memfileHeader.Metadata.BaseBuildId + if baseBuildID == uuid.Nil { + baseBuildID = rootfsHeader.Metadata.BaseBuildId + } + + chain := make([]buildContribution, 0, len(contributions)) + for _, c := range contributions { + chain = append(chain, *c) + } + slices.SortFunc(chain, func(a, b buildContribution) int { + aBytes := a.memfileBytes + a.rootfsBytes + bBytes := b.memfileBytes + b.rootfsBytes + if aBytes == bBytes { + return cmp.Compare(a.buildID.String(), b.buildID.String()) + } + + return cmp.Compare(bBytes, aBytes) + }) + if len(chain) > chainLimit { + chain = chain[:chainLimit] + } + + res := &orchestrator.SchedulingMetadata{ + BaseBuildId: baseBuildID.String(), + Generation: max(memfileHeader.Metadata.Generation, rootfsHeader.Metadata.Generation) + 1, + ChainBuildIds: make([]string, 0, len(chain)), + MemfileLogicalBytes: make([]uint64, 0, len(chain)), + MemfileChunkCounts: make([]uint32, 0, len(chain)), + MemfileMappingCounts: make([]uint32, 0, len(chain)), + RootfsLogicalBytes: make([]uint64, 0, len(chain)), + RootfsChunkCounts: make([]uint32, 0, len(chain)), + RootfsMappingCounts: make([]uint32, 0, len(chain)), + } + for _, c := range chain { + res.ChainBuildIds = append(res.ChainBuildIds, c.buildID.String()) + res.MemfileLogicalBytes = append(res.MemfileLogicalBytes, c.memfileBytes) + res.MemfileChunkCounts = append(res.MemfileChunkCounts, uint32(len(c.memfileChunks))) + res.MemfileMappingCounts = append(res.MemfileMappingCounts, c.memfileMappingCount) + res.RootfsLogicalBytes = append(res.RootfsLogicalBytes, c.rootfsBytes) + res.RootfsChunkCounts = append(res.RootfsChunkCounts, uint32(len(c.rootfsChunks))) + res.RootfsMappingCounts = append(res.RootfsMappingCounts, c.rootfsMappingCount) + } + + return res +} diff --git a/packages/orchestrator/pkg/server/sandboxes.go b/packages/orchestrator/pkg/server/sandboxes.go index b7557d4217..e9ec95ea5f 100644 --- a/packages/orchestrator/pkg/server/sandboxes.go +++ b/packages/orchestrator/pkg/server/sandboxes.go @@ -783,7 +783,7 @@ func (s *Server) getSandboxExecutionData(sbx *sandbox.Sandbox) map[string]any { // callers need to start the background remote storage upload. type snapshotResult struct { meta metadata.Template - schedulingMetadata *orchestrator.SnapshotSchedulingMetadata + schedulingMetadata *orchestrator.SchedulingMetadata upload *sandbox.Upload completeUpload func(ctx context.Context, uploadErr error) } diff --git a/packages/orchestrator/pkg/server/template_cache.go b/packages/orchestrator/pkg/server/template_cache.go index 8be9aa7da7..25512a58f1 100644 --- a/packages/orchestrator/pkg/server/template_cache.go +++ b/packages/orchestrator/pkg/server/template_cache.go @@ -18,9 +18,16 @@ func (s *Server) ListCachedBuilds(ctx context.Context, _ *emptypb.Empty) (*orche var builds []*orchestrator.CachedBuildInfo for key, item := range s.templateCache.Items() { + var metadata *orchestrator.SchedulingMetadata + if provider, ok := item.Value().(interface { + SchedulingMetadata() *orchestrator.SchedulingMetadata + }); ok { + metadata = provider.SchedulingMetadata() + } builds = append(builds, &orchestrator.CachedBuildInfo{ - BuildId: key, - ExpirationTime: timestamppb.New(item.ExpiresAt()), + BuildId: key, + ExpirationTime: timestamppb.New(item.ExpiresAt()), + SchedulingMetadata: metadata, }) } diff --git a/packages/orchestrator/pkg/template/build/builder.go b/packages/orchestrator/pkg/template/build/builder.go index 5d9900d472..517e05fd05 100644 --- a/packages/orchestrator/pkg/template/build/builder.go +++ b/packages/orchestrator/pkg/template/build/builder.go @@ -37,6 +37,8 @@ import ( artifactsregistry "github.com/e2b-dev/infra/packages/shared/pkg/artifacts-registry" "github.com/e2b-dev/infra/packages/shared/pkg/dockerhub" "github.com/e2b-dev/infra/packages/shared/pkg/featureflags" + orchestratorgrpc "github.com/e2b-dev/infra/packages/shared/pkg/grpc/orchestrator" + templatemanager "github.com/e2b-dev/infra/packages/shared/pkg/grpc/template-manager" "github.com/e2b-dev/infra/packages/shared/pkg/logger" "github.com/e2b-dev/infra/packages/shared/pkg/storage" "github.com/e2b-dev/infra/packages/shared/pkg/storage/header" @@ -103,6 +105,7 @@ type Result struct { KernelVersion string FirecrackerVersion string RootfsSizeMB int64 + SchedulingMetadata *templatemanager.TemplateSchedulingMetadata } // Build builds the template, uploads it to storage and returns the result metadata. @@ -387,9 +390,43 @@ func runBuild( KernelVersion: bc.Config.KernelVersion, FirecrackerVersion: bc.Config.FirecrackerVersion, RootfsSizeMB: units.BytesToMB(int64(rootfsSize)), + SchedulingMetadata: templateSchedulingMetadata(builder.templateCache, lastLayerResult.Metadata.Template.BuildID), }, nil } +func templateSchedulingMetadata(cache *sbxtemplate.Cache, buildID string) *templatemanager.TemplateSchedulingMetadata { + t, ok := cache.GetCachedTemplate(buildID) + if !ok { + return nil + } + provider, ok := t.(interface { + SchedulingMetadata() *orchestratorgrpc.SchedulingMetadata + }) + if !ok { + return nil + } + + return toTemplateSchedulingMetadata(provider.SchedulingMetadata()) +} + +func toTemplateSchedulingMetadata(m *orchestratorgrpc.SchedulingMetadata) *templatemanager.TemplateSchedulingMetadata { + if m == nil { + return nil + } + + return &templatemanager.TemplateSchedulingMetadata{ + BaseBuildID: m.BaseBuildId, + Generation: m.Generation, + ChainBuildIDs: m.ChainBuildIds, + MemfileLogicalBytes: m.MemfileLogicalBytes, + MemfileChunkCounts: m.MemfileChunkCounts, + MemfileMappingCounts: m.MemfileMappingCounts, + RootfsLogicalBytes: m.RootfsLogicalBytes, + RootfsChunkCounts: m.RootfsChunkCounts, + RootfsMappingCounts: m.RootfsMappingCounts, + } +} + // forceSteps sets force for all steps after the first encounter. func forceSteps(template config.TemplateConfig) config.TemplateConfig { shouldRebuild := template.Force != nil && *template.Force diff --git a/packages/orchestrator/pkg/template/server/create_template.go b/packages/orchestrator/pkg/template/server/create_template.go index cf0547a580..7aeb1aeb90 100644 --- a/packages/orchestrator/pkg/template/server/create_template.go +++ b/packages/orchestrator/pkg/template/server/create_template.go @@ -181,6 +181,7 @@ func (s *ServerStore) TemplateCreate(ctx context.Context, templateRequest *templ EnvdVersionKey: res.EnvdVersion, KernelVersion: res.KernelVersion, FirecrackerVersion: res.FirecrackerVersion, + SchedulingMetadata: res.SchedulingMetadata, }) telemetry.ReportEvent(ctx, "Environment built") } diff --git a/packages/orchestrator/template-manager.proto b/packages/orchestrator/template-manager.proto index 1e70950637..1131492ded 100644 --- a/packages/orchestrator/template-manager.proto +++ b/packages/orchestrator/template-manager.proto @@ -132,6 +132,19 @@ message TemplateBuildMetadata { // The API persists these into the env_builds row once the build finishes. string kernelVersion = 3; string firecrackerVersion = 4; + TemplateSchedulingMetadata schedulingMetadata = 5; +} + +message TemplateSchedulingMetadata { + string baseBuildID = 1; + uint64 generation = 2; + repeated string chainBuildIDs = 3; + repeated uint64 memfileLogicalBytes = 4; + repeated uint32 memfileChunkCounts = 5; + repeated uint32 memfileMappingCounts = 6; + repeated uint64 rootfsLogicalBytes = 7; + repeated uint32 rootfsChunkCounts = 8; + repeated uint32 rootfsMappingCounts = 9; } enum TemplateBuildState { diff --git a/packages/shared/pkg/featureflags/flags.go b/packages/shared/pkg/featureflags/flags.go index 58324b28ee..28b6f8e370 100644 --- a/packages/shared/pkg/featureflags/flags.go +++ b/packages/shared/pkg/featureflags/flags.go @@ -265,8 +265,7 @@ var ( MaxConcurrentSandboxListQueries = NewIntFlag("max-concurrent-sandbox-list-queries", 0) // MaxConcurrentSnapshotBuildQueries limits concurrent GetSnapshotBuilds calls (e.g. sandbox delete). // 0 or negative disables throttling (unlimited concurrency). - MaxConcurrentSnapshotBuildQueries = NewIntFlag("max-concurrent-snapshot-build-queries", 0) - SnapshotSchedulingMetadataChainLimit = NewIntFlag("snapshot-scheduling-metadata-chain-limit", 32) + MaxConcurrentSnapshotBuildQueries = NewIntFlag("max-concurrent-snapshot-build-queries", 0) MinChunkerReadSizeKB = NewIntFlag("min-chunker-read-size-kb", 16) ) diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go index c61ce1b979..1f06837971 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v5.29.3 +// protoc v5.26.1 // source: orchestrator.proto package orchestrator @@ -1002,22 +1002,24 @@ func (x *SandboxPauseRequest) GetBuildId() string { return "" } -type SnapshotSchedulingMetadata struct { +type SchedulingMetadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - BaseBuildId string `protobuf:"bytes,1,opt,name=base_build_id,json=baseBuildId,proto3" json:"base_build_id,omitempty"` - Generation uint64 `protobuf:"varint,2,opt,name=generation,proto3" json:"generation,omitempty"` - MemfileMappingCount uint64 `protobuf:"varint,3,opt,name=memfile_mapping_count,json=memfileMappingCount,proto3" json:"memfile_mapping_count,omitempty"` - RootfsMappingCount uint64 `protobuf:"varint,4,opt,name=rootfs_mapping_count,json=rootfsMappingCount,proto3" json:"rootfs_mapping_count,omitempty"` - ChainBuildIds []string `protobuf:"bytes,5,rep,name=chain_build_ids,json=chainBuildIds,proto3" json:"chain_build_ids,omitempty"` - ChainMemfileBytes []uint64 `protobuf:"varint,6,rep,packed,name=chain_memfile_bytes,json=chainMemfileBytes,proto3" json:"chain_memfile_bytes,omitempty"` - ChainRootfsBytes []uint64 `protobuf:"varint,7,rep,packed,name=chain_rootfs_bytes,json=chainRootfsBytes,proto3" json:"chain_rootfs_bytes,omitempty"` + BaseBuildId string `protobuf:"bytes,1,opt,name=base_build_id,json=baseBuildId,proto3" json:"base_build_id,omitempty"` + Generation uint64 `protobuf:"varint,2,opt,name=generation,proto3" json:"generation,omitempty"` + ChainBuildIds []string `protobuf:"bytes,3,rep,name=chain_build_ids,json=chainBuildIds,proto3" json:"chain_build_ids,omitempty"` + MemfileLogicalBytes []uint64 `protobuf:"varint,4,rep,packed,name=memfile_logical_bytes,json=memfileLogicalBytes,proto3" json:"memfile_logical_bytes,omitempty"` + MemfileChunkCounts []uint32 `protobuf:"varint,5,rep,packed,name=memfile_chunk_counts,json=memfileChunkCounts,proto3" json:"memfile_chunk_counts,omitempty"` + MemfileMappingCounts []uint32 `protobuf:"varint,6,rep,packed,name=memfile_mapping_counts,json=memfileMappingCounts,proto3" json:"memfile_mapping_counts,omitempty"` + RootfsLogicalBytes []uint64 `protobuf:"varint,7,rep,packed,name=rootfs_logical_bytes,json=rootfsLogicalBytes,proto3" json:"rootfs_logical_bytes,omitempty"` + RootfsChunkCounts []uint32 `protobuf:"varint,8,rep,packed,name=rootfs_chunk_counts,json=rootfsChunkCounts,proto3" json:"rootfs_chunk_counts,omitempty"` + RootfsMappingCounts []uint32 `protobuf:"varint,9,rep,packed,name=rootfs_mapping_counts,json=rootfsMappingCounts,proto3" json:"rootfs_mapping_counts,omitempty"` } -func (x *SnapshotSchedulingMetadata) Reset() { - *x = SnapshotSchedulingMetadata{} +func (x *SchedulingMetadata) Reset() { + *x = SchedulingMetadata{} if protoimpl.UnsafeEnabled { mi := &file_orchestrator_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1025,13 +1027,13 @@ func (x *SnapshotSchedulingMetadata) Reset() { } } -func (x *SnapshotSchedulingMetadata) String() string { +func (x *SchedulingMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SnapshotSchedulingMetadata) ProtoMessage() {} +func (*SchedulingMetadata) ProtoMessage() {} -func (x *SnapshotSchedulingMetadata) ProtoReflect() protoreflect.Message { +func (x *SchedulingMetadata) ProtoReflect() protoreflect.Message { mi := &file_orchestrator_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1043,56 +1045,70 @@ func (x *SnapshotSchedulingMetadata) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SnapshotSchedulingMetadata.ProtoReflect.Descriptor instead. -func (*SnapshotSchedulingMetadata) Descriptor() ([]byte, []int) { +// Deprecated: Use SchedulingMetadata.ProtoReflect.Descriptor instead. +func (*SchedulingMetadata) Descriptor() ([]byte, []int) { return file_orchestrator_proto_rawDescGZIP(), []int{14} } -func (x *SnapshotSchedulingMetadata) GetBaseBuildId() string { +func (x *SchedulingMetadata) GetBaseBuildId() string { if x != nil { return x.BaseBuildId } return "" } -func (x *SnapshotSchedulingMetadata) GetGeneration() uint64 { +func (x *SchedulingMetadata) GetGeneration() uint64 { if x != nil { return x.Generation } return 0 } -func (x *SnapshotSchedulingMetadata) GetMemfileMappingCount() uint64 { +func (x *SchedulingMetadata) GetChainBuildIds() []string { if x != nil { - return x.MemfileMappingCount + return x.ChainBuildIds } - return 0 + return nil } -func (x *SnapshotSchedulingMetadata) GetRootfsMappingCount() uint64 { +func (x *SchedulingMetadata) GetMemfileLogicalBytes() []uint64 { if x != nil { - return x.RootfsMappingCount + return x.MemfileLogicalBytes } - return 0 + return nil } -func (x *SnapshotSchedulingMetadata) GetChainBuildIds() []string { +func (x *SchedulingMetadata) GetMemfileChunkCounts() []uint32 { if x != nil { - return x.ChainBuildIds + return x.MemfileChunkCounts + } + return nil +} + +func (x *SchedulingMetadata) GetMemfileMappingCounts() []uint32 { + if x != nil { + return x.MemfileMappingCounts + } + return nil +} + +func (x *SchedulingMetadata) GetRootfsLogicalBytes() []uint64 { + if x != nil { + return x.RootfsLogicalBytes } return nil } -func (x *SnapshotSchedulingMetadata) GetChainMemfileBytes() []uint64 { +func (x *SchedulingMetadata) GetRootfsChunkCounts() []uint32 { if x != nil { - return x.ChainMemfileBytes + return x.RootfsChunkCounts } return nil } -func (x *SnapshotSchedulingMetadata) GetChainRootfsBytes() []uint64 { +func (x *SchedulingMetadata) GetRootfsMappingCounts() []uint32 { if x != nil { - return x.ChainRootfsBytes + return x.RootfsMappingCounts } return nil } @@ -1102,7 +1118,7 @@ type SandboxPauseResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SchedulingMetadata *SnapshotSchedulingMetadata `protobuf:"bytes,1,opt,name=scheduling_metadata,json=schedulingMetadata,proto3" json:"scheduling_metadata,omitempty"` + SchedulingMetadata *SchedulingMetadata `protobuf:"bytes,1,opt,name=scheduling_metadata,json=schedulingMetadata,proto3" json:"scheduling_metadata,omitempty"` } func (x *SandboxPauseResponse) Reset() { @@ -1137,7 +1153,7 @@ func (*SandboxPauseResponse) Descriptor() ([]byte, []int) { return file_orchestrator_proto_rawDescGZIP(), []int{15} } -func (x *SandboxPauseResponse) GetSchedulingMetadata() *SnapshotSchedulingMetadata { +func (x *SandboxPauseResponse) GetSchedulingMetadata() *SchedulingMetadata { if x != nil { return x.SchedulingMetadata } @@ -1204,7 +1220,7 @@ type SandboxCheckpointResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SchedulingMetadata *SnapshotSchedulingMetadata `protobuf:"bytes,1,opt,name=scheduling_metadata,json=schedulingMetadata,proto3" json:"scheduling_metadata,omitempty"` + SchedulingMetadata *SchedulingMetadata `protobuf:"bytes,1,opt,name=scheduling_metadata,json=schedulingMetadata,proto3" json:"scheduling_metadata,omitempty"` } func (x *SandboxCheckpointResponse) Reset() { @@ -1239,7 +1255,7 @@ func (*SandboxCheckpointResponse) Descriptor() ([]byte, []int) { return file_orchestrator_proto_rawDescGZIP(), []int{17} } -func (x *SandboxCheckpointResponse) GetSchedulingMetadata() *SnapshotSchedulingMetadata { +func (x *SandboxCheckpointResponse) GetSchedulingMetadata() *SchedulingMetadata { if x != nil { return x.SchedulingMetadata } @@ -1369,8 +1385,9 @@ type CachedBuildInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` - ExpirationTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expiration_time,json=expirationTime,proto3" json:"expiration_time,omitempty"` + BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` + ExpirationTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expiration_time,json=expirationTime,proto3" json:"expiration_time,omitempty"` + SchedulingMetadata *SchedulingMetadata `protobuf:"bytes,3,opt,name=scheduling_metadata,json=schedulingMetadata,proto3" json:"scheduling_metadata,omitempty"` } func (x *CachedBuildInfo) Reset() { @@ -1419,6 +1436,13 @@ func (x *CachedBuildInfo) GetExpirationTime() *timestamppb.Timestamp { return nil } +func (x *CachedBuildInfo) GetSchedulingMetadata() *SchedulingMetadata { + if x != nil { + return x.SchedulingMetadata + } + return nil +} + type SandboxListCachedBuildsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1661,107 +1685,116 @@ var file_orchestrator_proto_rawDesc = []byte{ 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0xcc, 0x02, 0x0a, 0x1a, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, - 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, - 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x65, - 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x13, 0x6d, 0x65, 0x6d, 0x66, 0x69, - 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, - 0x0a, 0x14, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x72, 0x6f, - 0x6f, 0x74, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x5f, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x04, 0x52, 0x11, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x65, 0x6d, 0x66, - 0x69, 0x6c, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, - 0x20, 0x03, 0x28, 0x04, 0x52, 0x10, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x6f, 0x6f, 0x74, 0x66, - 0x73, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x64, 0x0a, 0x14, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, - 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x54, 0x0a, 0x18, - 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, - 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x49, 0x64, 0x22, 0x69, 0x0a, 0x19, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4c, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0xb2, 0x03, 0x0a, 0x12, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x22, + 0x0a, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x65, + 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x13, 0x6d, 0x65, 0x6d, 0x66, 0x69, + 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, + 0x0a, 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x12, 0x6d, 0x65, + 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x12, 0x34, 0x0a, 0x16, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, + 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, + 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x04, 0x52, 0x12, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4c, 0x6f, 0x67, 0x69, + 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x6f, 0x6f, 0x74, + 0x66, 0x73, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x43, 0x68, 0x75, + 0x6e, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74, + 0x66, 0x73, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0x5c, 0x0a, 0x14, + 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, + 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, + 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x54, 0x0a, 0x18, 0x53, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, + 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, + 0x22, 0x61, 0x0a, 0x19, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, + 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x22, 0xc7, 0x01, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x26, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, + 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 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, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x44, 0x0a, + 0x13, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, + 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x65, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x0f, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x49, 0x64, 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 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, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc7, 0x01, - 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, - 0x12, 0x26, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 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, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x52, 0x07, - 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x44, 0x0a, 0x13, 0x53, 0x61, 0x6e, 0x64, 0x62, - 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, - 0x0a, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, - 0x6f, 0x78, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x22, 0x71, 0x0a, - 0x0f, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x0f, 0x65, - 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, - 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, - 0x22, 0x4b, 0x0a, 0x1f, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x32, 0xba, 0x03, - 0x0a, 0x0e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x37, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x34, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x12, 0x34, 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x14, 0x2e, 0x53, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1a, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x10, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, - 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2f, 0x5a, 0x2d, 0x68, 0x74, - 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x65, 0x32, 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x6f, - 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4b, 0x0a, + 0x1f, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x28, 0x0a, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x32, 0xba, 0x03, 0x0a, 0x0e, 0x53, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, + 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x34, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, + 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, + 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, + 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, + 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x10, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2f, 0x5a, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x73, + 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x32, + 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x6f, 0x72, 0x63, 0x68, + 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1792,7 +1825,7 @@ var file_orchestrator_proto_goTypes = []interface{}{ (*SandboxUpdateRequest)(nil), // 11: SandboxUpdateRequest (*SandboxDeleteRequest)(nil), // 12: SandboxDeleteRequest (*SandboxPauseRequest)(nil), // 13: SandboxPauseRequest - (*SnapshotSchedulingMetadata)(nil), // 14: SnapshotSchedulingMetadata + (*SchedulingMetadata)(nil), // 14: SchedulingMetadata (*SandboxPauseResponse)(nil), // 15: SandboxPauseResponse (*SandboxCheckpointRequest)(nil), // 16: SandboxCheckpointRequest (*SandboxCheckpointResponse)(nil), // 17: SandboxCheckpointResponse @@ -1824,34 +1857,35 @@ var file_orchestrator_proto_depIdxs = []int32{ 26, // 13: SandboxCreateRequest.end_time:type_name -> google.protobuf.Timestamp 26, // 14: SandboxUpdateRequest.end_time:type_name -> google.protobuf.Timestamp 7, // 15: SandboxUpdateRequest.egress:type_name -> SandboxNetworkEgressConfig - 14, // 16: SandboxPauseResponse.scheduling_metadata:type_name -> SnapshotSchedulingMetadata - 14, // 17: SandboxCheckpointResponse.scheduling_metadata:type_name -> SnapshotSchedulingMetadata + 14, // 16: SandboxPauseResponse.scheduling_metadata:type_name -> SchedulingMetadata + 14, // 17: SandboxCheckpointResponse.scheduling_metadata:type_name -> SchedulingMetadata 0, // 18: RunningSandbox.config:type_name -> SandboxConfig 26, // 19: RunningSandbox.start_time:type_name -> google.protobuf.Timestamp 26, // 20: RunningSandbox.end_time:type_name -> google.protobuf.Timestamp 18, // 21: SandboxListResponse.sandboxes:type_name -> RunningSandbox 26, // 22: CachedBuildInfo.expiration_time:type_name -> google.protobuf.Timestamp - 20, // 23: SandboxListCachedBuildsResponse.builds:type_name -> CachedBuildInfo - 6, // 24: SandboxNetworkEgressConfig.RulesEntry.value:type_name -> SandboxNetworkDomainRules - 9, // 25: SandboxService.Create:input_type -> SandboxCreateRequest - 11, // 26: SandboxService.Update:input_type -> SandboxUpdateRequest - 27, // 27: SandboxService.List:input_type -> google.protobuf.Empty - 12, // 28: SandboxService.Delete:input_type -> SandboxDeleteRequest - 13, // 29: SandboxService.Pause:input_type -> SandboxPauseRequest - 16, // 30: SandboxService.Checkpoint:input_type -> SandboxCheckpointRequest - 27, // 31: SandboxService.ListCachedBuilds:input_type -> google.protobuf.Empty - 10, // 32: SandboxService.Create:output_type -> SandboxCreateResponse - 27, // 33: SandboxService.Update:output_type -> google.protobuf.Empty - 19, // 34: SandboxService.List:output_type -> SandboxListResponse - 27, // 35: SandboxService.Delete:output_type -> google.protobuf.Empty - 15, // 36: SandboxService.Pause:output_type -> SandboxPauseResponse - 17, // 37: SandboxService.Checkpoint:output_type -> SandboxCheckpointResponse - 21, // 38: SandboxService.ListCachedBuilds:output_type -> SandboxListCachedBuildsResponse - 32, // [32:39] is the sub-list for method output_type - 25, // [25:32] is the sub-list for method input_type - 25, // [25:25] is the sub-list for extension type_name - 25, // [25:25] is the sub-list for extension extendee - 0, // [0:25] is the sub-list for field type_name + 14, // 23: CachedBuildInfo.scheduling_metadata:type_name -> SchedulingMetadata + 20, // 24: SandboxListCachedBuildsResponse.builds:type_name -> CachedBuildInfo + 6, // 25: SandboxNetworkEgressConfig.RulesEntry.value:type_name -> SandboxNetworkDomainRules + 9, // 26: SandboxService.Create:input_type -> SandboxCreateRequest + 11, // 27: SandboxService.Update:input_type -> SandboxUpdateRequest + 27, // 28: SandboxService.List:input_type -> google.protobuf.Empty + 12, // 29: SandboxService.Delete:input_type -> SandboxDeleteRequest + 13, // 30: SandboxService.Pause:input_type -> SandboxPauseRequest + 16, // 31: SandboxService.Checkpoint:input_type -> SandboxCheckpointRequest + 27, // 32: SandboxService.ListCachedBuilds:input_type -> google.protobuf.Empty + 10, // 33: SandboxService.Create:output_type -> SandboxCreateResponse + 27, // 34: SandboxService.Update:output_type -> google.protobuf.Empty + 19, // 35: SandboxService.List:output_type -> SandboxListResponse + 27, // 36: SandboxService.Delete:output_type -> google.protobuf.Empty + 15, // 37: SandboxService.Pause:output_type -> SandboxPauseResponse + 17, // 38: SandboxService.Checkpoint:output_type -> SandboxCheckpointResponse + 21, // 39: SandboxService.ListCachedBuilds:output_type -> SandboxListCachedBuildsResponse + 33, // [33:40] is the sub-list for method output_type + 26, // [26:33] is the sub-list for method input_type + 26, // [26:26] is the sub-list for extension type_name + 26, // [26:26] is the sub-list for extension extendee + 0, // [0:26] is the sub-list for field type_name } func init() { file_orchestrator_proto_init() } @@ -2029,7 +2063,7 @@ func file_orchestrator_proto_init() { } } file_orchestrator_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SnapshotSchedulingMetadata); i { + switch v := v.(*SchedulingMetadata); i { case 0: return &v.state case 1: diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go index 61d933d3d1..f48f4ccd5b 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 -// - protoc v5.29.3 +// - protoc v5.26.1 // source: orchestrator.proto package orchestrator diff --git a/packages/shared/pkg/grpc/template-manager/template-manager.pb.go b/packages/shared/pkg/grpc/template-manager/template-manager.pb.go index 131823fd24..d65f60d28d 100644 --- a/packages/shared/pkg/grpc/template-manager/template-manager.pb.go +++ b/packages/shared/pkg/grpc/template-manager/template-manager.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v5.29.3 +// protoc v5.26.1 // source: template-manager.proto package template_manager @@ -588,6 +588,7 @@ type FromImageRegistry struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Type: + // // *FromImageRegistry_Aws // *FromImageRegistry_Gcp // *FromImageRegistry_General @@ -701,6 +702,7 @@ type TemplateConfig struct { Force *bool `protobuf:"varint,12,opt,name=force,proto3,oneof" json:"force,omitempty"` Steps []*TemplateStep `protobuf:"bytes,13,rep,name=steps,proto3" json:"steps,omitempty"` // Types that are assignable to Source: + // // *TemplateConfig_FromImage // *TemplateConfig_FromTemplate Source isTemplateConfig_Source `protobuf_oneof:"source"` @@ -1109,8 +1111,9 @@ type TemplateBuildMetadata struct { EnvdVersionKey string `protobuf:"bytes,2,opt,name=envdVersionKey,proto3" json:"envdVersionKey,omitempty"` // Versions actually used by the template-manager to build the template. // The API persists these into the env_builds row once the build finishes. - KernelVersion string `protobuf:"bytes,3,opt,name=kernelVersion,proto3" json:"kernelVersion,omitempty"` - FirecrackerVersion string `protobuf:"bytes,4,opt,name=firecrackerVersion,proto3" json:"firecrackerVersion,omitempty"` + KernelVersion string `protobuf:"bytes,3,opt,name=kernelVersion,proto3" json:"kernelVersion,omitempty"` + FirecrackerVersion string `protobuf:"bytes,4,opt,name=firecrackerVersion,proto3" json:"firecrackerVersion,omitempty"` + SchedulingMetadata *TemplateSchedulingMetadata `protobuf:"bytes,5,opt,name=schedulingMetadata,proto3" json:"schedulingMetadata,omitempty"` } func (x *TemplateBuildMetadata) Reset() { @@ -1173,6 +1176,124 @@ func (x *TemplateBuildMetadata) GetFirecrackerVersion() string { return "" } +func (x *TemplateBuildMetadata) GetSchedulingMetadata() *TemplateSchedulingMetadata { + if x != nil { + return x.SchedulingMetadata + } + return nil +} + +type TemplateSchedulingMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BaseBuildID string `protobuf:"bytes,1,opt,name=baseBuildID,proto3" json:"baseBuildID,omitempty"` + Generation uint64 `protobuf:"varint,2,opt,name=generation,proto3" json:"generation,omitempty"` + ChainBuildIDs []string `protobuf:"bytes,3,rep,name=chainBuildIDs,proto3" json:"chainBuildIDs,omitempty"` + MemfileLogicalBytes []uint64 `protobuf:"varint,4,rep,packed,name=memfileLogicalBytes,proto3" json:"memfileLogicalBytes,omitempty"` + MemfileChunkCounts []uint32 `protobuf:"varint,5,rep,packed,name=memfileChunkCounts,proto3" json:"memfileChunkCounts,omitempty"` + MemfileMappingCounts []uint32 `protobuf:"varint,6,rep,packed,name=memfileMappingCounts,proto3" json:"memfileMappingCounts,omitempty"` + RootfsLogicalBytes []uint64 `protobuf:"varint,7,rep,packed,name=rootfsLogicalBytes,proto3" json:"rootfsLogicalBytes,omitempty"` + RootfsChunkCounts []uint32 `protobuf:"varint,8,rep,packed,name=rootfsChunkCounts,proto3" json:"rootfsChunkCounts,omitempty"` + RootfsMappingCounts []uint32 `protobuf:"varint,9,rep,packed,name=rootfsMappingCounts,proto3" json:"rootfsMappingCounts,omitempty"` +} + +func (x *TemplateSchedulingMetadata) Reset() { + *x = TemplateSchedulingMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_template_manager_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TemplateSchedulingMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TemplateSchedulingMetadata) ProtoMessage() {} + +func (x *TemplateSchedulingMetadata) ProtoReflect() protoreflect.Message { + mi := &file_template_manager_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TemplateSchedulingMetadata.ProtoReflect.Descriptor instead. +func (*TemplateSchedulingMetadata) Descriptor() ([]byte, []int) { + return file_template_manager_proto_rawDescGZIP(), []int{13} +} + +func (x *TemplateSchedulingMetadata) GetBaseBuildID() string { + if x != nil { + return x.BaseBuildID + } + return "" +} + +func (x *TemplateSchedulingMetadata) GetGeneration() uint64 { + if x != nil { + return x.Generation + } + return 0 +} + +func (x *TemplateSchedulingMetadata) GetChainBuildIDs() []string { + if x != nil { + return x.ChainBuildIDs + } + return nil +} + +func (x *TemplateSchedulingMetadata) GetMemfileLogicalBytes() []uint64 { + if x != nil { + return x.MemfileLogicalBytes + } + return nil +} + +func (x *TemplateSchedulingMetadata) GetMemfileChunkCounts() []uint32 { + if x != nil { + return x.MemfileChunkCounts + } + return nil +} + +func (x *TemplateSchedulingMetadata) GetMemfileMappingCounts() []uint32 { + if x != nil { + return x.MemfileMappingCounts + } + return nil +} + +func (x *TemplateSchedulingMetadata) GetRootfsLogicalBytes() []uint64 { + if x != nil { + return x.RootfsLogicalBytes + } + return nil +} + +func (x *TemplateSchedulingMetadata) GetRootfsChunkCounts() []uint32 { + if x != nil { + return x.RootfsChunkCounts + } + return nil +} + +func (x *TemplateSchedulingMetadata) GetRootfsMappingCounts() []uint32 { + if x != nil { + return x.RootfsMappingCounts + } + return nil +} + type TemplateBuildLogEntry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1187,7 +1308,7 @@ type TemplateBuildLogEntry struct { func (x *TemplateBuildLogEntry) Reset() { *x = TemplateBuildLogEntry{} if protoimpl.UnsafeEnabled { - mi := &file_template_manager_proto_msgTypes[13] + mi := &file_template_manager_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1200,7 +1321,7 @@ func (x *TemplateBuildLogEntry) String() string { func (*TemplateBuildLogEntry) ProtoMessage() {} func (x *TemplateBuildLogEntry) ProtoReflect() protoreflect.Message { - mi := &file_template_manager_proto_msgTypes[13] + mi := &file_template_manager_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1213,7 +1334,7 @@ func (x *TemplateBuildLogEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateBuildLogEntry.ProtoReflect.Descriptor instead. func (*TemplateBuildLogEntry) Descriptor() ([]byte, []int) { - return file_template_manager_proto_rawDescGZIP(), []int{13} + return file_template_manager_proto_rawDescGZIP(), []int{14} } func (x *TemplateBuildLogEntry) GetTimestamp() *timestamppb.Timestamp { @@ -1256,7 +1377,7 @@ type TemplateBuildStatusReason struct { func (x *TemplateBuildStatusReason) Reset() { *x = TemplateBuildStatusReason{} if protoimpl.UnsafeEnabled { - mi := &file_template_manager_proto_msgTypes[14] + mi := &file_template_manager_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1269,7 +1390,7 @@ func (x *TemplateBuildStatusReason) String() string { func (*TemplateBuildStatusReason) ProtoMessage() {} func (x *TemplateBuildStatusReason) ProtoReflect() protoreflect.Message { - mi := &file_template_manager_proto_msgTypes[14] + mi := &file_template_manager_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1282,7 +1403,7 @@ func (x *TemplateBuildStatusReason) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateBuildStatusReason.ProtoReflect.Descriptor instead. func (*TemplateBuildStatusReason) Descriptor() ([]byte, []int) { - return file_template_manager_proto_rawDescGZIP(), []int{14} + return file_template_manager_proto_rawDescGZIP(), []int{15} } func (x *TemplateBuildStatusReason) GetMessage() string { @@ -1314,7 +1435,7 @@ type TemplateBuildStatusResponse struct { func (x *TemplateBuildStatusResponse) Reset() { *x = TemplateBuildStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_template_manager_proto_msgTypes[15] + mi := &file_template_manager_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1327,7 +1448,7 @@ func (x *TemplateBuildStatusResponse) String() string { func (*TemplateBuildStatusResponse) ProtoMessage() {} func (x *TemplateBuildStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_template_manager_proto_msgTypes[15] + mi := &file_template_manager_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1340,7 +1461,7 @@ func (x *TemplateBuildStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateBuildStatusResponse.ProtoReflect.Descriptor instead. func (*TemplateBuildStatusResponse) Descriptor() ([]byte, []int) { - return file_template_manager_proto_rawDescGZIP(), []int{15} + return file_template_manager_proto_rawDescGZIP(), []int{16} } func (x *TemplateBuildStatusResponse) GetStatus() TemplateBuildState { @@ -1514,7 +1635,7 @@ var file_template_manager_proto_rawDesc = []byte{ 0x18, 0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, 0x22, 0xbb, 0x01, 0x0a, 0x15, 0x54, 0x65, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, 0x22, 0x88, 0x02, 0x0a, 0x15, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x6f, 0x6f, 0x74, @@ -1526,79 +1647,111 @@ var file_template_manager_proto_rawDesc = []byte{ 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x12, 0x66, 0x69, 0x72, 0x65, 0x63, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x66, 0x69, 0x72, 0x65, 0x63, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x83, 0x02, 0x0a, 0x15, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, - 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x3a, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x57, 0x0a, - 0x19, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x73, 0x74, 0x65, 0x70, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, - 0x05, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x22, 0x86, 0x02, 0x0a, 0x1b, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x36, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x45, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x6f, 0x67, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, - 0x37, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x2a, - 0x34, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x44, - 0x65, 0x62, 0x75, 0x67, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x01, - 0x12, 0x08, 0x0a, 0x04, 0x57, 0x61, 0x72, 0x6e, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x10, 0x03, 0x2a, 0x2a, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x73, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, - 0x64, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x10, - 0x01, 0x2a, 0x3d, 0x0a, 0x12, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, - 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x10, 0x02, - 0x32, 0xbe, 0x02, 0x0a, 0x0f, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x22, 0xaa, 0x03, 0x0a, 0x1a, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x49, 0x44, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x6d, + 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x13, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, + 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x0a, + 0x12, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x12, 0x6d, 0x65, 0x6d, 0x66, 0x69, + 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x32, 0x0a, + 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x14, 0x6d, 0x65, 0x6d, + 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x63, + 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x04, 0x52, 0x12, 0x72, + 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x6f, + 0x6f, 0x74, 0x66, 0x73, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, + 0x30, 0x0a, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x72, 0x6f, + 0x6f, 0x74, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x22, 0x83, 0x02, 0x0a, 0x15, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4b, 0x0a, 0x13, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x13, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x50, 0x0a, 0x13, 0x49, 0x6e, 0x69, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, - 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1b, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x4c, 0x61, 0x79, - 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x46, - 0x69, 0x6c, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x33, 0x5a, 0x31, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x32, 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, - 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x1f, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, + 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x12, 0x3a, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x39, 0x0a, 0x0b, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x57, 0x0a, 0x19, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, + 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, + 0x73, 0x74, 0x65, 0x70, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x73, 0x74, 0x65, 0x70, + 0x22, 0x86, 0x02, 0x0a, 0x1b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, + 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x13, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x36, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6c, + 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x06, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x88, + 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x4a, 0x04, 0x08, + 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x2a, 0x34, 0x0a, 0x08, 0x4c, 0x6f, 0x67, + 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x65, 0x62, 0x75, 0x67, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x61, + 0x72, 0x6e, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x03, 0x2a, + 0x2a, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x10, 0x00, 0x12, 0x0c, 0x0a, + 0x08, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x10, 0x01, 0x2a, 0x3d, 0x0a, 0x12, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, + 0x0a, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x10, 0x02, 0x32, 0xbe, 0x02, 0x0a, 0x0f, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x40, + 0x0a, 0x0e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x12, 0x16, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x12, 0x4b, 0x0a, 0x13, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1c, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, + 0x13, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x75, 0x69, 0x6c, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x50, 0x0a, 0x13, 0x49, 0x6e, 0x69, + 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x12, 0x1b, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, + 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, + 0x49, 0x6e, 0x69, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x33, 0x5a, 0x31, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x65, 0x32, 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1614,7 +1767,7 @@ func file_template_manager_proto_rawDescGZIP() []byte { } var file_template_manager_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_template_manager_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_template_manager_proto_msgTypes = make([]protoimpl.MessageInfo, 18) var file_template_manager_proto_goTypes = []interface{}{ (LogLevel)(0), // 0: LogLevel (LogsDirection)(0), // 1: LogsDirection @@ -1632,12 +1785,13 @@ var file_template_manager_proto_goTypes = []interface{}{ (*TemplateStatusRequest)(nil), // 13: TemplateStatusRequest (*TemplateBuildDeleteRequest)(nil), // 14: TemplateBuildDeleteRequest (*TemplateBuildMetadata)(nil), // 15: TemplateBuildMetadata - (*TemplateBuildLogEntry)(nil), // 16: TemplateBuildLogEntry - (*TemplateBuildStatusReason)(nil), // 17: TemplateBuildStatusReason - (*TemplateBuildStatusResponse)(nil), // 18: TemplateBuildStatusResponse - nil, // 19: TemplateBuildLogEntry.FieldsEntry - (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 21: google.protobuf.Empty + (*TemplateSchedulingMetadata)(nil), // 16: TemplateSchedulingMetadata + (*TemplateBuildLogEntry)(nil), // 17: TemplateBuildLogEntry + (*TemplateBuildStatusReason)(nil), // 18: TemplateBuildStatusReason + (*TemplateBuildStatusResponse)(nil), // 19: TemplateBuildStatusResponse + nil, // 20: TemplateBuildLogEntry.FieldsEntry + (*timestamppb.Timestamp)(nil), // 21: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 22: google.protobuf.Empty } var file_template_manager_proto_depIdxs = []int32{ 7, // 0: FromImageRegistry.aws:type_name -> AWSRegistry @@ -1648,29 +1802,30 @@ var file_template_manager_proto_depIdxs = []int32{ 10, // 5: TemplateConfig.fromImageRegistry:type_name -> FromImageRegistry 11, // 6: TemplateCreateRequest.template:type_name -> TemplateConfig 0, // 7: TemplateStatusRequest.level:type_name -> LogLevel - 20, // 8: TemplateStatusRequest.start:type_name -> google.protobuf.Timestamp - 20, // 9: TemplateStatusRequest.end:type_name -> google.protobuf.Timestamp + 21, // 8: TemplateStatusRequest.start:type_name -> google.protobuf.Timestamp + 21, // 9: TemplateStatusRequest.end:type_name -> google.protobuf.Timestamp 1, // 10: TemplateStatusRequest.direction:type_name -> LogsDirection - 20, // 11: TemplateBuildLogEntry.timestamp:type_name -> google.protobuf.Timestamp - 0, // 12: TemplateBuildLogEntry.level:type_name -> LogLevel - 19, // 13: TemplateBuildLogEntry.fields:type_name -> TemplateBuildLogEntry.FieldsEntry - 2, // 14: TemplateBuildStatusResponse.status:type_name -> TemplateBuildState - 15, // 15: TemplateBuildStatusResponse.metadata:type_name -> TemplateBuildMetadata - 16, // 16: TemplateBuildStatusResponse.logEntries:type_name -> TemplateBuildLogEntry - 17, // 17: TemplateBuildStatusResponse.reason:type_name -> TemplateBuildStatusReason - 12, // 18: TemplateService.TemplateCreate:input_type -> TemplateCreateRequest - 13, // 19: TemplateService.TemplateBuildStatus:input_type -> TemplateStatusRequest - 14, // 20: TemplateService.TemplateBuildDelete:input_type -> TemplateBuildDeleteRequest - 3, // 21: TemplateService.InitLayerFileUpload:input_type -> InitLayerFileUploadRequest - 21, // 22: TemplateService.TemplateCreate:output_type -> google.protobuf.Empty - 18, // 23: TemplateService.TemplateBuildStatus:output_type -> TemplateBuildStatusResponse - 21, // 24: TemplateService.TemplateBuildDelete:output_type -> google.protobuf.Empty - 4, // 25: TemplateService.InitLayerFileUpload:output_type -> InitLayerFileUploadResponse - 22, // [22:26] is the sub-list for method output_type - 18, // [18:22] is the sub-list for method input_type - 18, // [18:18] is the sub-list for extension type_name - 18, // [18:18] is the sub-list for extension extendee - 0, // [0:18] is the sub-list for field type_name + 16, // 11: TemplateBuildMetadata.schedulingMetadata:type_name -> TemplateSchedulingMetadata + 21, // 12: TemplateBuildLogEntry.timestamp:type_name -> google.protobuf.Timestamp + 0, // 13: TemplateBuildLogEntry.level:type_name -> LogLevel + 20, // 14: TemplateBuildLogEntry.fields:type_name -> TemplateBuildLogEntry.FieldsEntry + 2, // 15: TemplateBuildStatusResponse.status:type_name -> TemplateBuildState + 15, // 16: TemplateBuildStatusResponse.metadata:type_name -> TemplateBuildMetadata + 17, // 17: TemplateBuildStatusResponse.logEntries:type_name -> TemplateBuildLogEntry + 18, // 18: TemplateBuildStatusResponse.reason:type_name -> TemplateBuildStatusReason + 12, // 19: TemplateService.TemplateCreate:input_type -> TemplateCreateRequest + 13, // 20: TemplateService.TemplateBuildStatus:input_type -> TemplateStatusRequest + 14, // 21: TemplateService.TemplateBuildDelete:input_type -> TemplateBuildDeleteRequest + 3, // 22: TemplateService.InitLayerFileUpload:input_type -> InitLayerFileUploadRequest + 22, // 23: TemplateService.TemplateCreate:output_type -> google.protobuf.Empty + 19, // 24: TemplateService.TemplateBuildStatus:output_type -> TemplateBuildStatusResponse + 22, // 25: TemplateService.TemplateBuildDelete:output_type -> google.protobuf.Empty + 4, // 26: TemplateService.InitLayerFileUpload:output_type -> InitLayerFileUploadResponse + 23, // [23:27] is the sub-list for method output_type + 19, // [19:23] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name } func init() { file_template_manager_proto_init() } @@ -1836,7 +1991,7 @@ func file_template_manager_proto_init() { } } file_template_manager_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TemplateBuildLogEntry); i { + switch v := v.(*TemplateSchedulingMetadata); i { case 0: return &v.state case 1: @@ -1848,7 +2003,7 @@ func file_template_manager_proto_init() { } } file_template_manager_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TemplateBuildStatusReason); i { + switch v := v.(*TemplateBuildLogEntry); i { case 0: return &v.state case 1: @@ -1860,6 +2015,18 @@ func file_template_manager_proto_init() { } } file_template_manager_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TemplateBuildStatusReason); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_template_manager_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TemplateBuildStatusResponse); i { case 0: return &v.state @@ -1886,15 +2053,15 @@ func file_template_manager_proto_init() { } file_template_manager_proto_msgTypes[9].OneofWrappers = []interface{}{} file_template_manager_proto_msgTypes[10].OneofWrappers = []interface{}{} - file_template_manager_proto_msgTypes[14].OneofWrappers = []interface{}{} file_template_manager_proto_msgTypes[15].OneofWrappers = []interface{}{} + file_template_manager_proto_msgTypes[16].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_template_manager_proto_rawDesc, NumEnums: 3, - NumMessages: 17, + NumMessages: 18, NumExtensions: 0, NumServices: 1, }, diff --git a/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go b/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go index c9d99bf86d..0038123ef0 100644 --- a/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go +++ b/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 -// - protoc v5.29.3 +// - protoc v5.26.1 // source: template-manager.proto package template_manager From d21605098a043a96d9f9f3d426d11df0e714087c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 31 May 2026 04:16:01 +0000 Subject: [PATCH 09/15] chore: auto-commit generated changes --- packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go | 2 +- packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go | 2 +- .../shared/pkg/grpc/template-manager/template-manager.pb.go | 4 +--- .../pkg/grpc/template-manager/template-manager_grpc.pb.go | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go index 1f06837971..65b01ebb8d 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v5.26.1 +// protoc v5.29.3 // source: orchestrator.proto package orchestrator diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go index f48f4ccd5b..61d933d3d1 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 -// - protoc v5.26.1 +// - protoc v5.29.3 // source: orchestrator.proto package orchestrator diff --git a/packages/shared/pkg/grpc/template-manager/template-manager.pb.go b/packages/shared/pkg/grpc/template-manager/template-manager.pb.go index d65f60d28d..b008d4f528 100644 --- a/packages/shared/pkg/grpc/template-manager/template-manager.pb.go +++ b/packages/shared/pkg/grpc/template-manager/template-manager.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v5.26.1 +// protoc v5.29.3 // source: template-manager.proto package template_manager @@ -588,7 +588,6 @@ type FromImageRegistry struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Type: - // // *FromImageRegistry_Aws // *FromImageRegistry_Gcp // *FromImageRegistry_General @@ -702,7 +701,6 @@ type TemplateConfig struct { Force *bool `protobuf:"varint,12,opt,name=force,proto3,oneof" json:"force,omitempty"` Steps []*TemplateStep `protobuf:"bytes,13,rep,name=steps,proto3" json:"steps,omitempty"` // Types that are assignable to Source: - // // *TemplateConfig_FromImage // *TemplateConfig_FromTemplate Source isTemplateConfig_Source `protobuf_oneof:"source"` diff --git a/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go b/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go index 0038123ef0..c9d99bf86d 100644 --- a/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go +++ b/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 -// - protoc v5.26.1 +// - protoc v5.29.3 // source: template-manager.proto package template_manager From 0c64dd7ad70e6b95a12aedd6bacacc1e4163c370 Mon Sep 17 00:00:00 2001 From: Tomas Valenta Date: Sat, 30 May 2026 21:19:01 -0700 Subject: [PATCH 10/15] fix(orch): return scheduling metadata on create --- packages/orchestrator/orchestrator.proto | 1 + packages/orchestrator/pkg/server/sandboxes.go | 9 +- .../pkg/grpc/orchestrator/orchestrator.pb.go | 340 +++++++++--------- 3 files changed, 186 insertions(+), 164 deletions(-) diff --git a/packages/orchestrator/orchestrator.proto b/packages/orchestrator/orchestrator.proto index fd338b71de..305ad3c98d 100644 --- a/packages/orchestrator/orchestrator.proto +++ b/packages/orchestrator/orchestrator.proto @@ -105,6 +105,7 @@ message SandboxCreateRequest { message SandboxCreateResponse { string client_id = 1; + SchedulingMetadata scheduling_metadata = 2; } message SandboxUpdateRequest { diff --git a/packages/orchestrator/pkg/server/sandboxes.go b/packages/orchestrator/pkg/server/sandboxes.go index e9ec95ea5f..302b6a73df 100644 --- a/packages/orchestrator/pkg/server/sandboxes.go +++ b/packages/orchestrator/pkg/server/sandboxes.go @@ -140,6 +140,12 @@ func (s *Server) Create(ctx context.Context, req *orchestrator.SandboxCreateRequ if err != nil { return nil, fmt.Errorf("failed to get template snapshot data: %w", err) } + var schedulingMetadata *orchestrator.SchedulingMetadata + if provider, ok := template.(interface { + SchedulingMetadata() *orchestrator.SchedulingMetadata + }); ok { + schedulingMetadata = provider.SchedulingMetadata() + } // Clone the network config to avoid modifying the original request network := proto.CloneOf(req.GetSandbox().GetNetwork()) @@ -245,7 +251,8 @@ func (s *Server) Create(ctx context.Context, req *orchestrator.SandboxCreateRequ ) return &orchestrator.SandboxCreateResponse{ - ClientId: s.info.ClientId, + ClientId: s.info.ClientId, + SchedulingMetadata: schedulingMetadata, }, nil } diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go index 65b01ebb8d..5248ca46d8 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go @@ -778,7 +778,8 @@ type SandboxCreateResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` + ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` + SchedulingMetadata *SchedulingMetadata `protobuf:"bytes,2,opt,name=scheduling_metadata,json=schedulingMetadata,proto3" json:"scheduling_metadata,omitempty"` } func (x *SandboxCreateResponse) Reset() { @@ -820,6 +821,13 @@ func (x *SandboxCreateResponse) GetClientId() string { return "" } +func (x *SandboxCreateResponse) GetSchedulingMetadata() *SchedulingMetadata { + if x != nil { + return x.SchedulingMetadata + } + return nil +} + type SandboxUpdateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1655,146 +1663,151 @@ var file_orchestrator_proto_rawDesc = []byte{ 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x34, 0x0a, 0x15, + 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x7a, 0x0a, 0x15, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x22, 0xc3, 0x01, 0x0a, 0x14, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6e, - 0x64, 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, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x06, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x48, 0x01, 0x52, 0x06, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x88, 0x01, 0x01, - 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x09, 0x0a, - 0x07, 0x5f, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x6b, 0x0a, 0x14, 0x53, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, - 0x24, 0x0a, 0x0b, 0x6b, 0x69, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x6b, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x61, 0x73, - 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6b, 0x69, 0x6c, 0x6c, 0x5f, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x13, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, - 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0xb2, 0x03, 0x0a, 0x12, 0x53, 0x63, 0x68, 0x65, - 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x22, - 0x0a, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x65, - 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x13, 0x6d, 0x65, 0x6d, 0x66, 0x69, - 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, - 0x0a, 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x12, 0x6d, 0x65, - 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x12, 0x34, 0x0a, 0x16, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, - 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, - 0x52, 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, - 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, - 0x20, 0x03, 0x28, 0x04, 0x52, 0x12, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4c, 0x6f, 0x67, 0x69, - 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x6f, 0x6f, 0x74, - 0x66, 0x73, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, - 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x43, 0x68, 0x75, - 0x6e, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74, - 0x66, 0x73, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4d, - 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0x5c, 0x0a, 0x14, - 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, - 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, - 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x54, 0x0a, 0x18, 0x53, 0x61, - 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, + 0x49, 0x64, 0x12, 0x44, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, + 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc3, 0x01, 0x0a, 0x14, 0x53, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, + 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 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, 0x00, + 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x06, + 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x45, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x01, 0x52, 0x06, 0x65, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x22, 0x6b, + 0x0a, 0x14, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, - 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, - 0x22, 0x61, 0x0a, 0x19, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, + 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0b, 0x6b, 0x69, 0x6c, 0x6c, 0x5f, 0x72, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x6b, 0x69, + 0x6c, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, + 0x6b, 0x69, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x13, 0x53, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0xb2, 0x03, + 0x0a, 0x12, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x73, + 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x67, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x73, + 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x69, + 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, + 0x13, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0d, 0x52, 0x12, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, + 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, + 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x04, 0x52, 0x12, 0x72, 0x6f, 0x6f, 0x74, + 0x66, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, + 0x0a, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x6f, 0x6f, + 0x74, 0x66, 0x73, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x32, + 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x72, + 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x22, 0x5c, 0x0a, 0x14, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, + 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x13, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x22, 0x54, 0x0a, 0x18, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, + 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x19, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, + 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, + 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc7, 0x01, 0x0a, 0x0e, 0x52, 0x75, + 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x26, 0x0a, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, + 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x22, 0x44, 0x0a, 0x13, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x73, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x09, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x0f, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, + 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x52, 0x0e, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x22, 0xc7, 0x01, 0x0a, 0x0e, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x26, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, - 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 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, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x44, 0x0a, - 0x13, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x65, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x0f, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, - 0x49, 0x64, 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 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, 0x52, 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, - 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4b, 0x0a, - 0x1f, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, - 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x28, 0x0a, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, - 0x66, 0x6f, 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x32, 0xba, 0x03, 0x0a, 0x0e, 0x53, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, - 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, - 0x34, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, - 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, - 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x10, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x12, 0x16, 0x2e, + 0x61, 0x74, 0x61, 0x22, 0x4b, 0x0a, 0x1f, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, + 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, + 0x32, 0xba, 0x03, 0x0a, 0x0e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, + 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2f, 0x5a, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x73, - 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x32, - 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x6f, 0x72, 0x63, 0x68, - 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x14, 0x2e, + 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, + 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4c, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, + 0x6c, 0x64, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x53, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, + 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2f, 0x5a, + 0x2d, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x32, 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, 0x66, 0x72, + 0x61, 0x2f, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1855,37 +1868,38 @@ var file_orchestrator_proto_depIdxs = []int32{ 0, // 11: SandboxCreateRequest.sandbox:type_name -> SandboxConfig 26, // 12: SandboxCreateRequest.start_time:type_name -> google.protobuf.Timestamp 26, // 13: SandboxCreateRequest.end_time:type_name -> google.protobuf.Timestamp - 26, // 14: SandboxUpdateRequest.end_time:type_name -> google.protobuf.Timestamp - 7, // 15: SandboxUpdateRequest.egress:type_name -> SandboxNetworkEgressConfig - 14, // 16: SandboxPauseResponse.scheduling_metadata:type_name -> SchedulingMetadata - 14, // 17: SandboxCheckpointResponse.scheduling_metadata:type_name -> SchedulingMetadata - 0, // 18: RunningSandbox.config:type_name -> SandboxConfig - 26, // 19: RunningSandbox.start_time:type_name -> google.protobuf.Timestamp - 26, // 20: RunningSandbox.end_time:type_name -> google.protobuf.Timestamp - 18, // 21: SandboxListResponse.sandboxes:type_name -> RunningSandbox - 26, // 22: CachedBuildInfo.expiration_time:type_name -> google.protobuf.Timestamp - 14, // 23: CachedBuildInfo.scheduling_metadata:type_name -> SchedulingMetadata - 20, // 24: SandboxListCachedBuildsResponse.builds:type_name -> CachedBuildInfo - 6, // 25: SandboxNetworkEgressConfig.RulesEntry.value:type_name -> SandboxNetworkDomainRules - 9, // 26: SandboxService.Create:input_type -> SandboxCreateRequest - 11, // 27: SandboxService.Update:input_type -> SandboxUpdateRequest - 27, // 28: SandboxService.List:input_type -> google.protobuf.Empty - 12, // 29: SandboxService.Delete:input_type -> SandboxDeleteRequest - 13, // 30: SandboxService.Pause:input_type -> SandboxPauseRequest - 16, // 31: SandboxService.Checkpoint:input_type -> SandboxCheckpointRequest - 27, // 32: SandboxService.ListCachedBuilds:input_type -> google.protobuf.Empty - 10, // 33: SandboxService.Create:output_type -> SandboxCreateResponse - 27, // 34: SandboxService.Update:output_type -> google.protobuf.Empty - 19, // 35: SandboxService.List:output_type -> SandboxListResponse - 27, // 36: SandboxService.Delete:output_type -> google.protobuf.Empty - 15, // 37: SandboxService.Pause:output_type -> SandboxPauseResponse - 17, // 38: SandboxService.Checkpoint:output_type -> SandboxCheckpointResponse - 21, // 39: SandboxService.ListCachedBuilds:output_type -> SandboxListCachedBuildsResponse - 33, // [33:40] is the sub-list for method output_type - 26, // [26:33] is the sub-list for method input_type - 26, // [26:26] is the sub-list for extension type_name - 26, // [26:26] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name + 14, // 14: SandboxCreateResponse.scheduling_metadata:type_name -> SchedulingMetadata + 26, // 15: SandboxUpdateRequest.end_time:type_name -> google.protobuf.Timestamp + 7, // 16: SandboxUpdateRequest.egress:type_name -> SandboxNetworkEgressConfig + 14, // 17: SandboxPauseResponse.scheduling_metadata:type_name -> SchedulingMetadata + 14, // 18: SandboxCheckpointResponse.scheduling_metadata:type_name -> SchedulingMetadata + 0, // 19: RunningSandbox.config:type_name -> SandboxConfig + 26, // 20: RunningSandbox.start_time:type_name -> google.protobuf.Timestamp + 26, // 21: RunningSandbox.end_time:type_name -> google.protobuf.Timestamp + 18, // 22: SandboxListResponse.sandboxes:type_name -> RunningSandbox + 26, // 23: CachedBuildInfo.expiration_time:type_name -> google.protobuf.Timestamp + 14, // 24: CachedBuildInfo.scheduling_metadata:type_name -> SchedulingMetadata + 20, // 25: SandboxListCachedBuildsResponse.builds:type_name -> CachedBuildInfo + 6, // 26: SandboxNetworkEgressConfig.RulesEntry.value:type_name -> SandboxNetworkDomainRules + 9, // 27: SandboxService.Create:input_type -> SandboxCreateRequest + 11, // 28: SandboxService.Update:input_type -> SandboxUpdateRequest + 27, // 29: SandboxService.List:input_type -> google.protobuf.Empty + 12, // 30: SandboxService.Delete:input_type -> SandboxDeleteRequest + 13, // 31: SandboxService.Pause:input_type -> SandboxPauseRequest + 16, // 32: SandboxService.Checkpoint:input_type -> SandboxCheckpointRequest + 27, // 33: SandboxService.ListCachedBuilds:input_type -> google.protobuf.Empty + 10, // 34: SandboxService.Create:output_type -> SandboxCreateResponse + 27, // 35: SandboxService.Update:output_type -> google.protobuf.Empty + 19, // 36: SandboxService.List:output_type -> SandboxListResponse + 27, // 37: SandboxService.Delete:output_type -> google.protobuf.Empty + 15, // 38: SandboxService.Pause:output_type -> SandboxPauseResponse + 17, // 39: SandboxService.Checkpoint:output_type -> SandboxCheckpointResponse + 21, // 40: SandboxService.ListCachedBuilds:output_type -> SandboxListCachedBuildsResponse + 34, // [34:41] is the sub-list for method output_type + 27, // [27:34] is the sub-list for method input_type + 27, // [27:27] is the sub-list for extension type_name + 27, // [27:27] is the sub-list for extension extendee + 0, // [0:27] is the sub-list for field type_name } func init() { file_orchestrator_proto_init() } From 8375d6e6ecc336e5e95d5f9cbb54d3fa9c019f77 Mon Sep 17 00:00:00 2001 From: Tomas Valenta Date: Sat, 30 May 2026 21:20:50 -0700 Subject: [PATCH 11/15] fix(orch): use scheduling metadata getters --- .../orchestrator/pkg/template/build/builder.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/orchestrator/pkg/template/build/builder.go b/packages/orchestrator/pkg/template/build/builder.go index 517e05fd05..b4b42f35b0 100644 --- a/packages/orchestrator/pkg/template/build/builder.go +++ b/packages/orchestrator/pkg/template/build/builder.go @@ -415,15 +415,15 @@ func toTemplateSchedulingMetadata(m *orchestratorgrpc.SchedulingMetadata) *templ } return &templatemanager.TemplateSchedulingMetadata{ - BaseBuildID: m.BaseBuildId, - Generation: m.Generation, - ChainBuildIDs: m.ChainBuildIds, - MemfileLogicalBytes: m.MemfileLogicalBytes, - MemfileChunkCounts: m.MemfileChunkCounts, - MemfileMappingCounts: m.MemfileMappingCounts, - RootfsLogicalBytes: m.RootfsLogicalBytes, - RootfsChunkCounts: m.RootfsChunkCounts, - RootfsMappingCounts: m.RootfsMappingCounts, + BaseBuildID: m.GetBaseBuildId(), + Generation: m.GetGeneration(), + ChainBuildIDs: m.GetChainBuildIds(), + MemfileLogicalBytes: m.GetMemfileLogicalBytes(), + MemfileChunkCounts: m.GetMemfileChunkCounts(), + MemfileMappingCounts: m.GetMemfileMappingCounts(), + RootfsLogicalBytes: m.GetRootfsLogicalBytes(), + RootfsChunkCounts: m.GetRootfsChunkCounts(), + RootfsMappingCounts: m.GetRootfsMappingCounts(), } } From 0402551cdff48fa64e29094a7a7c7df8cbf39727 Mon Sep 17 00:00:00 2001 From: Tomas Valenta Date: Sat, 30 May 2026 21:33:19 -0700 Subject: [PATCH 12/15] fix(orch): expose build cache stats --- packages/orchestrator/orchestrator.proto | 4 + .../orchestrator/pkg/sandbox/build/cache.go | 48 ++++++- .../pkg/sandbox/template/cache.go | 4 + .../orchestrator/pkg/server/template_cache.go | 20 +-- .../pkg/grpc/orchestrator/orchestrator.pb.go | 128 ++++++++++++------ .../grpc/orchestrator/orchestrator_grpc.pb.go | 2 +- 6 files changed, 149 insertions(+), 57 deletions(-) diff --git a/packages/orchestrator/orchestrator.proto b/packages/orchestrator/orchestrator.proto index 305ad3c98d..4108f8765c 100644 --- a/packages/orchestrator/orchestrator.proto +++ b/packages/orchestrator/orchestrator.proto @@ -168,6 +168,10 @@ message CachedBuildInfo { string build_id = 1; google.protobuf.Timestamp expiration_time = 2; SchedulingMetadata scheduling_metadata = 3; + uint64 memfile_cached_bytes = 4; + uint32 memfile_cached_chunks = 5; + uint64 rootfs_cached_bytes = 6; + uint32 rootfs_cached_chunks = 7; } message SandboxListCachedBuildsResponse { diff --git a/packages/orchestrator/pkg/sandbox/build/cache.go b/packages/orchestrator/pkg/sandbox/build/cache.go index 7804d0b4c3..1a882620b7 100644 --- a/packages/orchestrator/pkg/sandbox/build/cache.go +++ b/packages/orchestrator/pkg/sandbox/build/cache.go @@ -6,6 +6,7 @@ import ( "context" "fmt" "os" + "strings" "sync" "time" @@ -24,7 +25,8 @@ import ( ) var ( - fallbackDiffSize = units.MBToBytes(100) + fallbackDiffSize = units.MBToBytes(100) + cacheStatsChunkSize = uint64(2 << 20) meter = otel.Meter("github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/build") residenceDurationMetric = utils.Must(meter.Int64Histogram("orchestrator.build.cache.residence_duration", @@ -101,6 +103,14 @@ func NewDiffStore( type DiffStoreKey string +type CachedBuildStats struct { + BuildID string + MemfileCachedBytes uint64 + MemfileCachedChunks uint32 + RootfsCachedBytes uint64 + RootfsCachedChunks uint32 +} + func GetDiffStoreKey(buildID string, diffType DiffType) DiffStoreKey { return DiffStoreKey(fmt.Sprintf("%s/%s", buildID, diffType)) } @@ -171,6 +181,42 @@ func (s *DiffStore) Lookup(key DiffStoreKey) (Diff, bool) { return item.Value(), true } +func (s *DiffStore) CachedBuildStats(ctx context.Context) []CachedBuildStats { + byBuildID := make(map[string]*CachedBuildStats) + for key, item := range s.cache.Items() { + buildID, diffType, ok := strings.Cut(string(key), "/") + if !ok || item == nil || item.Value() == nil { + continue + } + stats := byBuildID[buildID] + if stats == nil { + stats = &CachedBuildStats{BuildID: buildID} + byBuildID[buildID] = stats + } + + size, err := item.Value().FileSize(ctx) + if err != nil || size < 0 { + continue + } + chunks := uint32((uint64(size) + cacheStatsChunkSize - 1) / cacheStatsChunkSize) + switch DiffType(diffType) { + case Memfile: + stats.MemfileCachedBytes = uint64(size) + stats.MemfileCachedChunks = chunks + case Rootfs: + stats.RootfsCachedBytes = uint64(size) + stats.RootfsCachedChunks = chunks + } + } + + result := make([]CachedBuildStats, 0, len(byBuildID)) + for _, stats := range byBuildID { + result = append(result, *stats) + } + + return result +} + func (s *DiffStore) startDiskSpaceEviction( ctx context.Context, config cfg.Config, diff --git a/packages/orchestrator/pkg/sandbox/template/cache.go b/packages/orchestrator/pkg/sandbox/template/cache.go index 2296542fb1..fde66b400b 100644 --- a/packages/orchestrator/pkg/sandbox/template/cache.go +++ b/packages/orchestrator/pkg/sandbox/template/cache.go @@ -130,6 +130,10 @@ func (c *Cache) Items() map[string]*ttlcache.Item[string, Template] { return c.cache.Items() } +func (c *Cache) CachedBuildStats(ctx context.Context) []build.CachedBuildStats { + return c.buildStore.CachedBuildStats(ctx) +} + // LookupDiff returns the locally-cached diff for the given build and file name. // Returns (nil, false) if the diff is not cached locally. func (c *Cache) LookupDiff(buildID string, diffType build.DiffType) (build.Diff, bool) { diff --git a/packages/orchestrator/pkg/server/template_cache.go b/packages/orchestrator/pkg/server/template_cache.go index 25512a58f1..2b1c39ac67 100644 --- a/packages/orchestrator/pkg/server/template_cache.go +++ b/packages/orchestrator/pkg/server/template_cache.go @@ -5,10 +5,8 @@ package server import ( "context" - "google.golang.org/protobuf/types/known/emptypb" - "google.golang.org/protobuf/types/known/timestamppb" - "github.com/e2b-dev/infra/packages/shared/pkg/grpc/orchestrator" + "google.golang.org/protobuf/types/known/emptypb" ) func (s *Server) ListCachedBuilds(ctx context.Context, _ *emptypb.Empty) (*orchestrator.SandboxListCachedBuildsResponse, error) { @@ -17,17 +15,13 @@ func (s *Server) ListCachedBuilds(ctx context.Context, _ *emptypb.Empty) (*orche var builds []*orchestrator.CachedBuildInfo - for key, item := range s.templateCache.Items() { - var metadata *orchestrator.SchedulingMetadata - if provider, ok := item.Value().(interface { - SchedulingMetadata() *orchestrator.SchedulingMetadata - }); ok { - metadata = provider.SchedulingMetadata() - } + for _, stats := range s.templateCache.CachedBuildStats(ctx) { builds = append(builds, &orchestrator.CachedBuildInfo{ - BuildId: key, - ExpirationTime: timestamppb.New(item.ExpiresAt()), - SchedulingMetadata: metadata, + BuildId: stats.BuildID, + MemfileCachedBytes: stats.MemfileCachedBytes, + MemfileCachedChunks: stats.MemfileCachedChunks, + RootfsCachedBytes: stats.RootfsCachedBytes, + RootfsCachedChunks: stats.RootfsCachedChunks, }) } diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go index 5248ca46d8..560e4be4f8 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v5.29.3 +// protoc v5.26.1 // source: orchestrator.proto package orchestrator @@ -1393,9 +1393,13 @@ type CachedBuildInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` - ExpirationTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expiration_time,json=expirationTime,proto3" json:"expiration_time,omitempty"` - SchedulingMetadata *SchedulingMetadata `protobuf:"bytes,3,opt,name=scheduling_metadata,json=schedulingMetadata,proto3" json:"scheduling_metadata,omitempty"` + BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` + ExpirationTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expiration_time,json=expirationTime,proto3" json:"expiration_time,omitempty"` + SchedulingMetadata *SchedulingMetadata `protobuf:"bytes,3,opt,name=scheduling_metadata,json=schedulingMetadata,proto3" json:"scheduling_metadata,omitempty"` + MemfileCachedBytes uint64 `protobuf:"varint,4,opt,name=memfile_cached_bytes,json=memfileCachedBytes,proto3" json:"memfile_cached_bytes,omitempty"` + MemfileCachedChunks uint32 `protobuf:"varint,5,opt,name=memfile_cached_chunks,json=memfileCachedChunks,proto3" json:"memfile_cached_chunks,omitempty"` + RootfsCachedBytes uint64 `protobuf:"varint,6,opt,name=rootfs_cached_bytes,json=rootfsCachedBytes,proto3" json:"rootfs_cached_bytes,omitempty"` + RootfsCachedChunks uint32 `protobuf:"varint,7,opt,name=rootfs_cached_chunks,json=rootfsCachedChunks,proto3" json:"rootfs_cached_chunks,omitempty"` } func (x *CachedBuildInfo) Reset() { @@ -1451,6 +1455,34 @@ func (x *CachedBuildInfo) GetSchedulingMetadata() *SchedulingMetadata { return nil } +func (x *CachedBuildInfo) GetMemfileCachedBytes() uint64 { + if x != nil { + return x.MemfileCachedBytes + } + return 0 +} + +func (x *CachedBuildInfo) GetMemfileCachedChunks() uint32 { + if x != nil { + return x.MemfileCachedChunks + } + return 0 +} + +func (x *CachedBuildInfo) GetRootfsCachedBytes() uint64 { + if x != nil { + return x.RootfsCachedBytes + } + return 0 +} + +func (x *CachedBuildInfo) GetRootfsCachedChunks() uint32 { + if x != nil { + return x.RootfsCachedChunks + } + return 0 +} + type SandboxListCachedBuildsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1759,7 +1791,7 @@ var file_orchestrator_proto_rawDesc = []byte{ 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x09, - 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x0f, 0x43, 0x61, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x22, 0xff, 0x02, 0x0a, 0x0f, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, @@ -1771,43 +1803,55 @@ var file_orchestrator_proto_rawDesc = []byte{ 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x22, 0x4b, 0x0a, 0x1f, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, - 0x32, 0xba, 0x03, 0x0a, 0x0e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, - 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x14, 0x2e, - 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, - 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, - 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4c, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x53, 0x61, - 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2f, 0x5a, - 0x2d, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x32, 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, 0x66, 0x72, - 0x61, 0x2f, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x61, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x12, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, + 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x61, 0x63, + 0x68, 0x65, 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x6f, 0x6f, + 0x74, 0x66, 0x73, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x43, 0x61, + 0x63, 0x68, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x6f, 0x6f, + 0x74, 0x66, 0x73, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, + 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x22, 0x4b, 0x0a, 0x1f, 0x53, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, + 0x0a, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x32, 0xba, 0x03, 0x0a, 0x0e, 0x53, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x53, + 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x15, + 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, + 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, + 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x15, 0x2e, + 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x05, + 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, + 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x53, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x12, 0x19, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x53, 0x61, + 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2f, 0x5a, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x32, 0x62, 0x2d, + 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, + 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go index 61d933d3d1..f48f4ccd5b 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 -// - protoc v5.29.3 +// - protoc v5.26.1 // source: orchestrator.proto package orchestrator From 8779771c62c536d6ce24e1867b19ba3af231a4b0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 31 May 2026 04:40:48 +0000 Subject: [PATCH 13/15] chore: auto-commit generated changes --- packages/orchestrator/pkg/server/template_cache.go | 3 ++- packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go | 2 +- packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/orchestrator/pkg/server/template_cache.go b/packages/orchestrator/pkg/server/template_cache.go index 2b1c39ac67..d6c264d953 100644 --- a/packages/orchestrator/pkg/server/template_cache.go +++ b/packages/orchestrator/pkg/server/template_cache.go @@ -5,8 +5,9 @@ package server import ( "context" - "github.com/e2b-dev/infra/packages/shared/pkg/grpc/orchestrator" "google.golang.org/protobuf/types/known/emptypb" + + "github.com/e2b-dev/infra/packages/shared/pkg/grpc/orchestrator" ) func (s *Server) ListCachedBuilds(ctx context.Context, _ *emptypb.Empty) (*orchestrator.SandboxListCachedBuildsResponse, error) { diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go index 560e4be4f8..14d0345cde 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v5.26.1 +// protoc v5.29.3 // source: orchestrator.proto package orchestrator diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go index f48f4ccd5b..61d933d3d1 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 -// - protoc v5.26.1 +// - protoc v5.29.3 // source: orchestrator.proto package orchestrator From a28185d211d56615137d7ba2c654a9163c494b7d Mon Sep 17 00:00:00 2001 From: Tomas Valenta Date: Sat, 30 May 2026 22:02:05 -0700 Subject: [PATCH 14/15] fix(orch): use byte-based scheduling stats --- packages/orchestrator/orchestrator.proto | 16 +- .../orchestrator/pkg/sandbox/build/cache.go | 18 +- .../orchestrator/pkg/scheduling/metadata.go | 34 +- .../orchestrator/pkg/server/template_cache.go | 10 +- .../pkg/template/build/builder.go | 4 +- packages/orchestrator/template-manager.proto | 12 +- .../pkg/grpc/orchestrator/orchestrator.pb.go | 294 +++++++++--------- .../template-manager/template-manager.pb.go | 230 +++++++------- .../template-manager_grpc.pb.go | 2 +- 9 files changed, 298 insertions(+), 322 deletions(-) diff --git a/packages/orchestrator/orchestrator.proto b/packages/orchestrator/orchestrator.proto index 4108f8765c..a9db122d63 100644 --- a/packages/orchestrator/orchestrator.proto +++ b/packages/orchestrator/orchestrator.proto @@ -130,12 +130,12 @@ message SandboxPauseRequest { message SchedulingMetadata { string base_build_id = 1; uint64 generation = 2; - repeated string chain_build_ids = 3; - repeated uint64 memfile_logical_bytes = 4; - repeated uint32 memfile_chunk_counts = 5; - repeated uint32 memfile_mapping_counts = 6; - repeated uint64 rootfs_logical_bytes = 7; - repeated uint32 rootfs_chunk_counts = 8; + uint64 memfile_size = 3; + uint64 rootfs_size = 4; + repeated string chain_build_ids = 5; + repeated uint64 memfile_logical_bytes = 6; + repeated uint32 memfile_mapping_counts = 7; + repeated uint64 rootfs_logical_bytes = 8; repeated uint32 rootfs_mapping_counts = 9; } @@ -169,9 +169,9 @@ message CachedBuildInfo { google.protobuf.Timestamp expiration_time = 2; SchedulingMetadata scheduling_metadata = 3; uint64 memfile_cached_bytes = 4; - uint32 memfile_cached_chunks = 5; + uint64 memfile_total_bytes = 5; uint64 rootfs_cached_bytes = 6; - uint32 rootfs_cached_chunks = 7; + uint64 rootfs_total_bytes = 7; } message SandboxListCachedBuildsResponse { diff --git a/packages/orchestrator/pkg/sandbox/build/cache.go b/packages/orchestrator/pkg/sandbox/build/cache.go index 1a882620b7..f181f7450d 100644 --- a/packages/orchestrator/pkg/sandbox/build/cache.go +++ b/packages/orchestrator/pkg/sandbox/build/cache.go @@ -25,8 +25,7 @@ import ( ) var ( - fallbackDiffSize = units.MBToBytes(100) - cacheStatsChunkSize = uint64(2 << 20) + fallbackDiffSize = units.MBToBytes(100) meter = otel.Meter("github.com/e2b-dev/infra/packages/orchestrator/pkg/sandbox/build") residenceDurationMetric = utils.Must(meter.Int64Histogram("orchestrator.build.cache.residence_duration", @@ -104,11 +103,11 @@ func NewDiffStore( type DiffStoreKey string type CachedBuildStats struct { - BuildID string - MemfileCachedBytes uint64 - MemfileCachedChunks uint32 - RootfsCachedBytes uint64 - RootfsCachedChunks uint32 + BuildID string + MemfileCachedBytes uint64 + MemfileTotalBytes uint64 + RootfsCachedBytes uint64 + RootfsTotalBytes uint64 } func GetDiffStoreKey(buildID string, diffType DiffType) DiffStoreKey { @@ -198,14 +197,13 @@ func (s *DiffStore) CachedBuildStats(ctx context.Context) []CachedBuildStats { if err != nil || size < 0 { continue } - chunks := uint32((uint64(size) + cacheStatsChunkSize - 1) / cacheStatsChunkSize) switch DiffType(diffType) { case Memfile: stats.MemfileCachedBytes = uint64(size) - stats.MemfileCachedChunks = chunks + stats.MemfileTotalBytes = uint64(size) case Rootfs: stats.RootfsCachedBytes = uint64(size) - stats.RootfsCachedChunks = chunks + stats.RootfsTotalBytes = uint64(size) } } diff --git a/packages/orchestrator/pkg/scheduling/metadata.go b/packages/orchestrator/pkg/scheduling/metadata.go index 2368b0937c..9df14e8e67 100644 --- a/packages/orchestrator/pkg/scheduling/metadata.go +++ b/packages/orchestrator/pkg/scheduling/metadata.go @@ -10,18 +10,13 @@ import ( "github.com/e2b-dev/infra/packages/shared/pkg/storage/header" ) -const ( - chainLimit = 32 - chunkSize = 2 << 20 -) +const chainLimit = 32 type buildContribution struct { buildID uuid.UUID memfileBytes uint64 - memfileChunks map[uint64]struct{} memfileMappingCount uint32 rootfsBytes uint64 - rootfsChunks map[uint64]struct{} rootfsMappingCount uint32 } @@ -31,42 +26,29 @@ func FromHeaders(memfileHeader, rootfsHeader *header.Header) *orchestrator.Sched } contributions := make(map[uuid.UUID]*buildContribution) - add := func(buildID uuid.UUID, storageOffset, length uint64, isMemfile bool) { + add := func(buildID uuid.UUID, length uint64, isMemfile bool) { if buildID == uuid.Nil || length == 0 { return } c, ok := contributions[buildID] if !ok { - c = &buildContribution{ - buildID: buildID, - memfileChunks: make(map[uint64]struct{}), - rootfsChunks: make(map[uint64]struct{}), - } + c = &buildContribution{buildID: buildID} contributions[buildID] = c } - - startChunk := storageOffset / chunkSize - endChunk := (storageOffset + length - 1) / chunkSize if isMemfile { c.memfileBytes += length c.memfileMappingCount++ - for i := startChunk; i <= endChunk; i++ { - c.memfileChunks[i] = struct{}{} - } } else { c.rootfsBytes += length c.rootfsMappingCount++ - for i := startChunk; i <= endChunk; i++ { - c.rootfsChunks[i] = struct{}{} - } } } for _, m := range memfileHeader.Mapping.All() { - add(m.BuildId, m.BuildStorageOffset, m.Length, true) + add(m.BuildId, m.Length, true) } for _, m := range rootfsHeader.Mapping.All() { - add(m.BuildId, m.BuildStorageOffset, m.Length, false) + add(m.BuildId, m.Length, false) } baseBuildID := memfileHeader.Metadata.BaseBuildId @@ -94,21 +76,19 @@ func FromHeaders(memfileHeader, rootfsHeader *header.Header) *orchestrator.Sched res := &orchestrator.SchedulingMetadata{ BaseBuildId: baseBuildID.String(), Generation: max(memfileHeader.Metadata.Generation, rootfsHeader.Metadata.Generation) + 1, + MemfileSize: memfileHeader.Metadata.Size, + RootfsSize: rootfsHeader.Metadata.Size, ChainBuildIds: make([]string, 0, len(chain)), MemfileLogicalBytes: make([]uint64, 0, len(chain)), - MemfileChunkCounts: make([]uint32, 0, len(chain)), MemfileMappingCounts: make([]uint32, 0, len(chain)), RootfsLogicalBytes: make([]uint64, 0, len(chain)), - RootfsChunkCounts: make([]uint32, 0, len(chain)), RootfsMappingCounts: make([]uint32, 0, len(chain)), } for _, c := range chain { res.ChainBuildIds = append(res.ChainBuildIds, c.buildID.String()) res.MemfileLogicalBytes = append(res.MemfileLogicalBytes, c.memfileBytes) - res.MemfileChunkCounts = append(res.MemfileChunkCounts, uint32(len(c.memfileChunks))) res.MemfileMappingCounts = append(res.MemfileMappingCounts, c.memfileMappingCount) res.RootfsLogicalBytes = append(res.RootfsLogicalBytes, c.rootfsBytes) - res.RootfsChunkCounts = append(res.RootfsChunkCounts, uint32(len(c.rootfsChunks))) res.RootfsMappingCounts = append(res.RootfsMappingCounts, c.rootfsMappingCount) } diff --git a/packages/orchestrator/pkg/server/template_cache.go b/packages/orchestrator/pkg/server/template_cache.go index d6c264d953..0f90fddc7a 100644 --- a/packages/orchestrator/pkg/server/template_cache.go +++ b/packages/orchestrator/pkg/server/template_cache.go @@ -18,11 +18,11 @@ func (s *Server) ListCachedBuilds(ctx context.Context, _ *emptypb.Empty) (*orche for _, stats := range s.templateCache.CachedBuildStats(ctx) { builds = append(builds, &orchestrator.CachedBuildInfo{ - BuildId: stats.BuildID, - MemfileCachedBytes: stats.MemfileCachedBytes, - MemfileCachedChunks: stats.MemfileCachedChunks, - RootfsCachedBytes: stats.RootfsCachedBytes, - RootfsCachedChunks: stats.RootfsCachedChunks, + BuildId: stats.BuildID, + MemfileCachedBytes: stats.MemfileCachedBytes, + MemfileTotalBytes: stats.MemfileTotalBytes, + RootfsCachedBytes: stats.RootfsCachedBytes, + RootfsTotalBytes: stats.RootfsTotalBytes, }) } diff --git a/packages/orchestrator/pkg/template/build/builder.go b/packages/orchestrator/pkg/template/build/builder.go index b4b42f35b0..caa98be444 100644 --- a/packages/orchestrator/pkg/template/build/builder.go +++ b/packages/orchestrator/pkg/template/build/builder.go @@ -417,12 +417,12 @@ func toTemplateSchedulingMetadata(m *orchestratorgrpc.SchedulingMetadata) *templ return &templatemanager.TemplateSchedulingMetadata{ BaseBuildID: m.GetBaseBuildId(), Generation: m.GetGeneration(), + MemfileSize: m.GetMemfileSize(), + RootfsSize: m.GetRootfsSize(), ChainBuildIDs: m.GetChainBuildIds(), MemfileLogicalBytes: m.GetMemfileLogicalBytes(), - MemfileChunkCounts: m.GetMemfileChunkCounts(), MemfileMappingCounts: m.GetMemfileMappingCounts(), RootfsLogicalBytes: m.GetRootfsLogicalBytes(), - RootfsChunkCounts: m.GetRootfsChunkCounts(), RootfsMappingCounts: m.GetRootfsMappingCounts(), } } diff --git a/packages/orchestrator/template-manager.proto b/packages/orchestrator/template-manager.proto index 1131492ded..9952229325 100644 --- a/packages/orchestrator/template-manager.proto +++ b/packages/orchestrator/template-manager.proto @@ -138,12 +138,12 @@ message TemplateBuildMetadata { message TemplateSchedulingMetadata { string baseBuildID = 1; uint64 generation = 2; - repeated string chainBuildIDs = 3; - repeated uint64 memfileLogicalBytes = 4; - repeated uint32 memfileChunkCounts = 5; - repeated uint32 memfileMappingCounts = 6; - repeated uint64 rootfsLogicalBytes = 7; - repeated uint32 rootfsChunkCounts = 8; + uint64 memfileSize = 3; + uint64 rootfsSize = 4; + repeated string chainBuildIDs = 5; + repeated uint64 memfileLogicalBytes = 6; + repeated uint32 memfileMappingCounts = 7; + repeated uint64 rootfsLogicalBytes = 8; repeated uint32 rootfsMappingCounts = 9; } diff --git a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go index 14d0345cde..029aa4623d 100644 --- a/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go +++ b/packages/shared/pkg/grpc/orchestrator/orchestrator.pb.go @@ -1017,12 +1017,12 @@ type SchedulingMetadata struct { BaseBuildId string `protobuf:"bytes,1,opt,name=base_build_id,json=baseBuildId,proto3" json:"base_build_id,omitempty"` Generation uint64 `protobuf:"varint,2,opt,name=generation,proto3" json:"generation,omitempty"` - ChainBuildIds []string `protobuf:"bytes,3,rep,name=chain_build_ids,json=chainBuildIds,proto3" json:"chain_build_ids,omitempty"` - MemfileLogicalBytes []uint64 `protobuf:"varint,4,rep,packed,name=memfile_logical_bytes,json=memfileLogicalBytes,proto3" json:"memfile_logical_bytes,omitempty"` - MemfileChunkCounts []uint32 `protobuf:"varint,5,rep,packed,name=memfile_chunk_counts,json=memfileChunkCounts,proto3" json:"memfile_chunk_counts,omitempty"` - MemfileMappingCounts []uint32 `protobuf:"varint,6,rep,packed,name=memfile_mapping_counts,json=memfileMappingCounts,proto3" json:"memfile_mapping_counts,omitempty"` - RootfsLogicalBytes []uint64 `protobuf:"varint,7,rep,packed,name=rootfs_logical_bytes,json=rootfsLogicalBytes,proto3" json:"rootfs_logical_bytes,omitempty"` - RootfsChunkCounts []uint32 `protobuf:"varint,8,rep,packed,name=rootfs_chunk_counts,json=rootfsChunkCounts,proto3" json:"rootfs_chunk_counts,omitempty"` + MemfileSize uint64 `protobuf:"varint,3,opt,name=memfile_size,json=memfileSize,proto3" json:"memfile_size,omitempty"` + RootfsSize uint64 `protobuf:"varint,4,opt,name=rootfs_size,json=rootfsSize,proto3" json:"rootfs_size,omitempty"` + ChainBuildIds []string `protobuf:"bytes,5,rep,name=chain_build_ids,json=chainBuildIds,proto3" json:"chain_build_ids,omitempty"` + MemfileLogicalBytes []uint64 `protobuf:"varint,6,rep,packed,name=memfile_logical_bytes,json=memfileLogicalBytes,proto3" json:"memfile_logical_bytes,omitempty"` + MemfileMappingCounts []uint32 `protobuf:"varint,7,rep,packed,name=memfile_mapping_counts,json=memfileMappingCounts,proto3" json:"memfile_mapping_counts,omitempty"` + RootfsLogicalBytes []uint64 `protobuf:"varint,8,rep,packed,name=rootfs_logical_bytes,json=rootfsLogicalBytes,proto3" json:"rootfs_logical_bytes,omitempty"` RootfsMappingCounts []uint32 `protobuf:"varint,9,rep,packed,name=rootfs_mapping_counts,json=rootfsMappingCounts,proto3" json:"rootfs_mapping_counts,omitempty"` } @@ -1072,44 +1072,44 @@ func (x *SchedulingMetadata) GetGeneration() uint64 { return 0 } -func (x *SchedulingMetadata) GetChainBuildIds() []string { +func (x *SchedulingMetadata) GetMemfileSize() uint64 { if x != nil { - return x.ChainBuildIds + return x.MemfileSize } - return nil + return 0 } -func (x *SchedulingMetadata) GetMemfileLogicalBytes() []uint64 { +func (x *SchedulingMetadata) GetRootfsSize() uint64 { if x != nil { - return x.MemfileLogicalBytes + return x.RootfsSize } - return nil + return 0 } -func (x *SchedulingMetadata) GetMemfileChunkCounts() []uint32 { +func (x *SchedulingMetadata) GetChainBuildIds() []string { if x != nil { - return x.MemfileChunkCounts + return x.ChainBuildIds } return nil } -func (x *SchedulingMetadata) GetMemfileMappingCounts() []uint32 { +func (x *SchedulingMetadata) GetMemfileLogicalBytes() []uint64 { if x != nil { - return x.MemfileMappingCounts + return x.MemfileLogicalBytes } return nil } -func (x *SchedulingMetadata) GetRootfsLogicalBytes() []uint64 { +func (x *SchedulingMetadata) GetMemfileMappingCounts() []uint32 { if x != nil { - return x.RootfsLogicalBytes + return x.MemfileMappingCounts } return nil } -func (x *SchedulingMetadata) GetRootfsChunkCounts() []uint32 { +func (x *SchedulingMetadata) GetRootfsLogicalBytes() []uint64 { if x != nil { - return x.RootfsChunkCounts + return x.RootfsLogicalBytes } return nil } @@ -1393,13 +1393,13 @@ type CachedBuildInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` - ExpirationTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expiration_time,json=expirationTime,proto3" json:"expiration_time,omitempty"` - SchedulingMetadata *SchedulingMetadata `protobuf:"bytes,3,opt,name=scheduling_metadata,json=schedulingMetadata,proto3" json:"scheduling_metadata,omitempty"` - MemfileCachedBytes uint64 `protobuf:"varint,4,opt,name=memfile_cached_bytes,json=memfileCachedBytes,proto3" json:"memfile_cached_bytes,omitempty"` - MemfileCachedChunks uint32 `protobuf:"varint,5,opt,name=memfile_cached_chunks,json=memfileCachedChunks,proto3" json:"memfile_cached_chunks,omitempty"` - RootfsCachedBytes uint64 `protobuf:"varint,6,opt,name=rootfs_cached_bytes,json=rootfsCachedBytes,proto3" json:"rootfs_cached_bytes,omitempty"` - RootfsCachedChunks uint32 `protobuf:"varint,7,opt,name=rootfs_cached_chunks,json=rootfsCachedChunks,proto3" json:"rootfs_cached_chunks,omitempty"` + BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` + ExpirationTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=expiration_time,json=expirationTime,proto3" json:"expiration_time,omitempty"` + SchedulingMetadata *SchedulingMetadata `protobuf:"bytes,3,opt,name=scheduling_metadata,json=schedulingMetadata,proto3" json:"scheduling_metadata,omitempty"` + MemfileCachedBytes uint64 `protobuf:"varint,4,opt,name=memfile_cached_bytes,json=memfileCachedBytes,proto3" json:"memfile_cached_bytes,omitempty"` + MemfileTotalBytes uint64 `protobuf:"varint,5,opt,name=memfile_total_bytes,json=memfileTotalBytes,proto3" json:"memfile_total_bytes,omitempty"` + RootfsCachedBytes uint64 `protobuf:"varint,6,opt,name=rootfs_cached_bytes,json=rootfsCachedBytes,proto3" json:"rootfs_cached_bytes,omitempty"` + RootfsTotalBytes uint64 `protobuf:"varint,7,opt,name=rootfs_total_bytes,json=rootfsTotalBytes,proto3" json:"rootfs_total_bytes,omitempty"` } func (x *CachedBuildInfo) Reset() { @@ -1462,9 +1462,9 @@ func (x *CachedBuildInfo) GetMemfileCachedBytes() uint64 { return 0 } -func (x *CachedBuildInfo) GetMemfileCachedChunks() uint32 { +func (x *CachedBuildInfo) GetMemfileTotalBytes() uint64 { if x != nil { - return x.MemfileCachedChunks + return x.MemfileTotalBytes } return 0 } @@ -1476,9 +1476,9 @@ func (x *CachedBuildInfo) GetRootfsCachedBytes() uint64 { return 0 } -func (x *CachedBuildInfo) GetRootfsCachedChunks() uint32 { +func (x *CachedBuildInfo) GetRootfsTotalBytes() uint64 { if x != nil { - return x.RootfsCachedChunks + return x.RootfsTotalBytes } return 0 } @@ -1729,129 +1729,127 @@ var file_orchestrator_proto_rawDesc = []byte{ 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0xb2, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x94, 0x03, 0x0a, 0x12, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0d, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x73, - 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x67, 0x69, - 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, - 0x13, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, - 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0d, 0x52, 0x12, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4d, - 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x14, - 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x04, 0x52, 0x12, 0x72, 0x6f, 0x6f, 0x74, - 0x66, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, - 0x0a, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x6f, 0x6f, - 0x74, 0x66, 0x73, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x32, - 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x72, - 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x22, 0x5c, 0x0a, 0x14, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, - 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x13, 0x73, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x54, 0x0a, 0x18, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, - 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x19, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, - 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, - 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, - 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc7, 0x01, 0x0a, 0x0e, 0x52, 0x75, - 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x26, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, - 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, + 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, + 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0a, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0f, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, + 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x04, 0x52, 0x13, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x69, + 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x6d, 0x65, 0x6d, 0x66, + 0x69, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, + 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x30, + 0x0a, 0x14, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, + 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x04, 0x52, 0x12, 0x72, 0x6f, + 0x6f, 0x74, 0x66, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, + 0x12, 0x32, 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0d, 0x52, + 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x22, 0x5c, 0x0a, 0x14, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, + 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x13, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x54, 0x0a, 0x18, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x49, 0x64, 0x12, 0x19, 0x0a, + 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x61, 0x0a, 0x19, 0x53, 0x61, 0x6e, 0x64, + 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc7, 0x01, 0x0a, 0x0e, + 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x12, 0x26, + 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 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, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, + 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x52, 0x07, 0x65, 0x6e, + 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x44, 0x0a, 0x13, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x09, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x52, 0x09, 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x22, 0xf7, 0x02, 0x0a, 0x0f, + 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x19, 0x0a, 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x52, + 0x0e, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x44, 0x0a, 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, + 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x12, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x65, 0x6d, 0x66, 0x69, + 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x66, + 0x73, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x6f, 0x6f, 0x74, 0x66, + 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x10, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x4b, 0x0a, 0x1f, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x73, 0x32, 0xba, 0x03, 0x0a, 0x0e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, + 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, + 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, + 0x6f, 0x78, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, + 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 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, 0x07, 0x65, 0x6e, 0x64, 0x54, - 0x69, 0x6d, 0x65, 0x22, 0x44, 0x0a, 0x13, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x73, 0x61, - 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x52, 0x09, - 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x65, 0x73, 0x22, 0xff, 0x02, 0x0a, 0x0f, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x19, 0x0a, - 0x08, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x52, 0x0e, 0x65, - 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x44, 0x0a, - 0x13, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x53, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, - 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x12, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, - 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x6f, 0x6f, - 0x74, 0x66, 0x73, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x6f, 0x6f, - 0x74, 0x66, 0x73, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, - 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x64, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x22, 0x4b, 0x0a, 0x1f, 0x53, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, - 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, - 0x0a, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x06, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x32, 0xba, 0x03, 0x0a, 0x0e, 0x53, 0x61, 0x6e, - 0x64, 0x62, 0x6f, 0x78, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x53, - 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x15, - 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, - 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x14, 0x2e, - 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x15, 0x2e, - 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x05, - 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, - 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x53, 0x61, - 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x19, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x53, 0x61, - 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x2f, 0x5a, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, - 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x32, 0x62, 0x2d, - 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, - 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x50, 0x61, 0x75, 0x73, 0x65, 0x12, + 0x14, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x50, + 0x61, 0x75, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x53, 0x61, 0x6e, + 0x64, 0x62, 0x6f, 0x78, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4c, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, + 0x75, 0x69, 0x6c, 0x64, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x20, 0x2e, + 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x63, 0x68, 0x65, + 0x64, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0x2f, 0x5a, 0x2d, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x32, 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, + 0x66, 0x72, 0x61, 0x2f, 0x6f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/packages/shared/pkg/grpc/template-manager/template-manager.pb.go b/packages/shared/pkg/grpc/template-manager/template-manager.pb.go index b008d4f528..4fc52e6f0c 100644 --- a/packages/shared/pkg/grpc/template-manager/template-manager.pb.go +++ b/packages/shared/pkg/grpc/template-manager/template-manager.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v5.29.3 +// protoc v5.26.1 // source: template-manager.proto package template_manager @@ -588,6 +588,7 @@ type FromImageRegistry struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Type: + // // *FromImageRegistry_Aws // *FromImageRegistry_Gcp // *FromImageRegistry_General @@ -701,6 +702,7 @@ type TemplateConfig struct { Force *bool `protobuf:"varint,12,opt,name=force,proto3,oneof" json:"force,omitempty"` Steps []*TemplateStep `protobuf:"bytes,13,rep,name=steps,proto3" json:"steps,omitempty"` // Types that are assignable to Source: + // // *TemplateConfig_FromImage // *TemplateConfig_FromTemplate Source isTemplateConfig_Source `protobuf_oneof:"source"` @@ -1188,12 +1190,12 @@ type TemplateSchedulingMetadata struct { BaseBuildID string `protobuf:"bytes,1,opt,name=baseBuildID,proto3" json:"baseBuildID,omitempty"` Generation uint64 `protobuf:"varint,2,opt,name=generation,proto3" json:"generation,omitempty"` - ChainBuildIDs []string `protobuf:"bytes,3,rep,name=chainBuildIDs,proto3" json:"chainBuildIDs,omitempty"` - MemfileLogicalBytes []uint64 `protobuf:"varint,4,rep,packed,name=memfileLogicalBytes,proto3" json:"memfileLogicalBytes,omitempty"` - MemfileChunkCounts []uint32 `protobuf:"varint,5,rep,packed,name=memfileChunkCounts,proto3" json:"memfileChunkCounts,omitempty"` - MemfileMappingCounts []uint32 `protobuf:"varint,6,rep,packed,name=memfileMappingCounts,proto3" json:"memfileMappingCounts,omitempty"` - RootfsLogicalBytes []uint64 `protobuf:"varint,7,rep,packed,name=rootfsLogicalBytes,proto3" json:"rootfsLogicalBytes,omitempty"` - RootfsChunkCounts []uint32 `protobuf:"varint,8,rep,packed,name=rootfsChunkCounts,proto3" json:"rootfsChunkCounts,omitempty"` + MemfileSize uint64 `protobuf:"varint,3,opt,name=memfileSize,proto3" json:"memfileSize,omitempty"` + RootfsSize uint64 `protobuf:"varint,4,opt,name=rootfsSize,proto3" json:"rootfsSize,omitempty"` + ChainBuildIDs []string `protobuf:"bytes,5,rep,name=chainBuildIDs,proto3" json:"chainBuildIDs,omitempty"` + MemfileLogicalBytes []uint64 `protobuf:"varint,6,rep,packed,name=memfileLogicalBytes,proto3" json:"memfileLogicalBytes,omitempty"` + MemfileMappingCounts []uint32 `protobuf:"varint,7,rep,packed,name=memfileMappingCounts,proto3" json:"memfileMappingCounts,omitempty"` + RootfsLogicalBytes []uint64 `protobuf:"varint,8,rep,packed,name=rootfsLogicalBytes,proto3" json:"rootfsLogicalBytes,omitempty"` RootfsMappingCounts []uint32 `protobuf:"varint,9,rep,packed,name=rootfsMappingCounts,proto3" json:"rootfsMappingCounts,omitempty"` } @@ -1243,44 +1245,44 @@ func (x *TemplateSchedulingMetadata) GetGeneration() uint64 { return 0 } -func (x *TemplateSchedulingMetadata) GetChainBuildIDs() []string { +func (x *TemplateSchedulingMetadata) GetMemfileSize() uint64 { if x != nil { - return x.ChainBuildIDs + return x.MemfileSize } - return nil + return 0 } -func (x *TemplateSchedulingMetadata) GetMemfileLogicalBytes() []uint64 { +func (x *TemplateSchedulingMetadata) GetRootfsSize() uint64 { if x != nil { - return x.MemfileLogicalBytes + return x.RootfsSize } - return nil + return 0 } -func (x *TemplateSchedulingMetadata) GetMemfileChunkCounts() []uint32 { +func (x *TemplateSchedulingMetadata) GetChainBuildIDs() []string { if x != nil { - return x.MemfileChunkCounts + return x.ChainBuildIDs } return nil } -func (x *TemplateSchedulingMetadata) GetMemfileMappingCounts() []uint32 { +func (x *TemplateSchedulingMetadata) GetMemfileLogicalBytes() []uint64 { if x != nil { - return x.MemfileMappingCounts + return x.MemfileLogicalBytes } return nil } -func (x *TemplateSchedulingMetadata) GetRootfsLogicalBytes() []uint64 { +func (x *TemplateSchedulingMetadata) GetMemfileMappingCounts() []uint32 { if x != nil { - return x.RootfsLogicalBytes + return x.MemfileMappingCounts } return nil } -func (x *TemplateSchedulingMetadata) GetRootfsChunkCounts() []uint32 { +func (x *TemplateSchedulingMetadata) GetRootfsLogicalBytes() []uint64 { if x != nil { - return x.RootfsChunkCounts + return x.RootfsLogicalBytes } return nil } @@ -1650,106 +1652,104 @@ var file_template_manager_proto_rawDesc = []byte{ 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x12, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x22, 0xaa, 0x03, 0x0a, 0x1a, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x64, 0x61, 0x74, 0x61, 0x22, 0x8e, 0x03, 0x0a, 0x1a, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x73, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x49, 0x44, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x6d, - 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, - 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x13, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, - 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x0a, - 0x12, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x12, 0x6d, 0x65, 0x6d, 0x66, 0x69, - 0x6c, 0x65, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x32, 0x0a, - 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x14, 0x6d, 0x65, 0x6d, - 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x63, - 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x04, 0x52, 0x12, 0x72, - 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x43, 0x68, 0x75, 0x6e, 0x6b, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x6f, - 0x6f, 0x74, 0x66, 0x73, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, - 0x30, 0x0a, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x13, 0x72, 0x6f, - 0x6f, 0x74, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x22, 0x83, 0x02, 0x0a, 0x15, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x1f, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, - 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x3a, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x39, 0x0a, 0x0b, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x57, 0x0a, 0x19, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, - 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, - 0x73, 0x74, 0x65, 0x70, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x73, 0x74, 0x65, 0x70, - 0x22, 0x86, 0x02, 0x0a, 0x1b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x13, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x32, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x36, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6c, - 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x06, 0x72, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x88, - 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x4a, 0x04, 0x08, - 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x2a, 0x34, 0x0a, 0x08, 0x4c, 0x6f, 0x67, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x65, 0x62, 0x75, 0x67, 0x10, 0x00, - 0x12, 0x08, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x61, - 0x72, 0x6e, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x03, 0x2a, - 0x2a, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x10, 0x00, 0x12, 0x0c, 0x0a, - 0x08, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x10, 0x01, 0x2a, 0x3d, 0x0a, 0x12, 0x54, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, + 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x66, + 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x6f, 0x6f, 0x74, 0x66, + 0x73, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x72, 0x6f, 0x6f, + 0x74, 0x66, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x73, 0x12, 0x30, 0x0a, + 0x13, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, + 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x04, 0x52, 0x13, 0x6d, 0x65, 0x6d, 0x66, + 0x69, 0x6c, 0x65, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, + 0x32, 0x0a, 0x14, 0x6d, 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x14, 0x6d, + 0x65, 0x6d, 0x66, 0x69, 0x6c, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x12, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4c, 0x6f, 0x67, + 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x04, 0x52, + 0x12, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x42, 0x79, + 0x74, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4d, 0x61, 0x70, + 0x70, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0d, + 0x52, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x66, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x22, 0x83, 0x02, 0x0a, 0x15, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 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, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x1f, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x12, 0x3a, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, + 0x1a, 0x39, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x57, 0x0a, 0x19, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x00, 0x12, - 0x0a, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, - 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x10, 0x02, 0x32, 0xbe, 0x02, 0x0a, 0x0f, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x40, - 0x0a, 0x0e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x12, 0x16, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x12, 0x4b, 0x0a, 0x13, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, - 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, - 0x13, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x50, 0x0a, 0x13, 0x49, 0x6e, 0x69, - 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x12, 0x1b, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, - 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, - 0x49, 0x6e, 0x69, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x6c, - 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x33, 0x5a, 0x31, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x65, 0x32, 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x75, 0x73, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x17, 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x04, 0x73, 0x74, 0x65, 0x70, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, + 0x73, 0x74, 0x65, 0x70, 0x22, 0x86, 0x02, 0x0a, 0x1b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x32, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x36, 0x0a, 0x0a, 0x6c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x37, 0x0a, + 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x2a, 0x34, 0x0a, + 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x65, 0x62, + 0x75, 0x67, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x10, 0x01, 0x12, 0x08, + 0x0a, 0x04, 0x57, 0x61, 0x72, 0x6e, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x10, 0x03, 0x2a, 0x2a, 0x0a, 0x0d, 0x4c, 0x6f, 0x67, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x10, + 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x10, 0x01, 0x2a, + 0x3d, 0x0a, 0x12, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, + 0x67, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x01, 0x12, + 0x0d, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x10, 0x02, 0x32, 0xbe, + 0x02, 0x0a, 0x0f, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x4b, 0x0a, 0x13, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, + 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4a, 0x0a, 0x13, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, + 0x6c, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x50, 0x0a, + 0x13, 0x49, 0x6e, 0x69, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1b, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, + 0x46, 0x69, 0x6c, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1c, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x46, 0x69, 0x6c, + 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0x33, 0x5a, 0x31, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x32, 0x62, 0x2d, 0x64, 0x65, 0x76, 0x2f, 0x69, 0x6e, + 0x66, 0x72, 0x61, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2d, 0x6d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go b/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go index c9d99bf86d..0038123ef0 100644 --- a/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go +++ b/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 -// - protoc v5.29.3 +// - protoc v5.26.1 // source: template-manager.proto package template_manager From 7abe525eae34c11e76b2c2a318f70d1194510257 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 31 May 2026 05:08:14 +0000 Subject: [PATCH 15/15] chore: auto-commit generated changes --- .../shared/pkg/grpc/template-manager/template-manager.pb.go | 4 +--- .../pkg/grpc/template-manager/template-manager_grpc.pb.go | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/shared/pkg/grpc/template-manager/template-manager.pb.go b/packages/shared/pkg/grpc/template-manager/template-manager.pb.go index 4fc52e6f0c..ecc713e6fc 100644 --- a/packages/shared/pkg/grpc/template-manager/template-manager.pb.go +++ b/packages/shared/pkg/grpc/template-manager/template-manager.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 -// protoc v5.26.1 +// protoc v5.29.3 // source: template-manager.proto package template_manager @@ -588,7 +588,6 @@ type FromImageRegistry struct { unknownFields protoimpl.UnknownFields // Types that are assignable to Type: - // // *FromImageRegistry_Aws // *FromImageRegistry_Gcp // *FromImageRegistry_General @@ -702,7 +701,6 @@ type TemplateConfig struct { Force *bool `protobuf:"varint,12,opt,name=force,proto3,oneof" json:"force,omitempty"` Steps []*TemplateStep `protobuf:"bytes,13,rep,name=steps,proto3" json:"steps,omitempty"` // Types that are assignable to Source: - // // *TemplateConfig_FromImage // *TemplateConfig_FromTemplate Source isTemplateConfig_Source `protobuf_oneof:"source"` diff --git a/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go b/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go index 0038123ef0..c9d99bf86d 100644 --- a/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go +++ b/packages/shared/pkg/grpc/template-manager/template-manager_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.6.1 -// - protoc v5.26.1 +// - protoc v5.29.3 // source: template-manager.proto package template_manager