1// Copyright 2020 The Bazel Authors. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15// Code generated by protoc-gen-go. DO NOT EDIT. 16// versions: 17// protoc-gen-go v1.31.0 18// protoc v3.15.0 19// source: build/bazel/remote/asset/v1/remote_asset.proto 20 21package remoteasset 22 23import ( 24 context "context" 25 v2 "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2" 26 _ "google.golang.org/genproto/googleapis/api/annotations" 27 status "google.golang.org/genproto/googleapis/rpc/status" 28 grpc "google.golang.org/grpc" 29 codes "google.golang.org/grpc/codes" 30 status1 "google.golang.org/grpc/status" 31 protoreflect "google.golang.org/protobuf/reflect/protoreflect" 32 protoimpl "google.golang.org/protobuf/runtime/protoimpl" 33 durationpb "google.golang.org/protobuf/types/known/durationpb" 34 timestamppb "google.golang.org/protobuf/types/known/timestamppb" 35 reflect "reflect" 36 sync "sync" 37) 38 39const ( 40 // Verify that this generated code is sufficiently up-to-date. 41 _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) 42 // Verify that runtime/protoimpl is sufficiently up-to-date. 43 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 44) 45 46// Qualifiers are used to disambiguate or sub-select content that shares a URI. 47// This may include specifying a particular commit or branch, in the case of 48// URIs referencing a repository; they could also be used to specify a 49// particular subdirectory of a repository or tarball. Qualifiers may also be 50// used to ensure content matches what the client expects, even when there is 51// no ambiguity to be had - for example, a qualifier specifying a checksum 52// value. 53// 54// In cases where the semantics of the request are not immediately clear from 55// the URL and/or qualifiers - e.g. dictated by URL scheme - it is recommended 56// to use an additional qualifier to remove the ambiguity. The `resource_type` 57// qualifier is recommended for this purpose. 58// 59// Qualifiers may be supplied in any order. 60type Qualifier struct { 61 state protoimpl.MessageState 62 sizeCache protoimpl.SizeCache 63 unknownFields protoimpl.UnknownFields 64 65 // The "name" of the qualifier, for example "resource_type". 66 // No separation is made between 'standard' and 'nonstandard' 67 // qualifiers, in accordance with https://tools.ietf.org/html/rfc6648, 68 // however implementers *SHOULD* take care to avoid ambiguity. 69 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 70 // The "value" of the qualifier. Semantics will be dictated by the name. 71 Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` 72} 73 74func (x *Qualifier) Reset() { 75 *x = Qualifier{} 76 if protoimpl.UnsafeEnabled { 77 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[0] 78 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 79 ms.StoreMessageInfo(mi) 80 } 81} 82 83func (x *Qualifier) String() string { 84 return protoimpl.X.MessageStringOf(x) 85} 86 87func (*Qualifier) ProtoMessage() {} 88 89func (x *Qualifier) ProtoReflect() protoreflect.Message { 90 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[0] 91 if protoimpl.UnsafeEnabled && x != nil { 92 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 93 if ms.LoadMessageInfo() == nil { 94 ms.StoreMessageInfo(mi) 95 } 96 return ms 97 } 98 return mi.MessageOf(x) 99} 100 101// Deprecated: Use Qualifier.ProtoReflect.Descriptor instead. 102func (*Qualifier) Descriptor() ([]byte, []int) { 103 return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{0} 104} 105 106func (x *Qualifier) GetName() string { 107 if x != nil { 108 return x.Name 109 } 110 return "" 111} 112 113func (x *Qualifier) GetValue() string { 114 if x != nil { 115 return x.Value 116 } 117 return "" 118} 119 120// A request message for 121// [Fetch.FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob]. 122type FetchBlobRequest struct { 123 state protoimpl.MessageState 124 sizeCache protoimpl.SizeCache 125 unknownFields protoimpl.UnknownFields 126 127 // The instance of the execution system to operate against. A server may 128 // support multiple instances of the execution system (with their own workers, 129 // storage, caches, etc.). The server MAY require use of this field to select 130 // between them in an implementation-defined fashion, otherwise it can be 131 // omitted. 132 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"` 133 // The timeout for the underlying fetch, if content needs to be retrieved from 134 // origin. 135 // 136 // If unset, the server *MAY* apply an implementation-defined timeout. 137 // 138 // If set, and the user-provided timeout exceeds the RPC deadline, the server 139 // *SHOULD* keep the fetch going after the RPC completes, to be made 140 // available for future Fetch calls. The server may also enforce (via clamping 141 // and/or an INVALID_ARGUMENT error) implementation-defined minimum and 142 // maximum timeout values. 143 // 144 // If this timeout is exceeded on an attempt to retrieve content from origin 145 // the client will receive DEADLINE_EXCEEDED in [FetchBlobResponse.status]. 146 Timeout *durationpb.Duration `protobuf:"bytes,2,opt,name=timeout,proto3" json:"timeout,omitempty"` 147 // The oldest content the client is willing to accept, as measured from the 148 // time it was Push'd or when the underlying retrieval from origin was 149 // started. 150 // Upon retries of Fetch requests that cannot be completed within a single 151 // RPC, clients *SHOULD* provide the same value for subsequent requests as the 152 // original, to simplify combining the request with the previous attempt. 153 // 154 // If unset, the client *SHOULD* accept content of any age. 155 OldestContentAccepted *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=oldest_content_accepted,json=oldestContentAccepted,proto3" json:"oldest_content_accepted,omitempty"` 156 // The URI(s) of the content to fetch. These may be resources that the server 157 // can directly fetch from origin, in which case multiple URIs *SHOULD* 158 // represent the same content available at different locations (such as an 159 // origin and secondary mirrors). These may also be URIs for content known to 160 // the server through other mechanisms, e.g. pushed via the [Push][build.bazel.remote.asset.v1.Push] 161 // service. 162 // 163 // Clients *MUST* supply at least one URI. Servers *MAY* match any one of the 164 // supplied URIs. 165 Uris []string `protobuf:"bytes,4,rep,name=uris,proto3" json:"uris,omitempty"` 166 // Qualifiers sub-specifying the content to fetch - see comments on 167 // [Qualifier][build.bazel.remote.asset.v1.Qualifier]. 168 // The same qualifiers apply to all URIs. 169 // 170 // Specified qualifier names *MUST* be unique. 171 Qualifiers []*Qualifier `protobuf:"bytes,5,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"` 172} 173 174func (x *FetchBlobRequest) Reset() { 175 *x = FetchBlobRequest{} 176 if protoimpl.UnsafeEnabled { 177 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[1] 178 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 179 ms.StoreMessageInfo(mi) 180 } 181} 182 183func (x *FetchBlobRequest) String() string { 184 return protoimpl.X.MessageStringOf(x) 185} 186 187func (*FetchBlobRequest) ProtoMessage() {} 188 189func (x *FetchBlobRequest) ProtoReflect() protoreflect.Message { 190 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[1] 191 if protoimpl.UnsafeEnabled && x != nil { 192 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 193 if ms.LoadMessageInfo() == nil { 194 ms.StoreMessageInfo(mi) 195 } 196 return ms 197 } 198 return mi.MessageOf(x) 199} 200 201// Deprecated: Use FetchBlobRequest.ProtoReflect.Descriptor instead. 202func (*FetchBlobRequest) Descriptor() ([]byte, []int) { 203 return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{1} 204} 205 206func (x *FetchBlobRequest) GetInstanceName() string { 207 if x != nil { 208 return x.InstanceName 209 } 210 return "" 211} 212 213func (x *FetchBlobRequest) GetTimeout() *durationpb.Duration { 214 if x != nil { 215 return x.Timeout 216 } 217 return nil 218} 219 220func (x *FetchBlobRequest) GetOldestContentAccepted() *timestamppb.Timestamp { 221 if x != nil { 222 return x.OldestContentAccepted 223 } 224 return nil 225} 226 227func (x *FetchBlobRequest) GetUris() []string { 228 if x != nil { 229 return x.Uris 230 } 231 return nil 232} 233 234func (x *FetchBlobRequest) GetQualifiers() []*Qualifier { 235 if x != nil { 236 return x.Qualifiers 237 } 238 return nil 239} 240 241// A response message for 242// [Fetch.FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob]. 243type FetchBlobResponse struct { 244 state protoimpl.MessageState 245 sizeCache protoimpl.SizeCache 246 unknownFields protoimpl.UnknownFields 247 248 // If the status has a code other than `OK`, it indicates that the operation 249 // was unable to be completed for reasons outside the servers' control. 250 // The possible fetch errors include: 251 // - `DEADLINE_EXCEEDED`: The operation could not be completed within the 252 // specified timeout. 253 // - `NOT_FOUND`: The requested asset was not found at the specified location. 254 // - `PERMISSION_DENIED`: The request was rejected by a remote server, or 255 // requested an asset from a disallowed origin. 256 // - `ABORTED`: The operation could not be completed, typically due to a 257 // failed consistency check. 258 // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to 259 // perform the requested operation. The client may retry after a delay. 260 Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` 261 // The uri from the request that resulted in a successful retrieval, or from 262 // which the error indicated in `status` was obtained. 263 Uri string `protobuf:"bytes,2,opt,name=uri,proto3" json:"uri,omitempty"` 264 // Any qualifiers known to the server and of interest to clients. 265 Qualifiers []*Qualifier `protobuf:"bytes,3,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"` 266 // A minimum timestamp the content is expected to be available through. 267 // Servers *MAY* omit this field, if not known with confidence. 268 ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` 269 // The result of the fetch, if the status had code `OK`. 270 // The digest of the file's contents, available for download through the CAS. 271 BlobDigest *v2.Digest `protobuf:"bytes,5,opt,name=blob_digest,json=blobDigest,proto3" json:"blob_digest,omitempty"` 272} 273 274func (x *FetchBlobResponse) Reset() { 275 *x = FetchBlobResponse{} 276 if protoimpl.UnsafeEnabled { 277 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[2] 278 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 279 ms.StoreMessageInfo(mi) 280 } 281} 282 283func (x *FetchBlobResponse) String() string { 284 return protoimpl.X.MessageStringOf(x) 285} 286 287func (*FetchBlobResponse) ProtoMessage() {} 288 289func (x *FetchBlobResponse) ProtoReflect() protoreflect.Message { 290 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[2] 291 if protoimpl.UnsafeEnabled && x != nil { 292 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 293 if ms.LoadMessageInfo() == nil { 294 ms.StoreMessageInfo(mi) 295 } 296 return ms 297 } 298 return mi.MessageOf(x) 299} 300 301// Deprecated: Use FetchBlobResponse.ProtoReflect.Descriptor instead. 302func (*FetchBlobResponse) Descriptor() ([]byte, []int) { 303 return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{2} 304} 305 306func (x *FetchBlobResponse) GetStatus() *status.Status { 307 if x != nil { 308 return x.Status 309 } 310 return nil 311} 312 313func (x *FetchBlobResponse) GetUri() string { 314 if x != nil { 315 return x.Uri 316 } 317 return "" 318} 319 320func (x *FetchBlobResponse) GetQualifiers() []*Qualifier { 321 if x != nil { 322 return x.Qualifiers 323 } 324 return nil 325} 326 327func (x *FetchBlobResponse) GetExpiresAt() *timestamppb.Timestamp { 328 if x != nil { 329 return x.ExpiresAt 330 } 331 return nil 332} 333 334func (x *FetchBlobResponse) GetBlobDigest() *v2.Digest { 335 if x != nil { 336 return x.BlobDigest 337 } 338 return nil 339} 340 341// A request message for 342// [Fetch.FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory]. 343type FetchDirectoryRequest struct { 344 state protoimpl.MessageState 345 sizeCache protoimpl.SizeCache 346 unknownFields protoimpl.UnknownFields 347 348 // The instance of the execution system to operate against. A server may 349 // support multiple instances of the execution system (with their own workers, 350 // storage, caches, etc.). The server MAY require use of this field to select 351 // between them in an implementation-defined fashion, otherwise it can be 352 // omitted. 353 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"` 354 // The timeout for the underlying fetch, if content needs to be retrieved from 355 // origin. This value is allowed to exceed the RPC deadline, in which case the 356 // server *SHOULD* keep the fetch going after the RPC completes, to be made 357 // available for future Fetch calls. 358 // 359 // If this timeout is exceeded on an attempt to retrieve content from origin 360 // the client will receive DEADLINE_EXCEEDED in [FetchDirectoryResponse.status]. 361 Timeout *durationpb.Duration `protobuf:"bytes,2,opt,name=timeout,proto3" json:"timeout,omitempty"` 362 // The oldest content the client is willing to accept, as measured from the 363 // time it was Push'd or when the underlying retrieval from origin was 364 // started. 365 // Upon retries of Fetch requests that cannot be completed within a single 366 // RPC, clients *SHOULD* provide the same value for subsequent requests as the 367 // original, to simplify combining the request with the previous attempt. 368 // 369 // If unset, the client *SHOULD* accept content of any age. 370 OldestContentAccepted *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=oldest_content_accepted,json=oldestContentAccepted,proto3" json:"oldest_content_accepted,omitempty"` 371 // The URI(s) of the content to fetch. These may be resources that the server 372 // can directly fetch from origin, in which case multiple URIs *SHOULD* 373 // represent the same content available at different locations (such as an 374 // origin and secondary mirrors). These may also be URIs for content known to 375 // the server through other mechanisms, e.g. pushed via the [Push][build.bazel.remote.asset.v1.Push] 376 // service. 377 // 378 // Clients *MUST* supply at least one URI. Servers *MAY* match any one of the 379 // supplied URIs. 380 Uris []string `protobuf:"bytes,4,rep,name=uris,proto3" json:"uris,omitempty"` 381 // Qualifiers sub-specifying the content to fetch - see comments on 382 // [Qualifier][build.bazel.remote.asset.v1.Qualifier]. 383 // The same qualifiers apply to all URIs. 384 // 385 // Specified qualifier names *MUST* be unique. 386 Qualifiers []*Qualifier `protobuf:"bytes,5,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"` 387} 388 389func (x *FetchDirectoryRequest) Reset() { 390 *x = FetchDirectoryRequest{} 391 if protoimpl.UnsafeEnabled { 392 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[3] 393 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 394 ms.StoreMessageInfo(mi) 395 } 396} 397 398func (x *FetchDirectoryRequest) String() string { 399 return protoimpl.X.MessageStringOf(x) 400} 401 402func (*FetchDirectoryRequest) ProtoMessage() {} 403 404func (x *FetchDirectoryRequest) ProtoReflect() protoreflect.Message { 405 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[3] 406 if protoimpl.UnsafeEnabled && x != nil { 407 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 408 if ms.LoadMessageInfo() == nil { 409 ms.StoreMessageInfo(mi) 410 } 411 return ms 412 } 413 return mi.MessageOf(x) 414} 415 416// Deprecated: Use FetchDirectoryRequest.ProtoReflect.Descriptor instead. 417func (*FetchDirectoryRequest) Descriptor() ([]byte, []int) { 418 return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{3} 419} 420 421func (x *FetchDirectoryRequest) GetInstanceName() string { 422 if x != nil { 423 return x.InstanceName 424 } 425 return "" 426} 427 428func (x *FetchDirectoryRequest) GetTimeout() *durationpb.Duration { 429 if x != nil { 430 return x.Timeout 431 } 432 return nil 433} 434 435func (x *FetchDirectoryRequest) GetOldestContentAccepted() *timestamppb.Timestamp { 436 if x != nil { 437 return x.OldestContentAccepted 438 } 439 return nil 440} 441 442func (x *FetchDirectoryRequest) GetUris() []string { 443 if x != nil { 444 return x.Uris 445 } 446 return nil 447} 448 449func (x *FetchDirectoryRequest) GetQualifiers() []*Qualifier { 450 if x != nil { 451 return x.Qualifiers 452 } 453 return nil 454} 455 456// A response message for 457// [Fetch.FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory]. 458type FetchDirectoryResponse struct { 459 state protoimpl.MessageState 460 sizeCache protoimpl.SizeCache 461 unknownFields protoimpl.UnknownFields 462 463 // If the status has a code other than `OK`, it indicates that the operation 464 // was unable to be completed for reasons outside the servers' control. 465 // The possible fetch errors include: 466 // - `DEADLINE_EXCEEDED`: The operation could not be completed within the 467 // specified timeout. 468 // - `NOT_FOUND`: The requested asset was not found at the specified location. 469 // - `PERMISSION_DENIED`: The request was rejected by a remote server, or 470 // requested an asset from a disallowed origin. 471 // - `ABORTED`: The operation could not be completed, typically due to a 472 // failed consistency check. 473 // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to 474 // perform the requested operation. The client may retry after a delay. 475 Status *status.Status `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` 476 // The uri from the request that resulted in a successful retrieval, or from 477 // which the error indicated in `status` was obtained. 478 Uri string `protobuf:"bytes,2,opt,name=uri,proto3" json:"uri,omitempty"` 479 // Any qualifiers known to the server and of interest to clients. 480 Qualifiers []*Qualifier `protobuf:"bytes,3,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"` 481 // A minimum timestamp the content is expected to be available through. 482 // Servers *MAY* omit this field, if not known with confidence. 483 ExpiresAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expires_at,json=expiresAt,proto3" json:"expires_at,omitempty"` 484 // The result of the fetch, if the status had code `OK`. 485 // the root digest of a directory tree, suitable for fetching via 486 // [ContentAddressableStorage.GetTree]. 487 RootDirectoryDigest *v2.Digest `protobuf:"bytes,5,opt,name=root_directory_digest,json=rootDirectoryDigest,proto3" json:"root_directory_digest,omitempty"` 488} 489 490func (x *FetchDirectoryResponse) Reset() { 491 *x = FetchDirectoryResponse{} 492 if protoimpl.UnsafeEnabled { 493 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[4] 494 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 495 ms.StoreMessageInfo(mi) 496 } 497} 498 499func (x *FetchDirectoryResponse) String() string { 500 return protoimpl.X.MessageStringOf(x) 501} 502 503func (*FetchDirectoryResponse) ProtoMessage() {} 504 505func (x *FetchDirectoryResponse) ProtoReflect() protoreflect.Message { 506 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[4] 507 if protoimpl.UnsafeEnabled && x != nil { 508 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 509 if ms.LoadMessageInfo() == nil { 510 ms.StoreMessageInfo(mi) 511 } 512 return ms 513 } 514 return mi.MessageOf(x) 515} 516 517// Deprecated: Use FetchDirectoryResponse.ProtoReflect.Descriptor instead. 518func (*FetchDirectoryResponse) Descriptor() ([]byte, []int) { 519 return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{4} 520} 521 522func (x *FetchDirectoryResponse) GetStatus() *status.Status { 523 if x != nil { 524 return x.Status 525 } 526 return nil 527} 528 529func (x *FetchDirectoryResponse) GetUri() string { 530 if x != nil { 531 return x.Uri 532 } 533 return "" 534} 535 536func (x *FetchDirectoryResponse) GetQualifiers() []*Qualifier { 537 if x != nil { 538 return x.Qualifiers 539 } 540 return nil 541} 542 543func (x *FetchDirectoryResponse) GetExpiresAt() *timestamppb.Timestamp { 544 if x != nil { 545 return x.ExpiresAt 546 } 547 return nil 548} 549 550func (x *FetchDirectoryResponse) GetRootDirectoryDigest() *v2.Digest { 551 if x != nil { 552 return x.RootDirectoryDigest 553 } 554 return nil 555} 556 557// A request message for 558// [Push.PushBlob][build.bazel.remote.asset.v1.Push.PushBlob]. 559type PushBlobRequest struct { 560 state protoimpl.MessageState 561 sizeCache protoimpl.SizeCache 562 unknownFields protoimpl.UnknownFields 563 564 // The instance of the execution system to operate against. A server may 565 // support multiple instances of the execution system (with their own workers, 566 // storage, caches, etc.). The server MAY require use of this field to select 567 // between them in an implementation-defined fashion, otherwise it can be 568 // omitted. 569 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"` 570 // The URI(s) of the content to associate. If multiple URIs are specified, the 571 // pushed content will be available to fetch by specifying any of them. 572 Uris []string `protobuf:"bytes,2,rep,name=uris,proto3" json:"uris,omitempty"` 573 // Qualifiers sub-specifying the content that is being pushed - see comments 574 // on [Qualifier][build.bazel.remote.asset.v1.Qualifier]. 575 // The same qualifiers apply to all URIs. 576 Qualifiers []*Qualifier `protobuf:"bytes,3,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"` 577 // A time after which this content should stop being returned via [FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob]. 578 // Servers *MAY* expire content early, e.g. due to storage pressure. 579 ExpireAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"` 580 // The blob to associate. 581 BlobDigest *v2.Digest `protobuf:"bytes,5,opt,name=blob_digest,json=blobDigest,proto3" json:"blob_digest,omitempty"` 582 // Referenced blobs or directories that need to not expire before expiration 583 // of this association, in addition to `blob_digest` itself. 584 // These fields are hints - clients *MAY* omit them, and servers *SHOULD* 585 // respect them, at the risk of increased incidents of Fetch responses 586 // indirectly referencing unavailable blobs. 587 ReferencesBlobs []*v2.Digest `protobuf:"bytes,6,rep,name=references_blobs,json=referencesBlobs,proto3" json:"references_blobs,omitempty"` 588 ReferencesDirectories []*v2.Digest `protobuf:"bytes,7,rep,name=references_directories,json=referencesDirectories,proto3" json:"references_directories,omitempty"` 589} 590 591func (x *PushBlobRequest) Reset() { 592 *x = PushBlobRequest{} 593 if protoimpl.UnsafeEnabled { 594 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[5] 595 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 596 ms.StoreMessageInfo(mi) 597 } 598} 599 600func (x *PushBlobRequest) String() string { 601 return protoimpl.X.MessageStringOf(x) 602} 603 604func (*PushBlobRequest) ProtoMessage() {} 605 606func (x *PushBlobRequest) ProtoReflect() protoreflect.Message { 607 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[5] 608 if protoimpl.UnsafeEnabled && x != nil { 609 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 610 if ms.LoadMessageInfo() == nil { 611 ms.StoreMessageInfo(mi) 612 } 613 return ms 614 } 615 return mi.MessageOf(x) 616} 617 618// Deprecated: Use PushBlobRequest.ProtoReflect.Descriptor instead. 619func (*PushBlobRequest) Descriptor() ([]byte, []int) { 620 return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{5} 621} 622 623func (x *PushBlobRequest) GetInstanceName() string { 624 if x != nil { 625 return x.InstanceName 626 } 627 return "" 628} 629 630func (x *PushBlobRequest) GetUris() []string { 631 if x != nil { 632 return x.Uris 633 } 634 return nil 635} 636 637func (x *PushBlobRequest) GetQualifiers() []*Qualifier { 638 if x != nil { 639 return x.Qualifiers 640 } 641 return nil 642} 643 644func (x *PushBlobRequest) GetExpireAt() *timestamppb.Timestamp { 645 if x != nil { 646 return x.ExpireAt 647 } 648 return nil 649} 650 651func (x *PushBlobRequest) GetBlobDigest() *v2.Digest { 652 if x != nil { 653 return x.BlobDigest 654 } 655 return nil 656} 657 658func (x *PushBlobRequest) GetReferencesBlobs() []*v2.Digest { 659 if x != nil { 660 return x.ReferencesBlobs 661 } 662 return nil 663} 664 665func (x *PushBlobRequest) GetReferencesDirectories() []*v2.Digest { 666 if x != nil { 667 return x.ReferencesDirectories 668 } 669 return nil 670} 671 672// A response message for 673// [Push.PushBlob][build.bazel.remote.asset.v1.Push.PushBlob]. 674type PushBlobResponse struct { 675 state protoimpl.MessageState 676 sizeCache protoimpl.SizeCache 677 unknownFields protoimpl.UnknownFields 678} 679 680func (x *PushBlobResponse) Reset() { 681 *x = PushBlobResponse{} 682 if protoimpl.UnsafeEnabled { 683 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[6] 684 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 685 ms.StoreMessageInfo(mi) 686 } 687} 688 689func (x *PushBlobResponse) String() string { 690 return protoimpl.X.MessageStringOf(x) 691} 692 693func (*PushBlobResponse) ProtoMessage() {} 694 695func (x *PushBlobResponse) ProtoReflect() protoreflect.Message { 696 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[6] 697 if protoimpl.UnsafeEnabled && x != nil { 698 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 699 if ms.LoadMessageInfo() == nil { 700 ms.StoreMessageInfo(mi) 701 } 702 return ms 703 } 704 return mi.MessageOf(x) 705} 706 707// Deprecated: Use PushBlobResponse.ProtoReflect.Descriptor instead. 708func (*PushBlobResponse) Descriptor() ([]byte, []int) { 709 return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{6} 710} 711 712// A request message for 713// [Push.PushDirectory][build.bazel.remote.asset.v1.Push.PushDirectory]. 714type PushDirectoryRequest struct { 715 state protoimpl.MessageState 716 sizeCache protoimpl.SizeCache 717 unknownFields protoimpl.UnknownFields 718 719 // The instance of the execution system to operate against. A server may 720 // support multiple instances of the execution system (with their own workers, 721 // storage, caches, etc.). The server MAY require use of this field to select 722 // between them in an implementation-defined fashion, otherwise it can be 723 // omitted. 724 InstanceName string `protobuf:"bytes,1,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"` 725 // The URI(s) of the content to associate. If multiple URIs are specified, the 726 // pushed content will be available to fetch by specifying any of them. 727 Uris []string `protobuf:"bytes,2,rep,name=uris,proto3" json:"uris,omitempty"` 728 // Qualifiers sub-specifying the content that is being pushed - see comments 729 // on [Qualifier][build.bazel.remote.asset.v1.Qualifier]. 730 // The same qualifiers apply to all URIs. 731 Qualifiers []*Qualifier `protobuf:"bytes,3,rep,name=qualifiers,proto3" json:"qualifiers,omitempty"` 732 // A time after which this content should stop being returned via 733 // [FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory]. 734 // Servers *MAY* expire content early, e.g. due to storage pressure. 735 ExpireAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"` 736 // Directory to associate 737 RootDirectoryDigest *v2.Digest `protobuf:"bytes,5,opt,name=root_directory_digest,json=rootDirectoryDigest,proto3" json:"root_directory_digest,omitempty"` 738 // Referenced blobs or directories that need to not expire before expiration 739 // of this association, in addition to `root_directory_digest` itself. 740 // These fields are hints - clients *MAY* omit them, and servers *SHOULD* 741 // respect them, at the risk of increased incidents of Fetch responses 742 // indirectly referencing unavailable blobs. 743 ReferencesBlobs []*v2.Digest `protobuf:"bytes,6,rep,name=references_blobs,json=referencesBlobs,proto3" json:"references_blobs,omitempty"` 744 ReferencesDirectories []*v2.Digest `protobuf:"bytes,7,rep,name=references_directories,json=referencesDirectories,proto3" json:"references_directories,omitempty"` 745} 746 747func (x *PushDirectoryRequest) Reset() { 748 *x = PushDirectoryRequest{} 749 if protoimpl.UnsafeEnabled { 750 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[7] 751 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 752 ms.StoreMessageInfo(mi) 753 } 754} 755 756func (x *PushDirectoryRequest) String() string { 757 return protoimpl.X.MessageStringOf(x) 758} 759 760func (*PushDirectoryRequest) ProtoMessage() {} 761 762func (x *PushDirectoryRequest) ProtoReflect() protoreflect.Message { 763 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[7] 764 if protoimpl.UnsafeEnabled && x != nil { 765 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 766 if ms.LoadMessageInfo() == nil { 767 ms.StoreMessageInfo(mi) 768 } 769 return ms 770 } 771 return mi.MessageOf(x) 772} 773 774// Deprecated: Use PushDirectoryRequest.ProtoReflect.Descriptor instead. 775func (*PushDirectoryRequest) Descriptor() ([]byte, []int) { 776 return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{7} 777} 778 779func (x *PushDirectoryRequest) GetInstanceName() string { 780 if x != nil { 781 return x.InstanceName 782 } 783 return "" 784} 785 786func (x *PushDirectoryRequest) GetUris() []string { 787 if x != nil { 788 return x.Uris 789 } 790 return nil 791} 792 793func (x *PushDirectoryRequest) GetQualifiers() []*Qualifier { 794 if x != nil { 795 return x.Qualifiers 796 } 797 return nil 798} 799 800func (x *PushDirectoryRequest) GetExpireAt() *timestamppb.Timestamp { 801 if x != nil { 802 return x.ExpireAt 803 } 804 return nil 805} 806 807func (x *PushDirectoryRequest) GetRootDirectoryDigest() *v2.Digest { 808 if x != nil { 809 return x.RootDirectoryDigest 810 } 811 return nil 812} 813 814func (x *PushDirectoryRequest) GetReferencesBlobs() []*v2.Digest { 815 if x != nil { 816 return x.ReferencesBlobs 817 } 818 return nil 819} 820 821func (x *PushDirectoryRequest) GetReferencesDirectories() []*v2.Digest { 822 if x != nil { 823 return x.ReferencesDirectories 824 } 825 return nil 826} 827 828// A response message for 829// [Push.PushDirectory][build.bazel.remote.asset.v1.Push.PushDirectory]. 830type PushDirectoryResponse struct { 831 state protoimpl.MessageState 832 sizeCache protoimpl.SizeCache 833 unknownFields protoimpl.UnknownFields 834} 835 836func (x *PushDirectoryResponse) Reset() { 837 *x = PushDirectoryResponse{} 838 if protoimpl.UnsafeEnabled { 839 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[8] 840 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 841 ms.StoreMessageInfo(mi) 842 } 843} 844 845func (x *PushDirectoryResponse) String() string { 846 return protoimpl.X.MessageStringOf(x) 847} 848 849func (*PushDirectoryResponse) ProtoMessage() {} 850 851func (x *PushDirectoryResponse) ProtoReflect() protoreflect.Message { 852 mi := &file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[8] 853 if protoimpl.UnsafeEnabled && x != nil { 854 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 855 if ms.LoadMessageInfo() == nil { 856 ms.StoreMessageInfo(mi) 857 } 858 return ms 859 } 860 return mi.MessageOf(x) 861} 862 863// Deprecated: Use PushDirectoryResponse.ProtoReflect.Descriptor instead. 864func (*PushDirectoryResponse) Descriptor() ([]byte, []int) { 865 return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP(), []int{8} 866} 867 868var File_build_bazel_remote_asset_v1_remote_asset_proto protoreflect.FileDescriptor 869 870var file_build_bazel_remote_asset_v1_remote_asset_proto_rawDesc = []byte{ 871 0x0a, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65, 872 0x6d, 0x6f, 0x74, 0x65, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 873 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 874 0x12, 0x1b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 875 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x1a, 0x36, 0x62, 876 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 877 0x65, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x72, 878 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 879 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 880 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 881 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 882 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 883 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 884 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 885 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 886 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x35, 0x0a, 887 0x09, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 888 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 889 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 890 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9c, 0x02, 0x0a, 0x10, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, 891 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 892 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 893 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, 894 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 895 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 896 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 897 0x6f, 0x75, 0x74, 0x12, 0x52, 0x0a, 0x17, 0x6f, 0x6c, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f, 898 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x18, 0x03, 899 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 900 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 901 0x52, 0x15, 0x6f, 0x6c, 0x64, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x41, 902 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, 0x69, 0x73, 0x18, 903 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x69, 0x73, 0x12, 0x46, 0x0a, 0x0a, 0x71, 904 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 905 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 906 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 907 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 908 0x65, 0x72, 0x73, 0x22, 0x9e, 0x02, 0x0a, 0x11, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, 0x6f, 909 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 910 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 911 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 912 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 913 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x46, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 914 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 915 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 916 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 917 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 918 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 919 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 920 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 921 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x41, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x62, 0x6c, 922 0x6f, 0x62, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 923 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 924 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 925 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x62, 0x6c, 0x6f, 0x62, 0x44, 0x69, 926 0x67, 0x65, 0x73, 0x74, 0x22, 0xa1, 0x02, 0x0a, 0x15, 0x46, 0x65, 0x74, 0x63, 0x68, 0x44, 0x69, 927 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 928 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 929 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 930 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 931 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 932 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 933 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x52, 0x0a, 0x17, 0x6f, 0x6c, 0x64, 0x65, 934 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 935 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 936 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 937 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x15, 0x6f, 0x6c, 0x64, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 938 0x74, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 939 0x75, 0x72, 0x69, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x69, 0x73, 940 0x12, 0x46, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x05, 941 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 942 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 943 0x76, 0x31, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, 0x75, 944 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x22, 0xb6, 0x02, 0x0a, 0x16, 0x46, 0x65, 0x74, 945 0x63, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 946 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 947 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 948 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 949 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 950 0x69, 0x12, 0x46, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 951 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 952 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 953 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, 954 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 955 0x69, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 956 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 957 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 958 0x65, 0x73, 0x41, 0x74, 0x12, 0x5b, 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x72, 959 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 960 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 961 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 962 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x13, 0x72, 0x6f, 963 0x6f, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x69, 0x67, 0x65, 0x73, 964 0x74, 0x22, 0xc9, 0x03, 0x0a, 0x0f, 0x50, 0x75, 0x73, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 965 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 966 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 967 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, 968 0x69, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x69, 0x73, 0x12, 0x46, 969 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 970 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 971 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 972 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0a, 0x71, 0x75, 0x61, 0x6c, 973 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 974 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 975 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 976 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x74, 0x12, 977 0x48, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x62, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, 978 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 979 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 980 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x62, 981 0x6c, 0x6f, 0x62, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x10, 0x72, 0x65, 0x66, 982 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x06, 0x20, 983 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 984 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 985 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x72, 0x65, 986 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x5e, 0x0a, 987 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x65, 988 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 989 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 990 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 991 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x15, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 992 0x65, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0x12, 0x0a, 993 0x10, 0x50, 0x75, 0x73, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 994 0x65, 0x22, 0xe1, 0x03, 0x0a, 0x14, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 995 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 996 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 997 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 998 0x12, 0x0a, 0x04, 0x75, 0x72, 0x69, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 999 0x72, 0x69, 0x73, 0x12, 0x46, 0x0a, 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 1000 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 1001 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 1002 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 1003 0x0a, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x09, 0x65, 1004 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 1005 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 1006 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x65, 0x78, 0x70, 0x69, 1007 0x72, 0x65, 0x41, 0x74, 0x12, 0x5b, 0x0a, 0x15, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x64, 0x69, 0x72, 1008 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 1009 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 1010 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 1011 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x13, 0x72, 0x6f, 1012 0x6f, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x69, 0x67, 0x65, 0x73, 1013 0x74, 0x12, 0x52, 0x0a, 0x10, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x5f, 1014 0x62, 0x6c, 0x6f, 0x62, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 1015 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 1016 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 1017 0x67, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 1018 0x42, 0x6c, 0x6f, 0x62, 0x73, 0x12, 0x5e, 0x0a, 0x16, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 1019 0x63, 0x65, 0x73, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 1020 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 1021 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x65, 0x78, 0x65, 0x63, 0x75, 1022 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x15, 1023 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 1024 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 1025 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xdd, 1026 0x02, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x9e, 0x01, 0x0a, 0x09, 0x46, 0x65, 0x74, 1027 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 1028 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 1029 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 1030 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 1031 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 1032 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x73, 1033 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x3a, 0x01, 0x2a, 1034 0x22, 0x27, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 1035 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, 1036 0x66, 0x65, 0x74, 0x63, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x12, 0xb2, 0x01, 0x0a, 0x0e, 0x46, 0x65, 1037 0x74, 0x63, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x32, 0x2e, 0x62, 1038 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 1039 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 1040 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 1041 0x1a, 0x33, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 1042 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x46, 1043 0x65, 0x74, 0x63, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 1044 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x31, 0x3a, 0x01, 0x2a, 1045 0x22, 0x2c, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 1046 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, 1047 0x66, 0x65, 0x74, 0x63, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x32, 0xd4, 1048 0x02, 0x0a, 0x04, 0x50, 0x75, 0x73, 0x68, 0x12, 0x9a, 0x01, 0x0a, 0x08, 0x50, 0x75, 0x73, 0x68, 1049 0x42, 0x6c, 0x6f, 0x62, 0x12, 0x2c, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 1050 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 1051 0x76, 0x31, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 1052 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 1053 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 1054 0x2e, 0x50, 0x75, 0x73, 0x68, 0x42, 0x6c, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 1055 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x76, 1056 0x31, 0x2f, 0x7b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 1057 0x3d, 0x2a, 0x2a, 0x7d, 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x70, 0x75, 0x73, 0x68, 1058 0x42, 0x6c, 0x6f, 0x62, 0x12, 0xae, 0x01, 0x0a, 0x0d, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 1059 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x31, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x62, 1060 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 0x65, 1061 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 1062 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x62, 0x75, 0x69, 0x6c, 1063 0x64, 0x2e, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 1064 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 0x65, 1065 0x63, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x82, 1066 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x69, 1067 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x2a, 0x2a, 0x7d, 1068 0x2f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x70, 0x75, 0x73, 0x68, 0x44, 0x69, 0x72, 0x65, 1069 0x63, 0x74, 0x6f, 0x72, 0x79, 0x42, 0x9f, 0x01, 0x0a, 0x1b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2e, 1070 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x61, 0x73, 0x73, 1071 0x65, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x73, 0x73, 1072 0x65, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x49, 0x67, 0x69, 0x74, 0x68, 0x75, 1073 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x62, 0x75, 0x69, 0x6c, 0x64, 1074 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x62, 0x75, 0x69, 1075 0x6c, 0x64, 0x2f, 0x62, 0x61, 0x7a, 0x65, 0x6c, 0x2f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2f, 1076 0x61, 0x73, 0x73, 0x65, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x61, 1077 0x73, 0x73, 0x65, 0x74, 0xa2, 0x02, 0x02, 0x52, 0x41, 0xaa, 0x02, 0x1b, 0x42, 0x75, 0x69, 0x6c, 1078 0x64, 0x2e, 0x42, 0x61, 0x7a, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x41, 1079 0x73, 0x73, 0x65, 0x74, 0x2e, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 1080} 1081 1082var ( 1083 file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescOnce sync.Once 1084 file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescData = file_build_bazel_remote_asset_v1_remote_asset_proto_rawDesc 1085) 1086 1087func file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescGZIP() []byte { 1088 file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescOnce.Do(func() { 1089 file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescData = protoimpl.X.CompressGZIP(file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescData) 1090 }) 1091 return file_build_bazel_remote_asset_v1_remote_asset_proto_rawDescData 1092} 1093 1094var file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes = make([]protoimpl.MessageInfo, 9) 1095var file_build_bazel_remote_asset_v1_remote_asset_proto_goTypes = []interface{}{ 1096 (*Qualifier)(nil), // 0: build.bazel.remote.asset.v1.Qualifier 1097 (*FetchBlobRequest)(nil), // 1: build.bazel.remote.asset.v1.FetchBlobRequest 1098 (*FetchBlobResponse)(nil), // 2: build.bazel.remote.asset.v1.FetchBlobResponse 1099 (*FetchDirectoryRequest)(nil), // 3: build.bazel.remote.asset.v1.FetchDirectoryRequest 1100 (*FetchDirectoryResponse)(nil), // 4: build.bazel.remote.asset.v1.FetchDirectoryResponse 1101 (*PushBlobRequest)(nil), // 5: build.bazel.remote.asset.v1.PushBlobRequest 1102 (*PushBlobResponse)(nil), // 6: build.bazel.remote.asset.v1.PushBlobResponse 1103 (*PushDirectoryRequest)(nil), // 7: build.bazel.remote.asset.v1.PushDirectoryRequest 1104 (*PushDirectoryResponse)(nil), // 8: build.bazel.remote.asset.v1.PushDirectoryResponse 1105 (*durationpb.Duration)(nil), // 9: google.protobuf.Duration 1106 (*timestamppb.Timestamp)(nil), // 10: google.protobuf.Timestamp 1107 (*status.Status)(nil), // 11: google.rpc.Status 1108 (*v2.Digest)(nil), // 12: build.bazel.remote.execution.v2.Digest 1109} 1110var file_build_bazel_remote_asset_v1_remote_asset_proto_depIdxs = []int32{ 1111 9, // 0: build.bazel.remote.asset.v1.FetchBlobRequest.timeout:type_name -> google.protobuf.Duration 1112 10, // 1: build.bazel.remote.asset.v1.FetchBlobRequest.oldest_content_accepted:type_name -> google.protobuf.Timestamp 1113 0, // 2: build.bazel.remote.asset.v1.FetchBlobRequest.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier 1114 11, // 3: build.bazel.remote.asset.v1.FetchBlobResponse.status:type_name -> google.rpc.Status 1115 0, // 4: build.bazel.remote.asset.v1.FetchBlobResponse.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier 1116 10, // 5: build.bazel.remote.asset.v1.FetchBlobResponse.expires_at:type_name -> google.protobuf.Timestamp 1117 12, // 6: build.bazel.remote.asset.v1.FetchBlobResponse.blob_digest:type_name -> build.bazel.remote.execution.v2.Digest 1118 9, // 7: build.bazel.remote.asset.v1.FetchDirectoryRequest.timeout:type_name -> google.protobuf.Duration 1119 10, // 8: build.bazel.remote.asset.v1.FetchDirectoryRequest.oldest_content_accepted:type_name -> google.protobuf.Timestamp 1120 0, // 9: build.bazel.remote.asset.v1.FetchDirectoryRequest.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier 1121 11, // 10: build.bazel.remote.asset.v1.FetchDirectoryResponse.status:type_name -> google.rpc.Status 1122 0, // 11: build.bazel.remote.asset.v1.FetchDirectoryResponse.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier 1123 10, // 12: build.bazel.remote.asset.v1.FetchDirectoryResponse.expires_at:type_name -> google.protobuf.Timestamp 1124 12, // 13: build.bazel.remote.asset.v1.FetchDirectoryResponse.root_directory_digest:type_name -> build.bazel.remote.execution.v2.Digest 1125 0, // 14: build.bazel.remote.asset.v1.PushBlobRequest.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier 1126 10, // 15: build.bazel.remote.asset.v1.PushBlobRequest.expire_at:type_name -> google.protobuf.Timestamp 1127 12, // 16: build.bazel.remote.asset.v1.PushBlobRequest.blob_digest:type_name -> build.bazel.remote.execution.v2.Digest 1128 12, // 17: build.bazel.remote.asset.v1.PushBlobRequest.references_blobs:type_name -> build.bazel.remote.execution.v2.Digest 1129 12, // 18: build.bazel.remote.asset.v1.PushBlobRequest.references_directories:type_name -> build.bazel.remote.execution.v2.Digest 1130 0, // 19: build.bazel.remote.asset.v1.PushDirectoryRequest.qualifiers:type_name -> build.bazel.remote.asset.v1.Qualifier 1131 10, // 20: build.bazel.remote.asset.v1.PushDirectoryRequest.expire_at:type_name -> google.protobuf.Timestamp 1132 12, // 21: build.bazel.remote.asset.v1.PushDirectoryRequest.root_directory_digest:type_name -> build.bazel.remote.execution.v2.Digest 1133 12, // 22: build.bazel.remote.asset.v1.PushDirectoryRequest.references_blobs:type_name -> build.bazel.remote.execution.v2.Digest 1134 12, // 23: build.bazel.remote.asset.v1.PushDirectoryRequest.references_directories:type_name -> build.bazel.remote.execution.v2.Digest 1135 1, // 24: build.bazel.remote.asset.v1.Fetch.FetchBlob:input_type -> build.bazel.remote.asset.v1.FetchBlobRequest 1136 3, // 25: build.bazel.remote.asset.v1.Fetch.FetchDirectory:input_type -> build.bazel.remote.asset.v1.FetchDirectoryRequest 1137 5, // 26: build.bazel.remote.asset.v1.Push.PushBlob:input_type -> build.bazel.remote.asset.v1.PushBlobRequest 1138 7, // 27: build.bazel.remote.asset.v1.Push.PushDirectory:input_type -> build.bazel.remote.asset.v1.PushDirectoryRequest 1139 2, // 28: build.bazel.remote.asset.v1.Fetch.FetchBlob:output_type -> build.bazel.remote.asset.v1.FetchBlobResponse 1140 4, // 29: build.bazel.remote.asset.v1.Fetch.FetchDirectory:output_type -> build.bazel.remote.asset.v1.FetchDirectoryResponse 1141 6, // 30: build.bazel.remote.asset.v1.Push.PushBlob:output_type -> build.bazel.remote.asset.v1.PushBlobResponse 1142 8, // 31: build.bazel.remote.asset.v1.Push.PushDirectory:output_type -> build.bazel.remote.asset.v1.PushDirectoryResponse 1143 28, // [28:32] is the sub-list for method output_type 1144 24, // [24:28] is the sub-list for method input_type 1145 24, // [24:24] is the sub-list for extension type_name 1146 24, // [24:24] is the sub-list for extension extendee 1147 0, // [0:24] is the sub-list for field type_name 1148} 1149 1150func init() { file_build_bazel_remote_asset_v1_remote_asset_proto_init() } 1151func file_build_bazel_remote_asset_v1_remote_asset_proto_init() { 1152 if File_build_bazel_remote_asset_v1_remote_asset_proto != nil { 1153 return 1154 } 1155 if !protoimpl.UnsafeEnabled { 1156 file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { 1157 switch v := v.(*Qualifier); i { 1158 case 0: 1159 return &v.state 1160 case 1: 1161 return &v.sizeCache 1162 case 2: 1163 return &v.unknownFields 1164 default: 1165 return nil 1166 } 1167 } 1168 file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { 1169 switch v := v.(*FetchBlobRequest); i { 1170 case 0: 1171 return &v.state 1172 case 1: 1173 return &v.sizeCache 1174 case 2: 1175 return &v.unknownFields 1176 default: 1177 return nil 1178 } 1179 } 1180 file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { 1181 switch v := v.(*FetchBlobResponse); i { 1182 case 0: 1183 return &v.state 1184 case 1: 1185 return &v.sizeCache 1186 case 2: 1187 return &v.unknownFields 1188 default: 1189 return nil 1190 } 1191 } 1192 file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { 1193 switch v := v.(*FetchDirectoryRequest); i { 1194 case 0: 1195 return &v.state 1196 case 1: 1197 return &v.sizeCache 1198 case 2: 1199 return &v.unknownFields 1200 default: 1201 return nil 1202 } 1203 } 1204 file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { 1205 switch v := v.(*FetchDirectoryResponse); i { 1206 case 0: 1207 return &v.state 1208 case 1: 1209 return &v.sizeCache 1210 case 2: 1211 return &v.unknownFields 1212 default: 1213 return nil 1214 } 1215 } 1216 file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { 1217 switch v := v.(*PushBlobRequest); i { 1218 case 0: 1219 return &v.state 1220 case 1: 1221 return &v.sizeCache 1222 case 2: 1223 return &v.unknownFields 1224 default: 1225 return nil 1226 } 1227 } 1228 file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { 1229 switch v := v.(*PushBlobResponse); i { 1230 case 0: 1231 return &v.state 1232 case 1: 1233 return &v.sizeCache 1234 case 2: 1235 return &v.unknownFields 1236 default: 1237 return nil 1238 } 1239 } 1240 file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { 1241 switch v := v.(*PushDirectoryRequest); i { 1242 case 0: 1243 return &v.state 1244 case 1: 1245 return &v.sizeCache 1246 case 2: 1247 return &v.unknownFields 1248 default: 1249 return nil 1250 } 1251 } 1252 file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { 1253 switch v := v.(*PushDirectoryResponse); i { 1254 case 0: 1255 return &v.state 1256 case 1: 1257 return &v.sizeCache 1258 case 2: 1259 return &v.unknownFields 1260 default: 1261 return nil 1262 } 1263 } 1264 } 1265 type x struct{} 1266 out := protoimpl.TypeBuilder{ 1267 File: protoimpl.DescBuilder{ 1268 GoPackagePath: reflect.TypeOf(x{}).PkgPath(), 1269 RawDescriptor: file_build_bazel_remote_asset_v1_remote_asset_proto_rawDesc, 1270 NumEnums: 0, 1271 NumMessages: 9, 1272 NumExtensions: 0, 1273 NumServices: 2, 1274 }, 1275 GoTypes: file_build_bazel_remote_asset_v1_remote_asset_proto_goTypes, 1276 DependencyIndexes: file_build_bazel_remote_asset_v1_remote_asset_proto_depIdxs, 1277 MessageInfos: file_build_bazel_remote_asset_v1_remote_asset_proto_msgTypes, 1278 }.Build() 1279 File_build_bazel_remote_asset_v1_remote_asset_proto = out.File 1280 file_build_bazel_remote_asset_v1_remote_asset_proto_rawDesc = nil 1281 file_build_bazel_remote_asset_v1_remote_asset_proto_goTypes = nil 1282 file_build_bazel_remote_asset_v1_remote_asset_proto_depIdxs = nil 1283} 1284 1285// Reference imports to suppress errors if they are not otherwise used. 1286var _ context.Context 1287var _ grpc.ClientConnInterface 1288 1289// This is a compile-time assertion to ensure that this generated file 1290// is compatible with the grpc package it is being compiled against. 1291const _ = grpc.SupportPackageIsVersion6 1292 1293// FetchClient is the client API for Fetch service. 1294// 1295// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. 1296type FetchClient interface { 1297 // Resolve or fetch referenced assets, making them available to the caller and 1298 // other consumers in the [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]. 1299 // 1300 // Servers *MAY* fetch content that they do not already have cached, for any 1301 // URLs they support. 1302 // 1303 // Servers *SHOULD* ensure that referenced files are present in the CAS at the 1304 // time of the response, and (if supported) that they will remain available 1305 // for a reasonable period of time. The lifetimes of the referenced blobs *SHOULD* 1306 // be increased if necessary and applicable. 1307 // In the event that a client receives a reference to content that is no 1308 // longer present, it *MAY* re-issue the request with 1309 // `oldest_content_accepted` set to a more recent timestamp than the original 1310 // attempt, to induce a re-fetch from origin. 1311 // 1312 // Servers *MAY* cache fetched content and reuse it for subsequent requests, 1313 // subject to `oldest_content_accepted`. 1314 // 1315 // Servers *MAY* support the complementary [Push][build.bazel.remote.asset.v1.Push] 1316 // API and allow content to be directly inserted for use in future fetch 1317 // responses. 1318 // 1319 // Servers *MUST* ensure Fetch'd content matches all the specified 1320 // qualifiers except in the case of previously Push'd resources, for which 1321 // the server *MAY* trust the pushing client to have set the qualifiers 1322 // correctly, without validation. 1323 // 1324 // Servers not implementing the complementary [Push][build.bazel.remote.asset.v1.Push] 1325 // API *MUST* reject requests containing qualifiers it does not support. 1326 // 1327 // Servers *MAY* transform assets as part of the fetch. For example a 1328 // tarball fetched by [FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory] 1329 // might be unpacked, or a Git repository 1330 // fetched by [FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob] 1331 // might be passed through `git-archive`. 1332 // 1333 // Errors handling the requested assets will be returned as gRPC Status errors 1334 // here; errors outside the server's control will be returned inline in the 1335 // `status` field of the response (see comment there for details). 1336 // The possible RPC errors include: 1337 // - `INVALID_ARGUMENT`: One or more arguments were invalid, such as a 1338 // qualifier that is not supported by the server. 1339 // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to 1340 // perform the requested operation. The client may retry after a delay. 1341 // - `UNAVAILABLE`: Due to a transient condition the operation could not be 1342 // completed. The client should retry. 1343 // - `INTERNAL`: An internal error occurred while performing the operation. 1344 // The client should retry. 1345 // - `DEADLINE_EXCEEDED`: The fetch could not be completed within the given 1346 // RPC deadline. The client should retry for at least as long as the value 1347 // provided in `timeout` field of the request. 1348 // 1349 // In the case of unsupported qualifiers, the server *SHOULD* additionally 1350 // send a [BadRequest][google.rpc.BadRequest] error detail where, for each 1351 // unsupported qualifier, there is a `FieldViolation` with a `field` of 1352 // `qualifiers.name` and a `description` of `"{qualifier}" not supported` 1353 // indicating the name of the unsupported qualifier. 1354 FetchBlob(ctx context.Context, in *FetchBlobRequest, opts ...grpc.CallOption) (*FetchBlobResponse, error) 1355 FetchDirectory(ctx context.Context, in *FetchDirectoryRequest, opts ...grpc.CallOption) (*FetchDirectoryResponse, error) 1356} 1357 1358type fetchClient struct { 1359 cc grpc.ClientConnInterface 1360} 1361 1362func NewFetchClient(cc grpc.ClientConnInterface) FetchClient { 1363 return &fetchClient{cc} 1364} 1365 1366func (c *fetchClient) FetchBlob(ctx context.Context, in *FetchBlobRequest, opts ...grpc.CallOption) (*FetchBlobResponse, error) { 1367 out := new(FetchBlobResponse) 1368 err := c.cc.Invoke(ctx, "/build.bazel.remote.asset.v1.Fetch/FetchBlob", in, out, opts...) 1369 if err != nil { 1370 return nil, err 1371 } 1372 return out, nil 1373} 1374 1375func (c *fetchClient) FetchDirectory(ctx context.Context, in *FetchDirectoryRequest, opts ...grpc.CallOption) (*FetchDirectoryResponse, error) { 1376 out := new(FetchDirectoryResponse) 1377 err := c.cc.Invoke(ctx, "/build.bazel.remote.asset.v1.Fetch/FetchDirectory", in, out, opts...) 1378 if err != nil { 1379 return nil, err 1380 } 1381 return out, nil 1382} 1383 1384// FetchServer is the server API for Fetch service. 1385type FetchServer interface { 1386 // Resolve or fetch referenced assets, making them available to the caller and 1387 // other consumers in the [ContentAddressableStorage][build.bazel.remote.execution.v2.ContentAddressableStorage]. 1388 // 1389 // Servers *MAY* fetch content that they do not already have cached, for any 1390 // URLs they support. 1391 // 1392 // Servers *SHOULD* ensure that referenced files are present in the CAS at the 1393 // time of the response, and (if supported) that they will remain available 1394 // for a reasonable period of time. The lifetimes of the referenced blobs *SHOULD* 1395 // be increased if necessary and applicable. 1396 // In the event that a client receives a reference to content that is no 1397 // longer present, it *MAY* re-issue the request with 1398 // `oldest_content_accepted` set to a more recent timestamp than the original 1399 // attempt, to induce a re-fetch from origin. 1400 // 1401 // Servers *MAY* cache fetched content and reuse it for subsequent requests, 1402 // subject to `oldest_content_accepted`. 1403 // 1404 // Servers *MAY* support the complementary [Push][build.bazel.remote.asset.v1.Push] 1405 // API and allow content to be directly inserted for use in future fetch 1406 // responses. 1407 // 1408 // Servers *MUST* ensure Fetch'd content matches all the specified 1409 // qualifiers except in the case of previously Push'd resources, for which 1410 // the server *MAY* trust the pushing client to have set the qualifiers 1411 // correctly, without validation. 1412 // 1413 // Servers not implementing the complementary [Push][build.bazel.remote.asset.v1.Push] 1414 // API *MUST* reject requests containing qualifiers it does not support. 1415 // 1416 // Servers *MAY* transform assets as part of the fetch. For example a 1417 // tarball fetched by [FetchDirectory][build.bazel.remote.asset.v1.Fetch.FetchDirectory] 1418 // might be unpacked, or a Git repository 1419 // fetched by [FetchBlob][build.bazel.remote.asset.v1.Fetch.FetchBlob] 1420 // might be passed through `git-archive`. 1421 // 1422 // Errors handling the requested assets will be returned as gRPC Status errors 1423 // here; errors outside the server's control will be returned inline in the 1424 // `status` field of the response (see comment there for details). 1425 // The possible RPC errors include: 1426 // - `INVALID_ARGUMENT`: One or more arguments were invalid, such as a 1427 // qualifier that is not supported by the server. 1428 // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to 1429 // perform the requested operation. The client may retry after a delay. 1430 // - `UNAVAILABLE`: Due to a transient condition the operation could not be 1431 // completed. The client should retry. 1432 // - `INTERNAL`: An internal error occurred while performing the operation. 1433 // The client should retry. 1434 // - `DEADLINE_EXCEEDED`: The fetch could not be completed within the given 1435 // RPC deadline. The client should retry for at least as long as the value 1436 // provided in `timeout` field of the request. 1437 // 1438 // In the case of unsupported qualifiers, the server *SHOULD* additionally 1439 // send a [BadRequest][google.rpc.BadRequest] error detail where, for each 1440 // unsupported qualifier, there is a `FieldViolation` with a `field` of 1441 // `qualifiers.name` and a `description` of `"{qualifier}" not supported` 1442 // indicating the name of the unsupported qualifier. 1443 FetchBlob(context.Context, *FetchBlobRequest) (*FetchBlobResponse, error) 1444 FetchDirectory(context.Context, *FetchDirectoryRequest) (*FetchDirectoryResponse, error) 1445} 1446 1447// UnimplementedFetchServer can be embedded to have forward compatible implementations. 1448type UnimplementedFetchServer struct { 1449} 1450 1451func (*UnimplementedFetchServer) FetchBlob(context.Context, *FetchBlobRequest) (*FetchBlobResponse, error) { 1452 return nil, status1.Errorf(codes.Unimplemented, "method FetchBlob not implemented") 1453} 1454func (*UnimplementedFetchServer) FetchDirectory(context.Context, *FetchDirectoryRequest) (*FetchDirectoryResponse, error) { 1455 return nil, status1.Errorf(codes.Unimplemented, "method FetchDirectory not implemented") 1456} 1457 1458func RegisterFetchServer(s *grpc.Server, srv FetchServer) { 1459 s.RegisterService(&_Fetch_serviceDesc, srv) 1460} 1461 1462func _Fetch_FetchBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1463 in := new(FetchBlobRequest) 1464 if err := dec(in); err != nil { 1465 return nil, err 1466 } 1467 if interceptor == nil { 1468 return srv.(FetchServer).FetchBlob(ctx, in) 1469 } 1470 info := &grpc.UnaryServerInfo{ 1471 Server: srv, 1472 FullMethod: "/build.bazel.remote.asset.v1.Fetch/FetchBlob", 1473 } 1474 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1475 return srv.(FetchServer).FetchBlob(ctx, req.(*FetchBlobRequest)) 1476 } 1477 return interceptor(ctx, in, info, handler) 1478} 1479 1480func _Fetch_FetchDirectory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1481 in := new(FetchDirectoryRequest) 1482 if err := dec(in); err != nil { 1483 return nil, err 1484 } 1485 if interceptor == nil { 1486 return srv.(FetchServer).FetchDirectory(ctx, in) 1487 } 1488 info := &grpc.UnaryServerInfo{ 1489 Server: srv, 1490 FullMethod: "/build.bazel.remote.asset.v1.Fetch/FetchDirectory", 1491 } 1492 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1493 return srv.(FetchServer).FetchDirectory(ctx, req.(*FetchDirectoryRequest)) 1494 } 1495 return interceptor(ctx, in, info, handler) 1496} 1497 1498var _Fetch_serviceDesc = grpc.ServiceDesc{ 1499 ServiceName: "build.bazel.remote.asset.v1.Fetch", 1500 HandlerType: (*FetchServer)(nil), 1501 Methods: []grpc.MethodDesc{ 1502 { 1503 MethodName: "FetchBlob", 1504 Handler: _Fetch_FetchBlob_Handler, 1505 }, 1506 { 1507 MethodName: "FetchDirectory", 1508 Handler: _Fetch_FetchDirectory_Handler, 1509 }, 1510 }, 1511 Streams: []grpc.StreamDesc{}, 1512 Metadata: "build/bazel/remote/asset/v1/remote_asset.proto", 1513} 1514 1515// PushClient is the client API for Push service. 1516// 1517// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. 1518type PushClient interface { 1519 // These APIs associate the identifying information of a resource, as 1520 // indicated by URI and optionally Qualifiers, with content available in the 1521 // CAS. For example, associating a repository url and a commit id with a 1522 // Directory Digest. 1523 // 1524 // Servers *SHOULD* only allow trusted clients to associate content, and *MAY* 1525 // only allow certain URIs to be pushed. 1526 // 1527 // Clients *MUST* ensure associated content is available in CAS prior to 1528 // pushing. 1529 // 1530 // Clients *MUST* ensure the Qualifiers listed correctly match the contents, 1531 // and Servers *MAY* trust these values without validation. 1532 // Fetch servers *MAY* require exact match of all qualifiers when returning 1533 // content previously pushed, or allow fetching content with only a subset of 1534 // the qualifiers specified on Push. 1535 // 1536 // Clients can specify expiration information that the server *SHOULD* 1537 // respect. Subsequent requests can be used to alter the expiration time. 1538 // 1539 // A minimal compliant Fetch implementation may support only Push'd content 1540 // and return `NOT_FOUND` for any resource that was not pushed first. 1541 // Alternatively, a compliant implementation may choose to not support Push 1542 // and only return resources that can be Fetch'd from origin. 1543 // 1544 // Errors will be returned as gRPC Status errors. 1545 // The possible RPC errors include: 1546 // - `INVALID_ARGUMENT`: One or more arguments to the RPC were invalid. 1547 // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to 1548 // perform the requested operation. The client may retry after a delay. 1549 // - `UNAVAILABLE`: Due to a transient condition the operation could not be 1550 // completed. The client should retry. 1551 // - `INTERNAL`: An internal error occurred while performing the operation. 1552 // The client should retry. 1553 PushBlob(ctx context.Context, in *PushBlobRequest, opts ...grpc.CallOption) (*PushBlobResponse, error) 1554 PushDirectory(ctx context.Context, in *PushDirectoryRequest, opts ...grpc.CallOption) (*PushDirectoryResponse, error) 1555} 1556 1557type pushClient struct { 1558 cc grpc.ClientConnInterface 1559} 1560 1561func NewPushClient(cc grpc.ClientConnInterface) PushClient { 1562 return &pushClient{cc} 1563} 1564 1565func (c *pushClient) PushBlob(ctx context.Context, in *PushBlobRequest, opts ...grpc.CallOption) (*PushBlobResponse, error) { 1566 out := new(PushBlobResponse) 1567 err := c.cc.Invoke(ctx, "/build.bazel.remote.asset.v1.Push/PushBlob", in, out, opts...) 1568 if err != nil { 1569 return nil, err 1570 } 1571 return out, nil 1572} 1573 1574func (c *pushClient) PushDirectory(ctx context.Context, in *PushDirectoryRequest, opts ...grpc.CallOption) (*PushDirectoryResponse, error) { 1575 out := new(PushDirectoryResponse) 1576 err := c.cc.Invoke(ctx, "/build.bazel.remote.asset.v1.Push/PushDirectory", in, out, opts...) 1577 if err != nil { 1578 return nil, err 1579 } 1580 return out, nil 1581} 1582 1583// PushServer is the server API for Push service. 1584type PushServer interface { 1585 // These APIs associate the identifying information of a resource, as 1586 // indicated by URI and optionally Qualifiers, with content available in the 1587 // CAS. For example, associating a repository url and a commit id with a 1588 // Directory Digest. 1589 // 1590 // Servers *SHOULD* only allow trusted clients to associate content, and *MAY* 1591 // only allow certain URIs to be pushed. 1592 // 1593 // Clients *MUST* ensure associated content is available in CAS prior to 1594 // pushing. 1595 // 1596 // Clients *MUST* ensure the Qualifiers listed correctly match the contents, 1597 // and Servers *MAY* trust these values without validation. 1598 // Fetch servers *MAY* require exact match of all qualifiers when returning 1599 // content previously pushed, or allow fetching content with only a subset of 1600 // the qualifiers specified on Push. 1601 // 1602 // Clients can specify expiration information that the server *SHOULD* 1603 // respect. Subsequent requests can be used to alter the expiration time. 1604 // 1605 // A minimal compliant Fetch implementation may support only Push'd content 1606 // and return `NOT_FOUND` for any resource that was not pushed first. 1607 // Alternatively, a compliant implementation may choose to not support Push 1608 // and only return resources that can be Fetch'd from origin. 1609 // 1610 // Errors will be returned as gRPC Status errors. 1611 // The possible RPC errors include: 1612 // - `INVALID_ARGUMENT`: One or more arguments to the RPC were invalid. 1613 // - `RESOURCE_EXHAUSTED`: There is insufficient quota of some resource to 1614 // perform the requested operation. The client may retry after a delay. 1615 // - `UNAVAILABLE`: Due to a transient condition the operation could not be 1616 // completed. The client should retry. 1617 // - `INTERNAL`: An internal error occurred while performing the operation. 1618 // The client should retry. 1619 PushBlob(context.Context, *PushBlobRequest) (*PushBlobResponse, error) 1620 PushDirectory(context.Context, *PushDirectoryRequest) (*PushDirectoryResponse, error) 1621} 1622 1623// UnimplementedPushServer can be embedded to have forward compatible implementations. 1624type UnimplementedPushServer struct { 1625} 1626 1627func (*UnimplementedPushServer) PushBlob(context.Context, *PushBlobRequest) (*PushBlobResponse, error) { 1628 return nil, status1.Errorf(codes.Unimplemented, "method PushBlob not implemented") 1629} 1630func (*UnimplementedPushServer) PushDirectory(context.Context, *PushDirectoryRequest) (*PushDirectoryResponse, error) { 1631 return nil, status1.Errorf(codes.Unimplemented, "method PushDirectory not implemented") 1632} 1633 1634func RegisterPushServer(s *grpc.Server, srv PushServer) { 1635 s.RegisterService(&_Push_serviceDesc, srv) 1636} 1637 1638func _Push_PushBlob_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1639 in := new(PushBlobRequest) 1640 if err := dec(in); err != nil { 1641 return nil, err 1642 } 1643 if interceptor == nil { 1644 return srv.(PushServer).PushBlob(ctx, in) 1645 } 1646 info := &grpc.UnaryServerInfo{ 1647 Server: srv, 1648 FullMethod: "/build.bazel.remote.asset.v1.Push/PushBlob", 1649 } 1650 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1651 return srv.(PushServer).PushBlob(ctx, req.(*PushBlobRequest)) 1652 } 1653 return interceptor(ctx, in, info, handler) 1654} 1655 1656func _Push_PushDirectory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1657 in := new(PushDirectoryRequest) 1658 if err := dec(in); err != nil { 1659 return nil, err 1660 } 1661 if interceptor == nil { 1662 return srv.(PushServer).PushDirectory(ctx, in) 1663 } 1664 info := &grpc.UnaryServerInfo{ 1665 Server: srv, 1666 FullMethod: "/build.bazel.remote.asset.v1.Push/PushDirectory", 1667 } 1668 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1669 return srv.(PushServer).PushDirectory(ctx, req.(*PushDirectoryRequest)) 1670 } 1671 return interceptor(ctx, in, info, handler) 1672} 1673 1674var _Push_serviceDesc = grpc.ServiceDesc{ 1675 ServiceName: "build.bazel.remote.asset.v1.Push", 1676 HandlerType: (*PushServer)(nil), 1677 Methods: []grpc.MethodDesc{ 1678 { 1679 MethodName: "PushBlob", 1680 Handler: _Push_PushBlob_Handler, 1681 }, 1682 { 1683 MethodName: "PushDirectory", 1684 Handler: _Push_PushDirectory_Handler, 1685 }, 1686 }, 1687 Streams: []grpc.StreamDesc{}, 1688 Metadata: "build/bazel/remote/asset/v1/remote_asset.proto", 1689} 1690