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

Unified Diff: tools/bisect-perf-regression.py

Issue 295133002: Check build status by parsing tryserver buildbot JSON. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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
« no previous file with comments | « no previous file | tools/post_perf_builder_job.py » ('j') | tools/post_perf_builder_job.py » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/bisect-perf-regression.py
diff --git a/tools/bisect-perf-regression.py b/tools/bisect-perf-regression.py
index 51e639fbcbc125128bd727924118b5ac903595fa..b31b9638f5b43dbeb2398085123ebf6817fee9bd 100755
--- a/tools/bisect-perf-regression.py
+++ b/tools/bisect-perf-regression.py
@@ -54,7 +54,7 @@ import zipfile
sys.path.append(os.path.join(os.path.dirname(__file__), 'telemetry'))
import bisect_utils
-import post_perf_builder_job
+import post_perf_builder_job as bisect_builder
from telemetry.page import cloud_storage
# The additional repositories that might need to be bisected.
@@ -1623,15 +1623,18 @@ class BisectPerformanceMetrics(object):
return False
bot_name, build_timeout = GetBuilderNameAndBuildTime(self.opts.target_arch)
-
+ # Build number on the tryserver.
+ build_num = None
+ builder_host = self.opts.builder_host
+ builder_port = self.opts.builder_port
# Create a unique ID for each build request posted to try server builders.
# This ID is added to "Reason" property in build's json.
- # TODO: Use this id to track the build status.
- build_request_id = GetSHA1HexDigest('%s-%s' % (revision, patch))
+ build_request_id = GetSHA1HexDigest(
+ '%s-%s-%s' % (revision, patch, time.time()))
# Creates a try job description.
- job_args = {'host': self.opts.builder_host,
- 'port': self.opts.builder_port,
+ job_args = {'host': builder_host,
+ 'port': builder_port,
'revision': 'src@%s' % revision,
'bot': bot_name,
'name': build_request_id
@@ -1640,13 +1643,32 @@ class BisectPerformanceMetrics(object):
if patch:
job_args['patch'] = patch
# Posts job to build the revision on the server.
- if post_perf_builder_job.PostTryJob(job_args):
+ if bisect_builder.PostTryJob(job_args):
poll_interval = 60
+ status_check_interval = 600
+ last_status_check = time.time()
start_time = time.time()
while True:
qyearsley 2014/05/23 23:17:16 Suggestion: Would it be clearer if this wait-loop
res = condition()
qyearsley 2014/05/23 23:17:16 It's not obvious here that this condition function
if res:
return res
+ elapsed_status_check = time.time() - last_status_check
+ # To avoid overloading tryserver with status check requests, we check
+ # build status for every 10 mins.
+ if elapsed_status_check > status_check_interval:
+ last_status_check = time.time()
+ if not build_num:
+ # Get the build number on tryserver for the current build.
+ build_num = bisect_builder.GetBuildNumFromBuilder(
+ build_request_id, bot_name, builder_host, builder_port)
+ # Check the status of build using the build number.
+ # Note: Build is treated as PENDING if build number is not found
+ # on the the tryserver.
+ build_status, status_link = bisect_builder.GetBuildStatus(
+ build_num, bot_name, builder_host, builder_port)
+ if build_status == bisect_builder.FAILED:
+ raise RuntimeError('Failed to build revision %s, status link %s.' %
+ (revision, status_link))
elapsed_time = time.time() - start_time
if elapsed_time > build_timeout:
raise RuntimeError('Timed out while waiting %ds for %s build.' %
« no previous file with comments | « no previous file | tools/post_perf_builder_job.py » ('j') | tools/post_perf_builder_job.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698