go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/proto/v1/test_variant_branches.pb.go (about) 1 // Copyright 2023 The LUCI 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.32.0 18 // protoc v3.21.7 19 // source: go.chromium.org/luci/analysis/proto/v1/test_variant_branches.proto 20 21 package analysispb 22 23 import prpc "go.chromium.org/luci/grpc/prpc" 24 25 import ( 26 context "context" 27 git "go.chromium.org/luci/common/proto/git" 28 _ "google.golang.org/genproto/googleapis/api/annotations" 29 grpc "google.golang.org/grpc" 30 codes "google.golang.org/grpc/codes" 31 status "google.golang.org/grpc/status" 32 protoreflect "google.golang.org/protobuf/reflect/protoreflect" 33 protoimpl "google.golang.org/protobuf/runtime/protoimpl" 34 anypb "google.golang.org/protobuf/types/known/anypb" 35 timestamppb "google.golang.org/protobuf/types/known/timestamppb" 36 reflect "reflect" 37 sync "sync" 38 ) 39 40 const ( 41 // Verify that this generated code is sufficiently up-to-date. 42 _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) 43 // Verify that runtime/protoimpl is sufficiently up-to-date. 44 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 45 ) 46 47 // A request message for `TestVariantBranches.Get` RPC. 48 type GetRawTestVariantBranchRequest struct { 49 state protoimpl.MessageState 50 sizeCache protoimpl.SizeCache 51 unknownFields protoimpl.UnknownFields 52 53 // The name of the test variant branch. 54 // It MUST be of the form projects/{PROJECT}/tests/{URL_ESCAPED_TEST_ID}/variants/{VARIANT_HASH}/refs/{REF_HASH} 55 // where: 56 // PROJECT is the LUCI Project of the test variant branch analysis. 57 // URL_ESCAPED_TEST_ID is the test ID, escaped with 58 // https://golang.org/pkg/net/url/#PathEscape. See also https://aip.dev/122. 59 // VARIANT_HASH is the variant hash of the test variant analysis (16 lower-case-character hex string). 60 // REF_HASH is the identity of the branch of the analysis. It is a 16 lower-case-character hex string. 61 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 62 } 63 64 func (x *GetRawTestVariantBranchRequest) Reset() { 65 *x = GetRawTestVariantBranchRequest{} 66 if protoimpl.UnsafeEnabled { 67 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[0] 68 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 69 ms.StoreMessageInfo(mi) 70 } 71 } 72 73 func (x *GetRawTestVariantBranchRequest) String() string { 74 return protoimpl.X.MessageStringOf(x) 75 } 76 77 func (*GetRawTestVariantBranchRequest) ProtoMessage() {} 78 79 func (x *GetRawTestVariantBranchRequest) ProtoReflect() protoreflect.Message { 80 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[0] 81 if protoimpl.UnsafeEnabled && x != nil { 82 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 83 if ms.LoadMessageInfo() == nil { 84 ms.StoreMessageInfo(mi) 85 } 86 return ms 87 } 88 return mi.MessageOf(x) 89 } 90 91 // Deprecated: Use GetRawTestVariantBranchRequest.ProtoReflect.Descriptor instead. 92 func (*GetRawTestVariantBranchRequest) Descriptor() ([]byte, []int) { 93 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP(), []int{0} 94 } 95 96 func (x *GetRawTestVariantBranchRequest) GetName() string { 97 if x != nil { 98 return x.Name 99 } 100 return "" 101 } 102 103 // Represents changepoint analysis raw data for a particular (project, test, variant, ref) in spanner. 104 type TestVariantBranchRaw struct { 105 state protoimpl.MessageState 106 sizeCache protoimpl.SizeCache 107 unknownFields protoimpl.UnknownFields 108 109 // The name of the test variant branch. 110 // Of the form projects/{PROJECT}/tests/{URL_ESCAPED_TEST_ID}/variants/{VARIANT_HASH}/refs/{REF_HASH} 111 // where: 112 // PROJECT is the LUCI Project of the test variant branch analysis. 113 // URL_ESCAPED_TEST_ID is the test ID, escaped with 114 // https://golang.org/pkg/net/url/#PathEscape. See also https://aip.dev/122. 115 // VARIANT_HASH is the variant hash of the test variant analysis (16 lower-case-character hex string). 116 // REF_HASH is the identity of the branch of the analysis. It is a 16 lower-case-character hex string. 117 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 118 // The LUCI Project. E.g. "chromium". 119 Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` 120 // The identity of the test. 121 TestId string `protobuf:"bytes,3,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"` 122 // Hash of the variant, as 16 lowercase hexadecimal characters. 123 // E.g. "96c68dc946ab4068". 124 VariantHash string `protobuf:"bytes,4,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"` 125 // Hash of the source branch, as 16 lowercase hexadecimal characters. 126 RefHash string `protobuf:"bytes,5,opt,name=ref_hash,json=refHash,proto3" json:"ref_hash,omitempty"` 127 // Describes one specific way of running the test, e.g. a specific bucket, 128 // builder and a test suite. 129 Variant *Variant `protobuf:"bytes,6,opt,name=variant,proto3" json:"variant,omitempty"` 130 // The branch in source control. 131 Ref *SourceRef `protobuf:"bytes,7,opt,name=ref,proto3" json:"ref,omitempty"` 132 // The finalized segments in the output buffer. 133 // 134 // Do not depend on this field. The internal protocol buffer stored in 135 // Spanner is returned here for debug purposes only. We use 136 // google.protobuf.Any to avoid revealing its type and having clients 137 // possibly depend on it. 138 // 139 // If any tool needs to read this data, a wire proto (that is different 140 // from the storage proto) needs to be defined and this field replaced 141 // by a field of that wire type. 142 FinalizedSegments *anypb.Any `protobuf:"bytes,8,opt,name=finalized_segments,json=finalizedSegments,proto3" json:"finalized_segments,omitempty"` 143 // The finalizing segment in the output buffer. 144 // 145 // Do not depend on this field. The internal protocol buffer stored in 146 // Spanner is returned here for debug purposes only. We use 147 // google.protobuf.Any to avoid revealing its type and having clients 148 // possibly depend on it. 149 // 150 // If any tool needs to read this data, a wire proto (that is different 151 // from the storage proto) needs to be defined and this field replaced 152 // by a field of that wire type. 153 FinalizingSegment *anypb.Any `protobuf:"bytes,9,opt,name=finalizing_segment,json=finalizingSegment,proto3" json:"finalizing_segment,omitempty"` 154 // Statistics about verdicts in the output buffer. 155 // 156 // Do not depend on this field. The internal protocol buffer stored in 157 // Spanner is returned here for debug purposes only. We use 158 // google.protobuf.Any to avoid revealing its type and having clients 159 // possibly depend on it. 160 // 161 // If any tool needs to read this data, a wire proto (that is different 162 // from the storage proto) needs to be defined and this field replaced 163 // by a field of that wire type. 164 Statistics *anypb.Any `protobuf:"bytes,12,opt,name=statistics,proto3" json:"statistics,omitempty"` 165 // The hot input buffer. 166 HotBuffer *InputBuffer `protobuf:"bytes,10,opt,name=hot_buffer,json=hotBuffer,proto3" json:"hot_buffer,omitempty"` 167 // The cold input buffer. 168 ColdBuffer *InputBuffer `protobuf:"bytes,11,opt,name=cold_buffer,json=coldBuffer,proto3" json:"cold_buffer,omitempty"` 169 } 170 171 func (x *TestVariantBranchRaw) Reset() { 172 *x = TestVariantBranchRaw{} 173 if protoimpl.UnsafeEnabled { 174 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[1] 175 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 176 ms.StoreMessageInfo(mi) 177 } 178 } 179 180 func (x *TestVariantBranchRaw) String() string { 181 return protoimpl.X.MessageStringOf(x) 182 } 183 184 func (*TestVariantBranchRaw) ProtoMessage() {} 185 186 func (x *TestVariantBranchRaw) ProtoReflect() protoreflect.Message { 187 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[1] 188 if protoimpl.UnsafeEnabled && x != nil { 189 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 190 if ms.LoadMessageInfo() == nil { 191 ms.StoreMessageInfo(mi) 192 } 193 return ms 194 } 195 return mi.MessageOf(x) 196 } 197 198 // Deprecated: Use TestVariantBranchRaw.ProtoReflect.Descriptor instead. 199 func (*TestVariantBranchRaw) Descriptor() ([]byte, []int) { 200 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP(), []int{1} 201 } 202 203 func (x *TestVariantBranchRaw) GetName() string { 204 if x != nil { 205 return x.Name 206 } 207 return "" 208 } 209 210 func (x *TestVariantBranchRaw) GetProject() string { 211 if x != nil { 212 return x.Project 213 } 214 return "" 215 } 216 217 func (x *TestVariantBranchRaw) GetTestId() string { 218 if x != nil { 219 return x.TestId 220 } 221 return "" 222 } 223 224 func (x *TestVariantBranchRaw) GetVariantHash() string { 225 if x != nil { 226 return x.VariantHash 227 } 228 return "" 229 } 230 231 func (x *TestVariantBranchRaw) GetRefHash() string { 232 if x != nil { 233 return x.RefHash 234 } 235 return "" 236 } 237 238 func (x *TestVariantBranchRaw) GetVariant() *Variant { 239 if x != nil { 240 return x.Variant 241 } 242 return nil 243 } 244 245 func (x *TestVariantBranchRaw) GetRef() *SourceRef { 246 if x != nil { 247 return x.Ref 248 } 249 return nil 250 } 251 252 func (x *TestVariantBranchRaw) GetFinalizedSegments() *anypb.Any { 253 if x != nil { 254 return x.FinalizedSegments 255 } 256 return nil 257 } 258 259 func (x *TestVariantBranchRaw) GetFinalizingSegment() *anypb.Any { 260 if x != nil { 261 return x.FinalizingSegment 262 } 263 return nil 264 } 265 266 func (x *TestVariantBranchRaw) GetStatistics() *anypb.Any { 267 if x != nil { 268 return x.Statistics 269 } 270 return nil 271 } 272 273 func (x *TestVariantBranchRaw) GetHotBuffer() *InputBuffer { 274 if x != nil { 275 return x.HotBuffer 276 } 277 return nil 278 } 279 280 func (x *TestVariantBranchRaw) GetColdBuffer() *InputBuffer { 281 if x != nil { 282 return x.ColdBuffer 283 } 284 return nil 285 } 286 287 // InputBuffer contains the verdict history of the test variant branch. 288 // It is used for both the hot buffer and the cold buffer. 289 type InputBuffer struct { 290 state protoimpl.MessageState 291 sizeCache protoimpl.SizeCache 292 unknownFields protoimpl.UnknownFields 293 294 // The number of test verdicts in the input buffer. 295 Length int64 `protobuf:"varint,1,opt,name=length,proto3" json:"length,omitempty"` 296 // Verdicts, sorted by commit position (oldest first), and 297 // then result time (oldest first). 298 Verdicts []*PositionVerdict `protobuf:"bytes,2,rep,name=verdicts,proto3" json:"verdicts,omitempty"` 299 } 300 301 func (x *InputBuffer) Reset() { 302 *x = InputBuffer{} 303 if protoimpl.UnsafeEnabled { 304 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[2] 305 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 306 ms.StoreMessageInfo(mi) 307 } 308 } 309 310 func (x *InputBuffer) String() string { 311 return protoimpl.X.MessageStringOf(x) 312 } 313 314 func (*InputBuffer) ProtoMessage() {} 315 316 func (x *InputBuffer) ProtoReflect() protoreflect.Message { 317 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[2] 318 if protoimpl.UnsafeEnabled && x != nil { 319 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 320 if ms.LoadMessageInfo() == nil { 321 ms.StoreMessageInfo(mi) 322 } 323 return ms 324 } 325 return mi.MessageOf(x) 326 } 327 328 // Deprecated: Use InputBuffer.ProtoReflect.Descriptor instead. 329 func (*InputBuffer) Descriptor() ([]byte, []int) { 330 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP(), []int{2} 331 } 332 333 func (x *InputBuffer) GetLength() int64 { 334 if x != nil { 335 return x.Length 336 } 337 return 0 338 } 339 340 func (x *InputBuffer) GetVerdicts() []*PositionVerdict { 341 if x != nil { 342 return x.Verdicts 343 } 344 return nil 345 } 346 347 // PositionVerdict represents a test verdict at a commit position. 348 type PositionVerdict struct { 349 state protoimpl.MessageState 350 sizeCache protoimpl.SizeCache 351 unknownFields protoimpl.UnknownFields 352 353 // The commit position for the verdict. 354 CommitPosition int64 `protobuf:"varint,1,opt,name=commitPosition,proto3" json:"commitPosition,omitempty"` 355 // The time that this verdict is produced, truncated to the nearest hour. 356 Hour *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=hour,proto3" json:"hour,omitempty"` 357 // Whether the verdict is exonerated or not. 358 IsExonerated bool `protobuf:"varint,3,opt,name=is_exonerated,json=isExonerated,proto3" json:"is_exonerated,omitempty"` 359 Runs []*PositionVerdict_Run `protobuf:"bytes,4,rep,name=runs,proto3" json:"runs,omitempty"` 360 } 361 362 func (x *PositionVerdict) Reset() { 363 *x = PositionVerdict{} 364 if protoimpl.UnsafeEnabled { 365 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[3] 366 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 367 ms.StoreMessageInfo(mi) 368 } 369 } 370 371 func (x *PositionVerdict) String() string { 372 return protoimpl.X.MessageStringOf(x) 373 } 374 375 func (*PositionVerdict) ProtoMessage() {} 376 377 func (x *PositionVerdict) ProtoReflect() protoreflect.Message { 378 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[3] 379 if protoimpl.UnsafeEnabled && x != nil { 380 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 381 if ms.LoadMessageInfo() == nil { 382 ms.StoreMessageInfo(mi) 383 } 384 return ms 385 } 386 return mi.MessageOf(x) 387 } 388 389 // Deprecated: Use PositionVerdict.ProtoReflect.Descriptor instead. 390 func (*PositionVerdict) Descriptor() ([]byte, []int) { 391 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP(), []int{3} 392 } 393 394 func (x *PositionVerdict) GetCommitPosition() int64 { 395 if x != nil { 396 return x.CommitPosition 397 } 398 return 0 399 } 400 401 func (x *PositionVerdict) GetHour() *timestamppb.Timestamp { 402 if x != nil { 403 return x.Hour 404 } 405 return nil 406 } 407 408 func (x *PositionVerdict) GetIsExonerated() bool { 409 if x != nil { 410 return x.IsExonerated 411 } 412 return false 413 } 414 415 func (x *PositionVerdict) GetRuns() []*PositionVerdict_Run { 416 if x != nil { 417 return x.Runs 418 } 419 return nil 420 } 421 422 // A request message for `TestVariantBranches.BatchGet` RPC. 423 type BatchGetTestVariantBranchRequest struct { 424 state protoimpl.MessageState 425 sizeCache protoimpl.SizeCache 426 unknownFields protoimpl.UnknownFields 427 428 // The name of the test variant branch. 429 // It MUST be of the form projects/{PROJECT}/tests/{URL_ESCAPED_TEST_ID}/variants/{VARIANT_HASH}/refs/{REF_HASH} 430 // where: 431 // PROJECT is the LUCI Project of the test variant branch analysis. 432 // URL_ESCAPED_TEST_ID is the test ID, escaped with 433 // https://golang.org/pkg/net/url/#PathEscape. See also https://aip.dev/122. 434 // VARIANT_HASH is the variant hash of the test variant analysis (16 lower-case-character hex string). 435 // REF_HASH is the identity of the branch of the analysis. It is a 16 lower-case-character hex string. 436 // Maximum of 100 can be retrieved, otherwise this RPC will return error. 437 Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` 438 } 439 440 func (x *BatchGetTestVariantBranchRequest) Reset() { 441 *x = BatchGetTestVariantBranchRequest{} 442 if protoimpl.UnsafeEnabled { 443 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[4] 444 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 445 ms.StoreMessageInfo(mi) 446 } 447 } 448 449 func (x *BatchGetTestVariantBranchRequest) String() string { 450 return protoimpl.X.MessageStringOf(x) 451 } 452 453 func (*BatchGetTestVariantBranchRequest) ProtoMessage() {} 454 455 func (x *BatchGetTestVariantBranchRequest) ProtoReflect() protoreflect.Message { 456 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[4] 457 if protoimpl.UnsafeEnabled && x != nil { 458 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 459 if ms.LoadMessageInfo() == nil { 460 ms.StoreMessageInfo(mi) 461 } 462 return ms 463 } 464 return mi.MessageOf(x) 465 } 466 467 // Deprecated: Use BatchGetTestVariantBranchRequest.ProtoReflect.Descriptor instead. 468 func (*BatchGetTestVariantBranchRequest) Descriptor() ([]byte, []int) { 469 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP(), []int{4} 470 } 471 472 func (x *BatchGetTestVariantBranchRequest) GetNames() []string { 473 if x != nil { 474 return x.Names 475 } 476 return nil 477 } 478 479 type BatchGetTestVariantBranchResponse struct { 480 state protoimpl.MessageState 481 sizeCache protoimpl.SizeCache 482 unknownFields protoimpl.UnknownFields 483 484 // The return list will have the same length and order as request names list. 485 // If a record is not found, the corresponding element will be set to nil. 486 TestVariantBranches []*TestVariantBranch `protobuf:"bytes,1,rep,name=test_variant_branches,json=testVariantBranches,proto3" json:"test_variant_branches,omitempty"` 487 } 488 489 func (x *BatchGetTestVariantBranchResponse) Reset() { 490 *x = BatchGetTestVariantBranchResponse{} 491 if protoimpl.UnsafeEnabled { 492 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[5] 493 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 494 ms.StoreMessageInfo(mi) 495 } 496 } 497 498 func (x *BatchGetTestVariantBranchResponse) String() string { 499 return protoimpl.X.MessageStringOf(x) 500 } 501 502 func (*BatchGetTestVariantBranchResponse) ProtoMessage() {} 503 504 func (x *BatchGetTestVariantBranchResponse) ProtoReflect() protoreflect.Message { 505 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[5] 506 if protoimpl.UnsafeEnabled && x != nil { 507 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 508 if ms.LoadMessageInfo() == nil { 509 ms.StoreMessageInfo(mi) 510 } 511 return ms 512 } 513 return mi.MessageOf(x) 514 } 515 516 // Deprecated: Use BatchGetTestVariantBranchResponse.ProtoReflect.Descriptor instead. 517 func (*BatchGetTestVariantBranchResponse) Descriptor() ([]byte, []int) { 518 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP(), []int{5} 519 } 520 521 func (x *BatchGetTestVariantBranchResponse) GetTestVariantBranches() []*TestVariantBranch { 522 if x != nil { 523 return x.TestVariantBranches 524 } 525 return nil 526 } 527 528 // Represents changepoint analysis for a particular (project, test, variant, ref). 529 type TestVariantBranch struct { 530 state protoimpl.MessageState 531 sizeCache protoimpl.SizeCache 532 unknownFields protoimpl.UnknownFields 533 534 // The name of the test variant branch. 535 // Of the form projects/{PROJECT}/tests/{URL_ESCAPED_TEST_ID}/variants/{VARIANT_HASH}/refs/{REF_HASH} 536 // where: 537 // PROJECT is the LUCI Project of the test variant branch analysis. 538 // URL_ESCAPED_TEST_ID is the test ID, escaped with 539 // https://golang.org/pkg/net/url/#PathEscape. See also https://aip.dev/122. 540 // VARIANT_HASH is the variant hash of the test variant analysis (16 lower-case-character hex string). 541 // REF_HASH is the identity of the branch of the analysis. It is a 16 lower-case-character hex string. 542 Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` 543 // The LUCI Project. E.g. "chromium". 544 Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` 545 // The identity of the test. 546 TestId string `protobuf:"bytes,3,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"` 547 // Hash of the variant, as 16 lowercase hexadecimal characters. 548 // E.g. "96c68dc946ab4068". 549 VariantHash string `protobuf:"bytes,4,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"` 550 // Hash of the source branch, as 16 lowercase hexadecimal characters. 551 RefHash string `protobuf:"bytes,5,opt,name=ref_hash,json=refHash,proto3" json:"ref_hash,omitempty"` 552 // key:value pairs to specify the way of running a particular test. 553 // e.g. a specific bucket, builder and a test suite. 554 Variant *Variant `protobuf:"bytes,6,opt,name=variant,proto3" json:"variant,omitempty"` 555 // The branch in source control. 556 Ref *SourceRef `protobuf:"bytes,7,opt,name=ref,proto3" json:"ref,omitempty"` 557 // The test history represented as a set of [start commit position, 558 // end commit position] segments, where segments have statistically 559 // different failure and/or flake rates. The segments are ordered so that 560 // the most recent segment appears first. 561 // If a client is only interested in the current failure/flake rate, they 562 // can just query the first segment. 563 Segments []*Segment `protobuf:"bytes,8,rep,name=segments,proto3" json:"segments,omitempty"` 564 } 565 566 func (x *TestVariantBranch) Reset() { 567 *x = TestVariantBranch{} 568 if protoimpl.UnsafeEnabled { 569 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[6] 570 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 571 ms.StoreMessageInfo(mi) 572 } 573 } 574 575 func (x *TestVariantBranch) String() string { 576 return protoimpl.X.MessageStringOf(x) 577 } 578 579 func (*TestVariantBranch) ProtoMessage() {} 580 581 func (x *TestVariantBranch) ProtoReflect() protoreflect.Message { 582 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[6] 583 if protoimpl.UnsafeEnabled && x != nil { 584 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 585 if ms.LoadMessageInfo() == nil { 586 ms.StoreMessageInfo(mi) 587 } 588 return ms 589 } 590 return mi.MessageOf(x) 591 } 592 593 // Deprecated: Use TestVariantBranch.ProtoReflect.Descriptor instead. 594 func (*TestVariantBranch) Descriptor() ([]byte, []int) { 595 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP(), []int{6} 596 } 597 598 func (x *TestVariantBranch) GetName() string { 599 if x != nil { 600 return x.Name 601 } 602 return "" 603 } 604 605 func (x *TestVariantBranch) GetProject() string { 606 if x != nil { 607 return x.Project 608 } 609 return "" 610 } 611 612 func (x *TestVariantBranch) GetTestId() string { 613 if x != nil { 614 return x.TestId 615 } 616 return "" 617 } 618 619 func (x *TestVariantBranch) GetVariantHash() string { 620 if x != nil { 621 return x.VariantHash 622 } 623 return "" 624 } 625 626 func (x *TestVariantBranch) GetRefHash() string { 627 if x != nil { 628 return x.RefHash 629 } 630 return "" 631 } 632 633 func (x *TestVariantBranch) GetVariant() *Variant { 634 if x != nil { 635 return x.Variant 636 } 637 return nil 638 } 639 640 func (x *TestVariantBranch) GetRef() *SourceRef { 641 if x != nil { 642 return x.Ref 643 } 644 return nil 645 } 646 647 func (x *TestVariantBranch) GetSegments() []*Segment { 648 if x != nil { 649 return x.Segments 650 } 651 return nil 652 } 653 654 // Represents a period in history where the test had a consistent failure and 655 // flake rate. Segments are separated by changepoints. Each segment captures 656 // information about the changepoint which started it. 657 // Same structure with bigquery proto here, but make a separate copy to allow it to evolve over time. 658 // https://source.chromium.org/chromium/infra/infra/+/main:go/src/go.chromium.org/luci/analysis/proto/bq/test_variant_branch_row.proto;l=80 659 type Segment struct { 660 state protoimpl.MessageState 661 sizeCache protoimpl.SizeCache 662 unknownFields protoimpl.UnknownFields 663 664 // If set, means the segment commenced with a changepoint. 665 // If unset, means the segment began with the beginning of recorded 666 // history for the segment. (All recorded history for a test variant branch 667 // is deleted after 90 days of no results, so this means there were 668 // no results for at least 90 days before the segment.) 669 HasStartChangepoint bool `protobuf:"varint,1,opt,name=has_start_changepoint,json=hasStartChangepoint,proto3" json:"has_start_changepoint,omitempty"` 670 // The nominal commit position at which the segment starts (inclusive). 671 // Guaranteed to be strictly greater than the end_position of the 672 // chronologically previous segment (if any). 673 // If this segment has a starting changepoint, this is the nominal position 674 // of the changepoint (when the new test behaviour started). 675 // If this segment does not have a starting changepoint, this is the 676 // simply the first commit position in the known history of the test. 677 StartPosition int64 `protobuf:"varint,2,opt,name=start_position,json=startPosition,proto3" json:"start_position,omitempty"` 678 // The lower bound of the starting changepoint position in a 99% two-tailed 679 // confidence interval. Inclusive. 680 // Only set if has_start_changepoint is set. 681 StartPositionLowerBound_99Th int64 `protobuf:"varint,3,opt,name=start_position_lower_bound_99th,json=startPositionLowerBound99th,proto3" json:"start_position_lower_bound_99th,omitempty"` 682 // The upper bound of the starting changepoint position in a 99% two-tailed 683 // confidence interval. Inclusive. 684 // Only set if has_start_changepoint is set. 685 // When has_start_changepoint is set, the following invariant holds: 686 // previous_segment.start_position <= start_position_lower_bound_99th <= start_position <= start_position_upper_bound_99th 687 // where previous_segment refers to the chronologically previous segment. 688 StartPositionUpperBound_99Th int64 `protobuf:"varint,4,opt,name=start_position_upper_bound_99th,json=startPositionUpperBound99th,proto3" json:"start_position_upper_bound_99th,omitempty"` 689 // The earliest hour a test verdict at the indicated start_position 690 // was recorded. Gives an approximate upper bound on the timestamp the 691 // changepoint occurred, for systems which need to filter by date. 692 StartHour *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=start_hour,json=startHour,proto3" json:"start_hour,omitempty"` 693 // The nominal commit position at which the segment ends (inclusive). 694 // This is either the last recorded commit position in the test history 695 // (for this test variant branch), or the position of the last verdict 696 // seen before the next detected changepoint. 697 EndPosition int64 `protobuf:"varint,6,opt,name=end_position,json=endPosition,proto3" json:"end_position,omitempty"` 698 // The earliest hour a test verdict at the indicated end_position 699 // was recorded. Gives an approximate lower bound on the timestamp 700 // the changepoint occurred, for systems which need to filter by date. 701 EndHour *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=end_hour,json=endHour,proto3" json:"end_hour,omitempty"` 702 // Total number of test results/runs/verdicts in the segment. 703 Counts *Segment_Counts `protobuf:"bytes,8,opt,name=counts,proto3" json:"counts,omitempty"` 704 } 705 706 func (x *Segment) Reset() { 707 *x = Segment{} 708 if protoimpl.UnsafeEnabled { 709 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[7] 710 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 711 ms.StoreMessageInfo(mi) 712 } 713 } 714 715 func (x *Segment) String() string { 716 return protoimpl.X.MessageStringOf(x) 717 } 718 719 func (*Segment) ProtoMessage() {} 720 721 func (x *Segment) ProtoReflect() protoreflect.Message { 722 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[7] 723 if protoimpl.UnsafeEnabled && x != nil { 724 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 725 if ms.LoadMessageInfo() == nil { 726 ms.StoreMessageInfo(mi) 727 } 728 return ms 729 } 730 return mi.MessageOf(x) 731 } 732 733 // Deprecated: Use Segment.ProtoReflect.Descriptor instead. 734 func (*Segment) Descriptor() ([]byte, []int) { 735 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP(), []int{7} 736 } 737 738 func (x *Segment) GetHasStartChangepoint() bool { 739 if x != nil { 740 return x.HasStartChangepoint 741 } 742 return false 743 } 744 745 func (x *Segment) GetStartPosition() int64 { 746 if x != nil { 747 return x.StartPosition 748 } 749 return 0 750 } 751 752 func (x *Segment) GetStartPositionLowerBound_99Th() int64 { 753 if x != nil { 754 return x.StartPositionLowerBound_99Th 755 } 756 return 0 757 } 758 759 func (x *Segment) GetStartPositionUpperBound_99Th() int64 { 760 if x != nil { 761 return x.StartPositionUpperBound_99Th 762 } 763 return 0 764 } 765 766 func (x *Segment) GetStartHour() *timestamppb.Timestamp { 767 if x != nil { 768 return x.StartHour 769 } 770 return nil 771 } 772 773 func (x *Segment) GetEndPosition() int64 { 774 if x != nil { 775 return x.EndPosition 776 } 777 return 0 778 } 779 780 func (x *Segment) GetEndHour() *timestamppb.Timestamp { 781 if x != nil { 782 return x.EndHour 783 } 784 return nil 785 } 786 787 func (x *Segment) GetCounts() *Segment_Counts { 788 if x != nil { 789 return x.Counts 790 } 791 return nil 792 } 793 794 type QuerySourcePositionsRequest struct { 795 state protoimpl.MessageState 796 sizeCache protoimpl.SizeCache 797 unknownFields protoimpl.UnknownFields 798 799 // The LUCI project. 800 Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` 801 // The identifier of a test. 802 TestId string `protobuf:"bytes,2,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"` 803 // The hash of the variant. 804 VariantHash string `protobuf:"bytes,3,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"` 805 // Hash of the source branch, as 16 lowercase hexadecimal characters. 806 RefHash string `protobuf:"bytes,4,opt,name=ref_hash,json=refHash,proto3" json:"ref_hash,omitempty"` 807 // The source position where to start listing from, in descending order (newest commit to older commits). 808 // This start source position will be the largest source position in the response. 809 StartSourcePosition int64 `protobuf:"varint,5,opt,name=start_source_position,json=startSourcePosition,proto3" json:"start_source_position,omitempty"` 810 // The maximum number of commits to return. 811 // 812 // The service may return fewer than this value. 813 // If unspecified, at most 100 commits will be returned. 814 // The maximum value is 1,000; values above 1,000 will be coerced to 1,000. 815 PageSize int32 `protobuf:"varint,6,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` 816 // A page token, received from a previous `QuerySourcePositions` call. 817 // Provide this to retrieve the subsequent page. 818 // 819 // When paginating, all other parameters provided to `QuerySourcePositions` MUST 820 // match the call that provided the page token. 821 PageToken string `protobuf:"bytes,7,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` 822 } 823 824 func (x *QuerySourcePositionsRequest) Reset() { 825 *x = QuerySourcePositionsRequest{} 826 if protoimpl.UnsafeEnabled { 827 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[8] 828 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 829 ms.StoreMessageInfo(mi) 830 } 831 } 832 833 func (x *QuerySourcePositionsRequest) String() string { 834 return protoimpl.X.MessageStringOf(x) 835 } 836 837 func (*QuerySourcePositionsRequest) ProtoMessage() {} 838 839 func (x *QuerySourcePositionsRequest) ProtoReflect() protoreflect.Message { 840 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[8] 841 if protoimpl.UnsafeEnabled && x != nil { 842 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 843 if ms.LoadMessageInfo() == nil { 844 ms.StoreMessageInfo(mi) 845 } 846 return ms 847 } 848 return mi.MessageOf(x) 849 } 850 851 // Deprecated: Use QuerySourcePositionsRequest.ProtoReflect.Descriptor instead. 852 func (*QuerySourcePositionsRequest) Descriptor() ([]byte, []int) { 853 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP(), []int{8} 854 } 855 856 func (x *QuerySourcePositionsRequest) GetProject() string { 857 if x != nil { 858 return x.Project 859 } 860 return "" 861 } 862 863 func (x *QuerySourcePositionsRequest) GetTestId() string { 864 if x != nil { 865 return x.TestId 866 } 867 return "" 868 } 869 870 func (x *QuerySourcePositionsRequest) GetVariantHash() string { 871 if x != nil { 872 return x.VariantHash 873 } 874 return "" 875 } 876 877 func (x *QuerySourcePositionsRequest) GetRefHash() string { 878 if x != nil { 879 return x.RefHash 880 } 881 return "" 882 } 883 884 func (x *QuerySourcePositionsRequest) GetStartSourcePosition() int64 { 885 if x != nil { 886 return x.StartSourcePosition 887 } 888 return 0 889 } 890 891 func (x *QuerySourcePositionsRequest) GetPageSize() int32 { 892 if x != nil { 893 return x.PageSize 894 } 895 return 0 896 } 897 898 func (x *QuerySourcePositionsRequest) GetPageToken() string { 899 if x != nil { 900 return x.PageToken 901 } 902 return "" 903 } 904 905 type QuerySourcePositionsResponse struct { 906 state protoimpl.MessageState 907 sizeCache protoimpl.SizeCache 908 unknownFields protoimpl.UnknownFields 909 910 // Source positions in descending order, start from the commit at start_source_position. 911 SourcePositions []*SourcePosition `protobuf:"bytes,1,rep,name=source_positions,json=sourcePositions,proto3" json:"source_positions,omitempty"` 912 // A page token for next QuerySourcePositionsRequest to fetch the next page of commits. 913 NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` 914 } 915 916 func (x *QuerySourcePositionsResponse) Reset() { 917 *x = QuerySourcePositionsResponse{} 918 if protoimpl.UnsafeEnabled { 919 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[9] 920 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 921 ms.StoreMessageInfo(mi) 922 } 923 } 924 925 func (x *QuerySourcePositionsResponse) String() string { 926 return protoimpl.X.MessageStringOf(x) 927 } 928 929 func (*QuerySourcePositionsResponse) ProtoMessage() {} 930 931 func (x *QuerySourcePositionsResponse) ProtoReflect() protoreflect.Message { 932 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[9] 933 if protoimpl.UnsafeEnabled && x != nil { 934 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 935 if ms.LoadMessageInfo() == nil { 936 ms.StoreMessageInfo(mi) 937 } 938 return ms 939 } 940 return mi.MessageOf(x) 941 } 942 943 // Deprecated: Use QuerySourcePositionsResponse.ProtoReflect.Descriptor instead. 944 func (*QuerySourcePositionsResponse) Descriptor() ([]byte, []int) { 945 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP(), []int{9} 946 } 947 948 func (x *QuerySourcePositionsResponse) GetSourcePositions() []*SourcePosition { 949 if x != nil { 950 return x.SourcePositions 951 } 952 return nil 953 } 954 955 func (x *QuerySourcePositionsResponse) GetNextPageToken() string { 956 if x != nil { 957 return x.NextPageToken 958 } 959 return "" 960 } 961 962 // SourcePosition contains the commit and the test verdicts at a source position for a test variant branch. 963 type SourcePosition struct { 964 state protoimpl.MessageState 965 sizeCache protoimpl.SizeCache 966 unknownFields protoimpl.UnknownFields 967 968 // Source position. 969 Position int64 `protobuf:"varint,1,opt,name=position,proto3" json:"position,omitempty"` 970 // The git commit. 971 Commit *git.Commit `protobuf:"bytes,2,opt,name=commit,proto3" json:"commit,omitempty"` 972 // Test verdicts at this source position. 973 // Test verdicts will be ordered by `partition_time` DESC. 974 // At most 20 verdicts will be returned here. 975 // Most of time, a test variant at the same source position has less than 20 verdicts. 976 Verdicts []*TestVerdict `protobuf:"bytes,3,rep,name=verdicts,proto3" json:"verdicts,omitempty"` 977 } 978 979 func (x *SourcePosition) Reset() { 980 *x = SourcePosition{} 981 if protoimpl.UnsafeEnabled { 982 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[10] 983 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 984 ms.StoreMessageInfo(mi) 985 } 986 } 987 988 func (x *SourcePosition) String() string { 989 return protoimpl.X.MessageStringOf(x) 990 } 991 992 func (*SourcePosition) ProtoMessage() {} 993 994 func (x *SourcePosition) ProtoReflect() protoreflect.Message { 995 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[10] 996 if protoimpl.UnsafeEnabled && x != nil { 997 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 998 if ms.LoadMessageInfo() == nil { 999 ms.StoreMessageInfo(mi) 1000 } 1001 return ms 1002 } 1003 return mi.MessageOf(x) 1004 } 1005 1006 // Deprecated: Use SourcePosition.ProtoReflect.Descriptor instead. 1007 func (*SourcePosition) Descriptor() ([]byte, []int) { 1008 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP(), []int{10} 1009 } 1010 1011 func (x *SourcePosition) GetPosition() int64 { 1012 if x != nil { 1013 return x.Position 1014 } 1015 return 0 1016 } 1017 1018 func (x *SourcePosition) GetCommit() *git.Commit { 1019 if x != nil { 1020 return x.Commit 1021 } 1022 return nil 1023 } 1024 1025 func (x *SourcePosition) GetVerdicts() []*TestVerdict { 1026 if x != nil { 1027 return x.Verdicts 1028 } 1029 return nil 1030 } 1031 1032 type PositionVerdict_Run struct { 1033 state protoimpl.MessageState 1034 sizeCache protoimpl.SizeCache 1035 unknownFields protoimpl.UnknownFields 1036 1037 // Number of expectedly passed results in the run. 1038 ExpectedPassCount int64 `protobuf:"varint,1,opt,name=expected_pass_count,json=expectedPassCount,proto3" json:"expected_pass_count,omitempty"` 1039 // Number of expectedly failed results in the run. 1040 ExpectedFailCount int64 `protobuf:"varint,2,opt,name=expected_fail_count,json=expectedFailCount,proto3" json:"expected_fail_count,omitempty"` 1041 // Number of expectedly crashed results in the run. 1042 ExpectedCrashCount int64 `protobuf:"varint,3,opt,name=expected_crash_count,json=expectedCrashCount,proto3" json:"expected_crash_count,omitempty"` 1043 // Number of expectedly aborted results in the run. 1044 ExpectedAbortCount int64 `protobuf:"varint,4,opt,name=expected_abort_count,json=expectedAbortCount,proto3" json:"expected_abort_count,omitempty"` 1045 // Number of unexpectedly passed results in the run. 1046 UnexpectedPassCount int64 `protobuf:"varint,5,opt,name=unexpected_pass_count,json=unexpectedPassCount,proto3" json:"unexpected_pass_count,omitempty"` 1047 // Number of unexpectedly failed results in the run. 1048 UnexpectedFailCount int64 `protobuf:"varint,6,opt,name=unexpected_fail_count,json=unexpectedFailCount,proto3" json:"unexpected_fail_count,omitempty"` 1049 // Number of unexpectedly crashed results in the run. 1050 UnexpectedCrashCount int64 `protobuf:"varint,7,opt,name=unexpected_crash_count,json=unexpectedCrashCount,proto3" json:"unexpected_crash_count,omitempty"` 1051 // Number of unexpectedly aborted results in the run. 1052 UnexpectedAbortCount int64 `protobuf:"varint,8,opt,name=unexpected_abort_count,json=unexpectedAbortCount,proto3" json:"unexpected_abort_count,omitempty"` 1053 // Whether this run is a duplicate run. 1054 IsDuplicate bool `protobuf:"varint,9,opt,name=is_duplicate,json=isDuplicate,proto3" json:"is_duplicate,omitempty"` 1055 } 1056 1057 func (x *PositionVerdict_Run) Reset() { 1058 *x = PositionVerdict_Run{} 1059 if protoimpl.UnsafeEnabled { 1060 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[11] 1061 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1062 ms.StoreMessageInfo(mi) 1063 } 1064 } 1065 1066 func (x *PositionVerdict_Run) String() string { 1067 return protoimpl.X.MessageStringOf(x) 1068 } 1069 1070 func (*PositionVerdict_Run) ProtoMessage() {} 1071 1072 func (x *PositionVerdict_Run) ProtoReflect() protoreflect.Message { 1073 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[11] 1074 if protoimpl.UnsafeEnabled && x != nil { 1075 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1076 if ms.LoadMessageInfo() == nil { 1077 ms.StoreMessageInfo(mi) 1078 } 1079 return ms 1080 } 1081 return mi.MessageOf(x) 1082 } 1083 1084 // Deprecated: Use PositionVerdict_Run.ProtoReflect.Descriptor instead. 1085 func (*PositionVerdict_Run) Descriptor() ([]byte, []int) { 1086 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP(), []int{3, 0} 1087 } 1088 1089 func (x *PositionVerdict_Run) GetExpectedPassCount() int64 { 1090 if x != nil { 1091 return x.ExpectedPassCount 1092 } 1093 return 0 1094 } 1095 1096 func (x *PositionVerdict_Run) GetExpectedFailCount() int64 { 1097 if x != nil { 1098 return x.ExpectedFailCount 1099 } 1100 return 0 1101 } 1102 1103 func (x *PositionVerdict_Run) GetExpectedCrashCount() int64 { 1104 if x != nil { 1105 return x.ExpectedCrashCount 1106 } 1107 return 0 1108 } 1109 1110 func (x *PositionVerdict_Run) GetExpectedAbortCount() int64 { 1111 if x != nil { 1112 return x.ExpectedAbortCount 1113 } 1114 return 0 1115 } 1116 1117 func (x *PositionVerdict_Run) GetUnexpectedPassCount() int64 { 1118 if x != nil { 1119 return x.UnexpectedPassCount 1120 } 1121 return 0 1122 } 1123 1124 func (x *PositionVerdict_Run) GetUnexpectedFailCount() int64 { 1125 if x != nil { 1126 return x.UnexpectedFailCount 1127 } 1128 return 0 1129 } 1130 1131 func (x *PositionVerdict_Run) GetUnexpectedCrashCount() int64 { 1132 if x != nil { 1133 return x.UnexpectedCrashCount 1134 } 1135 return 0 1136 } 1137 1138 func (x *PositionVerdict_Run) GetUnexpectedAbortCount() int64 { 1139 if x != nil { 1140 return x.UnexpectedAbortCount 1141 } 1142 return 0 1143 } 1144 1145 func (x *PositionVerdict_Run) GetIsDuplicate() bool { 1146 if x != nil { 1147 return x.IsDuplicate 1148 } 1149 return false 1150 } 1151 1152 // Counts of verdicts over a time period. Includes only 1153 // test verdicts for submitted code changes. This is defined as: 1154 // (1) where the code under test was already submitted when the test ran 1155 // 1156 // (e.g. postsubmit builders) 1157 // 1158 // (2) where the code under test was not submitted at the time the test ran, 1159 // 1160 // but was submitted immediately after (e.g. because the tests ran as part 1161 // of a tryjob, the presubmit run the tryjob was triggered by succeeded, 1162 // and submitted code as a result). 1163 // Currently, when test results lead to CL submission via recycled CQ runs, 1164 // they are not counted. 1165 // 1166 // Statistics for test results and test runs can be added here when needed. 1167 type Segment_Counts struct { 1168 state protoimpl.MessageState 1169 sizeCache protoimpl.SizeCache 1170 unknownFields protoimpl.UnknownFields 1171 1172 // The number of verdicts with only unexpected test results. 1173 UnexpectedVerdicts int32 `protobuf:"varint,1,opt,name=unexpected_verdicts,json=unexpectedVerdicts,proto3" json:"unexpected_verdicts,omitempty"` 1174 // The number of verdicts with a mix of expected and unexpected test results. 1175 FlakyVerdicts int32 `protobuf:"varint,2,opt,name=flaky_verdicts,json=flakyVerdicts,proto3" json:"flaky_verdicts,omitempty"` 1176 // The total number of verdicts. 1177 TotalVerdicts int32 `protobuf:"varint,3,opt,name=total_verdicts,json=totalVerdicts,proto3" json:"total_verdicts,omitempty"` 1178 } 1179 1180 func (x *Segment_Counts) Reset() { 1181 *x = Segment_Counts{} 1182 if protoimpl.UnsafeEnabled { 1183 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[12] 1184 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1185 ms.StoreMessageInfo(mi) 1186 } 1187 } 1188 1189 func (x *Segment_Counts) String() string { 1190 return protoimpl.X.MessageStringOf(x) 1191 } 1192 1193 func (*Segment_Counts) ProtoMessage() {} 1194 1195 func (x *Segment_Counts) ProtoReflect() protoreflect.Message { 1196 mi := &file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[12] 1197 if protoimpl.UnsafeEnabled && x != nil { 1198 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 1199 if ms.LoadMessageInfo() == nil { 1200 ms.StoreMessageInfo(mi) 1201 } 1202 return ms 1203 } 1204 return mi.MessageOf(x) 1205 } 1206 1207 // Deprecated: Use Segment_Counts.ProtoReflect.Descriptor instead. 1208 func (*Segment_Counts) Descriptor() ([]byte, []int) { 1209 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP(), []int{7, 0} 1210 } 1211 1212 func (x *Segment_Counts) GetUnexpectedVerdicts() int32 { 1213 if x != nil { 1214 return x.UnexpectedVerdicts 1215 } 1216 return 0 1217 } 1218 1219 func (x *Segment_Counts) GetFlakyVerdicts() int32 { 1220 if x != nil { 1221 return x.FlakyVerdicts 1222 } 1223 return 0 1224 } 1225 1226 func (x *Segment_Counts) GetTotalVerdicts() int32 { 1227 if x != nil { 1228 return x.TotalVerdicts 1229 } 1230 return 0 1231 } 1232 1233 var File_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto protoreflect.FileDescriptor 1234 1235 var file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDesc = []byte{ 1236 0x0a, 0x42, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 1237 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 1238 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x61, 1239 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x2e, 0x70, 1240 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 1241 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 1242 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 1243 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 1244 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 1245 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 1246 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 1247 0x6f, 0x74, 0x6f, 0x1a, 0x32, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 1248 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 1249 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 1250 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x33, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 1251 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 1252 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 1253 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x67, 0x6f, 1254 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 1255 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 1256 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 1257 0x74, 0x6f, 0x1a, 0x39, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 1258 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 1259 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 1260 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x39, 0x0a, 1261 0x1e, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x54, 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 1262 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 1263 0x17, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 1264 0x41, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xbd, 0x04, 0x0a, 0x14, 0x54, 0x65, 0x73, 1265 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x61, 1266 0x77, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 1267 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 1268 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 1269 0x17, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 1270 0x52, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 1271 0x61, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 1272 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x72, 1273 0x65, 0x66, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 1274 0x65, 0x66, 0x48, 0x61, 0x73, 0x68, 0x12, 0x33, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 1275 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 1276 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 1277 0x6e, 0x74, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x03, 0x72, 1278 0x65, 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 1279 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 1280 0x63, 0x65, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x43, 0x0a, 0x12, 0x66, 0x69, 1281 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 1282 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 1283 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x11, 0x66, 0x69, 1284 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 1285 0x43, 0x0a, 0x12, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 1286 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 1287 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 1288 0x79, 0x52, 0x11, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x67, 1289 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 1290 0x63, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 1291 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0a, 1292 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x3c, 0x0a, 0x0a, 0x68, 0x6f, 1293 0x74, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 1294 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 1295 0x31, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x52, 0x09, 0x68, 1296 0x6f, 0x74, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x0b, 0x63, 0x6f, 0x6c, 0x64, 1297 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 1298 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 1299 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x52, 0x0a, 0x63, 0x6f, 1300 0x6c, 0x64, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x22, 0x64, 0x0a, 0x0b, 0x49, 0x6e, 0x70, 0x75, 1301 0x74, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 1302 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 1303 0x3d, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 1304 0x0b, 0x32, 0x21, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 1305 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 1306 0x64, 0x69, 0x63, 0x74, 0x52, 0x08, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x22, 0x8c, 1307 0x05, 0x0a, 0x0f, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x64, 0x69, 1308 0x63, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, 1309 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 1310 0x69, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x04, 0x68, 0x6f, 1311 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 1312 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 1313 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x68, 0x6f, 0x75, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 1314 0x5f, 0x65, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 1315 0x08, 0x52, 0x0c, 0x69, 0x73, 0x45, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x12, 1316 0x39, 0x0a, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 1317 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 1318 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 1319 0x2e, 0x52, 0x75, 0x6e, 0x52, 0x04, 0x72, 0x75, 0x6e, 0x73, 0x1a, 0xc0, 0x03, 0x0a, 0x03, 0x52, 1320 0x75, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x70, 1321 0x61, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 1322 0x11, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x73, 0x73, 0x43, 0x6f, 0x75, 1323 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 1324 0x61, 0x69, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 1325 0x11, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x43, 0x6f, 0x75, 1326 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 1327 0x72, 0x61, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 1328 0x52, 0x12, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x72, 0x61, 0x73, 0x68, 0x43, 1329 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 1330 0x5f, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 1331 0x28, 0x03, 0x52, 0x12, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x62, 0x6f, 0x72, 1332 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 1333 0x63, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 1334 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 1335 0x64, 0x50, 0x61, 0x73, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x75, 0x6e, 1336 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x63, 0x6f, 1337 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x75, 0x6e, 0x65, 0x78, 0x70, 1338 0x65, 0x63, 0x74, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 1339 0x0a, 0x16, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x72, 0x61, 1340 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 1341 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x72, 0x61, 0x73, 0x68, 0x43, 1342 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 1343 0x65, 0x64, 0x5f, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 1344 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 1345 0x41, 0x62, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 1346 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 1347 0x52, 0x0b, 0x69, 0x73, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0x3d, 0x0a, 1348 0x20, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 1349 0x69, 0x61, 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 1350 0x74, 0x12, 0x19, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 1351 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x7c, 0x0a, 0x21, 1352 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 0x69, 1353 0x61, 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 1354 0x65, 0x12, 0x57, 0x0a, 0x15, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 1355 0x74, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 1356 0x32, 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 1357 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x42, 1358 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x13, 0x74, 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 1359 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x22, 0xb3, 0x02, 0x0a, 0x11, 0x54, 1360 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 1361 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 1362 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 1363 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x17, 1364 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 1365 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 1366 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 1367 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 1368 0x66, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 1369 0x66, 0x48, 0x61, 0x73, 0x68, 0x12, 0x33, 0x0a, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 1370 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 1371 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 1372 0x74, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 1373 0x66, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 1374 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 1375 0x65, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x35, 0x0a, 0x08, 0x73, 0x65, 0x67, 1376 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 1377 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 1378 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x08, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 1379 0x22, 0xc9, 0x04, 0x0a, 0x07, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 1380 0x68, 0x61, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 1381 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x68, 0x61, 0x73, 1382 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x70, 0x6f, 0x69, 0x6e, 0x74, 1383 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 1384 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 1385 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x1f, 0x73, 0x74, 0x61, 0x72, 0x74, 1386 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 1387 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x39, 0x39, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 1388 0x52, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 1389 0x6f, 0x77, 0x65, 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x39, 0x39, 0x74, 0x68, 0x12, 0x44, 0x0a, 1390 0x1f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 1391 0x75, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x39, 0x39, 0x74, 0x68, 1392 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x73, 1393 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x39, 1394 0x39, 0x74, 0x68, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x68, 0x6f, 0x75, 1395 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 1396 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 1397 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x21, 1398 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 1399 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 1400 0x6e, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x07, 0x20, 1401 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 1402 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 1403 0x07, 0x65, 0x6e, 0x64, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x38, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 1404 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 1405 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x67, 0x6d, 1406 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 1407 0x74, 0x73, 0x1a, 0x87, 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x2f, 0x0a, 1408 0x13, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x64, 1409 0x69, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x75, 0x6e, 0x65, 0x78, 1410 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x12, 0x25, 1411 0x0a, 0x0e, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 1412 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x56, 0x65, 0x72, 1413 0x64, 0x69, 0x63, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x76, 1414 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x74, 1415 0x6f, 0x74, 0x61, 0x6c, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x22, 0xfe, 0x01, 0x0a, 1416 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x73, 0x69, 1417 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 1418 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 1419 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 1420 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 1421 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 1422 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x48, 0x61, 1423 0x73, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 1424 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x66, 0x48, 0x61, 0x73, 0x68, 0x12, 0x32, 0x0a, 1425 0x15, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 1426 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x73, 0x74, 1427 0x61, 0x72, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 1428 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 1429 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 1430 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 1431 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x93, 0x01, 1432 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x73, 1433 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 1434 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 1435 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 1436 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 1437 0x63, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 1438 0x63, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 1439 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 1440 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 1441 0x6b, 0x65, 0x6e, 0x22, 0x8c, 0x01, 0x0a, 0x0e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 1442 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 1443 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 1444 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 1445 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x67, 0x69, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 1446 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x39, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x64, 0x69, 1447 0x63, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6c, 0x75, 0x63, 0x69, 1448 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 1449 0x74, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x52, 0x08, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 1450 0x74, 0x73, 0x32, 0xeb, 0x02, 0x0a, 0x13, 0x54, 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 1451 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x06, 0x47, 0x65, 1452 0x74, 0x52, 0x61, 0x77, 0x12, 0x30, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 1453 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x61, 0x77, 0x54, 0x65, 1454 0x73, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 1455 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 1456 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x56, 0x61, 1457 0x72, 0x69, 0x61, 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x61, 0x77, 0x22, 0x00, 1458 0x12, 0x75, 0x0a, 0x08, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x12, 0x32, 0x2e, 0x6c, 1459 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 1460 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 0x69, 1461 0x61, 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 1462 0x1a, 0x33, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 1463 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x47, 0x65, 0x74, 0x54, 0x65, 0x73, 0x74, 1464 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x65, 0x73, 1465 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x77, 0x0a, 0x14, 0x51, 0x75, 0x65, 0x72, 0x79, 1466 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 1467 0x2d, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 1468 0x76, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 1469 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 1470 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 1471 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x73, 1472 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 1473 0x42, 0x33, 0x5a, 0x31, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 1474 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 1475 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x6e, 0x61, 0x6c, 0x79, 1476 0x73, 0x69, 0x73, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 1477 } 1478 1479 var ( 1480 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescOnce sync.Once 1481 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescData = file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDesc 1482 ) 1483 1484 func file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescGZIP() []byte { 1485 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescOnce.Do(func() { 1486 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescData) 1487 }) 1488 return file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDescData 1489 } 1490 1491 var file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes = make([]protoimpl.MessageInfo, 13) 1492 var file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_goTypes = []interface{}{ 1493 (*GetRawTestVariantBranchRequest)(nil), // 0: luci.analysis.v1.GetRawTestVariantBranchRequest 1494 (*TestVariantBranchRaw)(nil), // 1: luci.analysis.v1.TestVariantBranchRaw 1495 (*InputBuffer)(nil), // 2: luci.analysis.v1.InputBuffer 1496 (*PositionVerdict)(nil), // 3: luci.analysis.v1.PositionVerdict 1497 (*BatchGetTestVariantBranchRequest)(nil), // 4: luci.analysis.v1.BatchGetTestVariantBranchRequest 1498 (*BatchGetTestVariantBranchResponse)(nil), // 5: luci.analysis.v1.BatchGetTestVariantBranchResponse 1499 (*TestVariantBranch)(nil), // 6: luci.analysis.v1.TestVariantBranch 1500 (*Segment)(nil), // 7: luci.analysis.v1.Segment 1501 (*QuerySourcePositionsRequest)(nil), // 8: luci.analysis.v1.QuerySourcePositionsRequest 1502 (*QuerySourcePositionsResponse)(nil), // 9: luci.analysis.v1.QuerySourcePositionsResponse 1503 (*SourcePosition)(nil), // 10: luci.analysis.v1.SourcePosition 1504 (*PositionVerdict_Run)(nil), // 11: luci.analysis.v1.PositionVerdict.Run 1505 (*Segment_Counts)(nil), // 12: luci.analysis.v1.Segment.Counts 1506 (*Variant)(nil), // 13: luci.analysis.v1.Variant 1507 (*SourceRef)(nil), // 14: luci.analysis.v1.SourceRef 1508 (*anypb.Any)(nil), // 15: google.protobuf.Any 1509 (*timestamppb.Timestamp)(nil), // 16: google.protobuf.Timestamp 1510 (*git.Commit)(nil), // 17: git.Commit 1511 (*TestVerdict)(nil), // 18: luci.analysis.v1.TestVerdict 1512 } 1513 var file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_depIdxs = []int32{ 1514 13, // 0: luci.analysis.v1.TestVariantBranchRaw.variant:type_name -> luci.analysis.v1.Variant 1515 14, // 1: luci.analysis.v1.TestVariantBranchRaw.ref:type_name -> luci.analysis.v1.SourceRef 1516 15, // 2: luci.analysis.v1.TestVariantBranchRaw.finalized_segments:type_name -> google.protobuf.Any 1517 15, // 3: luci.analysis.v1.TestVariantBranchRaw.finalizing_segment:type_name -> google.protobuf.Any 1518 15, // 4: luci.analysis.v1.TestVariantBranchRaw.statistics:type_name -> google.protobuf.Any 1519 2, // 5: luci.analysis.v1.TestVariantBranchRaw.hot_buffer:type_name -> luci.analysis.v1.InputBuffer 1520 2, // 6: luci.analysis.v1.TestVariantBranchRaw.cold_buffer:type_name -> luci.analysis.v1.InputBuffer 1521 3, // 7: luci.analysis.v1.InputBuffer.verdicts:type_name -> luci.analysis.v1.PositionVerdict 1522 16, // 8: luci.analysis.v1.PositionVerdict.hour:type_name -> google.protobuf.Timestamp 1523 11, // 9: luci.analysis.v1.PositionVerdict.runs:type_name -> luci.analysis.v1.PositionVerdict.Run 1524 6, // 10: luci.analysis.v1.BatchGetTestVariantBranchResponse.test_variant_branches:type_name -> luci.analysis.v1.TestVariantBranch 1525 13, // 11: luci.analysis.v1.TestVariantBranch.variant:type_name -> luci.analysis.v1.Variant 1526 14, // 12: luci.analysis.v1.TestVariantBranch.ref:type_name -> luci.analysis.v1.SourceRef 1527 7, // 13: luci.analysis.v1.TestVariantBranch.segments:type_name -> luci.analysis.v1.Segment 1528 16, // 14: luci.analysis.v1.Segment.start_hour:type_name -> google.protobuf.Timestamp 1529 16, // 15: luci.analysis.v1.Segment.end_hour:type_name -> google.protobuf.Timestamp 1530 12, // 16: luci.analysis.v1.Segment.counts:type_name -> luci.analysis.v1.Segment.Counts 1531 10, // 17: luci.analysis.v1.QuerySourcePositionsResponse.source_positions:type_name -> luci.analysis.v1.SourcePosition 1532 17, // 18: luci.analysis.v1.SourcePosition.commit:type_name -> git.Commit 1533 18, // 19: luci.analysis.v1.SourcePosition.verdicts:type_name -> luci.analysis.v1.TestVerdict 1534 0, // 20: luci.analysis.v1.TestVariantBranches.GetRaw:input_type -> luci.analysis.v1.GetRawTestVariantBranchRequest 1535 4, // 21: luci.analysis.v1.TestVariantBranches.BatchGet:input_type -> luci.analysis.v1.BatchGetTestVariantBranchRequest 1536 8, // 22: luci.analysis.v1.TestVariantBranches.QuerySourcePositions:input_type -> luci.analysis.v1.QuerySourcePositionsRequest 1537 1, // 23: luci.analysis.v1.TestVariantBranches.GetRaw:output_type -> luci.analysis.v1.TestVariantBranchRaw 1538 5, // 24: luci.analysis.v1.TestVariantBranches.BatchGet:output_type -> luci.analysis.v1.BatchGetTestVariantBranchResponse 1539 9, // 25: luci.analysis.v1.TestVariantBranches.QuerySourcePositions:output_type -> luci.analysis.v1.QuerySourcePositionsResponse 1540 23, // [23:26] is the sub-list for method output_type 1541 20, // [20:23] is the sub-list for method input_type 1542 20, // [20:20] is the sub-list for extension type_name 1543 20, // [20:20] is the sub-list for extension extendee 1544 0, // [0:20] is the sub-list for field type_name 1545 } 1546 1547 func init() { file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_init() } 1548 func file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_init() { 1549 if File_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto != nil { 1550 return 1551 } 1552 file_go_chromium_org_luci_analysis_proto_v1_common_proto_init() 1553 file_go_chromium_org_luci_analysis_proto_v1_sources_proto_init() 1554 file_go_chromium_org_luci_analysis_proto_v1_test_verdict_proto_init() 1555 if !protoimpl.UnsafeEnabled { 1556 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { 1557 switch v := v.(*GetRawTestVariantBranchRequest); i { 1558 case 0: 1559 return &v.state 1560 case 1: 1561 return &v.sizeCache 1562 case 2: 1563 return &v.unknownFields 1564 default: 1565 return nil 1566 } 1567 } 1568 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { 1569 switch v := v.(*TestVariantBranchRaw); i { 1570 case 0: 1571 return &v.state 1572 case 1: 1573 return &v.sizeCache 1574 case 2: 1575 return &v.unknownFields 1576 default: 1577 return nil 1578 } 1579 } 1580 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { 1581 switch v := v.(*InputBuffer); i { 1582 case 0: 1583 return &v.state 1584 case 1: 1585 return &v.sizeCache 1586 case 2: 1587 return &v.unknownFields 1588 default: 1589 return nil 1590 } 1591 } 1592 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { 1593 switch v := v.(*PositionVerdict); i { 1594 case 0: 1595 return &v.state 1596 case 1: 1597 return &v.sizeCache 1598 case 2: 1599 return &v.unknownFields 1600 default: 1601 return nil 1602 } 1603 } 1604 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { 1605 switch v := v.(*BatchGetTestVariantBranchRequest); i { 1606 case 0: 1607 return &v.state 1608 case 1: 1609 return &v.sizeCache 1610 case 2: 1611 return &v.unknownFields 1612 default: 1613 return nil 1614 } 1615 } 1616 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { 1617 switch v := v.(*BatchGetTestVariantBranchResponse); i { 1618 case 0: 1619 return &v.state 1620 case 1: 1621 return &v.sizeCache 1622 case 2: 1623 return &v.unknownFields 1624 default: 1625 return nil 1626 } 1627 } 1628 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { 1629 switch v := v.(*TestVariantBranch); i { 1630 case 0: 1631 return &v.state 1632 case 1: 1633 return &v.sizeCache 1634 case 2: 1635 return &v.unknownFields 1636 default: 1637 return nil 1638 } 1639 } 1640 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { 1641 switch v := v.(*Segment); i { 1642 case 0: 1643 return &v.state 1644 case 1: 1645 return &v.sizeCache 1646 case 2: 1647 return &v.unknownFields 1648 default: 1649 return nil 1650 } 1651 } 1652 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { 1653 switch v := v.(*QuerySourcePositionsRequest); i { 1654 case 0: 1655 return &v.state 1656 case 1: 1657 return &v.sizeCache 1658 case 2: 1659 return &v.unknownFields 1660 default: 1661 return nil 1662 } 1663 } 1664 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { 1665 switch v := v.(*QuerySourcePositionsResponse); i { 1666 case 0: 1667 return &v.state 1668 case 1: 1669 return &v.sizeCache 1670 case 2: 1671 return &v.unknownFields 1672 default: 1673 return nil 1674 } 1675 } 1676 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { 1677 switch v := v.(*SourcePosition); i { 1678 case 0: 1679 return &v.state 1680 case 1: 1681 return &v.sizeCache 1682 case 2: 1683 return &v.unknownFields 1684 default: 1685 return nil 1686 } 1687 } 1688 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { 1689 switch v := v.(*PositionVerdict_Run); i { 1690 case 0: 1691 return &v.state 1692 case 1: 1693 return &v.sizeCache 1694 case 2: 1695 return &v.unknownFields 1696 default: 1697 return nil 1698 } 1699 } 1700 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { 1701 switch v := v.(*Segment_Counts); i { 1702 case 0: 1703 return &v.state 1704 case 1: 1705 return &v.sizeCache 1706 case 2: 1707 return &v.unknownFields 1708 default: 1709 return nil 1710 } 1711 } 1712 } 1713 type x struct{} 1714 out := protoimpl.TypeBuilder{ 1715 File: protoimpl.DescBuilder{ 1716 GoPackagePath: reflect.TypeOf(x{}).PkgPath(), 1717 RawDescriptor: file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDesc, 1718 NumEnums: 0, 1719 NumMessages: 13, 1720 NumExtensions: 0, 1721 NumServices: 1, 1722 }, 1723 GoTypes: file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_goTypes, 1724 DependencyIndexes: file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_depIdxs, 1725 MessageInfos: file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_msgTypes, 1726 }.Build() 1727 File_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto = out.File 1728 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_rawDesc = nil 1729 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_goTypes = nil 1730 file_go_chromium_org_luci_analysis_proto_v1_test_variant_branches_proto_depIdxs = nil 1731 } 1732 1733 // Reference imports to suppress errors if they are not otherwise used. 1734 var _ context.Context 1735 var _ grpc.ClientConnInterface 1736 1737 // This is a compile-time assertion to ensure that this generated file 1738 // is compatible with the grpc package it is being compiled against. 1739 const _ = grpc.SupportPackageIsVersion6 1740 1741 // TestVariantBranchesClient is the client API for TestVariantBranches service. 1742 // 1743 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. 1744 type TestVariantBranchesClient interface { 1745 // Retrieves the raw state of test variant branch analysis. 1746 // For reading test variant branch analyses from Spanner. 1747 // This enables us to inspect the state of a test variant branch 1748 // analysis in Spanner (which cannot easily inspected using SQL queries, 1749 // because the data is encoded). 1750 // This is currently only for LUCI Analysis admin users. 1751 GetRaw(ctx context.Context, in *GetRawTestVariantBranchRequest, opts ...grpc.CallOption) (*TestVariantBranchRaw, error) 1752 // Retrieves the current state of segments of test variant branch analysis in batches. 1753 BatchGet(ctx context.Context, in *BatchGetTestVariantBranchRequest, opts ...grpc.CallOption) (*BatchGetTestVariantBranchResponse, error) 1754 // Lists commits and the test verdicts at these commits, starting from a source position. 1755 QuerySourcePositions(ctx context.Context, in *QuerySourcePositionsRequest, opts ...grpc.CallOption) (*QuerySourcePositionsResponse, error) 1756 } 1757 type testVariantBranchesPRPCClient struct { 1758 client *prpc.Client 1759 } 1760 1761 func NewTestVariantBranchesPRPCClient(client *prpc.Client) TestVariantBranchesClient { 1762 return &testVariantBranchesPRPCClient{client} 1763 } 1764 1765 func (c *testVariantBranchesPRPCClient) GetRaw(ctx context.Context, in *GetRawTestVariantBranchRequest, opts ...grpc.CallOption) (*TestVariantBranchRaw, error) { 1766 out := new(TestVariantBranchRaw) 1767 err := c.client.Call(ctx, "luci.analysis.v1.TestVariantBranches", "GetRaw", in, out, opts...) 1768 if err != nil { 1769 return nil, err 1770 } 1771 return out, nil 1772 } 1773 1774 func (c *testVariantBranchesPRPCClient) BatchGet(ctx context.Context, in *BatchGetTestVariantBranchRequest, opts ...grpc.CallOption) (*BatchGetTestVariantBranchResponse, error) { 1775 out := new(BatchGetTestVariantBranchResponse) 1776 err := c.client.Call(ctx, "luci.analysis.v1.TestVariantBranches", "BatchGet", in, out, opts...) 1777 if err != nil { 1778 return nil, err 1779 } 1780 return out, nil 1781 } 1782 1783 func (c *testVariantBranchesPRPCClient) QuerySourcePositions(ctx context.Context, in *QuerySourcePositionsRequest, opts ...grpc.CallOption) (*QuerySourcePositionsResponse, error) { 1784 out := new(QuerySourcePositionsResponse) 1785 err := c.client.Call(ctx, "luci.analysis.v1.TestVariantBranches", "QuerySourcePositions", in, out, opts...) 1786 if err != nil { 1787 return nil, err 1788 } 1789 return out, nil 1790 } 1791 1792 type testVariantBranchesClient struct { 1793 cc grpc.ClientConnInterface 1794 } 1795 1796 func NewTestVariantBranchesClient(cc grpc.ClientConnInterface) TestVariantBranchesClient { 1797 return &testVariantBranchesClient{cc} 1798 } 1799 1800 func (c *testVariantBranchesClient) GetRaw(ctx context.Context, in *GetRawTestVariantBranchRequest, opts ...grpc.CallOption) (*TestVariantBranchRaw, error) { 1801 out := new(TestVariantBranchRaw) 1802 err := c.cc.Invoke(ctx, "/luci.analysis.v1.TestVariantBranches/GetRaw", in, out, opts...) 1803 if err != nil { 1804 return nil, err 1805 } 1806 return out, nil 1807 } 1808 1809 func (c *testVariantBranchesClient) BatchGet(ctx context.Context, in *BatchGetTestVariantBranchRequest, opts ...grpc.CallOption) (*BatchGetTestVariantBranchResponse, error) { 1810 out := new(BatchGetTestVariantBranchResponse) 1811 err := c.cc.Invoke(ctx, "/luci.analysis.v1.TestVariantBranches/BatchGet", in, out, opts...) 1812 if err != nil { 1813 return nil, err 1814 } 1815 return out, nil 1816 } 1817 1818 func (c *testVariantBranchesClient) QuerySourcePositions(ctx context.Context, in *QuerySourcePositionsRequest, opts ...grpc.CallOption) (*QuerySourcePositionsResponse, error) { 1819 out := new(QuerySourcePositionsResponse) 1820 err := c.cc.Invoke(ctx, "/luci.analysis.v1.TestVariantBranches/QuerySourcePositions", in, out, opts...) 1821 if err != nil { 1822 return nil, err 1823 } 1824 return out, nil 1825 } 1826 1827 // TestVariantBranchesServer is the server API for TestVariantBranches service. 1828 type TestVariantBranchesServer interface { 1829 // Retrieves the raw state of test variant branch analysis. 1830 // For reading test variant branch analyses from Spanner. 1831 // This enables us to inspect the state of a test variant branch 1832 // analysis in Spanner (which cannot easily inspected using SQL queries, 1833 // because the data is encoded). 1834 // This is currently only for LUCI Analysis admin users. 1835 GetRaw(context.Context, *GetRawTestVariantBranchRequest) (*TestVariantBranchRaw, error) 1836 // Retrieves the current state of segments of test variant branch analysis in batches. 1837 BatchGet(context.Context, *BatchGetTestVariantBranchRequest) (*BatchGetTestVariantBranchResponse, error) 1838 // Lists commits and the test verdicts at these commits, starting from a source position. 1839 QuerySourcePositions(context.Context, *QuerySourcePositionsRequest) (*QuerySourcePositionsResponse, error) 1840 } 1841 1842 // UnimplementedTestVariantBranchesServer can be embedded to have forward compatible implementations. 1843 type UnimplementedTestVariantBranchesServer struct { 1844 } 1845 1846 func (*UnimplementedTestVariantBranchesServer) GetRaw(context.Context, *GetRawTestVariantBranchRequest) (*TestVariantBranchRaw, error) { 1847 return nil, status.Errorf(codes.Unimplemented, "method GetRaw not implemented") 1848 } 1849 func (*UnimplementedTestVariantBranchesServer) BatchGet(context.Context, *BatchGetTestVariantBranchRequest) (*BatchGetTestVariantBranchResponse, error) { 1850 return nil, status.Errorf(codes.Unimplemented, "method BatchGet not implemented") 1851 } 1852 func (*UnimplementedTestVariantBranchesServer) QuerySourcePositions(context.Context, *QuerySourcePositionsRequest) (*QuerySourcePositionsResponse, error) { 1853 return nil, status.Errorf(codes.Unimplemented, "method QuerySourcePositions not implemented") 1854 } 1855 1856 func RegisterTestVariantBranchesServer(s prpc.Registrar, srv TestVariantBranchesServer) { 1857 s.RegisterService(&_TestVariantBranches_serviceDesc, srv) 1858 } 1859 1860 func _TestVariantBranches_GetRaw_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1861 in := new(GetRawTestVariantBranchRequest) 1862 if err := dec(in); err != nil { 1863 return nil, err 1864 } 1865 if interceptor == nil { 1866 return srv.(TestVariantBranchesServer).GetRaw(ctx, in) 1867 } 1868 info := &grpc.UnaryServerInfo{ 1869 Server: srv, 1870 FullMethod: "/luci.analysis.v1.TestVariantBranches/GetRaw", 1871 } 1872 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1873 return srv.(TestVariantBranchesServer).GetRaw(ctx, req.(*GetRawTestVariantBranchRequest)) 1874 } 1875 return interceptor(ctx, in, info, handler) 1876 } 1877 1878 func _TestVariantBranches_BatchGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1879 in := new(BatchGetTestVariantBranchRequest) 1880 if err := dec(in); err != nil { 1881 return nil, err 1882 } 1883 if interceptor == nil { 1884 return srv.(TestVariantBranchesServer).BatchGet(ctx, in) 1885 } 1886 info := &grpc.UnaryServerInfo{ 1887 Server: srv, 1888 FullMethod: "/luci.analysis.v1.TestVariantBranches/BatchGet", 1889 } 1890 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1891 return srv.(TestVariantBranchesServer).BatchGet(ctx, req.(*BatchGetTestVariantBranchRequest)) 1892 } 1893 return interceptor(ctx, in, info, handler) 1894 } 1895 1896 func _TestVariantBranches_QuerySourcePositions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { 1897 in := new(QuerySourcePositionsRequest) 1898 if err := dec(in); err != nil { 1899 return nil, err 1900 } 1901 if interceptor == nil { 1902 return srv.(TestVariantBranchesServer).QuerySourcePositions(ctx, in) 1903 } 1904 info := &grpc.UnaryServerInfo{ 1905 Server: srv, 1906 FullMethod: "/luci.analysis.v1.TestVariantBranches/QuerySourcePositions", 1907 } 1908 handler := func(ctx context.Context, req interface{}) (interface{}, error) { 1909 return srv.(TestVariantBranchesServer).QuerySourcePositions(ctx, req.(*QuerySourcePositionsRequest)) 1910 } 1911 return interceptor(ctx, in, info, handler) 1912 } 1913 1914 var _TestVariantBranches_serviceDesc = grpc.ServiceDesc{ 1915 ServiceName: "luci.analysis.v1.TestVariantBranches", 1916 HandlerType: (*TestVariantBranchesServer)(nil), 1917 Methods: []grpc.MethodDesc{ 1918 { 1919 MethodName: "GetRaw", 1920 Handler: _TestVariantBranches_GetRaw_Handler, 1921 }, 1922 { 1923 MethodName: "BatchGet", 1924 Handler: _TestVariantBranches_BatchGet_Handler, 1925 }, 1926 { 1927 MethodName: "QuerySourcePositions", 1928 Handler: _TestVariantBranches_QuerySourcePositions_Handler, 1929 }, 1930 }, 1931 Streams: []grpc.StreamDesc{}, 1932 Metadata: "go.chromium.org/luci/analysis/proto/v1/test_variant_branches.proto", 1933 }