go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/analysis/proto/bq/clustered_failure_row.pb.go (about) 1 // Copyright 2022 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.31.0 18 // protoc v3.21.7 19 // source: go.chromium.org/luci/analysis/proto/bq/clustered_failure_row.proto 20 21 package bqpb 22 23 import ( 24 v1 "go.chromium.org/luci/analysis/proto/v1" 25 protoreflect "google.golang.org/protobuf/reflect/protoreflect" 26 protoimpl "google.golang.org/protobuf/runtime/protoimpl" 27 timestamppb "google.golang.org/protobuf/types/known/timestamppb" 28 reflect "reflect" 29 sync "sync" 30 ) 31 32 const ( 33 // Verify that this generated code is sufficiently up-to-date. 34 _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) 35 // Verify that runtime/protoimpl is sufficiently up-to-date. 36 _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) 37 ) 38 39 // ClusteredFailureRow represents a row in a BigQuery table for a clustered 40 // test failure. 41 type ClusteredFailureRow struct { 42 state protoimpl.MessageState 43 sizeCache protoimpl.SizeCache 44 unknownFields protoimpl.UnknownFields 45 46 // The LUCI project that the test failure belongs to. 47 Project string `protobuf:"bytes,39,opt,name=project,proto3" json:"project,omitempty"` 48 // The clustering algorithm which clustered the test failure. 49 ClusterAlgorithm string `protobuf:"bytes,1,opt,name=cluster_algorithm,json=clusterAlgorithm,proto3" json:"cluster_algorithm,omitempty"` 50 // The algorithm-defined cluster ID. Together with the cluster algorithm, 51 // this uniquely defines a cluster the test failure was clustered into. 52 // 53 // Note that each test failure may appear in multiple clusters (due to 54 // the presence of multiple clustering algorithms), but each clustering 55 // algorithm may only cluster the test result into one cluster. 56 // 57 // Note that the cluster ID is split over two fields (cluster_algorithm, 58 // cluster_id), rather than as one field with a record type, so that 59 // BigQuery clustering can be defined over the ID (not possible if a 60 // record type was used). 61 ClusterId string `protobuf:"bytes,2,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` 62 // The test results system from which the test originated. 63 // 64 // Currently, the only valid value is "resultdb". 65 TestResultSystem string `protobuf:"bytes,3,opt,name=test_result_system,json=testResultSystem,proto3" json:"test_result_system,omitempty"` 66 // The invocation from which this test result was ingested. This is 67 // the top-level invocation that was ingested, an "invocation" being 68 // a container of test results as identified by the source test result 69 // system. 70 // 71 // For ResultDB, LUCI Analysis ingests invocations corresponding to 72 // buildbucket builds. 73 // 74 // All test results ingested from the same invocation (i.e. with the 75 // same ingested_invocation_id) will have the same partition time. 76 IngestedInvocationId string `protobuf:"bytes,21,opt,name=ingested_invocation_id,json=ingestedInvocationId,proto3" json:"ingested_invocation_id,omitempty"` 77 // The identity of the test result in the test results system. Together 78 // with the test results system and the ingested invocation ID, this uniquely 79 // identifies the failure that was clustered. 80 // 81 // In some test result systems (e.g. ResultDB), a test result might be 82 // included in multiple invocations. Where this occurs, the test result may be 83 // ingested by LUCI Analysis multiple times, once for each top-level 84 // invocation it appears in. The same test result may have different 85 // attributes (e.g. presubmit_run_owner) depending on which top-level 86 // invocation it is ingested under. 87 // 88 // For test results in ResultDB, the format is: 89 // "invocations/{INVOCATION_ID}/tests/{URL_ESCAPED_TEST_ID}/results/{RESULT_ID}" 90 // Where INVOCATION_ID, URL_ESCAPED_TEST_ID and RESULT_ID are values 91 // defined in ResultDB. 92 // 93 // Note that the test result ID is split over three fields 94 // (test_result_system, ingested_invocation_id, test_result_id), rather than 95 // as one field with a record type, so that BigQuery clustering can be defined 96 // over the ID (not possible if a record type was used). 97 TestResultId string `protobuf:"bytes,4,opt,name=test_result_id,json=testResultId,proto3" json:"test_result_id,omitempty"` 98 // Last Updated defines the version of test result-cluster inclusion status, 99 // as represented by this row. During its lifetime, due to changing 100 // failure association rules and clustering algorithm revisions, the 101 // clusters a test result is in may be updated. 102 // 103 // To achieve deletion in an append-optimised datastore like BigQuery, 104 // a new row will be exported for a given (cluster_algorithm, cluster_id, 105 // test_result_system, ingested_invocation_id, test_result_id) tuple with a 106 // later last_updated time that changes the is_included and/or 107 // is_included_with_high_priority fields. A scheduled query periodically 108 // purges superseded rows, to avoid excessive growth in the table. 109 // 110 // Clients should filter the rows they read to ensure they only use the 111 // rows with the latest last_updated time. 112 // 113 // The following is the definition of a view that correctly uses 114 // the last updated time column to query the table: 115 // 116 // SELECT 117 // ARRAY_AGG(cf ORDER BY last_updated DESC LIMIT 1)[OFFSET(0)] as row 118 // FROM clustered_failures cf 119 // -- Recommended: Apply restriction on partitions (e.g. last 14 days) as 120 // -- desired. 121 // -- WHERE partition_time >= TIMESTAMP_SUB(@as_at_time, INTERVAL 14 DAY) 122 // GROUP BY project, cluster_algorithm, cluster_id, test_result_system, ingested_invocation_id, test_result_id 123 // HAVING row.is_included 124 // 125 // This is based on the query design in [1]. 126 // [1]: https://cloud.google.com/blog/products/bigquery/performing-large-scale-mutations-in-bigquery 127 LastUpdated *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"` 128 // The test result partition time identifies the beginning of the test 129 // result retention period, and corresponds approximately to the time 130 // the test result was produced. 131 // 132 // It is guaranteed that all test results from one presubmit run 133 // will have the same partition time. It is also guaranteed that all 134 // test results from one build will have the same partition time (in 135 // case of builds associated with presubmit runs this was implied by 136 // previous guarantee, but for testing that occurs outside presubmit 137 // this is an added guarantee). 138 PartitionTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=partition_time,json=partitionTime,proto3" json:"partition_time,omitempty"` 139 // Whether the test result is included in the cluster. Set to false if 140 // the test result has been removed from the cluster. 141 // False values appear in BigQuery as NULL. 142 IsIncluded bool `protobuf:"varint,7,opt,name=is_included,json=isIncluded,proto3" json:"is_included,omitempty"` 143 // Whether the test result is included in the cluster with high priority. 144 // True if either: 145 // 1. this cluster is a bug cluster (i.e. cluster defined by failure 146 // association rule), OR 147 // 2. this cluster is a suggested cluster, and the test result is NOT 148 // also in a bug cluster. 149 // 150 // False values appear in BigQuery as NULL. 151 IsIncludedWithHighPriority bool `protobuf:"varint,8,opt,name=is_included_with_high_priority,json=isIncludedWithHighPriority,proto3" json:"is_included_with_high_priority,omitempty"` 152 // The chunk this failure was processed and stored in. Assigned by 153 // LUCI Analysis ingestion. 154 ChunkId string `protobuf:"bytes,9,opt,name=chunk_id,json=chunkId,proto3" json:"chunk_id,omitempty"` 155 // The zero-based index of this failure within the chunk. Assigned by 156 // LUCI Analysis ingestion. 157 ChunkIndex int64 `protobuf:"varint,10,opt,name=chunk_index,json=chunkIndex,proto3" json:"chunk_index,omitempty"` 158 // Security realm of the test result. 159 // For test results from ResultDB, this must be set. The format is 160 // "{LUCI_PROJECT}:{REALM_SUFFIX}", for example "chromium:ci". 161 Realm string `protobuf:"bytes,11,opt,name=realm,proto3" json:"realm,omitempty"` 162 // The unique identifier of the test. 163 // For test results from ResultDB, see luci.resultdb.v1.TestResult.test_id. 164 TestId string `protobuf:"bytes,12,opt,name=test_id,json=testId,proto3" json:"test_id,omitempty"` 165 // key:value pairs to specify the way of running a particular test. 166 // e.g. a specific bucket, builder and a test suite. 167 // For ResultDB, this is the known field. 168 Variant []*v1.StringPair `protobuf:"bytes,13,rep,name=variant,proto3" json:"variant,omitempty"` 169 // Metadata key value pairs for this test result. 170 // It might describe this particular execution or the test case. 171 // A key can be repeated. 172 Tags []*v1.StringPair `protobuf:"bytes,32,rep,name=tags,proto3" json:"tags,omitempty"` 173 // Hash of the variant. 174 // hex(sha256(”.join(sorted('%s:%s\n' for k, v in variant.items())))). 175 VariantHash string `protobuf:"bytes,14,opt,name=variant_hash,json=variantHash,proto3" json:"variant_hash,omitempty"` 176 // A failure reason describing why the test failed. 177 FailureReason *v1.FailureReason `protobuf:"bytes,15,opt,name=failure_reason,json=failureReason,proto3" json:"failure_reason,omitempty"` 178 // The bug tracking component corresponding to this test case, as identified 179 // by the test results system. If no information is available, this is 180 // unset. 181 BugTrackingComponent *v1.BugTrackingComponent `protobuf:"bytes,16,opt,name=bug_tracking_component,json=bugTrackingComponent,proto3" json:"bug_tracking_component,omitempty"` 182 // The point in time when the test case started to execute. 183 StartTime *timestamppb.Timestamp `protobuf:"bytes,17,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` 184 // The amount of time the test case took to execute, in seconds. 185 Duration float64 `protobuf:"fixed64,18,opt,name=duration,proto3" json:"duration,omitempty"` 186 // The exonerations applied to the test verdict. 187 // An empty list indicates the test verdict this test result was a part of 188 // was not exonerated. 189 Exonerations []*ClusteredFailureRow_TestExoneration `protobuf:"bytes,33,rep,name=exonerations,proto3" json:"exonerations,omitempty"` 190 // Identity of the presubmit run that contains this test result. 191 // This should be unique per "CQ+1"/"CQ+2" attempt on gerrit. 192 // 193 // One presumbit run MAY have many ingested invocation IDs (e.g. for its 194 // various tryjobs), but every ingested invocation ID only ever has one 195 // presubmit run ID (if any). 196 // 197 // All test results for the same presubmit run will have one 198 // partition_time. 199 // 200 // If the test result was not collected as part of a presubmit run, 201 // this is unset. 202 PresubmitRunId *v1.PresubmitRunId `protobuf:"bytes,20,opt,name=presubmit_run_id,json=presubmitRunId,proto3" json:"presubmit_run_id,omitempty"` 203 // The owner of the presubmit run (if any). 204 // This is the owner of the CL on which CQ+1/CQ+2 was clicked 205 // (even in case of presubmit run with multiple CLs). 206 // There is scope for this field to become an email address if privacy 207 // approval is obtained, until then it is "automation" (for automation 208 // service accounts) and "user" otherwise. 209 PresubmitRunOwner string `protobuf:"bytes,29,opt,name=presubmit_run_owner,json=presubmitRunOwner,proto3" json:"presubmit_run_owner,omitempty"` 210 // The mode of the presubmit run (if any). 211 // E.g. DRY_RUN, FULL_RUN, QUICK_DRY_RUN. 212 // If this test result does not relate to a presubmit run, this field 213 // is left as its default value (""). In BigQuery, this results in a 214 // NULL value. 215 PresubmitRunMode string `protobuf:"bytes,34,opt,name=presubmit_run_mode,json=presubmitRunMode,proto3" json:"presubmit_run_mode,omitempty"` 216 // The presubmit run's ending status. 217 // Notionally luci.analysis.v1.PresubmitRunStatus, but string so that 218 // we can chop off the "PRESUBMIT_RUN_STATUS_" prefix and have 219 // only the status, e.g. SUCCESS, FAILURE, CANCELED. 220 // If this test result does not relate to a presubmit run, this field 221 // is left as its default value (""). In BigQuery, this results in a 222 // NULL value. 223 PresubmitRunStatus string `protobuf:"bytes,35,opt,name=presubmit_run_status,json=presubmitRunStatus,proto3" json:"presubmit_run_status,omitempty"` 224 // The status of the build that contained this test result. Can be used 225 // to filter incomplete results (e.g. where build was cancelled or had 226 // an infra failure). Can also be used to filter builds with incomplete 227 // exonerations (e.g. build succeeded but some tests not exonerated). 228 // This is the build corresponding to ingested_invocation_id. 229 // Notionally luci.analysis.v1.BuildStatus, but string so that we can chop 230 // off the BUILD_STATUS_ prefix that would otherwise appear on every value. 231 BuildStatus string `protobuf:"bytes,36,opt,name=build_status,json=buildStatus,proto3" json:"build_status,omitempty"` 232 // Whether the build was critical to a presubmit run succeeding. 233 // If the build did not relate presubmit run (i.e. because it was a tryjob 234 // for a presubmit run), this is false. 235 // Note that both possible false values (from the build is not critical 236 // or because the build was not part of a presubmit run) appear in 237 // BigQuery as NULL. 238 // You can identify which of these cases applies by 239 // checking if presubmit_run_id is populated. 240 BuildCritical bool `protobuf:"varint,37,opt,name=build_critical,json=buildCritical,proto3" json:"build_critical,omitempty"` 241 // The zero-based index for this test result, in the sequence of the 242 // ingested invocation's results for this test variant. Within the sequence, 243 // test results are ordered by start_time and then by test result ID. 244 // The first test result is 0, the last test result is 245 // ingested_invocation_result_count - 1. 246 IngestedInvocationResultIndex int64 `protobuf:"varint,22,opt,name=ingested_invocation_result_index,json=ingestedInvocationResultIndex,proto3" json:"ingested_invocation_result_index,omitempty"` 247 // The number of test results having this test variant in the ingested 248 // invocation. 249 IngestedInvocationResultCount int64 `protobuf:"varint,23,opt,name=ingested_invocation_result_count,json=ingestedInvocationResultCount,proto3" json:"ingested_invocation_result_count,omitempty"` 250 // Is the ingested invocation blocked by this test variant? This is 251 // only true if all (non-skipped) test results for this test variant 252 // (in the ingested invocation) are unexpected failures. 253 // 254 // Exoneration does not factor into this value; check is_exonerated 255 // to see if the impact of this ingested invocation being blocked was 256 // mitigated by exoneration. 257 IsIngestedInvocationBlocked bool `protobuf:"varint,24,opt,name=is_ingested_invocation_blocked,json=isIngestedInvocationBlocked,proto3" json:"is_ingested_invocation_blocked,omitempty"` 258 // The identifier of the test run the test ran in. Test results in different 259 // test runs are generally considered independent as they should be unable 260 // to leak state to one another. 261 // 262 // In Chrome and Chrome OS, a test run logically corresponds to a swarming 263 // task that runs tests, but this ID is not necessarily the ID of that 264 // task, but rather any other ID that is unique per such task. 265 // 266 // If test result system is ResultDB, this is the ID of the ResultDB 267 // invocation the test result was immediately contained within, not including 268 // any "invocations/" prefix. 269 TestRunId string `protobuf:"bytes,25,opt,name=test_run_id,json=testRunId,proto3" json:"test_run_id,omitempty"` 270 // The zero-based index for this test result, in the sequence of results 271 // having this test variant and test run. Within the sequence, test 272 // results are ordered by start_time and then by test result ID. 273 // The first test result is 0, the last test result is 274 // test_run_result_count - 1. 275 TestRunResultIndex int64 `protobuf:"varint,26,opt,name=test_run_result_index,json=testRunResultIndex,proto3" json:"test_run_result_index,omitempty"` 276 // The number of test results having this test variant and test run. 277 TestRunResultCount int64 `protobuf:"varint,27,opt,name=test_run_result_count,json=testRunResultCount,proto3" json:"test_run_result_count,omitempty"` 278 // Is the test run blocked by this test variant? This is only true if all 279 // (non-skipped) test results for this test variant (in the test run) 280 // are unexpected failures. 281 // 282 // Exoneration does not factor into this value; check is_exonerated 283 // to see if the impact of this test run being blocked was 284 // mitigated by exoneration. 285 IsTestRunBlocked bool `protobuf:"varint,28,opt,name=is_test_run_blocked,json=isTestRunBlocked,proto3" json:"is_test_run_blocked,omitempty"` 286 // The code sources tested, if known. 287 Sources *v1.Sources `protobuf:"bytes,40,opt,name=sources,proto3" json:"sources,omitempty"` 288 // The branch in source control that was tested, if known. 289 // For example, the `refs/heads/main` branch in the `chromium/src` repo 290 // hosted by `chromium.googlesource.com`. 291 // This is a subset of the information in the `sources` field. 292 SourceRef *v1.SourceRef `protobuf:"bytes,41,opt,name=source_ref,json=sourceRef,proto3" json:"source_ref,omitempty"` 293 // Hash of the source_ref field, as 16 lowercase hexadecimal characters. 294 // Can be used to uniquely identify a branch in a source code 295 // version control system. 296 SourceRefHash string `protobuf:"bytes,42,opt,name=source_ref_hash,json=sourceRefHash,proto3" json:"source_ref_hash,omitempty"` 297 // The gardener rotations the build is a part of. Corresponds to the 298 // `sheriff_rotations` field of the build input properties. 299 BuildGardenerRotations []string `protobuf:"bytes,43,rep,name=build_gardener_rotations,json=buildGardenerRotations,proto3" json:"build_gardener_rotations,omitempty"` 300 // Information about the test variant branch the result is from. 301 TestVariantBranch *ClusteredFailureRow_TestVariantBranch `protobuf:"bytes,44,opt,name=test_variant_branch,json=testVariantBranch,proto3" json:"test_variant_branch,omitempty"` 302 } 303 304 func (x *ClusteredFailureRow) Reset() { 305 *x = ClusteredFailureRow{} 306 if protoimpl.UnsafeEnabled { 307 mi := &file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_msgTypes[0] 308 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 309 ms.StoreMessageInfo(mi) 310 } 311 } 312 313 func (x *ClusteredFailureRow) String() string { 314 return protoimpl.X.MessageStringOf(x) 315 } 316 317 func (*ClusteredFailureRow) ProtoMessage() {} 318 319 func (x *ClusteredFailureRow) ProtoReflect() protoreflect.Message { 320 mi := &file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_msgTypes[0] 321 if protoimpl.UnsafeEnabled && x != nil { 322 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 323 if ms.LoadMessageInfo() == nil { 324 ms.StoreMessageInfo(mi) 325 } 326 return ms 327 } 328 return mi.MessageOf(x) 329 } 330 331 // Deprecated: Use ClusteredFailureRow.ProtoReflect.Descriptor instead. 332 func (*ClusteredFailureRow) Descriptor() ([]byte, []int) { 333 return file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDescGZIP(), []int{0} 334 } 335 336 func (x *ClusteredFailureRow) GetProject() string { 337 if x != nil { 338 return x.Project 339 } 340 return "" 341 } 342 343 func (x *ClusteredFailureRow) GetClusterAlgorithm() string { 344 if x != nil { 345 return x.ClusterAlgorithm 346 } 347 return "" 348 } 349 350 func (x *ClusteredFailureRow) GetClusterId() string { 351 if x != nil { 352 return x.ClusterId 353 } 354 return "" 355 } 356 357 func (x *ClusteredFailureRow) GetTestResultSystem() string { 358 if x != nil { 359 return x.TestResultSystem 360 } 361 return "" 362 } 363 364 func (x *ClusteredFailureRow) GetIngestedInvocationId() string { 365 if x != nil { 366 return x.IngestedInvocationId 367 } 368 return "" 369 } 370 371 func (x *ClusteredFailureRow) GetTestResultId() string { 372 if x != nil { 373 return x.TestResultId 374 } 375 return "" 376 } 377 378 func (x *ClusteredFailureRow) GetLastUpdated() *timestamppb.Timestamp { 379 if x != nil { 380 return x.LastUpdated 381 } 382 return nil 383 } 384 385 func (x *ClusteredFailureRow) GetPartitionTime() *timestamppb.Timestamp { 386 if x != nil { 387 return x.PartitionTime 388 } 389 return nil 390 } 391 392 func (x *ClusteredFailureRow) GetIsIncluded() bool { 393 if x != nil { 394 return x.IsIncluded 395 } 396 return false 397 } 398 399 func (x *ClusteredFailureRow) GetIsIncludedWithHighPriority() bool { 400 if x != nil { 401 return x.IsIncludedWithHighPriority 402 } 403 return false 404 } 405 406 func (x *ClusteredFailureRow) GetChunkId() string { 407 if x != nil { 408 return x.ChunkId 409 } 410 return "" 411 } 412 413 func (x *ClusteredFailureRow) GetChunkIndex() int64 { 414 if x != nil { 415 return x.ChunkIndex 416 } 417 return 0 418 } 419 420 func (x *ClusteredFailureRow) GetRealm() string { 421 if x != nil { 422 return x.Realm 423 } 424 return "" 425 } 426 427 func (x *ClusteredFailureRow) GetTestId() string { 428 if x != nil { 429 return x.TestId 430 } 431 return "" 432 } 433 434 func (x *ClusteredFailureRow) GetVariant() []*v1.StringPair { 435 if x != nil { 436 return x.Variant 437 } 438 return nil 439 } 440 441 func (x *ClusteredFailureRow) GetTags() []*v1.StringPair { 442 if x != nil { 443 return x.Tags 444 } 445 return nil 446 } 447 448 func (x *ClusteredFailureRow) GetVariantHash() string { 449 if x != nil { 450 return x.VariantHash 451 } 452 return "" 453 } 454 455 func (x *ClusteredFailureRow) GetFailureReason() *v1.FailureReason { 456 if x != nil { 457 return x.FailureReason 458 } 459 return nil 460 } 461 462 func (x *ClusteredFailureRow) GetBugTrackingComponent() *v1.BugTrackingComponent { 463 if x != nil { 464 return x.BugTrackingComponent 465 } 466 return nil 467 } 468 469 func (x *ClusteredFailureRow) GetStartTime() *timestamppb.Timestamp { 470 if x != nil { 471 return x.StartTime 472 } 473 return nil 474 } 475 476 func (x *ClusteredFailureRow) GetDuration() float64 { 477 if x != nil { 478 return x.Duration 479 } 480 return 0 481 } 482 483 func (x *ClusteredFailureRow) GetExonerations() []*ClusteredFailureRow_TestExoneration { 484 if x != nil { 485 return x.Exonerations 486 } 487 return nil 488 } 489 490 func (x *ClusteredFailureRow) GetPresubmitRunId() *v1.PresubmitRunId { 491 if x != nil { 492 return x.PresubmitRunId 493 } 494 return nil 495 } 496 497 func (x *ClusteredFailureRow) GetPresubmitRunOwner() string { 498 if x != nil { 499 return x.PresubmitRunOwner 500 } 501 return "" 502 } 503 504 func (x *ClusteredFailureRow) GetPresubmitRunMode() string { 505 if x != nil { 506 return x.PresubmitRunMode 507 } 508 return "" 509 } 510 511 func (x *ClusteredFailureRow) GetPresubmitRunStatus() string { 512 if x != nil { 513 return x.PresubmitRunStatus 514 } 515 return "" 516 } 517 518 func (x *ClusteredFailureRow) GetBuildStatus() string { 519 if x != nil { 520 return x.BuildStatus 521 } 522 return "" 523 } 524 525 func (x *ClusteredFailureRow) GetBuildCritical() bool { 526 if x != nil { 527 return x.BuildCritical 528 } 529 return false 530 } 531 532 func (x *ClusteredFailureRow) GetIngestedInvocationResultIndex() int64 { 533 if x != nil { 534 return x.IngestedInvocationResultIndex 535 } 536 return 0 537 } 538 539 func (x *ClusteredFailureRow) GetIngestedInvocationResultCount() int64 { 540 if x != nil { 541 return x.IngestedInvocationResultCount 542 } 543 return 0 544 } 545 546 func (x *ClusteredFailureRow) GetIsIngestedInvocationBlocked() bool { 547 if x != nil { 548 return x.IsIngestedInvocationBlocked 549 } 550 return false 551 } 552 553 func (x *ClusteredFailureRow) GetTestRunId() string { 554 if x != nil { 555 return x.TestRunId 556 } 557 return "" 558 } 559 560 func (x *ClusteredFailureRow) GetTestRunResultIndex() int64 { 561 if x != nil { 562 return x.TestRunResultIndex 563 } 564 return 0 565 } 566 567 func (x *ClusteredFailureRow) GetTestRunResultCount() int64 { 568 if x != nil { 569 return x.TestRunResultCount 570 } 571 return 0 572 } 573 574 func (x *ClusteredFailureRow) GetIsTestRunBlocked() bool { 575 if x != nil { 576 return x.IsTestRunBlocked 577 } 578 return false 579 } 580 581 func (x *ClusteredFailureRow) GetSources() *v1.Sources { 582 if x != nil { 583 return x.Sources 584 } 585 return nil 586 } 587 588 func (x *ClusteredFailureRow) GetSourceRef() *v1.SourceRef { 589 if x != nil { 590 return x.SourceRef 591 } 592 return nil 593 } 594 595 func (x *ClusteredFailureRow) GetSourceRefHash() string { 596 if x != nil { 597 return x.SourceRefHash 598 } 599 return "" 600 } 601 602 func (x *ClusteredFailureRow) GetBuildGardenerRotations() []string { 603 if x != nil { 604 return x.BuildGardenerRotations 605 } 606 return nil 607 } 608 609 func (x *ClusteredFailureRow) GetTestVariantBranch() *ClusteredFailureRow_TestVariantBranch { 610 if x != nil { 611 return x.TestVariantBranch 612 } 613 return nil 614 } 615 616 type ClusteredFailureRow_TestExoneration struct { 617 state protoimpl.MessageState 618 sizeCache protoimpl.SizeCache 619 unknownFields protoimpl.UnknownFields 620 621 // Machine-readable reasons describing why the test failure was exonerated 622 // (if any). 623 Reason v1.ExonerationReason `protobuf:"varint,1,opt,name=reason,proto3,enum=luci.analysis.v1.ExonerationReason" json:"reason,omitempty"` 624 } 625 626 func (x *ClusteredFailureRow_TestExoneration) Reset() { 627 *x = ClusteredFailureRow_TestExoneration{} 628 if protoimpl.UnsafeEnabled { 629 mi := &file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_msgTypes[1] 630 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 631 ms.StoreMessageInfo(mi) 632 } 633 } 634 635 func (x *ClusteredFailureRow_TestExoneration) String() string { 636 return protoimpl.X.MessageStringOf(x) 637 } 638 639 func (*ClusteredFailureRow_TestExoneration) ProtoMessage() {} 640 641 func (x *ClusteredFailureRow_TestExoneration) ProtoReflect() protoreflect.Message { 642 mi := &file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_msgTypes[1] 643 if protoimpl.UnsafeEnabled && x != nil { 644 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 645 if ms.LoadMessageInfo() == nil { 646 ms.StoreMessageInfo(mi) 647 } 648 return ms 649 } 650 return mi.MessageOf(x) 651 } 652 653 // Deprecated: Use ClusteredFailureRow_TestExoneration.ProtoReflect.Descriptor instead. 654 func (*ClusteredFailureRow_TestExoneration) Descriptor() ([]byte, []int) { 655 return file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDescGZIP(), []int{0, 0} 656 } 657 658 func (x *ClusteredFailureRow_TestExoneration) GetReason() v1.ExonerationReason { 659 if x != nil { 660 return x.Reason 661 } 662 return v1.ExonerationReason(0) 663 } 664 665 // Information about the (test,variant,source ref) the verdict is from. 666 // Source ref refers to the source branch that was tested, see 667 // `source_ref`. 668 type ClusteredFailureRow_TestVariantBranch struct { 669 state protoimpl.MessageState 670 sizeCache protoimpl.SizeCache 671 unknownFields protoimpl.UnknownFields 672 673 // The number of flaky verdicts in the preceding 24 hours. A verdict 674 // is considered flaky for this count if it has both expected and 675 // unexpected test results (excluding skips). Whether the verdict 676 // was exonerated is irrelevant. 677 FlakyVerdicts_24H int64 `protobuf:"varint,1,opt,name=flaky_verdicts_24h,json=flakyVerdicts24h,proto3" json:"flaky_verdicts_24h,omitempty"` 678 // The number of unexpected verdicts in the preceding 24 hours. A verdict 679 // is considered unexpected for this count if has only unexpected test 680 // results (excluding skips). Whether the verdict was exonerated is 681 // irrelevant. 682 UnexpectedVerdicts_24H int64 `protobuf:"varint,2,opt,name=unexpected_verdicts_24h,json=unexpectedVerdicts24h,proto3" json:"unexpected_verdicts_24h,omitempty"` 683 // The total number of verdicts in the preceding 24 hours, excluding 684 // verdicts with only skipped test results. 685 TotalVerdicts_24H int64 `protobuf:"varint,3,opt,name=total_verdicts_24h,json=totalVerdicts24h,proto3" json:"total_verdicts_24h,omitempty"` 686 } 687 688 func (x *ClusteredFailureRow_TestVariantBranch) Reset() { 689 *x = ClusteredFailureRow_TestVariantBranch{} 690 if protoimpl.UnsafeEnabled { 691 mi := &file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_msgTypes[2] 692 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 693 ms.StoreMessageInfo(mi) 694 } 695 } 696 697 func (x *ClusteredFailureRow_TestVariantBranch) String() string { 698 return protoimpl.X.MessageStringOf(x) 699 } 700 701 func (*ClusteredFailureRow_TestVariantBranch) ProtoMessage() {} 702 703 func (x *ClusteredFailureRow_TestVariantBranch) ProtoReflect() protoreflect.Message { 704 mi := &file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_msgTypes[2] 705 if protoimpl.UnsafeEnabled && x != nil { 706 ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) 707 if ms.LoadMessageInfo() == nil { 708 ms.StoreMessageInfo(mi) 709 } 710 return ms 711 } 712 return mi.MessageOf(x) 713 } 714 715 // Deprecated: Use ClusteredFailureRow_TestVariantBranch.ProtoReflect.Descriptor instead. 716 func (*ClusteredFailureRow_TestVariantBranch) Descriptor() ([]byte, []int) { 717 return file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDescGZIP(), []int{0, 1} 718 } 719 720 func (x *ClusteredFailureRow_TestVariantBranch) GetFlakyVerdicts_24H() int64 { 721 if x != nil { 722 return x.FlakyVerdicts_24H 723 } 724 return 0 725 } 726 727 func (x *ClusteredFailureRow_TestVariantBranch) GetUnexpectedVerdicts_24H() int64 { 728 if x != nil { 729 return x.UnexpectedVerdicts_24H 730 } 731 return 0 732 } 733 734 func (x *ClusteredFailureRow_TestVariantBranch) GetTotalVerdicts_24H() int64 { 735 if x != nil { 736 return x.TotalVerdicts_24H 737 } 738 return 0 739 } 740 741 var File_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto protoreflect.FileDescriptor 742 743 var file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDesc = []byte{ 744 0x0a, 0x42, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 745 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 746 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x71, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 747 0x65, 0x64, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x6f, 0x77, 0x2e, 0x70, 748 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 749 0x73, 0x69, 0x73, 0x2e, 0x62, 0x71, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 750 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 751 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x33, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 752 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 753 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 754 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x34, 0x67, 0x6f, 755 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 756 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 757 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 758 0x74, 0x6f, 0x1a, 0x3b, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 759 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 760 0x73, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x66, 0x61, 0x69, 0x6c, 0x75, 761 0x72, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 762 0xbc, 0x12, 0x0a, 0x13, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x46, 0x61, 0x69, 763 0x6c, 0x75, 0x72, 0x65, 0x52, 0x6f, 0x77, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 764 0x63, 0x74, 0x18, 0x27, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 765 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x67, 766 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6c, 767 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x1d, 768 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 769 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2c, 0x0a, 770 0x12, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x79, 0x73, 771 0x74, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x74, 0x65, 0x73, 0x74, 0x52, 772 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x34, 0x0a, 0x16, 0x69, 773 0x6e, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 774 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x69, 0x6e, 0x67, 775 0x65, 0x73, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 776 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 777 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x65, 0x73, 0x74, 0x52, 778 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 779 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 780 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 781 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 782 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 783 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 784 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 785 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 786 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 787 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 788 0x69, 0x73, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x12, 0x42, 0x0a, 0x1e, 0x69, 0x73, 789 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x68, 790 0x69, 0x67, 0x68, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 791 0x28, 0x08, 0x52, 0x1a, 0x69, 0x73, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x57, 0x69, 792 0x74, 0x68, 0x48, 0x69, 0x67, 0x68, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x19, 793 0x0a, 0x08, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 794 0x52, 0x07, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x68, 0x75, 795 0x6e, 0x6b, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 796 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 797 0x61, 0x6c, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x65, 0x61, 0x6c, 0x6d, 798 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 799 0x09, 0x52, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x07, 0x76, 0x61, 0x72, 800 0x69, 0x61, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6c, 0x75, 0x63, 801 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 802 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 803 0x74, 0x12, 0x30, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x20, 0x20, 0x03, 0x28, 0x0b, 0x32, 804 0x1c, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 805 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x69, 0x72, 0x52, 0x04, 0x74, 806 0x61, 0x67, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x5f, 0x68, 807 0x61, 0x73, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x72, 0x69, 0x61, 808 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x46, 0x0a, 0x0e, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 809 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 810 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 811 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 812 0x0d, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x5c, 813 0x0a, 0x16, 0x62, 0x75, 0x67, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 814 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 815 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 816 0x31, 0x2e, 0x42, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 817 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x14, 0x62, 0x75, 0x67, 0x54, 0x72, 0x61, 0x63, 0x6b, 818 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x0a, 819 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 820 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 821 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 822 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 823 0x69, 0x6f, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 824 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, 0x0c, 0x65, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 825 0x6f, 0x6e, 0x73, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6c, 0x75, 0x63, 0x69, 826 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x62, 0x71, 0x2e, 0x43, 0x6c, 0x75, 827 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x6f, 0x77, 828 0x2e, 0x54, 0x65, 0x73, 0x74, 0x45, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 829 0x52, 0x0c, 0x65, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4a, 830 0x0a, 0x10, 0x70, 0x72, 0x65, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 831 0x69, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 832 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x65, 0x73, 833 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 834 0x75, 0x62, 0x6d, 0x69, 0x74, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x72, 835 0x65, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 836 0x72, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x72, 0x65, 0x73, 0x75, 0x62, 0x6d, 837 0x69, 0x74, 0x52, 0x75, 0x6e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x72, 838 0x65, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 839 0x18, 0x22, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x65, 0x73, 0x75, 0x62, 0x6d, 0x69, 840 0x74, 0x52, 0x75, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x72, 0x65, 0x73, 841 0x75, 0x62, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 842 0x18, 0x23, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x72, 0x65, 0x73, 0x75, 0x62, 0x6d, 0x69, 843 0x74, 0x52, 0x75, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x75, 844 0x69, 0x6c, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, 845 0x52, 0x0b, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x25, 0x0a, 846 0x0e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x18, 847 0x25, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x43, 0x72, 0x69, 0x74, 848 0x69, 0x63, 0x61, 0x6c, 0x12, 0x47, 0x0a, 0x20, 0x69, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 849 0x5f, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 850 0x6c, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1d, 851 0x69, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 852 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x47, 0x0a, 853 0x20, 0x69, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 854 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 855 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1d, 0x69, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x65, 856 0x64, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 857 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x1e, 0x69, 0x73, 0x5f, 0x69, 0x6e, 0x67, 858 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 859 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 860 0x69, 0x73, 0x49, 0x6e, 0x67, 0x65, 0x73, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x76, 0x6f, 0x63, 0x61, 861 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x74, 862 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 863 0x52, 0x09, 0x74, 0x65, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x15, 0x74, 864 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x69, 865 0x6e, 0x64, 0x65, 0x78, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x65, 0x73, 0x74, 866 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x31, 867 0x0a, 0x15, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 868 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 869 0x65, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x75, 0x6e, 870 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x69, 0x73, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x75, 0x6e, 871 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 872 0x69, 0x73, 0x54, 0x65, 0x73, 0x74, 0x52, 0x75, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 873 0x12, 0x33, 0x0a, 0x07, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x28, 0x20, 0x01, 0x28, 874 0x0b, 0x32, 0x19, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 875 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x07, 0x73, 0x6f, 876 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 877 0x72, 0x65, 0x66, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x75, 0x63, 0x69, 878 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x75, 879 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 880 0x66, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x5f, 881 0x68, 0x61, 0x73, 0x68, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 882 0x63, 0x65, 0x52, 0x65, 0x66, 0x48, 0x61, 0x73, 0x68, 0x12, 0x38, 0x0a, 0x18, 0x62, 0x75, 0x69, 883 0x6c, 0x64, 0x5f, 0x67, 0x61, 0x72, 0x64, 0x65, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x74, 0x61, 884 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x62, 0x75, 0x69, 885 0x6c, 0x64, 0x47, 0x61, 0x72, 0x64, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 886 0x6f, 0x6e, 0x73, 0x12, 0x67, 0x0a, 0x13, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 887 0x61, 0x6e, 0x74, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 888 0x32, 0x37, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 889 0x2e, 0x62, 0x71, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x46, 0x61, 0x69, 890 0x6c, 0x75, 0x72, 0x65, 0x52, 0x6f, 0x77, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 0x69, 891 0x61, 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x11, 0x74, 0x65, 0x73, 0x74, 0x56, 892 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x1a, 0x4e, 0x0a, 0x0f, 893 0x54, 0x65, 0x73, 0x74, 0x45, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 894 0x3b, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 895 0x23, 0x2e, 0x6c, 0x75, 0x63, 0x69, 0x2e, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2e, 896 0x76, 0x31, 0x2e, 0x45, 0x78, 0x6f, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 897 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0xa7, 0x01, 0x0a, 898 0x11, 0x54, 0x65, 0x73, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x42, 0x72, 0x61, 0x6e, 899 0x63, 0x68, 0x12, 0x2c, 0x0a, 0x12, 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x64, 900 0x69, 0x63, 0x74, 0x73, 0x5f, 0x32, 0x34, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 901 0x66, 0x6c, 0x61, 0x6b, 0x79, 0x56, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x32, 0x34, 0x68, 902 0x12, 0x36, 0x0a, 0x17, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x76, 903 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x5f, 0x32, 0x34, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 904 0x03, 0x52, 0x15, 0x75, 0x6e, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x56, 0x65, 0x72, 905 0x64, 0x69, 0x63, 0x74, 0x73, 0x32, 0x34, 0x68, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x6f, 0x74, 0x61, 906 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x64, 0x69, 0x63, 0x74, 0x73, 0x5f, 0x32, 0x34, 0x68, 0x18, 0x03, 907 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x56, 0x65, 0x72, 0x64, 0x69, 908 0x63, 0x74, 0x73, 0x32, 0x34, 0x68, 0x4a, 0x04, 0x08, 0x13, 0x10, 0x14, 0x4a, 0x04, 0x08, 0x1f, 909 0x10, 0x20, 0x4a, 0x04, 0x08, 0x1e, 0x10, 0x1f, 0x4a, 0x04, 0x08, 0x26, 0x10, 0x27, 0x42, 0x2d, 910 0x5a, 0x2b, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 911 0x67, 0x2f, 0x6c, 0x75, 0x63, 0x69, 0x2f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x69, 0x73, 0x2f, 912 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x71, 0x3b, 0x62, 0x71, 0x70, 0x62, 0x62, 0x06, 0x70, 913 0x72, 0x6f, 0x74, 0x6f, 0x33, 914 } 915 916 var ( 917 file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDescOnce sync.Once 918 file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDescData = file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDesc 919 ) 920 921 func file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDescGZIP() []byte { 922 file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDescOnce.Do(func() { 923 file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDescData = protoimpl.X.CompressGZIP(file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDescData) 924 }) 925 return file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDescData 926 } 927 928 var file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_msgTypes = make([]protoimpl.MessageInfo, 3) 929 var file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_goTypes = []interface{}{ 930 (*ClusteredFailureRow)(nil), // 0: luci.analysis.bq.ClusteredFailureRow 931 (*ClusteredFailureRow_TestExoneration)(nil), // 1: luci.analysis.bq.ClusteredFailureRow.TestExoneration 932 (*ClusteredFailureRow_TestVariantBranch)(nil), // 2: luci.analysis.bq.ClusteredFailureRow.TestVariantBranch 933 (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp 934 (*v1.StringPair)(nil), // 4: luci.analysis.v1.StringPair 935 (*v1.FailureReason)(nil), // 5: luci.analysis.v1.FailureReason 936 (*v1.BugTrackingComponent)(nil), // 6: luci.analysis.v1.BugTrackingComponent 937 (*v1.PresubmitRunId)(nil), // 7: luci.analysis.v1.PresubmitRunId 938 (*v1.Sources)(nil), // 8: luci.analysis.v1.Sources 939 (*v1.SourceRef)(nil), // 9: luci.analysis.v1.SourceRef 940 (v1.ExonerationReason)(0), // 10: luci.analysis.v1.ExonerationReason 941 } 942 var file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_depIdxs = []int32{ 943 3, // 0: luci.analysis.bq.ClusteredFailureRow.last_updated:type_name -> google.protobuf.Timestamp 944 3, // 1: luci.analysis.bq.ClusteredFailureRow.partition_time:type_name -> google.protobuf.Timestamp 945 4, // 2: luci.analysis.bq.ClusteredFailureRow.variant:type_name -> luci.analysis.v1.StringPair 946 4, // 3: luci.analysis.bq.ClusteredFailureRow.tags:type_name -> luci.analysis.v1.StringPair 947 5, // 4: luci.analysis.bq.ClusteredFailureRow.failure_reason:type_name -> luci.analysis.v1.FailureReason 948 6, // 5: luci.analysis.bq.ClusteredFailureRow.bug_tracking_component:type_name -> luci.analysis.v1.BugTrackingComponent 949 3, // 6: luci.analysis.bq.ClusteredFailureRow.start_time:type_name -> google.protobuf.Timestamp 950 1, // 7: luci.analysis.bq.ClusteredFailureRow.exonerations:type_name -> luci.analysis.bq.ClusteredFailureRow.TestExoneration 951 7, // 8: luci.analysis.bq.ClusteredFailureRow.presubmit_run_id:type_name -> luci.analysis.v1.PresubmitRunId 952 8, // 9: luci.analysis.bq.ClusteredFailureRow.sources:type_name -> luci.analysis.v1.Sources 953 9, // 10: luci.analysis.bq.ClusteredFailureRow.source_ref:type_name -> luci.analysis.v1.SourceRef 954 2, // 11: luci.analysis.bq.ClusteredFailureRow.test_variant_branch:type_name -> luci.analysis.bq.ClusteredFailureRow.TestVariantBranch 955 10, // 12: luci.analysis.bq.ClusteredFailureRow.TestExoneration.reason:type_name -> luci.analysis.v1.ExonerationReason 956 13, // [13:13] is the sub-list for method output_type 957 13, // [13:13] is the sub-list for method input_type 958 13, // [13:13] is the sub-list for extension type_name 959 13, // [13:13] is the sub-list for extension extendee 960 0, // [0:13] is the sub-list for field type_name 961 } 962 963 func init() { file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_init() } 964 func file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_init() { 965 if File_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto != nil { 966 return 967 } 968 if !protoimpl.UnsafeEnabled { 969 file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { 970 switch v := v.(*ClusteredFailureRow); i { 971 case 0: 972 return &v.state 973 case 1: 974 return &v.sizeCache 975 case 2: 976 return &v.unknownFields 977 default: 978 return nil 979 } 980 } 981 file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { 982 switch v := v.(*ClusteredFailureRow_TestExoneration); i { 983 case 0: 984 return &v.state 985 case 1: 986 return &v.sizeCache 987 case 2: 988 return &v.unknownFields 989 default: 990 return nil 991 } 992 } 993 file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { 994 switch v := v.(*ClusteredFailureRow_TestVariantBranch); i { 995 case 0: 996 return &v.state 997 case 1: 998 return &v.sizeCache 999 case 2: 1000 return &v.unknownFields 1001 default: 1002 return nil 1003 } 1004 } 1005 } 1006 type x struct{} 1007 out := protoimpl.TypeBuilder{ 1008 File: protoimpl.DescBuilder{ 1009 GoPackagePath: reflect.TypeOf(x{}).PkgPath(), 1010 RawDescriptor: file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDesc, 1011 NumEnums: 0, 1012 NumMessages: 3, 1013 NumExtensions: 0, 1014 NumServices: 0, 1015 }, 1016 GoTypes: file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_goTypes, 1017 DependencyIndexes: file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_depIdxs, 1018 MessageInfos: file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_msgTypes, 1019 }.Build() 1020 File_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto = out.File 1021 file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_rawDesc = nil 1022 file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_goTypes = nil 1023 file_go_chromium_org_luci_analysis_proto_bq_clustered_failure_row_proto_depIdxs = nil 1024 }