| OLD | NEW |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | 1 # Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 from google.appengine.ext import ndb |
| 6 |
| 5 from common.git_repository import GitRepository | 7 from common.git_repository import GitRepository |
| 6 from common.http_client_appengine import HttpClientAppengine as HttpClient | 8 from common.http_client_appengine import HttpClientAppengine as HttpClient |
| 7 from common.pipeline_wrapper import BasePipeline | 9 from common.pipeline_wrapper import BasePipeline |
| 8 from model import analysis_status | 10 from model import analysis_status |
| 9 from model import result_status | 11 from model import result_status |
| 10 from model.wf_analysis import WfAnalysis | 12 from model.wf_analysis import WfAnalysis |
| 11 from model.wf_try_job import WfTryJob | 13 from model.wf_try_job import WfTryJob |
| 12 from model.wf_try_job_data import WfTryJobData | 14 from model.wf_try_job_data import WfTryJobData |
| 13 from waterfall.try_job_type import TryJobType | 15 from waterfall.try_job_type import TryJobType |
| 14 | 16 |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 else: # try_job_type is 'test'. | 253 else: # try_job_type is 'test'. |
| 252 culprit_map, failed_revisions = self._FindCulpritForEachTestFailure( | 254 culprit_map, failed_revisions = self._FindCulpritForEachTestFailure( |
| 253 blame_list, result) | 255 blame_list, result) |
| 254 culprits = self._GetCulpritInfo(failed_revisions) | 256 culprits = self._GetCulpritInfo(failed_revisions) |
| 255 if culprits: | 257 if culprits: |
| 256 self._UpdateCulpritMapWithCulpritInfo(culprit_map, culprits) | 258 self._UpdateCulpritMapWithCulpritInfo(culprit_map, culprits) |
| 257 result['culprit'] = culprit_map | 259 result['culprit'] = culprit_map |
| 258 try_job_data.culprits = self._GetCulpritDataForTest(culprit_map) | 260 try_job_data.culprits = self._GetCulpritDataForTest(culprit_map) |
| 259 try_job_data.put() | 261 try_job_data.put() |
| 260 | 262 |
| 261 # Store try job results. | 263 @ndb.transactional |
| 262 try_job_result = WfTryJob.Get(master_name, builder_name, build_number) | 264 def UpdateTryJobResult(): |
| 265 try_job_result = WfTryJob.Get(master_name, builder_name, build_number) |
| 266 if culprits: |
| 267 result_to_update = ( |
| 268 try_job_result.compile_results if |
| 269 try_job_type == TryJobType.COMPILE else |
| 270 try_job_result.test_results) |
| 271 if (result_to_update and |
| 272 result_to_update[-1]['try_job_id'] == try_job_id): |
| 273 result_to_update[-1].update(result) |
| 274 else: # pragma: no cover |
| 275 result_to_update.append(result) |
| 276 try_job_result.status = analysis_status.COMPLETED |
| 277 try_job_result.put() |
| 263 | 278 |
| 264 if culprits: | 279 @ndb.transactional |
| 265 result_to_update = ( | 280 def UpdateWfAnalysisWithTryJobResult(): |
| 266 try_job_result.compile_results if | 281 if not culprits: |
| 267 try_job_type == TryJobType.COMPILE else | 282 return |
| 268 try_job_result.test_results) | |
| 269 if (result_to_update and | |
| 270 result_to_update[-1]['try_job_id'] == try_job_id): | |
| 271 result_to_update[-1].update(result) | |
| 272 else: # pragma: no cover | |
| 273 result_to_update.append(result) | |
| 274 | 283 |
| 275 # Update analysis result and suspected CLs with results of this try job if | 284 # Update analysis result and suspected CLs with results of this try job if |
| 276 # culprits were found. | 285 # culprits were found. |
| 277 analysis = WfAnalysis.Get(master_name, builder_name, build_number) | 286 analysis = WfAnalysis.Get(master_name, builder_name, build_number) |
| 278 updated_result_status = _GetResultAnalysisStatus(analysis, result) | 287 updated_result_status = _GetResultAnalysisStatus(analysis, result) |
| 279 updated_suspected_cls = _GetSuspectedCLs(analysis, result) | 288 updated_suspected_cls = _GetSuspectedCLs(analysis, result) |
| 280 | 289 |
| 281 if (analysis.result_status != updated_result_status or | 290 if (analysis.result_status != updated_result_status or |
| 282 analysis.suspected_cls != updated_suspected_cls): | 291 analysis.suspected_cls != updated_suspected_cls): |
| 283 analysis.result_status = updated_result_status | 292 analysis.result_status = updated_result_status |
| 284 analysis.suspected_cls = updated_suspected_cls | 293 analysis.suspected_cls = updated_suspected_cls |
| 285 analysis.put() | 294 analysis.put() |
| 286 | 295 |
| 287 try_job_result.status = analysis_status.COMPLETED | 296 # Store try-job results. |
| 288 try_job_result.put() | 297 UpdateTryJobResult() |
| 298 # Add try-job results to WfAnalysis. |
| 299 UpdateWfAnalysisWithTryJobResult() |
| 289 | 300 |
| 290 return result.get('culprit') if result else None | 301 return result.get('culprit') if result else None |
| OLD | NEW |