diff --git a/internal/mock/BUILD.bazel b/internal/mock/BUILD.bazel index eec056b3..2f86f453 100644 --- a/internal/mock/BUILD.bazel +++ b/internal/mock/BUILD.bazel @@ -388,11 +388,11 @@ go_library( "//pkg/filesystem", "//pkg/filesystem/access", "//pkg/filesystem/virtual", + "//pkg/proto/bazeloutputservice", "//pkg/proto/buildqueuestate", "//pkg/proto/cas", "//pkg/proto/completedactionlogger", "//pkg/proto/outputpathpersistency", - "//pkg/proto/remoteoutputservice", "//pkg/proto/remoteworker", "//pkg/proto/runner", "//pkg/scheduler/initialsizeclass", diff --git a/pkg/filesystem/virtual/BUILD.bazel b/pkg/filesystem/virtual/BUILD.bazel index 01b7497e..8456ce54 100644 --- a/pkg/filesystem/virtual/BUILD.bazel +++ b/pkg/filesystem/virtual/BUILD.bazel @@ -46,8 +46,9 @@ go_library( "//pkg/cas", "//pkg/filesystem", "//pkg/filesystem/access", + "//pkg/proto/bazeloutputservice", + "//pkg/proto/bazeloutputservice/rev2", "//pkg/proto/outputpathpersistency", - "//pkg/proto/remoteoutputservice", "//pkg/proto/tmp_installer", "//pkg/sync", "@com_github_bazelbuild_remote_apis//build/bazel/remote/execution/v2:execution", @@ -64,6 +65,7 @@ go_library( "@org_golang_google_grpc//codes", "@org_golang_google_grpc//status", "@org_golang_google_protobuf//encoding/protojson", + "@org_golang_google_protobuf//types/known/anypb", "@org_golang_google_protobuf//types/known/emptypb", ], ) @@ -87,8 +89,9 @@ go_test( deps = [ ":virtual", "//internal/mock", + "//pkg/proto/bazeloutputservice", + "//pkg/proto/bazeloutputservice/rev2", "//pkg/proto/outputpathpersistency", - "//pkg/proto/remoteoutputservice", "//pkg/proto/tmp_installer", "@com_github_bazelbuild_remote_apis//build/bazel/remote/execution/v2:execution", "@com_github_buildbarn_bb_storage//pkg/auth", @@ -103,6 +106,7 @@ go_test( "@com_github_stretchr_testify//require", "@org_golang_google_grpc//codes", "@org_golang_google_grpc//status", + "@org_golang_google_protobuf//types/known/anypb", "@org_golang_google_protobuf//types/known/structpb", ], ) diff --git a/pkg/filesystem/virtual/base_symlink_factory.go b/pkg/filesystem/virtual/base_symlink_factory.go index 9762a6dc..97713507 100644 --- a/pkg/filesystem/virtual/base_symlink_factory.go +++ b/pkg/filesystem/virtual/base_symlink_factory.go @@ -5,8 +5,8 @@ import ( "unicode/utf8" remoteexecution "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2" + "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice" "github.com/buildbarn/bb-remote-execution/pkg/proto/outputpathpersistency" - "github.com/buildbarn/bb-remote-execution/pkg/proto/remoteoutputservice" "github.com/buildbarn/bb-storage/pkg/digest" "github.com/buildbarn/bb-storage/pkg/filesystem" "github.com/buildbarn/bb-storage/pkg/filesystem/path" @@ -37,14 +37,14 @@ func (f symlink) Readlink() (string, error) { return string(f.target), nil } -func (f symlink) GetOutputServiceFileStatus(digestFunction *digest.Function) (*remoteoutputservice.FileStatus, error) { +func (f symlink) GetBazelOutputServiceStat(digestFunction *digest.Function) (*bazeloutputservice.BatchStatResponse_Stat, error) { target, err := f.Readlink() if err != nil { return nil, err } - return &remoteoutputservice.FileStatus{ - FileType: &remoteoutputservice.FileStatus_Symlink_{ - Symlink: &remoteoutputservice.FileStatus_Symlink{ + return &bazeloutputservice.BatchStatResponse_Stat{ + Type: &bazeloutputservice.BatchStatResponse_Stat_Symlink_{ + Symlink: &bazeloutputservice.BatchStatResponse_Stat_Symlink{ Target: target, }, }, diff --git a/pkg/filesystem/virtual/blob_access_cas_file_factory.go b/pkg/filesystem/virtual/blob_access_cas_file_factory.go index 9ad10a8a..5f07cd6c 100644 --- a/pkg/filesystem/virtual/blob_access_cas_file_factory.go +++ b/pkg/filesystem/virtual/blob_access_cas_file_factory.go @@ -5,13 +5,18 @@ import ( "syscall" remoteexecution "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2" + "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice" + bazeloutputservicerev2 "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice/rev2" "github.com/buildbarn/bb-remote-execution/pkg/proto/outputpathpersistency" - "github.com/buildbarn/bb-remote-execution/pkg/proto/remoteoutputservice" "github.com/buildbarn/bb-storage/pkg/blobstore" "github.com/buildbarn/bb-storage/pkg/digest" "github.com/buildbarn/bb-storage/pkg/filesystem" "github.com/buildbarn/bb-storage/pkg/filesystem/path" "github.com/buildbarn/bb-storage/pkg/util" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/anypb" ) type blobAccessCASFileFactory struct { @@ -83,17 +88,21 @@ func (f *blobAccessCASFile) GetContainingDigests() digest.Set { return f.digest.ToSingletonSet() } -func (f *blobAccessCASFile) GetOutputServiceFileStatus(digestFunction *digest.Function) (*remoteoutputservice.FileStatus, error) { - fileStatusFile := remoteoutputservice.FileStatus_File{} - if digestFunction != nil { - // Assume that the file uses the same hash algorithm as - // the provided digest function. Incompatible files are - // removed from storage at the start of the build. - fileStatusFile.Digest = f.digest.GetProto() +func (f *blobAccessCASFile) GetBazelOutputServiceStat(digestFunction *digest.Function) (*bazeloutputservice.BatchStatResponse_Stat, error) { + // Assume that the file uses the same hash algorithm as + // the provided digest function. Incompatible files are + // removed from storage at the start of the build. + locator, err := anypb.New(&bazeloutputservicerev2.FileArtifactLocator{ + Digest: f.digest.GetProto(), + }) + if err != nil { + return nil, status.Error(codes.Internal, "Failed to marshal locator") } - return &remoteoutputservice.FileStatus{ - FileType: &remoteoutputservice.FileStatus_File_{ - File: &fileStatusFile, + return &bazeloutputservice.BatchStatResponse_Stat{ + Type: &bazeloutputservice.BatchStatResponse_Stat_File_{ + File: &bazeloutputservice.BatchStatResponse_Stat_File{ + Locator: locator, + }, }, }, nil } @@ -147,7 +156,7 @@ func (f *blobAccessCASFile) VirtualClose(shareAccess ShareMask) {} func (f *blobAccessCASFile) virtualSetAttributesCommon(in *Attributes) Status { // TODO: chmod() calls against CAS backed files should not be // permitted. Unfortunately, we allowed it in the past. When - // using bb_clientd's Remote Output Service, we see Bazel + // using bb_clientd's Bazel Output Service, we see Bazel // performing such calls, so we can't forbid it right now. /* if _, ok := in.GetPermissions(); ok { diff --git a/pkg/filesystem/virtual/blob_access_cas_file_factory_test.go b/pkg/filesystem/virtual/blob_access_cas_file_factory_test.go index f158dc4f..32e0b00e 100644 --- a/pkg/filesystem/virtual/blob_access_cas_file_factory_test.go +++ b/pkg/filesystem/virtual/blob_access_cas_file_factory_test.go @@ -7,14 +7,17 @@ import ( remoteexecution "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2" "github.com/buildbarn/bb-remote-execution/internal/mock" "github.com/buildbarn/bb-remote-execution/pkg/filesystem/virtual" + "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice" + bazeloutputservicerev2 "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice/rev2" "github.com/buildbarn/bb-remote-execution/pkg/proto/outputpathpersistency" - "github.com/buildbarn/bb-remote-execution/pkg/proto/remoteoutputservice" "github.com/buildbarn/bb-storage/pkg/digest" "github.com/buildbarn/bb-storage/pkg/filesystem" "github.com/buildbarn/bb-storage/pkg/filesystem/path" "github.com/buildbarn/bb-storage/pkg/testutil" "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" + + "google.golang.org/protobuf/types/known/anypb" ) const blobAccessCASFileFactoryAttributesMask = virtual.AttributesMaskChangeID | @@ -98,7 +101,7 @@ func TestBlobAccessCASFileFactoryGetContainingDigests(t *testing.T) { require.Equal(t, digest.ToSingletonSet(), f.GetContainingDigests()) } -func TestBlobAccessCASFileFactoryGetOutputServiceFileStatus(t *testing.T) { +func TestBlobAccessCASFileFactoryGetBazelOutputServiceStat(t *testing.T) { ctrl, ctx := gomock.WithContext(context.Background(), t) contentAddressableStorage := mock.NewMockBlobAccess(ctrl) @@ -121,29 +124,23 @@ func TestBlobAccessCASFileFactoryGetOutputServiceFileStatus(t *testing.T) { SetSizeBytes(123), &out) - // When the provided digest.Function is nil, we should only - // report that this is a file. - fileStatus, err := f.GetOutputServiceFileStatus(nil) + // We should return the digest of the file as well. There is no + // need to perform any I/O, as the digest is already embedded in + // the file. + digestFunction := digest.GetDigestFunction() + fileStatus, err := f.GetBazelOutputServiceStat(&digestFunction) require.NoError(t, err) - testutil.RequireEqualProto(t, &remoteoutputservice.FileStatus{ - FileType: &remoteoutputservice.FileStatus_File_{ - File: &remoteoutputservice.FileStatus_File{}, + locator, err := anypb.New(&bazeloutputservicerev2.FileArtifactLocator{ + Digest: &remoteexecution.Digest{ + Hash: "8b1a9953c4611296a827abf8c47804d7", + SizeBytes: 123, }, - }, fileStatus) - - // When the provided digest.Function is set, we should return - // the digest of the file as well. There is no need to perform - // any I/O, as the digest is already embedded in the file. - digestFunction := digest.GetDigestFunction() - fileStatus, err = f.GetOutputServiceFileStatus(&digestFunction) + }) require.NoError(t, err) - testutil.RequireEqualProto(t, &remoteoutputservice.FileStatus{ - FileType: &remoteoutputservice.FileStatus_File_{ - File: &remoteoutputservice.FileStatus_File{ - Digest: &remoteexecution.Digest{ - Hash: "8b1a9953c4611296a827abf8c47804d7", - SizeBytes: 123, - }, + testutil.RequireEqualProto(t, &bazeloutputservice.BatchStatResponse_Stat{ + Type: &bazeloutputservice.BatchStatResponse_Stat_File_{ + File: &bazeloutputservice.BatchStatResponse_Stat_File{ + Locator: locator, }, }, }, fileStatus) diff --git a/pkg/filesystem/virtual/native_leaf.go b/pkg/filesystem/virtual/native_leaf.go index 42df7da3..322268d7 100644 --- a/pkg/filesystem/virtual/native_leaf.go +++ b/pkg/filesystem/virtual/native_leaf.go @@ -3,8 +3,8 @@ package virtual import ( "context" + "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice" "github.com/buildbarn/bb-remote-execution/pkg/proto/outputpathpersistency" - "github.com/buildbarn/bb-remote-execution/pkg/proto/remoteoutputservice" "github.com/buildbarn/bb-storage/pkg/blobstore" "github.com/buildbarn/bb-storage/pkg/digest" "github.com/buildbarn/bb-storage/pkg/filesystem/path" @@ -40,16 +40,13 @@ type NativeLeaf interface { // the file still exists in its entirety, and to prevent that // the file is removed in the nearby future. GetContainingDigests() digest.Set - // GetOutputServiceFileStatus() returns the status of the leaf - // node in the form of a FileStatus message that is used by the - // Remote Output Service protocol. - // - // When digestFunction is not nil, a FileStatus responses for - // regular files should include the digest. - GetOutputServiceFileStatus(digestFunction *digest.Function) (*remoteoutputservice.FileStatus, error) - // GetOutputServiceFileStatus() appends a FileNode or - // SymlinkNode entry to a Directory message that is used to - // persist the state of a Remote Output Service output path to + // GetBazelOutputServiceStat() returns the status of the leaf + // node in the form of a Status message that is used by the + // Bazel Output Service protocol. + GetBazelOutputServiceStat(digestFunction *digest.Function) (*bazeloutputservice.BatchStatResponse_Stat, error) + // AppendOutputPathPersistencyDirectoryNode() appends a FileNode + // or SymlinkNode entry to a Directory message that is used to + // persist the state of a Bazel Output Service output path to // disk. AppendOutputPathPersistencyDirectoryNode(directory *outputpathpersistency.Directory, name path.Component) } diff --git a/pkg/filesystem/virtual/pool_backed_file_allocator.go b/pkg/filesystem/virtual/pool_backed_file_allocator.go index 56d35dc6..b54444f2 100644 --- a/pkg/filesystem/virtual/pool_backed_file_allocator.go +++ b/pkg/filesystem/virtual/pool_backed_file_allocator.go @@ -10,8 +10,9 @@ import ( remoteexecution "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2" re_filesystem "github.com/buildbarn/bb-remote-execution/pkg/filesystem" + "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice" + bazeloutputservicerev2 "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice/rev2" "github.com/buildbarn/bb-remote-execution/pkg/proto/outputpathpersistency" - "github.com/buildbarn/bb-remote-execution/pkg/proto/remoteoutputservice" "github.com/buildbarn/bb-storage/pkg/blobstore" "github.com/buildbarn/bb-storage/pkg/blobstore/buffer" "github.com/buildbarn/bb-storage/pkg/digest" @@ -22,6 +23,7 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/anypb" ) var ( @@ -279,38 +281,43 @@ func (f *fileBackedFile) GetContainingDigests() digest.Set { return digest.EmptySet } -func (f *fileBackedFile) GetOutputServiceFileStatus(digestFunction *digest.Function) (*remoteoutputservice.FileStatus, error) { - fileStatus := &remoteoutputservice.FileStatus_File{} - if digestFunction != nil { - f.lock.Lock() - if f.writableDescriptorsCount == 0 { - success := f.acquireFrozenDescriptorLocked() - f.lock.Unlock() - if !success { - return nil, status.Error(codes.NotFound, "File was unlinked before digest computation could start") - } - defer f.releaseFrozenDescriptor() +func (f *fileBackedFile) GetBazelOutputServiceStat(digestFunction *digest.Function) (*bazeloutputservice.BatchStatResponse_Stat, error) { + var locator *anypb.Any + f.lock.Lock() + if f.writableDescriptorsCount == 0 { + success := f.acquireFrozenDescriptorLocked() + f.lock.Unlock() + if !success { + return nil, status.Error(codes.NotFound, "File was unlinked before digest computation could start") + } + defer f.releaseFrozenDescriptor() - blobDigest, err := f.updateCachedDigest(*digestFunction) - if err != nil { - return nil, err - } - fileStatus.Digest = blobDigest.GetProto() - } else { - // Don't report the digest if the file is opened for - // writing. The kernel may still hold on to data that - // needs to be written, meaning that digests computed on - // this end are inaccurate. - // - // By not reporting the digest, the client will - // recompute it itself. This will be consistent with - // what's stored in the kernel's page cache. - f.lock.Unlock() + blobDigest, err := f.updateCachedDigest(*digestFunction) + if err != nil { + return nil, err } + locator, err = anypb.New(&bazeloutputservicerev2.FileArtifactLocator{ + Digest: blobDigest.GetProto(), + }) + if err != nil { + return nil, status.Error(codes.Internal, "Failed to marshal locator") + } + } else { + // Don't report the digest if the file is opened for + // writing. The kernel may still hold on to data that + // needs to be written, meaning that digests computed on + // this end are inaccurate. + // + // By not reporting the digest, the client will + // recompute it itself. This will be consistent with + // what's stored in the kernel's page cache. + f.lock.Unlock() } - return &remoteoutputservice.FileStatus{ - FileType: &remoteoutputservice.FileStatus_File_{ - File: fileStatus, + return &bazeloutputservice.BatchStatResponse_Stat{ + Type: &bazeloutputservice.BatchStatResponse_Stat_File_{ + File: &bazeloutputservice.BatchStatResponse_Stat_File{ + Locator: locator, + }, }, }, nil } diff --git a/pkg/filesystem/virtual/pool_backed_file_allocator_test.go b/pkg/filesystem/virtual/pool_backed_file_allocator_test.go index 600843a5..ee07411a 100644 --- a/pkg/filesystem/virtual/pool_backed_file_allocator_test.go +++ b/pkg/filesystem/virtual/pool_backed_file_allocator_test.go @@ -9,8 +9,9 @@ import ( remoteexecution "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2" "github.com/buildbarn/bb-remote-execution/internal/mock" "github.com/buildbarn/bb-remote-execution/pkg/filesystem/virtual" + "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice" + bazeloutputservicerev2 "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice/rev2" "github.com/buildbarn/bb-remote-execution/pkg/proto/outputpathpersistency" - "github.com/buildbarn/bb-remote-execution/pkg/proto/remoteoutputservice" "github.com/buildbarn/bb-storage/pkg/blobstore/buffer" "github.com/buildbarn/bb-storage/pkg/digest" "github.com/buildbarn/bb-storage/pkg/filesystem" @@ -21,9 +22,10 @@ import ( "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/anypb" ) -func TestPoolBackedFileAllocatorGetOutputServiceFileStatus(t *testing.T) { +func TestPoolBackedFileAllocatorGetBazelOutputServiceStat(t *testing.T) { ctrl, ctx := gomock.WithContext(context.Background(), t) // Create a file and initialize it with some contents. @@ -46,43 +48,36 @@ func TestPoolBackedFileAllocatorGetOutputServiceFileStatus(t *testing.T) { // can compute its value properly, as unwritten data may still // be present in the page cache. digestFunction1 := digest.MustNewFunction("Hello", remoteexecution.DigestFunction_MD5) - fileStatus, err := f.GetOutputServiceFileStatus(&digestFunction1) + fileStatus, err := f.GetBazelOutputServiceStat(&digestFunction1) require.NoError(t, err) - testutil.RequireEqualProto(t, &remoteoutputservice.FileStatus{ - FileType: &remoteoutputservice.FileStatus_File_{ - File: &remoteoutputservice.FileStatus_File{}, + testutil.RequireEqualProto(t, &bazeloutputservice.BatchStatResponse_Stat{ + Type: &bazeloutputservice.BatchStatResponse_Stat_File_{ + File: &bazeloutputservice.BatchStatResponse_Stat_File{}, }, }, fileStatus) f.VirtualClose(virtual.ShareMaskWrite) - // When the provided digest.Function is nil, we should only - // report that this is a file. - fileStatus, err = f.GetOutputServiceFileStatus(nil) - require.NoError(t, err) - testutil.RequireEqualProto(t, &remoteoutputservice.FileStatus{ - FileType: &remoteoutputservice.FileStatus_File_{ - File: &remoteoutputservice.FileStatus_File{}, - }, - }, fileStatus) - - // When the provided digest.Function is set, the digest of the - // file should be computed on demand. This is more efficient - // than letting the build client read the file through the FUSE - // file system. + // The digest of the file should be computed on demand. This is + // more efficient than letting the build client read the file + // through the FUSE file system. underlyingFile.EXPECT().ReadAt(gomock.Any(), int64(0)).DoAndReturn( func(p []byte, off int64) (int, error) { return copy(p, "Hello"), io.EOF }) - fileStatus, err = f.GetOutputServiceFileStatus(&digestFunction1) + fileStatus, err = f.GetBazelOutputServiceStat(&digestFunction1) require.NoError(t, err) - testutil.RequireEqualProto(t, &remoteoutputservice.FileStatus{ - FileType: &remoteoutputservice.FileStatus_File_{ - File: &remoteoutputservice.FileStatus_File{ - Digest: &remoteexecution.Digest{ - Hash: "8b1a9953c4611296a827abf8c47804d7", - SizeBytes: 5, - }, + locator, err := anypb.New(&bazeloutputservicerev2.FileArtifactLocator{ + Digest: &remoteexecution.Digest{ + Hash: "8b1a9953c4611296a827abf8c47804d7", + SizeBytes: 5, + }, + }) + require.NoError(t, err) + testutil.RequireEqualProto(t, &bazeloutputservice.BatchStatResponse_Stat{ + Type: &bazeloutputservice.BatchStatResponse_Stat_File_{ + File: &bazeloutputservice.BatchStatResponse_Stat_File{ + Locator: locator, }, }, }, fileStatus) @@ -90,21 +85,18 @@ func TestPoolBackedFileAllocatorGetOutputServiceFileStatus(t *testing.T) { // Calling the function a second time should not generate any // reads against the file, as the contents of the file have not // changed. A cached value should be returned. - fileStatus, err = f.GetOutputServiceFileStatus(&digestFunction1) + fileStatus, err = f.GetBazelOutputServiceStat(&digestFunction1) require.NoError(t, err) - testutil.RequireEqualProto(t, &remoteoutputservice.FileStatus{ - FileType: &remoteoutputservice.FileStatus_File_{ - File: &remoteoutputservice.FileStatus_File{ - Digest: &remoteexecution.Digest{ - Hash: "8b1a9953c4611296a827abf8c47804d7", - SizeBytes: 5, - }, + testutil.RequireEqualProto(t, &bazeloutputservice.BatchStatResponse_Stat{ + Type: &bazeloutputservice.BatchStatResponse_Stat_File_{ + File: &bazeloutputservice.BatchStatResponse_Stat_File{ + Locator: locator, }, }, }, fileStatus) // Change the file's contents to invalidate the cached digest. A - // successive call to GetOutputServiceFileStatus() should + // successive call to GetBazelOutputServiceStat() should // recompute the digest. require.Equal(t, virtual.StatusOK, f.VirtualOpenSelf(ctx, virtual.ShareMaskWrite, &virtual.OpenExistingOptions{}, 0, &virtual.Attributes{})) underlyingFile.EXPECT().WriteAt([]byte(" world"), int64(5)).Return(6, nil) @@ -117,15 +109,19 @@ func TestPoolBackedFileAllocatorGetOutputServiceFileStatus(t *testing.T) { func(p []byte, off int64) (int, error) { return copy(p, "Hello world"), io.EOF }) - fileStatus, err = f.GetOutputServiceFileStatus(&digestFunction1) + fileStatus, err = f.GetBazelOutputServiceStat(&digestFunction1) require.NoError(t, err) - testutil.RequireEqualProto(t, &remoteoutputservice.FileStatus{ - FileType: &remoteoutputservice.FileStatus_File_{ - File: &remoteoutputservice.FileStatus_File{ - Digest: &remoteexecution.Digest{ - Hash: "3e25960a79dbc69b674cd4ec67a72c62", - SizeBytes: 11, - }, + locator, err = anypb.New(&bazeloutputservicerev2.FileArtifactLocator{ + Digest: &remoteexecution.Digest{ + Hash: "3e25960a79dbc69b674cd4ec67a72c62", + SizeBytes: 11, + }, + }) + require.NoError(t, err) + testutil.RequireEqualProto(t, &bazeloutputservice.BatchStatResponse_Stat{ + Type: &bazeloutputservice.BatchStatResponse_Stat_File_{ + File: &bazeloutputservice.BatchStatResponse_Stat_File{ + Locator: locator, }, }, }, fileStatus) @@ -137,15 +133,19 @@ func TestPoolBackedFileAllocatorGetOutputServiceFileStatus(t *testing.T) { return copy(p, "Hello world"), io.EOF }) digestFunction2 := digest.MustNewFunction("Hello", remoteexecution.DigestFunction_SHA256) - fileStatus, err = f.GetOutputServiceFileStatus(&digestFunction2) + fileStatus, err = f.GetBazelOutputServiceStat(&digestFunction2) require.NoError(t, err) - testutil.RequireEqualProto(t, &remoteoutputservice.FileStatus{ - FileType: &remoteoutputservice.FileStatus_File_{ - File: &remoteoutputservice.FileStatus_File{ - Digest: &remoteexecution.Digest{ - Hash: "64ec88ca00b268e5ba1a35678a1b5316d212f4f366b2477232534a8aeca37f3c", - SizeBytes: 11, - }, + locator, err = anypb.New(&bazeloutputservicerev2.FileArtifactLocator{ + Digest: &remoteexecution.Digest{ + Hash: "64ec88ca00b268e5ba1a35678a1b5316d212f4f366b2477232534a8aeca37f3c", + SizeBytes: 11, + }, + }) + require.NoError(t, err) + testutil.RequireEqualProto(t, &bazeloutputservice.BatchStatResponse_Stat{ + Type: &bazeloutputservice.BatchStatResponse_Stat_File_{ + File: &bazeloutputservice.BatchStatResponse_Stat_File{ + Locator: locator, }, }, }, fileStatus) diff --git a/pkg/filesystem/virtual/special_file.go b/pkg/filesystem/virtual/special_file.go index 0189ef79..d080f626 100644 --- a/pkg/filesystem/virtual/special_file.go +++ b/pkg/filesystem/virtual/special_file.go @@ -4,8 +4,8 @@ import ( "context" "syscall" + "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice" "github.com/buildbarn/bb-remote-execution/pkg/proto/outputpathpersistency" - "github.com/buildbarn/bb-remote-execution/pkg/proto/remoteoutputservice" "github.com/buildbarn/bb-storage/pkg/digest" "github.com/buildbarn/bb-storage/pkg/filesystem" "github.com/buildbarn/bb-storage/pkg/filesystem/path" @@ -33,8 +33,8 @@ func (f *specialFile) Readlink() (string, error) { return "", syscall.EINVAL } -func (f *specialFile) GetOutputServiceFileStatus(digestFunction *digest.Function) (*remoteoutputservice.FileStatus, error) { - return &remoteoutputservice.FileStatus{}, nil +func (f *specialFile) GetBazelOutputServiceStat(digestFunction *digest.Function) (*bazeloutputservice.BatchStatResponse_Stat, error) { + return &bazeloutputservice.BatchStatResponse_Stat{}, nil } func (f *specialFile) AppendOutputPathPersistencyDirectoryNode(directory *outputpathpersistency.Directory, name path.Component) { diff --git a/pkg/filesystem/virtual/user_settable_symlink.go b/pkg/filesystem/virtual/user_settable_symlink.go index fd45752f..697a23d7 100644 --- a/pkg/filesystem/virtual/user_settable_symlink.go +++ b/pkg/filesystem/virtual/user_settable_symlink.go @@ -4,8 +4,8 @@ import ( "context" "sync" + "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice" "github.com/buildbarn/bb-remote-execution/pkg/proto/outputpathpersistency" - "github.com/buildbarn/bb-remote-execution/pkg/proto/remoteoutputservice" "github.com/buildbarn/bb-remote-execution/pkg/proto/tmp_installer" "github.com/buildbarn/bb-storage/pkg/auth" "github.com/buildbarn/bb-storage/pkg/digest" @@ -80,12 +80,12 @@ func (f *UserSettableSymlink) Readlink() (string, error) { return "", status.Error(codes.InvalidArgument, "Target of user settable symlinks can only be obtained through the virtual file system") } -// GetOutputServiceFileStatus returns the status of the symbolic link, -// so that it may be reported through the Remote Output Service. This -// method is a no-op, as this type is not used in combination with the -// Remote Output Service. -func (f *UserSettableSymlink) GetOutputServiceFileStatus(digestFunction *digest.Function) (*remoteoutputservice.FileStatus, error) { - return &remoteoutputservice.FileStatus{}, nil +// GetBazelOutputServiceStat returns the status of the symbolic link, so +// that it may be reported through the Bazel Output Service. This method +// is a no-op, as this type is not used in combination with the Bazel +// Output Service. +func (f *UserSettableSymlink) GetBazelOutputServiceStat(digestFunction *digest.Function) (*bazeloutputservice.BatchStatResponse_Stat, error) { + return &bazeloutputservice.BatchStatResponse_Stat{}, nil } // AppendOutputPathPersistencyDirectoryNode returns the status of the diff --git a/pkg/proto/bazeloutputservice/BUILD.bazel b/pkg/proto/bazeloutputservice/BUILD.bazel new file mode 100644 index 00000000..f31fe524 --- /dev/null +++ b/pkg/proto/bazeloutputservice/BUILD.bazel @@ -0,0 +1,29 @@ +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") + +proto_library( + name = "bazeloutputservice_proto", + srcs = ["bazel_output_service.proto"], + visibility = ["//visibility:public"], + deps = [ + "@com_google_protobuf//:any_proto", + "@googleapis//google/rpc:status_proto", + ], +) + +go_proto_library( + name = "bazeloutputservice_go_proto", + compilers = ["@io_bazel_rules_go//proto:go_grpc"], + importpath = "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice", + proto = ":bazeloutputservice_proto", + visibility = ["//visibility:public"], + deps = ["@org_golang_google_genproto_googleapis_rpc//status"], +) + +go_library( + name = "bazeloutputservice", + embed = [":bazeloutputservice_go_proto"], + importpath = "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice", + visibility = ["//visibility:public"], +) diff --git a/pkg/proto/bazeloutputservice/bazel_output_service.pb.go b/pkg/proto/bazeloutputservice/bazel_output_service.pb.go new file mode 100644 index 00000000..99578539 --- /dev/null +++ b/pkg/proto/bazeloutputservice/bazel_output_service.pb.go @@ -0,0 +1,1940 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.32.0 +// protoc v4.23.4 +// source: pkg/proto/bazeloutputservice/bazel_output_service.proto + +package bazeloutputservice + +import ( + context "context" + status "google.golang.org/genproto/googleapis/rpc/status" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status1 "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type CleanRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OutputBaseId string `protobuf:"bytes,1,opt,name=output_base_id,json=outputBaseId,proto3" json:"output_base_id,omitempty"` +} + +func (x *CleanRequest) Reset() { + *x = CleanRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CleanRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CleanRequest) ProtoMessage() {} + +func (x *CleanRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CleanRequest.ProtoReflect.Descriptor instead. +func (*CleanRequest) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{0} +} + +func (x *CleanRequest) GetOutputBaseId() string { + if x != nil { + return x.OutputBaseId + } + return "" +} + +type CleanResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CleanResponse) Reset() { + *x = CleanResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CleanResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CleanResponse) ProtoMessage() {} + +func (x *CleanResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CleanResponse.ProtoReflect.Descriptor instead. +func (*CleanResponse) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{1} +} + +type StartBuildRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Version int32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` + OutputBaseId string `protobuf:"bytes,2,opt,name=output_base_id,json=outputBaseId,proto3" json:"output_base_id,omitempty"` + BuildId string `protobuf:"bytes,3,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` + Args *anypb.Any `protobuf:"bytes,4,opt,name=args,proto3" json:"args,omitempty"` + OutputPathPrefix string `protobuf:"bytes,5,opt,name=output_path_prefix,json=outputPathPrefix,proto3" json:"output_path_prefix,omitempty"` + OutputPathAliases map[string]string `protobuf:"bytes,6,rep,name=output_path_aliases,json=outputPathAliases,proto3" json:"output_path_aliases,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *StartBuildRequest) Reset() { + *x = StartBuildRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartBuildRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartBuildRequest) ProtoMessage() {} + +func (x *StartBuildRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartBuildRequest.ProtoReflect.Descriptor instead. +func (*StartBuildRequest) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{2} +} + +func (x *StartBuildRequest) GetVersion() int32 { + if x != nil { + return x.Version + } + return 0 +} + +func (x *StartBuildRequest) GetOutputBaseId() string { + if x != nil { + return x.OutputBaseId + } + return "" +} + +func (x *StartBuildRequest) GetBuildId() string { + if x != nil { + return x.BuildId + } + return "" +} + +func (x *StartBuildRequest) GetArgs() *anypb.Any { + if x != nil { + return x.Args + } + return nil +} + +func (x *StartBuildRequest) GetOutputPathPrefix() string { + if x != nil { + return x.OutputPathPrefix + } + return "" +} + +func (x *StartBuildRequest) GetOutputPathAliases() map[string]string { + if x != nil { + return x.OutputPathAliases + } + return nil +} + +type StartBuildResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + InitialOutputPathContents *InitialOutputPathContents `protobuf:"bytes,1,opt,name=initial_output_path_contents,json=initialOutputPathContents,proto3" json:"initial_output_path_contents,omitempty"` + OutputPathSuffix string `protobuf:"bytes,2,opt,name=output_path_suffix,json=outputPathSuffix,proto3" json:"output_path_suffix,omitempty"` +} + +func (x *StartBuildResponse) Reset() { + *x = StartBuildResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartBuildResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartBuildResponse) ProtoMessage() {} + +func (x *StartBuildResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartBuildResponse.ProtoReflect.Descriptor instead. +func (*StartBuildResponse) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{3} +} + +func (x *StartBuildResponse) GetInitialOutputPathContents() *InitialOutputPathContents { + if x != nil { + return x.InitialOutputPathContents + } + return nil +} + +func (x *StartBuildResponse) GetOutputPathSuffix() string { + if x != nil { + return x.OutputPathSuffix + } + return "" +} + +type InitialOutputPathContents struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` + ModifiedPathPrefixes []string `protobuf:"bytes,2,rep,name=modified_path_prefixes,json=modifiedPathPrefixes,proto3" json:"modified_path_prefixes,omitempty"` +} + +func (x *InitialOutputPathContents) Reset() { + *x = InitialOutputPathContents{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InitialOutputPathContents) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InitialOutputPathContents) ProtoMessage() {} + +func (x *InitialOutputPathContents) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InitialOutputPathContents.ProtoReflect.Descriptor instead. +func (*InitialOutputPathContents) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{4} +} + +func (x *InitialOutputPathContents) GetBuildId() string { + if x != nil { + return x.BuildId + } + return "" +} + +func (x *InitialOutputPathContents) GetModifiedPathPrefixes() []string { + if x != nil { + return x.ModifiedPathPrefixes + } + return nil +} + +type StageArtifactsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` + Artifacts []*StageArtifactsRequest_Artifact `protobuf:"bytes,2,rep,name=artifacts,proto3" json:"artifacts,omitempty"` +} + +func (x *StageArtifactsRequest) Reset() { + *x = StageArtifactsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StageArtifactsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StageArtifactsRequest) ProtoMessage() {} + +func (x *StageArtifactsRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StageArtifactsRequest.ProtoReflect.Descriptor instead. +func (*StageArtifactsRequest) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{5} +} + +func (x *StageArtifactsRequest) GetBuildId() string { + if x != nil { + return x.BuildId + } + return "" +} + +func (x *StageArtifactsRequest) GetArtifacts() []*StageArtifactsRequest_Artifact { + if x != nil { + return x.Artifacts + } + return nil +} + +type StageArtifactsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Responses []*StageArtifactsResponse_Response `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses,omitempty"` +} + +func (x *StageArtifactsResponse) Reset() { + *x = StageArtifactsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StageArtifactsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StageArtifactsResponse) ProtoMessage() {} + +func (x *StageArtifactsResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StageArtifactsResponse.ProtoReflect.Descriptor instead. +func (*StageArtifactsResponse) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{6} +} + +func (x *StageArtifactsResponse) GetResponses() []*StageArtifactsResponse_Response { + if x != nil { + return x.Responses + } + return nil +} + +type FinalizeArtifactsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` + Artifacts []*FinalizeArtifactsRequest_Artifact `protobuf:"bytes,2,rep,name=artifacts,proto3" json:"artifacts,omitempty"` +} + +func (x *FinalizeArtifactsRequest) Reset() { + *x = FinalizeArtifactsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FinalizeArtifactsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FinalizeArtifactsRequest) ProtoMessage() {} + +func (x *FinalizeArtifactsRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FinalizeArtifactsRequest.ProtoReflect.Descriptor instead. +func (*FinalizeArtifactsRequest) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{7} +} + +func (x *FinalizeArtifactsRequest) GetBuildId() string { + if x != nil { + return x.BuildId + } + return "" +} + +func (x *FinalizeArtifactsRequest) GetArtifacts() []*FinalizeArtifactsRequest_Artifact { + if x != nil { + return x.Artifacts + } + return nil +} + +type FinalizeArtifactsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *FinalizeArtifactsResponse) Reset() { + *x = FinalizeArtifactsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FinalizeArtifactsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FinalizeArtifactsResponse) ProtoMessage() {} + +func (x *FinalizeArtifactsResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FinalizeArtifactsResponse.ProtoReflect.Descriptor instead. +func (*FinalizeArtifactsResponse) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{8} +} + +type FinalizeBuildRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` + BuildSuccessful bool `protobuf:"varint,2,opt,name=build_successful,json=buildSuccessful,proto3" json:"build_successful,omitempty"` +} + +func (x *FinalizeBuildRequest) Reset() { + *x = FinalizeBuildRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FinalizeBuildRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FinalizeBuildRequest) ProtoMessage() {} + +func (x *FinalizeBuildRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FinalizeBuildRequest.ProtoReflect.Descriptor instead. +func (*FinalizeBuildRequest) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{9} +} + +func (x *FinalizeBuildRequest) GetBuildId() string { + if x != nil { + return x.BuildId + } + return "" +} + +func (x *FinalizeBuildRequest) GetBuildSuccessful() bool { + if x != nil { + return x.BuildSuccessful + } + return false +} + +type FinalizeBuildResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *FinalizeBuildResponse) Reset() { + *x = FinalizeBuildResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FinalizeBuildResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FinalizeBuildResponse) ProtoMessage() {} + +func (x *FinalizeBuildResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FinalizeBuildResponse.ProtoReflect.Descriptor instead. +func (*FinalizeBuildResponse) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{10} +} + +type BatchStatRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` + Paths []string `protobuf:"bytes,2,rep,name=paths,proto3" json:"paths,omitempty"` +} + +func (x *BatchStatRequest) Reset() { + *x = BatchStatRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchStatRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchStatRequest) ProtoMessage() {} + +func (x *BatchStatRequest) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BatchStatRequest.ProtoReflect.Descriptor instead. +func (*BatchStatRequest) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{11} +} + +func (x *BatchStatRequest) GetBuildId() string { + if x != nil { + return x.BuildId + } + return "" +} + +func (x *BatchStatRequest) GetPaths() []string { + if x != nil { + return x.Paths + } + return nil +} + +type BatchStatResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Responses []*BatchStatResponse_StatResponse `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses,omitempty"` +} + +func (x *BatchStatResponse) Reset() { + *x = BatchStatResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchStatResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchStatResponse) ProtoMessage() {} + +func (x *BatchStatResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BatchStatResponse.ProtoReflect.Descriptor instead. +func (*BatchStatResponse) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{12} +} + +func (x *BatchStatResponse) GetResponses() []*BatchStatResponse_StatResponse { + if x != nil { + return x.Responses + } + return nil +} + +type StageArtifactsRequest_Artifact struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + Locator *anypb.Any `protobuf:"bytes,2,opt,name=locator,proto3" json:"locator,omitempty"` +} + +func (x *StageArtifactsRequest_Artifact) Reset() { + *x = StageArtifactsRequest_Artifact{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StageArtifactsRequest_Artifact) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StageArtifactsRequest_Artifact) ProtoMessage() {} + +func (x *StageArtifactsRequest_Artifact) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_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 StageArtifactsRequest_Artifact.ProtoReflect.Descriptor instead. +func (*StageArtifactsRequest_Artifact) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{5, 0} +} + +func (x *StageArtifactsRequest_Artifact) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *StageArtifactsRequest_Artifact) GetLocator() *anypb.Any { + if x != nil { + return x.Locator + } + return nil +} + +type StageArtifactsResponse_Response struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *StageArtifactsResponse_Response) Reset() { + *x = StageArtifactsResponse_Response{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StageArtifactsResponse_Response) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StageArtifactsResponse_Response) ProtoMessage() {} + +func (x *StageArtifactsResponse_Response) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_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 StageArtifactsResponse_Response.ProtoReflect.Descriptor instead. +func (*StageArtifactsResponse_Response) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{6, 0} +} + +func (x *StageArtifactsResponse_Response) GetStatus() *status.Status { + if x != nil { + return x.Status + } + return nil +} + +type FinalizeArtifactsRequest_Artifact struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + Locator *anypb.Any `protobuf:"bytes,2,opt,name=locator,proto3" json:"locator,omitempty"` +} + +func (x *FinalizeArtifactsRequest_Artifact) Reset() { + *x = FinalizeArtifactsRequest_Artifact{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FinalizeArtifactsRequest_Artifact) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FinalizeArtifactsRequest_Artifact) ProtoMessage() {} + +func (x *FinalizeArtifactsRequest_Artifact) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FinalizeArtifactsRequest_Artifact.ProtoReflect.Descriptor instead. +func (*FinalizeArtifactsRequest_Artifact) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{7, 0} +} + +func (x *FinalizeArtifactsRequest_Artifact) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *FinalizeArtifactsRequest_Artifact) GetLocator() *anypb.Any { + if x != nil { + return x.Locator + } + return nil +} + +type BatchStatResponse_StatResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Stat *BatchStatResponse_Stat `protobuf:"bytes,1,opt,name=stat,proto3" json:"stat,omitempty"` +} + +func (x *BatchStatResponse_StatResponse) Reset() { + *x = BatchStatResponse_StatResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchStatResponse_StatResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchStatResponse_StatResponse) ProtoMessage() {} + +func (x *BatchStatResponse_StatResponse) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BatchStatResponse_StatResponse.ProtoReflect.Descriptor instead. +func (*BatchStatResponse_StatResponse) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{12, 0} +} + +func (x *BatchStatResponse_StatResponse) GetStat() *BatchStatResponse_Stat { + if x != nil { + return x.Stat + } + return nil +} + +type BatchStatResponse_Stat struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *BatchStatResponse_Stat_File_ + // *BatchStatResponse_Stat_Symlink_ + // *BatchStatResponse_Stat_Directory_ + Type isBatchStatResponse_Stat_Type `protobuf_oneof:"type"` +} + +func (x *BatchStatResponse_Stat) Reset() { + *x = BatchStatResponse_Stat{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchStatResponse_Stat) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchStatResponse_Stat) ProtoMessage() {} + +func (x *BatchStatResponse_Stat) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BatchStatResponse_Stat.ProtoReflect.Descriptor instead. +func (*BatchStatResponse_Stat) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{12, 1} +} + +func (m *BatchStatResponse_Stat) GetType() isBatchStatResponse_Stat_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *BatchStatResponse_Stat) GetFile() *BatchStatResponse_Stat_File { + if x, ok := x.GetType().(*BatchStatResponse_Stat_File_); ok { + return x.File + } + return nil +} + +func (x *BatchStatResponse_Stat) GetSymlink() *BatchStatResponse_Stat_Symlink { + if x, ok := x.GetType().(*BatchStatResponse_Stat_Symlink_); ok { + return x.Symlink + } + return nil +} + +func (x *BatchStatResponse_Stat) GetDirectory() *BatchStatResponse_Stat_Directory { + if x, ok := x.GetType().(*BatchStatResponse_Stat_Directory_); ok { + return x.Directory + } + return nil +} + +type isBatchStatResponse_Stat_Type interface { + isBatchStatResponse_Stat_Type() +} + +type BatchStatResponse_Stat_File_ struct { + File *BatchStatResponse_Stat_File `protobuf:"bytes,1,opt,name=file,proto3,oneof"` +} + +type BatchStatResponse_Stat_Symlink_ struct { + Symlink *BatchStatResponse_Stat_Symlink `protobuf:"bytes,2,opt,name=symlink,proto3,oneof"` +} + +type BatchStatResponse_Stat_Directory_ struct { + Directory *BatchStatResponse_Stat_Directory `protobuf:"bytes,3,opt,name=directory,proto3,oneof"` +} + +func (*BatchStatResponse_Stat_File_) isBatchStatResponse_Stat_Type() {} + +func (*BatchStatResponse_Stat_Symlink_) isBatchStatResponse_Stat_Type() {} + +func (*BatchStatResponse_Stat_Directory_) isBatchStatResponse_Stat_Type() {} + +type BatchStatResponse_Stat_File struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Locator *anypb.Any `protobuf:"bytes,1,opt,name=locator,proto3" json:"locator,omitempty"` +} + +func (x *BatchStatResponse_Stat_File) Reset() { + *x = BatchStatResponse_Stat_File{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchStatResponse_Stat_File) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchStatResponse_Stat_File) ProtoMessage() {} + +func (x *BatchStatResponse_Stat_File) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BatchStatResponse_Stat_File.ProtoReflect.Descriptor instead. +func (*BatchStatResponse_Stat_File) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{12, 1, 0} +} + +func (x *BatchStatResponse_Stat_File) GetLocator() *anypb.Any { + if x != nil { + return x.Locator + } + return nil +} + +type BatchStatResponse_Stat_Symlink struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Target string `protobuf:"bytes,1,opt,name=target,proto3" json:"target,omitempty"` +} + +func (x *BatchStatResponse_Stat_Symlink) Reset() { + *x = BatchStatResponse_Stat_Symlink{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchStatResponse_Stat_Symlink) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchStatResponse_Stat_Symlink) ProtoMessage() {} + +func (x *BatchStatResponse_Stat_Symlink) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BatchStatResponse_Stat_Symlink.ProtoReflect.Descriptor instead. +func (*BatchStatResponse_Stat_Symlink) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{12, 1, 1} +} + +func (x *BatchStatResponse_Stat_Symlink) GetTarget() string { + if x != nil { + return x.Target + } + return "" +} + +type BatchStatResponse_Stat_Directory struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *BatchStatResponse_Stat_Directory) Reset() { + *x = BatchStatResponse_Stat_Directory{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BatchStatResponse_Stat_Directory) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatchStatResponse_Stat_Directory) ProtoMessage() {} + +func (x *BatchStatResponse_Stat_Directory) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BatchStatResponse_Stat_Directory.ProtoReflect.Descriptor instead. +func (*BatchStatResponse_Stat_Directory) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP(), []int{12, 1, 2} +} + +var File_pkg_proto_bazeloutputservice_bazel_output_service_proto protoreflect.FileDescriptor + +var file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDesc = []byte{ + 0x0a, 0x37, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x61, 0x7a, 0x65, + 0x6c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x62, 0x61, 0x7a, 0x65, 0x6c, + 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, + 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x34, 0x0a, 0x0c, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x62, 0x61, + 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x42, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0x0f, 0x0a, 0x0d, 0x43, 0x6c, 0x65, + 0x61, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xfc, 0x02, 0x0a, 0x11, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x61, 0x73, 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, 0x12, 0x28, 0x0a, 0x04, 0x61, + 0x72, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, + 0x04, 0x61, 0x72, 0x67, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x50, 0x72, 0x65, + 0x66, 0x69, 0x78, 0x12, 0x6e, 0x0a, 0x13, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, + 0x74, 0x68, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x3e, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, + 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x50, 0x61, 0x74, 0x68, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x41, 0x6c, 0x69, 0x61, + 0x73, 0x65, 0x73, 0x1a, 0x44, 0x0a, 0x16, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, + 0x68, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb4, 0x01, 0x0a, 0x12, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x70, 0x0a, 0x1c, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x49, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x19, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, + 0x22, 0x6c, 0x0a, 0x19, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 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, 0x34, 0x0a, 0x16, 0x6d, 0x6f, 0x64, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, + 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x22, 0xd6, + 0x01, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x67, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x52, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, + 0x61, 0x67, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x52, 0x09, 0x61, 0x72, + 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x4e, 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x2e, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x22, 0xa5, 0x01, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x67, + 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x53, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, + 0x67, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x1a, 0x36, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0xdc, 0x01, 0x0a, 0x18, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x55, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x62, 0x61, 0x7a, + 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x52, 0x09, 0x61, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x1a, 0x4e, + 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x2e, + 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x1b, + 0x0a, 0x19, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x0a, 0x14, 0x46, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 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, 0x29, + 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, + 0x75, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x22, 0x17, 0x0a, 0x15, 0x46, 0x69, 0x6e, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x43, 0x0a, 0x10, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x22, 0xa5, 0x04, 0x0a, 0x11, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, + 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x34, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x73, 0x1a, 0x50, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x40, 0x0a, 0x04, 0x73, 0x74, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x04, 0x73, + 0x74, 0x61, 0x74, 0x1a, 0xe9, 0x02, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x74, 0x12, 0x47, 0x0a, 0x04, + 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x62, 0x61, 0x7a, + 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x00, 0x52, + 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x50, 0x0a, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x2e, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x07, + 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x56, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x62, 0x61, 0x7a, + 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x48, 0x00, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x1a, + 0x36, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x74, + 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x21, 0x0a, 0x07, 0x53, 0x79, 0x6d, 0x6c, 0x69, + 0x6e, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0x0b, 0x0a, 0x09, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x32, + 0xf2, 0x04, 0x0a, 0x12, 0x42, 0x61, 0x7a, 0x65, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x05, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x12, + 0x22, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x0a, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x27, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, + 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x28, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0e, 0x53, 0x74, 0x61, + 0x67, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x62, 0x61, + 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, + 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, + 0x53, 0x74, 0x61, 0x67, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x2e, 0x2e, 0x62, 0x61, + 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x62, 0x61, + 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0d, + 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x2a, 0x2e, + 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x42, 0x75, 0x69, + 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x62, 0x61, 0x7a, 0x65, + 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x09, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, + 0x74, 0x61, 0x74, 0x12, 0x26, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x62, 0x61, + 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x53, 0x0a, 0x24, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x62, 0x75, 0x69, 0x6c, + 0x64, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x17, 0x42, 0x61, + 0x7a, 0x65, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x12, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x6f, 0x75, 0x74, 0x70, + 0x75, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescOnce sync.Once + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescData = file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDesc +) + +func file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescGZIP() []byte { + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescOnce.Do(func() { + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescData) + }) + return file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDescData +} + +var file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_pkg_proto_bazeloutputservice_bazel_output_service_proto_goTypes = []interface{}{ + (*CleanRequest)(nil), // 0: bazel_output_service.CleanRequest + (*CleanResponse)(nil), // 1: bazel_output_service.CleanResponse + (*StartBuildRequest)(nil), // 2: bazel_output_service.StartBuildRequest + (*StartBuildResponse)(nil), // 3: bazel_output_service.StartBuildResponse + (*InitialOutputPathContents)(nil), // 4: bazel_output_service.InitialOutputPathContents + (*StageArtifactsRequest)(nil), // 5: bazel_output_service.StageArtifactsRequest + (*StageArtifactsResponse)(nil), // 6: bazel_output_service.StageArtifactsResponse + (*FinalizeArtifactsRequest)(nil), // 7: bazel_output_service.FinalizeArtifactsRequest + (*FinalizeArtifactsResponse)(nil), // 8: bazel_output_service.FinalizeArtifactsResponse + (*FinalizeBuildRequest)(nil), // 9: bazel_output_service.FinalizeBuildRequest + (*FinalizeBuildResponse)(nil), // 10: bazel_output_service.FinalizeBuildResponse + (*BatchStatRequest)(nil), // 11: bazel_output_service.BatchStatRequest + (*BatchStatResponse)(nil), // 12: bazel_output_service.BatchStatResponse + nil, // 13: bazel_output_service.StartBuildRequest.OutputPathAliasesEntry + (*StageArtifactsRequest_Artifact)(nil), // 14: bazel_output_service.StageArtifactsRequest.Artifact + (*StageArtifactsResponse_Response)(nil), // 15: bazel_output_service.StageArtifactsResponse.Response + (*FinalizeArtifactsRequest_Artifact)(nil), // 16: bazel_output_service.FinalizeArtifactsRequest.Artifact + (*BatchStatResponse_StatResponse)(nil), // 17: bazel_output_service.BatchStatResponse.StatResponse + (*BatchStatResponse_Stat)(nil), // 18: bazel_output_service.BatchStatResponse.Stat + (*BatchStatResponse_Stat_File)(nil), // 19: bazel_output_service.BatchStatResponse.Stat.File + (*BatchStatResponse_Stat_Symlink)(nil), // 20: bazel_output_service.BatchStatResponse.Stat.Symlink + (*BatchStatResponse_Stat_Directory)(nil), // 21: bazel_output_service.BatchStatResponse.Stat.Directory + (*anypb.Any)(nil), // 22: google.protobuf.Any + (*status.Status)(nil), // 23: google.rpc.Status +} +var file_pkg_proto_bazeloutputservice_bazel_output_service_proto_depIdxs = []int32{ + 22, // 0: bazel_output_service.StartBuildRequest.args:type_name -> google.protobuf.Any + 13, // 1: bazel_output_service.StartBuildRequest.output_path_aliases:type_name -> bazel_output_service.StartBuildRequest.OutputPathAliasesEntry + 4, // 2: bazel_output_service.StartBuildResponse.initial_output_path_contents:type_name -> bazel_output_service.InitialOutputPathContents + 14, // 3: bazel_output_service.StageArtifactsRequest.artifacts:type_name -> bazel_output_service.StageArtifactsRequest.Artifact + 15, // 4: bazel_output_service.StageArtifactsResponse.responses:type_name -> bazel_output_service.StageArtifactsResponse.Response + 16, // 5: bazel_output_service.FinalizeArtifactsRequest.artifacts:type_name -> bazel_output_service.FinalizeArtifactsRequest.Artifact + 17, // 6: bazel_output_service.BatchStatResponse.responses:type_name -> bazel_output_service.BatchStatResponse.StatResponse + 22, // 7: bazel_output_service.StageArtifactsRequest.Artifact.locator:type_name -> google.protobuf.Any + 23, // 8: bazel_output_service.StageArtifactsResponse.Response.status:type_name -> google.rpc.Status + 22, // 9: bazel_output_service.FinalizeArtifactsRequest.Artifact.locator:type_name -> google.protobuf.Any + 18, // 10: bazel_output_service.BatchStatResponse.StatResponse.stat:type_name -> bazel_output_service.BatchStatResponse.Stat + 19, // 11: bazel_output_service.BatchStatResponse.Stat.file:type_name -> bazel_output_service.BatchStatResponse.Stat.File + 20, // 12: bazel_output_service.BatchStatResponse.Stat.symlink:type_name -> bazel_output_service.BatchStatResponse.Stat.Symlink + 21, // 13: bazel_output_service.BatchStatResponse.Stat.directory:type_name -> bazel_output_service.BatchStatResponse.Stat.Directory + 22, // 14: bazel_output_service.BatchStatResponse.Stat.File.locator:type_name -> google.protobuf.Any + 0, // 15: bazel_output_service.BazelOutputService.Clean:input_type -> bazel_output_service.CleanRequest + 2, // 16: bazel_output_service.BazelOutputService.StartBuild:input_type -> bazel_output_service.StartBuildRequest + 5, // 17: bazel_output_service.BazelOutputService.StageArtifacts:input_type -> bazel_output_service.StageArtifactsRequest + 7, // 18: bazel_output_service.BazelOutputService.FinalizeArtifacts:input_type -> bazel_output_service.FinalizeArtifactsRequest + 9, // 19: bazel_output_service.BazelOutputService.FinalizeBuild:input_type -> bazel_output_service.FinalizeBuildRequest + 11, // 20: bazel_output_service.BazelOutputService.BatchStat:input_type -> bazel_output_service.BatchStatRequest + 1, // 21: bazel_output_service.BazelOutputService.Clean:output_type -> bazel_output_service.CleanResponse + 3, // 22: bazel_output_service.BazelOutputService.StartBuild:output_type -> bazel_output_service.StartBuildResponse + 6, // 23: bazel_output_service.BazelOutputService.StageArtifacts:output_type -> bazel_output_service.StageArtifactsResponse + 8, // 24: bazel_output_service.BazelOutputService.FinalizeArtifacts:output_type -> bazel_output_service.FinalizeArtifactsResponse + 10, // 25: bazel_output_service.BazelOutputService.FinalizeBuild:output_type -> bazel_output_service.FinalizeBuildResponse + 12, // 26: bazel_output_service.BazelOutputService.BatchStat:output_type -> bazel_output_service.BatchStatResponse + 21, // [21:27] is the sub-list for method output_type + 15, // [15:21] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name +} + +func init() { file_pkg_proto_bazeloutputservice_bazel_output_service_proto_init() } +func file_pkg_proto_bazeloutputservice_bazel_output_service_proto_init() { + if File_pkg_proto_bazeloutputservice_bazel_output_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CleanRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CleanResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartBuildRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartBuildResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InitialOutputPathContents); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StageArtifactsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StageArtifactsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FinalizeArtifactsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FinalizeArtifactsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FinalizeBuildRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FinalizeBuildResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BatchStatRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BatchStatResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StageArtifactsRequest_Artifact); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StageArtifactsResponse_Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FinalizeArtifactsRequest_Artifact); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BatchStatResponse_StatResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BatchStatResponse_Stat); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BatchStatResponse_Stat_File); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BatchStatResponse_Stat_Symlink); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BatchStatResponse_Stat_Directory); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes[18].OneofWrappers = []interface{}{ + (*BatchStatResponse_Stat_File_)(nil), + (*BatchStatResponse_Stat_Symlink_)(nil), + (*BatchStatResponse_Stat_Directory_)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDesc, + NumEnums: 0, + NumMessages: 22, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_pkg_proto_bazeloutputservice_bazel_output_service_proto_goTypes, + DependencyIndexes: file_pkg_proto_bazeloutputservice_bazel_output_service_proto_depIdxs, + MessageInfos: file_pkg_proto_bazeloutputservice_bazel_output_service_proto_msgTypes, + }.Build() + File_pkg_proto_bazeloutputservice_bazel_output_service_proto = out.File + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_rawDesc = nil + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_goTypes = nil + file_pkg_proto_bazeloutputservice_bazel_output_service_proto_depIdxs = nil +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConnInterface + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion6 + +// BazelOutputServiceClient is the client API for BazelOutputService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type BazelOutputServiceClient interface { + Clean(ctx context.Context, in *CleanRequest, opts ...grpc.CallOption) (*CleanResponse, error) + StartBuild(ctx context.Context, in *StartBuildRequest, opts ...grpc.CallOption) (*StartBuildResponse, error) + StageArtifacts(ctx context.Context, in *StageArtifactsRequest, opts ...grpc.CallOption) (*StageArtifactsResponse, error) + FinalizeArtifacts(ctx context.Context, in *FinalizeArtifactsRequest, opts ...grpc.CallOption) (*FinalizeArtifactsResponse, error) + FinalizeBuild(ctx context.Context, in *FinalizeBuildRequest, opts ...grpc.CallOption) (*FinalizeBuildResponse, error) + BatchStat(ctx context.Context, in *BatchStatRequest, opts ...grpc.CallOption) (*BatchStatResponse, error) +} + +type bazelOutputServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewBazelOutputServiceClient(cc grpc.ClientConnInterface) BazelOutputServiceClient { + return &bazelOutputServiceClient{cc} +} + +func (c *bazelOutputServiceClient) Clean(ctx context.Context, in *CleanRequest, opts ...grpc.CallOption) (*CleanResponse, error) { + out := new(CleanResponse) + err := c.cc.Invoke(ctx, "/bazel_output_service.BazelOutputService/Clean", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bazelOutputServiceClient) StartBuild(ctx context.Context, in *StartBuildRequest, opts ...grpc.CallOption) (*StartBuildResponse, error) { + out := new(StartBuildResponse) + err := c.cc.Invoke(ctx, "/bazel_output_service.BazelOutputService/StartBuild", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bazelOutputServiceClient) StageArtifacts(ctx context.Context, in *StageArtifactsRequest, opts ...grpc.CallOption) (*StageArtifactsResponse, error) { + out := new(StageArtifactsResponse) + err := c.cc.Invoke(ctx, "/bazel_output_service.BazelOutputService/StageArtifacts", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bazelOutputServiceClient) FinalizeArtifacts(ctx context.Context, in *FinalizeArtifactsRequest, opts ...grpc.CallOption) (*FinalizeArtifactsResponse, error) { + out := new(FinalizeArtifactsResponse) + err := c.cc.Invoke(ctx, "/bazel_output_service.BazelOutputService/FinalizeArtifacts", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bazelOutputServiceClient) FinalizeBuild(ctx context.Context, in *FinalizeBuildRequest, opts ...grpc.CallOption) (*FinalizeBuildResponse, error) { + out := new(FinalizeBuildResponse) + err := c.cc.Invoke(ctx, "/bazel_output_service.BazelOutputService/FinalizeBuild", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bazelOutputServiceClient) BatchStat(ctx context.Context, in *BatchStatRequest, opts ...grpc.CallOption) (*BatchStatResponse, error) { + out := new(BatchStatResponse) + err := c.cc.Invoke(ctx, "/bazel_output_service.BazelOutputService/BatchStat", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// BazelOutputServiceServer is the server API for BazelOutputService service. +type BazelOutputServiceServer interface { + Clean(context.Context, *CleanRequest) (*CleanResponse, error) + StartBuild(context.Context, *StartBuildRequest) (*StartBuildResponse, error) + StageArtifacts(context.Context, *StageArtifactsRequest) (*StageArtifactsResponse, error) + FinalizeArtifacts(context.Context, *FinalizeArtifactsRequest) (*FinalizeArtifactsResponse, error) + FinalizeBuild(context.Context, *FinalizeBuildRequest) (*FinalizeBuildResponse, error) + BatchStat(context.Context, *BatchStatRequest) (*BatchStatResponse, error) +} + +// UnimplementedBazelOutputServiceServer can be embedded to have forward compatible implementations. +type UnimplementedBazelOutputServiceServer struct { +} + +func (*UnimplementedBazelOutputServiceServer) Clean(context.Context, *CleanRequest) (*CleanResponse, error) { + return nil, status1.Errorf(codes.Unimplemented, "method Clean not implemented") +} +func (*UnimplementedBazelOutputServiceServer) StartBuild(context.Context, *StartBuildRequest) (*StartBuildResponse, error) { + return nil, status1.Errorf(codes.Unimplemented, "method StartBuild not implemented") +} +func (*UnimplementedBazelOutputServiceServer) StageArtifacts(context.Context, *StageArtifactsRequest) (*StageArtifactsResponse, error) { + return nil, status1.Errorf(codes.Unimplemented, "method StageArtifacts not implemented") +} +func (*UnimplementedBazelOutputServiceServer) FinalizeArtifacts(context.Context, *FinalizeArtifactsRequest) (*FinalizeArtifactsResponse, error) { + return nil, status1.Errorf(codes.Unimplemented, "method FinalizeArtifacts not implemented") +} +func (*UnimplementedBazelOutputServiceServer) FinalizeBuild(context.Context, *FinalizeBuildRequest) (*FinalizeBuildResponse, error) { + return nil, status1.Errorf(codes.Unimplemented, "method FinalizeBuild not implemented") +} +func (*UnimplementedBazelOutputServiceServer) BatchStat(context.Context, *BatchStatRequest) (*BatchStatResponse, error) { + return nil, status1.Errorf(codes.Unimplemented, "method BatchStat not implemented") +} + +func RegisterBazelOutputServiceServer(s grpc.ServiceRegistrar, srv BazelOutputServiceServer) { + s.RegisterService(&_BazelOutputService_serviceDesc, srv) +} + +func _BazelOutputService_Clean_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CleanRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BazelOutputServiceServer).Clean(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/bazel_output_service.BazelOutputService/Clean", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BazelOutputServiceServer).Clean(ctx, req.(*CleanRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BazelOutputService_StartBuild_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartBuildRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BazelOutputServiceServer).StartBuild(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/bazel_output_service.BazelOutputService/StartBuild", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BazelOutputServiceServer).StartBuild(ctx, req.(*StartBuildRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BazelOutputService_StageArtifacts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StageArtifactsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BazelOutputServiceServer).StageArtifacts(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/bazel_output_service.BazelOutputService/StageArtifacts", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BazelOutputServiceServer).StageArtifacts(ctx, req.(*StageArtifactsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BazelOutputService_FinalizeArtifacts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FinalizeArtifactsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BazelOutputServiceServer).FinalizeArtifacts(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/bazel_output_service.BazelOutputService/FinalizeArtifacts", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BazelOutputServiceServer).FinalizeArtifacts(ctx, req.(*FinalizeArtifactsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BazelOutputService_FinalizeBuild_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(FinalizeBuildRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BazelOutputServiceServer).FinalizeBuild(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/bazel_output_service.BazelOutputService/FinalizeBuild", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BazelOutputServiceServer).FinalizeBuild(ctx, req.(*FinalizeBuildRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BazelOutputService_BatchStat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BatchStatRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BazelOutputServiceServer).BatchStat(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/bazel_output_service.BazelOutputService/BatchStat", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BazelOutputServiceServer).BatchStat(ctx, req.(*BatchStatRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _BazelOutputService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "bazel_output_service.BazelOutputService", + HandlerType: (*BazelOutputServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Clean", + Handler: _BazelOutputService_Clean_Handler, + }, + { + MethodName: "StartBuild", + Handler: _BazelOutputService_StartBuild_Handler, + }, + { + MethodName: "StageArtifacts", + Handler: _BazelOutputService_StageArtifacts_Handler, + }, + { + MethodName: "FinalizeArtifacts", + Handler: _BazelOutputService_FinalizeArtifacts_Handler, + }, + { + MethodName: "FinalizeBuild", + Handler: _BazelOutputService_FinalizeBuild_Handler, + }, + { + MethodName: "BatchStat", + Handler: _BazelOutputService_BatchStat_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "pkg/proto/bazeloutputservice/bazel_output_service.proto", +} diff --git a/pkg/proto/bazeloutputservice/bazel_output_service.proto b/pkg/proto/bazeloutputservice/bazel_output_service.proto new file mode 100644 index 00000000..38d9b7fa --- /dev/null +++ b/pkg/proto/bazeloutputservice/bazel_output_service.proto @@ -0,0 +1,349 @@ +// Copyright 2024 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// This file contains the protocol buffer representation of a list of supported +// flags for Bazel commands. +syntax = "proto3"; + +package bazel_output_service; + +import "google/protobuf/any.proto"; +import "google/rpc/status.proto"; + +option java_package = "com.google.devtools.build.lib.remote"; +option java_outer_classname = "BazelOutputServiceProto"; +option go_package = "bazeloutputservice"; + +// The Bazel Output Service may be used by users of the Remote Execution API to +// construct a directory on the local system that contains all output files of a +// build. +// +// Primitive implementations of this API may simply download files from the +// Content Addressable Storage (CAS) and store them at their designated +// location. Complex implementations may use a pseudo file system (e.g., FUSE) +// to support deduplication, lazy loading and snapshotting. +// +// Details: +// https://github.com/bazelbuild/proposals/blob/master/designs/2021-02-09-remote-output-service.md +// https://groups.google.com/g/remote-execution-apis/c/qOSWWwBLPzo +// https://groups.google.com/g/bazel-dev/c/lKzENsNd1Do +// https://docs.google.com/document/d/1W6Tqq8cndssnDI0yzFSoj95oezRKcIhU57nwLHaN1qk/edit +service BazelOutputService { + // Clean all data associated with a single output path, so that the + // next invocation of StartBuild() yields an empty output path. This + // MAY be implemented in a way that's faster than removing all of the + // files from the file system manually. + rpc Clean(CleanRequest) returns (CleanResponse); + + // Signal that a new build is about to start. + // + // Bazel uses this call to obtain a directory where outputs of the build may + // be stored, called the output path. Based on the parameters provided, server + // may provide an empty output path, or one that has contents from a previous + // build of the same workspace. + // + // In case the output path contains data from a previous build, server is + // responsible for calling ContentAddressableStorage.FindMissingBlobs() for + // all of the objects that are stored remotely. This ensures that these + // objects don't disappear from the Content Addressable Storage while the + // build is running. Any files that are absent MUST be removed from the output + // path and reported through InitialOutputPathContents.modified_path_prefixes, + // unless the field has been omitted because it would have been too large. + rpc StartBuild(StartBuildRequest) returns (StartBuildResponse); + + // Stage build artifacts at the given paths with digests that are known to the + // Content Addressable Storage. The file contents MAY be lazily downloaded + // when they're accessed in the future, and are not guaranteed to have already + // been downloaded upon return. + rpc StageArtifacts(StageArtifactsRequest) returns (StageArtifactsResponse); + + // Notify the server that a set of paths are not expected to be modified + // further by Bazel or a local build action within the current build. + // + // For each of these paths, the server MAY decide to store a dirty bit, + // initially unset. Subsequent modifications to the contents, or deletion of, + // the file stored at that path, cause the dirty bit to be set. If the server + // chooses to implement the dirty bit, any paths with the dirty bit set MUST + // be reported back to Bazel in the next + // InitialOutputPathContents.modified_path_prefixes for the same workspace. + // + // As an alternative to tracking modifications via a dirty bit, a server MAY + // choose to freeze finalized paths, preventing further modifications to the + // files stored there. + rpc FinalizeArtifacts(FinalizeArtifactsRequest) + returns (FinalizeArtifactsResponse); + + // Signal that a build has been completed. + rpc FinalizeBuild(FinalizeBuildRequest) returns (FinalizeBuildResponse); + + // Obtain the status of one or more files, directories or symbolic + // links that are stored in the output path. + rpc BatchStat(BatchStatRequest) returns (BatchStatResponse); +} + +message CleanRequest { + // The workspace identifier that was provided to + // StartBuildRequest.output_base_id whose data needs to be removed. + string output_base_id = 1; +} + +message CleanResponse { + // Intentionally empty for future extensibility. +} + +message StartBuildRequest { + // The version of the protocol Bazel currently uses. The service MUST return + // an error if it doesn't recognize the version. + // + // A future Bazel version may introduce incompatible changes and increment + // this version number. The incompatible change will be first made in the + // development tree for the next major Bazel release, and the new version thus + // introduced should be considered unstable until that major Bazel release + // occurs. At that time, the new version becomes stable, and the old one is + // immediately retired. + // + // In particular, version 1 must not be considered stable until Bazel 8.0.0 is + // released. + // + // Current version: 1 (experimental). + int32 version = 1; + + // A client-chosen value for the output service to uniquely identify the + // workspace the build is being started. This value must be set to ensure that + // the remote output service is capable of managing builds for distinct + // workspaces concurrently. + // + // Bazel sets this value to the MD5 sum of the absolute path of the output + // base. + // + // Starting a build finalizes any previous build with the same output_base_id + // that has not been finalized yet as if a FinalizeBuildRequest had been sent + // with build_successful set to false. + string output_base_id = 2; + + // A client-chosen value that uniquely identifies this build. This value must + // be provided to most other methods to ensure that operations are targeted + // against the right output path. If the server receives a subsequent request + // with a non-matching build_id, it SHOULD send back an error response. + // + // Bazel sets this value to --invocation_id. + string build_id = 3; + + // Additional arguments to pass depending on how Bazel communicate with the + // Content Addressable Storage. + // + // In case of a REv2 CAS, the type is + // [StartBuildArgs][bazel_output_service_rev2.StartBuildArgs]. + google.protobuf.Any args = 4; + + // The absolute path at which the remote output service exposes its output + // paths, as seen from the perspective of the client. + // + // This value needs to be provided by the client, because file system + // namespace virtualization may cause this directory to appear at a location + // that differs from the one used by the service. + // + // The purpose of this field is to ensure that the remote output service is + // capable of expanding symbolic links containing absolute paths. + // + // If this is not set, or an empty string, the service must determine where to + // expose its output path and return an absolute path in + // StartBuildResponse.output_path_suffix. + string output_path_prefix = 5; + + // A map of paths on the system that will become symbolic links pointing to + // locations inside the output path. Similar to output_path_prefix, this + // option is used to ensure the remote output service is capable of expanding + // symbolic links. + // + // Map keys are absolute paths, while map values are paths that are + // relative to the output path. + map output_path_aliases = 6; +} + +message StartBuildResponse { + // If set, the contents of the output path are almost entirely identical on + // the results of a previous build. This information may be used by Bazel to + // prevent unnecessary scanning of the file system. + // + // The server MUST leave this field unset in case the contents of the output + // path are empty, not based on a previous build, if no tracking of this + // information is performed, or if the number of changes made to the output + // path is too large to be expressed. + InitialOutputPathContents initial_output_path_contents = 1; + + // A path that the client must append to StartBuildRequest.output_path_prefix + // to obtain the full path at which outputs of the build are stored. + // + // Bazel replaces bazel-out/ with a symlink targeting this path. + string output_path_suffix = 2; +} + +message InitialOutputPathContents { + // The identifier of a previously finalized build whose results are stored in + // the output path. + string build_id = 1; + + // Output path prefixes that have been deleted or modified since they were + // finalized. Any path exactly matching or starting with one of these prefixes + // may be assumed to have been modified or deleted. + // + // In the interest of performance, the server SHOULD only include path + // prefixes that contain at least one of the paths that were finalized by the + // previous build. + repeated string modified_path_prefixes = 2; +} + +message StageArtifactsRequest { + message Artifact { + // path is relative to StartBuildResponse.output_path. + string path = 1; + // Describe how to stage the artifact. + // + // The concrete type of the locator depending on the CAS Bazel connects to. + // In case of a REv2 CAS, the type is + // [FileArtifactLocator][bazel_output_service_rev2.FileArtifactLocator]. + google.protobuf.Any locator = 2; + } + + // The identifier of the build. Server uses this to determine which output + // path needs to be modified. + string build_id = 1; + + repeated Artifact artifacts = 2; +} + +message StageArtifactsResponse { + message Response { + // If the status has a code other than `OK`, it indicates that the artifact + // could not be staged. + // + // Errors: + // * `NOT_FOUND`: The requested Artifact is not in the CAS. + google.rpc.Status status = 1; + } + + // The response for each of the requested artifacts, using the same order as + // requested. This means that this list has the same length as + // StageArtifactsRequest.artifacts. + repeated Response responses = 1; +} + +message FinalizeArtifactsRequest { + message Artifact { + // path is relative to StartBuildResponse.output_path. + string path = 1; + // Expected digest for this path. This allows server to detect if the path + // has been changed after Bazel finished creating the path and the + // corresponding FinalizeArtifactsRequest is processed. + // + // The concrete type of the locator depending on the CAS Bazel connects to. + // In case of a REv2 CAS, the type is + // [FileArtifactLocator][bazel_output_service_rev2.FileArtifactLocator]. + google.protobuf.Any locator = 2; + } + + // The identifier of the build. Server uses this to determine which output + // path needs to be modified. + string build_id = 1; + + repeated Artifact artifacts = 2; +} + +message FinalizeArtifactsResponse { + // Intentionally empty for future extensibility. +} + +message FinalizeBuildRequest { + // The identifier of the build that should be finalized. + string build_id = 1; + + // Whether the build completed successfully. The remote output service MAY, + // for example, use this option to apply different retention policies that + // take the outcome of the build into account. + bool build_successful = 2; +} + +message FinalizeBuildResponse { + // Intentionally empty for future extensibility. +} + +message BatchStatRequest { + // The identifier of the build. The remote output service uses this to + // determine which output path needs to be inspected. + string build_id = 1; + + // Paths whose status is to be obtained. The server MUST canonicalize each + // path using lstat semantics, i.e., all components except the last must be + // resolved if they are symlinks. If a symlink pointing to a location outside + // of the output path is encountered at any point during the canonicalization + // process, the server MAY use the information in + // StartBuildRequest.output_path_aliases map to continue the canonicalization. + // + // Refer to Stat.type for how to handle a situation where canonicalization + // fails due to a symlink pointing to a location outside of the output path. + // + // Path is relative to StartBuildResponse.output_path. + repeated string paths = 2; +} + +message BatchStatResponse { + message StatResponse { + // The status of the path. If the path does not exist, this field MUST be + // unset. + Stat stat = 1; + } + + message Stat { + message File { + // The digest of the file. + // + // The server MAY leave this field unset if it is unable to compute the + // digest. + // + // The concrete type of the digest depending on the CAS Bazel connects to. + // In case of a REv2 CAS, the type is + // [FileArtifactLocator][bazel_output_service_rev2.FileArtifactLocator]. + google.protobuf.Any locator = 1; + } + + message Symlink { + // The target of the symbolic link. + string target = 1; + } + + message Directory {} + + // If the path cannot be canonicalized, the server MUST NOT set any of the + // type fields. + // + // If the path resolves to a special file, the server MUST NOT set any of + // the type fields. + oneof type { + // The path resolves to a regular file. + File file = 1; + + // The path resolves to a symbolic link. + Symlink symlink = 2; + + // The path resolves to a directory. + Directory directory = 3; + } + } + + // The status response for each of the requested paths, using the same + // order as requested. This means that this list has the same length + // as BatchStatRequest.paths. + repeated StatResponse responses = 1; +} diff --git a/pkg/proto/bazeloutputservice/rev2/BUILD.bazel b/pkg/proto/bazeloutputservice/rev2/BUILD.bazel new file mode 100644 index 00000000..e756daed --- /dev/null +++ b/pkg/proto/bazeloutputservice/rev2/BUILD.bazel @@ -0,0 +1,25 @@ +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") + +proto_library( + name = "bazeloutputservicerev2_proto", + srcs = ["bazel_output_service_rev2.proto"], + visibility = ["//visibility:public"], + deps = ["@com_github_bazelbuild_remote_apis//build/bazel/remote/execution/v2:remote_execution_proto"], +) + +go_proto_library( + name = "bazeloutputservicerev2_go_proto", + importpath = "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice/rev2", + proto = ":bazeloutputservicerev2_proto", + visibility = ["//visibility:public"], + deps = ["@com_github_bazelbuild_remote_apis//build/bazel/remote/execution/v2:execution"], +) + +go_library( + name = "rev2", + embed = [":bazeloutputservicerev2_go_proto"], + importpath = "github.com/buildbarn/bb-remote-execution/pkg/proto/bazeloutputservice/rev2", + visibility = ["//visibility:public"], +) diff --git a/pkg/proto/bazeloutputservice/rev2/bazel_output_service_rev2.pb.go b/pkg/proto/bazeloutputservice/rev2/bazel_output_service_rev2.pb.go new file mode 100644 index 00000000..565fa1a5 --- /dev/null +++ b/pkg/proto/bazeloutputservice/rev2/bazel_output_service_rev2.pb.go @@ -0,0 +1,332 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.32.0 +// protoc v4.23.4 +// source: pkg/proto/bazeloutputservice/rev2/bazel_output_service_rev2.proto + +package bazeloutputservicerev2 + +import ( + v2 "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type StartBuildArgs struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RemoteCache string `protobuf:"bytes,1,opt,name=remote_cache,json=remoteCache,proto3" json:"remote_cache,omitempty"` + InstanceName string `protobuf:"bytes,2,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"` + DigestFunction v2.DigestFunction_Value `protobuf:"varint,3,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` +} + +func (x *StartBuildArgs) Reset() { + *x = StartBuildArgs{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartBuildArgs) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartBuildArgs) ProtoMessage() {} + +func (x *StartBuildArgs) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StartBuildArgs.ProtoReflect.Descriptor instead. +func (*StartBuildArgs) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDescGZIP(), []int{0} +} + +func (x *StartBuildArgs) GetRemoteCache() string { + if x != nil { + return x.RemoteCache + } + return "" +} + +func (x *StartBuildArgs) GetInstanceName() string { + if x != nil { + return x.InstanceName + } + return "" +} + +func (x *StartBuildArgs) GetDigestFunction() v2.DigestFunction_Value { + if x != nil { + return x.DigestFunction + } + return v2.DigestFunction_Value(0) +} + +type FileArtifactLocator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Digest *v2.Digest `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"` +} + +func (x *FileArtifactLocator) Reset() { + *x = FileArtifactLocator{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileArtifactLocator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileArtifactLocator) ProtoMessage() {} + +func (x *FileArtifactLocator) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileArtifactLocator.ProtoReflect.Descriptor instead. +func (*FileArtifactLocator) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDescGZIP(), []int{1} +} + +func (x *FileArtifactLocator) GetDigest() *v2.Digest { + if x != nil { + return x.Digest + } + return nil +} + +type TreeArtifactLocator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TreeDigest *v2.Digest `protobuf:"bytes,1,opt,name=tree_digest,json=treeDigest,proto3" json:"tree_digest,omitempty"` + RootDirectoryDigest *v2.Digest `protobuf:"bytes,2,opt,name=root_directory_digest,json=rootDirectoryDigest,proto3" json:"root_directory_digest,omitempty"` +} + +func (x *TreeArtifactLocator) Reset() { + *x = TreeArtifactLocator{} + if protoimpl.UnsafeEnabled { + mi := &file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TreeArtifactLocator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TreeArtifactLocator) ProtoMessage() {} + +func (x *TreeArtifactLocator) ProtoReflect() protoreflect.Message { + mi := &file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TreeArtifactLocator.ProtoReflect.Descriptor instead. +func (*TreeArtifactLocator) Descriptor() ([]byte, []int) { + return file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDescGZIP(), []int{2} +} + +func (x *TreeArtifactLocator) GetTreeDigest() *v2.Digest { + if x != nil { + return x.TreeDigest + } + return nil +} + +func (x *TreeArtifactLocator) GetRootDirectoryDigest() *v2.Digest { + if x != nil { + return x.RootDirectoryDigest + } + return nil +} + +var File_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto protoreflect.FileDescriptor + +var file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDesc = []byte{ + 0x0a, 0x41, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x61, 0x7a, 0x65, + 0x6c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x72, + 0x65, 0x76, 0x32, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x32, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, + 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x32, 0x1a, 0x36, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb8, 0x01, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x42, 0x75, 0x69, 0x6c, 0x64, 0x41, 0x72, 0x67, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x22, 0x56, 0x0a, 0x13, 0x46, 0x69, 0x6c, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, + 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x3f, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, + 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, + 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0xbc, 0x01, 0x0a, 0x13, 0x54, 0x72, + 0x65, 0x65, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x48, 0x0a, 0x0b, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, + 0x0a, 0x74, 0x72, 0x65, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x5b, 0x0a, 0x15, 0x72, + 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x64, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, + 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x52, 0x13, 0x72, 0x6f, 0x6f, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x79, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x5b, 0x0a, 0x24, 0x63, 0x6f, 0x6d, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x42, 0x1b, 0x42, 0x61, 0x7a, 0x65, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x52, 0x45, 0x76, 0x32, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x16, 0x62, + 0x61, 0x7a, 0x65, 0x6c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x72, 0x65, 0x76, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDescOnce sync.Once + file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDescData = file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDesc +) + +func file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDescGZIP() []byte { + file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDescOnce.Do(func() { + file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDescData = protoimpl.X.CompressGZIP(file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDescData) + }) + return file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDescData +} + +var file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_goTypes = []interface{}{ + (*StartBuildArgs)(nil), // 0: bazel_output_service_rev2.StartBuildArgs + (*FileArtifactLocator)(nil), // 1: bazel_output_service_rev2.FileArtifactLocator + (*TreeArtifactLocator)(nil), // 2: bazel_output_service_rev2.TreeArtifactLocator + (v2.DigestFunction_Value)(0), // 3: build.bazel.remote.execution.v2.DigestFunction.Value + (*v2.Digest)(nil), // 4: build.bazel.remote.execution.v2.Digest +} +var file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_depIdxs = []int32{ + 3, // 0: bazel_output_service_rev2.StartBuildArgs.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value + 4, // 1: bazel_output_service_rev2.FileArtifactLocator.digest:type_name -> build.bazel.remote.execution.v2.Digest + 4, // 2: bazel_output_service_rev2.TreeArtifactLocator.tree_digest:type_name -> build.bazel.remote.execution.v2.Digest + 4, // 3: bazel_output_service_rev2.TreeArtifactLocator.root_directory_digest:type_name -> build.bazel.remote.execution.v2.Digest + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_init() } +func file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_init() { + if File_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StartBuildArgs); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileArtifactLocator); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TreeArtifactLocator); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_goTypes, + DependencyIndexes: file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_depIdxs, + MessageInfos: file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_msgTypes, + }.Build() + File_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto = out.File + file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_rawDesc = nil + file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_goTypes = nil + file_pkg_proto_bazeloutputservice_rev2_bazel_output_service_rev2_proto_depIdxs = nil +} diff --git a/pkg/proto/bazeloutputservice/rev2/bazel_output_service_rev2.proto b/pkg/proto/bazeloutputservice/rev2/bazel_output_service_rev2.proto new file mode 100644 index 00000000..0fd71336 --- /dev/null +++ b/pkg/proto/bazeloutputservice/rev2/bazel_output_service_rev2.proto @@ -0,0 +1,70 @@ +// Copyright 2024 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// This file contains the protocol buffer representation of a list of supported +// flags for Bazel commands. + +// Companion proto that contains REv2 specific types to use with +// bazel_output_service.proto. +syntax = "proto3"; + +package bazel_output_service_rev2; + +import "build/bazel/remote/execution/v2/remote_execution.proto"; + +option java_package = "com.google.devtools.build.lib.remote"; +option java_outer_classname = "BazelOutputServiceREv2Proto"; +option go_package = "bazeloutputservicerev2"; + +message StartBuildArgs { + // The endpoint for the Content Addressable Storage. + // + // Bazel sets to this value to --remote_cache (or --remote_executor, in case + // --remote_cache is not explicitly set). + string remote_cache = 1; + + // The instance name that Bazel uses when communicating with the remote + // execution system. The remote output service uses this value when loading + // objects from the Content Addressable Storage. + // + // Bazel sets this value to --remote_instance_name. + string instance_name = 2; + + // The digest function that Bazel uses when communicating with the remote + // execution system. The remote output service uses this value to ensure + // that BatchStatResponse contains digests that were computed with right + // digest function. + // + // Bazel sets this value to one of the digest functions in the REAPI spec + // according to --digest_function. + build.bazel.remote.execution.v2.DigestFunction.Value digest_function = 3; +} + +message FileArtifactLocator { + build.bazel.remote.execution.v2.Digest digest = 1; +} + +message TreeArtifactLocator { + // The digest of the encoded [Tree][build.bazel.remote.execution.v2.Tree] + // proto containing the directory's contents. + build.bazel.remote.execution.v2.Digest tree_digest = 1; + + // The digest of the encoded + // [Directory][build.bazel.remote.execution.v2.Directory] proto containing the + // contents the directory's root. + // + // If both `tree_digest` and `root_directory_digest` are set, this field MUST + // match the digest of the root directory contained in the Tree message. + build.bazel.remote.execution.v2.Digest root_directory_digest = 2; +} diff --git a/pkg/proto/configuration/bb_worker/bb_worker.proto b/pkg/proto/configuration/bb_worker/bb_worker.proto index c81701d4..04bbd0b4 100644 --- a/pkg/proto/configuration/bb_worker/bb_worker.proto +++ b/pkg/proto/configuration/bb_worker/bb_worker.proto @@ -134,7 +134,7 @@ message ApplicationConfiguration { // load the full Tree object from the CAS. // // - Root directories of output directories created through - // bb_clientd's Remote Output Service feature load slightly faster, + // bb_clientd's Bazel Output Service feature load slightly faster, // as they can be validated without processing full Tree objects. // // - Even for clients that only support output directories in the form diff --git a/pkg/proto/remoteoutputservice/BUILD.bazel b/pkg/proto/remoteoutputservice/BUILD.bazel deleted file mode 100644 index a9eea115..00000000 --- a/pkg/proto/remoteoutputservice/BUILD.bazel +++ /dev/null @@ -1,30 +0,0 @@ -load("@rules_proto//proto:defs.bzl", "proto_library") -load("@io_bazel_rules_go//go:def.bzl", "go_library") -load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") - -proto_library( - name = "remoteoutputservice_proto", - srcs = ["remote_output_service.proto"], - visibility = ["//visibility:public"], - deps = [ - "@com_github_bazelbuild_remote_apis//build/bazel/remote/execution/v2:remote_execution_proto", - "@com_google_protobuf//:empty_proto", - "@com_google_protobuf//:timestamp_proto", - ], -) - -go_proto_library( - name = "remoteoutputservice_go_proto", - compilers = ["@io_bazel_rules_go//proto:go_grpc"], - importpath = "github.com/buildbarn/bb-remote-execution/pkg/proto/remoteoutputservice", - proto = ":remoteoutputservice_proto", - visibility = ["//visibility:public"], - deps = ["@com_github_bazelbuild_remote_apis//build/bazel/remote/execution/v2:execution"], -) - -go_library( - name = "remoteoutputservice", - embed = [":remoteoutputservice_go_proto"], - importpath = "github.com/buildbarn/bb-remote-execution/pkg/proto/remoteoutputservice", - visibility = ["//visibility:public"], -) diff --git a/pkg/proto/remoteoutputservice/remote_output_service.pb.go b/pkg/proto/remoteoutputservice/remote_output_service.pb.go deleted file mode 100644 index 5c7e278d..00000000 --- a/pkg/proto/remoteoutputservice/remote_output_service.pb.go +++ /dev/null @@ -1,1566 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.32.0 -// protoc v4.23.4 -// source: pkg/proto/remoteoutputservice/remote_output_service.proto - -package remoteoutputservice - -import ( - context "context" - v2 "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - emptypb "google.golang.org/protobuf/types/known/emptypb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type CleanRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OutputBaseId string `protobuf:"bytes,1,opt,name=output_base_id,json=outputBaseId,proto3" json:"output_base_id,omitempty"` -} - -func (x *CleanRequest) Reset() { - *x = CleanRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CleanRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CleanRequest) ProtoMessage() {} - -func (x *CleanRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CleanRequest.ProtoReflect.Descriptor instead. -func (*CleanRequest) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{0} -} - -func (x *CleanRequest) GetOutputBaseId() string { - if x != nil { - return x.OutputBaseId - } - return "" -} - -type StartBuildRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OutputBaseId string `protobuf:"bytes,1,opt,name=output_base_id,json=outputBaseId,proto3" json:"output_base_id,omitempty"` - BuildId string `protobuf:"bytes,2,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` - InstanceName string `protobuf:"bytes,3,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"` - DigestFunction v2.DigestFunction_Value `protobuf:"varint,4,opt,name=digest_function,json=digestFunction,proto3,enum=build.bazel.remote.execution.v2.DigestFunction_Value" json:"digest_function,omitempty"` - OutputPathPrefix string `protobuf:"bytes,5,opt,name=output_path_prefix,json=outputPathPrefix,proto3" json:"output_path_prefix,omitempty"` - OutputPathAliases map[string]string `protobuf:"bytes,6,rep,name=output_path_aliases,json=outputPathAliases,proto3" json:"output_path_aliases,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *StartBuildRequest) Reset() { - *x = StartBuildRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartBuildRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartBuildRequest) ProtoMessage() {} - -func (x *StartBuildRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StartBuildRequest.ProtoReflect.Descriptor instead. -func (*StartBuildRequest) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{1} -} - -func (x *StartBuildRequest) GetOutputBaseId() string { - if x != nil { - return x.OutputBaseId - } - return "" -} - -func (x *StartBuildRequest) GetBuildId() string { - if x != nil { - return x.BuildId - } - return "" -} - -func (x *StartBuildRequest) GetInstanceName() string { - if x != nil { - return x.InstanceName - } - return "" -} - -func (x *StartBuildRequest) GetDigestFunction() v2.DigestFunction_Value { - if x != nil { - return x.DigestFunction - } - return v2.DigestFunction_Value(0) -} - -func (x *StartBuildRequest) GetOutputPathPrefix() string { - if x != nil { - return x.OutputPathPrefix - } - return "" -} - -func (x *StartBuildRequest) GetOutputPathAliases() map[string]string { - if x != nil { - return x.OutputPathAliases - } - return nil -} - -type InitialOutputPathContents struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` - ModifiedPaths []string `protobuf:"bytes,2,rep,name=modified_paths,json=modifiedPaths,proto3" json:"modified_paths,omitempty"` -} - -func (x *InitialOutputPathContents) Reset() { - *x = InitialOutputPathContents{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *InitialOutputPathContents) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InitialOutputPathContents) ProtoMessage() {} - -func (x *InitialOutputPathContents) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use InitialOutputPathContents.ProtoReflect.Descriptor instead. -func (*InitialOutputPathContents) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{2} -} - -func (x *InitialOutputPathContents) GetBuildId() string { - if x != nil { - return x.BuildId - } - return "" -} - -func (x *InitialOutputPathContents) GetModifiedPaths() []string { - if x != nil { - return x.ModifiedPaths - } - return nil -} - -type StartBuildResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - InitialOutputPathContents *InitialOutputPathContents `protobuf:"bytes,1,opt,name=initial_output_path_contents,json=initialOutputPathContents,proto3" json:"initial_output_path_contents,omitempty"` - OutputPathSuffix string `protobuf:"bytes,2,opt,name=output_path_suffix,json=outputPathSuffix,proto3" json:"output_path_suffix,omitempty"` -} - -func (x *StartBuildResponse) Reset() { - *x = StartBuildResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartBuildResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartBuildResponse) ProtoMessage() {} - -func (x *StartBuildResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StartBuildResponse.ProtoReflect.Descriptor instead. -func (*StartBuildResponse) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{3} -} - -func (x *StartBuildResponse) GetInitialOutputPathContents() *InitialOutputPathContents { - if x != nil { - return x.InitialOutputPathContents - } - return nil -} - -func (x *StartBuildResponse) GetOutputPathSuffix() string { - if x != nil { - return x.OutputPathSuffix - } - return "" -} - -type BatchCreateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` - PathPrefix string `protobuf:"bytes,2,opt,name=path_prefix,json=pathPrefix,proto3" json:"path_prefix,omitempty"` - CleanPathPrefix bool `protobuf:"varint,3,opt,name=clean_path_prefix,json=cleanPathPrefix,proto3" json:"clean_path_prefix,omitempty"` - Files []*v2.OutputFile `protobuf:"bytes,4,rep,name=files,proto3" json:"files,omitempty"` - Symlinks []*v2.OutputSymlink `protobuf:"bytes,5,rep,name=symlinks,proto3" json:"symlinks,omitempty"` - Directories []*v2.OutputDirectory `protobuf:"bytes,6,rep,name=directories,proto3" json:"directories,omitempty"` -} - -func (x *BatchCreateRequest) Reset() { - *x = BatchCreateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BatchCreateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BatchCreateRequest) ProtoMessage() {} - -func (x *BatchCreateRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BatchCreateRequest.ProtoReflect.Descriptor instead. -func (*BatchCreateRequest) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{4} -} - -func (x *BatchCreateRequest) GetBuildId() string { - if x != nil { - return x.BuildId - } - return "" -} - -func (x *BatchCreateRequest) GetPathPrefix() string { - if x != nil { - return x.PathPrefix - } - return "" -} - -func (x *BatchCreateRequest) GetCleanPathPrefix() bool { - if x != nil { - return x.CleanPathPrefix - } - return false -} - -func (x *BatchCreateRequest) GetFiles() []*v2.OutputFile { - if x != nil { - return x.Files - } - return nil -} - -func (x *BatchCreateRequest) GetSymlinks() []*v2.OutputSymlink { - if x != nil { - return x.Symlinks - } - return nil -} - -func (x *BatchCreateRequest) GetDirectories() []*v2.OutputDirectory { - if x != nil { - return x.Directories - } - return nil -} - -type BatchStatRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` - IncludeFileDigest bool `protobuf:"varint,2,opt,name=include_file_digest,json=includeFileDigest,proto3" json:"include_file_digest,omitempty"` - IncludeSymlinkTarget bool `protobuf:"varint,3,opt,name=include_symlink_target,json=includeSymlinkTarget,proto3" json:"include_symlink_target,omitempty"` - FollowSymlinks bool `protobuf:"varint,4,opt,name=follow_symlinks,json=followSymlinks,proto3" json:"follow_symlinks,omitempty"` - Paths []string `protobuf:"bytes,5,rep,name=paths,proto3" json:"paths,omitempty"` -} - -func (x *BatchStatRequest) Reset() { - *x = BatchStatRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BatchStatRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BatchStatRequest) ProtoMessage() {} - -func (x *BatchStatRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BatchStatRequest.ProtoReflect.Descriptor instead. -func (*BatchStatRequest) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{5} -} - -func (x *BatchStatRequest) GetBuildId() string { - if x != nil { - return x.BuildId - } - return "" -} - -func (x *BatchStatRequest) GetIncludeFileDigest() bool { - if x != nil { - return x.IncludeFileDigest - } - return false -} - -func (x *BatchStatRequest) GetIncludeSymlinkTarget() bool { - if x != nil { - return x.IncludeSymlinkTarget - } - return false -} - -func (x *BatchStatRequest) GetFollowSymlinks() bool { - if x != nil { - return x.FollowSymlinks - } - return false -} - -func (x *BatchStatRequest) GetPaths() []string { - if x != nil { - return x.Paths - } - return nil -} - -type BatchStatResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Responses []*StatResponse `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses,omitempty"` -} - -func (x *BatchStatResponse) Reset() { - *x = BatchStatResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BatchStatResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BatchStatResponse) ProtoMessage() {} - -func (x *BatchStatResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BatchStatResponse.ProtoReflect.Descriptor instead. -func (*BatchStatResponse) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{6} -} - -func (x *BatchStatResponse) GetResponses() []*StatResponse { - if x != nil { - return x.Responses - } - return nil -} - -type StatResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FileStatus *FileStatus `protobuf:"bytes,1,opt,name=file_status,json=fileStatus,proto3" json:"file_status,omitempty"` -} - -func (x *StatResponse) Reset() { - *x = StatResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StatResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StatResponse) ProtoMessage() {} - -func (x *StatResponse) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StatResponse.ProtoReflect.Descriptor instead. -func (*StatResponse) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{7} -} - -func (x *StatResponse) GetFileStatus() *FileStatus { - if x != nil { - return x.FileStatus - } - return nil -} - -type FileStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to FileType: - // - // *FileStatus_File_ - // *FileStatus_Symlink_ - // *FileStatus_Directory_ - // *FileStatus_External_ - FileType isFileStatus_FileType `protobuf_oneof:"file_type"` -} - -func (x *FileStatus) Reset() { - *x = FileStatus{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FileStatus) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FileStatus) ProtoMessage() {} - -func (x *FileStatus) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FileStatus.ProtoReflect.Descriptor instead. -func (*FileStatus) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{8} -} - -func (m *FileStatus) GetFileType() isFileStatus_FileType { - if m != nil { - return m.FileType - } - return nil -} - -func (x *FileStatus) GetFile() *FileStatus_File { - if x, ok := x.GetFileType().(*FileStatus_File_); ok { - return x.File - } - return nil -} - -func (x *FileStatus) GetSymlink() *FileStatus_Symlink { - if x, ok := x.GetFileType().(*FileStatus_Symlink_); ok { - return x.Symlink - } - return nil -} - -func (x *FileStatus) GetDirectory() *FileStatus_Directory { - if x, ok := x.GetFileType().(*FileStatus_Directory_); ok { - return x.Directory - } - return nil -} - -func (x *FileStatus) GetExternal() *FileStatus_External { - if x, ok := x.GetFileType().(*FileStatus_External_); ok { - return x.External - } - return nil -} - -type isFileStatus_FileType interface { - isFileStatus_FileType() -} - -type FileStatus_File_ struct { - File *FileStatus_File `protobuf:"bytes,1,opt,name=file,proto3,oneof"` -} - -type FileStatus_Symlink_ struct { - Symlink *FileStatus_Symlink `protobuf:"bytes,2,opt,name=symlink,proto3,oneof"` -} - -type FileStatus_Directory_ struct { - Directory *FileStatus_Directory `protobuf:"bytes,3,opt,name=directory,proto3,oneof"` -} - -type FileStatus_External_ struct { - External *FileStatus_External `protobuf:"bytes,4,opt,name=external,proto3,oneof"` -} - -func (*FileStatus_File_) isFileStatus_FileType() {} - -func (*FileStatus_Symlink_) isFileStatus_FileType() {} - -func (*FileStatus_Directory_) isFileStatus_FileType() {} - -func (*FileStatus_External_) isFileStatus_FileType() {} - -type FinalizeBuildRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BuildId string `protobuf:"bytes,1,opt,name=build_id,json=buildId,proto3" json:"build_id,omitempty"` - BuildSuccessful bool `protobuf:"varint,2,opt,name=build_successful,json=buildSuccessful,proto3" json:"build_successful,omitempty"` -} - -func (x *FinalizeBuildRequest) Reset() { - *x = FinalizeBuildRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FinalizeBuildRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FinalizeBuildRequest) ProtoMessage() {} - -func (x *FinalizeBuildRequest) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FinalizeBuildRequest.ProtoReflect.Descriptor instead. -func (*FinalizeBuildRequest) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{9} -} - -func (x *FinalizeBuildRequest) GetBuildId() string { - if x != nil { - return x.BuildId - } - return "" -} - -func (x *FinalizeBuildRequest) GetBuildSuccessful() bool { - if x != nil { - return x.BuildSuccessful - } - return false -} - -type FileStatus_File struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Digest *v2.Digest `protobuf:"bytes,1,opt,name=digest,proto3" json:"digest,omitempty"` -} - -func (x *FileStatus_File) Reset() { - *x = FileStatus_File{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FileStatus_File) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FileStatus_File) ProtoMessage() {} - -func (x *FileStatus_File) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FileStatus_File.ProtoReflect.Descriptor instead. -func (*FileStatus_File) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{8, 0} -} - -func (x *FileStatus_File) GetDigest() *v2.Digest { - if x != nil { - return x.Digest - } - return nil -} - -type FileStatus_Symlink struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Target string `protobuf:"bytes,1,opt,name=target,proto3" json:"target,omitempty"` -} - -func (x *FileStatus_Symlink) Reset() { - *x = FileStatus_Symlink{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FileStatus_Symlink) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FileStatus_Symlink) ProtoMessage() {} - -func (x *FileStatus_Symlink) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FileStatus_Symlink.ProtoReflect.Descriptor instead. -func (*FileStatus_Symlink) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{8, 1} -} - -func (x *FileStatus_Symlink) GetTarget() string { - if x != nil { - return x.Target - } - return "" -} - -type FileStatus_Directory struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LastModifiedTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=last_modified_time,json=lastModifiedTime,proto3" json:"last_modified_time,omitempty"` -} - -func (x *FileStatus_Directory) Reset() { - *x = FileStatus_Directory{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FileStatus_Directory) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FileStatus_Directory) ProtoMessage() {} - -func (x *FileStatus_Directory) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_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 FileStatus_Directory.ProtoReflect.Descriptor instead. -func (*FileStatus_Directory) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{8, 2} -} - -func (x *FileStatus_Directory) GetLastModifiedTime() *timestamppb.Timestamp { - if x != nil { - return x.LastModifiedTime - } - return nil -} - -type FileStatus_External struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - NextPath string `protobuf:"bytes,1,opt,name=next_path,json=nextPath,proto3" json:"next_path,omitempty"` -} - -func (x *FileStatus_External) Reset() { - *x = FileStatus_External{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FileStatus_External) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FileStatus_External) ProtoMessage() {} - -func (x *FileStatus_External) ProtoReflect() protoreflect.Message { - mi := &file_pkg_proto_remoteoutputservice_remote_output_service_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 FileStatus_External.ProtoReflect.Descriptor instead. -func (*FileStatus_External) Descriptor() ([]byte, []int) { - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP(), []int{8, 3} -} - -func (x *FileStatus_External) GetNextPath() string { - if x != nil { - return x.NextPath - } - return "" -} - -var File_pkg_proto_remoteoutputservice_remote_output_service_proto protoreflect.FileDescriptor - -var file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDesc = []byte{ - 0x0a, 0x39, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x1a, 0x36, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x34, 0x0a, 0x0c, 0x43, 0x6c, 0x65, 0x61, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x42, 0x61, 0x73, 0x65, 0x49, 0x64, 0x22, 0xbe, - 0x03, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x62, - 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x42, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x62, 0x75, - 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5e, 0x0a, 0x0f, 0x64, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x35, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, - 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, - 0x74, 0x68, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x6f, 0x0a, 0x13, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, - 0x74, 0x68, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x1a, 0x44, 0x0a, 0x16, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0x5d, 0x0a, 0x19, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 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, 0x25, 0x0a, 0x0e, 0x6d, 0x6f, 0x64, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0xb5, - 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x1c, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, - 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x19, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x6f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x50, 0x61, 0x74, 0x68, - 0x53, 0x75, 0x66, 0x66, 0x69, 0x78, 0x22, 0xdf, 0x02, 0x0a, 0x12, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x74, 0x68, - 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, - 0x61, 0x74, 0x68, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6c, 0x65, - 0x61, 0x6e, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x50, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x41, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, - 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x6c, - 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x08, 0x73, 0x79, 0x6d, 0x6c, - 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x62, 0x75, 0x69, - 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, - 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x08, 0x73, 0x79, 0x6d, 0x6c, - 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x52, 0x0a, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, - 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x0b, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0xd2, 0x01, 0x0a, 0x10, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x46, 0x69, - 0x6c, 0x65, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x27, - 0x0a, 0x0f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x53, - 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x22, 0x56, 0x0a, - 0x11, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x41, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x52, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0a, 0x66, - 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xa1, 0x04, 0x0a, 0x0a, 0x46, 0x69, - 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3c, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46, - 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x00, - 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, - 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x53, 0x79, 0x6d, 0x6c, 0x69, - 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x07, 0x73, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x4b, 0x0a, - 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x48, 0x00, 0x52, - 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x48, 0x0a, 0x08, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, - 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x1a, 0x47, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x06, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x0a, - 0x07, 0x53, 0x79, 0x6d, 0x6c, 0x69, 0x6e, 0x6b, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x1a, 0x55, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x48, 0x0a, - 0x12, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x69, 0x66, - 0x69, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x27, 0x0a, 0x08, 0x45, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x74, 0x68, - 0x42, 0x0b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x5c, 0x0a, - 0x14, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x29, 0x0a, 0x10, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x66, 0x75, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x32, 0xc6, 0x03, 0x0a, 0x13, - 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x05, 0x43, 0x6c, 0x65, 0x61, 0x6e, 0x12, 0x23, 0x2e, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6c, 0x65, 0x61, 0x6e, 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, 0x61, 0x0a, 0x0a, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x28, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x29, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x50, 0x0a, 0x0b, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 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, 0x5e, - 0x0a, 0x09, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x12, 0x27, 0x2e, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, - 0x0a, 0x0d, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, - 0x2b, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x42, 0x75, 0x69, 0x6c, 0x64, 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, 0x42, 0x55, 0x0a, 0x24, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x64, 0x65, 0x76, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x2e, 0x62, 0x75, 0x69, 0x6c, - 0x64, 0x2e, 0x6c, 0x69, 0x62, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x18, 0x52, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x5a, 0x13, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x6f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, -} - -var ( - file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescOnce sync.Once - file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescData = file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDesc -) - -func file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescGZIP() []byte { - file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescOnce.Do(func() { - file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescData) - }) - return file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDescData -} - -var file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes = make([]protoimpl.MessageInfo, 15) -var file_pkg_proto_remoteoutputservice_remote_output_service_proto_goTypes = []interface{}{ - (*CleanRequest)(nil), // 0: remote_output_service.CleanRequest - (*StartBuildRequest)(nil), // 1: remote_output_service.StartBuildRequest - (*InitialOutputPathContents)(nil), // 2: remote_output_service.InitialOutputPathContents - (*StartBuildResponse)(nil), // 3: remote_output_service.StartBuildResponse - (*BatchCreateRequest)(nil), // 4: remote_output_service.BatchCreateRequest - (*BatchStatRequest)(nil), // 5: remote_output_service.BatchStatRequest - (*BatchStatResponse)(nil), // 6: remote_output_service.BatchStatResponse - (*StatResponse)(nil), // 7: remote_output_service.StatResponse - (*FileStatus)(nil), // 8: remote_output_service.FileStatus - (*FinalizeBuildRequest)(nil), // 9: remote_output_service.FinalizeBuildRequest - nil, // 10: remote_output_service.StartBuildRequest.OutputPathAliasesEntry - (*FileStatus_File)(nil), // 11: remote_output_service.FileStatus.File - (*FileStatus_Symlink)(nil), // 12: remote_output_service.FileStatus.Symlink - (*FileStatus_Directory)(nil), // 13: remote_output_service.FileStatus.Directory - (*FileStatus_External)(nil), // 14: remote_output_service.FileStatus.External - (v2.DigestFunction_Value)(0), // 15: build.bazel.remote.execution.v2.DigestFunction.Value - (*v2.OutputFile)(nil), // 16: build.bazel.remote.execution.v2.OutputFile - (*v2.OutputSymlink)(nil), // 17: build.bazel.remote.execution.v2.OutputSymlink - (*v2.OutputDirectory)(nil), // 18: build.bazel.remote.execution.v2.OutputDirectory - (*v2.Digest)(nil), // 19: build.bazel.remote.execution.v2.Digest - (*timestamppb.Timestamp)(nil), // 20: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 21: google.protobuf.Empty -} -var file_pkg_proto_remoteoutputservice_remote_output_service_proto_depIdxs = []int32{ - 15, // 0: remote_output_service.StartBuildRequest.digest_function:type_name -> build.bazel.remote.execution.v2.DigestFunction.Value - 10, // 1: remote_output_service.StartBuildRequest.output_path_aliases:type_name -> remote_output_service.StartBuildRequest.OutputPathAliasesEntry - 2, // 2: remote_output_service.StartBuildResponse.initial_output_path_contents:type_name -> remote_output_service.InitialOutputPathContents - 16, // 3: remote_output_service.BatchCreateRequest.files:type_name -> build.bazel.remote.execution.v2.OutputFile - 17, // 4: remote_output_service.BatchCreateRequest.symlinks:type_name -> build.bazel.remote.execution.v2.OutputSymlink - 18, // 5: remote_output_service.BatchCreateRequest.directories:type_name -> build.bazel.remote.execution.v2.OutputDirectory - 7, // 6: remote_output_service.BatchStatResponse.responses:type_name -> remote_output_service.StatResponse - 8, // 7: remote_output_service.StatResponse.file_status:type_name -> remote_output_service.FileStatus - 11, // 8: remote_output_service.FileStatus.file:type_name -> remote_output_service.FileStatus.File - 12, // 9: remote_output_service.FileStatus.symlink:type_name -> remote_output_service.FileStatus.Symlink - 13, // 10: remote_output_service.FileStatus.directory:type_name -> remote_output_service.FileStatus.Directory - 14, // 11: remote_output_service.FileStatus.external:type_name -> remote_output_service.FileStatus.External - 19, // 12: remote_output_service.FileStatus.File.digest:type_name -> build.bazel.remote.execution.v2.Digest - 20, // 13: remote_output_service.FileStatus.Directory.last_modified_time:type_name -> google.protobuf.Timestamp - 0, // 14: remote_output_service.RemoteOutputService.Clean:input_type -> remote_output_service.CleanRequest - 1, // 15: remote_output_service.RemoteOutputService.StartBuild:input_type -> remote_output_service.StartBuildRequest - 4, // 16: remote_output_service.RemoteOutputService.BatchCreate:input_type -> remote_output_service.BatchCreateRequest - 5, // 17: remote_output_service.RemoteOutputService.BatchStat:input_type -> remote_output_service.BatchStatRequest - 9, // 18: remote_output_service.RemoteOutputService.FinalizeBuild:input_type -> remote_output_service.FinalizeBuildRequest - 21, // 19: remote_output_service.RemoteOutputService.Clean:output_type -> google.protobuf.Empty - 3, // 20: remote_output_service.RemoteOutputService.StartBuild:output_type -> remote_output_service.StartBuildResponse - 21, // 21: remote_output_service.RemoteOutputService.BatchCreate:output_type -> google.protobuf.Empty - 6, // 22: remote_output_service.RemoteOutputService.BatchStat:output_type -> remote_output_service.BatchStatResponse - 21, // 23: remote_output_service.RemoteOutputService.FinalizeBuild:output_type -> google.protobuf.Empty - 19, // [19:24] is the sub-list for method output_type - 14, // [14:19] is the sub-list for method input_type - 14, // [14:14] is the sub-list for extension type_name - 14, // [14:14] is the sub-list for extension extendee - 0, // [0:14] is the sub-list for field type_name -} - -func init() { file_pkg_proto_remoteoutputservice_remote_output_service_proto_init() } -func file_pkg_proto_remoteoutputservice_remote_output_service_proto_init() { - if File_pkg_proto_remoteoutputservice_remote_output_service_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CleanRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartBuildRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitialOutputPathContents); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartBuildResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchCreateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchStatRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BatchStatResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StatResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FileStatus); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FinalizeBuildRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FileStatus_File); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FileStatus_Symlink); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FileStatus_Directory); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FileStatus_External); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes[8].OneofWrappers = []interface{}{ - (*FileStatus_File_)(nil), - (*FileStatus_Symlink_)(nil), - (*FileStatus_Directory_)(nil), - (*FileStatus_External_)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDesc, - NumEnums: 0, - NumMessages: 15, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_pkg_proto_remoteoutputservice_remote_output_service_proto_goTypes, - DependencyIndexes: file_pkg_proto_remoteoutputservice_remote_output_service_proto_depIdxs, - MessageInfos: file_pkg_proto_remoteoutputservice_remote_output_service_proto_msgTypes, - }.Build() - File_pkg_proto_remoteoutputservice_remote_output_service_proto = out.File - file_pkg_proto_remoteoutputservice_remote_output_service_proto_rawDesc = nil - file_pkg_proto_remoteoutputservice_remote_output_service_proto_goTypes = nil - file_pkg_proto_remoteoutputservice_remote_output_service_proto_depIdxs = nil -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConnInterface - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion6 - -// RemoteOutputServiceClient is the client API for RemoteOutputService service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type RemoteOutputServiceClient interface { - Clean(ctx context.Context, in *CleanRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - StartBuild(ctx context.Context, in *StartBuildRequest, opts ...grpc.CallOption) (*StartBuildResponse, error) - BatchCreate(ctx context.Context, in *BatchCreateRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) - BatchStat(ctx context.Context, in *BatchStatRequest, opts ...grpc.CallOption) (*BatchStatResponse, error) - FinalizeBuild(ctx context.Context, in *FinalizeBuildRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) -} - -type remoteOutputServiceClient struct { - cc grpc.ClientConnInterface -} - -func NewRemoteOutputServiceClient(cc grpc.ClientConnInterface) RemoteOutputServiceClient { - return &remoteOutputServiceClient{cc} -} - -func (c *remoteOutputServiceClient) Clean(ctx context.Context, in *CleanRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, "/remote_output_service.RemoteOutputService/Clean", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *remoteOutputServiceClient) StartBuild(ctx context.Context, in *StartBuildRequest, opts ...grpc.CallOption) (*StartBuildResponse, error) { - out := new(StartBuildResponse) - err := c.cc.Invoke(ctx, "/remote_output_service.RemoteOutputService/StartBuild", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *remoteOutputServiceClient) BatchCreate(ctx context.Context, in *BatchCreateRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, "/remote_output_service.RemoteOutputService/BatchCreate", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *remoteOutputServiceClient) BatchStat(ctx context.Context, in *BatchStatRequest, opts ...grpc.CallOption) (*BatchStatResponse, error) { - out := new(BatchStatResponse) - err := c.cc.Invoke(ctx, "/remote_output_service.RemoteOutputService/BatchStat", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *remoteOutputServiceClient) FinalizeBuild(ctx context.Context, in *FinalizeBuildRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { - out := new(emptypb.Empty) - err := c.cc.Invoke(ctx, "/remote_output_service.RemoteOutputService/FinalizeBuild", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// RemoteOutputServiceServer is the server API for RemoteOutputService service. -type RemoteOutputServiceServer interface { - Clean(context.Context, *CleanRequest) (*emptypb.Empty, error) - StartBuild(context.Context, *StartBuildRequest) (*StartBuildResponse, error) - BatchCreate(context.Context, *BatchCreateRequest) (*emptypb.Empty, error) - BatchStat(context.Context, *BatchStatRequest) (*BatchStatResponse, error) - FinalizeBuild(context.Context, *FinalizeBuildRequest) (*emptypb.Empty, error) -} - -// UnimplementedRemoteOutputServiceServer can be embedded to have forward compatible implementations. -type UnimplementedRemoteOutputServiceServer struct { -} - -func (*UnimplementedRemoteOutputServiceServer) Clean(context.Context, *CleanRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method Clean not implemented") -} -func (*UnimplementedRemoteOutputServiceServer) StartBuild(context.Context, *StartBuildRequest) (*StartBuildResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method StartBuild not implemented") -} -func (*UnimplementedRemoteOutputServiceServer) BatchCreate(context.Context, *BatchCreateRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchCreate not implemented") -} -func (*UnimplementedRemoteOutputServiceServer) BatchStat(context.Context, *BatchStatRequest) (*BatchStatResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BatchStat not implemented") -} -func (*UnimplementedRemoteOutputServiceServer) FinalizeBuild(context.Context, *FinalizeBuildRequest) (*emptypb.Empty, error) { - return nil, status.Errorf(codes.Unimplemented, "method FinalizeBuild not implemented") -} - -func RegisterRemoteOutputServiceServer(s grpc.ServiceRegistrar, srv RemoteOutputServiceServer) { - s.RegisterService(&_RemoteOutputService_serviceDesc, srv) -} - -func _RemoteOutputService_Clean_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CleanRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RemoteOutputServiceServer).Clean(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/remote_output_service.RemoteOutputService/Clean", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RemoteOutputServiceServer).Clean(ctx, req.(*CleanRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _RemoteOutputService_StartBuild_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(StartBuildRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RemoteOutputServiceServer).StartBuild(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/remote_output_service.RemoteOutputService/StartBuild", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RemoteOutputServiceServer).StartBuild(ctx, req.(*StartBuildRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _RemoteOutputService_BatchCreate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(BatchCreateRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RemoteOutputServiceServer).BatchCreate(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/remote_output_service.RemoteOutputService/BatchCreate", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RemoteOutputServiceServer).BatchCreate(ctx, req.(*BatchCreateRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _RemoteOutputService_BatchStat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(BatchStatRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RemoteOutputServiceServer).BatchStat(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/remote_output_service.RemoteOutputService/BatchStat", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RemoteOutputServiceServer).BatchStat(ctx, req.(*BatchStatRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _RemoteOutputService_FinalizeBuild_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FinalizeBuildRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RemoteOutputServiceServer).FinalizeBuild(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/remote_output_service.RemoteOutputService/FinalizeBuild", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RemoteOutputServiceServer).FinalizeBuild(ctx, req.(*FinalizeBuildRequest)) - } - return interceptor(ctx, in, info, handler) -} - -var _RemoteOutputService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "remote_output_service.RemoteOutputService", - HandlerType: (*RemoteOutputServiceServer)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "Clean", - Handler: _RemoteOutputService_Clean_Handler, - }, - { - MethodName: "StartBuild", - Handler: _RemoteOutputService_StartBuild_Handler, - }, - { - MethodName: "BatchCreate", - Handler: _RemoteOutputService_BatchCreate_Handler, - }, - { - MethodName: "BatchStat", - Handler: _RemoteOutputService_BatchStat_Handler, - }, - { - MethodName: "FinalizeBuild", - Handler: _RemoteOutputService_FinalizeBuild_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "pkg/proto/remoteoutputservice/remote_output_service.proto", -} diff --git a/pkg/proto/remoteoutputservice/remote_output_service.proto b/pkg/proto/remoteoutputservice/remote_output_service.proto deleted file mode 100644 index 43e34424..00000000 --- a/pkg/proto/remoteoutputservice/remote_output_service.proto +++ /dev/null @@ -1,326 +0,0 @@ -// Copyright 2021 The Bazel Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package remote_output_service; - -import "build/bazel/remote/execution/v2/remote_execution.proto"; -import "google/protobuf/empty.proto"; -import "google/protobuf/timestamp.proto"; - -option java_package = "com.google.devtools.build.lib.remote"; -option java_outer_classname = "RemoteOutputServiceProto"; -option go_package = "remoteoutputservice"; - -// The Remote Output Service may be used by users of the Remote -// Execution API to construct a directory on the local system that -// contains all output files of a build. -// -// Primitive implementations of this API may simply download files from -// the Content Addressable Storage (CAS) and store them at their -// designated location. Complex implementations may use a pseudo file -// system (e.g., FUSE) to support deduplication, lazy loading and -// snapshotting. -// -// Details: -// https://github.com/bazelbuild/proposals/blob/master/designs/2021-02-09-remote-output-service.md -// https://groups.google.com/g/remote-execution-apis/c/qOSWWwBLPzo -// https://groups.google.com/g/bazel-dev/c/lKzENsNd1Do -service RemoteOutputService { - // Methods that can be invoked at any point in time. - - // Clean all data associated with a single output path, so that the - // next invocation of StartBuild() yields an empty output path. This - // may be implemented in a way that's faster than removing all of the - // files from the file system manually. - rpc Clean(CleanRequest) returns (google.protobuf.Empty); - - // Signal that a new build is about to start. - // - // The client uses this call to obtain a directory where outputs of - // the build may be stored, called the output path. Based on the - // parameters provided, the remote output service may provide an empty - // output path, or one that has contents from a previous build of the - // same workspace. - // - // In case the output path contains data from a previous build, the - // remote output service is responsible for calling - // ContentAddressableStorage.FindMissingBlobs() for all of the objects - // that are stored remotely. This ensures that these objects don't - // disappear from the Content Addressable Storage while the build is - // running. Any files that are absent must be removed from the output - // path and reported through InitialOutputPathContents.modified_paths. - rpc StartBuild(StartBuildRequest) returns (StartBuildResponse); - - // Methods that can only be invoked during a build. - - // Create one or more files, directories or symbolic links in the - // output path. - rpc BatchCreate(BatchCreateRequest) returns (google.protobuf.Empty); - - // Obtain the status of one or more files, directories or symbolic - // links that are stored in the input path. - rpc BatchStat(BatchStatRequest) returns (BatchStatResponse); - - // Signal that a build has been completed. - rpc FinalizeBuild(FinalizeBuildRequest) returns (google.protobuf.Empty); -} - -message CleanRequest { - // The output base identifier that was provided to - // StartBuildRequest.output_base_id whose data needs to be removed. - string output_base_id = 1; -} - -message StartBuildRequest { - // A client-chosen value that uniquely identifies the workspace for - // which the build is being started. This value must be set to ensure - // that the remote output service is capable of managing builds for - // distinct workspaces concurrently. - // - // This value must be a valid filename for the operating system on - // which the remote output service and client are being executed. This - // allows the remote output service to create one subdirectory per - // project that needs to be built. - // - // By default, Bazel sets this value to the MD5 sum of the absolute - // path of the workspace directory. This is generally sufficient, - // though a more complex scheme may necessary in case the file system - // namespace is virtualized. - // - // Starting a build finalizes any previous build with the same - // output_base_id that has not been finalized yet. - string output_base_id = 1; - - // A client-chosen value that uniquely identifies this build. This - // value must be provided to most other methods to ensure that - // operations are targeted against the right output path. - string build_id = 2; - - // The instance name that the client uses when communicating with the - // remote execution system. The remote output service uses this value - // when loading objects from the Content Addressable Storage. - string instance_name = 3; - - // The digest function that the client uses when communicating with - // the remote execution system. The remote output service uses this - // value to ensure that FileStatus responses contain digests that were - // computed with right digest function. - build.bazel.remote.execution.v2.DigestFunction.Value digest_function = 4; - - // The absolute path at which the remote output service exposes its - // output paths, as seen from the perspective of the client. - // - // This value needs to be provided by the client, because file system - // namespace virtualization may cause this directory to appear at a - // location that differs from the one used by the service. - // - // The purpose of this field is to ensure that the remote output - // service is capable of expanding symbolic links containing absolute - // paths. - string output_path_prefix = 5; - - // A map of paths on the system that will become symbolic links - // pointing to locations inside the output path. Similar to - // output_path_prefix, this option is used to ensure the remote output - // service is capable of expanding symbolic links. - // - // Map keys are absolute paths, while map values are paths that are - // relative to the output path. - map output_path_aliases = 6; -} - -message InitialOutputPathContents { - // The identifier of a previously finalized build whose results are - // stored in the output path. - string build_id = 1; - - // Paths that have been modified or removed since the build finalized. - // - // If the remote output service freezes the contents of the output - // path between builds, this field can be left empty. - repeated string modified_paths = 2; -} - -message StartBuildResponse { - // If set, the contents of the output path are almost entirely - // identical on the results of a previous build. This information may - // be used by the client to prevent unnecessary scanning of the file - // system. - // - // Servers can leave this field unset in case the contents of the - // output path are empty, not based on a previous build, if no - // tracking of this information is performed, or if the number of - // changes made to the output path is too large to be expressed. - InitialOutputPathContents initial_output_path_contents = 1; - - // A relative path that the client must append to - // StartBuildRequest.output_path_prefix to obtain the full path at - // which outputs of the build are stored. - // - // If the remote output service is incapable of storing the output of - // multiple builds, this string may be left empty. - string output_path_suffix = 2; -} - -message BatchCreateRequest { - // The identifier of the build. The remote output service uses this to - // determine which output path needs to be modified. - string build_id = 1; - - // A path relative to the root of the output path where files, - // symbolic links and directories need to be created. - string path_prefix = 2; - - // Whether the contents of the path prefix should be removed prior to - // creating the specified files. - bool clean_path_prefix = 3; - - // Files that need to be downloaded from the Content Addressable - // Storage. - // - // Any missing parent directories, including those in path_prefix, are - // created as well. If any of the parents refer to a non-directory - // file, they are replaced by an empty directory. If a file or - // directory already exists at the provided path, it is replaced. - // - // This means that symbolic links are not followed when evaluating - // path_prefix and OutputFile.path. - repeated build.bazel.remote.execution.v2.OutputFile files = 4; - - // Symbolic links that need to be created. - // - // Any missing parent directories, including those in path_prefix, are - // created as well. If any of the parents refer to a non-directory - // file, they are replaced by an empty directory. If a file or - // directory already exists at the provided path, it is replaced. - // - // This means that symbolic links are not followed when evaluating - // path_prefix and OutputSymlink.path. - repeated build.bazel.remote.execution.v2.OutputSymlink symlinks = 5; - - // Directories that need to be downloaded from the Content Addressable - // Storage. - // - // Any missing parent directories, including those in path_prefix, are - // created as well. If any of the parents refer to a non-directory - // file, they are replaced by an empty directory. Any file or - // directory that already exists at the provided path is replaced. - // - // This means that symbolic links are not followed when evaluating - // path_prefix and OutputDirectory.path. - repeated build.bazel.remote.execution.v2.OutputDirectory directories = 6; -} - -message BatchStatRequest { - // The identifier of the build. The remote output service uses this to - // determine which output path needs to be inspected. - string build_id = 1; - - // In case the path corresponds to a regular file, include the hash - // and size of the file in the response. - bool include_file_digest = 2; - - // In case the path corresponds to a symbolic link, include the target - // of the symbolic link in the response. - bool include_symlink_target = 3; - - // If the last component of the path corresponds to a symbolic link, - // return the status of the file at the target location. - // - // Symbolic links encountered before the last component of the path - // are always expanded, regardless of the value of this option. - bool follow_symlinks = 4; - - // Paths whose status needs to be obtained. - repeated string paths = 5; -} - -message BatchStatResponse { - // The status response for each of the requested paths, using the same - // order as requested. This means that this list has the same length - // as BatchStatRequest.paths. - repeated StatResponse responses = 1; -} - -message StatResponse { - // The status of the file. If the file corresponding with the - // requested path does not exist, this field will be null. - FileStatus file_status = 1; -} - -message FileStatus { - message File { - // The hash and size of the file. This field is only set when - // BatchStatRequest.include_file_digest is set. - // - // This field may also be omitted if the remote output service is - // unable to compute it accurately. For example, when a file is - // opened for writing, the kernel may buffer data to be written. - // When absent, the caller should fall back to computing the digest - // manually. - build.bazel.remote.execution.v2.Digest digest = 1; - } - - message Symlink { - // The target of the symbolic link. This field is only set when - // BatchStatRequest.include_symlink_target is set. - string target = 1; - } - - message Directory { - // The time at which the directory contents were last modified. - google.protobuf.Timestamp last_modified_time = 1; - } - - message External { - // The path relative to the root of the output path where the file - // is located. This path is absolute, or it is relative, starting - // with "../". - // - // The client can use this field to obtain the file status manually. - string next_path = 1; - } - - oneof file_type { - // The path resolves to a regular file. - File file = 1; - - // The path resolves to a symbolic link. - // - // This field may not be set if BatchStatRequest.follow_symlinks is - // set to true. - Symlink symlink = 2; - - // The path resolves to a directory. - Directory directory = 3; - - // The path resolves to a location outside the output path. The - // remote output service is unable to determine whether any file - // exists at the resulting path, and can therefore not obtain its - // status. - External external = 4; - } -} - -message FinalizeBuildRequest { - // The identifier of the build that should be finalized. - string build_id = 1; - - // Whether the build completed successfully. The remote output service - // may, for example, use this option to apply different retention - // policies that take the outcome of the build into account. - bool build_successful = 2; -}