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  }