Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1785)

Unified Diff: appengine/findit/waterfall/build_failure_analysis_pipelines.py

Issue 838003004: [Findit] Add three sub-pipelines to analyze build failure. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Just rebase. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: appengine/findit/waterfall/build_failure_analysis_pipelines.py
diff --git a/appengine/findit/waterfall/build_failure_analysis_pipelines.py b/appengine/findit/waterfall/build_failure_analysis_pipelines.py
index 972288159f2d67bcc577fd56baa5be633dae34d7..8ce1e92b961bc2ccff8d565996416904b87e14ce 100644
--- a/appengine/findit/waterfall/build_failure_analysis_pipelines.py
+++ b/appengine/findit/waterfall/build_failure_analysis_pipelines.py
@@ -11,6 +11,9 @@ from model.build_analysis import BuildAnalysis
from model.build_analysis_status import BuildAnalysisStatus
from waterfall.base_pipeline import BasePipeline
from waterfall.detect_first_failure_pipeline import DetectFirstFailurePipeline
+from waterfall.extract_signal_pipeline import ExtractSignalPipeline
+from waterfall.identify_culprit_pipeline import IdentifyCulpritPipeline
+from waterfall.pull_changelog_pipeline import PullChangelogPipeline
class BuildFailurePipeline(BasePipeline):
@@ -23,13 +26,15 @@ class BuildFailurePipeline(BasePipeline):
self.build_number = build_number
def finalized(self):
- analysis = BuildAnalysis.GetBuildAnalysis(
- self.master_name, self.builder_name, self.build_number)
+ # When this root pipeline or its sub-pipelines still run into any error
+ # after auto-retries, this root pipeline will be aborted. So, mark the
+ # analysis as ERROR. The analysis is created before the pipeline starts.
if self.was_aborted: # pragma: no cover
- analysis.status = BuildAnalysisStatus.ERROR
- else:
- analysis.status = BuildAnalysisStatus.ANALYZED
- analysis.put()
+ analysis = BuildAnalysis.GetBuildAnalysis(
+ self.master_name, self.builder_name, self.build_number)
+ if analysis: # In case the analysis is deleted manually.
+ analysis.status = BuildAnalysisStatus.ERROR
+ analysis.put()
# Arguments number differs from overridden method - pylint: disable=W0221
def run(self, master_name, builder_name, build_number):
@@ -40,7 +45,14 @@ class BuildFailurePipeline(BasePipeline):
analysis.start_time = datetime.utcnow()
analysis.put()
- yield DetectFirstFailurePipeline(master_name, builder_name, build_number)
+ # The yield statements below return PipelineFutures, which allow subsequent
+ # pipelines to refer to previous output values.
+ # https://github.com/GoogleCloudPlatform/appengine-pipelines/wiki/Python
+ failure_info = yield DetectFirstFailurePipeline(
+ master_name, builder_name, build_number)
+ change_logs = yield PullChangelogPipeline(failure_info)
+ signals = yield ExtractSignalPipeline(failure_info)
+ yield IdentifyCulpritPipeline(failure_info, change_logs, signals)
@ndb.transactional
« no previous file with comments | « appengine/findit/waterfall/build_failure_analysis.py ('k') | appengine/findit/waterfall/extract_signal_pipeline.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698