Documentation ¶
Index ¶
- Constants
- Variables
- func BuildWorkflow(ctx workflow.Context, params workflows.BuildParams) (*workflows.Build, error)
- func CheckCombinedCommitEqualActivity(ctx context.Context, lower, higher *common.CombinedCommit) (bool, error)
- func CollectAndUploadWorkflow(ctx workflow.Context, req *CollectAndUploadParams) error
- func CollectValuesActivity(ctx context.Context, run *workflows.TestRun, ...) ([]float64, error)
- func ComparePairwiseActivity(ctx context.Context, valuesA, valuesB []float64, dir compare.ImprovementDir) (*compare.ComparePairwiseResult, error)
- func FindAvailableBotsActivity(ctx context.Context, botConfig string, seed int64) ([]string, error)
- func FindMidCommitActivity(ctx context.Context, lower, higher *common.CombinedCommit) (*common.CombinedCommit, error)
- func PairwiseWorkflow(ctx workflow.Context, p *workflows.PairwiseParams) (*pinpoint_proto.PairwiseExecution, error)
- func PostBugCommentActivity(ctx context.Context, issueID int64, comment string) (bool, error)
- func PostBugCommentWorkflow(ctx workflow.Context, issueID int64, comment string) (bool, error)
- func ReportStatusActivity(ctx context.Context, issueID int, culprits []*pinpoint_proto.CombinedCommit) error
- func RunBenchmarkPairwiseWorkflow(ctx workflow.Context, firstRBP, secondRBP *RunBenchmarkParams, ...) (*workflows.PairwiseTestRun, error)
- func RunBenchmarkWorkflow(ctx workflow.Context, p *RunBenchmarkParams) (*workflows.TestRun, error)
- func RunTestAndExportWorkflow(ctx workflow.Context, req *TestAndExportParams) error
- func UploadResultsActivity(ctx context.Context, project, dataset, tableName string, results []*TestResult) error
- type BisectExecution
- type BisectRun
- type BisectRunIndex
- type BuildActivity
- func (bca *BuildActivity) CleanupBuildActivity(ctx context.Context, buildID int64, status buildbucketpb.Status, ...) error
- func (bca *BuildActivity) RetrieveBuildArtifactActivity(ctx context.Context, buildID int64, target, project string) (*apipb.CASReference, error)
- func (bca *BuildActivity) SearchOrBuildActivity(ctx context.Context, params workflows.BuildParams) (int64, error)
- func (bca *BuildActivity) WaitBuildCompletionActivity(ctx context.Context, buildID int64, project string) (buildbucketpb.Status, error)
- type CollectAndUploadParams
- type CombinedResults
- type CommitPairValues
- type CommitRangeTracker
- type CommitRun
- type CommitValues
- type MidpointHandlerKey
- type PairwiseCommitsRunnerParams
- type PairwiseRun
- type RunBenchmarkActivity
- func (rba *RunBenchmarkActivity) CleanupBenchmarkRunActivity(ctx context.Context, taskID string, state run_benchmark.State) error
- func (rba *RunBenchmarkActivity) IsTaskPairContinuousActivity(ctx context.Context, botID, taskID1, taskID2 string) (bool, error)
- func (rba *RunBenchmarkActivity) IsTaskPairOrderedActivity(ctx context.Context, taskID1, taskID2 string) (bool, error)
- func (rba *RunBenchmarkActivity) RetrieveTestCASActivity(ctx context.Context, taskID string) (*apipb.CASReference, error)
- func (rba *RunBenchmarkActivity) ScheduleTaskActivity(ctx context.Context, rbp *RunBenchmarkParams) (string, error)
- func (rba *RunBenchmarkActivity) WaitTaskAcceptedActivity(ctx context.Context, taskID string) (run_benchmark.State, error)
- func (rba *RunBenchmarkActivity) WaitTaskFinishedActivity(ctx context.Context, taskID string) (run_benchmark.State, error)
- func (rba *RunBenchmarkActivity) WaitTaskPendingActivity(ctx context.Context, taskID string) (run_benchmark.State, error)
- type RunBenchmarkParams
- type SingleCommitRunnerParams
- type TestAndExportParams
- type TestResult
Constants ¶
const ( Functional = "Functional" Performance = "Performance" )
Variables ¶
var MidpointHandlerContextKey = &MidpointHandlerKey{}
Functions ¶
func BuildWorkflow ¶
BuildWorkflow is a Workflow definition that creates a build artifact.
func CheckCombinedCommitEqualActivity ¶
func CheckCombinedCommitEqualActivity(ctx context.Context, lower, higher *common.CombinedCommit) (bool, error)
CheckCombinedCommitEqualActivity checks whether two combined commits are equal.
func CollectAndUploadWorkflow ¶
func CollectAndUploadWorkflow(ctx workflow.Context, req *CollectAndUploadParams) error
CollectAndUploadWorkflow coordinates fetching the test result artifacts from all Swarming tasks triggered by the RunTestAndExportWorkflow, gathering results from those executions by chart, and uplodaing those sample values to BQ.
func CollectValuesActivity ¶
func CollectValuesActivity(ctx context.Context, run *workflows.TestRun, benchmark, chart, aggMethod string) ([]float64, error)
CollectValuesActivity is an activity to collect sampled values from a single test run.
func ComparePairwiseActivity ¶
func ComparePairwiseActivity(ctx context.Context, valuesA, valuesB []float64, dir compare.ImprovementDir) (*compare.ComparePairwiseResult, error)
ComparePairwiseActivity wraps compare.ComparePairwise as a temporal activity
func FindAvailableBotsActivity ¶
FindAvailableBotsActivity fetches a list of free, alive and non quarantined bots per provided bot configuration for eg: android-go-wembley-perf
The function makes a swarming API call internally to fetch the desired bots. If successful, a slice of bot ids is returned
func FindMidCommitActivity ¶
func FindMidCommitActivity(ctx context.Context, lower, higher *common.CombinedCommit) (*common.CombinedCommit, error)
FindMidCommitActivity is an Activity that finds the middle point of two commits.
func PairwiseWorkflow ¶
func PairwiseWorkflow(ctx workflow.Context, p *workflows.PairwiseParams) (*pinpoint_proto.PairwiseExecution, error)
func PostBugCommentActivity ¶
PostBugCommentActivity wraps the call to Issuetracker's PostComment.
func PostBugCommentWorkflow ¶
TODO(sunxiaodi): Add a unit test for this workflow
func ReportStatusActivity ¶
func ReportStatusActivity(ctx context.Context, issueID int, culprits []*pinpoint_proto.CombinedCommit) error
ReportStatusActivity wraps the call to IssueTracker to report culprits. TODO(sunxiaodi@): Update this activity for culprit verification
func RunBenchmarkPairwiseWorkflow ¶
func RunBenchmarkPairwiseWorkflow(ctx workflow.Context, firstRBP, secondRBP *RunBenchmarkParams, first workflows.PairwiseOrder) (*workflows.PairwiseTestRun, error)
RunBenchmarkPairwiseWorkflow is a Workflow definition that schedules a pairwise of tasks, polls and retrieves the CAS for the RunBenchmarkParams defined. TODO(b/340247044): connect mutex lock to this workflow and lock the swarming resource from the same pinpoint job and other pinpoint jobs. After swarming tasks have scheduled, the mutex lock can be released and the rest of the workflow can proceed. This workflow will also not schedule swarming tasks until it obtains the lock on the swarming resource. TODO(sunxiaodi@): Convert this workflow to accept slice and replace RunBenchmarkWorkflow with this workflow.
func RunBenchmarkWorkflow ¶
RunBenchmarkWorkflow is a Workflow definition that schedules a single task, polls and retrieves the CAS for the RunBenchmarkParams defined.
func RunTestAndExportWorkflow ¶
func RunTestAndExportWorkflow(ctx workflow.Context, req *TestAndExportParams) error
RunTestAndExportWorkflow will build chrome, run tests and export the swarming task ids to BQ.
func UploadResultsActivity ¶
func UploadResultsActivity(ctx context.Context, project, dataset, tableName string, results []*TestResult) error
Types ¶
type BisectExecution ¶
type BisectExecution struct { JobId string // TODO(b/322203189): replace Culprits with DetailedCulprits. This field is used by the // catapult bisect UI write. Culprits []*pinpoint_proto.CombinedCommit // DetailedCulprits stores a list of culprits and the commit prior to the culprit. // Without this field, culprit verification would not know the commit prior to any culprit // and be unable to verify the correct pair of commits. DetailedCulprits []*pinpoint_proto.Culprit CreateTime *timestamppb.Timestamp Comparisons []*CombinedResults RunData []*BisectRun }
BisectExecution is a mirror of pinpoint_proto.BisectExecution, with additional raw data.
When this BisectExecution embeds pinpoint_proto.BisectExecution, it fails to store CommitPairValues and BisectRuns, which are used to curate the information for Catapult Pinpoint. TODO(b/322203189) - This is a temporary solution for backwards compatibilty to the Catapult UI and should be removed when the catapult package is deprecated.
func BisectWorkflow ¶
func BisectWorkflow(ctx workflow.Context, p *workflows.BisectParams) (be *BisectExecution, wkErr error)
BisectWorkflow is a Workflow definition that takes a range of git hashes and finds the culprit.
type BisectRun ¶
type BisectRun struct { CommitRun ScheduledRuns []scheduledRun }
BisectRun tracks current scheduled SingleCommitRun's and merges from other runs.
This is not thread-safe. Schedule and Update usually happens in an I/O nonblocking manner where they are invoked in the same thread vis select.
type BisectRunIndex ¶
type BisectRunIndex int
bisectRunTracker stores all the running bisect runs.
It keeps track of all the runs by indexes. The BisectRun will be updated from different future fulfillment. One can wait for a bisect run that's already triggered by a different bisection. This usually happens when the mid commit is computed and the result will be used for comparisions from both sides. This can also happen when one comparision requires more runs, and part of them is already triggered by another comparision.
type BuildActivity ¶
type BuildActivity struct{}
BuildActivity wraps Build Activities.
func (*BuildActivity) CleanupBuildActivity ¶
func (bca *BuildActivity) CleanupBuildActivity(ctx context.Context, buildID int64, status buildbucketpb.Status, project string) error
CleanupBuildActivity wraps BuildChromeClient.CancelBuild
func (*BuildActivity) RetrieveBuildArtifactActivity ¶
func (bca *BuildActivity) RetrieveBuildArtifactActivity(ctx context.Context, buildID int64, target, project string) (*apipb.CASReference, error)
RetrieveBuildArtifactActivity gets build artifacts.
func (*BuildActivity) SearchOrBuildActivity ¶
func (bca *BuildActivity) SearchOrBuildActivity(ctx context.Context, params workflows.BuildParams) (int64, error)
SearchOrBuildActivity searches for an existing build to reuse, or triggers a new one.
func (*BuildActivity) WaitBuildCompletionActivity ¶
func (bca *BuildActivity) WaitBuildCompletionActivity(ctx context.Context, buildID int64, project string) (buildbucketpb.Status, error)
WaitBuildCompletionActivity polls the build and waits until it is completed or errors.
type CollectAndUploadParams ¶
type CollectAndUploadParams struct { // Project is the Google Cloud Project (ie/ chromeperf), used for creating the // fully qualified BQ table name. Project string // Dataset is the BQ Dataset. Format is {project}.{dataset}. // Used for creating the fully qualified BQ table name. Dataset string // TableName is the name of the table within Dataset. Format is // {project}.{dataset}.{tableName}. Used for creating the fully qualified BQ // table name. TableName string // Benchmark is the benchmark name, ie/ Speedometer3. Benchmark string // WorkflowID is the ID of the Temporal Workflow. WorkflowId string }
CollectAndUploadParams contains required paramers for the CollectAndUploadWorkflow. This is the minimum set of parameters to collect results of the Swarming task runs, process them and upload to BigQuery.
type CombinedResults ¶
type CombinedResults struct { Result *compare.CompareResults OtherResult *compare.CompareResults // record the other comparison ResultType string // either Functional or Performance CommitPairValues CommitPairValues }
func CompareActivity ¶
func CompareActivity(ctx context.Context, allValues CommitPairValues, magnitude, errRate float64, direction compare.ImprovementDir) (*CombinedResults, error)
CompareActivity wraps compare.ComparePerformance and compare.CompareFunctional as activity
commitA and commitB are passed in to make it easier to see on the Temporal UI what two commits are being tested. Errors are recorded in the activity but the ErrorVerdict is not passed back to the main workflow.
type CommitPairValues ¶
type CommitPairValues struct { Lower CommitValues Higher CommitValues }
func GetAllDataForCompareLocalActivity ¶
func GetAllDataForCompareLocalActivity(ctx context.Context, lbr *BisectRun, hbr *BisectRun, chart string) (*CommitPairValues, error)
TODO(sunxiaodi@): Change GetAllDataForCompareLocalActivity to a regular function
type CommitRangeTracker ¶
type CommitRangeTracker struct { Lower BisectRunIndex Higher BisectRunIndex }
CommitRangeTracker stores a commit range as [Lower, Higher].
It stores bisect run as indexes as it needs to be serialized. The indexes are stable within the workflow thru bisectRunTracker.
func (CommitRangeTracker) CloneWithHigher ¶
func (t CommitRangeTracker) CloneWithHigher(higher BisectRunIndex) CommitRangeTracker
CloneWithHigher clones itself with the overriden higher index.
func (CommitRangeTracker) CloneWithLower ¶
func (t CommitRangeTracker) CloneWithLower(lower BisectRunIndex) CommitRangeTracker
CloneWithHigher clones itself with the overriden lower index.
type CommitRun ¶
type CommitRun struct { // The Chrome build associated with the commit. Build *workflows.Build // All the benchmark runs using the build. Runs []*workflows.TestRun }
CommitRun stores benchmark tests runs for a single commit
func SingleCommitRunner ¶
func SingleCommitRunner(ctx workflow.Context, sc *SingleCommitRunnerParams) (*CommitRun, error)
SingleCommitRunner is a Workflow definition.
SingleCommitRunner builds, runs and collects benchmark sampled values from one single commit.
func (*CommitRun) AllErrorValues ¶
type CommitValues ¶
type CommitValues struct { Commit *common.CombinedCommit Values []float64 ErrorValues []float64 }
type MidpointHandlerKey ¶
type MidpointHandlerKey struct{}
type PairwiseCommitsRunnerParams ¶
type PairwiseCommitsRunnerParams struct { SingleCommitRunnerParams // LeftCommit and RightCommit specify the two commits the pairwise runner will compare. // SingleCommitRunnerParams includes a field for only one commit. LeftCommit, RightCommit *common.CombinedCommit // The random seed used to generate pairs. Seed int64 }
PairwiseCommitsRunnerParams defines the parameters for PairwiseCommitsRunner workflow.
type PairwiseRun ¶
type PairwiseRun struct {
Left, Right CommitRun
// Order represents the order of the runs between Left and Right.
// 0 means Left went first and 1 means Right went first.
// The order is needed to handle pair failures. If a pair fails,
// another pair that went in the other order needs to be tossed
// from the data analysis to ensure balancing.
Order []workflows.PairwiseOrder
}
PairwiseRun is the output of the PairwiseCommitsRunnerWorkflow TODO(b/321306427): This struct assumes that the i-th Left and Right CommitRuns are part of the same pair. If this assumption breaks, consider refactoring this struct and the subsequent workflows to instead store a list of PairwiseTestRuns. Another potential reason for refactoring is if len(Order) != len(Left) or len(Right).
func PairwiseCommitsRunnerWorkflow ¶
func PairwiseCommitsRunnerWorkflow(ctx workflow.Context, pc PairwiseCommitsRunnerParams) (*PairwiseRun, error)
PairwiseCommitsRunnerWorkflow is a Workflow definition.
PairwiseCommitsRunner builds, runs and collects benchmark sampled values from several commits. It runs the tests in pairs to reduces sample noises.
type RunBenchmarkActivity ¶
type RunBenchmarkActivity struct { }
RunBenchmarkActivity wraps RunBenchmarkWorkflow in Activities
func (*RunBenchmarkActivity) CleanupBenchmarkRunActivity ¶
func (rba *RunBenchmarkActivity) CleanupBenchmarkRunActivity(ctx context.Context, taskID string, state run_benchmark.State) error
CleanupActivity wraps run_benchmark.Cancel
func (*RunBenchmarkActivity) IsTaskPairContinuousActivity ¶
func (*RunBenchmarkActivity) IsTaskPairOrderedActivity ¶
func (*RunBenchmarkActivity) RetrieveTestCASActivity ¶
func (rba *RunBenchmarkActivity) RetrieveTestCASActivity(ctx context.Context, taskID string) (*apipb.CASReference, error)
RetrieveTestCASActivity wraps retrieves task artifacts from CAS
func (*RunBenchmarkActivity) ScheduleTaskActivity ¶
func (rba *RunBenchmarkActivity) ScheduleTaskActivity(ctx context.Context, rbp *RunBenchmarkParams) (string, error)
ScheduleTaskActivity wraps run_benchmark.Run
func (*RunBenchmarkActivity) WaitTaskAcceptedActivity ¶
func (rba *RunBenchmarkActivity) WaitTaskAcceptedActivity(ctx context.Context, taskID string) (run_benchmark.State, error)
WaitTaskAcceptedActivity polls the task until Swarming schedules the task. If the task is not scheduled, then it returns NO_RESOURCE. Note that there are other causes for NO_RESOURCE, but the solution is generally the same: schedule the run on a different, available bot. This activity is intended to only be used by pairwise workflow.
func (*RunBenchmarkActivity) WaitTaskFinishedActivity ¶
func (rba *RunBenchmarkActivity) WaitTaskFinishedActivity(ctx context.Context, taskID string) (run_benchmark.State, error)
WaitTaskFinishedActivity polls the task until it finishes or errors. Returns the status if the task finishes regardless of task success
func (*RunBenchmarkActivity) WaitTaskPendingActivity ¶
func (rba *RunBenchmarkActivity) WaitTaskPendingActivity(ctx context.Context, taskID string) (run_benchmark.State, error)
WaitTaskPendingActivity polls the task until it is no longer pending. Returns the status if the task stops pending regardless of task success
type RunBenchmarkParams ¶
type RunBenchmarkParams struct { // the Pinpoint job id JobID string // the swarming instance and cas digest hash and bytes location for the build BuildCAS *apipb.CASReference // commit hash Commit *common.CombinedCommit // device configuration BotConfig string // benchmark to test Benchmark string // story to test Story string // story tags for the test StoryTags string // additional dimensions for bot selection Dimensions map[string]string // iteration for the benchmark run. A few workflows have multiple iterations of // benchmark runs and this param comes in handy to get additional info of a specific run. // This is for debugging/informational purposes only. IterationIdx int32 // Chart is a story histogram in a Benchmark. Chart string // AggregationMethod is method to aggregate sampled values. // If empty, then the original values are returned. AggregationMethod string }
RunBenchmarkParams are the Temporal Workflow params for the RunBenchmarkWorkflow.
type SingleCommitRunnerParams ¶
type SingleCommitRunnerParams struct { // PinpointJobID is the Job ID to associate with the run. PinpointJobID string // BotConfig is the name of the device configuration, e.g. "linux-perf". BotConfig string // Benchmark is the name of the benchmark test. Benchmark string // Chart is a story histogram in a Benchmark. Chart string // Story is a story in a Benchmark. Story string // StoryTags is for the story in a Benchmark. StoryTags string // AggregationMethod is method to aggregate sampled values. // If empty, then the original values are returned. AggregationMethod string // The commit with optional deps override // Note: This field is only used in bisect // TODO(b/326352320): move CombinedCommit to a common package or rename midpoint CombinedCommit *common.CombinedCommit // The number of benchmark tests to run. // Note the collected sampled values can be more than iterations as each iteration produce // more than one samples. Iterations int32 // Finished number of iterations of benchmark test // In the bisect jobs, one commit run will start with an initial number of iteration // If the compare result is not significant enough, then extra number of iteration will be added to that commit // We need this attribute to record the finished number of iterations // Note: This field is only used in bisect FinishedIteration int32 // Available bot list BotIds []string }
SingleCommitRunnerParams defines the parameters for SingleCommitRunner workflow.
type TestAndExportParams ¶
type TestAndExportParams struct { // WorkflowID is the ID of the Temporal Workflow. WorkflowID string // Benchmark is the benchmark name, ie/ speedometer3. Benchmark string // Bot, also referred to as bot_configuration, is usually a bot name. Bot string // Git Hash associated with chromium/src to build. GitHash string // Iterations is the number of runs to trigger. // Note: Temporal will struggle and crash with more than 10,000 steps. Each // activity generates 3, so be cautious when running more than 1,000 iterations. // If you need to run more than 1,000, you can run several of these Test // AndExportWorkflows. Iterations int // Project is the Google Cloud Project (ie/ chromeperf), used for creating the // fully qualified BQ table name. Project string // Dataset is the BQ Dataset. Format is {project}.{dataset}. // Used for creating the fully qualified BQ table name. Dataset string // TableName is the name of the table within Dataset. Format is // {project}.{dataset}.{tableName}. Used for creating the fully qualified BQ // table name. TableName string }
TestAndExportParams contains information needed to build a version of Chrome and trigger the tests on Swarming.
type TestResult ¶
type TestResult struct { // WorkflowID is the ID of the Temporal Workflow. WorkflowID string `bigquery:"workflow_id"` // Bot, also referred to as bot_configuration, is usually a bot name. // See bot_configs/internal.json or external.json for the fully supported list. Bot string `bigquery:"bot"` // SwarmingTaskID is the ID of the swarming task associated with the test run. SwarmingTaskID string `bigquery:"swarming_task_id"` // Benchmark is the benchmark name, ie/ Speedometer3. Benchmark string `bigquery:"benchmark"` // Story is the story associated with the benchmark. Not all benchmarks have // stories (ie/ Speedometer3) Story string `bigquery:"story"` // Chart is the sub module to the benchmark. Chart string `bigquery:"chart"` // SampleValues is the list of values generated by the benchmark run. SampleValues []float64 `bigquery:"sample_values"` // TaskFailed indicates whether the benchmark run failed. TaskFailed bool `bigquery:"task_failed"` // PGOEnabled indicates whether PGO was enabled for the Chrome build. PGOEnabled bool `bigquery:"pgo_enabled"` // CreateTime is when the row data is generated. CreateTime time.Time `bigquery:"create_time"` }
TestResult represents the columns used by the BQ table.
func FetchAllSwarmingTasksActivity ¶
func FetchAllSwarmingTasksActivity(ctx context.Context, project, dataset, tableName, workflowId string) ([]*TestResult, error)
FetchAllSwarmingTasksActivity retrieves all Swarming task IDs for the workflow ID. It's expected that RunTestAndExportWorkflow has been run prior, where a Temporal workflow has triggered Swarming task IDs and has uploaded this information to BQ.
func GetAllSampleValuesActivity ¶
func GetAllSampleValuesActivity(ctx context.Context, benchmark string, task *TestResult) ([]*TestResult, error)
GetAllSampleValuesActivity goes through all Swarming tasks, finds the test result artifacts, and reads the values. The sample values are broken down by chart, so for one Swarming task (one benchmark execution), there will be multiple TestResult objects.